RFC 8287
Label Switched Path (LSP) Ping/Traceroute for Segment Routing (SR) IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data Planes
RFC 8287 Part 1 π Segment Routing LSP Ping and Traceroute
okay bestie, this is RFC 8287 (December 2017) πΈ It's a Standards Track doc, so it's the real deal, not just a vibe. It's titled Label Switched Path (LSP) Ping/Traceroute for Segment Routing (SR) IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data Planes β¨
The editors are N. Kumar (Cisco) and C. Pignataro (Cisco), both marked Ed., which means they're the ones who wrangled everyone's text into one doc π«Ά The other authors are G. Swallow (Southend Technical Center), N. Akiya (Big Switch Networks), S. Kini (Individual), and M. Chen (Huawei). The ISSN is 2070-1721 π¦
The title block doesn't have an Obsoletes or Updates line, so this doc doesn't say what it replaces or changes. Just noting it so you're not confused π
Abstract
Segment Routing (SR) is giving source routing and tunneling, and it can be applied straight onto a Multiprotocol Label Switching (MPLS) data plane π A node steers a packet through a controlled set of instructions called "segments" by prepending the packet with an SR header β¨
Because SR assigns segments and forwards them in its own way, it raises extra questions for connectivity checks and fault isolation on a Label Switched Path (LSP) π₯ This doc lays out the problem and defines extensions so LSP Ping and Traceroute work for Segment Routing IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) on an MPLS data plane π
Status of This Memo
This is an Internet Standards Track document π
This doc is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG) π For more on Internet Standards, check Section 2 of RFC 7841 π§
Info about the current status, any errata, and how to send feedback lives at https://www.rfc-editor.org/info/rfc8287 π
Copyright Notice
Copyright (c) 2017 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 Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License π
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Coexistence of SR-Capable and Non-SR-Capable Node
Scenarios . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 5
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
4. Challenges with Existing Mechanisms . . . . . . . . . . . . . 5
4.1. Path Validation in Segment Routing Networks . . . . . . . 5
5. Segment ID Sub-TLV . . . . . . . . . . . . . . . . . . . . . 7
5.1. IPv4 IGP-Prefix Segment ID . . . . . . . . . . . . . . . 7
5.2. IPv6 IGP-Prefix Segment ID . . . . . . . . . . . . . . . 8
5.3. IGP-Adjacency Segment ID . . . . . . . . . . . . . . . . 9
6. Extension to Downstream Detailed Mapping TLV . . . . . . . . 11
7. Procedures . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1. FECs in Target FEC Stack TLV . . . . . . . . . . . . . . 11
7.2. FEC Stack Change Sub-TLV . . . . . . . . . . . . . . . . 12
7.3. Segment ID POP Operation . . . . . . . . . . . . . . . . 13
7.4. Segment ID Check . . . . . . . . . . . . . . . . . . . . 13
7.5. TTL Consideration for Traceroute . . . . . . . . . . . . 19
8. Backward Compatibility with Non-SR Devices . . . . . . . . . 19
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20
9.1. New Target FEC Stack Sub-TLVs . . . . . . . . . . . . . . 20
9.2. Protocol in the Segment ID Sub-TLV . . . . . . . . . . . 20
9.3. Adjacency Type in the IGP-Adjacency Segment ID . . . . . 20
9.4. Protocol in the Label Stack Sub-TLV of the Downstream
Detailed Mapping TLV . . . . . . . . . . . . . . . . . . 21
9.5. Return Code . . . . . . . . . . . . . . . . . . . . . . . 21
10. Security Considerations . . . . . . . . . . . . . . . . . . . 21
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 22
11.1. Normative References . . . . . . . . . . . . . . . . . . 22
11.2. Informative References . . . . . . . . . . . . . . . . . 22
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 24
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25
1. Introduction β¨
okay so the backstory π¦ "Detecting Multiprotocol Label Switched (MPLS) Data-Plane Failures" [RFC8029] is the classic move for spotting data-plane failures in Label Switched Paths (LSPs). It carries info in an MPLS "echo request" and "echo reply" for fault detection and isolation, and it defines ways to make sure the echo reply actually gets back π It's modeled on the Ping/Traceroute paradigm (ICMP echo request [RFC792]) and people usually call it "LSP Ping" and "LSP Traceroute". [RFC8029] supports hierarchical and stitching LSPs too πΈ
[SR] brings in the Segment Routing architecture, which uses source routing and tunneling paradigms. A node steers a packet through a controlled set of instructions called "segments" by prepending the packet with an SR header. The full SR architecture definition is in [SR] π§
As [SR] and [SR-MPLS] explain, SR can be applied directly to an MPLS data plane. The SID is 20 bits, and the SR header is the label stack π So the data-plane validation mechanics of [RFC8029] can be applied directly to SR MPLS π
Here's the twist π Unlike LDP or RSVP (the other well-known MPLS control plane protocols), SR doesn't always assign Segment IDs hop by hop. Depending on the type of Segment ID, the assignment can be unique to the node or unique within a domain π
That makes fault detection and isolation trickier in an SR network, which is what this doc is about. It lays out the problem and describes a mechanism for LSP Ping and Traceroute for Segment Routing IGP-Prefix and IGP-Adjacency SIDs within an MPLS data plane π«Ά
1.1. Coexistence of SR-Capable and Non-SR-Capable Node Scenarios
[INTEROP] describes how SR works in a network where SR-capable and non-SR-capable nodes live together π In that setup, one or more SR-based LSPs and non-SR-based LSPs get stitched together to make one end-to-end LSP. It's kinda like a network where LDP and RSVP nodes coexist, and the mechanism in Section 4.5.2 of [RFC8029] applies to LSP Ping and Trace π
Section 8 of this document covers one of the potential gaps that's specific to SR-capable and non-SR-capable node scenarios, and explains how the existing mechanism in [RFC8029] handles it β¨
2. Requirements Notation
Okay, this is the important bit for the requirement words π₯ 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 π
3. Terminology
This doc uses the terminology defined in [SR] and [RFC8029], so readers are expected to already know those terms π§
4. Challenges with Existing Mechanisms
this section is the "why is this even hard" moment π The following example shows the challenges with using the current MPLS Operations, Administration, and Maintenance (OAM) mechanisms on an SR network π
4.1. Path Validation in Segment Routing Networks
[RFC8029] defines the MPLS OAM mechanisms that help with fault detection and isolation for an MPLS data-plane path. It does this with various Target Forwarding Equivalence Class (FEC) Stack sub-TLVs, which ride in MPLS echo request packets and get used by the responder for FEC validation π Obviously new sub-TLVs need to be assigned for SR, but the unique nature of the SR architecture means extra operational considerations come up for path validation too. This section talks through those challenges π¦
L1
+--------+
| L2 |
R3-------R6
/ \
/ \
R1----R2 R7----R8
\ /
\ /
R4-------R5
Figure 1: Segment Routing Network
Okay, the Node Segment IDs for R1, R2, R3, R4, R5, R6, R7, and R8 are 5001, 5002, 5003, 5004, 5005, 5006, 5007, and 5008, respectively π
9136 --> Adjacency Segment ID from R3 to R6 over link L1.
9236 --> Adjacency Segment ID from R3 to R6 over link L2.
9124 --> Adjacency segment ID from R2 to R4.
9123 --> Adjacency Segment ID from R2 to R3.
So the forwarding semantic of an Adjacency Segment ID is to pop the Segment ID and send the packet to a specific neighbor over a specific link π₯ Now, a malfunctioning node might forward packets using an Adjacency Segment ID to the wrong neighbor or over the wrong link π The exposed Segment ID (from an incorrectly forwarded Adjacency Segment ID) might still let that packet reach the intended destination, even though the intended strict traversal got broken π
Let's run it in the topology above π§ Say R1 sends traffic with a segment stack of {9124, 5008}, so the path taken will be R1-R2-R4-R5-R7-R8. If Adjacency Segment ID 9124 gets misprogrammed in R2 to send the packet to R1 or R3, the packet may still get delivered to R8 (if the nodes are configured with the same SR Global Block (SRGB)) [SR], but not via the expected path π
MPLS traceroute can help catch that kind of deviation in the scenario above π But in a different example it might not help much. For instance, if R3 forwards a packet with Adjacency Segment ID 9236 over link L1 (because of misprogramming) when it was supposed to go over link L2, traceroute may not be useful there π
5. Segment ID Sub-TLV β¨
okay so the way these Segment ID sub-TLVs are formatted is lowkey genius π§ They follow the same philosophy as the Target FEC Stack TLV, which carries one FEC for each label in the label stack. When you run them with the procedures from [RFC8029], LSP Ping and Traceroute still work even when the Target FEC Stack TLV has more FECs than the responder nodes received label stacks. No cap, that's iconic π
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) π
Sub-Type Sub-TLV Name
-------- ---------------
34 IPv4 IGP-Prefix Segment ID
35 IPv6 IGP-Prefix Segment ID
36 IGP-Adjacency Segment ID
For the Protocol field in these sub-TLVs, go check Section 9.2 for the registry π¦
5.1. IPv4 IGP-Prefix Segment ID
The IPv4 IGP-Prefix Segment ID is defined in [SR] πΈ 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Prefix |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Prefix Length | Protocol | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv4 Prefix
This field carries the IPv4 Prefix that the Segment ID is assigned to. For an Anycast Segment ID, this field carries the IPv4 Anycast address. If the prefix is shorter than 32 bits, the trailing bits SHOULD be set to zero.
Prefix Length
The Prefix Length field is one octet. It tells you the length of the prefix in bits, and the values can be 1-32.
Protocol
This field is set to 1 if the responder MUST perform FEC validation using OSPF as the IGP protocol. It is set to 2 if the responder MUST perform Egress FEC validation using the Intermediate System to Intermediate System (IS-IS) as the IGP protocol. It is set to 0 if the responder can use any IGP protocol for Egress FEC validation.
Reserved
The Reserved field MUST be set to 0 when sent and MUST be ignored on receipt.
5.2. IPv6 IGP-Prefix Segment ID
The IPv6 IGP-Prefix Segment ID is defined in [SR] π 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 Prefix |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Prefix Length | Protocol | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv6 Prefix
This field carries the IPv6 prefix that the Segment ID is assigned to. For an Anycast Segment ID, this field carries the IPv4 Anycast address. If the prefix is shorter than 128 bits, the trailing bits SHOULD be set to zero.
Prefix Length
The Prefix Length field is one octet. It gives the length of the prefix in bits, and the values can be 1-128.
Protocol
Set to 1 if the responder MUST perform FEC validation using OSPF as the IGP protocol. Set to 2 if the responder MUST perform Egress FEC validation using IS-IS as the IGP protocol. Set to 0 if the responder can use any IGP protocol for Egress FEC validation.
Reserved
MUST be set to 0 on send and MUST be ignored on receipt.
5.3. IGP-Adjacency Segment ID
This sub-TLV applies to any IGP-Adjacency defined in [SR] π 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Adj. Type | Protocol | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
| Local Interface ID (4 or 16 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
| Remote Interface ID (4 or 16 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
| Advertising Node Identifier (4 or 6 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
| Receiving Node Identifier (4 or 6 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Adj. Type (Adjacency Type)
Set to 1 when the Adjacency Segment is a Parallel Adjacency as defined in [SR]. Set to 4 when the Adjacency Segment is IPv4 based and is not a Parallel Adjacency. Set to 6 when the Adjacency Segment is IPv6 based and is not a Parallel Adjacency. Set to 0 when the Adjacency Segment is over an unnumbered interface.
Protocol
Set to 1 if the responder MUST perform FEC validation using OSPF as the IGP protocol. Set to 2 if the responder MUST perform Egress FEC validation using IS-IS as the IGP protocol. Set to 0 if the responder can use any IGP protocol for Egress FEC validation.
Reserved
MUST be set to 0 on send and MUST be ignored on receipt.
Local Interface ID
This is an identifier that the local Label Switching Router (LSR) assigns to a link that the Adjacency Segment ID is bound to. The field is set to a local link address (IPv4 or IPv6). For IPv4 it is 4 octets, and for IPv6 it is 16 octets. If the interface is unnumbered, the field is 4 octets and includes a 32-bit link identifier as defined in [RFC4203] and [RFC5307]. If the Adjacency Segment ID represents Parallel Adjacencies [SR], the field is 4 octets and MUST be set to 4 octets of zeroes.
Remote Interface ID
This is an identifier that the remote LSR assigns to a link that the Adjacency Segment ID is bound to. The field is set to the remote (downstream neighbor) link address (IPv4 or IPv6). For IPv4 it is 4 octets, and for IPv6 it is 16 octets. If the interface is unnumbered, the field is 4 octets and includes a 32-bit link identifier as defined in [RFC4203] and [RFC5307]. If the Adjacency Segment ID represents Parallel Adjacencies [SR], the field is 4 octets and MUST be set to 4 octets of zeroes.
Advertising Node Identifier
This specifies the Advertising Node Identifier. When the Protocol field is set to 1, this field is 4 octets and carries the 32-bit OSPF Router ID. If the Protocol field is set to 2, this field is 6 octets and carries the 48-bit IS-IS System ID. If the Protocol field is set to 0, this field is 4 octets and MUST be set to zero.
Receiving Node Identifier
This specifies the downstream node identifier. When the Protocol field is set to 1, this field is 4 octets and carries the 32-bit OSPF Router ID. If the Protocol field is set to 2, this field is 6 octets and carries the 48-bit IS-IS System ID. If the Protocol field is set to 0, this field is 4 octets and MUST be set to zero.
6. Extension to Downstream Detailed Mapping TLV π
In an echo reply, the Downstream Detailed Mapping TLV [RFC8029] is used to report each interface that a FEC could be forwarded over. For a FEC, there are multiple protocols that can be used to distribute label mappings. The Protocol field of the Downstream Detailed Mapping TLV returns the protocol that distributed the label carried in the Downstream Label field. The following protocols are defined in [RFC8029]:
Protocol # Signaling Protocol
---------- ------------------
0 Unknown
1 Static
2 BGP
3 LDP
4 RSVP-TE
With SR, OSPF or IS-IS can be used for label distribution. This document adds two new protocols:
Protocol # Signaling Protocol
---------- ------------------
5 OSPF
6 IS-IS
See Section 9.4 β¨
7. Procedures π
This section covers the parts of LSP Ping and Traceroute operations that need more thought beyond [RFC8029] π«Ά
7.1. FECs in Target FEC Stack TLV
When an initiator generates LSP echo request packets, the FECs carried in the Target FEC Stack TLV may need to be different so that they support an SR architecture. The next part defines how an initiator builds the Target FEC Stack TLV for SR scenarios.
Ping
The initiator MUST include FEC(s) corresponding to the destination segment.
The initiator MAY include FECs corresponding to some or all of the segments that the initiator imposed in the label stack, so the segments traversed can be communicated.
Traceroute
The initiator MUST initially include FECs corresponding to all segments imposed in the label stack.
When a received echo reply contains the FEC Stack Change TLV and one or more of the original segments are being popped, the initiator MAY remove a corresponding FEC(s) from the Target FEC Stack TLV in the next (TTL+1) traceroute request, as defined in Section 4.6 of [RFC8029].
When a received echo reply does not contain the FEC Stack Change TLV, the initiator MUST NOT attempt to remove any FECs from the Target FEC Stack TLV in the next (TTL+1) traceroute request.
As defined in [SR-OSPF] and [SR-IS-IS], the Prefix SID can be advertised as an absolute value, as an index, or as a range. In any of these cases, the initiator MUST derive the Prefix mapped to the Prefix SID and use it in the IGP-Prefix Segment ID defined in Sections 5.1 and 5.2. How the responder uses the details in the SR-FEC sub-TLV to perform the validation is a local implementation matter π
7.2. FEC Stack Change Sub-TLV
[RFC8029] defines a FEC Stack Change sub-TLV that a router must include when the FEC stack changes π
The network node that advertised the Node Segment ID is responsible for generating a FEC Stack Change sub-TLV with the Post Office Protocol (POP) operation type for the Node Segment ID, regardless of whether or not Penultimate Hop Popping (PHP) is enabled.
The network node that is immediately downstream of the node that advertised the Adjacency Segment ID is responsible for generating the FEC Stack Change sub-TLV for POP operation for the Adjacency Segment ID.
7.3. Segment ID POP Operation π
okay so the Node Segment ID with the PHP flag behaves exactly like Implicit Null does in MPLS π it's the same energy. The Adjacency Segment ID is kinda giving the same vibe too π¦ you can think of it as a locally allocated segment that has PHP turned on when the packet is headed for the next-hop IGP Adjacency Node πΈ
now the procedures in Section 4.4 of [RFC8029] lowkey rely on Stack-D and Stack-R literally having the Implicit Null value π so yeah, implementations SHOULD use Implicit Null for the Node Segment ID PHP and Adjacency Segment ID PHP cases π«Ά
7.4. Segment ID Check π
this section is the glow-up for the procedure in Section 4.4.1 of [RFC8029] π Step 4 from that section gets modified like this, and step 4a is brand new π
4. If the label mapping for FEC is Implicit Null, set the
FEC-status to 2 and proceed to step 4a. Otherwise,
if the label mapping for FEC is Label-L, proceed to step 4a.
Otherwise, set the FEC-return-code to 10 ("Mapping for this
FEC is not the given label at stack-depth"), set the
FEC-status to 1, and return.
4a. Segment Routing IGP-Prefix and IGP-Adjacency SID Validation:
If the Label-stack-depth is 0 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 34 (IPv4 IGP-Prefix Segment ID), {
Set the Best-return-code to 10, "Mapping for this FEC is not
the given label at stack-depth <RSC>" if any below
conditions fail:
/* The responder LSR is to check if it is the egress of the
IPv4 IGP-Prefix Segment ID described in the Target FEC Stack
sub-TLV, and if the FEC was advertised with the PHP bit
set.*/
- Validate that the Node Segment ID is advertised for the
IPv4 Prefix by IGP Protocol {
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 1, use OSPF as the IGP
protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 2, use IS-IS as the IGP
protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is an unrecognized value, it
MUST be treated as a Protocol value of 0.
}
- Validate that the Node Segment ID is advertised with the
No-PHP flag. {
o When the Protocol is OSPF, the NP-Flag defined in
Section 5 of [SR-OSPF] MUST be set to 0.
o When the Protocol is IS-IS, the P-Flag defined in
Section 6.1 of [SR-IS-IS] MUST be set to 0.
}
If it can be determined that no protocol associated with the
Interface-I would have advertised the FEC-Type at FEC-stack-
depth, set the Best-return-code to 12, "Protocol not
associated with interface at FEC-stack-depth" and return.
Set FEC-Status to 1 and return.
}
Else, if the Label-stack-depth is greater than 0 and the Target
FEC Stack sub-TLV at FEC-stack-depth is 34 (IPv4 IGP-Prefix
Segment ID), {
Set the Best-return-code to 10 if any below conditions fail:
- Validate that the Node Segment ID is advertised for the
IPv4 Prefix by the IGP protocol {
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 1, use OSPF as the IGP
protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is 2, use IS-IS as the IGP
protocol.
o When the Protocol field in the received IPv4 IGP-
Prefix Segment ID sub-TLV is an unrecognized value, it
MUST be treated as a Protocol value of 0.
}
If it can be determined that no protocol associated with
Interface-I would have advertised the FEC-Type at FEC-stack-
depth, set the Best-return-code to 12, "Protocol not
associated with interface at FEC stack-depth" and return.
Set FEC-Status to 1 and return.
}
Else, if the Label-stack-depth is 0 and the Target FEC sub-TLV
at FEC-stack-depth is 35 (IPv6 IGP-Prefix Segment ID), {
Set the Best-return-code to 10 if any of the below
conditions fail:
/* The LSR needs to check if it is being a tail-end for the
LSP and have the prefix advertised with the PHP bit set*/
- Validate that the Node Segment ID is advertised for the
IPv6 Prefix by the IGP protocol {
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 1, use OSPF as the IGP
protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 2, use IS-IS as the IGP
protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is an unrecognized value, it
MUST be treated as a Protocol value of 0.
}
- Validate that the Node Segment ID is advertised with the
No-PHP flag. {
o When the Protocol is OSPF, the NP-flag defined in
Section 5 of [SR-OSPFV3] MUST be set to 0.
o When the Protocol is IS-IS, the P-Flag defined in
Section 6.1 of [SR-IS-IS] MUST be set to 0.
}
If it can be determined that no protocol associated with
Interface-I would have advertised the FEC-Type at FEC-stack-
depth, set the Best-return-code to 12, "Protocol not
associated with interface at FEC stack-depth" and return.
Set the FEC-Status to 1 and return.
}
Else, if the Label-stack-depth is greater than 0 and the Target
FEC sub-TLV at FEC-stack-depth is 35 (IPv6 IGP-Prefix Segment
ID), {
Set the Best-return-code to 10 if any below conditions fail:
- Validate that the Node Segment ID is advertised for the
IPv4 Prefix by the IGP protocol {
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 1, use OSPF as the IGP
protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is 2, use IS-IS as the IGP
protocol.
o When the Protocol field in the received IPv6 IGP-
Prefix Segment ID sub-TLV is an unrecognized value, it
MUST be treated as a Protocol value of 0.
}
If it can be determined that no protocol associated with
Interface-I would have advertised the FEC-Type at FEC-stack-
depth, set the Best-return-code to 12, "Protocol not
associated with interface at FEC stack-depth" and return.
Set the FEC-Status to 1 and return.
}
Else, if the Target FEC sub-TLV at FEC-stack-depth is 36
(IGP-Adjacency Segment ID), {
Set the Best-return-code to 35 (Section 9.5) if any below
conditions fail:
When the Adj. Type is 1 (Parallel Adjacency):
o Validate that the Receiving Node Identifier is the
local IGP identifier.
o Validate that the IGP-Adjacency Segment ID is
advertised by the Advertising Node Identifier of the
Protocol in the local IGP database {
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 1, use OSPF as the
IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 2, use IS-IS as the
IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is an unrecognized
value, it MUST be treated as a Protocol value of 0.
}
When the Adj. Type is 4 or 6 (IGP Adjacency or LAN
Adjacency):
o Validate that the Remote Interface ID matches the
local identifier of the interface (Interface-I) on
which the packet was received.
o Validate that the Receiving Node Identifier is the
local IGP identifier.
o Validate that the IGP-Adjacency Segment ID is
advertised by the Advertising Node Identifier of
Protocol in the local IGP database {
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 0, use any locally
enabled IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 1, use OSPF as the
IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is 2, use IS-IS as the
IGP protocol.
* When the Protocol field in the received IGP-
Adjacency Segment ID sub-TLV is an unrecognized
value, it MUST be treated as a Protocol value of 0.
}
Set the FEC-Status to 1 and return.
}
7.5. TTL Consideration for Traceroute π¦
okay bestie, so the LSP Traceroute operation can properly walk every single hop of the SR network under the Uniform Model, as described in [RFC3443] π . But if one or more LSRs use a Short Pipe Model (also from [RFC3443]), traceroute might not get through every hop properly, because there's no TTL copy when the outer label gets popped π. Short Pipe is lowkey one of the most commonly used models, so this matters. The following TTL manipulation technique MAY be used when the Short Pipe Model is used β¨.
When you trace an LSP using the procedures in [RFC8029], the TTL goes up by one so you walk the path one hop at a time π§. But when a source-routed LSP needs tracing, there are as many TTLs as there are labels in the stack, so it's a whole different vibe π. The LSR that initiates the traceroute SHOULD start by setting the TTL to 1 for the tunnel in the LSP's label stack it wants to start tracing from, setting the TTL of all outer labels in the stack to the max value, and setting the TTL of all the inner labels in the stack to zero. So a typical start to the traceroute has a TTL of 1 on the outermost label, and all the inner labels sit at TTL 0 π. If the FEC Stack TLV is included, it should contain only those for the inner-stacked tunnels π. The Return Code/Subcode and FEC Stack Change TLV should be used to diagnose the tunnel, as described in [RFC8029] π₯. When the tracing of a tunnel in the stack is complete, the next tunnel in the stack should be traced π. You can tell a tunnel has ended when the Return Code indicates that the responding LSR is an egress for the stack at depth 1 π. Basically, the traceroute procedures in [RFC8029] can be recursively applied to traceroute a source-routed LSP, and that is so iconic ππ«Ά.
8. Backward Compatibility with Non-SR Devices πΈ
bestie, [INTEROP] describes how SR works in a network where SR-capable and non-SR-capable nodes live together π«Ά. In these networks, there may not be any FEC mapping in the responder when the initiator is SR-capable (or the other way around), and the responder isn't. But honestly this is not different from the RSVP and LDP interoperation scenarios, so no new drama π . When LSP Ping is triggered, the responder will set the FEC-return-code to Return 4, "Replying router has no mapping for the FEC at stack-depth" π.
Similarly, when an SR-capable node assigns an Adj-SID for a non-SR-capable node, LSP traceroute may fail π. That's because the non-SR-capable node doesn't know about the "IGP Adjacency Segment ID" sub-TLV, so it may not reply with the FEC Stack Change sub-TLVs. This can cause any further downstream nodes to reply back with a Return Code of 4, "Replying router has no mapping for the FEC at stack-depth" π.
9. IANA Considerations π
9.1. New Target FEC Stack Sub-TLVs π
IANA has assigned three new sub-TLVs from the "sub-TLVs for TLV Types 1, 16, and 21" subregistry of the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry [IANA] β¨.
Sub-Type Sub-TLV Name Reference
-------- ----------------- ------------
34 IPv4 IGP-Prefix Segment ID Section 5.1
35 IPv6 IGP-Prefix Segment ID Section 5.2
36 IGP-Adjacency Segment ID Section 5.3
9.2. Protocol in the Segment ID Sub-TLV π¦
IANA has created a new "Protocol in the Segment ID sub-TLV" registry (see Section 5) under the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry π§. Code points in the range of 0-250 will be assigned by Standards Action [RFC8126]. The range of 251-254 is reserved for experimental use and will not be assigned. The value of 255 is marked "Reserved". The initial entries into the registry are:
Value Meaning Reference
---------- ---------------- ------------
0 Any IGP protocol This document
1 OSPF This document
2 IS-IS This document
9.3. Adjacency Type in the IGP-Adjacency Segment ID π
IANA has created a new "Adjacency Type in the IGP-Adjacency Segment ID" registry (see Section 5.3) under the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry π. Code points in the range of 0-250 will be assigned by Standards Action. The range of 251-254 is reserved for experimental use and will not be assigned. The value of 255 is marked "Reserved". The initial entries into the registry are:
Value Meaning
---------- ----------------
0 Unnumbered Interface Adjacency
1 Parallel Adjacency
4 IPv4, Non-parallel Adjacency
6 IPv6, Non-parallel Adjacency
9.4. Protocol in the Label Stack Sub-TLV of the Downstream Detailed Mapping TLV π
IANA has created a new "Protocol in the Label Stack sub-TLV of the Downstream Detailed Mapping TLV" registry under the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry π. Code points in the range of 0-250 will be assigned by Standards Action. The range of 251-254 is reserved for experimental use and will not be assigned. The value of 255 is marked "Reserved". The initial entries into the registry are:
Value Meaning Reference
---------- ---------------- ------------
0 Unknown Section 3.4.1.2 of RFC 8029
1 Static Section 3.4.1.2 of RFC 8029
2 BGP Section 3.4.1.2 of RFC 8029
3 LDP Section 3.4.1.2 of RFC 8029
4 RSVP-TE Section 3.4.1.2 of RFC 8029
5 OSPF Section 6 of this document
6 IS-IS Section 6 of this document
7-250 Unassigned
251-254 Reserved for
Experimental Use This document
255 Reserved This document
9.5. Return Code π₯
IANA has assigned a new Return Code from the "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" in the 0-191 (Standards Action) range from the "Return Codes" subregistry π .
Value Meaning Reference
---------- ----------------- ------------
35 Mapping for this FEC is not associated Section 7.4 of
with the incoming interface this document
10. Security Considerations β οΈπ
okay this part is serious bestie π. This document defines additional MPLS LSP Ping sub-TLVs and follows the mechanisms defined in [RFC8029]. All the security considerations defined in [RFC8029] will be applicable for this document and, in addition, they do not impose any additional security challenges to be considered π«Ά. So the security story is basically "read RFC 8029 and you're covered" ππ.
11. References π
11.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. - [RFC3443] Agarwal, P. and B. Akyol, "Time To Live (TTL) Processing in Multi-Protocol Label Switching (MPLS) Networks", RFC 3443, DOI 10.17487/RFC3443, January 2003,
https://www.rfc-editor.org/info/rfc3443. - [RFC4203] Kompella, K., Ed. and Y. Rekhter, Ed., "OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 4203, DOI 10.17487/RFC4203, October 2005,
https://www.rfc-editor.org/info/rfc4203. - [RFC5307] Kompella, K., Ed. and Y. Rekhter, Ed., "IS-IS Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 5307, DOI 10.17487/RFC5307, October 2008,
https://www.rfc-editor.org/info/rfc5307. - [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.
11.2. Informative References β¨
- [IANA] IANA, "Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters",
http://www.iana.org/assignments/mpls-lsp-ping-parameters. - [INTEROP] Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., and S. Litkowski, "Segment Routing interworking with LDP", Work in Progress, draft-ietf-spring-segment-routing-ldp-interop-09, September 2017.
- [RFC792] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, DOI 10.17487/RFC0792, September 1981,
https://www.rfc-editor.org/info/rfc792. - [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. - [SR] Filsfils, C., Previdi, S., Ginsberg, L., Decraene, B., Litkowski, S., and R. Shakir, "Segment Routing Architecture", Work in Progress, draft-ietf-spring-segment-routing-14, December 2017.
- [SR-IS-IS] Previdi, S., Ginsberg, L., Filsfils, C., Bashandy, A., Gredler, H., Litkowski, S., Decraene, B., and J. Tantsura, "IS-IS Extensions for Segment Routing", Work in Progress, draft-ietf-isis-segment-routing-extensions-15, December 2017.
- [SR-MPLS] Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., Litkowski, S., and R. Shakir, "Segment Routing with MPLS data plane", Work in Progress, draft-ietf-spring-segment-routing-mpls-11, October 2017.
- [SR-OSPF] Psenak, P., Previdi, S., Filsfils, C., Gredler, H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF Extensions for Segment Routing", Work in Progress, draft-ietf-ospf-segment-routing-extensions-24, December 2017.
- [SR-OSPFV3] Psenak, P., Previdi, S., Filsfils, C., Gredler, H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPFv3 Extensions for Segment Routing", Work in Progress, draft-ietf-ospf-ospfv3-segment-routing-extensions-10, September 2017.
Acknowledgements π«Ά
The authors would like to thank Stefano Previdi, Les Ginsberg, Balaji Rajagopalan, Harish Sitaraman, Curtis Villamizar, Pranjal Dutta, Lizhong Jin, Tom Petch, Victor Ji, Mustapha Aissaoui, Tony Przygienda, Alexander Vainshtein, and Deborah Brungard for their review and comments π.
The authors would like to thank Loa Andersson for his comments and recommendation to merge documents πΈ.
Contributors π
The following are key contributors to this document π:
- Hannes Gredler, RtBrick, Inc.
- Tarek Saad, Cisco Systems, Inc.
- Siva Sivabalan, Cisco Systems, Inc.
- Balaji Rajagopalan, Juniper Networks
- Faisal Iqbal, Cisco Systems, Inc.
Authors' Addresses β¨
okay bestie, meet the squad who actually wrote this π«Ά these are the people you contact about RFC 8287 π
Nagendra Kumar (editor) π
Nagendra Kumar (editor)
Cisco Systems, Inc.
7200-12 Kit Creek Road
Research Triangle Park, NC 27709-4987
United States of America
Email: naikumar@cisco.com
Carlos Pignataro (editor) π
Carlos Pignataro (editor)
Cisco Systems, Inc.
7200-11 Kit Creek Road
Research Triangle Park, NC 27709-4987
United States of America
Email: cpignata@cisco.com
George Swallow π¦
George Swallow
Southend Technical Center
Email: swallow.ietf@gmail.com
Nobo Akiya πΈ
Nobo Akiya
Big Switch Networks
Email: nobo.akiya.dev@gmail.com
Sriganesh Kini π§
Sriganesh Kini
Individual
Email: sriganeshkini@gmail.com
Mach(Guoyi) Chen π
Mach(Guoyi) Chen
Huawei
Email: mach.chen@huawei.com
that's the whole crew, periodt πβ¨
π¦ where this page comes from
- ietf: rfc8287 2017-12
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms