RFC 8664
Path Computation Element Communication Protocol (PCEP) Extensions for Segment Routing
RFC 8664 π Path Computation Element Communication Protocol (PCEP) Extensions for Segment Routing
okay bestie, welcome to Part 1 of 7 πβ¨
quick title-block tea β: this is RFC 8664, a Standards Track doc from December 2019 (ISSN 2070-1721). The squad behind it is S. Sivabalan and C. Filsfils from Cisco Systems, Inc., J. Tantsura from Apstra, Inc., W. Henderickx from Nokia, and J. Hardwick from Metaswitch Networks π«Ά. It updates RFC 8408 (we'll get to what that means in Section 1), and the header has no Obsoletes entry, so nothing gets replaced here π .
Abstract
okay so Segment Routing (SR) is giving freedom. Any head-end node can pick any path without needing hop-by-hop signaling like LDP or RSVP-TE π¦. It only leans on "segments" that link-state Interior Gateway Protocols (IGPs) advertise. An SR path can come from an IGP Shortest Path Tree (SPT), from explicit configuration, or from a Path Computation Element (PCE) π.
this doc is all about extending the Path Computation Element Communication Protocol (PCEP) so that a stateful PCE can compute and initiate Traffic-Engineering (TE) paths π₯. It also lets a Path Computation Client (PCC) request a path that meets certain constraints and optimization criteria in SR networks. main character energy π
This document updates RFC 8408.
Status of This Memo
this one is an Internet Standards Track document π. It's a product of the Internet Engineering Task Force (IETF), it reflects the consensus of the IETF community, it got public review, and the Internet Engineering Steering Group (IESG) approved it for publication π«Ά. 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/rfc8664 β¨.
Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved π.
this doc 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 publication date. Please actually read them, because they spell out your rights and restrictions π. Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Simplified BSD License describes π.
Table of Contents
1. Introduction
2. Terminology
2.1. Requirements Language
3. Overview of PCEP Operation in SR Networks
4. Object Formats
4.1. The OPEN Object
4.1.1. The Path Setup Type Capability TLV
4.1.2. The SR PCE Capability Sub-TLV
4.2. The RP/SRP Object
4.3. ERO
4.3.1. SR-ERO Subobject
4.3.2. NAI Associated with SID
4.4. RRO
4.5. METRIC Object
5. Procedures
5.1. Exchanging the SR PCE Capability
5.2. ERO Processing
5.2.1. SR-ERO Validation
5.2.2. Interpreting the SR-ERO
5.3. RRO Processing
6. Management Considerations
6.1. Controlling the Path Setup Type
6.2. Migrating a Network to Use PCEP Segment-Routed Paths
6.3. Verification of Network Operation
6.4. Relationship to Existing Management Models
7. Security Considerations
8. IANA Considerations
8.1. PCEP ERO and RRO Subobjects
8.2. New NAI Type Registry
8.3. New SR-ERO Flag Registry
8.4. PCEP-Error Object
8.5. PCEP TLV Type Indicators
8.6. PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators
8.7. New Path Setup Type
8.8. New Metric Type
8.9. SR PCE Capability Flags
9. References
9.1. Normative References
9.2. Informative References
Appendix A. Compatibility with Early Implementations
Acknowledgements
Contributors
Authors' Addresses
1. Introduction β¨
okay so Segment Routing (SR) is built on the source-routing paradigm π . With SR, a source node steers a packet along a path without hop-by-hop signaling protocols like LDP or RSVP-TE. Each path is an ordered list of instructions called "segments" π§. A segment tells the packet to go to a specific place in the network or to do something to the packet.
a database of segments can be spread around the network through a routing protocol (like IS-IS or OSPF) or by any other means π. There are several types of segments. A node segment uniquely identifies one specific node in the SR domain, and every router in that domain ties a node segment to an ECMP-aware shortest path to the node it identifies π. An adjacency segment represents a unidirectional adjacency, and it's local to the node that advertises it π¦. Both node segments and adjacency segments can be used for SR, periodt π.
[RFC8402] describes the SR architecture. The matching IS-IS and OSPF extensions are in [RFC8667] and [RFC8665], respectively π.
the SR architecture can run on either an MPLS forwarding plane [RFC8660] or an IPv6 forwarding plane [IPv6-SRH] π₯. The MPLS forwarding plane works with SR without any changes, and in that case an SR path maps to an MPLS Label Switching Path (LSP). This document is only about the MPLS forwarding plane π«Ά. In this document, "Node-SID" and "Adj-SID" mean the Node Segment Identifier and the Adjacency Segment Identifier, respectively π.
an SR path can be derived from an IGP Shortest Path Tree (SPT). Segment Routing Traffic-Engineering (SR-TE) paths don't have to follow an IGP SPT π. Those paths might be picked by a network planning tool and then provisioned on the ingress node of the SR-TE path π.
[RFC5440] describes PCEP for communication between a Path Computation Client (PCC) and a Path Computation Element (PCE), or between a pair of PCEs πΈ. A PCE computes paths for MPLS Traffic-Engineering (MPLS-TE) LSPs based on various constraints and optimization criteria β¨. [RFC8231] specifies PCEP extensions that let a stateful PCE compute and recommend network paths in line with [RFC4657]. It also defines objects and TLVs for MPLS-TE LSPs π . Stateful PCEP extensions handle synchronizing LSP state between a PCC and a PCE (or between a pair of PCEs), delegating LSP control, reporting LSP state from a PCC to a PCE, and controlling the setup and path routing of an LSP from a PCE to a PCC π. They're meant for an operational model where LSPs are configured on the PCC and control over them is delegated to the PCE π¦.
a mechanism to dynamically initiate LSPs on a PCC, based on requests from a stateful PCE or from a controller using a stateful PCE, is specified in [RFC8281] π₯. It's useful for Software-Defined Networking (SDN) applications like on-demand engineering or bandwidth calendaring [RFC8413] π.
a stateful PCE can compute one or more SR-TE paths while considering various constraints and objective functions π. Once a path is chosen, the stateful PCE can initiate an SR-TE path on a PCC using the PCEP extensions in [RFC8281] together with the SR-specific PCEP extensions in this document β¨. On top of that, using the procedures in this document, a PCC can request an SR path from either a stateful or a stateless PCE π«Ά.
this spec relies on the procedures in [RFC8408] to exchange the Segment Routing capability and to say that the path setup type of an LSP is Segment Routing π. It also updates [RFC8408] to clarify how sub-TLVs are used in the PATH-SETUP-TYPE-CAPABILITY TLV. Check Section 4.1.1 for the details π.
this spec gives a network controller (acting as a PCE) a way to instantiate candidate paths for an SR Policy onto a head-end node (acting as a PCC) using PCEP π . For more on the SR Policy Architecture, see [SR-POLICY] π§.
2. Terminology πΈ
these are the abbreviations used in this document, served up like a glossary π:
ERO: Explicit Route Object
IGP: Interior Gateway Protocol
IS-IS: Intermediate System to Intermediate System
LSR: Label Switching Router
MSD: Base MPLS Imposition Maximum SID Depth, as defined in
[RFC8491]
NAI: Node or Adjacency Identifier
OSPF: Open Shortest Path First
PCC: Path Computation Client
PCE: Path Computation Element
PCEP: Path Computation Element Communication Protocol
RRO: Record Route Object
SID: Segment Identifier
SR: Segment Routing
SR-DB: Segment Routing Database: the collection of SRGBs, SRLBs, and
SIDs and the objects they map to, advertised by a link-state
IGP
SR-TE: Segment Routing Traffic Engineering
SRGB: Segment Routing Global Block
SRLB: Segment Routing Local Block
2.1. Requirements Language π
okay this part is about the requirement words, and they are serious π. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be read as BCP 14 [RFC2119] [RFC8174] describes. But that only counts when, and only when, they show up in all capitals, exactly as written here π . Lowercase versions are just regular English π¦.
more parts are coming, bestie, and Part 2 is where the PCEP object formats start ππ₯π
3. Overview of PCEP Operation in SR Networks β¨
Okay so, bestie, here's the big picture π¦ In an SR network, the ingress node of an SR path slaps an SR header onto every outgoing packet π . That header is just a list of SIDs (or MPLS labels, in this doc's world). It has everything it needs so that, combined with what the IGP has already distributed, packets can get guided all the way from the ingress node to the egress node of the path. Iconic! That means there's no need for any signaling protocol π§
Now, PCEP messages carry LSP route info in the Explicit Route Object (ERO), which is a sequence of subobjects π An SR-TE path computed by a PCE can show up in an ERO in one of these forms:
- An ordered set of IP addresses representing network nodes/links.
- An ordered set of SIDs, with or without the corresponding IP addresses.
- An ordered set of MPLS labels, with or without corresponding IP addresses.
The PCC turns these into an MPLS label stack and next hop, as described in Section 5.2.2 π
This document defines a brand-new ERO subobject called the "SR-ERO subobject" πΈ It can carry a SID and the identity of the node/adjacency that SID represents, which is so useful. SR-capable PCEP speakers SHOULD be able to generate and/or process one of these, hmm, wait, let me be precise here: they should be able to generate and/or process such an ERO subobject π«Ά An ERO containing SR-ERO subobjects can ride along in the PCEP Path Computation Reply (PCRep) message from [RFC5440], the Path Computation LSP Initiate Request (PCInitiate) message from [RFC8281], and the Path Computation Update Request (PCUpd) and Path Computation State Report (PCRpt) messages for LSPs from [RFC8231] π₯
When a PCEP session gets set up between a PCC and a PCE, both speakers swap capabilities so they can say "yep, I can do SR stuff" π
Here's a fun glow-up story π A PCE can update an LSP that started out with RSVP-TE signaling so it uses an SR-TE path, by sending a PCUpd to the PCC that delegated the LSP to it [RFC8231]. A PCC can do the same for an undelegated RSVP-TE LSP. First, it asks a PCE for an SR-TE path by sending a Path Computation Request (PCReq) message. If it gets a suitable path, it sets the path up in the data plane and then tears down the original RSVP-TE path. If the PCE is stateful, the PCC sends PCRpt messages saying the new path is up and the old one is down, per [RFC8231] β¨
It also works the other way around π¦ A PCE or PCC can update an LSP that was first created with an SR-TE path so it uses RSVP-TE signaling, if necessary. This is super handy for rolling back a change when a network is migrating from RSVP-TE to SR-TE technology π
A PCC MAY include a Record Route Object (RRO) holding the recorded LSP in PCReq and PCRpt messages, as specified in [RFC5440] and [RFC8231], respectively π This document defines a new RRO subobject for SR networks too. The methods a PCC uses to record the SR-TE LSP are outside the scope of this document, so we're not touching that one π
So, in summary, this document:
- Defines a new ERO subobject, a new RRO subobject, and new PCEP error codes. π
- Specifies how two PCEP speakers can establish a PCEP session that can carry information about SR-TE paths. π«Ά
- Specifies processing rules for the ERO subobject. π
- Defines a new path setup type to be used in the PATH-SETUP-TYPE and PATH-SETUP-TYPE-CAPABILITY TLVs [RFC8408]. π
- Defines a new sub-TLV for the PATH-SETUP-TYPE-CAPABILITY TLV. π
The extensions in this document complement the existing PCEP specs to support SR-TE paths π So the PCEP messages (e.g., PCReq, PCRep, PCRpt, PCUpd, PCInitiate, etc.) stay formatted according to [RFC5440], [RFC8231], [RFC8281], and any other applicable PCEP specifications. No reinventing the wheel, periodt π§
4. Object Formats π
4.1. The OPEN Object πΈ
4.1.1. The Path Setup Type Capability TLV
Okay, so [RFC8408] defines the PATH-SETUP-TYPE-CAPABILITY TLV for use in the OPEN object π It contains an optional list of sub-TLVs, which are meant to convey parameters tied to the path setup types a PCEP speaker supports β¨
This specification updates [RFC8408] like so π¦ It creates a new registry that defines the valid type indicators of the sub-TLVs of the PATH-SETUP-TYPE-CAPABILITY TLV (see Section 8.6). A PCEP speaker MUST NOT include a sub-TLV in the PATH-SETUP-TYPE-CAPABILITY TLV unless it appears in this registry π ββοΈ If a PCEP speaker receives a sub-TLV whose type indicator doesn't match one from the registry or isn't recognized by the speaker, then the speaker MUST ignore that sub-TLV π
4.1.2. The SR PCE Capability Sub-TLV π
This document defines a new Path Setup Type (PST) for SR, like this π§
PST = 1: Traffic-engineering path is set up using Segment
Routing.
A PCEP speaker SHOULD indicate its support for the function described in this document by sending a PATH-SETUP-TYPE-CAPABILITY TLV in the OPEN object with this new PST included in the PST list π
This document also defines the SR-PCE-CAPABILITY sub-TLV, which PCEP speakers use to swap info about their SR capability π«Ά If a PCEP speaker includes PST=1 in the PST list of the PATH-SETUP-TYPE-CAPABILITY TLV, then it MUST also include the SR-PCE-CAPABILITY sub-TLV inside the PATH-SETUP-TYPE-CAPABILITY TLV π₯
The format of the SR-PCE-CAPABILITY sub-TLV is shown in this figure π
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=26 | Length=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Flags |N|X| MSD |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: SR-PCE-CAPABILITY Sub-TLV Format
The codepoint for the TLV type is 26 π The TLV length is 4 octets.
The 32-bit value is formatted as follows π
Reserved: MUST be set to zero by the sender and MUST be ignored by the receiver.
Flags: This document defines the following flag bits. The other bits MUST be set to zero by the sender and MUST be ignored by the receiver.
- N: A PCC sets this flag bit to 1 to indicate that it is capable of resolving a Node or Adjacency Identifier (NAI) to a SID. π§
- X: A PCC sets this flag bit to 1 to indicate that it does not impose any limit on the MSD. β¨
Maximum SID Depth (MSD): specifies the maximum number of SIDs (MPLS label stack depth in the context of this document) that a PCC is capable of imposing on a packet. Section 5.1 explains the relationship between this field and the X-Flag π¦
4.2. The RP/SRP Object πΈ
To set up an SR-TE LSP using SR, the Request Parameter (RP) or Stateful PCE Request Parameter (SRP) object MUST include the PATH-SETUP-TYPE TLV, specified in [RFC8408], with the PST set to 1 (and path setup using SR-TE) π₯
The LSP-IDENTIFIERS TLV MAY be present for the above PST type π«Ά
4.3. ERO π
An SR-TE path consists of one or more SIDs, where each SID MAY be associated with the identifier that represents the node or adjacency corresponding to the SID π This identifier is referred to as the NAI. As described later, an NAI can be represented in various formats (e.g., IPv4 address, IPv6 address, etc). Furthermore, an NAI is used for troubleshooting purposes and, if necessary, to derive a SID value as described below π
The ERO specified in [RFC5440] is used to carry SR-TE path information π In order to carry a SID and/or NAI, this document defines a new ERO subobject referred to as the "SR-ERO subobject", whose format is specified in the following section. An ERO carrying an SR-TE path consists of one or more ERO subobjects, and it MUST carry only SR-ERO subobjects π An SR-ERO subobject doesn't need to have both the SID and NAI, but at least one of them MUST be present π
When building the MPLS label stack from the ERO, a PCC MUST assume that SR-ERO subobjects are organized as a last-in-first-out stack π§ The first subobject relative to the beginning of the ERO contains the information about the topmost label, and the last subobject contains information about the bottommost label π
4.3.1. SR-ERO Subobject β¨
okay so the SR-ERO subobject has this exact shape, and every bit matters π
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L| Type=36 | Length | NT | Flags |F|S|C|M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// NAI (variable, optional) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: SR-ERO Subobject Format
okay, the fields, bestie π«Ά
- The L-Flag: this tells you whether the subobject is a loose hop in the LSP [RFC3209]. If the flag is set to zero, a PCC MUST NOT overwrite the SID value sitting in the SR-ERO subobject π ββοΈ. Otherwise, a PCC MAY expand or replace one or more SID values in the received SR-ERO based on its local policy β¨.
- Type: always set to
36π. - Length: the total length of the subobject in octets. The Length MUST be at least
8and MUST be a multiple of4π. An SR-ERO subobject MUST contain at least one SID or NAI π. The flags below tell you whether the SID or NAI fields are missing. - NAI Type (NT): tells you the type and format of the NAI in the object body, if there is one π¦. If the F bit is set to zero, then NT has no meaning and MUST be ignored by the receiver π. This document describes these NT values:
NT=0: the NAI is absent.NT=1: the NAI is an IPv4 node ID.NT=2: the NAI is an IPv6 node ID.NT=3: the NAI is an IPv4 adjacency.NT=4: the NAI is an IPv6 adjacency with global IPv6 addresses.NT=5: the NAI is an unnumbered adjacency with IPv4 node IDs.NT=6: the NAI is an IPv6 adjacency with link-local IPv6 addresses.
- Flags: extra info about the SID π. This document defines the following flag bits. The other bits MUST be set to zero by the sender and MUST be ignored by the receiver π§.
- M: if this bit is set to
1, the SID value is an MPLS label stack entry as specified in [RFC3032]. Otherwise, the SID value is an administratively configured value that represents an index into an MPLS label space (either SRGB or SRLB) per [RFC8402] π. - C: if the M bit and the C bit are both set to
1, then the TC, S, and TTL fields in the MPLS label stack entry are specified by the PCE. However, a PCC MAY choose to override these values according to its local policy and MPLS forwarding rules π₯. If the M bit is set to1but the C bit is set to zero, then the TC, S, and TTL fields MUST be ignored by the PCC. The PCC MUST set these fields according to its local policy and MPLS forwarding rules π . If the M bit is set to zero, then the C bit MUST be set to zero π. - S: when this bit is set to
1, the SID value in the subobject body is absent π. In this case, the PCC is responsible for choosing the SID value, e.g., by looking it up in the SR-DB using the NAI that, in this case, MUST be present in the subobject. If the S bit is set to1, then the M and C bits MUST be set to zero πΈ. - F: when this bit is set to
1, the NAI value in the subobject body is absent. The F bit MUST be set to1if NT=0; otherwise, it MUST be set to zero. The S and F bits MUST NOT both be set to1π.
- M: if this bit is set to
- SID: the Segment Identifier π¦. Depending on the M bit, it contains either:
- NAI: the NAI associated with the SID. The NAI's format depends on the value in the NT field and is described in the next section π§ββοΈ.
At least one SID and NAI MUST be included in the SR-ERO subobject, and both MAY be included π.
4.3.2. NAI Associated with SID
this doc defines the following NAIs, and each one has its own vibe π
- IPv4 Node ID: specified as an IPv4 address. In this case, the NT value is
1, and the NAI field length is 4 octets π. - IPv6 Node ID: specified as an IPv6 address. In this case, the NT value is
2, and the NAI field length is 16 octets β¨. - IPv4 Adjacency: specified as a pair of IPv4 addresses. In this case, the NT value is
3, and the NAI field length is 8 octets. The format of the NAI is shown in the following figure π¦:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local IPv4 address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote IPv4 address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: NAI for IPv4 Adjacency
- IPv6 Global Adjacency: specified as a pair of global IPv6 addresses. It is used to describe an IPv6 adjacency for a link that uses global IPv6 addresses. Each global IPv6 address is configured on a specific router interface, so together they identify an adjacency between a pair of routers πΈ. In this case, the NT value is
4, and the NAI field length is 32 octets. The format of the NAI is shown in the following figure π:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Local IPv6 address (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Remote IPv6 address (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: NAI for IPv6 Global Adjacency
- Unnumbered Adjacency with IPv4 NodeIDs: specified as a pair of (node ID, interface ID) tuples. In this case, the NT value is
5, and the NAI field length is 16 octets. The format of the NAI is shown in the following figure π:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Node ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Node ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: NAI for Unnumbered Adjacency with IPv4 Node IDs
- IPv6 Link-Local Adjacency: specified as a pair of (global IPv6 address, interface ID) tuples. It is used to describe an IPv6 adjacency for a link that uses only link-local IPv6 addresses. Each global IPv6 address is configured on a specific router, so together they identify a pair of adjacent routers. The interface IDs identify the link that the adjacency is formed over π§. In this case, the NT value is
6, and the NAI field length is 40 octets. The format of the NAI is shown in the following figure π:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Local IPv6 address (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Local Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Remote IPv6 address (16 octets) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Remote Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 6: NAI for IPv6 Link-Local Adjacency
4.4. RRO
okay so a PCC reports an SR-TE LSP to a PCE by sending a PCRpt message, per [RFC8231] π¨. The RRO on this message represents the SID list that was applied by the PCC, which is the actual path the LSP took π€οΈ. The procedures of [RFC8231] with respect to the RRO apply equally to this specification without change π .
An RRO contains one or more subobjects called "SR-RRO subobjects", whose format is shown below π:
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=36 | Length | NT | Flags |F|S|C|M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// NAI (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: SR-RRO Subobject Format
the format of the SR-RRO subobject is the same as the SR-ERO subobject, just without the L-Flag π¦.
a PCC MUST order the SR-RRO subobjects so that the first subobject relative to the beginning of the RRO identifies the first segment visited by the SR-TE LSP, and the last subobject identifies the final segment of the SR-TE LSP, that is, its endpoint π¨.
4.5. METRIC Object β¨
okay bestie, so a PCC MAY ask the PCE to optimize one individual path computation request so the computed path has the smallest SID depth possible π¦ It does this with the METRIC object from [RFC5440]. This doc adds a brand new type for that job:
T = 11: Maximum SID Depth of the requested path.
If the PCC puts a METRIC object of this type on a path computation request, the PCE minimizes the SID depth of the computed path π If the B (bound) bit is set to 1 in the METRIC object, the PCE MUST NOT return a path whose SID depth exceeds the given metric value π If the PCC did not set the X-Flag in its SR-PCE-CAPABILITY TLV, then it MUST set the B bit to 1. If the PCC did set the X-Flag in its SR-PCE-CAPABILITY TLV, then it MAY set the B bit to 1 or zero.
If a PCEP session is established with a non-zero default MSD value, the PCC MUST NOT send an MSD METRIC object with an MSD greater than the session's default MSD π« If the PCE gets a path computation request with an MSD METRIC object on that session that's bigger than the session's default MSD, it MUST consider the request invalid and send a PCEP Error (PCErr) with Error-Type = 10 ("Reception of an invalid object") and Error-value = 9 ("MSD exceeds the default for the PCEP session"). Bestie, that's a whole vibe check, no cap π
5. Procedures πΈ
5.1. Exchanging the SR PCE Capability β¨
So a PCC says "hey, I can do the head-end stuff for SR-TE LSPs" by including the SR-PCE-CAPABILITY sub-TLV in the Open message it sends to a PCE π And a PCE says "I can compute SR-TE paths" by including that same sub-TLV in the Open message it sends to a PCC π§
If a PCEP speaker receives a PATH-SETUP-TYPE-CAPABILITY TLV with a PST list containing PST=1, and it supports that path setup type, then it checks for the presence of the SR-PCE-CAPABILITY sub-TLV π If that sub-TLV is absent, the PCEP speaker MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 12 ("Missing PCE-SR-CAPABILITY sub-TLV"), and MUST then close the PCEP session. Yikes π If a PCEP speaker receives a PATH-SETUP-TYPE-CAPABILITY TLV with a SR-PCE-CAPABILITY sub-TLV, but the PST list does not contain PST=1, then the PCEP speaker MUST ignore the SR-PCE-CAPABILITY sub-TLV. Main character energy for the sub-TLV, it just gets ignored π
If a PCC sets the N-Flag to 1, then the PCE MAY send an SR-ERO subobject containing an NAI and no SID (see Section 5.2). Otherwise, the PCE MUST NOT send an SR-ERO subobject containing an NAI and no SID π ββοΈ
The number of SIDs that can be imposed on a packet depends on the PCC's data-plane capability π If a PCC sets the X-Flag to 1, then the MSD is not used and MUST be set to zero. If a PCE receives an SR-PCE-CAPABILITY sub-TLV with the X-Flag set to 1, then it MUST ignore the MSD field and assume that the sender can impose a SID stack of any depth π If a PCC sets the X-Flag to zero, then it sets the MSD field to the maximum number of SIDs that it can impose on a packet. In this case, the PCC MUST set the MSD to a number greater than zero. If a PCE receives an SR-PCE-CAPABILITY sub-TLV with the X-Flag and MSD both set to zero, then it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 21 ("Maximum SID depth must be non-zero"), and MUST then close the PCEP session. Both zero is a no-go, periodt π«
Note that the MSD value exchanged via the SR-PCE-CAPABILITY sub-TLV indicates the SID/label imposition limit for the PCC node π It's expected that, in lots of deployments, the PCCs will have network interfaces that are homogeneous with respect to MSD (so each interface has the same MSD) π In those cases, a per-node MSD on the PCEP session is enough, and the PCE SHOULD interpret this to mean that all network interfaces on the PCC have the given MSD. BUT the PCE MAY also learn a per-node MSD and a per-interface MSD from the routing protocols, as specified in [RFC8491], [RFC8476], and [MSD-BGP] β¨ If the PCE learns the per-node MSD of a PCC from a routing protocol, then it MUST ignore the per-node MSD value in the SR-PCE-CAPABILITY sub-TLV and use the per-node MSD learned from the routing protocol instead. If the PCE learns the MSD of a network interface on a PCC from a routing protocol, then it MUST use the per-interface MSD instead of the MSD value in the SR-PCE-CAPABILITY sub-TLV when it computes a path that uses that interface π¦
Once an SR-capable PCEP session is established with a non-zero MSD value, the corresponding PCE MUST NOT send SR-TE paths with a number of SIDs exceeding that MSD value π§ If a PCC needs to modify the MSD value, it MUST close the PCEP session and re-establish it with the new MSD value. If a PCEP session is established with a non-zero MSD value, and the PCC receives an SR-TE path containing more SIDs than specified in the MSD value, the PCC MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 3 ("Unsupported number of SR-ERO subobjects"). If a PCEP session is established with an MSD value of zero, then the PCC MAY specify an MSD for each path computation request that it sends to the PCE, by including a "maximum SID depth" METRIC object on the request, as defined in Section 4.5 π
The N-Flag, X-Flag, and MSD value inside the SR-PCE-CAPABILITY sub-TLV are only meaningful in the Open message sent from a PCC to a PCE π«Ά So a PCE MUST set the N-Flag to zero, X-Flag to 1, and MSD value to zero in any outbound message to a PCC. Similarly, a PCC MUST ignore any MSD value received from a PCE. If a PCE receives multiple SR-PCE-CAPABILITY sub-TLVs in an Open message, it processes only the first sub-TLV received π₯Ή
5.2. ERO Processing π
5.2.1. SR-ERO Validation π
If a PCC does not support the SR PCE Capability and thus can't recognize the SR-ERO or SR-RRO subobjects, it will respond according to the rules for a malformed object per [RFC5440] π
On receiving an SR-ERO, a PCC MUST validate that the Length field, S bit, F bit, and NT field are consistent, as follows. This part is so detail-oriented, I'm obsessed π€
- If
NT=0, theFbit MUST be 1, theSbit MUST be zero, and theLengthMUST be 8. - If
NT=1, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 8; otherwise, theLengthMUST be 12. - If
NT=2, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 20; otherwise, theLengthMUST be 24. - If
NT=3, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 12; otherwise, theLengthMUST be 16. - If
NT=4, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 36; otherwise, theLengthMUST be 40. - If
NT=5, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 20; otherwise, theLengthMUST be 24. - If
NT=6, theFbit MUST be zero. If theSbit is 1, theLengthMUST be 44; otherwise, theLengthMUST be 48.
If a PCC finds that the NT field, Length field, S bit, and F bit are not consistent, it MUST consider the entire ERO invalid and MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 11 ("Malformed object") π¨
If a PCC doesn't recognize or support the value in the NT field, it MUST consider the entire ERO invalid and MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 13 ("Unsupported NAI Type in the SR-ERO/SR-RRO subobject") π€
If a PCC receives an SR-ERO subobject in which the S and F bits are both set to 1 (so both the SID and NAI are absent), it MUST consider the entire ERO invalid and send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 6 ("Both SID and NAI are absent in the SR-ERO subobject") π
If a PCC receives an SR-ERO subobject in which the S bit is set to 1 and the F bit is set to zero (so the SID is absent and the NAI is present), but the PCC doesn't support NAI resolution, it MUST consider the entire ERO invalid and send a PCErr message with Error-Type = 4 ("Not supported object") and Error-value = 4 ("Unsupported parameter") π
If a PCC receives an SR-ERO subobject in which the S bit is set to 1 and either (or both) the M bit or the C bit is set to 1, it MUST consider the entire ERO invalid and send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 11 ("Malformed object") π₯
If a PCC receives an SR-ERO subobject in which the S bit is set to zero and the M bit is set to 1, then the subobject contains an MPLS label π·οΈ The PCC MAY choose not to accept a label provided by the PCE, based on its local policy. The PCC MUST NOT accept MPLS label value 3 (Implicit NULL), but it MAY accept other special-purpose MPLS label values. If the PCC decides not to accept an MPLS label value, it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 2 ("Bad label value") π«
If both the M and C bits of an SR-ERO subobject are set to 1, and a PCC finds an erroneous setting in one or more of the TC, S, and TTL fields, it MAY overwrite those fields with values chosen according to its own policy π οΈ If the PCC does not overwrite them, it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 4 ("Bad label format").
If the M bit of an SR-ERO subobject is set to zero but the C bit is set to 1, then the PCC MUST consider the entire ERO invalid and MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 11 ("Malformed object") π
If a PCC receives an SR-ERO subobject in which the S bit is set to zero and the M bit is set to zero, then the subobject contains a SID index value π’ If the SID is an Adj-SID, then the L-Flag MUST NOT be set. If the L-Flag is set for an Adj-SID, then the PCC MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 11 ("Malformed object").
If a PCC detects that the subobjects of an ERO are a mixture of SR-ERO subobjects and subobjects of other types, it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 5 ("ERO mixes SR-ERO subobjects with other subobject types") π
The SR-ERO subobjects can be classified according to whether they contain a SID representing an MPLS label value, an index value, or no SID at all π§© If a PCC detects that the SR-ERO subobjects are a mixture of more than one of these types, it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 20 ("Inconsistent SIDs in SR-ERO/SR-RRO subobjects").
If an ERO specifies a new SR-TE path for an existing LSP and the PCC determines that the ERO contains SR-ERO subobjects that are not valid, then the PCC MUST NOT update the LSP. Do NOT touch that LSP, it's not worth the chaos π
5.2.2. Interpreting the SR-ERO β¨
okay so the SR-ERO is basically a list of subobjects π and each one points at a segment the traffic is gonna get directed to, IN ORDER. first subobject = first segment, second subobject = second segment, and so on. no cap, the order is everything π«Ά
the PCC interprets the SR-ERO by turning it into an MPLS label stack plus a next hop π¦. then it sends packets along the segment-routed path by slapping that label stack onto the packets and shipping the modified packet off to the next hop. iconic.
the PCC doesn't use one single method for this conversion though. it depends on what info the PCE put in the subobjects π
- if the subobjects have SID index values, the PCC turns them into the matching MPLS labels by following the procedure defined in [RFC8660].
- if the subobjects have NAIs only, the PCC first converts each NAI into a SID index value, and then does the thing from above. to convert an NAI to a SID index, the PCC looks for a fully specified prefix or adjacency matching the fields in the NAI. if it finds a matching prefix/adjacency, and that match has a SID associated with it, the PCC uses that SID. if it can't find a matching prefix/adjacency, or the match has no SID associated with it, the PCC behaves as specified in Section 5.2.2.1. π
- if the subobjects have MPLS labels, the PCC looks up the offset of the first subobject's label in its SRGB or SRLB. that gives the first SID. the PCC pushes the labels in any remaining subobjects onto the packet (with the final subobject specifying the bottom-of-stack label). π§
for all the cases above, after the PCC has imposed the label stack on the packet, it sends the packet to the segment identified by the first SID. main character energy β¨
5.2.2.1. Handling Errors During SR-ERO Conversion
okay, things can go wrong while the PCC is converting an SR-ERO sequence into an MPLS label stack and a next hop π. here's how it handles each one:
- if the PCC cannot find a SID index in the SR-DB, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 14("Unknown SID"). - if the PCC cannot find an NAI in the SR-DB, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 15("NAI cannot be resolved to a SID"). - if the PCC needs to convert a SID into an MPLS label value but cannot find the corresponding router's SRGB in the SR-DB, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 16("Could not find SRGB"). - if the PCC finds that a router's SRGB is not large enough for a SID index value, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 17("SID index exceeds SRGB size"). - if the PCC needs to convert a SID into an MPLS label value but cannot find the corresponding router's SRLB in the SR-DB, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 18("Could not find SRLB"). - if the PCC finds that a router's SRLB is not large enough for a SID index value, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 19("SID index exceeds SRLB size"). - if the number of labels in the computed label stack exceeds the maximum number of SIDs that the PCC can impose on the packet, it MUST send a
PCErrmessage withError-Type = 10("Reception of an invalid object") andError-value = 3("Unsupported number of SR-ERO subobjects").
β οΈ bestie, this one's a big deal: if an ERO is trying to set up a new SR-TE path for an LSP that already exists, and the PCC hits an error while processing that ERO, then the PCC MUST NOT update the LSP. the old LSP stays put π«Ά
5.3. RRO Processing π
the syntax-checking rules for the SR-RRO subobject are identical to the ones for the SR-ERO subobject, except for the stuff noted below. π
if a PCEP speaker receives an SR-RRO subobject where both SID and NAI are absent, it MUST consider the entire RRO invalid and send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 7 ("Both SID and NAI are absent in the SR-RRO subobject"). rude π
ββοΈ
if a PCE detects that the subobjects of an RRO are a mix of SR-RRO subobjects and subobjects of other types, then it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 10 ("RRO mixes SR-RRO subobjects with other subobject types"). no mixing, periodt π
the SR-RRO subobjects can be classified by whether they contain a SID representing an MPLS label value, a SID representing an index value, or no SID at all. if a PCE detects that the SR-RRO subobjects are a mixture of more than one of these types, then it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-value = 20 ("Inconsistent SIDs in SR-ERO / SR-RRO subobjects"). pick a lane, bestie π
6. Management Considerations πΈ
this document adds a new path setup type to PCEP so LSPs can be set up using Segment Routing techniques π¦. this path setup type may be used with PCEP alongside other path setup types, such as RSVP-TE, or it may be used exclusively. options options options β¨
6.1. Controlling the Path Setup Type π
the following factors control which path setup type is used for a given LSP. π§
- the available path setup types are constrained to the ones supported by, or enabled on, the PCEP speakers. the
PATH-SETUP-TYPE-CAPABILITYTLV indicates which path setup types a PCEP speaker supports. to use Segment Routing as a path setup type, it is a prerequisite that the PCC and PCE both includePST=1in the list of supported path setup types in this TLV, and also include theSR-PCE-CAPABILITYsub-TLV. π - when a PCE initiates an LSP, it proposes which path setup type to use by including it in the
PATH-SETUP-TYPETLV in the SRP object of the PCInitiate message. the PCE chooses the path setup type based on the capabilities of the network nodes on the path and on its local policy. the PCC MAY choose to accept the proposed path setup type or to reject the PCInitiate request, based on its local policy. π«Ά - when a PCC requests a path for an LSP, it can nominate a preferred path setup type by including it in the
PATH-SETUP-TYPETLV in the RP object of the PCReq message. the PCE MAY choose to reply with a path of the requested type, reply with a path of a different type, or reject the request, based on the capabilities of the network nodes on the path and on its local policy. π
the operator can influence the path setup type like this π
- implementations MUST allow the operator to enable and disable the Segment Routing path setup type on a PCEP-speaking device. implementations MAY also allow the operator to enable and disable the RSVP-TE path setup type. π
- PCE implementations MUST allow the operator to specify that an LSP should be instantiated using Segment Routing or RSVP-TE as the proposed path setup type. π
- PCE implementations MAY allow the operator to configure a preference for the PCE to propose paths using Segment Routing or RSVP-TE in the absence of a specified path setup type. π¦
- PCC implementations MUST allow the operator to specify that a path requested for an LSP nominates Segment Routing or RSVP-TE as the path setup type. π
- PCC implementations MAY allow the operator to configure a preference for the PCC to nominate Segment Routing or RSVP-TE as the path setup type if none is specified for an LSP. β¨
- PCC implementations SHOULD allow the operator to configure a PCC to refuse to set up an LSP using an undesired path setup type. π ββοΈ
6.2. Migrating a Network to Use PCEP Segment-Routed Paths π
this section walks through the steps the operator takes when migrating a network so PCEP can set up paths using Segment Routing as the path setup type π§
- the operator enables the Segment Routing PST on the PCE servers.
- the operator enables the Segment Routing PST on the PCCs.
- the operator resets each PCEP session. the PCEP sessions come back up with Segment Routing enabled. π₯
- if the operator detects a problem, they can roll the network back to its initial state by disabling the Segment Routing PST on the PCEP speakers and resetting the PCEP sessions. π
note that the data plane is unaffected if a PCEP session is reset. any LSPs that were set up before the session reset will remain in place and will still be present after the session comes back up. π«Ά
an implementation SHOULD allow the operator to manually trigger a PCEP session to be reset. πΈ
an implementation MAY automatically reset a PCEP session when an operator reconfigures the PCEP speaker's capabilities. however, note that if the capabilities at both ends of the PCEP session are not reconfigured simultaneously, then the session could be reset twice, which could lead to unnecessary network traffic. therefore, such implementations SHOULD allow the operator to override this behavior and wait instead for a manual reset. π
once Segment Routing is enabled on a PCEP session, it can be used as the path setup type for future LSPs. β¨
user traffic is not automatically migrated from existing LSPs onto segment-routed LSPs just by enabling the Segment Routing PST in PCEP. the migration of user traffic from existing LSPs onto Segment Routing LSPs is beyond the scope of this document. not the doc's problem, babe π
6.3. Verification of Network Operation π
the operator needs the following information to verify that PCEP is operating correctly with respect to the Segment Routing path setup type. π
- an implementation SHOULD allow the operator to view whether the PCEP speaker sent the Segment Routing PST capability to its peer. if the PCEP speaker is a PCC, then the implementation SHOULD also allow the operator to view the values of the L-Flag and N-Flag that were sent and the value of the MSD field that was sent. π
- an implementation SHOULD allow the operator to view whether the peer sent the Segment Routing PST capability. if the peer is a PCC, then the implementation SHOULD also allow the operator to view the values of the L-Flag and N-Flag and MSD fields that the peer sent. π
- an implementation SHOULD allow the operator to view whether the Segment Routing PST is enabled on the PCEP session. π«Ά
- if one PCEP speaker advertises the Segment Routing PST capability, but the other does not, then the implementation SHOULD create a log to inform the operator of the capability mismatch. π¨
- an implementation SHOULD allow the operator to view the PST that was proposed, or requested, for an LSP and the PST that was actually used. π
- if a PCEP speaker decides to use a different PST to the one that was proposed, or requested, for an LSP, then the implementation SHOULD create a log to inform the operator that the expected PST has not been used. the log SHOULD give the reason for this choice (local policy, equipment capability, etc.). π
- if a PCEP speaker rejects a Segment Routing path, then it SHOULD create a log to inform the operator, giving the reason for the decision (local policy, MSD exceeded, etc.). π
6.4. Relationship to Existing Management Models
okay so the PCEP YANG module is defined in [PCE-PCEP-YANG] π and the vibe is that in the future this YANG module should be extended or augmented to cover some new Segment Routing info β¨:
- the advertised PST capabilities and MSD per PCEP session π
- the PST configured for, and used by, each LSP π¦
the PCEP MIB [RFC7420] could also be updated to include this info too πΈ
7. Security Considerations π
okay bestie, this part is SERIOUS π the security considerations in [RFC5440], [RFC8231], [RFC8281], and [RFC8408] all apply to this spec π and no additional security measures are required π«Ά
but ngl there's a plot twist π this spec lets a network controller set up a path in the network WITHOUT a hop-by-hop signaling protocol (like RSVP-TE) π that creates an extra vulnerability if the security mechanisms of [RFC5440], [RFC8231], and [RFC8281] are NOT used π like, if there's no integrity protection on the session, an attacker could create a path that skips the extra verification checks the signaling protocol would have run π±
also, this spec adds the MSD field to the Open message (see Section 4.1.2) π and that field reveals how many MPLS labels the sender can push onto packets it forwards into the network π if the security mechanisms of [RFC8231] and [RFC8281] aren't used with strong encryption, an attacker could use this new field to learn about the capabilities of the edge devices in the network π΅οΈββοΈπ
8. IANA Considerations π
8.1. PCEP ERO and RRO Subobjects π§
okay so this document defines a new subobject type for the PCEP ERO AND a new subobject type for the PCEP RRO β¨ the codepoints for subobject types of these objects are maintained in the "Resource Reservation Protocol (RSVP) Parameters" registry, under the EXPLICIT_ROUTE and ROUTE_RECORD objects, respectively π
+----------------+------------------------+----------------+
| Object | Subobject | Subobject Type |
+================+========================+================+
| EXPLICIT_ROUTE | SR-ERO (PCEP specific) | 36 |
+----------------+------------------------+----------------+
| ROUTE_RECORD | SR-RRO (PCEP specific) | 36 |
+----------------+------------------------+----------------+
Table 1
8.2. New NAI Type Registry π¦
IANA has created a new sub-registry within the "Path Computation Element Protocol (PCEP) Numbers" registry called "PCEP SR-ERO NAI Types" π the allocation policy is by IETF Review [RFC8126] π and the new registry contains these values:
+-------+-------------------------------+---------------+
| Value | Description | Reference |
+=======+===============================+===============+
| 0 | NAI is absent. | This document |
+-------+-------------------------------+---------------+
| 1 | NAI is an IPv4 node ID. | This document |
+-------+-------------------------------+---------------+
| 2 | NAI is an IPv6 node ID. | This document |
+-------+-------------------------------+---------------+
| 3 | NAI is an IPv4 adjacency. | This document |
+-------+-------------------------------+---------------+
| 4 | NAI is an IPv6 adjacency with | This document |
| | global IPv6 addresses. | |
+-------+-------------------------------+---------------+
| 5 | NAI is an unnumbered | This document |
| | adjacency with IPv4 node IDs. | |
+-------+-------------------------------+---------------+
| 6 | NAI is an IPv6 adjacency with | This document |
| | link-local IPv6 addresses. | |
+-------+-------------------------------+---------------+
| 7-15 | Unassigned | |
+-------+-------------------------------+---------------+
Table 2
8.3. New SR-ERO Flag Registry πΈ
IANA has created a new sub-registry, named "SR-ERO Flag Field", within the "Path Computation Element Protocol (PCEP) Numbers" registry to manage the Flag field of the SR-ERO subobject β¨ new values are to be assigned by Standards Action [RFC8126] π each bit should be tracked with these qualities:
- Bit number (counting from bit 0 as the most significant bit)
- Capability description
- Defining RFC
the following values are defined in this document π«Ά:
+-----+---------------------------------+---------------+
| Bit | Description | Reference |
+=====+=================================+===============+
| 0-7 | Unassigned | |
+-----+---------------------------------+---------------+
| 8 | NAI is absent (F) | This document |
+-----+---------------------------------+---------------+
| 9 | SID is absent (S) | This document |
+-----+---------------------------------+---------------+
| 10 | SID specifies TC, S, and TTL in | This document |
| | addition to an MPLS label (C) | |
+-----+---------------------------------+---------------+
| 11 | SID specifies an MPLS label (M) | This document |
+-----+---------------------------------+---------------+
Table 3
8.4. PCEP-Error Object π
IANA has allocated the following codepoints in the "PCEP-ERROR Object Error Types and Values" registry for the following new Error-values π:
+------------+-----------------+---------------------------------+
| Error-Type | Meaning | Error-value |
+============+=================+=================================+
| 10 | Reception of an | |
| | invalid object | |
+------------+-----------------+---------------------------------+
| | | 2: Bad label value |
+------------+-----------------+---------------------------------+
| | | 3: Unsupported number of SR-ERO |
| | | subobjects |
+------------+-----------------+---------------------------------+
| | | 4: Bad label format |
+------------+-----------------+---------------------------------+
| | | 5: ERO mixes SR-ERO subobjects |
| | | with other subobject types |
+------------+-----------------+---------------------------------+
| | | 6: Both SID and NAI are absent |
| | | in the SR-ERO subobject |
+------------+-----------------+---------------------------------+
| | | 7: Both SID and NAI are absent |
| | | in the SR-RRO subobject |
+------------+-----------------+---------------------------------+
| | | 9: MSD exceeds the default for |
| | | the PCEP session |
+------------+-----------------+---------------------------------+
| | | 10: RRO mixes SR-RRO subobjects |
| | | with other subobject types |
+------------+-----------------+---------------------------------+
| | | 12: Missing PCE-SR-CAPABILITY |
| | | sub-TLV |
+------------+-----------------+---------------------------------+
| | | 13: Unsupported NAI Type in the |
| | | SR-ERO/SR-RRO subobject |
+------------+-----------------+---------------------------------+
| | | 14: Unknown SID |
+------------+-----------------+---------------------------------+
| | | 15: NAI cannot be resolved to a |
| | | SID |
+------------+-----------------+---------------------------------+
| | | 16: Could not find SRGB |
+------------+-----------------+---------------------------------+
| | | 17: SID index exceeds SRGB size |
+------------+-----------------+---------------------------------+
| | | 18: Could not find SRLB |
+------------+-----------------+---------------------------------+
| | | 19: SID index exceeds SRLB size |
+------------+-----------------+---------------------------------+
| | | 20: Inconsistent SIDs in SR-ERO |
| | | / SR-RRO subobjects |
+------------+-----------------+---------------------------------+
| | | 21: MSD must be non-zero |
+------------+-----------------+---------------------------------+
Table 4
8.5. PCEP TLV Type Indicators π¦
IANA has allocated the following codepoint in the "PCEP TLV Type Indicators" registry π note that this TLV type indicator is deprecated but retained in the registry to ensure compatibility with early implementations of this specification π see Appendix A for details β¨:
+-------+--------------------------------+---------------+
| Value | Meaning | Reference |
+=======+================================+===============+
| 26 | SR-PCE-CAPABILITY (deprecated) | This document |
+-------+--------------------------------+---------------+
Table 5
8.6. PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators π
IANA has created a new sub-registry, named "PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators", within the "Path Computation Element Protocol (PCEP) Numbers" registry to manage the type indicator space for sub-TLVs of the PATH-SETUP-TYPE-CAPABILITY TLV π new values are to be assigned by Standards Action [RFC8126] π the valid range of values in the registry is 0-65535 π IANA has initialized the registry with the following values, and all other values in the registry should be marked as "Unassigned" π«Ά:
+-------+-------------------+---------------+
| Value | Meaning | Reference |
+=======+===================+===============+
| 0 | Reserved | This document |
+-------+-------------------+---------------+
| 26 | SR-PCE-CAPABILITY | This document |
+-------+-------------------+---------------+
Table 6
8.7. New Path Setup Type
Okay so bestie, IANA gets to add a brand new codepoint to the "PCEP Path Setup Types" sub-registry π. That sub-registry was created back in [RFC8408] and now it's getting a shiny new entry for Segment Routing π¦. Here's the whole vibe:
+-------+-------------------------------+-----------+
| Value | Description | Reference |
+=======+===============================+===========+
| 1 | Traffic-engineering path is | This |
| | set up using Segment Routing. | document |
+-------+-------------------------------+-----------+
Table 7
Value 1 means a traffic-engineering path that's set up using Segment Routing, and this document is where it's defined π β¨. Literally the whole point of this section is that tiny table, so you're welcome π«Ά.
8.8. New Metric Type
Next up, IANA allocates one more codepoint, this time in the PCEP "METRIC Object T Field" registry π. Here's the tea:
+-------+-------------------------+---------------+
| Value | Description | Reference |
+=======+=========================+===============+
| 11 | Segment-ID (SID) Depth. | This document |
+-------+-------------------------+---------------+
Table 8
So value 11 is for Segment-ID (SID) Depth, and yep, this document is the one defining it ππ.
8.9. SR PCE Capability Flags
Now IANA makes a brand new sub-registry called "SR Capability Flag Field", tucked inside the "Path Computation Element Protocol (PCEP) Numbers" registry π§. Its job is to manage the Flag field of the SR-PCE-CAPABILITY TLV π. New values get handed out by Standards Action [RFC8126], and every bit has to be tracked with three things:
- Bit number (counting from bit 0 as the most significant bit)
- Capability description
- Defining RFC
Okay, and these are the bits this document actually defines π:
+-----+------------------------------+-----------+
| Bit | Description | Reference |
+=====+==============================+===========+
| 0-5 | Unassigned | |
+-----+------------------------------+-----------+
| 6 | Node or Adjacency Identifier | This |
| | (NAI) is supported (N) | document |
+-----+------------------------------+-----------+
| 7 | Unlimited Maximum SID Depth | This |
| | (X) | document |
+-----+------------------------------+-----------+
Table 9
So bits 0 through 5 are just sitting there unassigned πΈ, bit 6 is the NAI-is-supported flag (N) π¦, and bit 7 is the Unlimited Maximum SID Depth flag (X) β. Both of those last two come from this document, iykyk π.
- References
9.1. Normative References
Here's the list of normative references, the ones you absolutely need to read to understand this spec ππ₯:
- [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>.
- [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, <https://www.rfc-editor.org/info/rfc3032>.
- [RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation Element (PCE) Communication Protocol (PCEP)", RFC 5440, DOI 10.17487/RFC5440, March 2009, <https://www.rfc-editor.org/info/rfc5440>.
- [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>.
- [RFC8231] Crabbe, E., Minei, I., Medved, J., and R. Varga, "Path Computation Element Communication Protocol (PCEP) Extensions for Stateful PCE", RFC 8231, DOI 10.17487/RFC8231, September 2017, <https://www.rfc-editor.org/info/rfc8231>.
- [RFC8281] Crabbe, E., Minei, I., Sivabalan, S., and R. Varga, "Path Computation Element Communication Protocol (PCEP) Extensions for PCE-Initiated LSP Setup in a Stateful PCE Model", RFC 8281, DOI 10.17487/RFC8281, December 2017, <https://www.rfc-editor.org/info/rfc8281>.
- [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>.
- [RFC8408] Sivabalan, S., Tantsura, J., Minei, I., Varga, R., and J. Hardwick, "Conveying Path Setup Type in PCE Communication Protocol (PCEP) Messages", RFC 8408, DOI 10.17487/RFC8408, July 2018, <https://www.rfc-editor.org/info/rfc8408>.
- [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>.
- [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>.
9.2. Informative References
And these are the informative ones, the helpful background reading that isn't strictly required π§π :
- [IPv6-SRH] Filsfils, C., Dukes, D., Previdi, S., Leddy, J., Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header (SRH)", Work in Progress, Internet-Draft, draft-ietf-6man-segment-routing-header-26, 22 October 2019, <https://tools.ietf.org/html/draft-ietf-6man-segment-routing-header-26>.
- [MSD-BGP] Tantsura, J., Chunduri, U., Talaulikar, K., Mirsky, G., and N. Triantafillis, "Signaling MSD (Maximum SID Depth) using Border Gateway Protocol Link-State", Work in Progress, Internet-Draft, draft-ietf-idr-bgp-ls-segment-routing-msd-09, 15 October 2019, <https://tools.ietf.org/html/draft-ietf-idr-bgp-ls-segment-routing-msd-09>.
- [PCE-PCEP-YANG] Dhody, D., Hardwick, J., Beeram, V., and J. Tantsura, "A YANG Data Model for Path Computation Element Communications Protocol (PCEP)", Work in Progress, Internet-Draft, draft-ietf-pce-pcep-yang-13, 31 October 2019, <https://tools.ietf.org/html/draft-ietf-pce-pcep-yang-13>.
- [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, <https://www.rfc-editor.org/info/rfc3209>.
- [RFC4657] Ash, J., Ed. and J.L. Le Roux, Ed., "Path Computation Element (PCE) Communication Protocol Generic Requirements", RFC 4657, DOI 10.17487/RFC4657, September 2006, <https://www.rfc-editor.org/info/rfc4657>.
- [RFC7420] Koushik, A., Stephan, E., Zhao, Q., King, D., and J. Hardwick, "Path Computation Element Communication Protocol (PCEP) Management Information Base (MIB) Module", RFC 7420, DOI 10.17487/RFC7420, December 2014, <https://www.rfc-editor.org/info/rfc7420>.
- [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>.
- [RFC8413] Zhuang, Y., Wu, Q., Chen, H., and A. Farrel, "Framework for Scheduled Use of Resources", RFC 8413, DOI 10.17487/RFC8413, July 2018, <https://www.rfc-editor.org/info/rfc8413>.
- [RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, "Signaling Maximum SID Depth (MSD) Using OSPF", RFC 8476, DOI 10.17487/RFC8476, December 2018, <https://www.rfc-editor.org/info/rfc8476>.
- [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF Extensions for Segment Routing", RFC 8665, DOI 10.17487/RFC8665, December 2019, <https://www.rfc-editor.org/info/rfc8665>.
- [RFC8667] Previdi, S., Ed., Ginsberg, L., Ed., Filsfils, C., Bashandy, A., Gredler, H., and B. Decraene, "IS-IS Extensions for Segment Routing", RFC 8667, DOI 10.17487/RFC8667, December 2019, <https://www.rfc-editor.org/info/rfc8667>.
- [SR-POLICY] Filsfils, C., Sivabalan, S., Voyer, D., Bogdanov, A., and P. Mattes, "Segment Routing Policy Architecture", Work in Progress, Internet-Draft, draft-ietf-spring-segment-routing-policy-05, 17 November 2019, <https://tools.ietf.org/html/draft-ietf-spring-segment-routing-policy-05>.
Appendix A. Compatibility with Early Implementations
Okay, this appendix is about early implementations, and it's a bit of a plot twist π. An early implementation sends the SR-CAPABILITY-TLV as a top-level TLV in the OPEN object, instead of sending the PATH-SETUP-TYPE-CAPABILITY TLV in the OPEN object π¦. Implementations that want to interoperate with those early ones MUST NOT skip this part: they SHOULD also send the SR-CAPABILITY-TLV as a top-level TLV in their OPEN object π«Ά, and they SHOULD interpret receiving this top-level TLV as though the sender had sent a PATH-SETUP-TYPE-CAPABILITY TLV with a PST list of (0, 1), meaning both RSVP-TE and SR-TE PSTs are supported, with the SR-CAPABILITY-TLV as a sub-TLV π.
Now, if a PCEP speaker gets an OPEN object where both the SR-CAPABILITY-TLV and the PATH-SETUP-TYPE-CAPABILITY TLV show up as top-level TLVs, then it SHOULD ignore the top-level SR-CAPABILITY-TLV and only process the PATH-SETUP-TYPE-CAPABILITY TLV πβ¨.
Acknowledgements
Huge thanks to Ina Minei, George Swallow, Marek Zavodsky, Dhruv Dhody, Ing-Wher Chen, and Tomas Janciga for the valuable comments ππ. You all are iconic π.
Contributors
The following people contributed to this document π:
- Lakshmi Sharma
- Jan Medved
- Edward Crabbe
- Robert Raszuk
- Victor Lopez
Authors' Addresses
Here's where to find the authors π§:
Siva Sivabalan Cisco Systems, Inc. 2000 Innovation Drive Kanata Ontario K2K 3E8 Canada
Email: msiva@cisco.com
Clarence Filsfils Cisco Systems, Inc. Pegasus Parc Brabant 1831 De kleetlaan 6a Belgium
Email: cfilsfil@cisco.com
Jeff Tantsura Apstra, Inc. 333 Middlefield Rd #200 Menlo Park, CA 94025 United States of America
Email: jefftant.ietf@gmail.com
Wim Henderickx Nokia Copernicuslaan 50 95134 Antwerp 2018 Belgium
Email: wim.henderickx@nokia.com
Jon Hardwick Metaswitch Networks 100 Church Street Enfield United Kingdom
Email: jonathan.hardwick@metaswitch.com
π¦ where this page comes from
- ietf: rfc8664 2019-12
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms