RFC 9703
Label Switched Path (LSP) Ping/Traceroute for Segment Routing (SR) Egress Peer Engineering (EPE) Segment Identifiers (SIDs) with MPLS Data Plane
RFC 9703: Label Switched Path (LSP) Ping/Traceroute for Segment Routing (SR) Egress Peer Engineering (EPE) Segment Identifiers (SIDs) with MPLS Data Plane π¦
Okay bestie, this is RFC 9703, published in December 2024 as a Standards Track document π . The ISSN is 2070-1721. The authors are S. Hegde and M. Srivastava from Juniper Networks Inc., K. Arora (an Individual Contributor), S. Ninan from Ciena, and X. Xu from China Mobile π«Ά. Its header doesn't list anything it obsoletes or updates, so it's a clean slate πΈ. It's from the IETF.
Abstract β¨
Egress Peer Engineering (EPE) is an application of Segment Routing (SR) that solves the problem of egress peer selection π. The SR-based BGP-EPE solution lets a centralized controller, like a Software-Defined Network (SDN) controller, program any egress peer π. The EPE solution requires the node or the SDN controller to program three things: 1) the PeerNode Segment Identifier (SID) describing a session between two nodes, 2) the PeerAdj SID describing the link or links used by the sessions between peer nodes, and 3) the PeerSet SID describing any connected interface to any peer in the related group π§. This document brings new sub-TLVs for EPE-SIDs that are used in the Target FEC Stack TLV (Type 1) in MPLS Ping and Traceroute procedures π.
Status of This Memo π
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9703.
Copyright Notice π₯
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License. π
Table of Contents π
1. Introduction
2. Theory of Operation
3. Requirements Language
4. FEC Definitions
4.1. PeerNode SID Sub-TLV
4.2. PeerAdj SID Sub-TLV
4.3. PeerSet SID Sub-TLV
5. EPE-SID FEC Validation
5.1. EPE-SID FEC Validation Rules
6. IANA Considerations
7. Security Considerations
8. References
8.1. Normative References
8.2. Informative References
Appendix A. Examples of Programmed States
Acknowledgments
Authors' Addresses
1. Introduction π
Okay so Egress Peer Engineering (EPE), as defined in [RFC9087], is an effective mechanism for selecting the egress peer link based on different criteria π . In this scenario, egress peers may belong to a completely different ownership. EPE-SIDs give you the means to represent egress peer nodes, links, sets of links, and sets of nodes β¨. Lots of network deployments are built from multiple Autonomous Systems (ASes), either because it's easier to operate that way or because of network mergers and acquisitions π«Ά. The inter-AS links connecting any two ASes could be traffic-engineered using EPE-SIDs here, where there's a single owner but different AS numbers. It's important to validate control plane to forwarding plane synchronization for these SIDs, so any anomaly can be easily detected by the network operator π. EPE-SIDs may also be used in an ingress Segment Routing (SR) policy [RFC9256] to choose exit points where the remote AS has a completely different ownership π . That scenario is out of scope for this document.
+---------+ +------+
| | | |
| H B------D G
| | +---/| AS2 |\ +------+
| |/ +------+ \ | |---L/8
A AS1 C---+ \| |
| |\\ \ +------+ /| AS4 |---M/8
| | \\ +-E |/ +------+
| X | \\ | K
| | +===F AS3 |
+---------+ +------+
Figure 1: Reference Diagram
In Figure 1, EPE-SIDs are configured on AS1 towards AS2 and AS3 and advertised in the Border Gateway Protocol - Link State (BGP-LS) [RFC9086] πΊοΈ. Sometimes the EPE-SIDs advertised by the control plane aren't in synchronization with the label programmed in the data plane π¬. For example, on C, a PeerAdj SID could be advertised to indicate it's for the link C->D. But due to some software anomaly, the actual data forwarding on that PeerAdj SID could be happening over the C->E link π. If E had relevant data paths for further forwarding the packet, this kind of anomaly would go unnoticed by the network operator π. A detailed example of a correctly programmed state and an incorrectly programmed state, along with a description of how the incorrect state can be detected, is in Appendix A. A Forwarding Equivalence Class (FEC) definition for the EPE-SIDs will detail the control plane association of the SID. The data plane validation of the SID will be done during the MPLS Traceroute procedure π¦.
When there's a multi-hop External BGP (EBGP) session between the ASBRs, a PeerNode SID is advertised, and the traffic MAY be load-balanced between the interfaces connecting the two nodes πΈ. In Figure 1, C and F could have a PeerNode SID advertised. When the Operations, Administration, and Maintenance (OAM) packet is received on F, it needs to be validated that the packet came from one of the two interfaces connected to C π₯.
This document provides Target Forwarding Equivalence Class (FEC) Stack TLV definitions for EPE-SIDs π. This solution requires the node constructing the Target FEC Stack TLV to determine the types of SIDs along the path of the LSP π§ . Other procedures for MPLS Ping and Traceroute, as defined in Section 7 of [RFC8287] and clarified in [RFC8690], are applicable for EPE-SIDs as well β¨.
2. Theory of Operation π§
[RFC9086] provides mechanisms to advertise the EPE-SIDs in BGP-LS. These EPE-SIDs may be used to build SR paths and may be communicated using extensions described in [SR-SEGTYPES] and [SR-BGP-POLICY], or Path Computation Element Protocol (PCEP) extensions as defined in [RFC8664] π. Data plane monitoring for such paths that consist of EPE-SIDs will use the extensions defined in this document to build the Target FEC Stack TLV π . The MPLS Ping and Traceroute procedures MAY be initiated by the head-end of the SR path or by a centralized topology-aware data plane monitoring system, as described in [RFC8403] π.
The extensions in [SR-SEGTYPES], [SR-BGP-POLICY], and [RFC8664] do not define how to acquire and carry the details of the SID that can be used to construct the FEC. Those extensions are out of scope for this document π . The node initiating the data plane monitoring may acquire the details of EPE-SIDs through BGP-LS advertisements, as described in [RFC9086]. There may be other possible mechanisms that can be used to learn the definition of the SID from the controller. Details of those mechanisms are out of scope for this document π«Ά.
The EPE-SIDs are advertised for inter-AS links that run EBGP sessions. [RFC9086] does not define the detailed procedures for operating EBGP sessions in a scenario with unnumbered interfaces, so those scenarios are out of scope for this document π. Anycast and multicast addresses are not in the scope of this document either π . During the AS migration scenario, the procedures described in [RFC7705] may be in force. In these scenarios, if the local and remote AS fields in the FEC (as described in Section 4) carry the globally configured AS Number and not the "local AS" (as defined in [RFC7705]), then the FEC validation procedures may fail π¬.
As described in Section 1, this document defines Target FEC Stack TLVs for EPE-SIDs that can be used to detect MPLS data plane failures [RFC8029] π. This mechanism applies to paths created across ASes of cooperating administrations. If the ping or traceroute packet enters a non-cooperating AS domain, it might be dropped by the routers in that non-cooperating domain π. Although a complete path validation can't be done across non-cooperating domains, it still provides useful information that the ping or traceroute packet entered a non-cooperating domain β¨.
3. Requirements Language π
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 π.
4. FEC Definitions π
In this document, three new sub-TLVs are defined for the Target FEC Stack TLV (Type 1), the Reverse-Path Target FEC Stack TLV (Type 16), and the Reply Path TLV (Type 21); see Table 1 π§β¨
(to be continued in part 2 π)
4.1. PeerNode SID Sub-TLV π
Okay so this is the PeerNode SID sub-TLV, and it's giving very "here's exactly where every byte goes" energy π 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Type = 39 | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local BGP Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote BGP Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: PeerNode SID Sub-TLV
Here's the breakdown, bestie:
- Type: 2 octets, with a Value of 39 β¨
- Length: 2 octets, with a Value of 16 β¨
- Local AS Number: 4 octets. This is the unsigned integer for the AS number [RFC6793] of the AS that the PeerNode SID advertising node belongs to. If Confederations [RFC5065] are in use, and the remote node is a member of a different Member-AS inside the local Confederation, this is the Member-AS Number, NOT the Confederation Identifier. Not the same thing, babe π
- Remote AS Number: 4 octets. This is the unsigned integer for the AS number [RFC6793] of the remote node's AS, the one the PeerNode SID is advertised for. Same Confederations [RFC5065] rule applies: if the remote node sits in a different Member-AS inside the local Confederation, you use the Member-AS Number and not the Confederation Identifier π
- Local BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the PeerNode SID advertising node, as defined in [RFC4271] and [RFC6286] πΈ
- Remote BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the remote node, as defined in [RFC4271] and [RFC6286] π¦
Now the good part π When there's a multi-hop EBGP session between two ASBRs, a PeerNode SID gets advertised for that session, and traffic can get load-balanced across those interfaces. So an EPE controller doing bandwidth management for these links should be aware of which links the traffic will be load-balanced across. Per [RFC8029], the node advertising the EPE-SIDs sends a Downstream Detailed Mapping (DDMAP) TLV that spells out the details of the next-hop interfaces. Using that info, the controller MAY choose to verify the actual forwarding state against the topology info it already has. On the router side, the validation procedures include the received DDMAP validation from [RFC8029], which checks that the control state and the forwarding state are in sync across the two routers π₯
Heads up though: any discrepancies between the controller's state and the forwarding state will NOT be caught by the procedures in this document. So yes, that's on you to double-check π«Ά
4.2. PeerAdj SID Sub-TLV π§
Next up is the PeerAdj SID sub-TLV, which is basically the same vibe as PeerNode but with a couple of extra fields to pin down the exact adjacency:
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 = 38 | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Adj type | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local BGP Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote BGP Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Interface Address (4/16 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Interface Address (4/16 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: PeerAdj SID Sub-TLV
The fields, one by one:
- Type: 2 octets, with a Value of 38 β¨
- Length: 2 octets. The Value varies based on whether the interface addresses are IPv4 or IPv6. The Length doesn't count the Type and Length fields themselves. For IPv4 interface addresses, the Length is 28 octets. For IPv6 addresses, it's 52 octets π
- Adj type: 1 octet. Set this to 1 when the Adjacency Segment is IPv4, and to 2 when it's IPv6 π
- RESERVED: 3 octets. These MUST be zero when sending and ignored on receiving. No funny business here π ββοΈ
- Local AS Number: 4 octets. The unsigned integer for the AS number [RFC6793] of the AS that the PeerAdj SID advertising node belongs to. The Confederations [RFC5065] rule applies here too: inside a local Confederation with a different Member-AS, you use the Member-AS Number and not the Confederation Identifier π
- Remote AS Number: 4 octets. The unsigned integer for the AS number [RFC6793] of the remote node's AS, which is the one the PeerAdj SID is advertised for. Same Confederations [RFC5065] rule as before π
- Local BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the PeerAdj SID advertising node, as defined in [RFC4271] and [RFC6286] πΈ
- Remote BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the remote node, as defined in [RFC4271] and [RFC6286] π¦
- Local Interface Address: 4 octets for IPv4, or 16 octets for IPv6. The local interface address that goes with the PeerAdj SID should be specified in this field. Link-local IPv6 addresses are not in the scope of this document, so skip those π
- Remote Interface Address: 4 octets for IPv4, or 16 octets for IPv6. The remote interface address that goes with the PeerAdj SID should be specified in this field. Same deal: link-local IPv6 addresses are out of scope here π«Ά
Okay, now the interface stuff is where it gets really iconic β¨ [RFC9086] requires sending a local interface ID and a remote interface ID in the link descriptors, and it allows a value of 0 in the remote descriptors. Why does this matter? Validating the incoming interface for an OAM packet is useful, but if the remote descriptor is 0, you literally can't do that validation π Optional link descriptors for the local and remote interface addresses are allowed, as described in Section 4.2 of [RFC9086]. In this document, it is RECOMMENDED to send these optional descriptors and use them to validate incoming interfaces. If the local and/or remote interface addresses aren't available, the ingress node can send 0 in the local and/or remote interface address field. The receiver SHOULD skip the validation for the incoming interface when the address field contains 0 π
4.3. PeerSet SID Sub-TLV π
Last but not least, the PeerSet SID sub-TLV. This one's the group-project of the bunch, because it's about a whole set of remote peers π
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 = 40 | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local BGP Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| No. of elements in set | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote BGP Router ID (4 octets) |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++
One element in set consists of the details below
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote AS Number (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote BGP Router ID (4 octets) |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++
Figure 4: PeerSet SID Sub-TLV
The fields in the set:
- Type: 2 octets, with a Value of 40 β¨
- Length: 2 octets. This is variable, depending on how many elements are in the set. It's expressed in octets, and it doesn't include the Type and Length fields π§
- Local AS Number: 4 octets. The unsigned integer for the AS number [RFC6793] of the AS that the PeerSet SID advertising node belongs to. Same Confederations [RFC5065] rule: inside a local Confederation with a different Member-AS, use the Member-AS Number and not the Confederation Identifier π
- Local BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the PeerSet SID advertising node, as defined in [RFC4271] and [RFC6286] πΈ
- No. of elements in set: 2 octets. This is the number of remote ASes that the set SID load-balances over π
- Reserved: 2 octets. These MUST be zero when sent and ignored when received π ββοΈ
- Remote AS Number: 4 octets. The unsigned integer for the AS number [RFC6793] of the remote node's AS, which is the one the PeerSet SID is advertised for. Confederations [RFC5065] rule applies again π
- Remote BGP Router ID: 4 octets. The unsigned integer for the BGP Identifier of the remote node, as defined in [RFC4271] and [RFC6286] π¦
And the main event π₯ A PeerSet SID can be associated with a bunch of PeerNode SIDs and PeerAdj SIDs. The remote AS number and Router ID of each of those PeerNode SIDs and PeerAdj SIDs MUST be included in the FEC. So don't leave anyone off the guest list, periodt π
5. EPE-SID FEC Validation π
okay so when a remote ASBR of the EPE-SID advertisement gets an MPLS OAM packet and the top FEC is the EPE-SID, it MUST run validity checks on the content of the EPE-SID FEC sub-TLV π . The basic length check should be performed on the received FEC too π§.
PeerAdj SID sub-TLV
-----------
If Adj type = 1, Length should be 28 octets
If Adj type = 2, Length should be 52 octets
PeerNode SID sub-TLV
-------------
Length = (20 + No. of IPv4 interface pairs * 8 +
No. of IPv6 interface pairs * 32) octets
PeerSet SID sub-TLV
-----------
Length = (9 + No. of elements in the set *
(8 + No. of IPv4 interface pairs * 8 +
No. of IPv6 interface pairs * 32) octets
Figure 5: Length Validation
if a malformed FEC sub-TLV shows up, the receiver MUST send back a return code of 1, Malformed echo request received, as defined in [RFC8029] π¨. The section below gets tacked onto step 4a of Section 7.4 of [RFC8287] π§.
5.1. EPE-SID FEC Validation Rules
this is an example of the validations for Segment Routing IGP-Prefix, IGP-Adjacency SID, and EPE-SID π¦. Quick note: "receiving node" in this section means the node that gets the OAM message carrying the Target FEC Stack TLV π.
PeerAdj SID (sub-type 38) π
when the Label-stack-depth is 0 and the Target FEC Stack sub-TLV at FEC stack-depth is 38 (PeerAdj SID sub-TLV), set the Best-return-code to 10, Mapping for this FEC is not the given label at stack-depth <RSC> [RFC8029]. Then check whether any of these conditions fail:
- Validate that the receiving node's BGP Local AS matches the remote AS field in the received PeerAdj SID sub-TLV.
- Validate that the receiving node's BGP Router-ID matches the Remote Router ID field in the received PeerAdj SID sub-TLV.
- Validate that there is an EBGP session with a peer having a local AS number and BGP Router-ID as specified in the Local AS number and Local Router-ID fields in the received PeerAdj SID sub-TLV.
if the remote interface address is not zero, validate the incoming interface too π£οΈ. Set the Best-return-code to 35, Mapping for this FEC is not associated with the incoming interface [RFC8287]. Then check whether this condition fails:
- Validate that the incoming interface on which the OAM packet was received matches the remote interface specified in the PeerAdj SID sub-TLV.
if all of the above validations pass, set the return code to 3, Replying router is an egress for the FEC at stack-depth <RSC> [RFC8029] π.
PeerNode SID (sub-type 39) πΈ
when the Target FEC Stack sub-TLV at FEC stack-depth is 39 (PeerNode SID sub-TLV), set the Best-return-code to 10, Mapping for this FEC is not the given label at stack-depth <RSC> [RFC8029]. Then check whether any of these conditions fail:
- Validate that the receiving node's BGP Local AS matches the remote AS field in the received PeerNode SID FEC sub-TLV.
- Validate that the receiving node's BGP Router-ID matches the Remote Router ID field in the received PeerNode SID FEC.
- Validate that there is an EBGP session with a peer having a local AS number and BGP Router-ID as specified in the Local AS number and Local Router-ID fields in the received PeerNode SID FEC sub-TLV.
if all of the above validations pass, set the return code to 3, Replying router is an egress for the FEC at stack-depth <RSC> [RFC8029] β¨.
PeerSet SID (sub-type 40) π§
when the Target FEC Stack sub-TLV at FEC stack-depth is 40 (PeerSet SID sub-TLV), set the Best-return-code to 10, Mapping for this FEC is not the given label at stack-depth <RSC> [RFC8029]. Then check whether any of these conditions fail:
- Validate that the receiving node's BGP Local AS matches one of the remote AS fields in the received PeerSet SID FEC sub-TLV.
- Validate that the receiving node's BGP Router-ID matches one of the Remote Router ID fields in the received PeerSet SID FEC sub-TLV.
- Validate that there is an EBGP session with a peer having a local AS number and BGP Router-ID as specified in the local AS number and Local Router-ID fields in the received PeerSet SID FEC sub-TLV.
if all of the above validations pass, set the return code to 3, Replying router is an egress for the FEC at stack-depth <RSC> [RFC8029] π.
6. IANA Considerations π
IANA has allocated three new Target FEC Stack sub-TLVs in the "Sub-TLVs for TLV Types 1, 16, and 21" registry [MPLS-LSP-PING] inside the "TLVs" registry of the "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry group π¦. Here they are:
+==========+==============+
| Sub-Type | Sub-TLV Name |
+==========+==============+
| 38 | PeerAdj SID |
+----------+--------------+
| 39 | PeerNode SID |
+----------+--------------+
| 40 | PeerSet SID |
+----------+--------------+
Table 1: Sub-TLVs for TLV Types 1, 16, and 21 Registry
7. Security Considerations π¨
β οΈ bestie, this section is serious, so read it carefully π«Ά.
The EPE-SIDs are advertised for egress links for EPE purposes or for inter-AS links between cooperating ASes π€. When cooperating domains are involved, they can allow packets arriving on trusted interfaces to reach the control plane and get processed.
When EPE-SIDs are created for egress TE links where the neighbor AS is an independent entity, that neighbor may not let packets arriving from the external world reach the control plane π§. In these deployments, the MPLS OAM packets will be dropped by the neighboring AS that receives them π.
In MPLS Traceroute applications, when the AS boundary is crossed with the EPE-SIDs, the Target FEC Stack TLV changes π. [RFC8287] does not mandate that the initiator, upon receiving an MPLS Echo Reply message that includes the Target FEC Stack Change TLV with one or more of the original segments being popped, remove the matching FEC(s) from the Target FEC Stack TLV in the next (TTL+1) traceroute request π¬.
If an initiator does not remove the FECs belonging to the previous AS it traversed, it may expose internal AS information to the following AS being traversed in the traceroute π. That's a privacy leak, and nobody wants that, periodt π .
8. References π
8.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. - [RFC6793] Vohra, Q. and E. Chen, "BGP Support for Four-Octet Autonomous System (AS) Number Space", RFC 6793, DOI 10.17487/RFC6793, December 2012,
https://www.rfc-editor.org/info/rfc6793. - [RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N., Aldrin, S., and M. Chen, "Detecting Multiprotocol Label Switched (MPLS) Data-Plane Failures", RFC 8029, DOI 10.17487/RFC8029, March 2017,
https://www.rfc-editor.org/info/rfc8029. - [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. - [RFC8287] Kumar, N., Ed., Pignataro, C., Ed., Swallow, G., Akiya, N., Kini, S., and M. Chen, "Label Switched Path (LSP) Ping/Traceroute for Segment Routing (SR) IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data Planes", RFC 8287, DOI 10.17487/RFC8287, December 2017,
https://www.rfc-editor.org/info/rfc8287. - [RFC8690] Nainar, N., Pignataro, C., Iqbal, F., and A. Vainshtein, "Clarification of Segment ID Sub-TLV Length for RFC 8287", RFC 8690, DOI 10.17487/RFC8690, December 2019,
https://www.rfc-editor.org/info/rfc8690. - [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.
8.2. Informative References β¨
okay so these are the extra reading picks π the background stuff that makes everything else click
[MPLS-LSP-PING] IANA, "Sub-TLVs for TLV Types 1, 16, and 21", https://www.iana.org/assignments/mpls-lsp-ping-parameters.
[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A Border Gateway Protocol 4 (BGP-4)", RFC 4271, DOI 10.17487/RFC4271, January 2006, https://www.rfc-editor.org/info/rfc4271.
[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.
[RFC6286] Chen, E. and J. Yuan, "Autonomous-System-Wide Unique BGP Identifier for BGP-4", RFC 6286, DOI 10.17487/RFC6286, June 2011, https://www.rfc-editor.org/info/rfc6286.
[RFC7705] George, W. and S. Amante, "Autonomous System Migration Mechanisms and Their Effects on the BGP AS_PATH Attribute", RFC 7705, DOI 10.17487/RFC7705, November 2015, https://www.rfc-editor.org/info/rfc7705.
[RFC8403] Geib, R., Ed., Filsfils, C., Pignataro, C., Ed., and N. Kumar, "A Scalable and Topology-Aware MPLS Data-Plane Monitoring System", RFC 8403, DOI 10.17487/RFC8403, July 2018, https://www.rfc-editor.org/info/rfc8403.
[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.
[RFC9087] Filsfils, C., Ed., Previdi, S., Dawra, G., Ed., Aries, E., and D. Afanasiev, "Segment Routing Centralized BGP Egress Peer Engineering", RFC 9087, DOI 10.17487/RFC9087, August 2021, https://www.rfc-editor.org/info/rfc9087.
[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.
[SR-BGP-POLICY] Previdi, S., Filsfils, C., Talaulikar, K., Mattes, P., and D. Jain, "Advertising Segment Routing Policies in BGP", Work in Progress, Internet-Draft, draft-ietf-idr-sr-policy-safi-10, 7 November 2024, https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr-policy-safi-10.
[SR-SEGTYPES] Talaulikar, K., Filsfils, C., Previdi, S., Mattes, P., and D. Jain, "Segment Routing Segment Types Extensions for BGP SR Policy", Work in Progress, Internet-Draft, draft-ietf-idr-bgp-sr-segtypes-ext-06, 7 November 2024, https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-sr-segtypes-ext-06.
Appendix A. Examples of Programmed States π¦
this part is the vibe check π it walks through one correctly programmed state and one incorrectly programmed state, and shows how the new sub-TLVs from this document help validate which one you're looking at. the diagram we're using is Figure 1 πΈ
Correctly programmed state:
- C assigns label 16001 and binds it to adjacency C->E
- C signals that label 16001 is bound to adjacency C->E (e.g., via BGP-LS)
- The controller/ingress programs an SR path that has SID/label 16001 to steer the packet on the exit point from C onto adjacency C->E
- Using MPLS Traceroute procedures defined in this document, the PeerAdj SID sub-TLV is populated with entities to be validated by C when the OAM packet reaches it
- C receives the OAM packet and validates that the top label (16001) is indeed corresponding to the entities populated in the PeerAdj SID sub-TLV
Incorrectly programmed state:
- C assigns label 16001 and binds it to adjacency C->D
- The controller learns that PeerAdj SID label 16001 is bound to adjacency C->E (e.g., via BGP-LS) -- this could be a software bug on C or on the controller
- The controller/ingress programs an SR path that has SID/label 16001 to steer the packet on the exit point from C onto adjacency C->E
- Using MPLS Traceroute procedures defined in this document, the PeerAdj SID sub-TLV is populated with entities to be validated by C (including a local/remote interface address of C->E) when the OAM packet reaches it
- C receives the OAM packet and validates that the top label (16001) is NOT bound to C->E as populated in the PeerAdj SID sub-TLV and then responds with the respective error code π
Acknowledgments π«Ά
thank you thank you π to Loa Andersson, Dhruv Dhody, Ketan Talaulikar, Italo Busi, Alexander Vainshtein, and Deepti Rathi for the careful reviews and comments π and a huge shoutout to Tarek Saad for providing the example described in Appendix A β¨
Authors' Addresses π
Shraddha, Mukul, Kapil, Samson, and Xiaohu, the people behind all of this, with their contact details π§
Shraddha Hegde
Juniper Networks Inc.
Exora Business Park
Bangalore 560103
Karnataka
India
Email: shraddha@juniper.net
Mukul Srivastava
Juniper Networks Inc.
Email: msri@juniper.net
Kapil Arora
Individual Contributor
Email: kapil.it@gmail.com
Samson Ninan
Ciena
Email: samson.cse@gmail.com
Xiaohu Xu
China Mobile
Beijing
China
Email: xuxiaohu_ietf@hotmail.com
π¦ where this page comes from
- ietf: rfc9703 2024-12
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms