Partial

RFC 5880 - Bidirectional Forwarding Detection (BFD)

Every requirement this repository extracted from RFC 5880, the tests bound to it, and what a reader has verified about them. This summary is enrolled and gated by ./le rfc check.

Overview

Positive

what Ze has

Tested both ways76.8%73 of 95 binding obligations

a positive test proves Ze does what the requirement demands and a negative one proves it refuses what the requirement forbids

One polarity plus reason8.4%8 of 95 binding obligations

the requirement admits no counter-case, so one polarity plus a recorded reason is the whole proof available for it

One polarity, unexcused0.0%0 of 95 binding obligations

one direction is tested, the other is neither tested nor excused, and nothing states which

Proven by a recorded break0.0%0 of 159 tagged units

a red was observed once under a recorded procedure, and the unit, the claim and the producer it rested on still hash to what was recorded. The break is not re-run. A test pair is not a proof until one has been observed

Neutral

measures that are neither good news nor bad

Gated MUSTs96of 119 this summary declares

MUST-level requirements the gate HOLDS. A population, not a result: the shares beside it are what says how Ze stands

Out of scope1of 96 gated MUSTs

a {not-applicable} annotation says the obligation does not bind Ze. Scope, not coverage: it is in no share below

Negative

what Ze owes

No test at all14.7%14 of 95 binding obligations

no test carries the requirement id, whether or not a gap states why

The 4 shares marked as a part above are the whole of the 95 obligations that bind Ze: they add to 100%. Proven by a recorded break is a share of TAGGED UNITS, a different population, so it is not one of them.

How to read the colors

A color names what the measure MEANS, not how well Ze scores on it. Green is a good outcome at any value, red is a bad one, and neither a population nor a scope count is an outcome, so both take no color. The number under the label is what says how far Ze has got.

CardTone hereWhy that color
Gated MUSTs neutral no color: a population is a scale, and a larger one is neither good news nor bad. It is the accounting total
Out of scope neutral no color: an obligation that never bound Ze is neither an achievement nor a failure, and counting it either way would be a claim
Tested both ways ok green at every value: a test pair is the outcome this gate exists to produce, and the share under the label is what says how far Ze has got
One polarity plus reason ok green at every value: where no counter-case exists, one polarity IS the complete answer, and a recorded reason is what the gate demands beside it
One polarity, unexcused ok green at zero, RED above it: half a proof with no reason for the other half
No test at all bad green at zero, RED above it: a binding obligation nothing exercises is a claim with nothing behind it, whether or not a reason is stated
Proven by a recorded break ok green at every value: an observed break is the outcome the discrimination gate exists to produce. The denominator is TAGGED UNITS, not obligations, so this share is not one of the parts above
Audit verdicts warn RED on the first weak, wrong or unimplemented verdict, amber while a verdict is no longer current or a gated MUST is unjudged, green when every one is judged sound and current

At a glance

FieldValue
Public status Partial
Enrolment Enrolled
Requirements 119
Gated MUST-level 96
Obligations that bind Ze 95
Not applicable, so out of scope 1
Declared gaps 14
Gated with no test 0
Nightly-only evidence 0
Test tags 159
Tagged units 159
Recorded audit verdicts 0
Discrimination records 0
Summary rfc/short/rfc5880.md
Requirement shard rfc/requirements/rfc5880.md
RFC text rfc/full/rfc5880.txt

Enrolment

Enrolled: Bidirectional Forwarding Detection (BFD)

What the public ledger says

Status: Partial

What the ledger says is covered
  • Control packet codec and the Section 6.8.6 structural reception checks, the Section 6.8.6 transition table, Section 6.8.1 state variables, Active/Passive roles, slow start and the Poll/Final sequence, the D-bit guard, detection and echo timers with Section 6.8.7 jitter, Simple Password and Keyed / Meticulous Keyed MD5/SHA1 authentication, echo scheduling and demultiplexing, the single-hop TTL gate, metrics and show commands
  • MUST-level requirements bound per requirement in rfc/requirements/rfc5880.md.
What the ledger says remains Fourteen MUST gaps, gated in rfc/short/rfc5880.md: Demand mode is not driven -- bfd.DemandMode has no writer and the stored remote D bit is never read, so no Poll is raised on a D-bit or content change and periodic transmission is never suppressed (RFC5880-6.6-2, 6.6-3, 6.8.6-14, 6.8.7-7, 6.8.17-1); periodic transmission also continues when bfd.RemoteMinRxInterval is zero (RFC5880-6.8.7-6); the two timing changes the RFC excepts from immediate effect are applied immediately instead of at Poll termination (RFC5880-6.8.3-3, 6.8.3-4); bfd.XmitAuthSeq starts at zero rather than a random value and bfd.AuthSeqKnown is never cleared after twice the Detection Time (RFC5880-6.8.1-11, 6.8.1-13); the meticulous replay check accepts any strictly greater sequence rather than exactly RcvAuthSeq+1 (RFC5880-6.7.3-10); there is no forwarding-plane-reset hook, so diagnostic 4 has no producer (RFC5880-6.8.15-1); and no congestion-control mechanism governs the transmit rate (RFC5880-7-1, 7-2). Final-packet rate limiting is absent by design and annotated not-applicable. IPv6 transport coverage is tracked with BFD.

Coverage

BucketCountWhat it counts
Positive and negative tests 73 one part of the gated population
Annotated instead of tested 23 one part of the gated population
One polarity only 0 one part of the gated population
No test and no annotation 0 one part of the gated population
Evidence that runs nightly only 0 an overlay: each of these is also counted by the part it falls in
Gated MUST-level requirements96every gated MUST falls in exactly one bucket above

Positive and negative tests (73): RFC5880-4.1-1, RFC5880-4.1-2, RFC5880-6.3-1, RFC5880-6.8.1-3, RFC5880-6.8.1-4, RFC5880-6.8.1-5, RFC5880-6.8.1-6, RFC5880-6.8.1-7, RFC5880-6.8.1-8, RFC5880-6.8.1-9, RFC5880-6.8.1-10, RFC5880-6.8.1-12, RFC5880-6.8.1-14, RFC5880-6.1-1, RFC5880-6.1-2, RFC5880-6.1-3, RFC5880-6.8.3-1, RFC5880-6.8.3-2, RFC5880-6.8.3-5, RFC5880-6.5-1, RFC5880-6.5-2, RFC5880-6.6-1, RFC5880-6.7-1, RFC5880-4.2-1, RFC5880-6.7.2-1, RFC5880-6.7.2-8, RFC5880-6.7.3-1, RFC5880-6.7.3-2, RFC5880-6.7.3-4, RFC5880-6.7.4-1, RFC5880-6.7.4-2, RFC5880-6.7.4-4, RFC5880-6.7.4-5, RFC5880-6.8.6-1, RFC5880-6.8.6-2, RFC5880-6.8.6-3, RFC5880-6.8.6-4, RFC5880-6.8.6-5, RFC5880-6.8.6-6, RFC5880-6.8.6-7, RFC5880-6.8.6-8, RFC5880-6.8.6-9, RFC5880-6.8.6-10, RFC5880-6.8.6-11, RFC5880-6.8.6-12, RFC5880-6.8.6-13, RFC5880-6.8.6-15, RFC5880-6.8.6-16, RFC5880-6.8.6-18, RFC5880-6.8.7-1, RFC5880-6.8.7-2, RFC5880-6.8.7-3, RFC5880-6.8.7-4, RFC5880-6.8.7-5, RFC5880-6.8.4-1, RFC5880-6.8.5-1, RFC5880-6.8.16-1, RFC5880-6.8.8-1, RFC5880-6.8.8-2, RFC5880-6.8.9-1, RFC5880-6.8.9-2, RFC5880-6.8.9-3, RFC5880-9-2, RFC5880-6.7.3-7, RFC5880-6.7.2-3, RFC5880-6.7.3-8, RFC5880-6.7.2-4, RFC5880-6.7.2-5, RFC5880-6.7.2-6, RFC5880-6.7.2-7, RFC5880-6.7.3-9, RFC5880-6.7.3-11, RFC5880-6.7.3-12

Annotated instead of tested (23): RFC5880-6.8.1-1, RFC5880-6.8.1-2, RFC5880-6.8.1-11, RFC5880-6.8.1-13, RFC5880-6.8.3-3, RFC5880-6.8.3-4, RFC5880-6.8.3-6, RFC5880-6.6-2, RFC5880-6.6-3, RFC5880-6.7.3-3, RFC5880-6.7.4-3, RFC5880-6.8.6-14, RFC5880-6.8.7-6, RFC5880-6.8.7-7, RFC5880-6.8.7-8, RFC5880-6.8.15-1, RFC5880-7-1, RFC5880-7-2, RFC5880-4.3-1, RFC5880-6.8.14-1, RFC5880-6.8.17-1, RFC5880-6.8.3-8, RFC5880-6.7.3-10

Requirements

RequirementLevelSectionTests
RFC5880-4.1-1Version field must be 1 (§4.1, §6.8.6)
MUST 4.1 - Generic BFD Control Packet Format
RFC5880-4.1-2Multipoint (M) bit must be zero on both transmit and receipt (§4.1)
MUST 4.1 - Generic BFD Control Packet Format
RFC5880-6.3-1My Discriminator must be nonzero and unique across all BFD sessions on the system (§6.3)
MUST 6.3 - Demultiplexing and the Discriminator Fields
RFC5880-6.8.1-1bfd.SessionState must be initialized to Down (§6.8.1)
MUST 6.8.1 - State Variables
positiveunit/verifyTestRFC5880InitStatesAreDown
negativeno testno negative test

{single-polarity}: Init assigns bfd.SessionState = Down unconditionally (internal/component/bfd/session/session.go:246) before any packet can be exchanged, so no non-conformant input exists to reject

RFC5880-6.8.1-2bfd.RemoteSessionState must be initialized to Down (§6.8.1)
MUST 6.8.1 - State Variables
positiveunit/verifyTestRFC5880InitStatesAreDown
negativeno testno negative test

{single-polarity}: Init assigns bfd.RemoteSessionState = Down unconditionally (internal/component/bfd/session/session.go:247), so there is no non-conformant input to reject

RFC5880-6.8.1-3bfd.LocalDiscr must be unique across all BFD sessions on the system, and nonzero (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-4bfd.RemoteDiscr must be initialized to zero (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-5bfd.RemoteDiscr must be set to zero if no valid packet received for one Detection Time (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-6bfd.LocalDiag must be initialized to zero (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-7bfd.DesiredMinTxInterval must be initialized to at least 1,000,000 microseconds (§6.8.1, §6.8.3)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-8bfd.RemoteMinRxInterval must be initialized to 1 (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-9bfd.RemoteDemandMode must be initialized to zero (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-10bfd.DetectMult must be a nonzero integer (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-11bfd.XmitAuthSeq must be initialized to a random 32-bit value (§6.8.1)
MUST 6.8.1 - State Variables
positiveno testno positive test
negativeno testno negative test

{gap}: SetAuth seeds bfd.XmitAuthSeq from the persister or leaves the Vars zero value (internal/component/bfd/session/auth.go:36) and Init never randomizes it (internal/component/bfd/session/session.go:245-259), so the initial transmit sequence is 0 rather than a random 32-bit value

RFC5880-6.8.1-12bfd.AuthSeqKnown must be initialized to zero (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.8.1-13bfd.AuthSeqKnown must be set to zero after no packets received for twice the Detection Time (§6.8.1)
MUST 6.8.1 - State Variables
positiveno testno positive test
negativeno testno negative test

{gap}: bfd.AuthSeqKnown is SeqState.initialized, which only Advance sets (internal/component/bfd/auth/meticulous.go:63-66) and nothing ever clears; CheckDetection clears the detection deadline alone (internal/component/bfd/session/timers.go:82), so the flag survives twice the Detection Time of silence

RFC5880-6.8.1-14Session state must be preserved for at least one Detection Time after last valid packet (§6.8.1)
MUST 6.8.1 - State Variables
RFC5880-6.1-1Active role system must send BFD Control packets regardless of whether packets have been received (§6.1)
MUST 6.1 - Overview
RFC5880-6.1-2Passive role system must not begin sending BFD packets until it has received one (§6.1)
MUST NOT 6.1 - Overview
RFC5880-6.1-3At least one system must take the Active role (§6.1)
MUST 6.1 - Overview
RFC5880-6.8.3-1When session state is not Up, bfd.DesiredMinTxInterval must be at least 1,000,000 microseconds (§6.8.3)
MUST 6.8.3 - Timer Manipulation
RFC5880-6.8.3-2If bfd.DesiredMinTxInterval or bfd.RequiredMinRxInterval changes, a Poll Sequence must be initiated (§6.8.3)
MUST 6.8.3 - Timer Manipulation
RFC5880-6.8.3-3If bfd.DesiredMinTxInterval is increased while Up, the actual TX interval must not change until the Poll Sequence terminates (§6.8.3)
MUST NOT 6.8.3 - Timer Manipulation
positiveno testno positive test
negativeno testno negative test

{gap}: ApplyEchoSlowdown raises bfd.DesiredMinTxInterval while the session is Up (internal/component/bfd/session/timers.go:235) and TransmitInterval returns the raised value on the very next call (internal/component/bfd/session/timers.go:44), so the longer interval takes effect before the Poll Sequence terminates

RFC5880-6.8.3-4If bfd.RequiredMinRxInterval is reduced while Up, the previous value must be used for detection time until the Poll terminates (§6.8.3)
MUST 6.8.3 - Timer Manipulation
positiveno testno positive test
negativeno testno negative test

{gap}: revertEchoSlowdownLocked reduces bfd.RequiredMinRxInterval while Up (internal/component/bfd/session/timers.go:249) and DetectionInterval immediately uses the reduced value (internal/component/bfd/session/timers.go:29); no previous value is retained until the Poll Sequence terminates

RFC5880-6.8.3-5If local system reduces TX interval due to bfd.RemoteMinRxInterval being reduced, it must honor the new interval immediately (§6.8.3)
MUST 6.8.3 - Timer Manipulation
RFC5880-6.8.3-6Multiple parameter changes requiring Poll Sequence must be communicated in a single packet, or a round-trip must elapse, or an F=0 packet must be received before starting another Poll (§6.8.3)
MUST 6.8.3 - Timer Manipulation
negativeno testno negative test

{single-polarity}: onStateChange applies both interval changes and raises exactly one Poll (internal/component/bfd/session/fsm.go:139-144), so ze always takes the single-packet option and no overlapping second Poll Sequence exists to reject

RFC5880-6.5-1A BFD Control packet must not have both Poll (P) and Final (F) bits set (§6.5)
MUST NOT 6.5 - The Poll Sequence
RFC5880-6.5-2If periodic Control packets are being sent, Poll Sequence must be performed by setting P bit on scheduled transmissions; additional packets must not be sent (§6.5)
MUST 6.5 - The Poll Sequence
RFC5880-6.6-1Demand (D) bit must not be set unless bfd.DemandMode is 1, bfd.SessionState is Up, and bfd.RemoteSessionState is Up (§6.6, §6.8.7)
MUST NOT 6.6 - Demand mode
RFC5880-6.6-2When the D bit value is to be changed, a Poll Sequence must be initiated (§6.6)
MUST 6.6 - Demand mode
positiveno testno positive test
negativeno testno negative test

{gap}: bfd.DemandMode has no writer in production code -- it is declared at internal/component/bfd/session/session.go:58 and read only by canSetDemand (internal/component/bfd/session/fsm.go:247) -- so no D-bit change path exists and none initiates a Poll Sequence

RFC5880-6.6-3If Demand mode is active on either system, a Poll Sequence must be initiated whenever next packet contents would differ (except P/F bits) (§6.6)
MUST 6.6 - Demand mode
positiveno testno positive test
negativeno testno negative test

{gap}: bfd.RemoteDemandMode is stored by Receive (internal/component/bfd/session/fsm.go:58) and read nowhere, and bfd.DemandMode has no writer (internal/component/bfd/session/session.go:58), so no code path starts a Poll when packet contents would change while Demand mode is active

RFC5880-6.7-1Implementations supporting authentication must support both types of SHA1 authentication (§6.7)
MUST 6.7 - Authentication
RFC5880-4.2-1Simple Password must be 1 to 16 bytes in length (§4.2, §6.7.2)
MUST 4.2 - Simple Password Authentication Section Format
RFC5880-6.7.2-1Simple Password management interface must accept ASCII strings (§6.7.2)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.2-8Simple Password Auth Type must be set to 1, Auth Len must be set to the proper length of 4 to 19 bytes (§6.7.2)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.3-1Keyed MD5 Auth Type must be set to 2 or 3, Auth Len must be 24 (§6.7.3)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.3-2Keyed MD5 Auth Key/Digest: MD5 digest must be calculated over entire BFD Control packet (§6.7.3)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.3-3Keyed MD5: secret key must not be carried in the packet (§6.7.3)
MUST NOT 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
negativeno testno negative test

{single-polarity}: Sign overwrites the key scratch with the computed digest before the packet is handed to the transport (internal/component/bfd/auth/sha1.go:85-87), so no key-bearing packet is ever emitted for a receiver to reject

RFC5880-6.7.3-4Meticulous Keyed MD5: bfd.XmitAuthSeq must be incremented for each packet (§6.7.3)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.4-1Keyed SHA1 Auth Type must be set to 4 or 5, Auth Len must be 28 (§6.7.4)
MUST 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
RFC5880-6.7.4-2SHA1 hash must be calculated over entire BFD Control packet (§6.7.4)
MUST 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
RFC5880-6.7.4-3Keyed SHA1: secret key must not be carried in the packet (§6.7.4)
MUST NOT 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
negativeno testno negative test

{single-polarity}: the SHA1 signer shares that producer with a 20-byte digest slot (internal/component/bfd/auth/sha1.go:85-87,193-195), so no key-bearing packet is emitted

RFC5880-6.7.4-4Meticulous Keyed SHA1: bfd.XmitAuthSeq must be incremented for each packet (§6.7.4)
MUST 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
RFC5880-6.7.4-5SHA1 key management interface must accept ASCII strings (§6.7.4)
MUST 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
RFC5880-6.8.6-1Reception: discard if Version != 1 (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-2Reception: discard if Length < 24 (A=0) or < 26 (A=1) (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-3Reception: discard if Length > encapsulating payload (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-4Reception: discard if Detect Mult == 0 (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-5Reception: discard if M bit is nonzero (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-6Reception: discard if My Discriminator == 0 (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-7Reception: if Your Discriminator nonzero, use it to select session; discard if no session found (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-8Reception: if Your Discriminator zero and State is not Down or AdminDown, discard (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-9Reception: if A=1 and bfd.AuthType is zero, discard (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-10Reception: if A=0 and bfd.AuthType is nonzero, discard (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-11Reception: if A=1, authenticate per §6.7 (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-12Reception: if Required Min Echo RX Interval == 0, cease Echo transmission (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-13Reception: if Poll in flight and F=1 received, terminate the Poll Sequence (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-14Reception: if remote Demand mode active (D=1, both Up), cease periodic Control packet transmission (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
positiveno testno positive test
negativeno testno negative test

{gap}: tick transmits whenever the periodic deadline has passed and never consults the remote Demand state (internal/component/bfd/engine/loop.go:192-201), so periodic Control packets continue after the peer sets D=1

RFC5880-6.8.6-15Reception: if remote Demand mode not active, send periodic Control packets (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-16Reception: if P=1, send Final packet immediately (§6.8.6, §6.8.7)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.6-18Reception: if Your Discriminator zero, select the session on a combination of other fields, which can include source addressing information, My Discriminator, and the ingress interface (§6.8.6)
MUST 6.8.6 - Reception of BFD Control Packets
RFC5880-6.8.7-1Transmission: must not transmit at interval less than max(bfd.DesiredMinTxInterval, bfd.RemoteMinRxInterval) less jitter (§6.8.7)
MUST NOT 6.8.7 - Transmitting BFD Control Packets
RFC5880-6.8.7-2Transmission: periodic TX must be jittered by 0-25% per packet (§6.8.7)
MUST 6.8.7 - Transmitting BFD Control Packets
RFC5880-6.8.7-3Transmission: if bfd.DetectMult == 1, interval must be 75-90% of negotiated interval (§6.8.7)
MUST 6.8.7 - Transmitting BFD Control Packets
RFC5880-6.8.7-4Transmission: TX interval must be recalculated whenever bfd.DesiredMinTxInterval or bfd.RemoteMinRxInterval changes (§6.8.7)
MUST 6.8.7 - Transmitting BFD Control Packets
RFC5880-6.8.7-5Transmission: must not transmit if bfd.RemoteDiscr is zero and system is Passive (§6.8.7)
MUST NOT 6.8.7 - Transmitting BFD Control Packets
RFC5880-6.8.7-6Transmission: must not periodically transmit if bfd.RemoteMinRxInterval is zero (§6.8.7)
MUST NOT 6.8.7 - Transmitting BFD Control Packets
positiveno testno positive test
negativeno testno negative test

{gap}: TransmitInterval substitutes the slow-start interval when the negotiated maximum is zero (internal/component/bfd/session/timers.go:45-47) and tick carries no bfd.RemoteMinRxInterval == 0 suppression (internal/component/bfd/engine/loop.go:192-201), so periodic transmission continues

RFC5880-6.8.7-7Transmission: must not periodically transmit if remote Demand mode active and no Poll in flight (§6.8.7)
MUST NOT 6.8.7 - Transmitting BFD Control Packets
positiveno testno positive test
negativeno testno negative test

{gap}: the same tick producer (internal/component/bfd/engine/loop.go:192-201) has no remote-Demand suppression, so periodic transmission continues while the remote Demand mode is active with no Poll in flight

RFC5880-6.8.7-8If rate limiting Final packets, advertised Desired Min TX Interval must be >= rate-limit interval (§6.8.7)
MUST 6.8.7 - Transmitting BFD Control Packets
positiveno testno positive test
negativeno testno negative test

{not-applicable}: ze does not rate-limit Final packets -- handleInbound sends the Final unconditionally on every received Poll (internal/component/bfd/engine/loop.go:140-142) and no rate limiter exists on that path, so the conditional advertised-interval floor never applies

RFC5880-6.8.4-1Detection time expired while Init or Up: set bfd.SessionState to Down, bfd.LocalDiag to 1 (§6.8.4)
MUST 6.8.4 - Calculating the Detection Time
RFC5880-6.8.5-1Echo function failure: set bfd.SessionState to Down, bfd.LocalDiag to 2 (§6.8.5)
MUST 6.8.5 - Detecting Failures with the Echo Function
RFC5880-6.8.15-1Forwarding plane reset: set bfd.LocalDiag to 4, bfd.SessionState to Down (§6.8.15)
MUST 6.8.15 - Forwarding Plane Reset
positiveno testno positive test
negativeno testno negative test

{gap}: packet.DiagForwardingPlaneReset (internal/component/bfd/packet/diag.go:21) has no producer, and the only external state-forcing entry points are AdminDown and AdminEnable (internal/component/bfd/session/fsm.go:180,192), which move the session to AdminDown or Down carrying the caller's diagnostic and are never called with code 4

RFC5880-6.8.16-1Administrative control: follow the enable/disable procedure (§6.8.16)
MUST 6.8.16 - Administrative Control
RFC5880-6.8.8-1Echo packets must be demultiplexed to the appropriate session (§6.8.8)
MUST 6.8.8 - Reception of BFD Echo Packets
RFC5880-6.8.8-2A means of detecting missing Echo packets must be implemented (§6.8.8)
MUST 6.8.8 - Reception of BFD Echo Packets
RFC5880-6.8.9-1Echo packets must not be transmitted when bfd.SessionState is not Up (§6.8.9)
MUST NOT 6.8.9 - Transmission of BFD Echo Packets
RFC5880-6.8.9-2Echo packets must not be transmitted unless remote Required Min Echo RX Interval is nonzero (§6.8.9)
MUST NOT 6.8.9 - Transmission of BFD Echo Packets
RFC5880-6.8.9-3Echo packet TX interval must not be less than remote Required Min Echo RX Interval (§6.8.9)
MUST NOT 6.8.9 - Transmission of BFD Echo Packets
RFC5880-7-1Multihop: a congestion control mechanism must be implemented (§7)
MUST 7 - Operational Considerations
positiveno testno positive test
negativeno testno negative test

{gap}: the transmit rate is derived solely from TransmitInterval plus jitter (internal/component/bfd/engine/loop.go:197-200) with no congestion-feedback input, and no congestion-control producer exists anywhere under internal/component/bfd

RFC5880-7-2Multihop: when congestion detected, BFD must reduce traffic generated (§7)
MUST 7 - Operational Considerations
positiveno testno positive test
negativeno testno negative test

{gap}: the same rate producer (internal/component/bfd/engine/loop.go:197-200) is the only authority over generated traffic and nothing reduces it in response to detected congestion

RFC5880-4.3-1Reserved byte in MD5/SHA1 auth section must be set to zero on transmit (§4.3, §4.4)
MUST 4.3
negativeno testno negative test

{single-polarity}: Sign hardcodes the Reserved byte to 0 (internal/component/bfd/auth/sha1.go:83) and no code path emits a non-zero value, so there is no non-conformant transmission to reject

RFC5880-6.8.1-15bfd.LocalDiscr should be set to a random value to improve security (§6.8.1)
SHOULD 6.8.1 - State Variables
positiveno testno positive test
negativeno testno negative test
RFC5880-6.4-1Advertise the lowest values of Required Min RX Interval and Required Min Echo RX Interval possible (§6.4)
SHOULD 6.4 - The Echo Function and Asymmetry
positiveno testno positive test
negativeno testno negative test
RFC5880-5-1Echo packets should include some form of authentication (§5)
SHOULD 5 - BFD Echo Packet Format
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.3-7When Echo function is active, set bfd.RequiredMinRxInterval to at least 1,000,000 microseconds (§6.8.3)
SHOULD 6.8.3 - Timer Manipulation
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.7-9A non-periodic Control packet should be sent when content would change (§6.8.7)
SHOULD 6.8.7 - Transmitting BFD Control Packets
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.1-1Authentication state change should only be allowed at most once without intervention (§6.7.1)
SHOULD 6.7.1 - Enabling and Disabling Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.1-2Authentication state should not change based on receipt of BFD Control packets (§6.7.1)
SHOULD NOT 6.7.1 - Enabling and Disabling Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.2-2Simple Password and key management should also allow hexadecimal binary string configuration (§6.7.2, §6.7.3, §6.7.4)
SHOULD 6.7.2 - Simple Password Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.3-5Keyed MD5/SHA1: bfd.XmitAuthSeq should be incremented on state change or content change (§6.7.3, §6.7.4)
SHOULD 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.16-2BFD Control packets should be transmitted for at least one Detection Time after transitioning to AdminDown (§6.8.16)
SHOULD 6.8.16 - Administrative Control
positiveno testno positive test
negativeno testno negative test
RFC5880-7-3Multihop: congestion control algorithm should be used even across single hops (§7)
SHOULD 7 - Operational Considerations
positiveno testno positive test
negativeno testno negative test
RFC5880-9-1Multihop: if run across multiple hops or insecure tunnel, Authentication Section should be utilized (§9)
SHOULD 9 - Security Considerations
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.18-1If no BFD Control packets received for a Detection Time, remote system should reset bfd.RemoteMinRxInterval to 1 (§6.8.18)
SHOULD 6.8.18 - Holding Down Sessions
positiveno testno positive test
negativeno testno negative test
RFC5880-6.2-1A session may be kept administratively down (§6.2)
MAY 6.2 - BFD State Machine
positiveno testno positive test
negativeno testno negative test
RFC5880-6.3-2A system may change its discriminator during a session (§6.3)
MAY 6.3 - Demultiplexing and the Discriminator Fields
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.6-17When Your Discriminator is zero, a new session may be created or the packet may be discarded (§6.8.6)
MAY 6.8.6 - Reception of BFD Control Packets
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.7-10Final packets may be rate-limited (§6.8.7)
MAY 6.8.7 - Transmitting BFD Control Packets
positiveno testno positive test
negativeno testno negative test
RFC5880-6.6-4Demand mode may be enabled or disabled at any time (§6.6)
MAY 6.6 - Demand mode
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.13-1Echo function may be enabled or disabled at any time (§6.8.13)
MAY 6.8.13 - Enabling or Disabling The Echo Function
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.3-6Keyed MD5: bfd.XmitAuthSeq may be incremented in a circular fashion (§6.7.3)
MAY 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.7.4-6Keyed SHA1: bfd.XmitAuthSeq may be incremented in a circular fashion (§6.7.4)
MAY 6.7.4 - Keyed SHA1 and Meticulous Keyed SHA1 Authentication
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.1-16Session state may be preserved longer than one Detection Time (§6.8.1)
MAY 6.8.1 - State Variables
positiveno testno positive test
negativeno testno negative test
RFC5880-6.8.16-3BFD Control packets may be transmitted indefinitely after transitioning to AdminDown (§6.8.16)
MAY 6.8.16 - Administrative Control
positiveno testno positive test
negativeno testno negative test
RFC5880-9-2For single-hop sessions, TTL or Hop Count MUST be set to maximum on transmit and checked equal to maximum on receipt (§9)
MUST 9 - Security Considerations
RFC5880-6.8.14-1If Demand mode is no longer active on the remote system, the local system MUST begin transmitting periodic BFD Control packets (§6.8.14)
MUST 6.8.14 - Enabling or Disabling Demand Mode
negativeno testno negative test

{single-polarity}: tick transmits periodic Control packets without consulting the remote D bit (internal/component/bfd/engine/loop.go:186-201), so a remote that stops asserting Demand keeps receiving them and there is no suppressed state to leave

RFC5880-6.8.17-1If concatenated path failure diagnostic must be communicated and remote Demand mode is active, a Poll Sequence MUST be initiated (§6.8.17)
MUST 6.8.17 - Concatenated Paths
positiveno testno positive test
negativeno testno negative test

{gap}: packet.DiagConcatPathDown (internal/component/bfd/packet/diag.go:23) has no producer and the remote Demand state stored at internal/component/bfd/session/fsm.go:58 is never read, so a concatenated-path failure neither sets the diagnostic nor initiates a Poll Sequence

RFC5880-6.8.3-8Timing parameter changes not explicitly excepted MUST be effected immediately (§6.8.3)
MUST 6.8.3 - Timer Manipulation
negativeno testno negative test

{single-polarity}: TransmitInterval and DetectionInterval are recomputed from the live bfd.* variables on every call (internal/component/bfd/session/timers.go:24-49), so an unexcepted timing change is in force at the next evaluation and no held-back value exists to reject

RFC5880-6.7.3-7MD5 key management interface MUST accept ASCII strings (§6.7.3)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.2-3Simple Password, MD5, and SHA1 Auth Key ID field MUST be set to the ID of the current authentication key (§6.7.2, §6.7.3, §6.7.4)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.3-8Simple Password, MD5, and SHA1 Sequence Number field MUST be set to bfd.XmitAuthSeq (§6.7.3, §6.7.4)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.2-4Reception: if Auth Type does not match bfd.AuthType, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.2-5Reception: if Auth Key ID does not match any configured authentication key, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.2-6Reception: if Auth Len does not match expected length, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.2-7Reception: if password does not match configured password for Simple Password, packet MUST be discarded (§6.7.2)
MUST 6.7.2 - Simple Password Authentication
RFC5880-6.7.3-9Reception: for Keyed MD5/SHA1, if Sequence Number is less than bfd.RcvAuthSeq (accounting for wrap), packet MUST be discarded (§6.7.3, §6.7.4)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.3-10Reception: for Meticulous Keyed MD5/SHA1, if Sequence Number is not exactly bfd.RcvAuthSeq+1 (accounting for wrap), packet MUST be discarded (§6.7.3, §6.7.4)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
positiveno testno positive test
negativeno testno negative test

{gap}: SeqState.Check accepts any sequence strictly greater than bfd.RcvAuthSeq for the meticulous variants (internal/component/bfd/auth/meticulous.go:47-51), so a packet whose sequence jumps past RcvAuthSeq+1 is accepted rather than discarded

RFC5880-6.7.3-11Reception: if digest/hash does not match computed value, packet MUST be discarded (§6.7.3, §6.7.4)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication
RFC5880-6.7.3-12Reception: if bfd.AuthSeqKnown is 0, it MUST be set to 1 and bfd.RcvAuthSeq MUST be set to received Sequence Number (§6.7.3, §6.7.4)
MUST 6.7.3 - Keyed MD5 and Meticulous Keyed MD5 Authentication

Gaps and untested MUSTs

RequirementStateReason
RFC5880-6.8.1-11 bfd.XmitAuthSeq must be initialized to a random 32-bit value (§6.8.1) {gap}, no test SetAuth seeds bfd.XmitAuthSeq from the persister or leaves the Vars zero value (internal/component/bfd/session/auth.go:36) and Init never randomizes it (internal/component/bfd/session/session.go:245-259), so the initial transmit sequence is 0 rather than a random 32-bit value
RFC5880-6.8.1-13 bfd.AuthSeqKnown must be set to zero after no packets received for twice the Detection Time (§6.8.1) {gap}, no test bfd.AuthSeqKnown is SeqState.initialized, which only Advance sets (internal/component/bfd/auth/meticulous.go:63-66) and nothing ever clears; CheckDetection clears the detection deadline alone (internal/component/bfd/session/timers.go:82), so the flag survives twice the Detection Time of silence
RFC5880-6.8.3-3 If bfd.DesiredMinTxInterval is increased while Up, the actual TX interval must not change until the Poll Sequence terminates (§6.8.3) {gap}, no test ApplyEchoSlowdown raises bfd.DesiredMinTxInterval while the session is Up (internal/component/bfd/session/timers.go:235) and TransmitInterval returns the raised value on the very next call (internal/component/bfd/session/timers.go:44), so the longer interval takes effect before the Poll Sequence terminates
RFC5880-6.8.3-4 If bfd.RequiredMinRxInterval is reduced while Up, the previous value must be used for detection time until the Poll terminates (§6.8.3) {gap}, no test revertEchoSlowdownLocked reduces bfd.RequiredMinRxInterval while Up (internal/component/bfd/session/timers.go:249) and DetectionInterval immediately uses the reduced value (internal/component/bfd/session/timers.go:29); no previous value is retained until the Poll Sequence terminates
RFC5880-6.6-2 When the D bit value is to be changed, a Poll Sequence must be initiated (§6.6) {gap}, no test bfd.DemandMode has no writer in production code -- it is declared at internal/component/bfd/session/session.go:58 and read only by canSetDemand (internal/component/bfd/session/fsm.go:247) -- so no D-bit change path exists and none initiates a Poll Sequence
RFC5880-6.6-3 If Demand mode is active on either system, a Poll Sequence must be initiated whenever next packet contents would differ (except P/F bits) (§6.6) {gap}, no test bfd.RemoteDemandMode is stored by Receive (internal/component/bfd/session/fsm.go:58) and read nowhere, and bfd.DemandMode has no writer (internal/component/bfd/session/session.go:58), so no code path starts a Poll when packet contents would change while Demand mode is active
RFC5880-6.8.6-14 Reception: if remote Demand mode active (D=1, both Up), cease periodic Control packet transmission (§6.8.6) {gap}, no test tick transmits whenever the periodic deadline has passed and never consults the remote Demand state (internal/component/bfd/engine/loop.go:192-201), so periodic Control packets continue after the peer sets D=1
RFC5880-6.8.7-6 Transmission: must not periodically transmit if bfd.RemoteMinRxInterval is zero (§6.8.7) {gap}, no test TransmitInterval substitutes the slow-start interval when the negotiated maximum is zero (internal/component/bfd/session/timers.go:45-47) and tick carries no bfd.RemoteMinRxInterval == 0 suppression (internal/component/bfd/engine/loop.go:192-201), so periodic transmission continues
RFC5880-6.8.7-7 Transmission: must not periodically transmit if remote Demand mode active and no Poll in flight (§6.8.7) {gap}, no test the same tick producer (internal/component/bfd/engine/loop.go:192-201) has no remote-Demand suppression, so periodic transmission continues while the remote Demand mode is active with no Poll in flight
RFC5880-6.8.7-8 If rate limiting Final packets, advertised Desired Min TX Interval must be >= rate-limit interval (§6.8.7) no test no test carries this requirement id; annotated {not-applicable}: ze does not rate-limit Final packets -- handleInbound sends the Final unconditionally on every received Poll (internal/component/bfd/engine/loop.go:140-142) and no rate limiter exists on that path, so the conditional advertised-interval floor never applies
RFC5880-6.8.15-1 Forwarding plane reset: set bfd.LocalDiag to 4, bfd.SessionState to Down (§6.8.15) {gap}, no test packet.DiagForwardingPlaneReset (internal/component/bfd/packet/diag.go:21) has no producer, and the only external state-forcing entry points are AdminDown and AdminEnable (internal/component/bfd/session/fsm.go:180,192), which move the session to AdminDown or Down carrying the caller's diagnostic and are never called with code 4
RFC5880-7-1 Multihop: a congestion control mechanism must be implemented (§7) {gap}, no test the transmit rate is derived solely from TransmitInterval plus jitter (internal/component/bfd/engine/loop.go:197-200) with no congestion-feedback input, and no congestion-control producer exists anywhere under internal/component/bfd
RFC5880-7-2 Multihop: when congestion detected, BFD must reduce traffic generated (§7) {gap}, no test the same rate producer (internal/component/bfd/engine/loop.go:197-200) is the only authority over generated traffic and nothing reduces it in response to detected congestion
RFC5880-6.8.17-1 If concatenated path failure diagnostic must be communicated and remote Demand mode is active, a Poll Sequence MUST be initiated (§6.8.17) {gap}, no test packet.DiagConcatPathDown (internal/component/bfd/packet/diag.go:23) has no producer and the remote Demand state stored at internal/component/bfd/session/fsm.go:58 is never read, so a concatenated-path failure neither sets the diagnostic nor initiates a Poll Sequence
RFC5880-6.7.3-10 Reception: for Meticulous Keyed MD5/SHA1, if Sequence Number is not exactly bfd.RcvAuthSeq+1 (accounting for wrap), packet MUST be discarded (§6.7.3, §6.7.4) {gap}, no test SeqState.Check accepts any sequence strictly greater than bfd.RcvAuthSeq for the meticulous variants (internal/component/bfd/auth/meticulous.go:47-51), so a packet whose sequence jumps past RcvAuthSeq+1 is accepted rather than discarded

Proof state

A tagged unit reads unproven where no discrimination record exists for it: nothing in this tree has been observed to break it, so the claim its tag makes is unproven.

RFC5880-4.1-1

Version field must be 1 (§4.1, §6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880VersionNotOneDiscarded unit/verify unproven
positive TestRFC5880VersionOneAccepted unit/verify unproven

RFC5880-4.1-2

Multipoint (M) bit must be zero on both transmit and receipt (§4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880MultipointSetDiscarded unit/verify unproven
positive TestRFC5880MultipointZeroAccepted unit/verify unproven

RFC5880-6.3-1

My Discriminator must be nonzero and unique across all BFD sessions on the system (§6.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DiscriminatorAllocatorSkipsReservedAndTaken unit/verify unproven
positive TestRFC5880DiscriminatorsAreNonZeroAndUnique unit/verify unproven

RFC5880-6.8.1-1

bfd.SessionState must be initialized to Down (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880InitStatesAreDown unit/verify unproven

RFC5880-6.8.1-2

bfd.RemoteSessionState must be initialized to Down (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880InitStatesAreDown unit/verify unproven

RFC5880-6.8.1-3

bfd.LocalDiscr must be unique across all BFD sessions on the system, and nonzero (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DiscriminatorAllocatorSkipsReservedAndTaken unit/verify unproven
positive TestRFC5880DiscriminatorsAreNonZeroAndUnique unit/verify unproven

RFC5880-6.8.1-4

bfd.RemoteDiscr must be initialized to zero (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880InitVariablesAreNotConstants unit/verify unproven
positive TestRFC5880InitVariableDefaults unit/verify unproven

RFC5880-6.8.1-5

bfd.RemoteDiscr must be set to zero if no valid packet received for one Detection Time (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880RemoteDiscrKeptOnNeighborSignaledDown unit/verify unproven
positive TestRFC5880RemoteDiscrClearedOnDetectionExpiry unit/verify unproven

RFC5880-6.8.1-6

bfd.LocalDiag must be initialized to zero (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880InitVariablesAreNotConstants unit/verify unproven
positive TestRFC5880InitVariableDefaults unit/verify unproven

RFC5880-6.8.1-7

bfd.DesiredMinTxInterval must be initialized to at least 1,000,000 microseconds (§6.8.1, §6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880SlowStartFloorLiftedWhenUp unit/verify unproven
positive TestRFC5880SlowStartFloorWhileNotUp unit/verify unproven

RFC5880-6.8.1-8

bfd.RemoteMinRxInterval must be initialized to 1 (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880InitVariablesAreNotConstants unit/verify unproven
positive TestRFC5880InitVariableDefaults unit/verify unproven

RFC5880-6.8.1-9

bfd.RemoteDemandMode must be initialized to zero (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880InitVariablesAreNotConstants unit/verify unproven
positive TestRFC5880InitVariableDefaults unit/verify unproven

RFC5880-6.8.1-10

bfd.DetectMult must be a nonzero integer (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DetectMultZeroRequestSubstituted unit/verify unproven
positive TestRFC5880DetectMultConfiguredValue unit/verify unproven

RFC5880-6.8.1-11

bfd.XmitAuthSeq must be initialized to a random 32-bit value (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.1-11, so no unit is bound to it.

RFC5880-6.8.1-12

bfd.AuthSeqKnown must be initialized to zero (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthSeqKnownSetAfterFirstPacket unit/verify unproven
positive TestRFC5880AuthSeqKnownStartsZero unit/verify unproven

RFC5880-6.8.1-13

bfd.AuthSeqKnown must be set to zero after no packets received for twice the Detection Time (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.1-13, so no unit is bound to it.

RFC5880-6.8.1-14

Session state must be preserved for at least one Detection Time after last valid packet (§6.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DetectionExpiryDownDiagOne unit/verify unproven
positive TestRFC5880StatePreservedForOneDetectionTime unit/verify unproven

RFC5880-6.1-1

Active role system must send BFD Control packets regardless of whether packets have been received (§6.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880PassiveRoleTransmitsAfterReception unit/verify unproven
positive TestRFC5880ActiveRoleTransmitsWithoutReception unit/verify unproven

RFC5880-6.1-2

Passive role system must not begin sending BFD packets until it has received one (§6.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880PassiveRoleTransmitsAfterReception unit/verify unproven
positive TestRFC5880PassiveRoleSilentUntilReception unit/verify unproven

RFC5880-6.1-3

At least one system must take the Active role (§6.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880PassiveRoleSilentUntilReception unit/verify unproven
positive TestRFC5880ActiveRoleTransmitsWithoutReception unit/verify unproven

RFC5880-6.8.3-1

When session state is not Up, bfd.DesiredMinTxInterval must be at least 1,000,000 microseconds (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880SlowStartFloorLiftedWhenUp unit/verify unproven
positive TestRFC5880SlowStartFloorWhileNotUp unit/verify unproven

RFC5880-6.8.3-2

If bfd.DesiredMinTxInterval or bfd.RequiredMinRxInterval changes, a Poll Sequence must be initiated (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880NoPollWhenIntervalsUnchanged unit/verify unproven
positive TestRFC5880PollInitiatedOnIntervalChange unit/verify unproven

RFC5880-6.8.3-3

If bfd.DesiredMinTxInterval is increased while Up, the actual TX interval must not change until the Poll Sequence terminates (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.3-3, so no unit is bound to it.

RFC5880-6.8.3-4

If bfd.RequiredMinRxInterval is reduced while Up, the previous value must be used for detection time until the Poll terminates (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.3-4, so no unit is bound to it.

RFC5880-6.8.3-5

If local system reduces TX interval due to bfd.RemoteMinRxInterval being reduced, it must honor the new interval immediately (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880TransmitIntervalFlooredByLocalDesired unit/verify unproven
positive TestRFC5880RemoteMinRxReductionHonoredImmediately unit/verify unproven

RFC5880-6.8.3-6

Multiple parameter changes requiring Poll Sequence must be communicated in a single packet, or a round-trip must elapse, or an F=0 packet must be received before starting another Poll (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880PollInitiatedOnIntervalChange unit/verify unproven

RFC5880-6.5-1

A BFD Control packet must not have both Poll (P) and Final (F) bits set (§6.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880FinalReplyClearsPollBit unit/verify unproven
positive TestRFC5880PollPacketHasNoFinalBit unit/verify unproven

RFC5880-6.5-2

If periodic Control packets are being sent, Poll Sequence must be performed by setting P bit on scheduled transmissions; additional packets must not be sent (§6.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880FinalReplyClearsPollBit unit/verify unproven
positive TestRFC5880PollPacketHasNoFinalBit unit/verify unproven

RFC5880-6.6-1

Demand (D) bit must not be set unless bfd.DemandMode is 1, bfd.SessionState is Up, and bfd.RemoteSessionState is Up (§6.6, §6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DemandBitClearWhenAnyConditionFails unit/verify unproven
positive TestRFC5880DemandBitSetWhenAllConditionsHold unit/verify unproven

RFC5880-6.6-2

When the D bit value is to be changed, a Poll Sequence must be initiated (§6.6)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.6-2, so no unit is bound to it.

RFC5880-6.6-3

If Demand mode is active on either system, a Poll Sequence must be initiated whenever next packet contents would differ (except P/F bits) (§6.6)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.6-3, so no unit is bound to it.

RFC5880-6.7-1

Implementations supporting authentication must support both types of SHA1 authentication (§6.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880UnsupportedAuthTypesRejected unit/verify unproven
positive TestRFC5880BothSHA1VariantsSupported unit/verify unproven

RFC5880-4.2-1

Simple Password must be 1 to 16 bytes in length (§4.2, §6.7.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative auth/TestRFC5880SimplePasswordLengthOutOfRangeRefused unit/verify unproven
negative bfd/TestRFC5880SimplePasswordLengthOutOfRangeRefused unit/verify unproven
positive TestRFC5880SimplePasswordSectionHeader unit/verify unproven
positive TestRFC5880SimplePasswordManagementAcceptsASCIIStrings unit/verify unproven

RFC5880-6.7.2-1

Simple Password management interface must accept ASCII strings (§6.7.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative bfd/TestRFC5880SimplePasswordLengthOutOfRangeRefused unit/verify unproven
positive TestRFC5880SimplePasswordManagementAcceptsASCIIStrings unit/verify unproven

RFC5880-6.7.2-8

Simple Password Auth Type must be set to 1, Auth Len must be set to the proper length of 4 to 19 bytes (§6.7.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880SimplePasswordRejectsForeignSectionShape unit/verify unproven
positive TestRFC5880SimplePasswordSectionHeader unit/verify unproven

RFC5880-6.7.3-1

Keyed MD5 Auth Type must be set to 2 or 3, Auth Len must be 24 (§6.7.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880KeyedMD5RejectsForeignSectionShape unit/verify unproven
positive TestRFC5880KeyedMD5SectionHeader unit/verify unproven

RFC5880-6.7.3-2

Keyed MD5 Auth Key/Digest: MD5 digest must be calculated over entire BFD Control packet (§6.7.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DigestRejectsMandatorySectionTamper unit/verify unproven
positive TestRFC5880DigestCoversWholePacket unit/verify unproven

RFC5880-6.7.3-3

Keyed MD5: secret key must not be carried in the packet (§6.7.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880SecretKeyNotCarriedInPacket unit/verify unproven

RFC5880-6.7.3-4

Meticulous Keyed MD5: bfd.XmitAuthSeq must be incremented for each packet (§6.7.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880MeticulousRejectsUnincrementedSequence unit/verify unproven
positive TestRFC5880MeticulousSequenceIncrementsPerPacket unit/verify unproven

RFC5880-6.7.4-1

Keyed SHA1 Auth Type must be set to 4 or 5, Auth Len must be 28 (§6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880KeyedSHA1RejectsForeignSectionShape unit/verify unproven
positive TestRFC5880KeyedSHA1SectionHeader unit/verify unproven

RFC5880-6.7.4-2

SHA1 hash must be calculated over entire BFD Control packet (§6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DigestRejectsMandatorySectionTamper unit/verify unproven
positive TestRFC5880DigestCoversWholePacket unit/verify unproven

RFC5880-6.7.4-3

Keyed SHA1: secret key must not be carried in the packet (§6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880SecretKeyNotCarriedInPacket unit/verify unproven

RFC5880-6.7.4-4

Meticulous Keyed SHA1: bfd.XmitAuthSeq must be incremented for each packet (§6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880MeticulousRejectsUnincrementedSequence unit/verify unproven
positive TestRFC5880MeticulousSequenceIncrementsPerPacket unit/verify unproven

RFC5880-6.7.4-5

SHA1 key management interface must accept ASCII strings (§6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880KeyManagementRejectsIncompleteConfig unit/verify unproven
positive TestRFC5880KeyManagementAcceptsASCIIStrings unit/verify unproven

RFC5880-6.8.6-1

Reception: discard if Version != 1 (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880VersionNotOneDiscarded unit/verify unproven
positive TestRFC5880VersionOneAccepted unit/verify unproven

RFC5880-6.8.6-2

Reception: discard if Length < 24 (A=0) or < 26 (A=1) (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880LengthBelowMinimumDiscarded unit/verify unproven
positive TestRFC5880LengthMinimumAccepted unit/verify unproven

RFC5880-6.8.6-3

Reception: discard if Length > encapsulating payload (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880LengthOverPayloadDiscarded unit/verify unproven
positive TestRFC5880LengthEqualsPayloadAccepted unit/verify unproven

RFC5880-6.8.6-4

Reception: discard if Detect Mult == 0 (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DetectMultZeroDiscarded unit/verify unproven
positive TestRFC5880DetectMultNonZeroAccepted unit/verify unproven

RFC5880-6.8.6-5

Reception: discard if M bit is nonzero (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880MultipointSetDiscarded unit/verify unproven
positive TestRFC5880MultipointZeroAccepted unit/verify unproven

RFC5880-6.8.6-6

Reception: discard if My Discriminator == 0 (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880MyDiscriminatorZeroDiscarded unit/verify unproven
positive TestRFC5880MyDiscriminatorNonZeroAccepted unit/verify unproven

RFC5880-6.8.6-7

Reception: if Your Discriminator nonzero, use it to select session; discard if no session found (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880UnknownYourDiscriminatorDiscarded unit/verify unproven
positive TestRFC5880YourDiscriminatorSelectsSession unit/verify unproven

RFC5880-6.8.6-8

Reception: if Your Discriminator zero and State is not Down or AdminDown, discard (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880ZeroYourDiscriminatorDiscardedWhenLive unit/verify unproven
positive TestRFC5880ZeroYourDiscriminatorAcceptedWhenDown unit/verify unproven

RFC5880-6.8.6-9

Reception: if A=1 and bfd.AuthType is zero, discard (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880UnauthenticatedSessionDiscardsAuthenticatedPacket unit/verify unproven
positive TestRFC5880UnauthenticatedSessionAcceptsUnauthenticatedPacket unit/verify unproven

RFC5880-6.8.6-10

Reception: if A=0 and bfd.AuthType is nonzero, discard (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthenticatedSessionDiscardsUnauthenticatedPacket unit/verify unproven
positive TestRFC5880AuthenticatedSessionAcceptsAuthenticatedPacket unit/verify unproven

RFC5880-6.8.6-11

Reception: if A=1, authenticate per §6.7 (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880UnauthenticPacketDiscarded unit/verify unproven
positive TestRFC5880AuthenticatedPacketVerifiedAndDelivered unit/verify unproven

RFC5880-6.8.6-12

Reception: if Required Min Echo RX Interval == 0, cease Echo transmission (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880EchoEnabledWhenPeerAdvertisesNonZero unit/verify unproven
positive TestRFC5880EchoCeasesWhenPeerAdvertisesZero unit/verify unproven

RFC5880-6.8.6-13

Reception: if Poll in flight and F=1 received, terminate the Poll Sequence (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880NonFinalDoesNotTerminatePoll unit/verify unproven
positive TestRFC5880FinalTerminatesPoll unit/verify unproven

RFC5880-6.8.6-14

Reception: if remote Demand mode active (D=1, both Up), cease periodic Control packet transmission (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.6-14, so no unit is bound to it.

RFC5880-6.8.6-15

Reception: if remote Demand mode not active, send periodic Control packets (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880NoPeriodicTransmitWhileAdminDown unit/verify unproven
positive TestRFC5880PeriodicTransmitWhenRemoteDemandInactive unit/verify unproven

RFC5880-6.8.6-16

Reception: if P=1, send Final packet immediately (§6.8.6, §6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880NonPollProducesNoImmediateReply unit/verify unproven
positive TestRFC5880PollAnsweredWithImmediateFinal unit/verify unproven

RFC5880-6.8.6-18

Reception: if Your Discriminator zero, select the session on a combination of other fields, which can include source addressing information, My Discriminator, and the ingress interface (§6.8.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5881FirstPacketWrongSourceDropped unit/verify unproven
positive TestRFC5881FirstPacketMatchesByTuple unit/verify unproven

RFC5880-6.8.7-1

Transmission: must not transmit at interval less than max(bfd.DesiredMinTxInterval, bfd.RemoteMinRxInterval) less jitter (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880TransmitDeadlineClampsBadJitter unit/verify unproven
positive TestRFC5880TransmitDeadlineUsesNegotiatedInterval unit/verify unproven

RFC5880-6.8.7-2

Transmission: periodic TX must be jittered by 0-25% per packet (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880JitterStaysWithinBand unit/verify unproven
positive TestRFC5880JitterIsAppliedPerPacket unit/verify unproven

RFC5880-6.8.7-3

Transmission: if bfd.DetectMult == 1, interval must be 75-90% of negotiated interval (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880JitterFloorOnlyForDetectMultOne unit/verify unproven
positive TestRFC5880JitterDetectMultOneWindow unit/verify unproven

RFC5880-6.8.7-4

Transmission: TX interval must be recalculated whenever bfd.DesiredMinTxInterval or bfd.RemoteMinRxInterval changes (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880TransmitIntervalFlooredByLocalDesired unit/verify unproven
positive TestRFC5880RemoteMinRxReductionHonoredImmediately unit/verify unproven

RFC5880-6.8.7-5

Transmission: must not transmit if bfd.RemoteDiscr is zero and system is Passive (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880ActiveRoleTransmitsWithoutReception unit/verify unproven
positive TestRFC5880PassiveRoleSilentUntilReception unit/verify unproven

RFC5880-6.8.7-6

Transmission: must not periodically transmit if bfd.RemoteMinRxInterval is zero (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.7-6, so no unit is bound to it.

RFC5880-6.8.7-7

Transmission: must not periodically transmit if remote Demand mode active and no Poll in flight (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.7-7, so no unit is bound to it.

RFC5880-6.8.7-8

If rate limiting Final packets, advertised Desired Min TX Interval must be >= rate-limit interval (§6.8.7)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.7-8, so no unit is bound to it.

RFC5880-6.8.4-1

Detection time expired while Init or Up: set bfd.SessionState to Down, bfd.LocalDiag to 1 (§6.8.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DetectionExpiryIgnoredWhenDown unit/verify unproven
positive TestRFC5880DetectionExpiryDownDiagOne unit/verify unproven

RFC5880-6.8.5-1

Echo function failure: set bfd.SessionState to Down, bfd.LocalDiag to 2 (§6.8.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880EchoReturnClearsMissAndFailIsScoped unit/verify unproven
positive TestRFC5880EchoMissDetectedAndReported unit/verify unproven

RFC5880-6.8.15-1

Forwarding plane reset: set bfd.LocalDiag to 4, bfd.SessionState to Down (§6.8.15)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.15-1, so no unit is bound to it.

RFC5880-6.8.16-1

Administrative control: follow the enable/disable procedure (§6.8.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AdministrativeCallsAreGuarded unit/verify unproven
positive TestRFC5880AdministrativeDisableEnable unit/verify unproven

RFC5880-6.8.8-1

Echo packets must be demultiplexed to the appropriate session (§6.8.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880UnknownEchoDropped unit/verify unproven
positive TestRFC5880EchoDemultiplexedToItsSession unit/verify unproven

RFC5880-6.8.8-2

A means of detecting missing Echo packets must be implemented (§6.8.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880EchoReturnClearsMissAndFailIsScoped unit/verify unproven
positive TestRFC5880EchoMissDetectedAndReported unit/verify unproven

RFC5880-6.8.9-1

Echo packets must not be transmitted when bfd.SessionState is not Up (§6.8.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880NoEchoTransmittedWhenNotUp unit/verify unproven
positive TestRFC5880EchoTransmittedWhileUp unit/verify unproven

RFC5880-6.8.9-2

Echo packets must not be transmitted unless remote Required Min Echo RX Interval is nonzero (§6.8.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880EchoNotTransmittedWithoutPeerAdvertisement unit/verify unproven
positive TestRFC5880EchoEnabledWhenPeerAdvertisesNonZero unit/verify unproven

RFC5880-6.8.9-3

Echo packet TX interval must not be less than remote Required Min Echo RX Interval (§6.8.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880EchoIntervalNotBelowLocalTarget unit/verify unproven
positive TestRFC5880EchoIntervalHonorsPeerFloor unit/verify unproven

RFC5880-7-1

Multihop: a congestion control mechanism must be implemented (§7)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-7-1, so no unit is bound to it.

RFC5880-7-2

Multihop: when congestion detected, BFD must reduce traffic generated (§7)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-7-2, so no unit is bound to it.

RFC5880-4.3-1

Reserved byte in MD5/SHA1 auth section must be set to zero on transmit (§4.3, §4.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880KeyedMD5SectionHeader unit/verify unproven

RFC5880-9-2

For single-hop sessions, TTL or Hop Count MUST be set to maximum on transmit and checked equal to maximum on receipt (§9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880SingleHopReceiveTTLNotMaxDiscarded unit/verify unproven
positive TestRFC5880SingleHopTransmitTTLIsMaximum unit/verify unproven

RFC5880-6.8.14-1

If Demand mode is no longer active on the remote system, the local system MUST begin transmitting periodic BFD Control packets (§6.8.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880PeriodicTransmitWhenRemoteDemandInactive unit/verify unproven

RFC5880-6.8.17-1

If concatenated path failure diagnostic must be communicated and remote Demand mode is active, a Poll Sequence MUST be initiated (§6.8.17)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.8.17-1, so no unit is bound to it.

RFC5880-6.8.3-8

Timing parameter changes not explicitly excepted MUST be effected immediately (§6.8.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
positive TestRFC5880RemoteMinRxReductionHonoredImmediately unit/verify unproven

RFC5880-6.7.3-7

MD5 key management interface MUST accept ASCII strings (§6.7.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880KeyManagementRejectsIncompleteConfig unit/verify unproven
positive TestRFC5880KeyManagementAcceptsASCIIStrings unit/verify unproven

RFC5880-6.7.2-3

Simple Password, MD5, and SHA1 Auth Key ID field MUST be set to the ID of the current authentication key (§6.7.2, §6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthKeyIDMismatchDiscarded unit/verify unproven
positive TestRFC5880AuthKeyIDIsTheConfiguredKey unit/verify unproven
positive TestRFC5880SimplePasswordSectionCarriesPasswordAndKeyID unit/verify unproven

RFC5880-6.7.3-8

Simple Password, MD5, and SHA1 Sequence Number field MUST be set to bfd.XmitAuthSeq (§6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthSequenceFieldFollowsAdvance unit/verify unproven
positive TestRFC5880AuthSequenceFieldIsXmitAuthSeq unit/verify unproven

RFC5880-6.7.2-4

Reception: if Auth Type does not match bfd.AuthType, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthTypeMismatchDiscarded unit/verify unproven
positive TestRFC5880AuthTypeMatchAccepted unit/verify unproven

RFC5880-6.7.2-5

Reception: if Auth Key ID does not match any configured authentication key, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthKeyIDMismatchDiscarded unit/verify unproven
negative TestRFC5880SimplePasswordWrongKeyIDDiscarded unit/verify unproven
positive TestRFC5880AuthKeyIDMatchAccepted unit/verify unproven
positive TestRFC5880SimplePasswordMatchingKeyIDAccepted unit/verify unproven

RFC5880-6.7.2-6

Reception: if Auth Len does not match expected length, packet MUST be discarded (§6.7.2, §6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880AuthLenMismatchDiscarded unit/verify unproven
positive TestRFC5880AuthLenExpectedAccepted unit/verify unproven

RFC5880-6.7.2-7

Reception: if password does not match configured password for Simple Password, packet MUST be discarded (§6.7.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880SimplePasswordMismatchDiscarded unit/verify unproven
positive TestRFC5880SimplePasswordMatchAccepted unit/verify unproven

RFC5880-6.7.3-9

Reception: for Keyed MD5/SHA1, if Sequence Number is less than bfd.RcvAuthSeq (accounting for wrap), packet MUST be discarded (§6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880KeyedSequenceBelowFloorDiscarded unit/verify unproven
positive TestRFC5880KeyedSequenceAtOrAboveFloorAccepted unit/verify unproven

RFC5880-6.7.3-10

Reception: for Meticulous Keyed MD5/SHA1, if Sequence Number is not exactly bfd.RcvAuthSeq+1 (accounting for wrap), packet MUST be discarded (§6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

No test carries RFC5880-6.7.3-10, so no unit is bound to it.

RFC5880-6.7.3-11

Reception: if digest/hash does not match computed value, packet MUST be discarded (§6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880DigestMismatchDiscarded unit/verify unproven
positive TestRFC5880DigestMatchAccepted unit/verify unproven

RFC5880-6.7.3-12

Reception: if bfd.AuthSeqKnown is 0, it MUST be set to 1 and bfd.RcvAuthSeq MUST be set to received Sequence Number (§6.7.3, §6.7.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC5880ForgedFirstPacketDoesNotSeedReplayFloor unit/verify unproven
positive TestRFC5880FirstAuthenticatedPacketSeedsReplayFloor unit/verify unproven

Extraction sign-off

FieldValue
Reviewer ze-work agent, spec-fixit-rfc-drain-quota-never-armed WP-1
Signed off 2026-08-31
Register rfc2119
Source rfc/full/rfc5880.txt
Source fingerprint 9a3492d0917193af
Record rfc/extraction/rfc5880.json
Mapped sentences 99
Declined as scope 29
Relocated to a spec, which Ze OWES 0
Unclassified 0

Sections

SectionNameSitesDispositionReason
front not stated 0 skipped (front-matter) Title block, Abstract, Status of This Memo, copyright notice and table of contents. The Abstract restates section 1 and states no obligation.
1 Introduction 0 walked Introduction. States the goal of the protocol and says that application-dependent mechanisms live in companion documents. No obligation.
1.1 not stated 0 walked Conventions Used in This Document: the RFC 2119 key-words paragraph. It tells a reader how to read the other sections and binds no speaker, which is why the derivation excludes it from the site inventory.
2 Design 0 walked Design. Describes where BFD sits relative to the forwarding plane and what it runs over. Written in the indicative throughout and states no obligation.
3 Protocol Overview 0 walked Protocol Overview. Describes the Hello exchange and the rate negotiation in the indicative. No obligation.
3.1 Addressing and Session Establishment 0 walked Addressing and Session Establishment. States that the application chooses the addresses and that BFD has no discovery mechanism. No obligation.
3.2 Operating Modes 0 walked Operating Modes. Describes Asynchronous mode, Demand mode and the Echo function, and the trade-offs between them. Their obligations are stated in section 6 and captured there.
4 BFD Control Packet Format 0 walked BFD Control Packet Format. Section heading only; the formats are in the subsections below.
4.1 Generic BFD Control Packet Format 1 walked Generic BFD Control Packet Format. The field descriptions are written in the indicative apart from the Multipoint bit, which is the one site.
4.2 Simple Password Authentication Section Format 2 walked Simple Password Authentication Section Format. Two sites: the password length bound and the pointer to the section 6.7.2 encoding rules.
4.3 not stated 2 walked Keyed MD5 and Meticulous Keyed MD5 Authentication Section Format. Two sites: the Reserved byte and the pointer to the section 6.7.3 key encoding rules.
4.4 not stated 2 walked Keyed SHA1 and Meticulous Keyed SHA1 Authentication Section Format. Two sites: the Reserved byte and the pointer to the section 6.7.4 key encoding rules.
5 BFD Echo Packet Format 0 walked BFD Echo Packet Format. The payload is a local matter, so the section states one advisory obligation and no MUST-level one.
6 Elements of Procedure 0 walked Elements of Procedure. Introductory text that names section 6.8.1 as the home of the bfd.Xx state variables and warns against enforcing more than the section states. No obligation.
6.1 Overview 3 walked Overview. The three role obligations are the sites; the rest of the section describes the session lifecycle in the indicative and is specified normatively in section 6.8.
6.2 BFD State Machine 0 walked BFD State Machine. The transitions are described in the indicative and are specified normatively in section 6.8.6 and section 6.8.16. The one advisory obligation is the right to hold a session down.
6.3 Demultiplexing and the Discriminator Fields 1 walked Demultiplexing and the Discriminator Fields. One site, the discriminator choice rule. The permission to change a discriminator mid-session is advisory.
6.4 The Echo Function and Asymmetry 0 walked The Echo Function and Asymmetry. Describes independent Echo directions in the indicative and states one advisory obligation about advertised intervals.
6.5 The Poll Sequence 2 walked The Poll Sequence. Two sites: the P and F exclusion, and the rule that a Poll rides on the scheduled periodic packets.
6.6 Demand mode 3 walked Demand mode. Three sites, all about the Demand bit and the Poll Sequences a Demand mode change requires. The permission to enable or disable Demand mode at any time is advisory.
6.7 Authentication 1 walked Authentication. Describes the generic authentication section, then states the one obligation of the section: an implementation that supports authentication supports both SHA1 types.
6.7.1 Enabling and Disabling Authentication 0 walked Enabling and Disabling Authentication. The section says the mechanism is out of scope and then states two advisory obligations about changing the authentication state on received packets.
6.7.2 Simple Password Authentication 10 walked Simple Password Authentication. Ten sites: three transmission field rules, the password bound, the management interface rule, four reception discards and the closing acceptance. The hexadecimal configuration clause is advisory.
6.7.3 Keyed MD5 and Meticulous Keyed MD5 Authentication 17 walked Keyed MD5 and Meticulous Keyed MD5 Authentication. Seventeen sites over the transmission and reception rules. The sequence increment guidance for Keyed MD5 is advisory, and the circular increment is a permission.
6.7.4 Keyed SHA1 and Meticulous Keyed SHA1 Authentication 17 walked Keyed SHA1 and Meticulous Keyed SHA1 Authentication. Seventeen sites that repeat the section 6.7.3 rules with SHA1 constants, so most are excluded as duplicates of the rows the summary declares once for both families.
6.8 Functional Specifics 0 walked Functional Specifics. Introductory text defining what 'the Echo function active' and 'Demand mode active' mean for the subsections below. No obligation.
6.8.1 State Variables 14 walked State Variables. Fourteen sites: the session state preservation rule and the initial value or constraint of each bfd.Xx variable. The random local discriminator and the longer preservation are advisory.
6.8.2 Timer Negotiation 0 walked Timer Negotiation. Describes the continuous negotiation in the indicative and defers the detail to section 6.8.7. No obligation.
6.8.3 Timer Manipulation 8 walked Timer Manipulation. Eight sites over the Poll Sequence requirement, the two holds while a Poll runs, the one-second floor, the immediate honoring rule and the disambiguation choices. The Echo receive interval floor is advisory.
6.8.4 Calculating the Detection Time 2 walked Calculating the Detection Time. Two sites, the Asynchronous and Demand mode expiries. The calculations themselves are written in the indicative.
6.8.5 Detecting Failures with the Echo Function 1 walked Detecting Failures with the Echo Function. One site, the transition on Echo failure. The detection method is declared out of scope.
6.8.6 Reception of BFD Control Packets 19 walked Reception of BFD Control Packets. Nineteen sites: the ordered procedure lead-in, its stop-on-discard clause, and the discard, demultiplexing, authentication and Demand mode steps. The state machine block in the middle of the section is written in the indicative.
6.8.7 Transmitting BFD Control Packets 11 walked Transmitting BFD Control Packets. Eleven sites over the interval floor, jitter, the transmission bars, the Final response, the Demand bit precondition and the field table lead-in. The change-driven extra packet and the Final rate limit are advisory.
6.8.8 Reception of BFD Echo Packets 2 walked Reception of BFD Echo Packets. Two sites: demultiplexing and the obligation to detect loss.
6.8.9 Transmission of BFD Echo Packets 3 walked Transmission of BFD Echo Packets. Three sites, all bars on when and how fast Echo packets leave.
6.8.10 Min Rx Interval Change 0 walked Min Rx Interval Change. States that bfd.RequiredMinRxInterval can change at any time and points at section 6.8.3 for the rules. No obligation of its own.
6.8.11 Min Tx Interval Change 0 walked Min Tx Interval Change. States that bfd.DesiredMinTxInterval can change at any time and points at section 6.8.3. No obligation of its own.
6.8.12 Detect Multiplier Change 0 walked Detect Multiplier Change. States that bfd.DetectMult can change to any nonzero value without a Poll Sequence and points at section 6.6. No obligation of its own.
6.8.13 Enabling or Disabling The Echo Function 0 walked Enabling or Disabling The Echo Function. Two permissions, both advisory, and the summary declares them as one row.
6.8.14 Enabling or Disabling Demand Mode 1 walked Enabling or Disabling Demand Mode. One site, the obligation to resume periodic transmission when the remote system leaves Demand mode.
6.8.15 Forwarding Plane Reset 1 walked Forwarding Plane Reset. One site, the diagnostic and state transition on a local forwarding plane reset.
6.8.16 Administrative Control 1 walked Administrative Control. One site, the enable and disable procedure. The transmission after entering AdminDown is advisory.
6.8.17 Concatenated Paths 1 walked Concatenated Paths. One site, the Poll Sequence that carries a concatenated path diagnostic to a remote system in Demand mode. Setting the diagnostic itself is a permission.
6.8.18 Holding Down Sessions 1 walked Holding Down Sessions. One site, the REQUIRED state maintenance, which restates the section 6.8.1 preservation rule. The reset of bfd.RemoteMinRxInterval after a Detection Time of silence is advisory.
7 Operational Considerations 1 walked Operational Considerations. One site carrying two obligations: implement congestion control across multiple hops, and reduce generated traffic when congestion is detected. The site maps the first; the second is declared here because no separate sentence sources it. The single-hop congestion algorithm is advisory.
8 IANA Considerations 0 skipped (iana) IANA Considerations. Defines the BFD Diagnostic Codes and BFD Authentication Types registries and their initial values. Binds IANA, not a speaker.
9 Security Considerations 1 walked Security Considerations. One site, the GTSM rule for a directly connected session. The use of the Authentication Section across multiple hops is advisory, and the rest of the section compares the authentication types without directing a speaker.
10 References heading 0 skipped (references) References heading.
10.1 Normative References: RFC 5082, RFC 2119, RFC 1321, RFC 3174 0 skipped (references) Normative References: RFC 5082, RFC 2119, RFC 1321, RFC 3174.
10.2 Informative References: RFC 2104, RFC 5226, RFC 2328 0 skipped (references) Informative References: RFC 2104, RFC 5226, RFC 2328.
A Appendix A, Backward Compatibility 0 skipped (appendix-non-normative) Appendix A, Backward Compatibility. The heading declares itself non-normative and the text describes a suggested version 0 fallback that no speaker is bound to.
B Appendix B, Contributors 0 skipped (acknowledgements) Appendix B, Contributors.
C Appendix C, Acknowledgments 0 skipped (acknowledgements) Appendix C, Acknowledgments.

Excluded sentences

SiteExcluded kindReasonQuote
4.2:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
A pointer sentence: the obligation it names lives in section 6.7.2, where site 6.7.2:5 maps it as RFC5880-6.7.2-1. The password MUST be encoded and configured according to section 6.7.2.
4.3:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
A pointer sentence: the key encoding and configuration obligation lives in section 6.7.3, where site 6.7.3:6 maps it as RFC5880-6.7.3-7. The shared key MUST be encoded and configured to section 6.7.3.
4.4:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
A pointer sentence: the key encoding and configuration obligation lives in section 6.7.4, where site 6.7.4:6 maps it as RFC5880-6.7.4-5. The shared key MUST be encoded and configured to section 6.7.4.
6.7.2:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The length half of the row site 6.7.2:2 maps. The Auth Len field MUST be set to the proper length (4 to 19 bytes).
6.7.2:4 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The section 4.2 password length bound, restated in the transmission paragraph. Site 4.2:1 maps RFC5880-4.2-1. The password is a binary string, and MUST be 1 to 16 bytes in length.
6.7.2:10 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The closing complement of the four Simple Password discard rules. It adds no test of its own: a packet is accepted when no discard condition held, and the last of those conditions is mapped by site 6.7.2:9. Otherwise, the packet MUST be accepted.
6.7.3:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The length half of the row site 6.7.3:1 maps. The Auth Len field MUST be set to 24.
6.7.3:10 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Type reception discard for the MD5 family. RFC5880-6.7.2-4 declares it for all three families and site 6.7.2:6 maps it. If the received BFD Control packet does not contain an Authentication Section, or the Auth Type is not correct (2 for Keyed MD5 or 3 for Meticulous Keyed MD5), then the received packet MUST be discarded.
6.7.3:11 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Key ID reception discard for the MD5 family, declared once as RFC5880-6.7.2-5 and mapped by site 6.7.2:7. If the Auth Key ID field does not match the ID of a configured authentication key, the received packet MUST be discarded.
6.7.3:12 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Len reception discard for the MD5 family, declared once as RFC5880-6.7.2-6 and mapped by site 6.7.2:8. If the Auth Len field is not equal to 24, the packet MUST be discarded.
6.7.3:16 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The accepting face of the digest comparison. RFC5880-6.7.3-11 states the same comparison as a discard, and site 6.7.3:17 maps it. If the MD5 digest of the entire BFD Control packet is equal to the received value of the Auth Key/Digest field, the received packet MUST be accepted.
6.7.4:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The length half of the row site 6.7.4:1 maps. The Auth Len field MUST be set to 28.
6.7.4:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Key ID transmit rule for the SHA1 family, declared once as RFC5880-6.7.2-3 and mapped by site 6.7.3:3. The Auth Key ID field MUST be set to the ID of the current authentication key.
6.7.4:4 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Sequence Number transmit rule for the SHA1 family, declared once as RFC5880-6.7.3-8 and mapped by site 6.7.3:4. The Sequence Number field MUST be set to bfd.XmitAuthSeq.
6.7.4:10 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Type reception discard for the SHA1 family, declared once as RFC5880-6.7.2-4 and mapped by site 6.7.2:6. If the received BFD Control packet does not contain an Authentication Section, or the Auth Type is not correct (4 for Keyed SHA1 or 5 for Meticulous Keyed SHA1), then the received packet MUST be discarded.
6.7.4:11 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Key ID reception discard for the SHA1 family, declared once as RFC5880-6.7.2-5 and mapped by site 6.7.2:7. If the Auth Key ID field does not match the ID of a configured authentication key, the received packet MUST be discarded.
6.7.4:12 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Auth Len reception discard for the SHA1 family, declared once as RFC5880-6.7.2-6 and mapped by site 6.7.2:8. If the Auth Len field is not equal to 28, the packet MUST be discarded.
6.7.4:13 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Keyed SHA1 sequence window discard. RFC5880-6.7.3-9 declares the rule for MD5 and SHA1 together, and site 6.7.3:13 maps it. For Keyed SHA1, if the sequence number lies outside of the range of bfd.RcvAuthSeq to bfd.RcvAuthSeq+(3*Detect Mult) inclusive (when treated as an unsigned 32-bit circular number space), the received packet MUST be discarded.
6.7.4:14 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Meticulous Keyed SHA1 sequence window discard, declared once as RFC5880-6.7.3-10 and mapped by site 6.7.3:14. For Meticulous Keyed SHA1, if the sequence number lies outside of the range of bfd.RcvAuthSeq+1 to bfd.RcvAuthSeq+(3*Detect Mult) inclusive (when treated as an unsigned 32-bit circular number space, the received packet MUST be discarded.
6.7.4:15 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The first-packet sequence learning rule for the SHA1 family, declared once as RFC5880-6.7.3-12 and mapped by site 6.7.3:15. Otherwise (bfd.AuthSeqKnown is 0), bfd.AuthSeqKnown MUST be set to 1, bfd.RcvAuthSeq MUST be set to the value of the received Sequence Number field, and the received packet MUST be accepted.
6.7.4:16 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The accepting face of the SHA1 hash comparison, whose discarding face is RFC5880-6.7.3-11, mapped by site 6.7.3:17. If the SHA1 hash of the entire BFD Control packet is equal to the received value of the Auth Key/Hash field, the received packet MUST be accepted.
6.7.4:17 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The SHA1 hash mismatch discard. RFC5880-6.7.3-11 declares the rule for MD5 and SHA1 together, and site 6.7.3:17 maps it. Otherwise (the hash does not match the Auth Key/Hash field), the received packet MUST be discarded.
6.8.3:6 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The second sentence of the rule site 6.8.3:5 maps. It states what 'immediately' means when the new interval has already elapsed, and binds nothing further. If this interval has already passed since the last transmission (because the new interval is significantly shorter), the local system MUST send the next periodic BFD Control packet as soon as practicable.
6.8.4:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Demand mode detection expiry. The action is the same obligation RFC5880-6.8.4-1 states, set Down and diagnostic 1; only the clock the Detection Time runs from differs, and section 6.6 and section 6.8.4 both state that clock. If Demand mode is active, and a period of time equal to the Detection Time passes after the initiation of a Poll Sequence (the transmission of the first BFD Control packet with the Poll bit set), the session has gone down -- the local system MUST set bfd.SessionState to Down, and bfd.LocalDiag to 1 (Control Detection Time Expired).
6.8.6:1 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The lead-in to the reception procedure. Its steps are declared as RFC5880-6.8.6-1 through RFC5880-6.8.6-15, in the order the summary lists them, and site 6.8.6:3 maps the first. When a BFD Control packet is received, the following procedure MUST be followed, in the order specified.
6.8.6:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The stop-on-discard clause of the same lead-in. Every step it governs is a discard rule already declared, the first of which site 6.8.6:3 maps. If the packet is discarded according to these rules, processing of the packet MUST cease at that point.
6.8.6:10 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The no-session discard, which RFC5880-6.8.6-7 states as the second half of its own text. Site 6.8.6:9 maps that row. If no session is found, the packet MUST be discarded.
6.8.7:10 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The Demand bit precondition, restated here in the transmission rules. RFC5880-6.6-1 cites section 6.6 and section 6.8.7, and site 6.6:1 maps it. A system MUST NOT set the Demand (D) bit unless bfd.DemandMode is 1, bfd.SessionState is Up, and bfd.RemoteSessionState is Up.
6.8.18:1 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The section 6.8.1 state preservation obligation, restated here at REQUIRED as the first of the two holddown mechanisms. Site 6.8.1:1 maps RFC5880-6.8.1-14. First, a system is REQUIRED to maintain session state (including timing parameters), even when a session is down, until a Detection Time has passed without the receipt of any BFD Control packets.

Superseded

No document obsoletes RFC 5880, so its obligations are stated where they were written.