Label Switched Path (LSP) Ping for Segment Routing (SR) Path Segment Identifiers (SIDs) with MPLS Data Planes
Xiao Min
ZTE Corp.
Nanjing
China
+86 25 88013062
xiao.min2@zte.com.cn
Shaofu Peng
ZTE Corp.
Nanjing
China
peng.shaofu@zte.com.cn
Liyan Gong
China Mobile
Beijing
China
gongliyan@chinamobile.com
2022
Routing
MPLS Working Group
Request for Comments
RFC
Internet Draft
I-D
Path Segment is a type of SR segment, which is used to identify an SR path. This document provides Target Forwarding Equivalence Class (FEC) stack TLV definitions for Path Segment Identifiers.

Introduction
Path Segment is a type of SR segment, which is used to identify an SR path. Path Segment in MPLS based segment routing network is defined in [I-D.ietf-spring-mpls-path-segment].
When Path Segment is used, it's inserted by the ingress node of the SR path, and then processed by the egress node of the SR path. The position of Path Segment Label within the MPLS label stack is immediately following the segment list of the SR path. Note that the Path Segment would not be popped up until it reaches the egress node.
This document provides Target Forwarding Equivalence Class (FEC) stack TLV definitions for Path-SIDs. Procedures for LSP Ping as defined in [RFC8287] and [RFC8690] are applicable to Path-SIDs as well.

Conventions

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.

Terminology
This document uses the terminology defined in [RFC8402] and [RFC8029], readers are expected to be familiar with those terms.

Path Segment ID Sub-TLV
Analogous to what's defined in Section 5 of [RFC8287] and Section 4 of [I-D.ietf-mpls-sr-epe-oam], 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
     --------    -----------------------------
      TBD1       SR Policy's Path SID
      TBD2       SR Candidate Path's Path SID
      TBD3       SR Segment List's Path SID

As specified in Section 2 of [I-D.ietf-spring-mpls-path-segment], the Path Segment may be used to identify an SR Policy, its Candidate Path, or a Segment List, so three different Target FEC sub-TLVs need to be defined for Path Segment ID. When a Path Segment is used to identify an SR Policy, the Target FEC sub-TLV of SR Policy's Path SID would be used to validate the control plane to forwarding plane synchronization for this Path-SID; When a Path Segment is used to identify an SR Candidate Path, the Target FEC sub-TLV of SR Candidate Path's Path SID would be used to validate the control plane to forwarding plane synchronization for this Path-SID; When a Path Segment is used to identify a Segment List, the Target FEC sub-TLV of SR Segment List's Path SID would be used to validate the control plane to forwarding plane synchronization for this Path-SID. Note that the three new Target FEC sub-TLVs are mutual exclusive and they wouldn't be present in one message simultaneously.

SR Policy's Path SID
The format of SR Policy's Path SID sub-TLV is as specified below:

SR Policy's Path SID sub-TLV

 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 = TBD1          |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                     Headend  (4/16 octets)                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Color  (4 octets)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                    Endpoint  (4/16 octets)                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type
This field is set to the value (TBD1) which indicates that it's an SR Policy's Path SID sub-TLV.
Length
This field is set to the length of the sub-TLV's Value field in octets. If Headend and Endpoint fields are in IPv4 address format which is 4 octets long, it MUST be set to 12; If Headend and Endpoint fields are in IPv6 address format which is 16 octets long, it MUST be set to 36.
Headend
This field identifies the headend of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The headend is a 4-octet IPv4 address or a 16-octet IPv6 address.
Color
This field associates the SR Policy with an intent, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The color is a 4-octet numerical value.
Endpoint
This field identifies the endpoint of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The endpoint is a 4-octet IPv4 address or a 16-octet IPv6 address.

SR Candidate Path's Path SID
The format of SR Candidate Path's Path SID sub-TLV is as specified below:

SR Candidate Path's Path SID sub-TLV

 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 = TBD2          |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                     Headend  (4/16 octets)                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Color  (4 octets)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                    Endpoint  (4/16 octets)                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Protocol-Origin|                    Reserved                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
|                  Originator  (20 octets)                      |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Discriminator  (4 octets)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type
This field is set to the value (TBD2) which indicates that it's an SR Candidate Path's Path SID sub-TLV.
Length
This field is set to the length of the sub-TLV's Value field in octets. If Headend and Endpoint fields are in IPv4 address format which is 4 octets long, it MUST be set to 40; If Headend and Endpoint fields are in IPv6 address format which is 16 octets long, it MUST be set to 64.
Headend
This field identifies the headend of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The headend is a 4-octet IPv4 address or a 16-octet IPv6 address.
Color
This field associates the SR Policy with an intent, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The color is a 4-octet numerical value.
Endpoint
This field identifies the endpoint of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The endpoint is a 4-octet IPv4 address or a 16-octet IPv6 address.
Protocol-Origin
This field identifies the component or protocol that originates or signals the candidate path for an SR Policy, the same as defined in Section 2.3 of [I-D.ietf-spring-segment-routing-policy]. The protocol-origin is a 1-octet value that follows the recommendation from Table 1 of Section 2.3 of [I-D.ietf-spring-segment-routing-policy], which specifies value 10 for "PCEP", value 20 for "BGP SR Policy" and value 30 for "Via Configuration".
Originator
This field identifies the node which provisioned or signaled the candidate path for an SR Policy, the same as defined in Section 2.4 of [I-D.ietf-spring-segment-routing-policy]. The originator is a 20-octet numerical value formed by the concatenation of the fields of the tuple <ASN, node-address>, among which ASN is a 4-octet number and node address is a 16-octet value (an IPv6 address or an IPv4 address encoded in the lowest 4 octets). When Procotol-Origin is respectively "Via Configuration", or "PCEP", or "BGP SR Policy", the values of ASN and node address follow the specification in Section 2.4 of [I-D.ietf-spring-segment-routing-policy].
Discriminator
This field uniquely identifies a candidate path within the context of an SR policy, the same as defined in Section 2.5 of [I-D.ietf-spring-segment-routing-policy]. The discriminator is a 4-octet value. When Protocol-Origin is respectively "Via Configuration", or "PCEP", or "BGP SR Policy", the value of discriminator follows the specification in Section 2.5 of [I-D.ietf-spring-segment-routing-policy].

SR Segment List's Path SID
The format of SR Segment List's Path SID sub-TLV is as specified below:

SR Segment List's Path SID sub-TLV

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

Type
This field is set to the value (TBD3) which indicates that it's an SR Segment List's Path SID sub-TLV.
Length
This field is set to the length of the sub-TLV's Value field in octets. If Headend and Endpoint fields are in IPv4 address format which is 4 octets long, it MUST be set to 44; If Headend and Endpoint fields are in IPv6 address format which is 16 octets long, it MUST be set to 68.
Headend
This field identifies the headend of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The headend is a 4-octet IPv4 address or a 16-octet IPv6 address.
Color
This field associates the SR Policy with an intent, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The color is a 4-octet numerical value.
Endpoint
This field identifies the endpoint of an SR Policy, the same as defined in Section 2.1 of [I-D.ietf-spring-segment-routing-policy]. The endpoint is a 4-octet IPv4 address or a 16-octet IPv6 address.
Protocol-Origin
This field identifies the component or protocol that originates or signals the candidate path for an SR Policy, the same as defined in Section 2.3 of [I-D.ietf-spring-segment-routing-policy]. The protocol-origin is a 1-octet value that follows the recommendation from Table 1 of Section 2.3 of [I-D.ietf-spring-segment-routing-policy], which specifies value 10 for "PCEP", value 20 for "BGP SR Policy" and value 30 for "Via Configuration".
Originator
This field identifies the node which provisioned or signaled the candidate path for an SR Policy, the same as defined in Section 2.4 of [I-D.ietf-spring-segment-routing-policy]. The originator is a 20-octet numerical value formed by the concatenation of the fields of the tuple <ASN, node-address>, among which ASN is a 4-octet number and node address is a 16-octet value (an IPv6 address or an IPv4 address encoded in the lowest 4 octets). When Procotol-Origin is respectively "Via Configuration", or "PCEP", or "BGP SR Policy", the values of ASN and node address follow the specification in Section 2.4 of [I-D.ietf-spring-segment-routing-policy].
Discriminator
This field uniquely identifies a candidate path within the context of an SR policy, the same as defined in Section 2.5 of [I-D.ietf-spring-segment-routing-policy]. The discriminator is a 4-octet value. When Protocol-Origin is respectively "Via Configuration", or "PCEP", or "BGP SR Policy", the value of discriminator follows the specification in Section 2.5 of [I-D.ietf-spring-segment-routing-policy].
Segment-List-ID
This field identifies an SR path within the context of a candidate path of an SR Policy, the same as "Path ID" defined in Section 4.2 of [I-D.ietf-pce-multipath], or "List Identifier" defined in Section 2.2 of [I-D.lp-idr-sr-path-protection]. The segment-list-ID is a 4-octet identifier of the corresponding segment list.

Path-SID FEC Validation
The MPLS LSP Ping procedures MAY be initiated by the headend of the Segment Routing path or a centralized topology-aware data plane monitoring system as described in [RFC8403]. For the Path-SID, the responder nodes that receive echo request and send echo reply MUST be the endpoint of the Segment Routing path.
When an endpoint receives the LSP echo request packet with top FEC being the Path-SID, it SHOULD perform validity checks on the content of the Path-SID FEC sub-TLV. The basic length check should be performed on the received FEC.

    SR Policy's Path SID
    ------------------
    Length = 12 or 36

    SR Candidate Path's Path SID
    ------------------
    Length = 40 or 64

    SR Segment List's Path SID
    ------------------
    Length = 44 or 68

If a malformed FEC sub-TLV is received, then a return code of 1, "Malformed echo request received" as defined in [RFC8029] SHOULD be sent. The below section augments the section 7.4 of [RFC8287].
4a. Segment Routing Path-SID Validation:
If the Label-stack-depth is 0 and the Target FEC Stack sub-TLV at FEC-stack-depth is TBD1 (SR Policy's Path SID 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 Path Segment ID is signaled or provisioned for the SR Policy {
      - Validate that the signaled or provisioned headend, color and end-point for the Path SID, matches with the corresponding fields in the received SR Policy's Path SID 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 FEC-Status to 1 and return.
}
Else, if the Label-stack-depth is 0 and the Target FEC Stack sub-TLV at FEC-stack-depth is TBD2 (SR Candidate Path's Path SID 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 Path Segment ID is signaled or provisioned for the SR Candidate Path {
      - When the Protocol-Origin field in the received SR Candidate Path's Path SID sub-TLV is 10, "PCEP" is used as the signaling protocol. And then validate that the Path Segment ID matches with the tuple identifying the SR Candidate Path within PCEP {
        - Validate that the signaled headend, color, end-point, originator ASN, originator address and discriminator defined in [I-D.ietf-pce-segment-routing-policy-cp] and [I-D.ietf-pce-sr-path-segment], for the Path SID, matches with the corresponding fields in the received SR Candidate Path's Path SID sub-TLV.
}
      - When the Protocol-Origin field in the received SR Candidate Path's Path SID sub-TLV is 20, "BGP SR Policy" is used as the signaling protocol. And then validate that the Path Segment ID matches with the tuple identifying the SR Candidate Path within BGP SR Policy {
        - Validate that the signaled headend, policy color, endpoint, ASN, BGP Router-ID and distinguisher defined in [I-D.ietf-idr-segment-routing-te-policy] and [I-D.ietf-idr-sr-policy-path-segment], for the Path SID, matches with the corresponding fields in the received SR Candidate Path's Path SID sub-TLV.
}
      - When the Protocol-Origin field in the received SR Candidate Path's Path SID sub-TLV is 30, "Via Configuration" is used. And then validate that the Path Segment ID matches with the tuple identifying the SR Candidate Path within Configuration {
        - Validate that the provisioned headend, color, endpoint, originator and discriminator defined in [I-D.ietf-spring-sr-policy-yang], for the Path SID, matches with the corresponding fields in the received SR Candidate Path's Path SID 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 FEC-Status to 1 and return.
}
Else, if the Label-stack-depth is 0 and the Target FEC Stack sub-TLV at FEC-stack-depth is TBD3 (SR Segment List's Path SID 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 Path Segment ID is signaled or provisioned for the SR Segment List {
      - When the Protocol-Origin field in the received SR Segment List's Path SID sub-TLV is 10, "PCEP" is used as the signaling protocol. And then validate that the Path Segment ID matches with the tuple identifying the SR Segment List within PCEP {
        - Validate that the signaled headend, color, end-point, originator ASN, originator address and discriminator defined in [I-D.ietf-pce-segment-routing-policy-cp] and [I-D.ietf-pce-sr-path-segment], and the signaled Path ID defined in [I-D.ietf-pce-multipath], for the Path SID, matches with the corresponding fields in the received SR Segment List's Path SID sub-TLV.
}
      - When the Protocol-Origin field in the received SR Segment List's Path SID sub-TLV is 20, "BGP SR Policy" is used as the signaling protocol. And then validate that the Path Segment ID matches with the tuple identifying the SR Segment List within BGP SR Policy {
        - Validate that the signaled headend, policy color, endpoint, ASN, BGP Router-ID and distinguisher defined in [I-D.ietf-idr-segment-routing-te-policy] and [I-D.ietf-idr-sr-policy-path-segment], and the signaled List Identifier defined in [I-D.lp-idr-sr-path-protection], for the Path SID, matches with the corresponding fields in the received SR Segment List's Path SID sub-TLV.
}
      - When the Protocol-Origin field in the received SR Segment List's Path SID sub-TLV is 30, "Via Configuration" is used. And then validate that the Path Segment ID matches with the tuple identifying the SR Segment List within Configuration {
        - Validate that the provisioned headend, color, endpoint, originator, discriminator and Segment-List-ID defined in [I-D.ietf-spring-sr-policy-yang], for the Path SID, matches with the corresponding fields in the received SR Segment List's Path SID 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 FEC-Status to 1 and return.
}

Security Considerations
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.

IANA Considerations
IANA is requested to assign 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
  --------   -----------------------------   ------------
   TBD1      SR Policy's Path SID            Section 3.1
   TBD2      SR Candidate Path's Path SID    Section 3.2
   TBD3      SR Segment List's Path SID      Section 3.3

Acknowledgements
The authors would like to acknowledge Detao Zhao for his thorough review and very helpful comments.
The authors would like to acknowledge Yao Liu for the very helpful f2f discussion.

Normative References

Informative References
[IANA]

Multi-Protocol Label Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters
Internet Assigned Numbers Authority (IANA)
[I-D.ietf-spring-mpls-path-segment]
[RFC8287]
[RFC8690]
[RFC2119]
[RFC8174]
[RFC8402]
[RFC8029]
[I-D.ietf-mpls-sr-epe-oam]
[I-D.ietf-spring-segment-routing-policy]
[I-D.ietf-pce-multipath]
[I-D.lp-idr-sr-path-protection]
[RFC8403]
[I-D.ietf-pce-segment-routing-policy-cp]
[I-D.ietf-pce-sr-path-segment]
[I-D.ietf-idr-segment-routing-te-policy]
[I-D.ietf-idr-sr-policy-path-segment]
[I-D.ietf-spring-sr-policy-yang]