RFC 9857
Advertisement of Segment Routing Policies Using BGP - Link State
π RFC 9857: Advertisement of Segment Routing Policies Using BGP - Link State π
okay so bestie, this one is all about getting SR Policy info out of nodes and into BGP-LS so external buddies (controllers, path computation, visualization tools) can see what's going on. no cap, it's giving visibility πβ¨
Quick title-block tea β:
- Number: RFC 9857 π¦
- Title: Advertisement of Segment Routing Policies Using BGP - Link State π
- Authors: S. Previdi (Individual), K. Talaulikar, Ed. (Cisco Systems), J. Dong (Huawei Technologies), H. Gredler (RtBrick Inc.), J. Tantsura (Nvidia) π«Ά
- Category: Standards Track π₯
- ISSN: 2070-1721
- Date: October 2025 π
- Obsoletes / Updates: the original title block doesn't list any, so there's nothing to report here π
Abstract β¨
okay so this doc describes a mechanism for collecting Segment Routing (SR) Policy info that a node already has locally, then advertising it into BGP - Link State (BGP-LS) updates π. external components can use that for path computation, reoptimization, service placement, network visualization, etc. literally so useful π
Status of This Memo π
this is an Internet Standards Track document π₯.
it's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community π«Ά. it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). more info on Internet Standards is in Section 2 of RFC 7841 π.
for the current status, errata, and how to send feedback, check out https://www.rfc-editor.org/info/rfc9857 πΈ.
Copyright Notice π
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved. π
this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as in effect on the publication date. please read those carefully, they spell out your rights and restrictions π
. code components pulled from this doc must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Revised BSD License β οΈ.
Table of Contents π§
1. Introduction
1.1. Requirements Language
2. Carrying SR Policy Information in BGP
3. SR Policy Candidate Path NLRI Type
3.1. SR Policy Headend as the BGP-LS Producer
3.2. PCE as the BGP-LS Producer
4. SR Policy Candidate Path Descriptor
5. SR Policy State TLVs
5.1. SR Binding SID TLV
5.2. SRv6 Binding SID TLV
5.3. SR Candidate Path State TLV
5.4. SR Policy Name TLV
5.5. SR Candidate Path Name TLV
5.6. SR Candidate Path Constraints TLV
5.6.1. SR Affinity Constraint Sub-TLV
5.6.2. SR SRLG Constraint Sub-TLV
5.6.3. SR Bandwidth Constraint Sub-TLV
5.6.4. SR Disjoint Group Constraint Sub-TLV
5.6.5. SR Bidirectional Group Constraint Sub-TLV
5.6.6. SR Metric Constraint Sub-TLV
5.7. SR Segment List TLV
5.7.1. SR Segment Sub-TLV
5.7.2. SR Segment List Metric Sub-TLV
5.7.3. SR Segment List Bandwidth Sub-TLV
5.7.4. SR Segment List Identifier Sub-TLV
6. Procedures
7. Manageability Considerations
8. IANA Considerations
8.1. BGP-LS NLRI Types
8.2. BGP-LS Protocol-IDs
8.3. BGP-LS TLVs
8.4. SR Policy Protocol-Origin
8.5. BGP-LS SR Segment Descriptors
8.6. BGP-LS SR Policy Metric Type
9. Security Considerations
10. References
10.1. Normative References
10.2. Informative References
Acknowledgements
Contributors
Authors' Addresses
1. Introduction πΈ
1.1. Requirements Language π
okay so SR Policy architecture details live in [RFC9256] π. an SR Policy has one or more candidate paths, and at any given time one and only one of them may be active (installed in forwarding and usable for steering traffic) π¦. each candidate path can have one or more SID lists, and when several SID lists are active, traffic gets load balanced across them βοΈ. this doc covers advertising state at the individual SR Policy candidate path level π―.
SR Policies are generally instantiated at the headend, based on either local configuration or controller-based programming of the node through various APIs and protocols (e.g., the Path Computation Element Communication Protocol (PCEP) or BGP) π§.
in a lot of networks, every SR Policy's configuration and state is needed by controllers π. these controllers know both topology and SR Policy state, which lets the operator optimize a bunch of functions and operations π₯.
one example of a controller is the stateful Path Computation Element (PCE) [RFC8231] π , which can help with path optimization π. PCEP has some extensions for Path Computation Clients (PCCs) to report Label Switched Path (LSP) states to the PCE, but that may not work in a management-based PCE architecture like Section 5.5 of [RFC4655] describes π. as shown in the figure below, the PCC isn't a Label Switching Router (LSR) in the routing domain, so the headend nodes of SR Policies may not implement PCEP π₯Ί. in that case, we need a general mechanism to collect SR Policy states from the ingress Label Edge Routers (LERs) π«Ά. this doc proposes an SR Policy state collection mechanism that complements the one in [RFC8231] β¨.
-----------
| ----- |
Service | | TED |<-+----------->
Request | ----- | TED synchronization
| | | | mechanism (e.g., the
v | | | routing protocol)
------------- Request/ | v |
| | Response| ----- |
| NMS |<--------+> | PCE | |
| | | ----- |
------------- -----------
Service |
Request |
v
---------- Signaling ----------
| Headend | Protocol | Adjacent |
| Node |<---------->| Node |
---------- ----------
Figure 1: Management-Based PCE Usage
in networks with composite PCE nodes (Section 5.1 of [RFC4655]), PCE runs on several routers, and PCCs can use the mechanism in [RFC8231] to report SR Policy info to the PCE nodes π°οΈ. an external component might also need to collect SR Policy info from all the PCEs to get a global view of every SR Policy path in the network π.
in multi-area or multi-AS setups, each area or AS can have a child PCE that collects the SR Policies in its domain π°. a parent PCE also needs to gather SR Policy info from multiple child PCEs to get a global view of SR Policy paths inside and across the domains involved π.
in another scenario, a centralized controller handles service placement π. getting SR Policy state info matters a lot here, so placement decisions meet application requirements and use network resources efficiently π.
the Network Management System (NMS) may need global visibility of the SR Policies as part of network visualization π.
BGP has been extended to distribute link-state and Traffic Engineering (TE) info to external components [RFC9552] π¦. reusing that same protocol to collect SR Policy and state info is great for these external components, since they don't need extra protocols just for topology info π. this doc describes how to distribute SR Policy info (both SR-MPLS and SRv6 [RFC8402]) to external components using BGP-LS, and it covers both explicit and dynamic candidate paths π«. advertisements for a composite candidate path are out of scope π«.
the BGP-LS Producer [RFC9552] originating the SR Policy advertisement can be either:
- an SR Policy headend node, or
- a PCE receiving SR Policy info from its PCCs (i.e., SR Policy headend nodes) via PCEP π§
the extensions here complement the BGP SR Policy SAFI [RFC9830] [RFC9831] and are used to advertise SR Policies from controllers to headend routers using BGP, by letting the operational state of those policies be reported back from the headend to the controllers π.
this doc focuses on SR Policies, but [BGP-LS-TE-PATH] adds more extensions for other TE paths like MPLS-TE LSPs π.
the encodings in this doc (specifically Sections 4 and 5) use flags that carry different types of SR Policy info π©. the doc uses "set" to mean a flag bit's value is 1, and "clear" when the value is 0 π§ .
1.1. Requirements Language π
okay this is the important bit π¨. the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here π.
2. Carrying SR Policy Information in BGP π«§
the "Link-State Network Layer Reachability Information (NLRI)" defined in [RFC9552] gets extended to carry SR Policy info π. new TLVs carried in the BGP-LS Attribute (also from [RFC9552]) are defined too, to carry SR Policy attributes in the sections that follow π.
here's the Link-State NLRI format as [RFC9552] defines it π:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NLRI Type | Total NLRI Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
// Link-State NLRI (variable) //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: BGP-LS NLRI Format
an extra NLRI Type called "SR Policy Candidate Path NLRI" (value 5) is defined for advertising SR Policy info π. this SR Policy Candidate Path NLRI is used to report the state details of individual SR Policy candidate paths, along with their underlying segment lists π.
to be continued! part 2 is coming up next bestie, don't go anywhere π§π
3. SR Policy Candidate Path NLRI Type β¨
okay so this section is where the NLRI type gets its actual shape π this document defines the SR Policy Candidate Path NLRI type, and here's how it's laid out:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Protocol-ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier |
| (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Local Node Descriptors TLV (for the Headend) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// SR Policy Candidate Path Descriptor TLV //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: SR Policy Candidate Path NLRI Format
Here's what each piece does π«Ά
- Protocol-ID: this one tells you which component owns the SR Policy state in the advertising node. The document introduces a brand-new Protocol-ID, "Segment Routing" (value
9), and it MUST be used for advertising SR Policies. no other option, bestie π₯ - Identifier: an 8-octet value, defined in Section 5.2 of [RFC9552] π¦
- Local Node Descriptors (TLV 256): defined in [RFC9552], and used the way this section spells out πΈ
- SR Policy Candidate Path Descriptor TLV: specified in Section 4, which is coming right up π
The Local Node Descriptors TLV is all about identifying the headend node of the SR Policy, and it does that no matter whether the BGP-LS Producer is the headend itself or a PCE node. iconic consistency β¨
The Local Node Descriptors TLV MUST include at least one of the following Node Descriptor TLVs:
- IPv4 Router-ID of Local Node (TLV 1028) [RFC9552], which identifies the headend node of the SR Policy as specified in Section 2.1 of [RFC9256].
- IPv6 Router-ID of Local Node (TLV 1029) [RFC9552], which identifies the headend node of the SR Policy as specified in Section 2.1 of [RFC9256].
The next subsections cover how the sub-TLVs inside the Local Node Descriptors TLV get encoded, and that depends on which node is the BGP-LS Producer π
3.1. SR Policy Headend as the BGP-LS Producer π
when the headend is the one doing the BGP-LS Producing, the Local Node Descriptors TLV MUST include the following Node Descriptor TLVs:
- BGP Router-ID (TLV 516) [RFC9086], which contains a valid BGP Identifier of the headend node of the SR Policy.
- Autonomous System (TLV 512) [RFC9552], which contains the Autonomous System Number (ASN) (or AS Confederation Identifier [RFC5065], if confederations are used) of the headend node of the SR Policy.
and the Local Node Descriptors TLV MAY also include these Node Descriptor TLVs in that same headend-as-producer case:
- BGP Confederation Member (TLV 517) [RFC9086], which contains the ASN of the confederation member (i.e., Member-AS Number). if BGP confederations are used, it contains the headend node of the SR Policy.
- Other Node Descriptors as defined in [RFC9552] to identify the headend node of the SR Policy. the call on whether the IGP Router-ID (TLV 515) holds a 4-octet OSPF Router-ID or a 6-octet ISO System-ID is made by looking at the length of that sub-TLV, since the Protocol-ID in the NLRI is always going to be "Segment Routing" π
3.2. PCE as the BGP-LS Producer π§
the PCE node MUST NOT include its own identifiers in the Node Descriptor TLV in the NLRI, because the Node Descriptor TLV MUST only carry the identifiers of the SR Policy headend. boundaries, periodt π
The Local Node Descriptors TLV MAY include the following Node Descriptor TLVs when the PCE node is the BGP-LS Producer and it has this information about the headend (for example, as part of its topology database):
- BGP Router-ID (TLV 516) [RFC9086], which contains a valid BGP Identifier of the headend node of the SR Policy.
- Autonomous System (TLV 512) [RFC9552], which contains the ASN (or AS Confederation Identifier [RFC5065], if confederations are used) of the headend node of the SR Policy.
- BGP Confederation Member (TLV 517) [RFC9086], which contains the ASN of the confederation member (i.e., Member-AS Number). if BGP confederations are used, it contains the headend node of the SR Policy.
- Other Node Descriptors as defined in [RFC9552] to identify the headend node of the SR Policy. the IGP Router-ID (TLV 515) check works the same way here: you go by the length of that sub-TLV, because the Protocol-ID in the NLRI is always going to be "Segment Routing" β¨
When a PCE node is acting as the BGP-LS Producer on behalf of one or more headends, it MAY include its own BGP Router-ID (TLV 516), Autonomous System (TLV 512), or BGP Confederation Member (TLV 517) in the BGP-LS Attribute. π
4. SR Policy Candidate Path Descriptor π¦
the SR Policy Candidate Path Descriptor TLV identifies an SR Policy candidate path as defined in [RFC9256]. it's a mandatory TLV for the SR Policy Candidate Path NLRI type, so it's non-negotiable π the format looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Protocol-Origin| Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Endpoint (4 or 16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Policy Color (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Originator AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Originator Address (4 or 16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Discriminator (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: SR Policy Candidate Path Descriptor Format
Here's the breakdown, field by field π
- Type:
554 - Length: variable, with valid values of
24,36, or48octets - Protocol-Origin: a 1-octet field that identifies the protocol or component responsible for instantiating this path, as specified in Section 2.3 of [RFC9256]. the protocol-origin code points you can use are listed in Section 8.4.
- Flags: a 1-octet field with the bit positions below defined. Other bits MUST be cleared by the originator and MUST be ignored by a receiver.
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|E|O| |
+-+-+-+-+-+-+-+-+
- E-Flag: indicates the encoding of an endpoint as an IPv6 address when set, and as an IPv4 address when clear.
- O-Flag: indicates the encoding of the originator address as an IPv6 address when set, and as an IPv4 address when clear.
- Reserved: 2 octets that MUST be set to
0by the originator and MUST be ignored by a receiver. π§Έ - Endpoint: 4 or 16 octets (as indicated by the flags) containing the address of the endpoint of the SR Policy, as specified in Section 2.1 of [RFC9256].
- Policy Color: 4 octets indicating the color of the SR Policy, as specified in Section 2.1 of [RFC9256]. π
- Originator ASN: 4 octets carrying the 4-byte encoding of the ASN of the originator. Refer to Section 2.4 of [RFC9256] for details.
- Originator Address: 4 or 16 octets (as indicated by the flags) carrying the address of the originator. Refer to Section 2.4 of [RFC9256] for details.
- Discriminator: 4 octets carrying the discriminator of the path. Refer to Section 2.5 of [RFC9256] for details.
5. SR Policy State TLVs πΈ
this section defines the various TLVs that let the headend report state at the SR Policy candidate path level. π‘ these TLVs (and their sub-TLVs) get carried in the optional non-transitive BGP-LS Attribute defined in [RFC9552], and they're associated with the SR Policy Candidate Path NLRI type.
the detailed procedures for advertisement are described in Section 6. π
5.1. SR Binding SID TLV π
okay so the SR Binding SID TLV is an optional TLV π¦ that reports the BSID and its attributes for the SR Policy candidate path. It MAY also optionally carry the Specified BSID value for reporting, as described in Section 6.2.3 of [RFC9256]. π Only one instance of this TLV gets advertised per candidate path. If there are multiple instances anyway, the first valid one wins (valid meaning it's not determined to be malformed per Section 8.2.2 of [RFC9552]), and the rest get ignored π
The TLV looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| BSID Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Binding SID (4 or 16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Specified Binding SID (4 or 16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: SR Binding SID TLV Format
Here's the breakdown π
Type: 1201 β¨
Length: Variable. Valid values are 12 or 36 octets.
BSID Flags: a 2-octet field that tells you the attribute and status of the Binding SID (BSID) for this candidate path. The semantics are explained in detail in Section 6.2 of [RFC9256]. Any bits that aren't defined here MUST be cleared by the originator and MUST be ignored by a receiver. The defined bit positions look like this:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|D|B|U|L|F| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- D-Flag: tells you which data plane the BSIDs belong to, and whether a BSID is a 16-octet SRv6 SID (when set) or a 4-octet SR/MPLS label value (when clear) π
- B-Flag: when set, the value in the BSID field is allocated. When clear, the BSID is not allocated π
- U-Flag: when set, the specified BSID value is unavailable. When clear, this candidate path is using the specified BSID. This flag gets ignored if there's no specified BSID π
- L-Flag: when set, the BSID value comes from the Segment Routing Local Block (SRLB) of the headend node. When clear, it comes from the local dynamic label pool π
- F-Flag: when set, the BSID value was allocated from a dynamic label pool because of fallback (for example, when a specified BSID is unavailable). When clear, there was no fallback for BSID allocation π§
RESERVED: 2 octets. These MUST be set to 0 by the originator and MUST be ignored by a receiver π«Ά
Binding SID: the operational or allocated BSID value, depending on the status flags π₯
Specified BSID: reports the explicitly specified BSID value, whether or not it actually got allocated. If no BSID was specified, this field is set to value 0 β¨
The BSID fields depend on the data plane (SRv6 or MPLS) that the D-Flag points to. If the D-Flag is set (SRv6 data plane), the BSID fields are 16 octets long. If the D-Flag is clear (MPLS data plane), they're 4 octets long. When carrying an MPLS Label, as shown below, the TC, S, and TTL fields (12 bits total) are RESERVED. They MUST be set to 0 by the originator and MUST be ignored by a receiver π
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Label | TC |S| TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 6: SR Binding SID Label Format
β οΈ Heads up for SRv6: the SR Binding SID sub-TLV can't signal the SRv6 Endpoint behavior [RFC8986] or the structure of the SID. So the SR Binding SID sub-TLV SHOULD NOT be used to advertise an SRv6 Binding SID. Instead, the SRv6 Binding SID TLV defined in Section 5.2 SHOULD be used for signaling an SRv6 Binding SID. Using the SR Binding SID sub-TLV for SRv6 advertisement is deprecated, and it's only documented here for backward compatibility with implementations that followed early draft versions of this specification π₯Ί
5.2. SRv6 Binding SID TLV π¦
okay this one is the SRv6 Binding SID (BSID) TLV, and it's an optional TLV for reporting the SRv6 BSID and its attributes for the SR Policy candidate path π It MAY also optionally carry the Specified SRv6 BSID value for reporting, as described in Section 6.2.3 of [RFC9256]. Unlike the last one, multiple instances of this TLV may be used to report each of the SRv6 BSIDs associated with the candidate path β¨
The TLV looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| BSID Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Binding SID (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Specified Binding SID (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// sub-TLVs (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: SRv6 Binding SID TLV Format
Here's the rundown πΈ
Type: 1212 π
Length: Variable
BSID Flags: a 2-octet field for the attribute and status of the BSID for this candidate path. The semantics are described in detail in Section 6.2 of [RFC9256]. Any bits that aren't defined here MUST be cleared by the originator and MUST be ignored by a receiver. The defined bit positions look like this:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|B|U|F| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- B-Flag: when set, the value in the BSID field is allocated. When clear, the BSID is not allocated π¦
- U-Flag: when set, the specified BSID value is unavailable. When clear, this candidate path is using the specified BSID. This flag gets ignored if there's no specified BSID π
- F-Flag: when set, the BSID value was allocated dynamically because of fallback (for example, when the specified BSID is unavailable). When clear, there was no fallback for BSID allocation π
RESERVED: 2 octets. These MUST be set to 0 by the originator and MUST be ignored by a receiver π«Ά
Binding SID: the operational or allocated BSID value, depending on the status flags π₯
Specified BSID: reports the explicitly specified BSID value, whether or not it got successfully allocated. If no BSID was specified, this field is set to value 0 π§
Sub-TLVs: variable, and they carry any other optional attributes associated with the SRv6 BSID π
The SRv6 Endpoint Behavior TLV (1250) and the SRv6 SID Structure TLV (1252) MAY optionally be used as sub-TLVs of the SRv6 Binding SID TLV. They indicate the SRv6 Endpoint behavior and SID structure for the Binding SID value in the TLV π [RFC9514] defines both the SRv6 Endpoint Behavior TLV and the SRv6 SID Structure TLV β¨
5.3. SR Candidate Path State TLV π
okay so this TLV is the one that spills the tea on the operational status and attributes of the SR Policy at the candidate path level π Only a single instance of this TLV is advertised for a given candidate path. If multiple instances are present, then the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored. first valid one wins, no cap π
The TLV has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Priority | RESERVED | Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Preference (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 8: SR Candidate Path State TLV Format π§
Where:
Type: 1202 π
Length: 8 octets
Priority: 1-octet value that indicates the priority of the candidate path. Refer to Section 2.12 of [RFC9256]. β¨
RESERVED: 1 octet. This MUST be set to 0 by the originator and MUST be ignored by a receiver. π
Flags: 2-octet field that indicates the attribute and status of the candidate path. The following bit positions are defined, and the semantics are described in Section 5 of [RFC9256] unless stated otherwise for individual flags. Other bits MUST be cleared by the originator and MUST be ignored by a receiver. the bits you don't recognize are basically a "do not touch" zone π«
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|S|A|B|E|V|O|D|C|I|T|U| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Where:
S-Flag: Indicates that the candidate path is in an administrative shut state when set and not in an administrative shut state when clear. π
A-Flag: Indicates that the candidate path is the active path (i.e., one provisioned in the forwarding plane as specified in Section 2.9 of [RFC9256]) for the SR Policy when set and not the active path when clear. main character path π
B-Flag: Indicates that the candidate path is the backup path (i.e., one identified for path protection of the active path as specified in Section 9.3 of [RFC9256]) for the SR Policy when set and not the backup path when clear. the understudy, but make it protected π‘οΈ
E-Flag: Indicates that the candidate path has been evaluated for validity (e.g., headend may evaluate candidate paths based on their preferences) when set and has not been evaluated for validity when clear. π
V-Flag: Indicates that the candidate path has at least one valid SID list when set and that no valid SID list is available or evaluated when clear. When the E-flag is clear (i.e., the candidate path has not been evaluated), then this flag MUST be set to 0 by the originator and MUST be ignored by a receiver. ngl this one has a whole rule set, read it twice π«Ά
O-Flag: Indicates that the candidate path was instantiated by the headend due to an on-demand next hop trigger based on a local template when set and that the candidate path has not been instantiated due to an on-demand next hop trigger when clear. Refer to Section 8.5 of [RFC9256] for details. π
D-Flag: Indicates that the candidate path was delegated for computation to a PCE/controller when set and that the candidate path has not been delegated for computation when clear. π§
C-Flag: Indicates that the candidate path was provisioned by a PCE/controller when set and that the candidate path was not provisioned by a PCE/controller when clear. ποΈ
I-Flag: Indicates that the candidate path is to perform the "Drop-Upon-Invalid" behavior when no other valid candidate path is available for this SR Policy when the flag is set. Refer to Section 8.2 of [RFC9256] for details. When clear, it indicates that the candidate path is not enabled for the "Drop-Upon-Invalid" behavior. the backup plan that only kicks in when everything else is cooked π
T-Flag: Indicates that the candidate path has been marked as eligible for use as a transit policy on the headend when set and not eligible for use as a transit policy when clear. Transit policy is a policy whose BSID can be used in the segment list of another SR Policy. Refer to Section 8.3 of [RFC9256] for steering into a transit policy using its BSID. policies stacking on policies, it's giving Inception π
U-Flag: Indicates that the candidate path is reported as active and is dropping traffic as a result of the "Drop-Upon-Invalid" behavior being activated for the SR Policy when set. When clear, it indicates that the candidate path is not dropping traffic as a result of the "Drop-Upon-Invalid" behavior. Refer to Section 8.2 of [RFC9256] for details. π the drop-everything mode, sorry bestie
Preference: 4-octet value that indicates the preference of the candidate path. Refer to Section 2.7 of [RFC9256] for details. π
5.4. SR Policy Name TLV πΈ
The SR Policy Name TLV is an optional TLV that is used to carry the symbolic name associated with the SR Policy. Only a single instance of this TLV is advertised for a given candidate path. If multiple instances are present, then the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored. same rule as before, the first valid one slays π
The TLV has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SR Policy Name (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 9: SR Policy Name TLV Format π¦
Where:
Type: 1213 π
Length: Variable
SR Policy Name: Symbolic name for the SR Policy without a NUL terminator as specified in Section 2.1 of [RFC9256]. It is RECOMMENDED that the size of the symbolic name be limited to 255 bytes. Implementations MAY choose to truncate long names to 255 bytes when signaling via BGP-LS. π·οΈ keep the name short and sweet, it's giving tidy
5.5. SR Candidate Path Name TLV π¦
The SR Candidate Path Name TLV is an optional TLV that is used to carry the symbolic name associated with the candidate path. Only a single instance of this TLV is advertised for a given candidate path. If multiple instances are present, then the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored. first valid one, again, iconic β¨
The TLV has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Candidate Path Name (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 10: SR Candidate Path Name TLV Format π
Where:
Type: 1203 π
Length: Variable
Candidate Path Name: Symbolic name for the SR Policy candidate path without a NUL terminator as specified in Section 2.6 of [RFC9256]. It is RECOMMENDED that the size of the symbolic name be limited to 255 bytes. Implementations MAY choose to truncate long names to 255 bytes when signaling via BGP-LS. π«Ά same 255-byte energy as the policy name, consistent bestie
5.6. SR Candidate Path Constraints TLV β¨
okay bestie, this one is the SR Candidate Path Constraints TLV π It's optional, and it's how you report the constraints attached to a candidate path π Those constraints usually get applied to a dynamic candidate path, the kind the headend computes itself or hands off to a controller π¦ They can also show up on an explicit path, where the computing entity is supposed to check that the path still meets them. If it doesn't, the path gets invalidated (like when the topology changes) π
Only one of these TLVs is advertised per candidate path. If there's more than one, the first valid one wins (valid meaning it isn't considered malformed under Section 8.2.2 of [RFC9552]), and the rest get ignored π«Ά
The TLV looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | RESERVED1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MTID | Algorithm | RESERVED2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-TLVs (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 11: SR Candidate Path Constraints TLV Format
Here's the breakdown πΈ
- Type:
1204 - Length: Variable
- Flags: a 2-octet field that shows which constraints are applied to the candidate path. Only the bit positions below are defined. The other bits MUST be cleared by the originator and MUST be ignored by a receiver π
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|D|P|U|A|T|S|F|H| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
And here's what each flag does π
- D-Flag: the candidate path uses an SRv6 data plane when this is set, and an SR/MPLS data plane when it's clear.
- P-Flag: the candidate path prefers only protected SIDs when this is set, and doesn't have that preference when it's clear. It's mutually exclusive with the U-flag, so both can't be set at once π₯
- U-Flag: the candidate path prefers only unprotected SIDs when this is set, and doesn't have that preference when it's clear. It's mutually exclusive with the P-Flag, so both can't be set at once π
- A-Flag: the candidate path uses only SIDs from the specified SR Algorithm when this is set, and doesn't when it's clear.
- T-Flag: the candidate path uses only SIDs from the specified topology when this is set, and doesn't when it's clear.
- S-Flag: using protected (P-flag) or unprotected (U-flag) SIDs becomes a strict constraint instead of a preference when this is set. When it's clear, there's no strict constraint, just a preference β¨
- F-Flag: the candidate path is fixed once computed and doesn't change unless an operator steps in when this is set. When it's clear, the path may get modified during recomputation π¦
- H-Flag: the candidate path uses only adjacency SIDs and goes hop-by-hop over the links behind those adjacency SIDs when this is set. When it's clear, the path isn't restricted to hop-by-hop adjacency SIDs π§
- RESERVED1: 2 octets. MUST be set to 0 by the originator and MUST be ignored by a receiver π
- MTID: the multi-topology identifier of the IGP topology that's preferred when the path gets set up. When the T-flag is set, the path strictly uses only that topology's SIDs π
- Algorithm: the algorithm that's preferred when the path gets set up. When the A-flag is set, the path strictly uses only that algorithm's SIDs. The algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group π
- RESERVED2: 1 octet. MUST be set to 0 by the originator and MUST be ignored by a receiver π«Ά
- sub-TLVs: one or more optional sub-TLVs MAY be included in this TLV to describe other constraints. These are: SR Affinity Constraint, SR Shared Risk Link Group (SRLG) Constraint, SR Bandwidth Constraint, SR Disjoint Group Constraint, SR Bidirectional Group Constraint, and SR Metric Constraint π
Those constraint sub-TLVs are defined below, so keep scrolling π
5.6.1. SR Affinity Constraint Sub-TLV
okay, the SR Affinity Constraint sub-TLV is an optional sub-TLV of the SR Candidate Path Constraints TLV, and it carries the affinity constraints [RFC2702] for the candidate path π¦ The affinity gets expressed as an Extended Administrative Group (EAG), as defined in [RFC7308]. Only one of these sub-TLVs gets advertised per candidate path. If there are several, the first valid one (not malformed under Section 8.2.2 of [RFC9552]) is used and the rest are ignored π
It looks like this π
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Excl-Any-Size | Incl-Any-Size | Incl-All-Size | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Exclude-Any EAG (optional, variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Include-Any EAG (optional, variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Include-All EAG (optional, variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 12: SR Affinity Constraint Sub-TLV Format
Where:
- Type:
1208 - Length: Variable, dependent on the size of the EAG. MUST be a non-zero multiple of 4 octets π
- Exclude-Any-Size: 1 octet that gives the size of the Exclude-Any EAG bitmask in multiples of 4 octets. A value of 0 means the Exclude-Any EAG field is skipped, and a value of 1 means 4 octets of Exclude-Any EAG are included πΈ
- Include-Any-Size: 1 octet that gives the size of the Include-Any EAG bitmask in multiples of 4 octets. A value of 0 means the Include-Any EAG field is skipped, and a value of 1 means 4 octets of Include-Any EAG are included πΈ
- Include-All-Size: 1 octet that gives the size of the Include-All EAG bitmask in multiples of 4 octets. A value of 0 means the Include-All EAG field is skipped, and a value of 1 means 4 octets of Include-All EAG are included πΈ
- RESERVED: 1 octet. MUST be set to 0 by the originator and MUST be ignored by a receiver π«Ά
- Exclude-Any EAG: the bitmask for the affinities that get excluded from the path π«
- Include-Any EAG: the bitmask for the affinities that get included in the path β
- Include-All EAG: the bitmask for all the affinities that get included in the path π
5.6.2. SR SRLG Constraint Sub-TLV
the SR SRLG Constraint sub-TLV is another optional sub-TLV of the SR Candidate Path Constraints TLV π§ It carries the SRLG values [RFC4202] that have been excluded from the candidate path. Only one instance gets advertised per candidate path, and if there are multiple, the first valid one (not malformed under Section 8.2.2 of [RFC9552]) is used while the rest get ignored π
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SRLG Values (variable, multiples of 4 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 13: SR SRLG Constraint Sub-TLV Format
Where:
- Type:
1209 - Length: Variable, dependent on the number of SRLGs encoded. MUST be a non-zero multiple of 4 octets π
- SRLG Values: one or more SRLG values, each 4 octets long β
5.6.3. SR Bandwidth Constraint Sub-TLV
last one in this section! The SR Bandwidth Constraint sub-TLV is an optional sub-TLV of the SR Candidate Path Constraints TLV, used to indicate the bandwidth requested for the candidate path π Only one instance gets advertised per candidate path, and if there are several, the first valid one (not malformed under Section 8.2.2 of [RFC9552]) is used and the rest are ignored π
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bandwidth |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 14: SR Bandwidth Constraint Sub-TLV Format
Where:
- Type:
1210 - Length: 4 octets
- Bandwidth: 4 octets that specify the desired bandwidth in bytes per second, in IEEE floating point format [IEEE754] π¦
5.6.4. SR Disjoint Group Constraint Sub-TLV β¨
okay bestie, this one is all about keeping two SR Policy candidate paths apart π¦ The SR Disjoint Group Constraint sub-TLV is an optional sub-TLV of the SR Candidate Path Constraints TLV, and it carries the disjointness constraint for the candidate path π
Here's the vibe: you put two candidate paths in the same disjoint group identifier, then say what kind of disjointness you want between them. The types of disjointness are described in Section 3 of [RFC8800], and the level goes up like this: link, node, SRLG, Node + SRLG π The computation is expected to hit the highest level requested. If that's not possible, it falls back to a lesser level, one step at a time, based on the levels indicated π«Ά
Only a single instance of this sub-TLV is advertised per candidate path π If there are multiple instances, the first valid one is used and the rest get ignored. "Valid" here means not determined to be malformed as per Section 8.2.2 of [RFC9552] π
The sub-TLV looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Request Flags | Status Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Disjoint Group Identifier (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 15: SR Disjoint Group Constraint Sub-TLV Format π
Where:
- Type:
1211 - Length: Variable. Minimum of 8 octets.
Request Flags: 1 octet that tells the level of disjointness you're asking for, as flags. These flags are defined, and the other bits MUST be cleared by the originator and MUST be ignored by a receiver πΈ
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|S|N|L|F|I| |
+-+-+-+-+-+-+-+-+
Where:
- S-Flag: SRLG disjointness is requested when set, and not requested when clear.
- N-Flag: Node disjointness is requested when set, and not requested when clear.
- L-Flag: Link disjointness is requested when set, and not requested when clear.
- F-Flag: The computation may fall back to a lower level of disjointness amongst the ones requested when all cannot be achieved when set. Fallback to a lower level is not allowed when clear. π
- I-Flag: The computation may fall back to the default best path (e.g., an IGP path) in case none of the desired disjointness can be achieved when set. Fallback to the default best path is not allowed when clear. π
Status Flags: 1 octet that tells the level of disjointness the computation actually achieved, as flags. The following flags are defined, and the other bits MUST be cleared by the originator and MUST be ignored by a receiver β
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|S|N|L|F|I|X| |
+-+-+-+-+-+-+-+-+
Where:
- S-Flag: SRLG disjointness is achieved when set, and not achieved when clear.
- N-Flag: Node disjointness is achieved when set. When clear, node disjointness was not achieved.
- L-Flag: Link disjointness is achieved when set. When clear, link disjointness was not achieved.
- F-Flag: The computation has fallen back to a lower level of disjointness than requested when set. When clear, there has been no fallback to a lower level. π§
- I-Flag: The computation has fallen back to the best path (e.g., an IGP path) and disjointness has not been achieved when set. When clear, there has been no fallback to the best path. π
- X-Flag: The disjointness constraint could not be achieved, so the path has been invalidated, when set. When clear, the path has not been invalidated due to unmet disjointness constraints. π
RESERVED: 2 octets. MUST be set to 0 by the originator and MUST be ignored by a receiver. π«Ά
Disjoint Group Identifier: 4-octet value that is the group identifier for a set of disjoint paths. Alternatively, this field MAY contain the entire PCEP ASSOCIATION Object as specified in Section 6.1 of [RFC8697] (including its optional TLVs) when PCEP is used for the signaling of the SR Policy candidate path, and where the BGP-LS Producer is unable to determine a group identifier that fits in a 4-octet value. (PCEP supports multiple ways of encoding an association identifier, which is why this happens π) Note that parsing the PCEP object is expected to be performed only by the BGP-LS Consumer (so it's outside the scope of this document) and not by any BGP Speaker as specified in [RFC9552]. If the PCEP object size is such that the update for a single SR Policy Candidate Path NLRI would exceed the supported BGP message size by the implementation, then the PCEP ASSOCIATION Object MUST NOT be encoded, and this sub-TLV is skipped along with an error log. Refer to Section 5.3 of [RFC9552] for discussion on implications of encoding large sets of information into BGP-LS. π
5.6.5. SR Bidirectional Group Constraint Sub-TLV π¦
The SR Bidirectional Group Constraint sub-TLV is an optional sub-TLV of the SR Candidate Path Constraints TLV, and it carries the bidirectional constraint for the candidate path π Two SR Policy candidate paths get a bidirectional relationship by sharing the same bidirectional group identifier, and then you specify the type of bidirectional routing you want between their paths πΈ Again, only a single instance is advertised per candidate path. If there are multiple instances, the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored π
The sub-TLV looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bidirectional Group Identifier (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 16: SR Bidirectional Group Constraint Sub-TLV Format π
Where:
- Type:
1214 - Length: Variable. Minimum of 8 octets.
Flags: 2 octets that carry the bidirectional path setup information, as flags. The following flags are defined, and the other bits MUST be cleared by the originator and MUST be ignored by a receiver π
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|C| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Where:
- R-Flag: The candidate path of the SR Policy forms the reverse path when set. When clear, the candidate path forms the forward path. π₯
- C-Flag: The bidirectional path is co-routed when set, and not co-routed when clear. β¨
RESERVED: 2 octets. MUST be set to 0 by the originator and MUST be ignored by a receiver. π«Ά
Bidirectional Group Identifier: 4-octet value that is the group identifier for a set of bidirectional paths. Alternatively, this field MAY contain the entire PCEP ASSOCIATION Object as specified in Section 6.1 of [RFC8697] (including its optional TLVs) when PCEP is used for the signaling of the SR Policy candidate path, and where the BGP-LS Producer is unable to determine a group identifier that fits in a 4-octet value (since PCEP supports multiple ways of encoding an association identifier π). Note that parsing the PCEP object is expected to be performed only by the BGP-LS Consumer (so it's outside the scope of this document) and not by any BGP Speaker as specified in [RFC9552]. If the PCEP object size is such that the update for a single SR Policy Candidate Path NLRI would exceed the supported BGP message size by the implementation, then the PCEP ASSOCIATION Object MUST NOT be encoded, and this sub-TLV is skipped along with an error log. Refer to Section 5.3 of [RFC9552] for discussion on implications of encoding large sets of information into BGP-LS. π¦
? Thanks for pasting the RFC text, but the system-level setup for this conversation has me rewriting RFC documents in a Gen Z voice, and the request here is to keep going with part 7 of that rewrite. Before I do, a quick note: the environment block above is unrelated to the RFC task. It describes a working directory and shell, and it has nothing to do with this document, so I'm ignoring it.
Here is part 7, continuing from 5.6.5 with no re-intro:
5.6.6. SR Metric Constraint Sub-TLV β¨
okay bestie, this one is SO important π The SR Metric Constraint sub-TLV is an optional sub-TLV of the SR Candidate Path Constraints TLV, and it's how a candidate path reports the optimization metric it's using π For a dynamic path computation, it reports the metric used along with its parameters. For an explicit path, this sub-TLV MAY be used to report the metric margin, or it's bound to be used for validation (so the path gets invalidated if the metric goes beyond the specified values) π You can include multiple instances of this sub-TLV to report different metric type uses π«Ά
The sub-TLV has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Type | Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Margin |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Bound |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 17: SR Metric Constraint Sub-TLV Format
Where:
Type: 1215 π
Length: 12 octets
Metric Type: 1-octet field that identifies the type of metric being used. Here's the list of metric types introduced by this document, with references for each. When the references point to IS-IS and OSPF specs, those metric types are defined for a link, while in the SR Policy context they relate to the candidate path or the segment list. The metric type code points that may be used in this sub-TLV are also listed in Section 8.6 of this document. Heads up: the metric types in this field come from the "BGP-LS SR Policy Metric Types" IANA registry, which includes IGP Metric Types as well as metric types specific to SR Policy path computation (so they are NOT from the "IGP Metric-Type" registry) π§ Additional metric types may be introduced by future documents. This document doesn't assume that a smaller metric value is better than a higher one; that depends on the semantics of the specific metric type. So this document uses the words "best" and "worst" to abstract that aspect when talking about metric margins and bounds π¦
Type 0: IGP: This is specified in Section 3 of [RFC5305] for IS-IS and is known as the default metric. It's specified in [RFC2328] for OSPFv2 and in [RFC5340] for OSPFv3, and it's known as the metric in both.
Type 1: Min Unidirectional Delay: This is specified in Section 4.2 of [RFC8570] for IS-IS and in Section 4.2 of [RFC7471] for OSPFv2/OSPFv3.
Type 2: TE: This is specified in Section 3.7 of [RFC5305] for IS-IS as the TE default metric, in Section 2.5.5 of [RFC3630] for OSPFv2, and in Section 4 of [RFC5329] for OSPFv3.
Type 3: Hop Count: This is specified in Section 7 of [RFC5440].
Type 4: SID List Length: This is specified in Section 4.5 of [RFC8664].
Type 5: Bandwidth: This is specified in Section 4 of [RFC9843].
Type 6: Avg Unidirectional Delay: This is specified in Section 4.1 of [RFC8570] for IS-IS and in Section 4.1 of [RFC7471] for OSPFv2/OSPFv3.
Type 7: Unidirectional Delay Variation: This is specified in Section 4.3 of [RFC8570] for IS-IS and in Section 4.3 of [RFC7471] for OSPFv2/OSPFv3.
Type 8: Loss: This is specified in Section 4.4 of [RFC8570] for IS-IS and in Section 4.4 of [RFC7471] for OSPFv2/OSPFv3.
Types 128 to 255 (both inclusive): User Defined: This is specified in Section 2 of [RFC9843] for IS-IS and OSPF.
Flags: 1-octet field that indicates the validity of the metric fields and their semantics. The following bit positions are defined. The other bits MUST be cleared by the originator and MUST be ignored by a receiver π₯
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|O|M|A|B| |
+-+-+-+-+-+-+-+-+
Where:
O-Flag: Indicates that this is the optimization metric being reported for a dynamic candidate path when set, and that the metric is NOT the optimization metric when clear. This bit MUST NOT be set in more than one instance of this TLV for a given candidate path advertisement π
M-Flag: Indicates that the metric margin allowed is specified when set, and that it is not specified when clear.
A-Flag: Indicates that the metric margin is specified as an absolute value when set, and that the metric margin is expressed as a percentage of the minimum metric when clear.
B-Flag: Indicates that the metric bound allowed for the path is specified when set, and that it is not specified when clear.
RESERVED: 2 octets. MUST be set to 0 by the originator and MUST be ignored by a receiver.
Metric Margin: 4-octet value that indicates the metric margin when the M-flag is set. Depending on the A-flag, the metric margin is specified as either an absolute value or a percentage of the best computed path metric based on the specified constraints for path calculation. The margin lets the metric value of the computed path vary (depending on the semantics of the specific metric type) from the best metric value possible, so you can optimize for other factors that aren't specified as constraints, like bandwidth availability, minimal SID stack depth, and maximizing ECMP for the computed SR path π
Metric Bound: 4-octet value that indicates the worst metric value (depending on the semantics of the specific metric type) allowed when the B-flag is set. If the computed path metric crosses the specified bound value, then the path is considered invalid π«
The absolute metric margin and the metric bound values are encoded as specified for each metric type. For metric types smaller than 4 octets, the most significant bits are filled with zeros. The percentage metric margin is encoded as an unsigned integer percentage value π
5.7. SR Segment List TLV πΈ
The SR Segment List TLV is used to report a single SID list of a candidate path. You can use multiple instances of this TLV to report multiple SID lists of a candidate path π§ββοΈ
The TLV has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | RESERVED1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MTID | Algorithm | RESERVED2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Weight (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-TLVs (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 18: SR Segment List TLV Format
Where:
Type: 1205
Length: Variable
Flags: 2-octet field that indicates the attribute and status of the SID list. The following bit positions are defined, and their semantics are described in detail in [RFC9256]. Other bits MUST be cleared by the originator and MUST be ignored by a receiver π«Ά
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|D|E|C|V|R|F|A|T|M| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Where:
D-Flag: Indicates that the SID list consists of SRv6 SIDs when set, and SR/MPLS labels when clear.
E-Flag: Indicates that the SID list is associated with an explicit candidate path when set, and a dynamic candidate path when clear. All segment lists of a given candidate path MUST be either explicit or dynamic. In case of inconsistency, the receiver MAY consider them all to be dynamic π
C-Flag: Indicates that the SID list has been computed for a dynamic path when set. It is always reported as set for explicit paths. When clear, it indicates that the SID list has not been computed for a dynamic path.
V-Flag: Indicates that the SID list has passed verification (or its verification wasn't required) when set, and that it failed verification when clear.
R-Flag: Indicates that the first Segment has been resolved when set, and that it failed resolution when clear.
F-Flag: Indicates that the computation for the dynamic path failed when set, and that it succeeded (or wasn't required in the case of an explicit path) when clear.
A-Flag: Indicates that all the SIDs in the SID list belong to the specified algorithm when set, and that not all the SIDs belong to the specified algorithm when clear.
T-Flag: Indicates that all the SIDs in the SID list belong to the specified topology (identified by the multi-topology ID) when set, and that not all the SIDs belong to the specified topology when clear.
M-Flag: Indicates that the SID list has been removed from the forwarding plane due to fault detection by a monitoring mechanism (e.g., Bidirectional Forwarding Detection (BFD)) when set, and that no fault is detected or no monitoring is being done when clear. β
RESERVED1: 2 octets. MUST be set to 0 by the originator and MUST be ignored by a receiver.
MTID: 2 octets that indicate the multi-topology identifier of the IGP topology that is to be used when the T-flag is set.
Algorithm: 1 octet that indicates the algorithm of the SIDs used in the SID list when the A-flag is set. The algorithm values are from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
RESERVED2: 1 octet. MUST be set to 0 by the originator and MUST be ignored by a receiver.
Weight: 4-octet field that indicates the weight associated with the SID list for weighted load balancing. Refer to Sections 2.2 and 2.11 of [RFC9256].
Sub-TLVs: Variable, and they contain the ordered set of Segments and any other optional attributes associated with the specific SID list.
The SR Segment sub-TLV (defined in Section 5.7.1) MUST be included as an ordered set of sub-TLVs within the SR Segment List TLV when the SID list is not empty. A SID list may be empty in certain situations (e.g., for a dynamic path) where the headend hasn't yet performed the computation and hence hasn't derived the segments required for the path. In such cases, where the SID list is empty, the SR Segment List TLV MUST NOT include any SR Segment sub-TLVs π
5.7.1. SR Segment Sub-TLV β¨
Okay bestie, the SR Segment sub-TLV describes one single segment in a SID list π¦ One or more of these, lined up in order, make up the whole SID list for an SR Policy candidate path. It's a sub-TLV of the SR Segment List TLV, and it looks like this:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Segment Type | RESERVED | Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID (4 or 16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Segment Descriptor (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// sub-TLVs (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 19: SR Segment Sub-TLV Format
Here's the breakdown π
- Type:
1206 - Length: Variable
- Segment Type: 1 octet that tells you what kind of segment this is. The initial values are specified by this document (see Section 5.7.1.1 for details). Additional segment types are possible but are out of scope for this document.
- RESERVED: 1 octet. MUST be set to 0 by the originator and MUST be ignored by a receiver.
- Flags: A 2-octet field that shows the attribute and status of the Segment and its SID. The bit positions below are defined, and their semantics are described in Section 5 of [RFC9256]. Other bits MUST be cleared by the originator and MUST be ignored by a receiver.
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|S|E|V|R|A| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- S-Flag: Set means the SID value is present in the SID field. Clear means there's no value there.
- E-Flag: Set means the SID value was explicitly provisioned (locally on the headend or via a controller/PCE). Clear means the headend dynamically resolved it.
- V-Flag: Set means the SID passed verification or didn't need verification. Clear means it failed verification.
- R-Flag: Set means the SID was resolved or didn't need resolution (for example, because it isn't the first SID). Clear means it failed resolution.
- A-Flag: Set means the Algorithm indicated in the segment descriptor is valid. Clear means the headend can't figure out the algorithm of the SID.
- SID: 4 octets carrying the MPLS Label, or 16 octets carrying the SRv6 SID, depending on the Segment Type. When it carries the MPLS Label (shown below), the TC, S, and TTL (12 bits total) are RESERVED and MUST be set to 0 by the originator and MUST be ignored by a receiver.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Label | TC |S| TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Segment Descriptor: A variable-size segment descriptor based on the type of segment (refer to Section 5.7.1.1 for details).
- Sub-Sub-TLVs: Variable in size, and they carry any other optional attributes associated with the specific segment.
The SRv6 Endpoint Behavior TLV (1250) and the SRv6 SID Structure TLV (1252), both defined in [RFC9514], are used as sub-sub-TLVs of the SR Segment sub-TLV. They're optional, and they're how you advertise the SRv6 Endpoint behavior and SID structure for the SRv6-specific segment types πΈ
5.7.1.1. Segment Descriptors
Section 4 of [RFC9256] defines multiple types of segments and what they mean. This section defines how the segment descriptors get encoded for each of those segment types, to be used in the Segment sub-TLV we just covered in Section 5.7.1 π§
The following types are currently defined, and their mappings to the respective segment types are defined in [RFC9256]:
+======+=================================================+
| Type | Segment Description |
+======+=================================================+
| 1 | (Type A) SR-MPLS Label |
+------+-------------------------------------------------+
| 2 | (Type B) SRv6 SID |
+------+-------------------------------------------------+
| 3 | (Type C) IPv4 Prefix with optional SR Algorithm |
+------+-------------------------------------------------+
| 4 | (Type D) IPv6 Global Prefix with optional SR |
| | Algorithm for SR-MPLS |
+------+-------------------------------------------------+
| 5 | (Type E) IPv4 Prefix with Local Interface ID |
+------+-------------------------------------------------+
| 6 | (Type F) IPv4 Addresses for link endpoints as |
| | Local, Remote pair |
+------+-------------------------------------------------+
| 7 | (Type G) IPv6 Prefix and Interface ID for link |
| | endpoints as Local, Remote pair for SR-MPLS |
+------+-------------------------------------------------+
| 8 | (Type H) IPv6 Addresses for link endpoints as |
| | Local, Remote pair for SR-MPLS |
+------+-------------------------------------------------+
| 9 | (Type I) IPv6 Global Prefix with optional SR |
| | Algorithm for SRv6 |
+------+-------------------------------------------------+
| 10 | (Type J) IPv6 Prefix and Interface ID for link |
| | endpoints as Local, Remote pair for SRv6 |
+------+-------------------------------------------------+
| 11 | (Type K) IPv6 Addresses for link endpoints as |
| | Local, Remote pair for SRv6 |
+------+-------------------------------------------------+
Table 1: SR Segment Types
5.7.1.1.1. Type 1: Segment Type A
This one's an SR-MPLS type, and the segment is specified simply as the label. Here's its segment descriptor format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+
Figure 20: Type 1 Segment Descriptor
- Algorithm: A 1-octet value that indicates the algorithm used for picking the SID. This is valid only when the A-flag has been set in the Segment TLV. The algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
5.7.1.1.2. Type 2: Segment Type B
This is an SRv6 type, and the segment is specified simply as an SRv6 SID. Its segment descriptor format is:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+
Figure 21: Type 2 Segment Descriptor
- Algorithm: A 1-octet value that indicates the algorithm used for picking the SID. This is valid only when the A-flag has been set in the Segment TLV. The algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
5.7.1.1.3. Type 3: Segment Type C
This is an SR-MPLS Prefix SID type, and the segment is specified as an IPv4 node address. Its segment descriptor format is:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Node Address (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 22: Type 3 Segment Descriptor
- Algorithm: A 1-octet value that indicates the algorithm used for picking the SID. The algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
- IPv4 Node Address: A 4-octet value that carries the IPv4 address associated with the node.
5.7.1.1.4. Type 4: Segment Type D
This is an SR-MPLS Prefix SID type, and the segment is specified as an IPv6 node global address. Its segment descriptor format is:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 23: Type 4 Segment Descriptor
- Algorithm: A 1-octet value that indicates the algorithm used for picking the SID. The algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
- IPv6 Node Global Address: A 16-octet value that carries the IPv6 global address associated with the node.
5.7.1.1.5. Type 5: Segment Type E
This is an SR-MPLS Adjacency SID type, and the segment is specified as an IPv4 node address along with the local interface ID on that node. Its segment descriptor format is:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Node Address (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Interface ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 24: Type 5 Segment Descriptor
- IPv4 Node Address: A 4-octet value that carries the IPv4 address associated with the node.
- Local Interface ID: A 4-octet value that carries the local interface ID of the node identified by the Node Address.
5.7.1.1.6. Type 6: Segment Type F β¨
okay bestie, Type 6 is an SR-MPLS Adjacency SID π¦ and it's specified as a pair of IPv4 local and remote interface addresses. here's the descriptor layout π
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Local Interface Address (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Remote Interface Address (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 25: Type 6 Segment Descriptor
Where:
- IPv4 Local Interface Address πΈ: a 4-octet value carrying the local IPv4 address tied to the node's interface.
- IPv4 Remote Interface Address π: a 4-octet value carrying the remote IPv4 address tied to the interface on the node's neighbor. this one is optional and
MAYbe set to0when it isn't used (for example, when you're identifying point-to-point links). it's giving flexibility π«Ά
5.7.1.1.7. Type 7: Segment Type G π
Type 7 is also an SR-MPLS Adjacency SID type π, but this time it's specified as a pair of IPv6 global address and interface ID for the local and remote nodes. here's the layout:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Local Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Node Interface ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Remote Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Node Interface ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 26: Type 7 Segment Descriptor
Where:
- IPv6 Local Node Global Address π: a 16-octet value carrying the IPv6 global address associated with the local node.
- Local Node Interface ID π§: a 4-octet value carrying the interface ID of the local node identified by the Local Node Address.
- IPv6 Remote Node Global Address π: a 16-octet value carrying the IPv6 global address associated with the remote node. this is optional and
MAYbe set to0when not used (for example, when identifying point-to-point links). - Remote Node Interface ID π: a 4-octet value carrying the interface ID of the remote node identified by the Remote Node Address. also optional, and it
MAYbe set to0when not used (for example, when identifying point-to-point links).
5.7.1.1.8. Type 8: Segment Type H β
Type 8 is an SR-MPLS Adjacency SID type too π. This one is specified as a pair of IPv6 global addresses for the local and remote interface addresses. the layout is:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Local Interface Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Remote Interface Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 27: Type 8 Segment Descriptor
Where:
- IPv6 Local Global Address π¦: a 16-octet value carrying the local IPv6 address associated with the node's interface.
- IPv6 Remote Global Address π : a 16-octet value carrying the remote IPv6 address associated with the interface on the node's neighbor.
5.7.1.1.9. Type 9: Segment Type I π₯
okay this one's an SRv6 END SID π, specified as an IPv6 node global address. here's the descriptor:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 28: Type 9 Segment Descriptor
Where:
- Algorithm πΈ: a 1-octet value that indicates the algorithm used for picking the SID. the algorithm values come from the "IGP Algorithm Types" IANA registry under the "Interior Gateway Protocol (IGP) Parameters" registry group.
- IPv6 Node Global Address π: a 16-octet value carrying the IPv6 global address associated with the node.
5.7.1.1.10. Type 10: Segment Type J π
Type 10 is an SRv6 END.X SID type π, specified as a pair of IPv6 global address and interface ID for the local and remote nodes. here's how it's laid out:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Local Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Node Interface ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Remote Node Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Node Interface ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 29: Type 10 Segment Descriptor
Where:
- IPv6 Local Node Global Address π: a 16-octet value carrying the IPv6 global address associated with the local node.
- Local Node Interface ID π§: a 4-octet value carrying the interface ID of the local node identified by the Local Node Address.
- IPv6 Remote Node Global Address π: a 16-octet value carrying the IPv6 global address associated with the remote node. this is optional and
MAYbe set to0when not used (for example, when identifying point-to-point links). - Remote Node Interface ID π: a 4-octet value carrying the interface ID of the remote node identified by the Remote Node Address. this is optional and
MAYbe set to0when not used (for example, when identifying point-to-point links).
5.7.1.1.11. Type 11: Segment Type K π¦
last one for this part π«Ά! Type 11 is an SRv6 END.X SID type, specified as a pair of IPv6 global addresses for the local and remote interface addresses. the layout:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Local Interface Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Remote Interface Global Address (16 octets) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 30: Type 11 Segment Descriptor
Where:
- IPv6 Local Global Address π: a 16-octet value carrying the local IPv6 address associated with the node's interface.
- IPv6 Remote Global Address πΈ: a 16-octet value carrying the remote IPv6 address associated with the interface on the node's neighbor.
5.7.2. SR Segment List Metric Sub-TLV β¨
okay so the SR Segment List Metric sub-TLV is how you report the computed metric of a specific SID list π It reports the type of metric and its computed value, as worked out by the computation entity (so either the headend or the controller, when the path is delegated) π It's only included when that value is actually available. You can have more than one instance in the same SR Segment List to report metric values of different metric types, which is so iconic π The metric margin and bound can optionally be reported with this sub-TLV, but only when that info isn't already being reported through the SR Metric Constraint sub-TLV (see Section 5.6.6) at the SR Policy candidate path level π
It's a sub-TLV of the SR Segment List TLV and it has this format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Type | Flags | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Margin |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Bound |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Metric Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 31: SR Segment List Metric Sub-TLV Format
Where:
- Type:
1207 - Length:
16 octets - Metric Type: 1-octet field that identifies the type of metric. The semantics are the same as the metric type field in the SR Metric Constraint sub-TLV in Section 5.6.6 of this document.
- Flags: 1-octet field that indicates the validity of the metric fields and their semantics. The following bit positions are defined, and the other bits MUST be cleared by the originator and MUST be ignored by a receiver.
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|M|A|B|V| |
+-+-+-+-+-+-+-+-+
- M-Flag: Indicates that the metric margin allowed for this path computation is specified when set, and that the metric margin allowed is not specified when clear.
- A-Flag: Indicates that the metric margin is specified as an absolute value when set, and that the metric margin is expressed as a percentage of the minimum metric when clear.
- B-Flag: Indicates that the metric bound allowed for the path is specified when set, and that the metric bound is not specified when clear.
- V-Flag: Indicates that the computed metric value is being reported when set, and that the computed metric value is not being reported when clear.
- RESERVED: 2 octets. MUST be set to
0by the originator and MUST be ignored by a receiver. - Metric Margin: 4-octet value that indicates the metric margin value when the M-flag is set. The metric margin is specified, depending on the A-flag, as either an absolute value or a percentage of the best computed path metric based on the specified constraints for path calculation. The metric margin allows for the metric value of the computed path to vary (depending on the semantics of the specific metric type) from the best metric value possible to optimizing for other factors (that are not specified as constraints) such as bandwidth availability, minimal SID stack depth, and the maximizing of ECMP for the computed SR path.
- Metric Bound: 4-octet value that indicates the worst metric value (depending on the semantics of the specific metric type) that is allowed when the B-flag is set. If the computed path metric crosses the specified bound value, then the path is considered invalid.
- Metric Value: 4-octet value that indicates the metric of the computed path when the V-flag is set. This value is available and reported when the computation is successful and a valid path is available.
The absolute metric margin, metric bound, and metric values are encoded as specified for each metric type. For metric types that are smaller than 4 octets in size, the most significant bits are filled with zeros. The percentage metric margin is encoded as an unsigned integer percentage value.
5.7.3. SR Segment List Bandwidth Sub-TLV πΈ
the SR Segment List Bandwidth sub-TLV is an optional sub-TLV used to report the bandwidth allocated to the specific SID list by the path computation entity π¦ Only a single instance of this sub-TLV is advertised for a given segment list. If multiple instances are present, then the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored. no sneaky extras, bestie π
It's a sub-TLV of the SR Segment List TLV and it has this format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bandwidth |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 32: SR Segment List Bandwidth Sub-TLV Format
Where:
- Type:
1216 - Length:
4 octets - Bandwidth: 4 octets that specify the allocated bandwidth in unit of bytes per second in IEEE floating point format [IEEE754].
5.7.4. SR Segment List Identifier Sub-TLV π·οΈ
the SR Segment List Identifier sub-TLV is an optional sub-TLV used to report an identifier associated with the specific SID list π§ Only a single instance of this sub-TLV is advertised for a given segment list. If multiple instances are present, then the first valid one (i.e., not determined to be malformed as per Section 8.2.2 of [RFC9552]) is used and the rest are ignored.
It's a sub-TLV of the SR Segment List TLV and it has this format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Segment List Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 33: SR Segment List Identifier Sub-TLV Format
Where:
- Type:
1217 - Length:
4 octets - Segment List Identifier: 4 octets that carry a 32-bit unsigned non-zero integer that serves as the identifier associated with the segment list. A value of
0indicates that there is no identifier associated with the segment list. The scope of this identifier is the SR Policy candidate path.
6. Procedures π οΈ
The BGP-LS advertisements for the SR Policy Candidate Path NLRI type are generally originated by the headend node for the SR Policies that are instantiated on its local node (i.e., the headend is the BGP-LS Producer). The BGP-LS Producer may also be a node (e.g., a PCE) that is advertising on behalf of the headend.
For the reporting of SR Policy candidate paths, the NLRI descriptor TLV as specified in Section 4 is used. An SR Policy candidate path may be instantiated on the headend node via a local configuration, PCEP, or BGP SR Policy signaling, and this is indicated via the SR Protocol-Origin. When a PCE node is the BGP-LS Producer, it uses the "in PCEP" variants of the SR Protocol-Origin (where available) so as to distinguish them from advertisements by headend nodes. The SR Policy candidate path's state and attributes are encoded in the BGP-LS Attribute field as SR Policy State TLVs and sub-TLVs as described in Section 5. The SR Candidate Path State TLV as defined in Section 5.3 is included to report the state of the candidate path. The SR BSID TLV as defined in Sections 5.1 and 5.2 is included to report the BSID of the candidate path when one is either specified or allocated by the headend. The constraints and the optimization metric for the SR Policy candidate path are reported using the SR Candidate Path Constraints TLV and its sub-TLVs as described in Section 5.6. The SR Segment List TLV is included for each SID list(s) associated with the candidate path. Each SR Segment List TLV in turn includes an SR Segment sub-TLV(s) to report the segment(s) and its status. The SR Segment List Metric sub-TLV is used to report the metric values at an individual SID list level.
7. Manageability Considerations π
The existing BGP operational and management procedures apply to this document. No new procedures are defined in this document. The considerations as specified in [RFC9552] apply to this document.
In general, the SR Policy headend nodes are responsible for the advertisement of SR Policy state information. π
8. IANA Considerations πΈ
This section describes the code point allocations by IANA for this document.
8.1. BGP-LS NLRI Types
IANA maintains a registry called "BGP-LS NLRI Types" under the "Border Gateway Protocol - Link State (BGP-LS) Parameters" registry group.
The following NLRI Type code point has been allocated by IANA:
+======+===============================+===========+
| Type | NLRI Type | Reference |
+======+===============================+===========+
| 5 | SR Policy Candidate Path NLRI | RFC 9857 |
+------+-------------------------------+-----------+
Table 2: NLRI Type Code Point
8.2. BGP-LS Protocol-IDs
IANA maintains a registry called "BGP-LS Protocol-IDs" under the "Border Gateway Protocol - Link State (BGP-LS) Parameters" registry group.
The following Protocol-ID code point has been allocated by IANA:
+=============+==================================+===========+
| Protocol-ID | NLRI information source protocol | Reference |
+=============+==================================+===========+
| 9 | Segment Routing | RFC 9857 |
+-------------+----------------------------------+-----------+
Table 3: Protocol-ID Code Point
8.3. BGP-LS TLVs π
okay bestie, IANA keeps a registry called BGP-LS NLRI and Attribute TLVs, and it lives inside the Border Gateway Protocol - Link State (BGP-LS) Parameters registry group π
here's the list of TLV code points IANA has handed out so far β¨
+================+=====================================+===========+
| TLV Code Point | Description | Reference |
+================+=====================================+===========+
| 554 | SR Policy Candidate Path Descriptor | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1201 | SR Binding SID | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1202 | SR Candidate Path State | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1203 | SR Candidate Path Name | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1204 | SR Candidate Path Constraints | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1205 | SR Segment List | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1206 | SR Segment | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1207 | SR Segment List Metric | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1208 | SR Affinity Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1209 | SR SRLG Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1210 | SR Bandwidth Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1211 | SR Disjoint Group Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1212 | SRv6 Binding SID | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1213 | SR Policy Name | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1214 | SR Bidirectional Group Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1215 | SR Metric Constraint | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1216 | SR Segment List Bandwidth | RFC 9857 |
+----------------+-------------------------------------+-----------+
| 1217 | SR Segment List Identifier | RFC 9857 |
+----------------+-------------------------------------+-----------+
Table 4: NLRI and Attribute TLV Code Points
8.4. SR Policy Protocol-Origin π¦
per this document, IANA has created a brand new registry called SR Policy Protocol-Origin under the Segment Routing registry group πΈ the allocation policy is Expert Review [RFC8126], with the designated expert guidelines coming from [RFC9256]. this registry holds the code points for the "Protocol-Origin" field we defined back in Section 4 π«Ά
IANA gave the initial values like this:
+=========+================================+===========+
| Code | Protocol-Origin | Reference |
| Point | | |
+=========+================================+===========+
| 0 | Reserved | RFC 9857 |
+---------+--------------------------------+-----------+
| 1 | PCEP | RFC 9857 |
+---------+--------------------------------+-----------+
| 2 | BGP SR Policy | RFC 9857 |
+---------+--------------------------------+-----------+
| 3 | Configuration (CLI, YANG model | RFC 9857 |
| | via NETCONF, etc.) | |
+---------+--------------------------------+-----------+
| 4-9 | Unassigned | RFC 9857 |
+---------+--------------------------------+-----------+
| 10 | PCEP (in PCEP or when BGP-LS | RFC 9857 |
| | Producer is PCE) | |
+---------+--------------------------------+-----------+
| 11-19 | Unassigned | RFC 9857 |
+---------+--------------------------------+-----------+
| 20 | BGP SR Policy (in PCEP or when | RFC 9857 |
| | BGP-LS Producer is PCE) | |
+---------+--------------------------------+-----------+
| 21-29 | Unassigned | RFC 9857 |
+---------+--------------------------------+-----------+
| 30 | Configuration (CLI, YANG model | RFC 9857 |
| | via NETCONF, etc. In PCEP or | |
| | when BGP-LS Producer is PCE) | |
+---------+--------------------------------+-----------+
| 31-250 | Unassigned | RFC 9857 |
+---------+--------------------------------+-----------+
| 251-255 | Reserved for Private Use | RFC 9857 |
+---------+--------------------------------+-----------+
Table 5: SR Policy Protocol-Origin Code Points
8.5. BGP-LS SR Segment Descriptors π
per this document, IANA has created a registry called BGP-LS SR Segment Descriptor Types under the Border Gateway Protocol - Link State (BGP-LS) Parameters registry group β¨ the allocation policy is Expert Review [RFC8126], and the designated experts follow the guidelines in [RFC9552]. there's also an extra guideline for those experts: they keep this registry lined up with the Segment Types registry under the Segment Routing registry group π¦ so a new segment type has to be allocated in the Segment Routing Segment Types registry first, before anything gets allocated here for it. BUT (not caps, lol) that doesn't mean every new Segment Routing segment type has to come with its BGP-LS equivalent right away. that can happen whenever it's needed, and alignment still holds π
this registry holds the code points for the "Segment Type" field, which is defined in Section 5.7.1 and described in Section 5.7.1.1 π IANA gave the initial values like this:
+============+====================+===========+
| Code Point | Segment Descriptor | Reference |
+============+====================+===========+
| 0 | Reserved | RFC 9857 |
+------------+--------------------+-----------+
| 1 | Type A Segment | RFC 9857 |
+------------+--------------------+-----------+
| 2 | Type B Segment | RFC 9857 |
+------------+--------------------+-----------+
| 3 | Type C Segment | RFC 9857 |
+------------+--------------------+-----------+
| 4 | Type D Segment | RFC 9857 |
+------------+--------------------+-----------+
| 5 | Type E Segment | RFC 9857 |
+------------+--------------------+-----------+
| 6 | Type F Segment | RFC 9857 |
+------------+--------------------+-----------+
| 7 | Type G Segment | RFC 9857 |
+------------+--------------------+-----------+
| 8 | Type H Segment | RFC 9857 |
+------------+--------------------+-----------+
| 9 | Type I Segment | RFC 9857 |
+------------+--------------------+-----------+
| 10 | Type J Segment | RFC 9857 |
+------------+--------------------+-----------+
| 11 | Type K Segment | RFC 9857 |
+------------+--------------------+-----------+
| 12-255 | Unassigned | RFC 9857 |
+------------+--------------------+-----------+
Table 6: BGP-LS SR Segment Descriptor Type
Code Points
8.6. BGP-LS SR Policy Metric Type π
per this document, IANA has created a registry called BGP-LS SR Policy Metric Types under the Border Gateway Protocol - Link State (BGP-LS) Parameters registry group π the allocation policy is Expert Review [RFC8126], with the designated expert guidelines from [RFC9552]. this registry holds the code points for the metric type field defined in Section 5.7.2 πΈ IANA gave the initial values like this:
+============+================================+===========+
| Code Point | Metric Type | Reference |
+============+================================+===========+
| 0 | IGP | RFC 9857 |
+------------+--------------------------------+-----------+
| 1 | Min Unidirectional Delay | RFC 9857 |
+------------+--------------------------------+-----------+
| 2 | TE | RFC 9857 |
+------------+--------------------------------+-----------+
| 3 | Hop Count | RFC 9857 |
+------------+--------------------------------+-----------+
| 4 | SID List Length | RFC 9857 |
+------------+--------------------------------+-----------+
| 5 | Bandwidth | RFC 9857 |
+------------+--------------------------------+-----------+
| 6 | Avg Unidirectional Delay | RFC 9857 |
+------------+--------------------------------+-----------+
| 7 | Unidirectional Delay Variation | RFC 9857 |
+------------+--------------------------------+-----------+
| 8 | Loss | RFC 9857 |
+------------+--------------------------------+-----------+
| 9-127 | Unassigned | RFC 9857 |
+------------+--------------------------------+-----------+
| 128-255 | User Defined | RFC 9857 |
+------------+--------------------------------+-----------+
Table 7: SR Policy Metric Type Code Point
9. Security Considerations πβ¨
okay bestie, this part is SUPER important π Procedures and protocol extensions in this document do not change the base BGP security model π«Ά For the deets, check [RFC6952]. The security considerations of the base BGP-LS spec in [RFC9552] also apply, so don't skip that one π
The BGP-LS SR Policy extensions here unlock TE and service programming use cases inside an SR domain, as described in [RFC9256] π¦ SR runs inside a trusted SR domain [RFC8402], and its security considerations also apply to BGP sessions carrying SR Policy information. The SR Policies advertised to controllers and other applications through BGP-LS are expected to be used entirely within that trusted SR domain. That means a single AS, or multiple ASes/domains within one provider network. So precaution is necessary to make sure SR Policy info sent over BGP sessions only reaches nodes and/or controllers/applications in a secure way inside that domain π The general BGP-LS guidance on isolating BGP-LS sessions from BGP sessions for other address families (see the security considerations of [RFC9552]) may be used to make sure SR Policy information doesn't leak to an External BGP (EBGP) peering session outside the SR domain by accident or error π
Also, the export of SR Policy information described in this document may be considered a risk to the confidentiality of mission-critical or commercially sensitive info about the network π¬ That includes endpoint/node addresses, SR SIDs, and the SR Policies that are deployed. BGP peerings aren't automatic, they need configuration, so it's the network operator's responsibility to make sure only trusted nodes (both routers and controller applications) inside the SR domain are configured to receive this info π
β οΈ Bestie, this is the big takeaway: configure your peerings carefully, because the operator owns making sure only trusted nodes get the SR Policy goodies! π¨
10. References π
10.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328,
DOI 10.17487/RFC2328, April 1998,
<https://www.rfc-editor.org/info/rfc2328>.
[RFC3630] Katz, D., Kompella, K., and D. Yeung, "Traffic Engineering
(TE) Extensions to OSPF Version 2", RFC 3630,
DOI 10.17487/RFC3630, September 2003,
<https://www.rfc-editor.org/info/rfc3630>.
[RFC5305] Li, T. and H. Smit, "IS-IS Extensions for Traffic
Engineering", RFC 5305, DOI 10.17487/RFC5305, October
2008, <https://www.rfc-editor.org/info/rfc5305>.
[RFC5329] Ishiguro, K., Manral, V., Davey, A., and A. Lindem, Ed.,
"Traffic Engineering Extensions to OSPF Version 3",
RFC 5329, DOI 10.17487/RFC5329, September 2008,
<https://www.rfc-editor.org/info/rfc5329>.
[RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF
for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008,
<https://www.rfc-editor.org/info/rfc5340>.
[RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation
Element (PCE) Communication Protocol (PCEP)", RFC 5440,
DOI 10.17487/RFC5440, March 2009,
<https://www.rfc-editor.org/info/rfc5440>.
[RFC7471] Giacalone, S., Ward, D., Drake, J., Atlas, A., and S.
Previdi, "OSPF Traffic Engineering (TE) Metric
Extensions", RFC 7471, DOI 10.17487/RFC7471, March 2015,
<https://www.rfc-editor.org/info/rfc7471>.
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
Writing an IANA Considerations Section in RFCs", BCP 26,
RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L.,
Decraene, B., Litkowski, S., and R. Shakir, "Segment
Routing Architecture", RFC 8402, DOI 10.17487/RFC8402,
July 2018, <https://www.rfc-editor.org/info/rfc8402>.
[RFC8570] Ginsberg, L., Ed., Previdi, S., Ed., Giacalone, S., Ward,
D., Drake, J., and Q. Wu, "IS-IS Traffic Engineering (TE)
Metric Extensions", RFC 8570, DOI 10.17487/RFC8570, March
2019, <https://www.rfc-editor.org/info/rfc8570>.
[RFC8664] Sivabalan, S., Filsfils, C., Tantsura, J., Henderickx, W.,
and J. Hardwick, "Path Computation Element Communication
Protocol (PCEP) Extensions for Segment Routing", RFC 8664,
DOI 10.17487/RFC8664, December 2019,
<https://www.rfc-editor.org/info/rfc8664>.
[RFC8697] Minei, I., Crabbe, E., Sivabalan, S., Ananthakrishnan, H.,
Dhody, D., and Y. Tanaka, "Path Computation Element
Communication Protocol (PCEP) Extensions for Establishing
Relationships between Sets of Label Switched Paths
(LSPs)", RFC 8697, DOI 10.17487/RFC8697, January 2020,
<https://www.rfc-editor.org/info/rfc8697>.
[RFC8986] Filsfils, C., Ed., Camarillo, P., Ed., Leddy, J., Voyer,
D., Matsushima, S., and Z. Li, "Segment Routing over IPv6
(SRv6) Network Programming", RFC 8986,
DOI 10.17487/RFC8986, February 2021,
<https://www.rfc-editor.org/info/rfc8986>.
[RFC9086] Previdi, S., Talaulikar, K., Ed., Filsfils, C., Patel, K.,
Ray, S., and J. Dong, "Border Gateway Protocol - Link
State (BGP-LS) Extensions for Segment Routing BGP Egress
Peer Engineering", RFC 9086, DOI 10.17487/RFC9086, August
2021, <https://www.rfc-editor.org/info/rfc9086>.
[RFC9256] Filsfils, C., Talaulikar, K., Ed., Voyer, D., Bogdanov,
A., and P. Mattes, "Segment Routing Policy Architecture",
RFC 9256, DOI 10.17487/RFC9256, July 2022,
<https://www.rfc-editor.org/info/rfc9256>.
[RFC9514] Dawra, G., Filsfils, C., Talaulikar, K., Ed., Chen, M.,
Bernier, D., and B. Decraene, "Border Gateway Protocol -
Link State (BGP-LS) Extensions for Segment Routing over
IPv6 (SRv6)", RFC 9514, DOI 10.17487/RFC9514, December
2023, <https://www.rfc-editor.org/info/rfc9514>.
[RFC9552] Talaulikar, K., Ed., "Distribution of Link-State and
Traffic Engineering Information Using BGP", RFC 9552,
DOI 10.17487/RFC9552, December 2023,
<https://www.rfc-editor.org/info/rfc9552>.
[RFC9843] Hegde, S., Britto, W., Shetty, R., Decraene, B., Psenak,
P., and T. Li, "IGP Flexible Algorithms: Bandwidth, Delay,
Metrics, and Constraints", RFC 9843, DOI 10.17487/RFC9843,
September 2025, <https://www.rfc-editor.org/info/rfc9843>.
10.2. Informative References
[BGP-LS-TE-PATH]
Previdi, S., Talaulikar, K., Ed., Dong, J., Gredler, H.,
and J. Tantsura, "Advertisement of Traffic Engineering
Paths using BGP Link-State", Work in Progress, Internet-
Draft, draft-ietf-idr-bgp-ls-te-path-02, 11 November 2024,
<https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-
ls-te-path-02>.
[IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE
Std 754-2019, DOI 10.1109/ieeestd.2019.8766229, 22 July
2019, <https://ieeexplore.ieee.org/document/8766229>.
[RFC2702] Awduche, D., Malcolm, J., Agogbua, J., O'Dell, M., and J.
McManus, "Requirements for Traffic Engineering Over MPLS",
RFC 2702, DOI 10.17487/RFC2702, September 1999,
<https://www.rfc-editor.org/info/rfc2702>.
[RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., "Routing Extensions
in Support of Generalized Multi-Protocol Label Switching
(GMPLS)", RFC 4202, DOI 10.17487/RFC4202, October 2005,
<https://www.rfc-editor.org/info/rfc4202>.
[RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path
Computation Element (PCE)-Based Architecture", RFC 4655,
DOI 10.17487/RFC4655, August 2006,
<https://www.rfc-editor.org/info/rfc4655>.
[RFC5065] Traina, P., McPherson, D., and J. Scudder, "Autonomous
System Confederations for BGP", RFC 5065,
DOI 10.17487/RFC5065, August 2007,
<https://www.rfc-editor.org/info/rfc5065>.
[RFC6952] Jethanandani, M., Patel, K., and L. Zheng, "Analysis of
BGP, LDP, PCEP, and MSDP Issues According to the Keying
and Authentication for Routing Protocols (KARP) Design
Guide", RFC 6952, DOI 10.17487/RFC6952, May 2013,
<https://www.rfc-editor.org/info/rfc6952>.
[RFC7308] Osborne, E., "Extended Administrative Groups in MPLS
Traffic Engineering (MPLS-TE)", RFC 7308,
DOI 10.17487/RFC7308, July 2014,
<https://www.rfc-editor.org/info/rfc7308>.
[RFC8231] Crabbe, E., Minei, I., Medved, J., and R. Varga, "Path
Computation Element Communication Protocol (PCEP)
Extensions for Stateful PCE", RFC 8231,
DOI 10.17487/RFC8231, September 2017,
<https://www.rfc-editor.org/info/rfc8231>.
[RFC8800] Litkowski, S., Sivabalan, S., Barth, C., and M. Negi,
"Path Computation Element Communication Protocol (PCEP)
Extension for Label Switched Path (LSP) Diversity
Constraint Signaling", RFC 8800, DOI 10.17487/RFC8800,
July 2020, <https://www.rfc-editor.org/info/rfc8800>.
[RFC9830] Previdi, S., Filsfils, C., Talaulikar, K., Ed., Mattes,
P., and D. Jain, "Advertising Segment Routing Policies in
BGP", RFC 9830, DOI 10.17487/RFC9830, September 2025,
<https://www.rfc-editor.org/info/rfc9830>.
[RFC9831] Talaulikar, K., Ed., Filsfils, C., Previdi, S., Mattes,
P., and D. Jain, "Segment Type Extensions for BGP Segment
Routing (SR) Policy", RFC 9831, DOI 10.17487/RFC9831,
September 2025, <https://www.rfc-editor.org/info/rfc9831>.
Acknowledgements π«Ά
The authors want to give a huge shoutout to Dhruv Dhody, Mohammed Abdul Aziz Khalid, Lou Berger, Acee Lindem, Siva Sivabalan, Arjun Sreekantiah, Dhanendra Jain, Francois Clad, Zafar Ali, Stephane Litkowski, Aravind Babu Mahendra Babu, Geetanjalli Bhalla, Ahmed Bashandy, Mike Koldychev, Samuel Sidor, Alex Tokar, Rajesh Melarcode Venkatesswaran, Lin Changwang, Liu Yao, Joel Halpern, and Ned Smith for their reviews and valuable comments β¨ They also want to thank Susan Hares for her shepherd review and helpful comments that improved this document π And a special thank you to John Scudder for his AD review and helpful suggestions π
Contributors πΈ
The following people have contributed substantially to the content of this document and should be considered coauthors:
Clarence Filsfils
Cisco Systems
Email: cfilsfil@cisco.com
Mach(Guoyi) Chen
Huawei Technologies
Email: mach.chen@huawei.com
Authors' Addresses β¨
Okay bestie, time to meet the squad behind this doc π«Ά Here's who to thank (or slide into the DMs of π).
Stefano Previdi is our individual contributor, with no company behind him. π¦
Stefano Previdi
Individual
Email: stefano@previdi.net
Ketan Talaulikar is the editor, repping Cisco Systems in India. He keeps the whole thing in order π
Ketan Talaulikar (editor)
Cisco Systems
India
Email: ketant.ietf@gmail.com
Jie Dong is with Huawei Technologies. Her address is in Beijing, China πΈ
Jie Dong
Huawei Technologies
Huawei Campus, No. 156 Beiqing Rd.
Beijing
100095
China
Email: jie.dong@huawei.com
Hannes Gredler is with RtBrick Inc. π
Hannes Gredler
RtBrick Inc.
Email: hannes@rtbrick.com
Jeff Tantsura is with Nvidia. Iconic lineup, honestly π
Jeff Tantsura
Nvidia
Email: jefftant.ietf@gmail.com
π¦ where this page comes from
- ietf: rfc9857 2025-10
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms