a positive test proves Ze does what the requirement demands and a negative one proves it refuses what the requirement forbids
RFC 7911 - Advertisement of Multiple Paths in BGP
Every requirement this repository extracted from RFC 7911, 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
the requirement admits no counter-case, so one polarity plus a recorded reason is the whole proof available for it
one direction is tested, the other is neither tested nor excused, and nothing states which
no test carries the requirement id, whether or not a gap states why
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
MUST-level requirements the gate HOLDS. A population, not a result: the shares beside it are what says how Ze stands
a {not-applicable} annotation says the obligation does not bind Ze. Scope, not coverage: it is in no share below
The 4 shares marked as a part above are the whole of the 9 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.
| Card | Tone here | Why 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 | ok | 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
| Field | Value |
|---|---|
| Public status | Supported |
| Enrolment | Enrolled |
| Requirements | 13 |
| Gated MUST-level | 9 |
| Obligations that bind Ze | 9 |
| Not applicable, so out of scope | 0 |
| Declared gaps | 0 |
| Gated with no test | 0 |
| Nightly-only evidence | 0 |
| Test tags | 43 |
| Tagged units | 43 |
| Recorded audit verdicts | 0 |
| Discrimination records | 0 |
| Summary | rfc/short/rfc7911.md |
| Requirement shard | rfc/requirements/rfc7911.md |
| RFC text | rfc/full/rfc7911.txt |
Enrolment
Enrolled: Advertisement of Multiple Paths in BGP (ADD-PATH): nine MUST-level requirements. Eight are met: 3-1 (a 4-octet Path Identifier is prepended to NLRI when ADD-PATH is negotiated), 4-1 (a single ADD-PATH capability instance lists all AFI/SAFIs), 5-1 and 5-2 (a path is sent only if the local speaker advertised Send/Both and the remote advertised Receive/Both), 5-3 (Path IDs are not added when ADD-PATH is not negotiated for the family), 5-4 (the RIB is keyed by prefix and Path ID and the egress encodes the Path ID), and 5-5 (a negotiated family's received NLRI is parsed with its 4-octet Path ID) carry positive+negative tags. 2-1 (the same prefix with different Path IDs is treated as different paths) is {single-polarity: positive}: the per-peer RIB key is (prefix, Path ID) by construction. 2-2 (a speaker re-advertising a path generates its own Path Identifier) is {gap}: ze preserves the ingress Path Identifier on re-advertisement rather than minting its own. Disclosed in the docs/features/rfc-status.md RFC 7911 row.
What the public ledger says
Status: Supported
What the ledger says is covered
- Per-family send and receive modes, Path ID packing, NLRI path IDs where negotiated
- a re-advertised route carries ze's own Path Identifier (
RFC7911-2-2), assigned per ingress path ininternal/component/bgp/reactor/forward_path_id.goand read by both the raw same-context forward and the re-encode, so an announcement and its withdraw leave under one value and two clients that chose one identifier for a prefix stay two paths at a third - tests bound per requirement in
rfc/requirements/rfc7911.md.
What the ledger says remains:
Closed 2026-08-14:RFC7911-2-2. Until then ze relayed the ingress Path Identifier, so a route server merged two clients' paths for one prefix into one and lost a route.
Coverage
| Bucket | Count | What it counts |
|---|---|---|
| Positive and negative tests | 8 | one part of the gated population |
| Annotated instead of tested | 1 | 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 requirements | 9 | every gated MUST falls in exactly one bucket above |
Positive and negative tests (8): RFC7911-2-2, RFC7911-3-1, RFC7911-4-1, RFC7911-5-1, RFC7911-5-2, RFC7911-5-3, RFC7911-5-4, RFC7911-5-5
Annotated instead of tested (1): RFC7911-2-1
Requirements
| Requirement | Level | Section | Tests |
|---|---|---|---|
RFC7911-2-1 | Path Identifier must be assigned so that (Prefix, Path Identifier) uniquely identifies a path advertised to a neighbor (Section 2) | ||
| MUST | 2 - How to Identify a Path | negative
no testno negative test{single-polarity}: the RIB keys on (prefix, Path ID) so the paired negative would be a same-(prefix, Path ID) collapse-to-one assertion, but no such dedup/replacement test exists in the suite; TestPeerRIB_AddPath asserts only that distinct Path IDs yield distinct entries |
|
RFC7911-2-2 | A BGP speaker that re-advertises a route must generate its own Path Identifier (not reuse received) (Section 2) | ||
| MUST | 2 - How to Identify a Path | ||
RFC7911-3-1 | NLRI encoding must be extended by prepending the 4-octet Path Identifier field (Section 3) | ||
| MUST | 3 - Extended NLRI Encodings | ||
RFC7911-4-1 | Support for multiple AFI/SAFIs must be indicated in a single instance of the ADD-PATH Capability (Section 4) | ||
| MUST | 4 - ADD-PATH Capability | ||
RFC7911-5-1 | To send multiple paths, speaker must advertise ADD-PATH Capability with Send/Receive set to 2 or 3 (Section 5) | ||
| MUST | 5 - Operation | ||
RFC7911-5-2 | To send multiple paths, speaker must receive ADD-PATH Capability with Send/Receive set to 1 or 3 from peer (Section 5) | ||
| MUST | 5 - Operation | ||
RFC7911-5-3 | Speaker must follow RFC 4271 procedures unless ADD-PATH is negotiated for both send and receive (Section 5) | ||
| MUST | 5 - Operation | ||
RFC7911-5-4 | When ADD-PATH is negotiated, speaker must generate route updates based on (address prefix, Path Identifier) combination using extended NLRI encodings (Section 5) | ||
| MUST | 5 - Operation | ||
RFC7911-5-5 | Peer shall act accordingly in processing an UPDATE message related to a particular AFI/SAFI (Section 5) | ||
| SHALL | 5 - Operation | ||
RFC7911-4-2 | Invalid Send/Receive value (not 1, 2, or 3) should be treated as capability not understood and ignored per RFC 5492 (Section 4) | ||
| SHOULD | 4 - ADD-PATH Capability | positive
no testno positive testnegative
no testno negative test |
|
RFC7911-5-6 | Withdraw with unknown Path Identifier should be silently ignored (Section 5) | ||
| SHOULD | 5 - Operation | positive
no testno positive testnegative
no testno negative test |
|
RFC7911-5-7 | Best route per RFC 4271 should be included when more than one path is advertised, unless path was received from that neighbor (Section 5) | ||
| SHOULD | 5 - Operation | positive
no testno positive testnegative
no testno negative test |
|
RFC7911-5-8 | Implementation should take special care that forwarding plane of Receiving Speaker is not affected during graceful restart (Section 5) | ||
| SHOULD | 5 - Operation | positive
no testno positive testnegative
no testno negative test |
|
Gaps and untested MUSTs
RFC 7911 declares no gap, and every gated MUST it carries has a test bound to it.
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.
RFC7911-2-1
Path Identifier must be assigned so that (Prefix, Path Identifier) uniquely identifies a path advertised to a neighbor (Section 2)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| positive | TestPeerRIB_AddPath |
unit/verify | unproven |
RFC7911-2-2
A BGP speaker that re-advertises a route must generate its own Path Identifier (not reuse received) (Section 2)
Audit verdict: not audited: no reader has judged these tests
RFC7911-3-1
NLRI encoding must be extended by prepending the 4-octet Path Identifier field (Section 3)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestWriteNLRI_AddPath |
unit/verify | unproven |
| negative | adj-rib-in-replay-addpath-source.ci |
functional/verify | unproven |
| positive | TestWriteNLRI_WithStoredPathID |
unit/verify | unproven |
| positive | TestINETWithAddPath |
unit/verify | unproven |
| positive | adj-rib-in-replay-addpath-source.ci |
functional/verify | unproven |
RFC7911-4-1
Support for multiple AFI/SAFIs must be indicated in a single instance of the ADD-PATH Capability (Section 4)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestAddPathCapability |
unit/verify | unproven |
| positive | TestAddPathMultipleFamilies |
unit/verify | unproven |
RFC7911-5-1
To send multiple paths, speaker must advertise ADD-PATH Capability with Send/Receive set to 2 or 3 (Section 5)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestFromNegotiatedAddPath |
unit/verify | unproven |
| positive | TestNegotiateAddPath |
unit/verify | unproven |
| positive | TestFromNegotiatedAddPath |
unit/verify | unproven |
RFC7911-5-2
To send multiple paths, speaker must receive ADD-PATH Capability with Send/Receive set to 1 or 3 from peer (Section 5)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestFromNegotiatedAddPath |
unit/verify | unproven |
| positive | TestNegotiateAddPath |
unit/verify | unproven |
| positive | TestFromNegotiatedAddPath |
unit/verify | unproven |
RFC7911-5-3
Speaker must follow RFC 4271 procedures unless ADD-PATH is negotiated for both send and receive (Section 5)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestForwardSplitConvertsAddPathContext |
unit/verify | unproven |
| negative | TestForwardPathIDLeavesNonAddPathDestinationAlone |
unit/verify | unproven |
| positive | TestForwardSplitSameContextKeepsRawSplit |
unit/verify | unproven |
| positive | TestRFC7606Section54ReadsTypedNLRIUnderAddPath |
unit/verify | unproven |
RFC7911-5-4
When ADD-PATH is negotiated, speaker must generate route updates based on (address prefix, Path Identifier) combination using extended NLRI encodings (Section 5)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestSplitUpdateEndToEnd |
unit/verify | unproven |
| negative | TestWriteAnnounceUpdateWithAddPath |
unit/verify | unproven |
| positive | TestForwardPathIDWithdrawOfUnknownPathLeavesNothing |
unit/verify | unproven |
| positive | TestSplitUpdateAddPathEndToEnd |
unit/verify | unproven |
| positive | TestWriteAnnounceUpdateWithAddPath |
unit/verify | unproven |
RFC7911-5-5
Peer shall act accordingly in processing an UPDATE message related to a particular AFI/SAFI (Section 5)
Audit verdict: not audited: no reader has judged these tests
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestEnforceRFC7606_IPv4BodyAddPathLargePathIDAccepted |
unit/verify | unproven |
| negative | TestEnforceRFC7606_MPAddPathLargePathIDAccepted |
unit/verify | unproven |
| positive | TestEnforceRFC7606_IPv4BodyAddPathLargePathIDAccepted |
unit/verify | unproven |
| positive | TestEnforceRFC7606_MPAddPathLargePathIDAccepted |
unit/verify | unproven |
Extraction sign-off
| Field | Value |
|---|---|
| Reviewer | ze-work agent, spec-rfcgate-6 phase 5, rfc7911 |
| Signed off | 2026-08-31 |
| Register | prose |
| Source | rfc/full/rfc7911.txt |
| Source fingerprint | 950784683306b771 |
| Record | rfc/extraction/rfc7911.json |
| Mapped sentences | 7 |
| Declined as scope | 1 |
| Relocated to a spec, which Ze OWES | 0 |
| Unclassified | 0 |
Sections
| Section | Name | Sites | Disposition | Reason |
|---|---|---|---|---|
front |
not stated | 1 | walked | Title block, Abstract, Status of This Memo, Copyright Notice and Table of Contents. Walked rather than skipped because the site scan attributes one site here. That site is the IETF Trust Legal Provisions boilerplate and is excluded below. Nothing before section 1 binds a BGP speaker. |
1 |
Introduction | 0 | walked | Introduction. States that RFC 4271 makes no provision for advertising several paths for one prefix, and that this document defines the Path Identifier that lifts the limit. It reports what the extension does and directs nobody. |
1.1 |
not stated | 0 | walked | Specification of Requirements: the RFC 2119 key-words paragraph. It tells a reader how to read the other sections and binds no speaker. It is also what puts the lower-case 'must' of the copyright notice outside the normative set. |
2 |
How to Identify a Path | 2 | walked | How to Identify a Path. Two capitalised MUSTs, both mapped below: the Path Identifier is assigned so that (Prefix, Path Identifier) identifies a path uniquely toward one neighbor, and a re-advertising speaker generates its own identifier. The section's third normative sentence, 'A BGP speaker that receives a route should not assume that the identifier carries any particular semantics', writes 'should not' in lower case, so section 1.1 puts it outside the RFC 2119 set. It states no gated obligation and the summary records it under Encoding Rules rather than as a checklist row. |
3 |
Extended NLRI Encodings | 1 | walked | Extended NLRI Encodings. One MUST, mapped below, plus the four-octet Path Identifier diagram. The diagram assigns a field width and states no separate obligation. |
4 |
ADD-PATH Capability | 1 | walked | ADD-PATH Capability. Defines capability code 69 and the AFI/SAFI/Send-Receive tuple, and states one MUST, mapped below. The field descriptions assign values 1, 2 and 3 to receive, send and both; a value assignment is not a directive. The section's one SHOULD, on treating any other Send/Receive value as not understood, is advisory, so the site scan does not see it and it is listed unsourced here. |
5 |
Operation | 3 | walked | Operation. The only section carrying more obligations than sites. Three sites are mapped below, and each of the first two fuses two MUSTs into one sentence, so RFC7911-5-2 (receive the peer's capability with Send/Receive 1 or 3) and RFC7911-5-4 (generate the update on (prefix, Path Identifier) and use the extended encodings) are listed unsourced: 'mapped-to' names one id per site. The section's three SHOULDs are advisory and are listed here for the same reason. Its opening paragraph, that the RFC 4271 advertisement rules are otherwise unchanged and that a new advertisement for the same (prefix, Path Identifier) replaces the previous one, is indicative and states no separate obligation. |
6 |
Deployment Considerations | 0 | walked | Deployment Considerations. States that care is needed in deployment, that the capability exchange is the only explicit indication the extended encoding is in use, and that a packet analyzer without that state cannot decode the UPDATEs. Written in the indicative and in 'could', it directs no speaker. |
7 |
IANA Considerations | 0 | skipped (iana) | IANA Considerations. Records that IANA has assigned value 69 for the ADD-PATH Capability in the Capability Codes registry. It binds IANA, and the assignment is already an action taken. |
8 |
Security Considerations | 0 | walked | Security Considerations. Names the memory-exhaustion exposure of holding several paths per prefix, states it is not a new vulnerability, and encourages a reader to study [ADDPATH]. No countermeasure is directed at a speaker. |
9 |
References heading | 0 | skipped (references) | References heading. |
9.1 |
Normative References: RFC 2119, RFC 4271, RFC 4760, RFC 5492 | 0 | skipped (references) | Normative References: RFC 2119, RFC 4271, RFC 4760, RFC 5492. |
9.2 |
not stated | 0 | skipped (references) | Informative References: [ADDPATH], [FAST], RFC 3345, RFC 4272, RFC 4724, [STOP-OSC]. |
Excluded sentences
| Site | Excluded kind | Reason | Quote |
|---|---|---|---|
front:1 |
not-a-requirementnever bound Ze the sentence states a fact or describes another document, and directs no implementation |
The IETF Trust Legal Provisions boilerplate of the Copyright Notice. Its 'must' is lower case, which section 1.1 puts outside the normative set, and it binds a person who reuses Code Components from the document, never a BGP speaker on the wire. | Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. |
Superseded
No document obsoletes RFC 7911, so its obligations are stated where they were written.