RFC 9050

Path Computation Element Communication Protocol (PCEP) Procedures and Extensions for Using the PCE as a Central Controller (PCECC) of LSPs

πŸ“… published July 2021, from ietf

Path Computation Element Communication Protocol (PCEP) Procedures and Extensions for Using the PCE as a Central Controller (PCECC) of LSPs ✨

Okay, title block tea, bestie πŸ«–πŸ’…

  • Series: Internet Engineering Task Force (IETF), Request for Comments: 9050
  • Category: Standards Track
  • ISSN: 2070-1721
  • Date: July 2021
  • Authors: Z. Li and S. Peng (Huawei Technologies), M. Negi (RtBrick Inc), Q. Zhao (Etheric Networks), and C. Zhou (HPE)
  • Obsoletes / Updates: the title block doesn't list any RFCs this one obsoletes or updates 🧚

Abstract 🫢

The Path Computation Element (PCE) is basically the core component of Software-Defined Networking (SDN) systems πŸ’–

A PCE as a Central Controller (PCECC) can simplify how a distributed control plane gets processed by blending it with SDN elements, and it doesn't have to completely replace the distributed control plane πŸ¦‹ So the Label Switched Path (LSP) can be calculated, set up, and initiated, and the label-forwarding entries can be downloaded through a centralized PCE server to every network device along the path. It leverages the existing PCE technologies as much as possible, which is so smart ✨

This document specifies the procedures and Path Computation Element Communication Protocol (PCEP) extensions for using the PCE as the central controller to provision labels along the path of the static LSP πŸŽ€

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, and it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 7841 🧐

For the current status of this document, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9050 πŸ”—

Copyright (c) 2021 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, which you can find at https://trustee.ietf.org/license-info as in effect on the date this document was published. Please read these documents carefully, because they explain 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 they are provided without warranty as described in the Simplified BSD License. Not me being all legal, but it's important πŸ™ˆ

Table of Contents πŸ“‹

   1.  Introduction
   2.  Terminology
     2.1.  Requirements Language
   3.  Basic PCECC Mode
   4.  PCEP Requirements
   5.  Procedures for Using the PCE as a Central Controller (PCECC)
     5.1.  Stateful PCE Model
     5.2.  New LSP Functions
     5.3.  New PCEP Object
     5.4.  PCECC Capability Advertisement
     5.5.  LSP Operations
       5.5.1.  PCE-Initiated PCECC LSP
       5.5.2.  PCC-Initiated PCECC LSP
       5.5.3.  Central Controller Instructions
         5.5.3.1.  Label Download CCI
         5.5.3.2.  Label Cleanup CCI
       5.5.4.  PCECC LSP Update
       5.5.5.  Re-delegation and Cleanup
       5.5.6.  Synchronization of Central Controller Instructions
       5.5.7.  PCECC LSP State Report
       5.5.8.  PCC-Based Allocations
   6.  PCEP Messages
     6.1.  The PCInitiate Message
     6.2.  The PCRpt Message
   7.  PCEP Objects
     7.1.  OPEN Object
       7.1.1.  PCECC Capability Sub-TLV
     7.2.  PATH-SETUP-TYPE TLV
     7.3.  CCI Object
       7.3.1.  Address TLVs
   8.  Security Considerations
     8.1.  Malicious PCE
     8.2.  Malicious PCC
   9.  Manageability Considerations
     9.1.  Control of Function and Policy
     9.2.  Information and Data Models
     9.3.  Liveness Detection and Monitoring
     9.4.  Verify Correct Operations
     9.5.  Requirements on Other Protocols
     9.6.  Impact on Network Operations
   10. IANA Considerations
     10.1.  PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators
     10.2.  PCECC-CAPABILITY Sub-TLV's Flag Field
     10.3.  PCEP Path Setup Type Registry
     10.4.  PCEP Object
     10.5.  CCI Object Flag Field
     10.6.  PCEP-Error Object
   11. References
     11.1.  Normative References
     11.2.  Informative References
   Acknowledgments
   Contributors
   Authors' Addresses

1. Introduction ✨

The Path Computation Element (PCE) [RFC4655] was built to offload the path computation function from routers in an MPLS traffic-engineered (TE) network 🧠 It can compute optimal paths for traffic across a network, and it can also update those paths when the network or traffic demands change. Since then, the PCE's role has grown to cover more uses (like GMPLS [RFC7025]), and it allows delegated control [RFC8231] and PCE-initiated use of network resources [RFC8281]. It's giving glow-up πŸ¦‹

According to [RFC7399], Software-Defined Networking (SDN) means separating the control elements from the forwarding components, so software running in a centralized system (called a controller) can program the devices in the network to behave in specific ways πŸŽ€ A required element of an SDN architecture is a component that plans how network resources get used and how devices get programmed. You can think of this component as doing specific computations to place traffic flows within the network, using knowledge of which network resources are available, how other forwarding devices are programmed, and how other flows are routed. That's the function and purpose of a PCE, and the way a PCE fits into a wider network control system (including an SDN system) is presented in [RFC7491] πŸ’…

In the early PCE implementations, where the PCE derived paths for MPLS Label Switched Paths (LSPs), paths were requested by network elements (known as Path Computation Clients (PCCs)). The results of those path computations were supplied back to network elements using the Path Computation Element Communication Protocol (PCEP) [RFC5440]. Later, this protocol got extended to let a PCE send unsolicited requests to the network for LSP establishment [RFC8281] 🌟

The PCE was developed to derive paths for MPLS LSPs, and those paths are supplied to the head end of the LSP using PCEP. But SDN has a broader applicability than signaled MPLS and GMPLS TE networks, and the PCE may be used to determine paths in a range of use cases. PCEP has been proposed as a control protocol for these environments, so the PCE can be fully enabled as a central controller 🧚

[RFC8283] introduces the architecture for the PCE as a central controller, as an extension to the architecture described in [RFC4655]. It assumes PCEP keeps being used as the protocol between the PCE and PCC. [RFC8283] also looks at the motivations and applicability of PCEP as a Southbound Interface (SBI), and it introduces the implications for the protocol. [PCECC] describes the use cases for the PCECC architecture 🌸

A PCECC can simplify the processing of a distributed control plane by blending it with SDN elements, without necessarily replacing it completely. So the LSP can be calculated, set up, and initiated, and the label-forwarding entries can be downloaded through a centralized PCE server to each network device along the path, while leveraging the existing PCE technologies as much as possible 🫢

This document specifies the procedures and PCEP extensions for using the PCE as the central controller for static LSPs, where LSPs can be provisioned as explicit label instructions at each hop on the end-to-end path. Each router along the path must be told which label-forwarding instructions to program and which resources to reserve. The PCE-based controller keeps a view of the network, determines the paths of the end-to-end LSPs, and uses PCEP to communicate with each router along the path of the end-to-end LSP πŸ’–

This document focuses on the procedures for static LSPs (referred to as the basic PCECC mode in Section 3), but the mechanisms and protocol encodings are specified so that extensions for other use cases are easy to achieve. For example, the extensions for the PCECC for Segment Routing (SR) are specified in [PCECC-SR] and [PCECC-SRv6] πŸ¦‹

2. Terminology πŸ“–

The terminology used in this document is the same as that described in [RFC8283] πŸŽ€

2.1. Requirements Language πŸ”‘

Here's the key-word deal: the 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. Basic PCECC Mode 🧁

In this mode, LSPs are provisioned as explicit label instructions at each hop on the end-to-end path. Each router along the path must be told which label-forwarding instructions to program and which resources to reserve. The controller uses PCEP to communicate with each router along the path of the end-to-end LSP 🌈

[RFC8283] examines the motivations and applicability for the PCECC and for using PCEP as an SBI. Section 3.1.2 of [RFC8283] highlights the use of the PCECC for label allocation along the static LSPs, and it simplifies the processing of a distributed control plane by blending it with SDN elements without necessarily replacing it completely. This lets the operator bring the advantages of SDN (like programmability) into the network 🧚 Further, Section 3.3 of [PCECC] describes some scenarios where the PCECC technique could be useful. Section 4 of [RFC8283] also describes the implications on the protocol when it's used as an SDN SBI. The operator needs to weigh the advantages the PCECC offers against the operational and scalability needs of the PCECC πŸ€”

As per Section 3.1.2 of [RFC8283], the PCE-based controller takes responsibility for managing some part of the MPLS label space for each router it controls, and it may take wider responsibility for partitioning the label space for each router and allocating different parts for different uses πŸ‘‘ The PCC MUST NOT make allocations from the label space set aside for the PCE, so that label allocations don't overlap or collide πŸ™ˆ It is RECOMMENDED that the PCE makes allocations (from the label space set aside for the PCE) for all nodes along the path πŸ’… For the purpose of this document, it is assumed that the exclusive label range to be used by a PCE is known and set on both PCEP peers. A future extension could add the capability to advertise this range via a possible PCEP extension as well (see [PCE-ID]). The rest of the processing is similar to the existing stateful PCE mechanism ✨

This document also allows a case where the label space is maintained by the PCC and the labels are allocated by it. In this case, the PCE should request the allocation from the PCC, as described in Section 5.5.8. 🫢

4. PCEP Requirements ✨

Okay so before we design anything, here are the key requirements that should be considered when designing the PCECC-based solution πŸ’…

  1. A PCEP speaker that supports this document needs a way to advertise its PCECC capability to its peers πŸ“£
  2. A PCEP speaker needs a way to identify PCECC-based LSPs inside PCEP messages πŸ”
  3. PCEP procedures need to allow for PCC-based label allocations 🏷️
  4. PCEP procedures need to provide a way to update (or clean up) label entries that were downloaded to the PCC 🧹
  5. PCEP procedures need to provide a way to synchronize labels between the PCE and the PCC through PCEP messages πŸ”„

5. Procedures for Using the PCE as a Central Controller (PCECC) πŸ‘‘

5.1. Stateful PCE Model

Active stateful PCE is described in [RFC8231]. A PCE acting as a Central Controller (PCECC) reuses the existing active stateful PCE mechanism as much as possible to control LSPs πŸ¦‹

5.2. New LSP Functions

Several new functions are required in PCEP to support the PCECC. This document extends the existing messages to support the new functions required by the PCECC 🌸

  • PCInitiate: a PCEP message described in [RFC8281]. A PCInitiate message is used to set up a PCE-initiated LSP based on a PCECC mechanism. It is also extended for Central Controller Instructions (CCI) (download or clean up the label-forwarding instructions in the context of this document) on all nodes along the path, as described in Section 6.1. πŸš€
  • PCRpt: a PCEP message described in [RFC8231]. A PCRpt message is used to send the PCECC LSP Reports. It is also extended to report the set of CCI (label-forwarding instructions in the context of this document) received from the PCE, as described in Section 6.2. Section 5.5.6 describes the use of a PCRpt message during synchronization. πŸ“Š
  • PCUpd: a PCEP message described in [RFC8231]. A PCUpd message is used to send the PCECC LSP Updates. ✏️

The new functions defined in this document are mapped onto the PCEP messages, as shown in Table 1 πŸ—ΊοΈ

              +================================+============+
              | Function                       | Message    |
              +================================+============+
              | PCECC Capability advertisement | Open       |
              +--------------------------------+------------+
              | Label entry Add                | PCInitiate |
              +--------------------------------+------------+
              | Label entry Clean up           | PCInitiate |
              +--------------------------------+------------+
              | PCECC-Initiated LSP            | PCInitiate |
              +--------------------------------+------------+
              | PCECC LSP Update               | PCUpd      |
              +--------------------------------+------------+
              | PCECC LSP State Report         | PCRpt      |
              +--------------------------------+------------+
              | PCECC LSP Delegation           | PCRpt      |
              +--------------------------------+------------+
              | PCECC Label Report             | PCRpt      |
              +--------------------------------+------------+

               Table 1: Functions Mapped to the PCEP Messages

5.3. New PCEP Object

This document defines a new PCEP object called CCI (Section 7.3) to specify the Central Controller Instructions. In the scope of this document, this is limited to label-forwarding instructions. Future documents can create new CCI object-types for other types of Central Controller Instructions. The CC-ID is the unique identifier for the CCI in PCEP. The PCEP messages are extended in this document to handle the PCECC operations 🧩

5.4. PCECC Capability Advertisement

During the PCEP initialization phase, PCEP speakers (PCE or PCC) advertise their support of, and willingness to use, PCEP extensions for the PCECC using these elements in the OPEN message 🀝

  • a new Path Setup Type (PST) (Section 7.2) in the PATH-SETUP-TYPE-CAPABILITY TLV to indicate support for PCEP extensions for the PCECC - 2 (Traffic engineering path is set up using PCECC mode) πŸŽ€
  • a new PCECC-CAPABILITY sub-TLV (Section 7.1.1) with the L bit set to '1' inside the PATH-SETUP-TYPE-CAPABILITY TLV to indicate a willingness to use PCEP extensions for the PCECC-based Central Controller Instructions for label download πŸ’‘
  • the STATEFUL-PCE-CAPABILITY TLV [RFC8231] (with the I flag set [RFC8281]) 🧠

The new PST is to be listed in the PATH-SETUP-TYPE-CAPABILITY TLV by all PCEP speakers that support the PCEP extensions for the PCECC in this document πŸ’–

The new PCECC-CAPABILITY sub-TLV is included in the PATH-SETUP-TYPE-CAPABILITY TLV in the OPEN object to indicate a willingness to use the PCEP extensions for the PCECC during the established PCEP session. Using the L bit in this TLV, the PCE shows the intention to function as a PCECC server, and the PCC shows a willingness to act as a PCECC client for label download instructions (see Section 7.1.1). ✨

If the PCECC-CAPABILITY sub-TLV is advertised and the STATEFUL-PCE-CAPABILITY TLV is not advertised, or is advertised without the I flag set, in the OPEN object, the receiver MUST:

  • send a PCErr message with Error-Type=19 (Invalid Operation) and Error-value=17 (Stateful PCE capability was not advertised) and
  • terminate the session.

If a PCEP speaker receives the PATH-SETUP-TYPE-CAPABILITY TLV with the PCECC PST but without the PCECC-CAPABILITY sub-TLV, it MUST:

  • send a PCErr message with Error-Type=10 (Reception of an invalid object) and Error-value=33 (Missing PCECC Capability sub-TLV) and
  • terminate the PCEP session.
🚨 The PCECC-CAPABILITY sub-TLV MUST NOT be used without the corresponding PST being listed in the PATH-SETUP-TYPE-CAPABILITY TLV. If it is present without the corresponding PST listed in the PATH-SETUP-TYPE-CAPABILITY TLV, it MUST be ignored. πŸ™ˆ

If one or both speakers (PCE and PCC) have not indicated support and willingness to use the PCEP extensions for the PCECC, the PCEP extensions for the PCECC MUST NOT be used. If a PCECC operation is attempted when both speakers have not agreed in the OPEN messages, the receiver of the message MUST:

  • send a PCErr message with Error-Type=19 (Invalid Operation) and Error-value=16 (Attempted PCECC operations when PCECC capability was not advertised) and
  • terminate the PCEP session.

A legacy PCEP speaker (one that does not recognize the PCECC Capability sub-TLV) will ignore the sub-TLV in accordance with [RFC8408] and [RFC5440]. As per [RFC8408], the legacy PCEP speaker, on receipt of an unsupported PST in a Request Parameter (RP) / Stateful PCE Request Parameter (SRP) object, will:

  • send a PCErr message with Error-Type=21 (Invalid traffic engineering path setup type) and Error-value=1 (Unsupported path setup type) and
  • terminate the PCEP session.

5.5. LSP Operations

The PCEP messages pertaining to a PCECC MUST include the PATH-SETUP-TYPE TLV [RFC8408] in the SRP object [RFC8231] with the PST set to '2' to clearly identify that the PCECC LSP is intended 🎯

5.5.1. PCE-Initiated PCECC LSP ✨

Okay bestie, the LSP instantiation operation is already defined in [RFC8281] πŸ’–. So to set up a PCE-initiated LSP using the PCECC mechanism, the PCE sends a PCInitiate message with the PST set to '2' for the PCECC (see Section 7.2) to the ingress PCC πŸš€.

The label-forwarding instructions (see Section 5.5.3) from the PCECC get sent after the first PCInitiate and PCRpt message exchange with the ingress PCC, as per [RFC8281] (see Figure 1) πŸ¦‹. The reason is so the PCEP-specific identifier for the LSP (PLSP-ID) and the other LSP identifiers can be grabbed from the ingress first. Then they get included in the label-forwarding instruction in the next set of PCInitiate messages along the path, as described below. It's giving careful planning πŸ§šβ€β™€οΈ.

An LSP-IDENTIFIERS TLV [RFC8231] MUST be included for the PCECC LSPs, because it uniquely identifies the LSP in the network πŸ”₯. Fun fact: the fields in the LSP-IDENTIFIERS TLV are described for the RSVP-signaled LSPs, but they apply to PCECC LSPs too πŸ’…. The LSP object is included in the CCI (label download Section 7.3) to identify the PCECC LSP for that instruction. The PLSP-ID is the original identifier used by the ingress PCC, so a transit/egress Label Switching Router (LSR) could have multiple Central Controller Instructions that share the same PLSP-ID πŸ‘€. The PLSP-ID in combination with the source (in the LSP-IDENTIFIERS TLV) MUST be unique 🫢. The PLSP-ID is included mostly for maintainability reasons, so debugging is less of a nightmare 😭. As per [RFC8281], the LSP object could also include the SPEAKER-ENTITY-ID TLV to identify the PCE that initiated these instructions 🌸. Also, the CC-ID is unique in each PCEP session, as described in Section 7.3 πŸ’œ.

On receipt of a PCInitiate message for the PCECC LSP, the PCC responds with a PCRpt message with the status set to 'Going-up' and carrying the assigned PLSP-ID (see Figure 1) 🧚. The ingress PCC also sets the D (Delegate) flag (see [RFC8231]) and the C (Create) flag (see [RFC8281]) in the LSP object. When the PCE gets this PCRpt message with the PLSP-ID, it assigns labels along the path and sets up the path by sending a PCInitiate message to each node along the LSP, as per the PCECC technique πŸ‘‘. The CC-ID uniquely identifies the Central Controller Instructions within a PCEP session. Each node along the path (PCC) responds with a PCRpt message to acknowledge the CCI, with the PCRpt messages including the CCI and LSP objects ✨.

Here's how the roles shake out. The ingress node receives one CCI object with the O bit (out-label) set. The transit node(s) receive two CCI objects: the in-label CCI without the O bit set, and the out-label CCI with the O bit set. The egress node receives one CCI object without the O bit set (see Figure 1) 🌈. A node can work out its role from the setting of the O bit in the CCI object(s) and the LSP-IDENTIFIERS TLV in the LSP object πŸŽ€.

The LSP deletion operation for the PCE-initiated PCECC LSP is the same as the one defined in [RFC8281] πŸ₯€. On top of that, the PCE should further perform the label entry cleanup operation, as described in Section 5.5.3.2, for the corresponding LSP 🧹.

                 +-------+                              +-------+
                 |PCC    |                              |  PCE  |
                 |ingress|                              +-------+
          +------|       |                                  |
          | PCC  +-------+                                  |
          | transit| |                                      |
   +------|        | |<--PCInitiate,PLSP-ID=0,PST=2---------| PCECC LSP
   |PCC   +--------+ |                                      | Initiate
   |egress  |  |     |----PCRpt,PLSP-ID=2,D=1,C=1---------->| PCECC LSP
   +--------+  |     |       (GOING-UP)                     |
       |       |     |                                      |
       |<-------PCInitiate,CC-ID=X,PLSP-ID=2----------------| Label
       |       |     |                                      | download
       |--------PCRpt,CC-ID=X,PLSP-ID=2-------------------->| CCI
       |       |     |                                      |
       |       |<------PCInitiate,CC-ID=Y1,Y2,PLSP-ID=2-----| Label
       |       |     |                                      | download
       |       |-------PCRpt,CC-ID=Y1,Y2,PLSP-ID=2--------->| CCI
       |       |     |                                      |
       |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=2-----| Label
       |       |     |                                      | download
       |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=2--------->| CCI
       |       |     |                                      |
       |       |     |<---PCUpd,PLSP-ID=2,PST=2,D=1---------| PCECC LSP
       |       |     |      (UP)                            | Update
       |       |     |----PCRpt,PLSP-ID=2,D=1,C=1---------->|
       |       |     |      (UP)                            |

                     Figure 1: PCE-Initiated PCECC LSP

Once the label operations are completed, the PCE MUST send a PCUpd message to the ingress PCC πŸŽ‰. As per [RFC8231], the PCUpd message is sent with the D flag set.

The PCECC LSPs are considered to be 'up' by default (on receipt of a PCUpd message from the PCE) 🌟. The ingress could further choose to deploy a data-plane check mechanism and report the status back to the PCE via a PCRpt message. That way it can make sure the correct label instructions are in place along the path of the PCECC LSP, and that it's ready to carry traffic πŸ™ˆ. The exact mechanism is out of scope for this document, so no spoilers here 🀐.

In the case where the label allocations are made by the PCC itself (see Section 5.5.8), the PCE could request an allocation to be made by the PCC. Then the PCC sends a PCRpt message with the allocated label encoded in the CC-ID object (as shown in Figure 2), in the configuration sequence from the egress towards the ingress along the path πŸ“.

                 +-------+                              +-------+
                 |PCC    |                              |  PCE  |
                 |ingress|                              +-------+
          +------|       |                                  |
          | PCC  +-------+                                  |
          | transit| |                                      |
   +------|        | |<--PCInitiate,PLSP-ID=0,PST=2,--------| PCECC LSP
   |PCC   +--------+ |                                      | Initiate
   |egress  |  |     |----PCRpt,PLSP-ID=2,D=1,C=1---------->| PCECC LSP
   +--------+  |     |       (GOING-UP)                     |
       |       |     |                                      |
       |<-------PCInitiate,CC-ID=X,PLSP-ID=2----------------| Label
       |       |     |     C=1,O=0                          | download
       |--------PCRpt,CC-ID=X,PLSP-ID=2-------------------->| CCI
       |       |     |     Label=L1                         |
       |       |<------PCInitiate,PLSP-ID=2,----------------| Labels
       |       |     |            CC-ID=Y1,C=1,O=0          | download
       |       |     |            CC-ID=Y2,C=0,O=1,L1       | CCI
       |       |-------PCRpt,PLSP-ID=2--------------------->|
       |       |     |       CC-ID=Y1,O=0,Label=L2          |
       |       |     |       CC-ID=Y2,O=1                   |
       |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=2-----| Label
       |       |     |                C=0,O=1,L2            | download
       |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=2--------->| CCI
       |       |     |                                      |
       |       |     |<---PCUpd,PLSP-ID=2,PST=2,D=1---------| PCECC LSP
       |       |     |      (UP)                            | Update

             Figure 2: PCE-Initiated PCECC LSP (PCC Allocation)

In this example, the request goes to the egress node with the C bit set in the CCI object, which tells it the label allocation needs to be done by the egress. The egress then responds to the PCE with the allocated label 🫧. The PCE then informs the transit PCC without setting the C bit to '1' in the CCI object for the out-label. But the C bit is set to '1' for the in-label, so the transit node makes the label allocation (for the in-label) and reports it back to the PCE 🦒. Similarly, the C bit is unset towards the ingress, which wraps up all the label allocations for the PCECC LSP πŸ’–.

5.5.2. PCC-Initiated PCECC LSP

Okay bestie, this is the one where the PCC is the one starting the show 🎬✨. To set up a PCECC-based LSP that's configured at the PCC, the PCC MUST delegate the LSP by sending a PCRpt message with the PST set for the PCECC (see Section 7.2) and the D (Delegate) flag (see [RFC8231]) set in the LSP object (see Figure 3) πŸ’Œ.

When a PCE gets that first PCRpt with the D flag and PST set to '2' πŸ‘‘, it SHOULD calculate the path and assign labels along it. It also sets up the path by sending a PCInitiate message to each node along the LSP, as per the PCECC technique (see Figure 3) 🧚. The CC-ID uniquely identifies the CCI within a PCEP session πŸ”‘. Then each PCC responds with PCRpt messages that include the CCI and LSP objects 🫢.

Once the CCI (label operations) are done, the PCE MUST send the PCUpd message to the ingress PCC πŸ¦‹. As per [RFC8231], this PCUpd message should include the path information the PCE calculated 🌸.

Note that the PCECC LSPs MUST be delegated to a PCE at all times. No exceptions, bestie πŸš¨πŸ’€

The LSP deletion operation for PCECC LSPs is the same as in [RFC8231] 🧹. If the PCE gets a PCRpt message for LSP deletion, then it does label the cleanup operation for that LSP, as described in Section 5.5.3.2 ✨.

The basic PCECC LSP setup sequence is shown in Figure 3 πŸ‘€:

                  +-------+                             +-------+
                  |PCC    |                             |  PCE  |
                  |ingress|                             +-------+
           +------|       |                                 |
           | PCC  +-------+                                 |
           | transit| |                                     |
    +------|        | |---PCRpt,PLSP-ID=1,PST=2,D=1-------->| PCECC LSP
    |PCC   +--------+ |                                     |
    |egress  |  |     |                                     |
    +--------+  |     |                                     |
        |       |     |                                     |
        |<-------PCInitiate,CC-ID=X,PLSP-ID=1---------------| Label
        |       |     |     L1,O=0                          | download
        |--------PCRpt,CC-ID=X,PLSP-ID=1------------------->| CCI
        |       |     |                                     |
        |       |<------PCInitiate,PLSP-ID=1,---------------| Labels
        |       |     |            CC-ID=Y1,O=0,L2          | download
        |       |     |            CC-ID=Y2,O=1,L1          | CCI
        |       |-------PCRpt,CC-ID=Y1,Y2,PLSP-ID=1-------->|
        |       |     |                                     |
        |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=1----| Label
        |       |     |                L2,O=1               | download
        |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=1-------->| CCI
        |       |     |                                     |
        |       |     |<---PCUpd,PLSP-ID=1,PST=2,D=1--------| PCECC LSP
        |       |     |                                     | Update
        |       |     |                                     |

                     Figure 3: PCC-Initiated PCECC LSP

In the case where the label allocations are made by the PCC itself (see Section 5.5.8), the PCE could request an allocation to be made by the PCC πŸ™‹. The PCC would then send a PCRpt message with the allocated label encoded in the CC-ID object, as shown in Figure 4 πŸŽ€:

                  +-------+                             +-------+
                  |PCC    |                             |  PCE  |
                  |ingress|                             +-------+
           +------|       |                                 |
           | PCC  +-------+                                 |
           | transit| |                                     |
    +------|        | |---PCRpt,PLSP-ID=1,PST=2,D=1-------->| PCECC LSP
    |PCC   +--------+ |                                     |
    |egress  |  |     |                                     |
    +--------+  |     |                                     |
        |       |     |                                     |
        |<-------PCInitiate,CC-ID=X,PLSP-ID=1---------------| Label
        |       |     |     C=1                             | download
        |--------PCRpt,CC-ID=X,PLSP-ID=1------------------->| CCI
        |       |     |     Label=L1                        |
        |       |<------PCInitiate,PLSP-ID=1,---------------| Labels
        |       |     |            CC-ID=Y1,C=1             | download
        |       |     |            CC-ID=Y2,C=0,L1          | CCI
        |       |-------PCRpt,PLSP-ID=1-------------------->|
        |       |     |       CC-ID=Y1,Label=L2             |
        |       |     |       CC-ID=Y2                      |
        |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=1----| Label
        |       |     |                C=0,L2               | download
        |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=1-------->| CCI
        |       |     |                                     |
        |       |     |<---PCUpd,PLSP-ID=1,PST=2,D=1--------| PCECC LSP
        |       |     |                                     | Update
        |       |     |                                     |

             Figure 4: PCC-Initiated PCECC LSP (PCC Allocation)

      |  Note:
      |
      |  The O bit is set as before (and thus not included).

In the case where the label allocations are made by the PCC itself (see Section 5.5.8), the procedure stays the same, with just one extra constraint on the configuration sequence 🧩. The rest of the PCC-initiated PCECC LSP setup operations are the same as the ones in Section 5.5.1 πŸ’–.

5.5.3. Central Controller Instructions

Okay, the new CCI for label operations in PCEP happens via the PCInitiate message (Section 6.1), using a brand-new PCEP object for CCI operations 🧠. The local label range of each PCC is assumed to be known by both the PCC and the PCE, so everyone's on the same page πŸ“–βœ¨.

5.5.3.1. Label Download CCI

To set up an LSP based on the PCECC, the PCE sends a PCInitiate message to each node along the path to download the label instructions, as described in Sections 5.5.1 and 5.5.2 πŸ“₯.

The CCI object MUST be included, along with the LSP object, in the PCInitiate message πŸ“¦. The LSP-IDENTIFIERS TLV MUST be included in the LSP object. The SPEAKER-ENTITY-ID TLV SHOULD be included in the LSP object πŸͺͺ.

If a node (PCC) gets a PCInitiate message with a label to download (as part of the CCI) that's out of the range set aside for the PCE, it MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=1 (Label out of range) πŸ™…β€β™€οΈ. It MUST also include the SRP object to show the error is for the corresponding label update via a PCInitiate message 🏷️. If a PCC gets a PCInitiate message but fails to download the label entry, it MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=2 (Instruction failed) 😭. It MUST include the SRP object here too, to show the error is for the corresponding label update via a PCInitiate message 🏷️.

A new PCEP object for CCI is defined in Section 7.3 πŸŽ€.

5.5.3.2. Label Cleanup CCI

To delete an LSP based on the PCECC, the PCE sends Central Controller Instructions via a PCInitiate message to each node along the LSP's path, so the label-forwarding instruction gets cleaned up 🧹✨.

If the PCC gets a PCInitiate message but doesn't recognize the label in the CCI, the PCC MUST generate a PCErr message with Error-Type=19 (Invalid operation) and Error-value=18 (Unknown Label) πŸ€·β€β™€οΈ. It MUST include the SRP object to show the error is for the corresponding label cleanup (via a PCInitiate message) 🏷️.

The R flag in the SRP object defined in [RFC8281] is what specifies the deletion of the label entry in the PCInitiate message πŸ—‘οΈ. Here's how the whole cleanup flow looks in Figure 5 πŸ‘‡:

                  +-------+                              +-------+
                  |PCC    |                              |  PCE  |
                  |ingress|                              +-------+
           +------|       |                                  |
           | PCC  +-------+                                  |
           | transit| |                                      |
    +------|        | |                                      |
    |PCC   +--------+ |                                      |
    |egress  |  |     |                                      |
    +--------+  |     |                                      |
        |       |     |                                      |
        |<-------PCInitiate,CC-ID=X,PLSP-ID=2----------------| Label
        |       |     |                   R=1                | cleanup
        |--------PCRpt,CC-ID=X,PLSP-ID=2-------------------->| CCI
        |       |     |              R=1                     |
        |       |<------PCInitiate,CC-ID=Y1,Y2,PLSP-ID=2-----| Label
        |       |     |                          R=1         | cleanup
        |       |-------PCRpt,CC-ID=Y1,Y2,PLSP-ID=2--------->| CCI
        |       |     |                         R=1          |
        |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=2-----| Label
        |       |     |                              R=1     | cleanup
        |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=2--------->| CCI
        |       |     |                         R=1          |
        |       |     |<--PCInitiate,PLSP-ID=2,PST=2,R=1-----| PCECC LSP
        |       |     |                                      | remove

                          Figure 5: Label Cleanup

As per [RFC8281], once the label-forwarding instruction is removed, the PCC MUST send a PCRpt message πŸ“¨. The SRP object in that PCRpt message MUST include the SRP-ID-number from the PCInitiate message that triggered the removal πŸ”’. The R flag in the SRP object MUST be set 🚩.

In the case where the label allocation is made by the PCC itself (see Section 5.5.8), the removal procedure stays the same, with the sequence constraint added 🧩✨.

5.5.4. PCECC LSP Update ✨

Okay so updating a PCECC LSP follows make-before-break πŸ¦‹. The PCECC first sets up the new label instructions for the updated path, then tells the ingress to switch traffic, and only then cleans up the old instructions. πŸ’… New CC-IDs identify the updated instructions, while the identifiers in the LSP object still uniquely identify the existing LSP. Once the new instructions are downloaded, the PCE updates the new path at the ingress, which triggers the traffic switch onto the updated path. The ingress PCC acknowledges with a PCRpt message, and when the PCE gets that PCRpt, it does the cleanup for the former LSP as described in Section 5.5.3.2. 🧚

                 +-------+                             +-------+
                 |PCC    |                             |  PCE  |
                 |ingress|                             +-------+
          +------|       |                                 |
          | PCC  +-------+                                 |
          | transit| |                                     |
   +------|        | |                                     |
   |PCC   +--------+ |                                     |
   |egress  |  |     |                                     |
   +--------+  |     |                                     |
       |       |     |                                     | New Path
       |<------ PCInitiate,CC-ID=XX,PLSP-ID=1 -------------| for LSP
       |       |     |                                     | trigger
       |--------PCRpt,CC-ID=XX,PLSP-ID=1------------------>| new CCI
       |       |     |                                     |
       |       |<------PCInitiate,CC-ID=YY1,YY2,PLSP-ID=1--| Label
       |       |     |                                     | download
       |       |-------PCRpt,CC-ID=YY1,YY2,PLSP-ID=1------>| CCI
       |       |     |                                     |
       |       |     |<----PCInitiate,CC-ID=ZZ,PLSP-ID=1---| Label
       |       |     |                                     | download
       |       |     |-----PCRpt,CC-ID=ZZ,PLSP-ID=1------->| CCI
       |       |     |                                     |
       |       |     |<---PCUpd,PLSP-ID=1,PST=2,D=1--------| PCECC
       |       |     |    SRP=S                            | LSP Update
       |       |     |                                     |
       |       |     |---PCRpt,PLSP-ID=1,PST=2,D=1-------->| Trigger
       |       |     |       (SRP=S)                       | Delete
       |       |     |                                     | former CCI
       |       |     |                                     |
       |<-------PCInitiate,CC-ID=X,PLSP-ID=1---------------| Label
       |       |     |                   R=1               | cleanup
       |--------PCRpt,CC-ID=X,PLSP-ID=1------------------->| CCI
       |       |     |              R=1                    |
       |       |<------PCInitiate,CC-ID=Y1,Y2,PLSP-ID=1----| Label
       |       |     |                              R=1    | cleanup
       |       |-------PCRpt,CC-ID=Y1,Y2,PLSP-ID=1-------->| CCI
       |       |     |                         R=1         |
       |       |     |<----PCInitiate,CC-ID=Z,PLSP-ID=1----| Label
       |       |     |                              R=1    | cleanup
       |       |     |-----PCRpt,CC-ID=Z,PLSP-ID=1-------->| CCI
       |       |     |                         R=1         |

                         Figure 6: PCECC LSP Update

The modified PCECC LSPs are considered to be 'up' by default 🌸. The ingress could further choose to deploy a data-plane check mechanism and report the status back to the PCE via a PCRpt message. The exact mechanism is out of scope of this document, so that one's a whole other adventure πŸ™ˆ.

In the case where the label allocations are made by the PCC itself (see Section 5.5.8), the procedure remains the same πŸ’–.

5.5.5. Re-delegation and Cleanup

As described in [RFC8281], a new PCE can gain control over an orphaned LSP. πŸ‘‘ For a PCECC LSP, the new PCE MUST also gain control over the CCI in the same way, by sending a PCInitiate message that includes the SRP, LSP, and CCI objects, and carries the CC-ID and PLSP-ID that identify the instructions it wants to take control of.

Further, as described in [RFC8281], the State Timeout Interval timer makes sure a PCE crash doesn't cause automatic and immediate disruption for services using PCE-initiated LSPs 🫢. The Central Controller Instructions work the same way: they aren't removed right away when the PCE fails. Instead, they get cleaned up when this timer expires, so the network can clean itself up without anyone having to step in manually ✨. The PCC MUST support the removal of CCI as one of the behaviors applied on expiration of the State Timeout Interval timer.

For the PCC-initiated PCECC LSP, control over the orphaned LSP at the ingress PCC is taken over by the mechanism specified in [RFC8741] for requesting delegation. Control over the CCI is handled as described above, using [RFC8281] πŸ¦‹.

5.5.6. Synchronization of Central Controller Instructions

The whole point of CCI synchronization (labels, in the context of this document) is to make sure that the PCE's view of CCI (labels) matches the PCC's label allocation πŸŽ€. This synchronization happens as part of the LSP State Synchronization, as described in [RFC8231] and [RFC8232].

Here's how LSP State Synchronization [RFC8231] works: a PCC reports the state of its LSPs to the PCE using PCRpt messages, and per [RFC8281], the PCE initiates any missing LSPs and/or removes any LSPs that aren't wanted πŸ”₯. The same PCEP messages and procedures are reused for CCI synchronization. The PCRpt message includes the CCI and the LSP object to report the label-forwarding instructions, and the PCE then removes any unwanted instructions or initiates any missing ones. Main character energy πŸ‘‘.

5.5.7. PCECC LSP State Report

As mentioned before, an ingress PCC MAY choose to apply any Operations, Administration, and Maintenance (OAM) mechanism to check the status of the LSP in the data plane, and it MAY further send that status in a PCRpt message to the PCE 🌈.

5.5.8. PCC-Based Allocations

The PCE can ask the PCC to allocate the label using the PCInitiate message. The C flag in the CCI object is set to '1' to indicate the allocation needs to be made by the PCC. The PCC MUST try to allocate the label, and it MUST report to the PCE via a PCRpt or PCErr message πŸ’….

If the label value is 0 and the C flag is set to '1', that means the PCE is requesting the PCC to make the allocation. If the label is 'n' and the C flag is set to '1' in the CCI object, the PCE is requesting that specific value 'n' for the label πŸ“. If the allocation works, the PCC MUST report it via the PCRpt message with the CCI object. If the label value in the CCI object is invalid, the PCC MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=3 (Invalid CCI). If the value is valid but the PCC can't allocate it, the PCC MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=4 (Unable to allocate the specified CCI) 😭.

If the PCC wants to withdraw or modify a previously assigned label, it MUST send a PCRpt message without any label, or with the label containing the new value, respectively, in the CCI object. The PCE then triggers the label cleanup of the older label, as per Section 5.5.3.2 🧚.


6. PCEP Messages πŸ’œ

As defined in [RFC5440], a PCEP message is made of a common header followed by a variable-length body containing a set of objects, which can be either mandatory or optional. An object is said to be mandatory in a PCEP message when the object must be included for the message to be considered valid. For each PCEP message type, there's a set of rules that specifies which objects the message can carry. An implementation MUST form the PCEP messages using the object ordering specified in this document 🫢.

The LSP-IDENTIFIERS TLV MUST be included in the LSP object for the PCECC LSP πŸ¦‹.

The message formats in this document are specified using Routing Backus-Naur Form (RBNF) encoding, as specified in [RFC5511] ✨.

6.1. The PCInitiate Message

The PCInitiate message [RFC8281] can be used to download or remove the labels. This document extends the message, as shown below 🌸.

     <PCInitiate Message> ::= <Common Header>
                              <PCE-initiated-lsp-list>

Where:

  • <Common Header> is defined in [RFC5440].
     <PCE-initiated-lsp-list> ::= <PCE-initiated-lsp-request>
                                  [<PCE-initiated-lsp-list>]

     <PCE-initiated-lsp-request> ::=
                            (<PCE-initiated-lsp-instantiation>|
                             <PCE-initiated-lsp-deletion>|
                             <PCE-initiated-lsp-central-control>)

     <PCE-initiated-lsp-central-control> ::= <SRP>
                                             <LSP>
                                             <cci-list>

     <cci-list> ::=  <CCI>
                     [<cci-list>]

Where:

  • <PCE-initiated-lsp-instantiation> and <PCE-initiated-lsp-deletion> are as per [RFC8281].
  • The LSP and SRP object is defined in [RFC8231].

When a PCInitiate message is used for the CCI (labels), the SRP, LSP, and CCI objects MUST be present πŸŽ€. The SRP object is defined in [RFC8231]. If the SRP object is missing, the receiving PCC MUST send a PCErr message with Error-Type=6 (Mandatory Object missing) and Error-value=10 (SRP object missing). The LSP object is defined in [RFC8231], and if it's missing, the receiving PCC MUST send a PCErr message with Error-Type=6 (Mandatory Object missing) and Error-value=8 (LSP object missing). The CCI object is defined in Section 7.3, and if it's missing, the receiving PCC MUST send a PCErr message with Error-Type=6 (Mandatory Object missing) and Error-value=17 (CCI object missing). More than one CCI object MAY be included in the PCInitiate message for a transit LSR πŸ“.

To clean up entries, the R (remove) bit MUST be set in the SRP object, which is encoded along with the LSP and CCI objects 🧹.

The CCI object received at the ingress node MUST have the O bit (out-label) set. The CCI object received at the egress MUST have the O bit unset. If this is not the case, the PCC MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=3 (Invalid CCI). Other instances of the CCI object, if present, MUST be ignored πŸ’….

For point-to-point (P2P) LSP setup via the PCECC technique, the transit LSR is expecting two CCI objects: one for incoming labels and one for outgoing labels, both associated with the LSP object. If any other CCI object is included in the PCInitiate message, it MUST be ignored. If the transit LSR didn't receive two CCI objects, with one having the O bit set and the other with the O bit unset, it MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=3 (Invalid CCI) πŸ™ˆ.

Note that, on receipt of the PCInitiate message with a CCI object, the ingress, egress, or transit role of the PCC is identified via the ingress and egress IP address encoded in the LSP-IDENTIFIERS TLV πŸ¦‹.

6.2. The PCRpt Message πŸŽ€

okay so the PCRpt message is how a PCC reports back. It can carry the labels the PCE allocated, either during the State Synchronization phase or as an ack to a PCInitiate message 🧚

         <PCRpt Message> ::= <Common Header>
                             <state-report-list>

   Where:

         <state-report-list> ::= <state-report>[<state-report-list>]

         <state-report> ::= (<lsp-state-report>|
                             <central-control-report>)

         <lsp-state-report> ::= [<SRP>]
                                <LSP>
                                <path>

         <central-control-report> ::= [<SRP>]
                                      <LSP>
                                      <cci-list>

         <cci-list> ::=  <CCI>
                         [<cci-list>]

Where:

  • <path> is as per [RFC8231], and the LSP and SRP objects are also defined in [RFC8231].

When a PCRpt message is used to report the CCI (labels), the LSP and CCI objects MUST be present. The LSP object comes from [RFC8231]. If it's missing, the receiving PCE MUST send a PCErr message with Error-Type=6 (Mandatory Object missing) and Error-value=8 (LSP object missing). The CCI object is defined in Section 7.3. If it's missing, the receiving PCE MUST send a PCErr message with Error-Type=6 (Mandatory Object missing) and Error-value=17 (CCI object missing). A transit LSR can have two CCI objects in one PCRpt message ✨


7. PCEP Objects πŸ’–

The PCEP objects defined in this document follow the PCEP object format from [RFC5440], so they fit right in 🫢

7.1. OPEN Object 🌸

This document defines a new PST (2) to go inside the PATH-SETUP-TYPE-CAPABILITY TLV in the OPEN object. There's also a new sub-TLV for PCECC capability exchange πŸ¦‹

7.1.1. PCECC Capability Sub-TLV πŸ’…

The PCECC-CAPABILITY sub-TLV is optional. It goes in the OPEN object's PATH-SETUP-TYPE-CAPABILITY TLV when the Path Setup Type list includes PCECC Path Setup Type 2. A PCECC-CAPABILITY sub-TLV MUST be ignored if the PST list doesn't contain PST=2 😭

Here's its format, Figure 7:

       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=1          |          Length=4             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Flags                           |L|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 7: PCECC Capability Sub-TLV

The type is 1, and it's a fixed length of 4 octets. The value is just one field, Flags (32 bits). Right now there's only one flag bit defined:

  • L bit (Label): If a PCEP speaker sets this to '1', it's saying it supports PCECC-based Central Controller Instructions for label download and is willing to handle them. Both a PCC and a PCE MUST set it to '1' for PCECC label download/report on a PCEP session πŸ”₯

Unassigned bits MUST be set to '0' on transmission and MUST be ignored on receipt.

7.2. PATH-SETUP-TYPE TLV πŸ“

The PATH-SETUP-TYPE TLV is defined in [RFC8408]. This document adds a new PST value:

  • PST=2: Path is set up via the PCECC mode.

On a PCRpt, PCUpd, or PCInitiate message, the PST=2 in the PATH-SETUP-TYPE TLV inside the SRP object MUST be included for an LSP set up via the PCECC-based mechanism ✨

7.3. CCI Object 🧚

The CCI object is how the PCE sends forwarding instructions (label info, in this document) to the PCC. It MAY ride inside a PCInitiate or PCRpt message for label download/report πŸ’œ

CCI Object-Class is 44. CCI Object-Type is 1 for the MPLS label.

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            CC-ID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Reserved1            |             Flags         |C|O|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Label                 |     Reserved2         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   //                        Optional TLV                         //
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            Figure 8: CCI Object

Here's what the fields do:

  • CC-ID: A PCEP-specific ID for the CCI info. The PCE makes one CC-ID per instruction. It's unique within the PCE's scope and stays constant for the life of a PCEP session. The values 0 and 0xFFFFFFFF are reserved and MUST NOT be used. [SECURITY-ID] has advice on picking transient numeric IDs like this one so you keep security risks low πŸ”
  • Reserved1 (16 bit): Set to zero when sending, ignored on receipt.
  • Flags (16 bit): Carries extra info about the CCI. Two flag bits are defined right now:
    • O bit (out-label): If '1', the label is an out-label, and you must encode the next-hop info (via Address TLVs, Section 7.3.1, in the CCI object). If it's not set, the label is an in-label, and encoding the local interface info (via Address TLVs in the CCI object) is optional.
    • C bit (PCC allocation): If '1', the PCC has to allocate the label for this Central Controller Instruction. A PCE sets this to ask the PCC to pick a label from its own label space. A PCC sets it to say it allocated the label and is reporting it back to the PCE.
    • All unassigned bits MUST be set to 'zero' when sent and ignored on receipt.
  • Label (20-bit): The label info itself.
  • Reserved2 (12 bit): Set to zero when sending, ignored on receive.

7.3.1. Address TLVs πŸ’–

[RFC8779] defines the IPV4-ADDRESS, IPV6-ADDRESS, and UNNUMBERED-ENDPOINT TLVs for Generalized Endpoint. The same TLVs can also go in the CCI object to attach next-hop info for an outgoing label, or local interface info for an incoming label. The next-hop info in these TLVs needs to be a directly connected IP address or interface. If the PCC can't resolve the next-hop info, it MUST reject the CCI and reply with a PCErr message with Error-Type=31 (PCECC failure) and Error-value=5 (Invalid next-hop information) πŸ™ˆ


8. Security Considerations πŸ”

As per [RFC8283], security for a PCE-based controller is a bit different from other PCE systems. The whole thing leans heavily on PCEP, so you should look at the security features in [RFC5440] and the extra mechanisms in [RFC8253]. [RFC8283] also lists the risks of a central controller design: a central point of failure, denial of service, and a juicy target for interception and modification of messages sent to individual Network Elements (NEs) 😭

With PCECC, PCEP sessions also go to the internal routers. That means the PCE needs more resources to manage those sessions πŸ’€

PCECC builds on existing PCEP messages, so the security considerations in [RFC5440], [RFC8231], and [RFC8281] still apply. [RFC8253] adds Transport Layer Security (TLS) to PCEP, which gives you peer authentication, message encryption, and integrity. It can also tie peer identities to different access levels or authority through an attribute in X.509 certificates, or through a local policy with an accept-list of X.509 certificates. You can use that to check who's allowed to do PCECC operations. More considerations are in the sections that follow.

8.1. Malicious PCE πŸ‘‘

In this extension, the PCE has complete control over the PCC when it comes to downloading and removing labels. It can make LSPs misbehave and seriously hurt the network. As a general precaution, it is RECOMMENDED that this PCEP extension be turned on only for mutually authenticated, encrypted sessions between PCEs and PCCs in the same administrative authority, using TLS [RFC8253], following the recommendations and best current practices in BCP 195 [RFC7525] πŸ›‘οΈ

An attacker could also flood the PCC with PCECC messages faster than the PCC can process them or the network can carry them. They could do this by spoofing messages or by compromising the PCE itself. [RFC8281] has a mechanism to protect the PCC by putting a limit on this, and it can be used for PCECC operations too.

As specified in Section 5.5.3.1, a PCC needs to check whether the label in the CCI object is in the range set aside for the PCE. If it isn't, the PCC MUST send a PCErr message with Error-Type=31 (PCECC failure) and Error-value=1 (Label out of range) 🚨

8.2. Malicious PCC πŸŽ€

PCECC requires the PCE to keep the labels (CCI) it downloads, and it relies on the PCC replying (with either an ack or an error) when it asks for LSP instantiation. That's an extra attack surface, since the PCE has to keep a CCI/label replica for every PCC. It is RECOMMENDED that PCE implementations limit the resources (here, the CCI) that any single PCC can use. [RFC8231] has a notification mechanism for when that threshold is hit ✨

9. Manageability Considerations 🌈

9.1. Control of Function and Policy πŸ“

A PCE or PCC implementation SHOULD let you enable or disable the PCECC capability as part of global configuration. Section 6.1 of [RFC8664] lists various factors that control the Path Setup Type, and those apply to the PCECC Path Setup Types too. Section 6.2 of [RFC8664] also describes the migration steps when an existing LSP's Path Setup Type changes 🧚

9.2. Information and Data Models πŸ’œ

[RFC7420] describes the PCEP MIB, and that MIB can be extended to show PCECC capability status.

The PCEP YANG module [PCEP-YANG] could be extended to enable or disable the PCECC capability.

9.3. Liveness Detection and Monitoring πŸ¦‹

The mechanisms in this document don't add any new liveness detection or monitoring requirements beyond the ones already listed in [RFC5440] πŸ’…

9.4. Verify Correct Operations ✨

okay so the operator needs a few things to check that PCEP is actually behaving with the PCECC Path Setup Type πŸ” bestie, this is the checklist:

  • An implementation SHOULD let the operator see whether the PCEP speaker sent the PCECC PST capability to its peer πŸ‘€
  • An implementation SHOULD let the operator see whether the peer sent the PCECC PST capability 🫢
  • An implementation SHOULD let the operator see whether the PCECC PST is enabled on a PCEP session ✨
  • If one PCEP speaker advertises the PCECC PST capability but the other doesn't, then the implementation SHOULD create a log so the operator knows about the capability mismatch πŸ“
  • If a PCEP speaker rejects a CCI, then it SHOULD create a log for the operator and give the reason for the decision (local policy, label issues, etc.) πŸ’…

9.5. Requirements on Other Protocols 🌸

literally the PCEP extensions in this doc don't put any new requirements on other protocols πŸ™Œ

9.6. Impact on Network Operations πŸ¦‹

same energy here, the PCEP extensions in this document don't put any new requirements on network operations ✨

10. IANA Considerations πŸ“‹

10.1. PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators πŸŽ€

[RFC8408] is the one that set up the "PATH-SETUP-TYPE-CAPABILITY Sub-TLV Type Indicators" subregistry πŸ™Œ and IANA has now allocated this codepoint:

      +=======+==================+===========+
      | Value | Meaning          | Reference |
      +=======+==================+===========+
      | 1     | PCECC-CAPABILITY | RFC 9050  |
      +-------+------------------+-----------+

        Table 2: PATH-SETUP-TYPE-CAPABILITY
        Sub-TLV Type Indicators Subregistry
                      Addition

10.2. PCECC-CAPABILITY Sub-TLV's Flag Field πŸ“

this doc defines the PCECC-CAPABILITY sub-TLV, and IANA made a brand new subregistry to manage its 32-bit Flag field πŸ’– new values get assigned by Standards Action [RFC8126]. each bit should be tracked with these three things:

  • bit number (counting from bit 0 as the most significant bit)
  • capability description
  • defining RFC

rn there's only one allocation in this registry 🧚

      +======+============+===========+
      | Bit  | Name       | Reference |
      +======+============+===========+
      | 0-30 | Unassigned | RFC 9050  |
      +------+------------+-----------+
      | 31   | Label      | RFC 9050  |
      +------+------------+-----------+

         Table 3: Initial Contents of
         the PCECC-CAPABILITY Sub-TLV
                 Subregistry

10.3. PCEP Path Setup Type Registry 🌈

[RFC8408] made a subregistry inside the "Path Computation Element Protocol (PCEP) Numbers" registry called "PCEP Path Setup Types" πŸ’œ and IANA has added one new codepoint to it, like this:

 +=======+============================+===========+
 | Value | Description                | Reference |
 +=======+============================+===========+
 | 2     | Traffic engineering path   | RFC 9050  |
 |       | is set up using PCECC mode |           |
 +-------+----------------------------+-----------+

    Table 4: Path Setup Type Registry Codepoint
                      Addition

10.4. PCEP Object 🧁

IANA gave new codepoints in the "PCEP Objects" subregistry to the CCI object 🫢

  +==============+=============+=====================+===========+
  | Object-Class | Name        | Object-Type         | Reference |
  | Value        |             |                     |           |
  +==============+=============+=====================+===========+
  | 44           | CCI Object- | 0: Reserved         | RFC 9050  |
  |              | Type        | 1: MPLS Label       |           |
  |              |             | 2-15: Unassigned    |           |
  +--------------+-------------+---------------------+-----------+

          Table 5: PCEP Objects Subregistry Additions

10.5. CCI Object Flag Field πŸ”₯

IANA made a new subregistry for the CCI object's Flag field, called "CCI Object Flag Field for MPLS Label" 😭 new values get assigned by Standards Action [RFC8126]. each bit should be tracked with these three things:

  • bit number (counting from bit 0 as the most significant bit)
  • capability description
  • defining RFC

this doc defines two bits for the CCI Object flag field, and they look like this πŸ‘‘

     +======+======================================+===========+
     | Bit  | Description                          | Reference |
     +======+======================================+===========+
     | 0-13 | Unassigned                           |           |
     +------+--------------------------------------+-----------+
     | 14   | C Bit - PCC allocation               | RFC 9050  |
     +------+--------------------------------------+-----------+
     | 15   | O Bit - Specifies label is out-label | RFC 9050  |
     +------+--------------------------------------+-----------+

        Table 6: CCI Object Flag Field for MPLS Label Initial
                               Contents

10.6. PCEP-Error Object πŸ’€

IANA added new error types and error values to the "PCEP-ERROR Object Error Types and Values" subregistry of the "Path Computation Element Protocol (PCEP) Numbers" registry πŸ™ˆ these are the ones for the following errors:

   +============+===========+=======================+===========+
   | Error-Type | Meaning   | Error-value           | Reference |
   +============+===========+=======================+===========+
   | 6          | Mandatory | 17: CCI object        | RFC 9050  |
   |            | Object    | missing               |           |
   |            | missing   |                       |           |
   +------------+-----------+-----------------------+-----------+
   | 10         | Reception | 33: Missing PCECC     | RFC 9050  |
   |            | of an     | Capability sub-TLV    |           |
   |            | invalid   |                       |           |
   |            | object    |                       |           |
   +------------+-----------+-----------------------+-----------+
   | 19         | Invalid   | 16: Attempted PCECC   | RFC 9050  |
   |            | Operation | operations when PCECC |           |
   |            |           | capability was not    |           |
   |            |           | advertised            |           |
   |            |           |                       |           |
   |            |           | 17: Stateful PCE      |           |
   |            |           | capability was not    |           |
   |            |           | advertised            |           |
   |            |           |                       |           |
   |            |           | 18: Unknown Label     |           |
   +------------+-----------+-----------------------+-----------+
   | 31         | PCECC     | 1: Label out of range | RFC 9050  |
   |            | failure   |                       |           |
   |            |           | 2: Instruction failed |           |
   |            |           |                       |           |
   |            |           | 3: Invalid CCI        |           |
   |            |           |                       |           |
   |            |           | 4: Unable to allocate |           |
   |            |           | the specified CCI     |           |
   |            |           |                       |           |
   |            |           | 5: Invalid next-hop   |           |
   |            |           | information           |           |
   +------------+-----------+-----------------------+-----------+

    Table 7: PCEP-ERROR Object Error Types and Values Additions

11. References πŸ“š

11.1. Normative References 🧠

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

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

[RFC5511] Farrel, A., "Routing Backus-Naur Form (RBNF): A Syntax Used to Form Encoding Rules in Various Routing Protocol Specifications", RFC 5511, DOI 10.17487/RFC5511, April 2009, <https://www.rfc-editor.org/info/rfc5511>.

[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015, <https://www.rfc-editor.org/info/rfc7525>.

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

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

[RFC8253] Lopez, D., Gonzalez de Dios, O., Wu, Q., and D. Dhody, "PCEPS: Usage of TLS to Provide a Secure Transport for the Path Computation Element Communication Protocol (PCEP)", RFC 8253, DOI 10.17487/RFC8253, October 2017, <https://www.rfc-editor.org/info/rfc8253>.

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

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

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

[RFC8779] Margaria, C., Ed., Gonzalez de Dios, O., Ed., and F. Zhang, Ed., "Path Computation Element Communication Protocol (PCEP) Extensions for GMPLS", RFC 8779, DOI 10.17487/RFC8779, July 2020, <https://www.rfc-editor.org/info/rfc8779>.

11.2. Informative References πŸ“š

These are the extra-credit reads πŸ€“ Nothing here is strictly required to implement the protocol, but they're the background docs that make everything click.

[RFC4655]  Farrel, A., Vasseur, JP., and J. Ash, "A Path Computation
           Element (PCE)-Based Architecture", RFC 4655,
           DOI 10.17487/RFC4655, August 2006,
           <https://www.rfc-editor.org/info/rfc4655>.

[RFC7025]  Otani, T., Ogaki, K., Caviglia, D., Zhang, F., and C.
           Margaria, "Requirements for GMPLS Applications of PCE",
           RFC 7025, DOI 10.17487/RFC7025, September 2013,
           <https://www.rfc-editor.org/info/rfc7025>.

[RFC7399]  Farrel, A. and D. King, "Unanswered Questions in the Path
           Computation Element Architecture", RFC 7399,
           DOI 10.17487/RFC7399, October 2014,
           <https://www.rfc-editor.org/info/rfc7399>.

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

[RFC7491]  King, D. and A. Farrel, "A PCE-Based Architecture for
           Application-Based Network Operations", RFC 7491,
           DOI 10.17487/RFC7491, March 2015,
           <https://www.rfc-editor.org/info/rfc7491>.

[RFC8232]  Crabbe, E., Minei, I., Medved, J., Varga, R., Zhang, X.,
           and D. Dhody, "Optimizations of Label Switched Path State
           Synchronization Procedures for a Stateful PCE", RFC 8232,
           DOI 10.17487/RFC8232, September 2017,
           <https://www.rfc-editor.org/info/rfc8232>.

[RFC8283]  Farrel, A., Ed., Zhao, Q., Ed., Li, Z., and C. Zhou, "An
           Architecture for Use of PCE and the PCE Communication
           Protocol (PCEP) in a Network with Central Control",
           RFC 8283, DOI 10.17487/RFC8283, December 2017,
           <https://www.rfc-editor.org/info/rfc8283>.

[RFC8741]  Raghuram, A., Goddard, A., Karthik, J., Sivabalan, S., and
           M. Negi, "Ability for a Stateful Path Computation Element
           (PCE) to Request and Obtain Control of a Label Switched
           Path (LSP)", RFC 8741, DOI 10.17487/RFC8741, March 2020,
           <https://www.rfc-editor.org/info/rfc8741>.

[PCECC]    Li, Z. (., Dhody, D., Zhao, Q., Ke, K., Khasanov, B.,
           Fang, L., Zhou, C., Zhang, B., Rachitskiy, A., and A.
           Gulida, "The Use Cases for Path Computation Element (PCE)
           as a Central Controller (PCECC).", Work in Progress,
           Internet-Draft, draft-ietf-teas-pcecc-use-cases-07, 8
           March 2021, <https://datatracker.ietf.org/doc/html/draft-
           ietf-teas-pcecc-use-cases-07>.

[PCEP-YANG]
           Dhody, D., Ed., 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-16, 22 February
           2021, <https://datatracker.ietf.org/doc/html/draft-ietf-
           pce-pcep-yang-16>.

[PCECC-SR] Li, Z., Peng, S., Negi, M. S., Zhao, Q., and C. Zhou,
           "PCEP Procedures and Protocol Extensions for Using PCE as
           a Central Controller (PCECC) for Segment Routing (SR) MPLS
           Segment Identifier (SID) Allocation and Distribution.",
           Work in Progress, Internet-Draft, draft-ietf-pce-pcep-
           extension-pce-controller-sr-02, 25 March 2021,
           <https://datatracker.ietf.org/doc/html/draft-ietf-pce-
           pcep-extension-pce-controller-sr-02>.

[PCECC-SRv6]
           Li, Z., Peng, S., Geng, X., and M. S. Negi, "PCEP
           Procedures and Protocol Extensions for Using PCE as a
           Central Controller (PCECC) for SRv6", Work in Progress,
           Internet-Draft, draft-dhody-pce-pcep-extension-pce-
           controller-srv6-06, 21 February 2021,
           <https://datatracker.ietf.org/doc/html/draft-dhody-pce-
           pcep-extension-pce-controller-srv6-06>.

[PCE-ID]   Li, C., Chen, M., Wang, A., Cheng, W., and C. Zhou, "PCE
           Controlled ID Space", Work in Progress, Internet-Draft,
           draft-li-pce-controlled-id-space-08, 22 February 2021,
           <https://datatracker.ietf.org/doc/html/draft-li-pce-
           controlled-id-space-08>.

[SECURITY-ID]
           Gont, F. and I. Arce, "Security Considerations for
           Transient Numeric Identifiers Employed in Network
           Protocols", Work in Progress, Internet-Draft, draft-gont-
           numeric-ids-sec-considerations-06, 5 December 2020,
           <https://datatracker.ietf.org/doc/html/draft-gont-numeric-
           ids-sec-considerations-06>.

Acknowledgments 🫢

Huge thank-you hugs to Robert Tao, Changjing Yan, Tieying Huang, Avantika, and Aijun Wang πŸ’œ Their comments and suggestions made this spec so much better!

Big shoutout to Julien Meuric for shepherding this doc and dropping super valuable comments ✨ Thanks also to Deborah Brungard, the responsible AD, for holding things together πŸ‘‘

The reviewers were absolutely iconic πŸ’… Victoria Pritchard gave a very detailed RTGDIR review, Yaron Sheffer did the SECDIR review, and Gyan Mishra handled the Gen-ART review πŸ”₯

And the IESG crew deserves a standing ovation πŸ‘ Thanks to Alvaro Retana, Murray Kucherawy, Benjamin Kaduk, Roman Danyliw, Robert Wilton, Γ‰ric Vyncke, and Erik Kline for the IESG review 🌈


Contributors πŸ’–

These are the people who helped write the actual text, the girlies behind the spec 🧚

Dhruv Dhody
Huawei Technologies
Divyashree Techno Park, Whitefield
Bangalore 560066
Karnataka
India

Email: dhruv.ietf@gmail.com


Satish Karunanithi
Huawei Technologies
Divyashree Techno Park, Whitefield
Bangalore 560066
Karnataka
India

Email: satishk@huawei.com


Adrian Farrel
Old Dog Consulting
United Kingdom

Email: adrian@olddog.co.uk


Xuesong Geng
Huawei Technologies
China

Email: gengxuesong@huawei.com


Udayasree Palle

Email: udayasreereddy@gmail.com


Katherine Zhao
Futurewei Technologies

Email: katherine.zhao@futurewei.com


Boris Zhang
Telus Ltd.
Toronto
Canada

Email: boris.zhang@telus.com


Alex Tokar
Cisco Systems
Slovakia

Email: atokar@cisco.com

Authors' Addresses πŸ¦‹

Here's where you can find the authors, bestie 🌸

Zhenbin Li
Huawei Technologies
Huawei Bld., No.156 Beiqing Rd.
Beijing
100095
China

Email: lizhenbin@huawei.com


Shuping Peng
Huawei Technologies
Huawei Bld., No.156 Beiqing Rd.
Beijing
100095
China

Email: pengshuping@huawei.com


Mahendra Singh Negi
RtBrick Inc
N-17L, 18th Cross Rd, HSR Layout
Bangalore 560102
Karnataka
India

Email: mahend.ietf@gmail.com


Quintin Zhao
Etheric Networks
1009 S Claremont St.
San Mateo, CA 94402
United States of America

Email: qzhao@ethericnetworks.com


Chao Zhou
HPE

Email: chaozhou_us@yahoo.com

And that's the whole spec, periodt πŸŒˆβœ¨πŸ’…

πŸ“¦ where this page comes from