RFC 9884

Label Switched Path Ping for Segment Routing Path Segment Identifier with MPLS Data Plane

๐Ÿ“… published October 2025, from ietf

RFC 9884: Label Switched Path Ping for Segment Routing Path Segment Identifier with MPLS Data Plane ๐Ÿฆ‹

okay bestie, let's get into RFC 9884 ๐Ÿ’– It's a Standards Track document from the IETF, which means it's an actual Internet standard and not just a vibe. It was published in October 2025 with ISSN 2070-1721. The five authors are X. Min and S. Peng from ZTE Corp., L. Gong from China Mobile, R. Gandhi from Cisco Systems, Inc., and C. Pignataro from Blue Fern Consulting. The header doesn't list any RFCs it obsoletes or updates, so it's standing on its own ๐ŸŒˆ

Abstract

okay so Segment Routing (SR) is giving source routing ๐Ÿ—บ๏ธ The sender writes down an ordered list of instructions called "segments" and the packet follows them in order. SR can run on top of the MPLS data plane โœจ Path Segment Identifiers (PSIDs) are the tags used to identify and match up bidirectional or end-to-end paths in SR networks ๐ŸŽ€

This doc defines the procedures, which means six new Target Forwarding Equivalence Class (FEC) Stack sub-TLVs ๐Ÿ’… Those let LSP Ping check connectivity and isolate faults on SR paths that have PSIDs in them. Basically it lets you validate and trace SR paths with Path SIDs in MPLS networks, and it's a glow-up on top of the existing SR-MPLS Operations, Administration, and Maintenance (OAM) tools ๐Ÿซถ

Status of This Memo

ngl this part is the legal-ish bit, but it's important ๐Ÿง This is an Internet Standards Track document. It's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check Section 2 of RFC 7841 ๐Ÿ“š

For the current status, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9884 ๐Ÿ”—

Copyright (c) 2025 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) as they stand on the date of publication. Please read these carefully, because they spell out your rights and restrictions for this document. Code Components pulled out of this document must include the Revised BSD License text described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Revised BSD License describes ๐Ÿ™ˆ

Table of Contents

1.  Introduction
2.  Conventions
  2.1.  Requirements Language
  2.2.  Terminology
3.  Path Segment ID Sub-TLVs
  3.1.  SR Policy Associated PSID - IPv4 Sub-TLV
  3.2.  SR Candidate Path Associated PSID - IPv4 Sub-TLV
  3.3.  SR Segment List Associated PSID - IPv4 Sub-TLV
  3.4.  SR Policy Associated PSID - IPv6 Sub-TLV
  3.5.  SR Candidate Path Associated PSID - IPv6 Sub-TLV
  3.6.  SR Segment List Associated PSID - IPv6 Sub-TLV
4.  PSID FEC Validation
  4.1.  PSID FEC Validation Rules
5.  Security Considerations
6.  IANA Considerations
7.  References
  7.1.  Normative References
  7.2.  Informative References
Acknowledgements
Authors' Addresses

1. Introduction โœจ

okay so a Path Segment is a local segment [RFC9545] that uniquely identifies an SR path on the egress node ๐Ÿฆ‹ A Path Segment Identifier (PSID) is a single label assigned from the SR Local Block (SRLB) [RFC8402] of the egress node of an SR path ๐ŸŒธ

As [RFC9545] explains, the PSID is a single label that the ingress node of the SR path inserts, and then the egress node of the SR path processes it. The PSID sits in the MPLS label stack right after the last label of the SR path, and the egress node pops it off ๐ŸŽ€

The LSP Ping procedure from [RFC8029], as defined in Section 7.4 of [RFC8287], also works for PSIDs. This document adds a new step 4b, specific to PSID, after the existing step 4a ๐Ÿ’… So LSP Ping can be used to check that a PSID is operating correctly and to verify the PSID against the control plane ๐Ÿซถ

Checking correct operation means the initiator can use LSP Ping to see whether a PSID reached the intended node and was processed correctly by that node ๐Ÿ‘‘ Verifying against the control plane means the initiator can use LSP Ping to check the SR path context (segment-list, candidate path, or SR Policy) tied to the PSID, as signaled or provisioned at the egress node ๐Ÿงš To make that possible, this document specifies six new Target Forwarding Equivalence Class (FEC) Stack sub-TLVs for these PSID checks โœจ

LSP Traceroute [RFC8287] is left out of this document, and the reason is kinda iconic: transit nodes aren't involved in PSID processing ๐Ÿ™ˆ

2. Conventions ๐ŸŽ€

2.1. 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 ๐Ÿ’œ

2.2. Terminology

This document uses the terminology defined in [RFC3031], [RFC8402], [RFC8029], and [RFC9545]. Readers are expected to already know the terms in those documents ๐Ÿ“š

It also introduces one extra term ๐Ÿ’–

Segment-List-ID The Segment-List-ID field is a 4-octet identifier that uniquely identifies a segment list within the context of the candidate path of an SR Policy. It isn't defined in [RFC9256], but it's the same identifier that can be signaled through control plane protocols like Border Gateway Protocol (BGP) (Section 2.1 of [SR-SEGLIST-ID]), Path Computation Element Communication Protocol (PCEP) (Section 4.2 of [PCE-MULTIPATH]), and Border Gateway Protocol - Link State (BGP-LS) (Section 5.7.4 of [RFC9857]) ๐Ÿ“

3. Path Segment ID Sub-TLVs ๐Ÿงš

Analogous to what's defined in Section 5 of [RFC8287] and Section 4 of [RFC9703], six 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) ๐ŸŒˆ The structures of the six new sub-TLVs follow the TLV structure defined in Section 3 of [RFC8029], so nothing here is brand new vibes-wise ๐Ÿซถ

       +==========+==========================================+
       | Sub-Type | Sub-TLV Name                             |
       +==========+==========================================+
       | 49       | SR Policy Associated PSID - IPv4         |
       +----------+------------------------------------------+
       | 50       | SR Candidate Path Associated PSID - IPv4 |
       +----------+------------------------------------------+
       | 51       | SR Segment List Associated PSID - IPv4   |
       +----------+------------------------------------------+
       | 52       | SR Policy Associated PSID - IPv6         |
       +----------+------------------------------------------+
       | 53       | SR Candidate Path Associated PSID - IPv6 |
       +----------+------------------------------------------+
       | 54       | SR Segment List Associated PSID - IPv6   |
       +----------+------------------------------------------+

Table 1: Sub-TLVs for PSID Checks ๐Ÿฆ‹

As Section 2 of [RFC9545] specifies, a PSID can identify any of these:

  • a single segment list, some segment lists, or all segment lists in a candidate path of an SR Policy ๐Ÿ’…
  • some segment lists across multiple candidate paths of an SR Policy ๐Ÿ‘‘
  • all segment lists in all candidate paths of an SR Policy ๐ŸŒธ

So yes, we need six different Target FEC Stack sub-TLVs for PSID. Here are the selection rules, in order ๐ŸŽ€

  • When a PSID is used to identify all segment lists in an SR Policy, the Target FEC Stack sub-TLV of the type "SR Policy Associated PSID" (for IPv4 or IPv6) MUST be used for PSID checks.
  • When a PSID is used to identify all segment lists in an SR Candidate Path, the Target FEC Stack sub-TLV of the type "SR Candidate Path Associated PSID" (for IPv4 or IPv6) MUST be used for PSID checks.
  • When a PSID is used to identify a single segment list, the Target FEC Stack sub-TLV of the type "SR Segment List Associated PSID" (for IPv4 or IPv6) MUST be used for PSID checks.
  • When a PSID is used to identify some segment lists in a candidate path or an SR Policy, the Target FEC Stack sub-TLV of the type "SR Segment List Associated PSID" (for IPv4 or IPv6) MUST be used for PSID checks. In this case, multiple LSP Ping messages MUST be sent, and one Target FEC Stack sub-TLV of the type "SR Segment List Associated PSID" (for IPv4 or IPv6) MUST be carried in each LSP Ping message ๐Ÿ˜ญ

These six new Target FEC Stack sub-TLVs are not expected to show up in the same message. If more than one of them is present in a message, only the first sub-TLV gets processed, following the validation rules in Section 4 ๐Ÿ™ˆ

3.1. SR Policy Associated PSID - IPv4 Sub-TLV

okay the SR Policy Associated PSID - IPv4 sub-TLV is laid out 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 = 49            |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Headend (4 octets)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Color (4 octets)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Endpoint (4 octets)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 1: SR Policy Associated PSID - IPv4 Sub-TLV Format โœจ

Type (length: 2 octets) The Type field identifies this as an SR Policy Associated PSID - IPv4 sub-TLV. The value is set to 49 ๐Ÿฆ‹

Length (length: 2 octets) The Length field tells you how long the sub-TLV is in octets, not counting the first 4 octets (the Type and Length fields). The value MUST be set to 12 ๐Ÿ’…

Headend (length: 4 octets) The Headend field encodes the headend IPv4 address of the SR Policy. This field is defined in Section 2.1 of [RFC9256] ๐ŸŒธ

Color (length: 4 octets) The Color field identifies the color (i.e., policy identifier) of the SR Policy and is encoded as defined in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 4 octets) The Endpoint field encodes the endpoint IPv4 address of the SR Policy. This field is defined in Section 2.1 of [RFC9256] ๐Ÿซถ


3.2. SR Candidate Path Associated PSID - IPv4 Sub-TLV โœจ

okay so this sub-TLV is the one that tags a candidate path inside an SR Policy, and it's giving IPv4 realness ๐Ÿ’… 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 = 50            |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Headend (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Color (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Endpoint (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Protocol-Origin|                    Reserved                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                                                               |
   |                   Originator (20 octets)                      |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                Discriminator (4 octets)                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: SR Candidate Path Associated PSID - IPv4 Sub-TLV Format

Type (length: 2 octets) The Type field tells you this is an SR Candidate Path Associated PSID - IPv4 sub-TLV ๐Ÿฆ‹ The value is set to 50.

Length (length: 2 octets) The Length field is the length of the sub-TLV in octets, not counting the first 4 octets (the Type and Length fields) ๐ŸŽ€ The value MUST be set to 40.

Headend (length: 4 octets) The Headend field holds the headend IPv4 address of the SR Candidate Path. This field is defined in Section 2.1 of [RFC9256].

Color (length: 4 octets) The Color field identifies the policy color and is defined in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 4 octets) The Endpoint field holds the endpoint IPv4 address of the SR Candidate Path. This field is defined in Section 2.1 of [RFC9256].

Protocol-Origin (length: 1 octet) The Protocol-Origin field says which protocol originated the SR Candidate Path ๐Ÿ‘‘ It's defined in Section 2.3 of [RFC9256] and takes values from the IANA registry [PROTOCOL-ORIGIN]. If an unsupported value is used, validation at the responder MUST fail. no exceptions, bestie ๐Ÿ™ˆ

Reserved (length: 3 octets) The Reserved field is saved for future use ๐ŸŒธ It MUST be set to zero when sent and MUST be ignored upon receipt.

Originator (length: 20 octets) The Originator field identifies who originated the SR Candidate Path, and it's encoded as defined in Section 2.4 of [RFC9256] ๐Ÿงš

Discriminator (length: 4 octets) The Discriminator field uniquely identifies the SR Candidate Path within the context of the Headend, Color, and Endpoint fields. This field is defined in Section 2.5 of [RFC9256] ๐Ÿ’œ


3.3. SR Segment List Associated PSID - IPv4 Sub-TLV ๐Ÿ’–

this one is used to pick out a specific segment list inside a candidate path of an SR Policy. The format is shown in Figure 3 ๐Ÿ“

    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 = 51            |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Headend (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Color (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Endpoint (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Protocol-Origin|                    Reserved                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                                                               |
   |                    Originator (20 octets)                     |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Discriminator (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Segment-List-ID (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 3: SR Segment List Associated PSID - IPv4 Sub-TLV Format

Type (length: 2 octets) The Type field tells you this is an SR Segment List Associated PSID - IPv4 sub-TLV โœจ The value is set to 51.

Length (length: 2 octets) The Length field is the length of the sub-TLV in octets, not counting the first 4 octets (the Type and Length fields). The value MUST be set to 44.

Headend (length: 4 octets) The Headend field holds the headend IPv4 address of the SR Policy. This field is defined in Section 2.1 of [RFC9256].

Color (length: 4 octets) The Color field identifies the color of the SR Policy and is encoded as specified in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 4 octets) The Endpoint field specifies the endpoint IPv4 address of the SR Policy, as defined in Section 2.1 of [RFC9256].

Protocol-Origin (length: 1 octet) Same vibe as before: the Protocol-Origin field says which protocol originated the SR Candidate Path. It's defined in Section 2.3 of [RFC9256] and takes values from the IANA registry [PROTOCOL-ORIGIN]. If an unsupported value is used, validation at the responder MUST fail ๐Ÿ’…

Reserved (length: 3 octets) The Reserved field is for future use ๐ŸŒธ It MUST be set to zero when transmitted and MUST be ignored upon receipt.

Originator (length: 20 octets) The Originator field identifies the originator of the SR Candidate Path and is defined in Section 2.4 of [RFC9256] ๐Ÿงš

Discriminator (length: 4 octets) The Discriminator field uniquely identifies the SR Candidate Path within the context of the Headend, Color, and Endpoint fields. This field is defined in Section 2.5 of [RFC9256] ๐Ÿ’œ

Segment-List-ID (length: 4 octets) The Segment-List-ID field is a 4-octet identifier that uniquely identifies a segment list within the context of the candidate path of an SR Policy ๐Ÿฆ‹ This field is defined in Section 2.2.


3.4. SR Policy Associated PSID - IPv6 Sub-TLV ๐ŸŒธ

the IPv6 version of the SR Policy one, and it's defined 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 = 52            |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Headend (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Color (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                    Endpoint (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 4: SR Policy Associated PSID - IPv6 Sub-TLV Format

Type (length: 2 octets) The Type field identifies the sub-TLV as an SR Policy Associated PSID - IPv6 sub-TLV ๐Ÿ‘‘ The value is set to 52.

Length (length: 2 octets) The Length field is the length of the sub-TLV in octets, not counting the first 4 octets (the Type and Length fields). The value MUST be set to 36.

Headend (length: 16 octets) The Headend field holds the headend IPv6 address of the SR Policy. This field is defined in Section 2.1 of [RFC9256] โœจ

Color (length: 4 octets) The Color field identifies the color (i.e., policy identifier) of the SR Policy and is encoded as defined in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 16 octets) The Endpoint field holds the endpoint IPv6 address of the SR Policy. This field is defined in Section 2.1 of [RFC9256] ๐Ÿฆ‹

3.5. SR Candidate Path Associated PSID - IPv6 Sub-TLV โœจ

okay so this is the IPv6 version of the SR Candidate Path Associated PSID sub-TLV, and it's giving main character energy ๐Ÿ’– 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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Type = 53            |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Headend (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Color (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                    Endpoint (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Protocol-Origin|                    Reserved                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                                                               |
   |                   Originator (20 octets)                      |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                Discriminator (4 octets)                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 5: SR Candidate Path Associated PSID - IPv6 Sub-TLV Format

Type (length: 2 octets) The Type field marks this as an SR Candidate Path Associated PSID - IPv6 sub-TLV ๐Ÿฆ‹ Its value is set to 53.

Length (length: 2 octets) The Length field tells you how long the sub-TLV is in octets, not counting the first 4 octets (the Type and Length fields) ๐Ÿงš The value MUST be set to 64.

Headend (length: 16 octets) The Headend field carries the headend IPv6 address of the SR Candidate Path. It's defined in Section 2.1 of [RFC9256] ๐ŸŒธ

Color (length: 4 octets) The Color field identifies the policy color, and it's defined in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 16 octets) The Endpoint field carries the endpoint IPv6 address of the SR Candidate Path. Again, that's Section 2.1 of [RFC9256] โœจ

Protocol-Origin (length: 1 octet) The Protocol-Origin field says which protocol originated the SR Candidate Path. It's defined in Section 2.3 of [RFC9256] and takes its values from the IANA registry [PROTOCOL-ORIGIN]. If someone uses a value that isn't supported, validation at the responder MUST fail ๐Ÿ™…โ€โ™€๏ธ

Reserved (length: 3 octets) The Reserved field is saved for future use ๐Ÿ”ฎ It MUST be set to zero when sent, and it MUST be ignored upon receipt. Don't read anything into it, bestie.

Originator (length: 20 octets) The Originator field identifies the originator of the SR Candidate Path, and it's encoded as defined in Section 2.4 of [RFC9256] ๐Ÿ’œ

Discriminator (length: 4 octets) The Discriminator field uniquely identifies the SR Candidate Path within the context of the Headend, Color, and Endpoint fields. It's defined in Section 2.5 of [RFC9256] ๐Ÿ‘‘


3.6. SR Segment List Associated PSID - IPv6 Sub-TLV ๐ŸŽ€

the SR Segment List Associated PSID - IPv6 sub-TLV is how you pin down one specific segment list inside a candidate path of an SR Policy ๐Ÿ’… Here's the picture:

    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 = 54            |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Headend (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Color (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                    Endpoint (16 octets)                       |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Protocol-Origin|                    Reserved                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                                                               |
   |                    Originator (20 octets)                     |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Discriminator (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Segment-List-ID (4 octets)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 6: SR Segment List Associated PSID - IPv6 Sub-TLV Format

Type (length: 2 octets) The Type field marks this as an SR Segment List Associated PSID - IPv6 sub-TLV ๐Ÿฆ‹ Its value is set to 54.

Length (length: 2 octets) The Length field tells you the sub-TLV's length in octets, not counting the first 4 octets (Type and Length fields) ๐Ÿงš The value MUST be set to 68.

Headend (length: 16 octets) The Headend field carries the headend IPv6 address of the SR Policy, as defined in Section 2.1 of [RFC9256] ๐ŸŒธ

Color (length: 4 octets) The Color field gives the color of the SR Policy, and it's encoded as specified in Section 2.1 of [RFC9256] ๐ŸŒˆ

Endpoint (length: 16 octets) The Endpoint field specifies the endpoint IPv6 address of the SR Policy, as defined in Section 2.1 of [RFC9256] โœจ

Protocol-Origin (length: 1 octet) The Protocol-Origin field says which protocol originated the SR Candidate Path. It's defined in Section 2.3 of [RFC9256] and takes its values from the IANA registry [PROTOCOL-ORIGIN]. If an unsupported value is used, validation at the responder MUST fail ๐Ÿ™…โ€โ™€๏ธ

Reserved (length: 3 octets) The Reserved field is reserved for future use ๐Ÿ”ฎ It MUST be set to zero when transmitted, and it MUST be ignored upon receipt. Hands off, it's not yours yet ๐Ÿ’€

Originator (length: 20 octets) The Originator field identifies the originator of the SR Candidate Path, and it's defined in Section 2.4 of [RFC9256] ๐Ÿ’œ

Discriminator (length: 4 octets) The Discriminator field uniquely identifies the SR Candidate Path within the context of the Headend, Color, and Endpoint fields. It's defined in Section 2.5 of [RFC9256] ๐Ÿ‘‘

Segment-List-ID (length: 4 octets) The Segment-List-ID field is a 4-octet identifier that uniquely identifies a segment list within the context of the candidate path of an SR Policy. This field is defined in Section 2.2. It's the detail that makes this whole sub-TLV so iconic ๐Ÿซถ


4. PSID FEC Validation โญ

okay so the MPLS LSP Ping procedures may be started by the headend of the SR path, or by a centralized topology-aware data plane monitoring system as described in [RFC8403] ๐Ÿ›ฐ๏ธ For the PSID, the responder nodes that receive an echo request and send an echo reply MUST be the endpoint of the SR path. No exceptions, periodt ๐Ÿ’…

When an endpoint gets an LSP echo request packet whose top FEC is the PSID, it MUST perform validity checks on the content of the PSID Target FEC Stack sub-TLV ๐Ÿ”

If a malformed Target FEC Stack sub-TLV shows up, then a return code of 1, "Malformed echo request received" as defined in [RFC8029], MUST be sent. This is the part where it gets spicy: the section below gets appended to step 4a of Section 7.4 of [RFC8287] ๐ŸŒถ๏ธ

4.1. PSID FEC Validation Rules โœจ

4b. Segment Routing PSID Validation: okay bestie, this is the part where the replying router checks the PSID against what it actually knows. ๐Ÿ” The whole procedure branches on the Label-stack-depth and the Target FEC Stack sub-TLV type, so here it is verbatim, no cap:

If the Label-stack-depth is 1 and the Target FEC Stack sub-TLV at
FEC-stack-depth is 49 (SR Policy Associated PSID - IPv4 sub-TLV), {

   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 notation <RSC> refers to the Return Subcode):

   -  Validate that the PSID is signaled or provisioned for the SR
      Policy {

      *  Validate that the signaled or provisioned headend, color,
         and endpoint for the PSID match with the corresponding
         fields in the received SR Policy Associated PSID - IPv4
         sub-TLV.

      }

   }

   If all the above validations have passed, set the return code to 3
   "Replying router is an egress for the FEC at stack-depth <RSC>".

   Set the FEC-Status to 1 and return.

}

Else, if the Label-stack-depth is 1 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 50 (SR Candidate Path Associated PSID - IPv4
sub-TLV), {

   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:

   -  Validate that the PSID is signaled or provisioned for the SR
      Candidate Path {

      *  Validate that the signaled or provisioned headend, color,
         endpoint, originator, and discriminator for the PSID
         match with the corresponding fields in the received SR
         Candidate Path Associated PSID - IPv4 sub-TLV.

      }

   }

   If all the above validations have passed, set the return code to 3
   "Replying router is an egress for the FEC at stack-depth <RSC>".

   Set the FEC-Status to 1 and return.

}

Else, if the Label-stack-depth is 1 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 51 (SR Segment List Associated PSID - IPv4
sub-TLV), {

   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:

   -  Validate that the PSID is signaled or provisioned for the SR
      Segment List {

      *  Validate that the signaled or provisioned headend, color,
         endpoint, originator, discriminator, and segment-list-id
         for the PSID match with the corresponding fields in the
         received SR Segment List Associated PSID - IPv4 sub-TLV.

      }

   }

  If all the above validations have passed, set the return code to 3,
  "Replying router is an egress for the FEC at stack-depth <RSC>".

  Set the FEC-Status to 1 and return.

}

Else, if the Label-stack-depth is 1 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 52 (SR Policy Associated PSID - IPv6
sub-TLV), {

   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

   -  Validate that the PSID is signaled or provisioned for the SR
      Policy {

      *  Validate that the signaled or provisioned headend, color,
         and endpoint for the PSID match with the corresponding
         fields in the received SR Policy Associated PSID - IPv6 sub-
         TLV.

      }

   }

   If all the above validations have passed, set the return code to 3
   "Replying router is an egress for the FEC at stack-depth <RSC>".

   Set the FEC-Status to 1 and return.

}

Else, if the Label-stack-depth is 1 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 53 (SR Candidate Path Associated PSID - IPv6
sub-TLV), {

   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:

   -  Validate that the PSID is signaled or provisioned for the SR
      Candidate Path {

      *  Validate that the signaled or provisioned headend, color,
         endpoint, originator, and discriminator for the PSID
         match with the corresponding fields in the received SR
         Candidate Path Associated PSID - IPv6 sub-TLV.

      }

   }

   If all the above validations have passed, set the return code to 3
   "Replying router is an egress for the FEC at stack-depth <RSC>".

   Set the FEC-Status to 1 and return.

}

Else, if the Label-stack-depth is 1 and the Target FEC Stack sub-TLV
at FEC-stack-depth is 54 (SR Segment List Associated PSID - IPv6
sub-TLV), {

   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:

   -  Validate that the PSID is signaled or provisioned for the SR
      Segment List {

      *  Validate that the signaled or provisioned headend, color,
         endpoint, originator, discriminator, and segment-list-id
         for the PSID match with the corresponding fields in the
         received SR Segment List Associated PSID - IPv6 sub-TLV.

      }

   }

   If all the above validations have passed, set the return code to 3
   "Replying router is an egress for the FEC at stack-depth <RSC>".

   Set the FEC-Status to 1 and return.

}

Now the important bit ๐Ÿซถ: when any of the following is carried in a Reverse-Path Target FEC Stack TLV (Type 16) or Reply Path TLV (Type 21), it MUST be sent by an endpoint in an echo reply. ๐Ÿ’Œ

  • SR Policy Associated PSID - IPv4 sub-TLV,
  • SR Candidate Path Associated PSID - IPv4 sub-TLV,
  • SR Segment List Associated PSID - IPv4 sub-TLV,
  • SR Policy Associated PSID - IPv6 sub-TLV,
  • SR Candidate Path Associated PSID - IPv6 sub-TLV, or
  • SR Segment List Associated PSID - IPv6 sub-TLV

The headend MUST perform validity checks as described above without setting the return code. ๐Ÿง If any of the validations fail, then the headend MUST drop the echo reply and SHOULD log and/or report an error. ๐Ÿ˜ญ That's a whole vibe, and it's giving strict but fair. ๐Ÿ’…


5. Security Considerations ๐Ÿ”

Okay, security is serious business, but the good news is this document is pretty chill about it! ๐ŸŒธ It defines additional MPLS LSP Ping sub-TLVs and follows the mechanisms defined in [RFC8029]. All the security considerations defined in Section 5 of [RFC8029] apply to this document. And the MPLS LSP Ping sub-TLVs defined in this document don't add any extra security challenges to think about. ๐Ÿงš


6. IANA Considerations ๐ŸŽ€

IANA has assigned six Target FEC Stack sub-TLVs from the "Sub-TLVs for TLV Types 1, 16, and 21" registry [MPLS-LSP-PING] within the "TLVs" registry of the "Multiprotocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" registry group. The Standards Action [RFC8126] range that requires an error message to be returned if the sub-TLV is not recognized (range 0-16383) has been used. ๐Ÿฆ‹

+==========+==================================+=============+
| Sub-Type | Sub-TLV Name                     | Reference   |
+==========+==================================+=============+
| 49       | SR Policy Associated PSID - IPv4 | Section 3.1 |
|          |                                  | of RFC 9884 |
+----------+----------------------------------+-------------+
| 50       | SR Candidate Path Associated     | Section 3.2 |
|          | PSID - IPv4                      | of RFC 9884 |
+----------+----------------------------------+-------------+
| 51       | SR Segment List Associated PSID  | Section 3.3 |
|          | - IPv4                           | of RFC 9884 |
+----------+----------------------------------+-------------+
| 52       | SR Policy Associated PSID - IPv6 | Section 3.4 |
|          |                                  | of RFC 9884 |
+----------+----------------------------------+-------------+
| 53       | SR Candidate Path Associated     | Section 3.5 |
|          | PSID - IPv6                      | of RFC 9884 |
+----------+----------------------------------+-------------+
| 54       | SR Segment List Associated PSID  | Section 3.6 |
|          | - IPv6                           | of RFC 9884 |
+----------+----------------------------------+-------------+

Table 2: Sub-TLVs for TLV Types 1, 16, and 21 Registry


7. References ๐Ÿ“š

7.1. Normative References

[MPLS-LSP-PING]
           IANA, "Multiprotocol Label Switching (MPLS) Label Switched
           Paths (LSPs) Ping Parameters",
           <http://www.iana.org/assignments/mpls-lsp-ping-
           parameters>.

[PROTOCOL-ORIGIN]
           IANA, "SR Policy Protocol Origin",
           <https://www.iana.org/assignments/segment-routing>.

[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>.

[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>.

[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>.

[RFC9545]  Cheng, W., Ed., Li, H., Li, C., Ed., Gandhi, R., and R.
           Zigler, "Path Segment Identifier in MPLS-Based Segment
           Routing Networks", RFC 9545, DOI 10.17487/RFC9545,
           February 2024, <https://www.rfc-editor.org/info/rfc9545>.

7.2. Informative References ๐Ÿ“šโœจ

Okay bestie, this is the reading list ๐Ÿฆ‹ These are the informative references, so they're not required to implement the spec, but they're the good stuff for context ๐Ÿ’…


Acknowledgements ๐Ÿซถ

The authors gave a huge shoutout to Loa Andersson, Detao Zhao, Ben Niven-Jenkins, Greg Mirsky, Ketan Talaulikar, James Guichard, Jon Geater, Gorry Fairhurst, Bing Liu, Mohamed Boucadair, ร‰ric Vyncke, Gunter Van de Velde, Mahesh Jethanandani, and Andy Smith for their thorough review and very helpful comments. Literally the whole review squad ๐Ÿ˜ญ๐Ÿ’–

The authors also thanked Yao Liu and Quan Xiong for the very helpful face-to-face discussion. Iconic behaviour โœจ


Authors' Addresses ๐Ÿ’Œ

  • Xiao Min
    • ZTE Corp.
    • Nanjing, China
    • Phone: +86 18061680168
    • Email: xiao.min2@zte.com.cn
  • Shaofu Peng
    • ZTE Corp.
    • Nanjing, China
    • Email: peng.shaofu@zte.com.cn
  • Liyan Gong
    • China Mobile
    • Beijing, China
    • Email: gongliyan@chinamobile.com
  • Rakesh Gandhi
    • Cisco Systems, Inc.
    • Canada
    • Email: rgandhi@cisco.com
  • Carlos Pignataro
    • Blue Fern Consulting
    • United States of America
    • Email: carlos@bluefern.consulting

That's the whole spec, bestie! Thank you for reading it with me ๐ŸŒˆ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from