From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc8664.txt | 1584 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1584 insertions(+) create mode 100644 doc/rfc/rfc8664.txt (limited to 'doc/rfc/rfc8664.txt') diff --git a/doc/rfc/rfc8664.txt b/doc/rfc/rfc8664.txt new file mode 100644 index 0000000..6a81f20 --- /dev/null +++ b/doc/rfc/rfc8664.txt @@ -0,0 +1,1584 @@ + + + + +Internet Engineering Task Force (IETF) S. Sivabalan +Request for Comments: 8664 C. Filsfils +Updates: 8408 Cisco Systems, Inc. +Category: Standards Track J. Tantsura +ISSN: 2070-1721 Apstra, Inc. + W. Henderickx + Nokia + J. Hardwick + Metaswitch Networks + December 2019 + + + Path Computation Element Communication Protocol (PCEP) Extensions for + Segment Routing + +Abstract + + Segment Routing (SR) enables any head-end node to select any path + without relying on a hop-by-hop signaling technique (e.g., LDP or + RSVP-TE). It depends only on "segments" that are advertised by link- + state Interior Gateway Protocols (IGPs). An SR path can be derived + from a variety of mechanisms, including an IGP Shortest Path Tree + (SPT), an explicit configuration, or a Path Computation Element + (PCE). This document specifies extensions to the Path Computation + Element Communication Protocol (PCEP) that allow a stateful PCE to + compute and initiate Traffic-Engineering (TE) paths, as well as a + Path Computation Client (PCC) to request a path subject to certain + constraints and optimization criteria in SR networks. + + This document updates RFC 8408. + +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/rfc8664. + +Copyright Notice + + Copyright (c) 2019 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + +Table of Contents + + 1. Introduction + 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 + + Segment Routing (SR) leverages the source-routing paradigm. Using + SR, a source node steers a packet through a path without relying on + hop-by-hop signaling protocols such as LDP or RSVP-TE. Each path is + specified as an ordered list of instructions called "segments". Each + segment is an instruction to route the packet to a specific place in + the network or to perform a function on the packet. A database of + segments can be distributed through the network using a routing + protocol (such as IS-IS or OSPF) or by any other means. Several + types of segments are defined. A node segment uniquely identifies a + specific node in the SR domain. Each router in the SR domain + associates a node segment with an ECMP-aware shortest path to the + node that it identifies. An adjacency segment represents a + unidirectional adjacency. An adjacency segment is local to the node + that advertises it. Both node segments and adjacency segments can be + used for SR. + + [RFC8402] describes the SR architecture. The corresponding IS-IS and + OSPF extensions are specified in [RFC8667] and [RFC8665], + respectively. + + The SR architecture can be implemented using either an MPLS + forwarding plane [RFC8660] or an IPv6 forwarding plane [IPv6-SRH]. + The MPLS forwarding plane can be applied to SR without any change; in + which case, an SR path corresponds to an MPLS Label Switching Path + (LSP). This document is relevant to the MPLS forwarding plane only. + In this document, "Node-SID" and "Adj-SID" denote the Node Segment + Identifier and Adjacency Segment Identifier, respectively. + + An SR path can be derived from an IGP Shortest Path Tree (SPT). + Segment Routing Traffic-Engineering (SR-TE) paths may not follow an + IGP SPT. Such paths may be chosen by a suitable network planning + tool and provisioned on the ingress node of the SR-TE path. + + [RFC5440] describes the Path Computation Element Communication + Protocol (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 extensions to PCEP that allow a stateful PCE to compute and + recommend network paths in compliance with [RFC4657]. It also + defines objects and TLVs for MPLS-TE LSPs. Stateful PCEP extensions + provide synchronization of LSP state between a PCC and a PCE or + between a pair of PCEs, delegation of LSP control, reporting of LSP + state from a PCC to a PCE, and control of the setup and path routing + of an LSP from a PCE to a PCC. Stateful PCEP extensions are intended + for an operational model in which 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 the + requests from a stateful PCE or a controller using stateful PCE is + specified in [RFC8281]. This mechanism is useful in Software-Defined + Networking (SDN) applications, such as on-demand engineering or + bandwidth calendaring [RFC8413]. + + It is possible to use a stateful PCE for computing one or more SR-TE + paths, taking into account 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 specified in [RFC8281] + and the SR-specific PCEP extensions specified in this document. + Additionally, using procedures described in this document, a PCC can + request an SR path from either a stateful or a stateless PCE. + + This specification relies on the procedures specified in [RFC8408] to + exchange the Segment Routing capability and to specify that the path + setup type of an LSP is Segment Routing. This specification also + updates [RFC8408] to clarify the use of sub-TLVs in the PATH-SETUP- + TYPE-CAPABILITY TLV. See Section 4.1.1 for details. + + This specification provides a mechanism for a network controller + (acting as a PCE) to instantiate candidate paths for an SR Policy + onto a head-end node (acting as a PCC) using PCEP. For more + information on the SR Policy Architecture, see [SR-POLICY]. + +2. Terminology + + The following terminology is used in this document: + + 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 + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Overview of PCEP Operation in SR Networks + + In an SR network, the ingress node of an SR path prepends an SR + header to all outgoing packets. The SR header consists of a list of + SIDs (or MPLS labels in the context of this document). The header + has all necessary information so that, in combination with the + information distributed by the IGP, the packets can be guided from + the ingress node to the egress node of the path; hence, there is no + need for any signaling protocol. + + In PCEP messages, LSP route information is carried in the Explicit + Route Object (ERO), which consists of a sequence of subobjects. SR- + TE paths computed by a PCE can be represented in an ERO in one of the + following 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 converts these into an MPLS label stack and next hop, as + described in Section 5.2.2. + + This document defines a new ERO subobject denoted by "SR-ERO + subobject" that is capable of carrying a SID as well as the identity + of the node/adjacency represented by the SID. SR-capable PCEP + speakers should be able to generate and/or process such an ERO + subobject. An ERO containing SR-ERO subobjects can be included in + the PCEP Path Computation Reply (PCRep) message defined in [RFC5440], + the Path Computation LSP Initiate Request (PCInitiate) message + defined in [RFC8281], and the Path Computation Update Request (PCUpd) + and Path Computation State Report (PCRpt) messages for LSPs defined + in [RFC8231]. + + When a PCEP session between a PCC and a PCE is established, both PCEP + speakers exchange their capabilities to indicate their ability to + support SR-specific functionality. + + A PCE can update an LSP that is initially established via RSVP-TE + signaling to use an SR-TE path by sending a PCUpd to the PCC that + delegated the LSP to it [RFC8231]. A PCC can update an undelegated + LSP that is initially established via RSVP-TE signaling to use an SR- + TE path as follows. First, it requests an SR-TE path from a PCE by + sending a Path Computation Request (PCReq) message. If it receives a + suitable path, it establishes the path in the data plane and then + tears down the original RSVP-TE path. If the PCE is stateful, then + the PCC sends PCRpt messages indicating that the new path is set up + and the old path is torn down, per [RFC8231]. + + Similarly, a PCE or PCC can update an LSP initially created with an + SR-TE path to use RSVP-TE signaling, if necessary. This capability + is useful for rolling back a change when a network is migrated from + RSVP-TE to SR-TE technology. + + A PCC MAY include a Record Route Object (RRO) containing 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. The methods used by a PCC to record the SR-TE LSP + are outside the scope of this document. + + 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 specified in this document complement the existing + PCEP specifications to support SR-TE paths. As such, the PCEP + messages (e.g., PCReq, PCRep, PCRpt, PCUpd, PCInitiate, etc.) are + formatted according to [RFC5440], [RFC8231], [RFC8281], and any other + applicable PCEP specifications. + +4. Object Formats + +4.1. The OPEN Object + +4.1.1. The Path Setup Type Capability TLV + + [RFC8408] defines the PATH-SETUP-TYPE-CAPABILITY TLV for use in the + OPEN object. The PATH-SETUP-TYPE-CAPABILITY TLV contains an optional + list of sub-TLVs, which are intended to convey parameters that are + associated with the path setup types supported by a PCEP speaker. + + This specification updates [RFC8408] as follows. 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 does not match one of those from the + registry or is not recognized by the speaker, then the speaker MUST + ignore the sub-TLV. + +4.1.2. The SR PCE Capability Sub-TLV + + This document defines a new Path Setup Type (PST) for SR, as follows: + + PST = 1: Traffic-engineering path is set up using Segment + Routing. + + A PCEP speaker SHOULD indicate its support of 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. PCEP + speakers use this sub-TLV to exchange information 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 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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. Note that an SR-ERO subobject does not + need to have both the SID and NAI. However, at least one of them + MUST be present. + + When building the MPLS label stack from 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 ERO contains the + information about the topmost label. The last subobject contains + information about the bottommost label. + +4.3.1. SR-ERO Subobject + + An SR-ERO subobject is formatted as shown in the following diagram. + + 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 + + The fields in the SR-ERO subobject are as follows: + + The L-Flag: Indicates whether the subobject represents a loose hop + in the LSP [RFC3209]. If this flag is set to zero, a PCC MUST NOT + overwrite the SID value present 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: Set to 36. + + Length: Contains the total length of the subobject in octets. The + Length MUST be at least 8 and MUST be a multiple of 4. An SR-ERO + subobject MUST contain at least one SID or NAI. The flags + described below indicate whether the SID or NAI fields are absent. + + NAI Type (NT): Indicates the type and format of the NAI contained in + the object body, if any is present. If the F bit is set to zero + (see below), then the NT field has no meaning and MUST be ignored + by the receiver. This document describes the following 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: Used to carry additional information pertaining to 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 represents 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 to 1 but 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 to 1, 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 to 1 if NT=0; + otherwise, it MUST be set to zero. The S and F bits MUST NOT + both be set to 1. + + SID: The Segment Identifier. Depending on the M bit, it contains + either: + + * A 4-octet index defining the offset into an MPLS label space + per [RFC8402] or + + * A 4-octet MPLS label stack entry, where the 20 most significant + bits encode the label value per [RFC3032]. + + NAI: The NAI associated with the SID. The NAI's format depends on + the value in the NT field and is described in the following + 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 document defines the following NAIs: + + 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 + + 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, that is, the actual path taken by the LSP. 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 that of the SR-ERO + subobject, but without the L-Flag. + + A PCC MUST order the SR-RRO subobjects such 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 + + A PCC MAY request that PCE optimizes an individual path computation + request to minimize the SID depth of the computed path by using the + METRIC object defined in [RFC5440]. This document defines a new type + for the METRIC object to be used for this purpose, as follows: + + T = 11: Maximum SID Depth of the requested path. + + If the PCC includes a METRIC object of this type on a path + computation request, then the PCE minimizes the SID depth of the + computed path. If the B (bound) bit is set to 1 in the METRIC + object, then 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 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, + then the PCC MUST NOT send an MSD METRIC object with an MSD greater + than the session's default MSD. If the PCE receives a path + computation request with an MSD METRIC object on such a session that + is greater than the session's default MSD, then 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"). + +5. Procedures + +5.1. Exchanging the SR PCE Capability + + A PCC indicates that it is capable of supporting the head-end + functions for SR-TE LSP by including the SR-PCE-CAPABILITY sub-TLV in + the Open message that it sends to a PCE. A PCE indicates that it is + capable of computing SR-TE paths by including the SR-PCE-CAPABILITY + sub-TLV in the Open message that it sends to a PCC. + + If a PCEP speaker receives a PATH-SETUP-TYPE-CAPABILITY TLV with a + PST list containing PST=1, and supports that path setup type, then it + checks for the presence of the SR-PCE-CAPABILITY sub-TLV. If that + sub-TLV is absent, then 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. 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. + + 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. + + Note that the MSD value exchanged via the SR-PCE-CAPABILITY sub-TLV + indicates the SID/label imposition limit for the PCC node. It is + anticipated that, in many deployments, the PCCs will have network + interfaces that are homogeneous with respect to MSD (that is, each + interface has the same MSD). In such cases, having a per-node MSD on + the PCEP session is sufficient; the PCE SHOULD interpret this to mean + that all network interfaces on the PCC have the given MSD. However, + 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 meaningful only in the Open message sent from a PCC to a PCE. + As such, a PCE MUST set the N-Flag to zero, X-Flag to 1, and MSD + value to zero in an 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 cannot + 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. + + * If NT=0, the F bit MUST be 1, the S bit MUST be zero, and the + Length MUST be 8. + + * If NT=1, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 8; otherwise, the Length MUST be 12. + + * If NT=2, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 20; otherwise, the Length MUST be 24. + + * If NT=3, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 12; otherwise, the Length MUST be 16. + + * If NT=4, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 36; otherwise, the Length MUST be 40. + + * If NT=5, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 20; otherwise, the Length MUST be 24. + + * If NT=6, the F bit MUST be zero. If the S bit is 1, the Length + MUST be 44; otherwise, the Length MUST 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 does not 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 (that is, 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 (that is, the SID is absent and the NAI + is present), but the PCC does not 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 if + 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, then 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 or an index value, or + no SID. If a PCC detects that the SR-ERO 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"). + + 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. + +5.2.2. Interpreting the SR-ERO + + The SR-ERO contains a sequence of subobjects. Each SR-ERO subobject + in the sequence identifies a segment that the traffic will be + directed to, in the order given. That is, the first subobject + identifies the first segment the traffic will be directed to, the + second subobject represents the second segment, and so on. + + The PCC interprets the SR-ERO by converting it to an MPLS label stack + plus a next hop. The PCC sends packets along the segment-routed path + by prepending the MPLS label stack onto the packets and sending the + resulting, modified packet to the next hop. + + The PCC uses a different procedure to do this conversion, depending + on the information that the PCE has provided in the subobjects. + + * If the subobjects contain SID index values, then the PCC converts + them into the corresponding MPLS labels by following the procedure + defined in [RFC8660]. + + * If the subobjects contain NAIs only, the PCC first converts each + NAI into a SID index value and then proceeds as 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 the PCC finds a + matching prefix/adjacency, and the matching prefix/adjacency has a + SID associated with it, then the PCC uses that SID. If the PCC + cannot find a matching prefix/adjacency, or if the matching + prefix/adjacency has no SID associated with it, the PCC behaves as + specified in Section 5.2.2.1. + + * If the subobjects contain MPLS labels, then the PCC looks up the + offset of the first subobject's label in its SRGB or SRLB. This + 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 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. + +5.2.2.1. Handling Errors During SR-ERO Conversion + + There are several errors that can occur during the process of + converting an SR-ERO sequence to an MPLS label stack and a next hop. + The PCC deals with them as follows. + + * If the PCC cannot find a SID index in the SR-DB, it MUST send a + PCErr message with Error-Type = 10 ("Reception of an invalid + object") and Error-value = 14 ("Unknown SID"). + + * If the PCC cannot find an NAI in the SR-DB, it MUST send a PCErr + message with Error-Type = 10 ("Reception of an invalid object") + and Error-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 PCErr message with Error-Type = 10 ("Reception of an + invalid object") and Error-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 PCErr message with Error-Type = 10 + ("Reception of an invalid object") and Error-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 PCErr message with Error-Type = 10 ("Reception of an + invalid object") and Error-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 PCErr message with Error-Type = 10 + ("Reception of an invalid object") and Error-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 PCErr message with Error-Type = 10 ("Reception of an + invalid object") and Error-value = 3 ("Unsupported number of SR- + ERO subobjects"). + + If an ERO specifies a new SR-TE path for an existing LSP and the PCC + encounters an error while processing the ERO, then the PCC MUST NOT + update the LSP. + +5.3. RRO Processing + + The syntax-checking rules that apply to the SR-RRO subobject are + identical to those of the SR-ERO subobject, except as noted below. + + If a PCEP speaker receives an SR-RRO subobject in which 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"). + + If a PCE detects that the subobjects of an RRO are a mixture 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"). + + The SR-RRO subobjects can be classified according to whether they + contain a SID representing an MPLS label value or an index value, or + no SID. 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"). + +6. Management Considerations + + This document adds a new path setup type to PCEP to allow LSPs to 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. + +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 those that are + supported by, or enabled on, the PCEP speakers. The PATH-SETUP- + TYPE-CAPABILITY TLV 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 include PST=1 in the + list of supported path setup types in this TLV and also include + the SR-PCE-CAPABILITY sub-TLV. + + * When a PCE initiates an LSP, it proposes which path setup type to + use by including it in the PATH-SETUP-TYPE TLV 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-TYPE TLV 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 as follows. + + * 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 discusses the steps that the operator takes when + migrating a network to enable PCEP to 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. + +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 + + The PCEP YANG module is defined in [PCE-PCEP-YANG]. In the future, + this YANG module should be extended or augmented to provide the + following additional information relating to Segment Routing: + + * 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 + information. + +7. Security Considerations + + The security considerations described in [RFC5440], [RFC8231], + [RFC8281], and [RFC8408] are applicable to this specification. No + additional security measures are required. + + Note that this specification enables a network controller to + instantiate a path in the network without the use of a hop-by-hop + signaling protocol (such as RSVP-TE). This creates an additional + vulnerability if the security mechanisms of [RFC5440], [RFC8231], and + [RFC8281] are not used. If there is no integrity protection on the + session, then an attacker could create a path that is not subjected + to the further verification checks that would be performed by the + signaling protocol. + + Note that this specification adds the MSD field to the Open message + (see Section 4.1.2), which discloses how many MPLS labels the sender + can push onto packets that it forwards into the network. If the + security mechanisms of [RFC8231] and [RFC8281] are not used with + strong encryption, then an attacker could use this new field to gain + intelligence about the capabilities of the edge devices in the + network. + +8. IANA Considerations + +8.1. PCEP ERO and RRO Subobjects + + 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 for this new registry is by IETF + Review [RFC8126]. The new registry contains the following 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 the following 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. 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 + + A sub-registry within the "Path Computation Element Protocol (PCEP) + Numbers" registry called "PCEP Path Setup Types" was created in + [RFC8408]. IANA has allocated a new codepoint within this registry, + as follows: + + +-------+-------------------------------+-----------+ + | Value | Description | Reference | + +=======+===============================+===========+ + | 1 | Traffic-engineering path is | This | + | | set up using Segment Routing. | document | + +-------+-------------------------------+-----------+ + + Table 7 + +8.8. New Metric Type + + IANA has allocated the following codepoint in the PCEP "METRIC Object + T Field" registry: + + +-------+-------------------------+---------------+ + | Value | Description | Reference | + +=======+=========================+===============+ + | 11 | Segment-ID (SID) Depth. | This document | + +-------+-------------------------+---------------+ + + Table 8 + +8.9. SR PCE Capability Flags + + IANA has created a new sub-registry, named "SR Capability Flag + Field", within the "Path Computation Element Protocol (PCEP) Numbers" + registry to manage the Flag field of the SR-PCE-CAPABILITY TLV. New + values are to be assigned by Standards Action [RFC8126]. Each bit + should be tracked with the following 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-5 | Unassigned | | + +-----+------------------------------+-----------+ + | 6 | Node or Adjacency Identifier | This | + | | (NAI) is supported (N) | document | + +-----+------------------------------+-----------+ + | 7 | Unlimited Maximum SID Depth | This | + | | (X) | document | + +-----+------------------------------+-----------+ + + Table 9 + +9. References + +9.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, + . + + [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, + . + + [RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation + Element (PCE) Communication Protocol (PCEP)", RFC 5440, + DOI 10.17487/RFC5440, March 2009, + . + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, . + + [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, + . + + [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, + . + + [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, . + + [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, . + + [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, + . + + [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, + . + +9.2. Informative References + + [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, + . + + [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, + . + + [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, + . + + [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, + . + + [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, . + + [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, + . + + [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, + . + + [RFC8413] Zhuang, Y., Wu, Q., Chen, H., and A. Farrel, "Framework + for Scheduled Use of Resources", RFC 8413, + DOI 10.17487/RFC8413, July 2018, + . + + [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, + . + + [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, + . + + [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, + . + + [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, + . + +Appendix A. Compatibility with Early Implementations + + An early implementation of this specification will send 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 wish to interoperate with such early + implementations should also send the SR-CAPABILITY-TLV as a top-level + TLV in their OPEN object and 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) (that is, both RSVP-TE and SR-TE PSTs + are supported) with the SR-CAPABILITY-TLV as a sub-TLV. If a PCEP + speaker receives an OPEN object in which both the SR-CAPABILITY-TLV + and PATH-SETUP-TYPE-CAPABILITY TLV appear as top-level TLVs, then it + should ignore the top-level SR-CAPABILITY-TLV and process only the + PATH-SETUP-TYPE-CAPABILITY TLV. + +Acknowledgements + + We thank Ina Minei, George Swallow, Marek Zavodsky, Dhruv Dhody, Ing- + Wher Chen, and Tomas Janciga for the valuable comments. + +Contributors + + The following people contributed to this document: + + * Lakshmi Sharma + * Jan Medved + * Edward Crabbe + * Robert Raszuk + * Victor Lopez + +Authors' Addresses + + 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 -- cgit v1.2.3