RFC 9545

Path Segment Identifier in MPLS-Based Segment Routing Networks

πŸ“… published February 2024, from ietf

RFC 9545: Path Segment Identifier in MPLS-Based Segment Routing Networks ✨

okay bestie, let's get into this one πŸ’…πŸŽ€ RFC 9545 is a Standards Track document from the IETF, dated February 2024 (ISSN 2070-1721). It's written by W. Cheng (Ed.) of China Mobile, H. Li of China Mobile, C. Li (Ed.) of Huawei Technologies, R. Gandhi of Cisco Systems, Inc., and R. Zigler of Broadcom. The title block doesn't list anything it obsoletes or updates, so it's a fresh standalone spec πŸ¦‹


Internet Engineering Task Force (IETF)                     W. Cheng, Ed.
Request for Comments: 9545                                         H. Li
Category: Standards Track                                   China Mobile
ISSN: 2070-1721                                               C. Li, Ed.
                                                     Huawei Technologies
                                                               R. Gandhi
                                                     Cisco Systems, Inc.
                                                               R. Zigler
                                                                Broadcom
                                                           February 2024

Abstract

okay so the big idea 🌸 A Segment Routing (SR) path gets identified by its SR segment list. The catch is that you can't just use a subset of those segments to tell two paths apart, because they can be partially congruent (basically, they overlap and share pieces) πŸ™ˆ Path identification is a must-have for stuff like performance measurement and end-to-end 1+1 path protection, so it's kind of a big deal ✨

In an SR over MPLS (SR-MPLS) data plane, the egress node can't figure out which SR path a packet took from the label stack alone. Why? Because the segment identifiers get removed from the label stack as the packet moves through the network 😭

So this document defines a Path Segment Identifier (PSID) to identify an SR path on the egress node of that path. iconic fix, no cap πŸ‘‘

Status of This Memo

This is an Internet Standards Track document.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9545.

Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.

Table of Contents 🧚

1.  Introduction
  1.1.  Requirements Language
  1.2.  Abbreviations and Terms
2.  Path Segment
  2.1.  Equal-Cost Multipath (ECMP) Considerations
3.  Use Cases
  3.1.  PSID for Performance Measurement
  3.2.  PSID for Bidirectional SR Paths
  3.3.  PSID for End-to-End Path Protection
  3.4.  Nesting of PSIDs
4.  Security Considerations
5.  IANA Considerations
6.  References
  6.1.  Normative References
  6.2.  Informative References
Acknowledgements
Contributors
Authors' Addresses

1. Introduction πŸ¦‹

Segment Routing (SR) [RFC8402] is all about the source-routing paradigm πŸ’– The source steers packets through a controlled set of instructions called "segments", and it does this by prepending the packet with an SR header. When you're running SR with the MPLS data plane [RFC8660], that SR header shows up as a label stack.

In an SR-MPLS network, when a packet goes down an SR path, the labels in the MPLS label stack get swapped or popped. So by the time the packet reaches the egress node, there may be no label left, or maybe just the last one. Which means the egress node can't use the SR label stack to figure out which SR path the packet came from 😭

But identifying a path on the egress node is a prerequisite for a bunch of SR-MPLS use cases, like performance measurement (Section 3.1), bidirectional paths (Section 3.2), and end-to-end 1+1 path protection (a Live-Live case) (Section 3.3). Main character energy, honestly πŸ’…

So this document defines a new segment type called a "Path Segment". A Path Segment uniquely identifies an SR path on the egress node of the path. The egress node MAY use it for path identification 🌈 Heads up though: per-path state will be kept on the egress node because of those use cases. In normal cases, the per-path state only lives on the ingress node.

1.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. πŸ“–βœ¨

1.2. Abbreviations and Terms

  • MPLS: Multiprotocol Label Switching
  • PSID: Path Segment Identifier
  • SID: Segment Identifier
  • SR: Segment Routing
  • SR-MPLS: SR over MPLS
  • SR path: A path described by a segment list.
  • Sub-Path: A part of a path, which contains a subset of the nodes and links of the path.

2. Path Segment 🌸

A Path Segment is a local segment [RFC8402] that uniquely identifies an SR path on the egress node. A Path Segment Identifier (PSID) is a single label that gets assigned from the Segment Routing Local Block (SRLB) [RFC8402] of the egress node of an SR path πŸŽ€

A PSID gets used to identify a segment list. But, okay, one PSID can identify multiple segment lists in some use cases if needed. For example, one single PSID MAY be used to identify some or all segment lists in a candidate path or an SR policy if an operator would like to aggregate these segment lists in operation.

When a PSID is used, it can be inserted at the ingress node, and it MUST immediately follow the last label of the SR path. In other words, it must be inserted after the routing segment (adjacency, node, or prefix segment) that points to the egress node of the SR path. So a PSID won't be the top label when it's received on an intermediate node of the associated path, but it can be the top label on the penultimate node 🧚

The TTL value in the MPLS label stack entry containing a PSID can be set to any value except 0. If a PSID is the bottom label, the S bit MUST be set. If the PSID is NOT the bottom label, the S bit MUST be 0.

The egress node MUST pop the PSID. The egress node MAY use the PSID for further processing. For example, when performance measurement is enabled on the SR path, it can trigger packet counting or timestamping πŸ“Š

The addition of the PSID means the egress has to read and process the PSID label on top of its regular processing. That extra work may affect forwarding performance. Behavior relating to the use of explicit null directly preceding the PSID is undefined in this document πŸ™ˆ

A Generic Associated Channel Label (GAL) MAY be used for Operations, Administration, and Maintenance (OAM) in MPLS networks. As per [RFC5586], when a GAL is used, the Associated Channel Header (ACH) appears immediately after the bottom of the label stack.

The SR path computation needs to know the Maximum SID Depth (MSD) that can be imposed at the ingress node of a given SR path [RFC8664]. This makes sure the SID stack depth of a computed path doesn't go over the number of SIDs the node is capable of imposing. As per [RFC8491], the MSD signals the total number of MPLS labels that can be imposed, and that total includes the PSID πŸ’–

Here's an example label stack with a PSID, shown in Figure 1:

            +--------------------+
            |       ...          |
            +--------------------+
            |      Label 1       |
            +--------------------+
            |      Label 2       |
            +--------------------+
            |       ...          |
            +--------------------+
            |      Label n       |
            +--------------------+
            |        PSID        |
            +--------------------+
            ~       Payload      ~
            +--------------------+

                  Figure 1: Label Stack with a PSID

Where:

  • The Labels 1 to n are the segment label stack used to direct how to steer the packets along the SR path.
  • The PSID identifies the SR path in the context of the egress node of the SR path.

The signaling of the PSID between the egress node, the ingress node, and possibly a centralized controller is out of the scope of this document 🌈

2.1. Equal-Cost Multipath (ECMP) Considerations πŸ¦‹

If an Entropy Label (EL) is also used on the egress node, as per [RFC6790], the EL and Entropy Label Indicator (ELI) would be placed before the tunnel label. So they don't interfere with the PSID, which sits below them ✨

It's worth noting that with ECMP, whether or not an EL is used, SR packets may be forwarded over multiple paths. In that case the SID list can't directly reflect the actual forwarding path, and the PSID can only identify the SID list rather than the actual forwarding path πŸ™ˆ

Also, kind of like a Synonymous Flow Label (SFL) [RFC8957], adding a PSID to an existing flow may cause that flow to take a different path through the network under ECMP conditions. That can invalidate certain uses of the PSID, like performance measurement applications. So the considerations for SFLs in Section 5 of [RFC8957] also apply to PSIDs in implementation πŸ’…

3. Use Cases πŸ’œ

This section describes use cases that can leverage the PSID. The content is for informative purposes, and the detailed solutions might be defined in other documents in the future 🧚

3.1. PSID for Performance Measurement πŸ“Š

As defined in [RFC7799], performance measurement can be classified into Passive, Active, and Hybrid measurements. Since a PSID is encoded in the SR-MPLS label stack, as shown in Figure 1, existing implementations on the egress node can use a PSID to measure packet counts.

For Passive performance measurement, path identification at the measuring points is the prerequisite. The measuring points (for example, the ingress and egress nodes of the SR path, or a centralized controller) can use a PSID to correlate the packet counts and timestamps from the ingress and egress nodes for a specific SR path. Then packet loss and delay can be calculated for the end-to-end path, respectively 🌸

Furthermore, a PSID can also be used for:

  • Active performance measurement for an SR path in SR-MPLS networks, for collecting packet counters and timestamps from the egress node using probe messages.
  • In situ OAM [RFC9197] for SR-MPLS, to identify the SR path associated with the in situ data fields in the data packets on the egress node.
  • In-band performance measurement for SR-MPLS, to identify the SR path associated with the collected performance metrics.

3.2. PSID for Bidirectional SR Paths ✨

okay so some setups, like mobile backhaul transport networks, need bidirectional paths [RFC6965] πŸ¦‹ and the path is usually treated as ONE single entity. Both directions share the same fate, so if one direction fails, traffic gets switched in both directions too. MPLS handles this with a co-routed bidirectional Label Switched Path (LSP) and an associated bidirectional LSP [RFC5654] πŸ’…

In the current SR architecture, an SR path is unidirectional [RFC8402], so it only goes one way 🌸 The straightforward move is to bind two unidirectional SR paths into a single bidirectional SR path. PSIDs can then identify and correlate the traffic for those two unidirectional SR paths at both ends of the bidirectional path πŸ’–

How you actually build bidirectional paths with a PSID is out of scope for this doc. It's covered in a few other documents, like [BIDIR-PATH] and [SR-EXTENSIONS] πŸ“

3.3. PSID for End-to-End Path Protection πŸ›‘οΈ

For end-to-end 1+1 path protection (aka the Live-Live case), the egress node of the path needs to know which set of paths make up the primary and which ones are the secondaries. That way it can pick the primary path's packets for onward transmission and toss out the packets coming from the secondaries [RFC4426] πŸ‘‘

So to do this in SR, each SR path needs a path identifier that is unique at the egress node. For SR-MPLS, that identifier can be the Path Segment label allocated by the egress node 🧚

The detailed solution for using a PSID in end-to-end 1+1 path protection is out of scope for this document πŸ™ˆ

3.4. Nesting of PSIDs πŸͺ†

A Binding SID (BSID) [RFC8402] can be used for SID list compression. With a BSID, an end-to-end SR path in a trusted domain can be split into several sub-paths, and each sub-path is identified by its own BSID. Then the end-to-end SR path can be identified by a list of BSIDs, which gives you better scalability ✨

A BSID and a PSID can team up to get both sub-path and end-to-end path monitoring. The reference model for this combo (Figure 2) shows an end-to-end path (A->D) in a trusted domain that spans three subdomains (the Access, Aggregation, and Core domains). It's made up of three sub-paths, one in each subdomain: sub-path (A->B), sub-path (B->C), and sub-path (C->D) 🫢

The SID list of a sub-path can be written as <SID1, SID2, ..., SIDn, s-PSID>, where the s-PSID is the PSID of that sub-path. Each sub-path is associated with a BSID and an s-PSID πŸ’œ

The SID list of the end-to-end path can be written as <BSID1, BSID2, ..., BSIDn, e-PSID>, where the e-PSID is the PSID of the end-to-end path πŸ”₯

Figure 2 shows the details of the label stacks when a PSID and a BSID are used together to support both sub-path and end-to-end path monitoring in a multi-domain scenario πŸ‘€

         /--------\       /--------\       /--------\
       /            \   /            \   /            \
     A{    Access    }B{  Aggregation }C{     Core     }D
       \            /   \            /   \            /
         \--------/       \--------/       \--------/
       sub-path(A->B)    sub-path(B->C)   sub-path(C->D)
    |<--------------->|<-------------->|<-------------->|
                          E2E Path(A->D)
    |<------------------------------------------------->|

 +-------------+
 ~A->B sub-path~
 +-------------+  +-------------+
 |s-PSID(A->B) |  ~B->C sub-path~
 +-------------+  +-------------+  +-------------+
 | BSID(B->C)  |  |s-PSID(B->C) |  ~C->D sub-path~
 +-------------+  +-------------+  +-------------+
 | BSID(C->D)  |  | BSID(C->D)  |  |s-PSID(C->D) |
 +-------------+  +-------------+  +-------------+  +------------+
 |e-PSID(A->D) |  |e-PSID(A->D) |  |e-PSID(A->D) |  |e-PSID(A->D)|
 +-------------+  +-------------+  +-------------+  +------------+

                      Figure 2: Nesting of PSIDs

4. Security Considerations πŸ”

okay this one is SO important bestie, so read it closely πŸ‘€

A PSID in SR-MPLS is a local label, just like other labels and segments in MPLS and SR-MPLS, such as a VPN label. The data plane processing of a PSID is a local implementation of an ingress node or an egress node, and it follows the same logic as the existing MPLS data plane. By definition, only the egress node and the ingress node of the associated path learn the information of a PSID. The intermediate nodes of that path will NOT learn it πŸ™…β€β™€οΈ

Wait, here's the twist πŸŒ€ A PSID may be used on an ingress node that is not the ingress of the associated path, if the associated label stack with the PSID is part of a deeper label stack that represents a longer path. For example, take the case described in Section 3.4 where the related BSID is not used, and the original label stack of a sub-path gets inserted as part of the whole label stack. In that case, the PSID must be distributed in a trusted domain under the considerations defined in Section 8.1 of [RFC8402] 🧐

A PSID is used within an SR-MPLS trusted domain [RFC8402] and must not leak outside that domain. Because of this, no new security threats are introduced compared to current SR-MPLS πŸ’… As per [RFC8402], SR domain boundary routers MUST filter any external traffic destined to a label associated with a segment within the trusted domain, and this applies to a PSID as well 🚧 Other security considerations of SR-MPLS described in Section 8.1 of [RFC8402] apply to this document too.

The distribution of a PSID from an egress node to an ingress node happens within an SR-trusted domain, and it's out of scope for this document. The details of that mechanism and its related security considerations will be described in other documents πŸ”’

5. IANA Considerations πŸ“‹

This document has no IANA actions. Nothing to see here, bestie 🌈

6. References πŸ“š

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

[RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
           2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
           May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8402]  Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L.,
           Decraene, B., Litkowski, S., and R. Shakir, "Segment
           Routing Architecture", RFC 8402, DOI 10.17487/RFC8402,
           July 2018, <https://www.rfc-editor.org/info/rfc8402>.

[RFC8660]  Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S.,
           Decraene, B., Litkowski, S., and R. Shakir, "Segment
           Routing with the MPLS Data Plane", RFC 8660,
           DOI 10.17487/RFC8660, December 2019,
           <https://www.rfc-editor.org/info/rfc8660>.

6.2. Informative References

[BIDIR-PATH]
           Li, C., Chen, M., Cheng, W., Gandhi, R., and Q. Xiong,
           "Path Computation Element Communication Protocol (PCEP)
           Extensions for Associated Bidirectional Segment Routing
           (SR) Paths", Work in Progress, Internet-Draft, draft-ietf-
           pce-sr-bidir-path-13, 13 February 2024,
           <https://datatracker.ietf.org/doc/html/draft-ietf-pce-sr-
           bidir-path-13>.

[RFC4426]  Lang, J., Ed., Rajagopalan, B., Ed., and D. Papadimitriou,
           Ed., "Generalized Multi-Protocol Label Switching (GMPLS)
           Recovery Functional Specification", RFC 4426,
           DOI 10.17487/RFC4426, March 2006,
           <https://www.rfc-editor.org/info/rfc4426>.

[RFC5586]  Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed.,
           "MPLS Generic Associated Channel", RFC 5586,
           DOI 10.17487/RFC5586, June 2009,
           <https://www.rfc-editor.org/info/rfc5586>.

[RFC5654]  Niven-Jenkins, B., Ed., Brungard, D., Ed., Betts, M., Ed.,
           Sprecher, N., and S. Ueno, "Requirements of an MPLS
           Transport Profile", RFC 5654, DOI 10.17487/RFC5654,
           September 2009, <https://www.rfc-editor.org/info/rfc5654>.

[RFC6790]  Kompella, K., Drake, J., Amante, S., Henderickx, W., and
           L. Yong, "The Use of Entropy Labels in MPLS Forwarding",
           RFC 6790, DOI 10.17487/RFC6790, November 2012,
           <https://www.rfc-editor.org/info/rfc6790>.

[RFC6965]  Fang, L., Ed., Bitar, N., Zhang, R., Daikoku, M., and P.
           Pan, "MPLS Transport Profile (MPLS-TP) Applicability: Use
           Cases and Design", RFC 6965, DOI 10.17487/RFC6965, August
           2013, <https://www.rfc-editor.org/info/rfc6965>.

[RFC7799]  Morton, A., "Active and Passive Metrics and Methods (with
           Hybrid Types In-Between)", RFC 7799, DOI 10.17487/RFC7799,
           May 2016, <https://www.rfc-editor.org/info/rfc7799>.

[RFC8491]  Tantsura, J., Chunduri, U., Aldrin, S., and L. Ginsberg,
           "Signaling Maximum SID Depth (MSD) Using IS-IS", RFC 8491,
           DOI 10.17487/RFC8491, November 2018,
           <https://www.rfc-editor.org/info/rfc8491>.

[RFC8664]  Sivabalan, S., Filsfils, C., Tantsura, J., Henderickx, W.,
           and J. Hardwick, "Path Computation Element Communication
           Protocol (PCEP) Extensions for Segment Routing", RFC 8664,
           DOI 10.17487/RFC8664, December 2019,
           <https://www.rfc-editor.org/info/rfc8664>.

[RFC8957]  Bryant, S., Chen, M., Swallow, G., Sivabalan, S., and G.
           Mirsky, "Synonymous Flow Label Framework", RFC 8957,
           DOI 10.17487/RFC8957, January 2021,
           <https://www.rfc-editor.org/info/rfc8957>.

[RFC9197]  Brockners, F., Ed., Bhandari, S., Ed., and T. Mizrahi,
           Ed., "Data Fields for In Situ Operations, Administration,
           and Maintenance (IOAM)", RFC 9197, DOI 10.17487/RFC9197,
           May 2022, <https://www.rfc-editor.org/info/rfc9197>.

[SR-EXTENSIONS]
           Li, C., Li, Z., Yin, Y., Cheng, W., and K. Talaulikar, "SR
           Policy Extensions for Path Segment and Bidirectional
           Path", Work in Progress, Internet-Draft, draft-ietf-idr-
           sr-policy-path-segment-09, 19 February 2024,
           <https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr-
           policy-path-segment-09>.

Acknowledgements 🫢

The authors would like to thank Adrian Farrel, Stewart Bryant, Shuangping Zhan, Alexander Vainshtein, Andrew G. Malis, Ketan Talaulikar, Shraddha Hegde, Xinyue Zhang, Loa Andersson, and Bruno Decraene for their review, suggestions, comments, and contributions to this document. The main-character list of thank-yous πŸ‘‘

The authors would also like to acknowledge the contribution from Alexander Vainshtein on "Nesting of PSIDs" (Section 3.4) πŸ¦‹

Contributors πŸ’–

The following people have substantially contributed to this document.

Mach(Guoyi) Chen
Huawei Technologies Co., Ltd.
Email: mach.chen@huawei.com


Lei Wang
China Mobile
Email: wangleiyj@chinamobile.com


Aihua Liu
ZTE Corp.
Email: liu.aihua@zte.com.cn


Greg Mirsky
ZTE Corp.
Email: gregimirsky@gmail.com


Gyan S. Mishra
Verizon Inc.
Email: gyan.s.mishra@verizon.com

Authors' Addresses πŸŽ€

Weiqiang Cheng (editor)
China Mobile
Email: chengweiqiang@chinamobile.com


Han Li
China Mobile
Email: lihan@chinamobile.com


Cheng Li (editor)
Huawei Technologies
China
Email: c.l@huawei.com


Rakesh Gandhi
Cisco Systems, Inc.
Canada
Email: rgandhi@cisco.com


Royi Zigler
Broadcom
Email: royi.zigler@broadcom.com
πŸ“¦ where this page comes from