<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc docName="draft-sidor-pce-binding-label-sid-extensions-02" submissionType="IETF" category="std" ipr="trust200902" obsoletes="" updates="">
  <front>
    <title abbrev="PCEP Binding SID Extensions">Binding Label/Segment Identifier (SID) Extensions in Path Computation Element Communication Protocol (PCEP)</title>
    <author fullname="Samuel Sidor" initials="S." surname="Sidor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Eurovea Central 3</street>
          <street>Pribinova 10</street>
          <city>Bratislava</city>
          <code>811 09</code>
          <country>Slovakia</country>
        </postal>
        <email>ssidor@cisco.com</email>
      </address>
    </author>
    <author fullname="Zafar Ali" initials="Z." surname="Ali">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <email>zali@cisco.com</email>
      </address>
    </author>
    <author fullname="Cheng Li" initials="C." surname="Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Rd.</street>
          <city>Beijing</city>
          <code>100095</code>
          <country>China</country>
        </postal>
        <email>c.l@huawei.com</email>
      </address>
    </author>
    <author fullname="Mike Koldychev" initials="M." surname="Koldychev">
      <organization>Ciena Corporation</organization>
      <address>
        <postal>
          <street>385 Terry Fox Dr.</street>
          <city>Kanata</city>
          <region>Ontario</region>
          <code>K2K 0L1</code>
          <country>Canada</country>
        </postal>
        <email>mkoldych@proton.me</email>
      </address>
    </author>
    <date/>
    <area>Routing</area>
    <workgroup>PCE Working Group</workgroup>
    <abstract>
      <t>
        The Path Computation Element Communication Protocol (PCEP) provides mechanisms for Path Computation Elements (PCEs) to instantiate and manage Label Switched Paths (LSPs) on a Path Computation Client (PCC). This includes the ability for a PCE to specify a Binding Segment Identifier (SID) for an LSP.
      </t>
      <t>
        A binding value specified by a PCE may not be available for use on the PCC. This can lead to LSP instantiation failures or entire PCEP message being rejected.
      </t>
      <t>
        This document proposes extensions to PCEP to allow a PCC to fall back to allocating a Binding SID from its own dynamic range if the value specified by the PCE is unavailable. It also defines a mechanism for the PCC to report both the requested and the allocated binding values back to the PCE.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction">
      <t>
        This document proposes extensions to the Path Computation Element Communication Protocol (PCEP) to enhance the management of Binding Segment Identifiers (SIDs) for Label Switched Paths (LSPs).
   Specifically, it defines mechanisms for a Path Computation Client (PCC) to handle situations where a Binding SID (BSID) requested by a Path Computation Element (PCE) is unavailable, allowing for fallback
   allocation and subsequent reporting of the allocated values back to the PCE. The ability for a PCE to specify a Binding SID for an LSP is defined in <xref target="RFC9604"/>. These extensions aim to improve the robustness and flexibility of LSP instantiation and management in PCEP-controlled
   networks.
      </t>
  	  <section anchor="Language" title="Requirements Language">
      <t>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 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when,
      and only when, they appear in all capitals, as shown here.</t>
    </section>
    </section>
    <section title="Terminology">
      <t>This document uses the following terms defined in <xref target="RFC5440"/>: PCC, PCE, PCEP Peer, and PCEP speaker.</t>

      <t>The base PCEP specification <xref target="RFC4655"/> originally defined the use of the PCE architecture for Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks
         with Label Switched Paths (LSPs) instantiated using the Resource Reservation Protocol - Traffic Engineering (RSVP-TE) signaling protocol. Over time, support for additional path setup types, such as
         SRv6, has been introduced <xref target="RFC9603"/>. The term "LSP" is used extensively in PCEP specifications and, in the
         context of this document, refers to a Candidate Path within an SR Policy, which may be an Segment Routing over IPv6 (SRv6) path (still represented
         using the LSP Object as specified in <xref target="RFC8231"/>.
      </t>

      <t>It also uses the term Binding Segment Identifier (BSID), as defined in <xref target="RFC9604"/>, which refers to a local label or SID that represents an SR Policy or an SR-TE LSP.</t>
    </section>
    <section title="Motivation">
  <t>The PCEP provides mechanisms for PCEs to instantiate and manage LSPs on a PCC. A Stateful PCE <xref target="RFC8231"/> can instantiate LSPs on a PCC.
     When instantiating a Segment Routing Traffic Engineering (SR-TE) LSP <xref target="RFC8664"/>, the PCE may request a specific BSID to be associated with the LSP using the TE-PATH-BINDING Type-Length-Value (TLV) <xref target="RFC9604"/>.
  </t>

  <t>
     A significant operational challenge arises when the BSID requested by the PCE is already in use, falls outside the valid range, or is otherwise unavailable on the PCC. In the current PCEP
     specification, such a conflict or unavailability typically results in an LSP instantiation failure. This "hard failure" approach can be disruptive, requiring manual steps from an operator or complex retry logic at the
     PCE, and can have negative impact on automated provisioning capabilities that PCEP aims to provide. It can also lead to entire PCEP messages being rejected, forcing the PCE to re-evaluate and re-initiate the
     entire LSP setup process.
  </t>

  <t>To improve network resilience and operational efficiency, it is desirable to have more flexible mechanisms for handling BSID unavailability scenarios. Instead of failure, a PCC should ideally be
     able to gracefully handle such situations, for instance, by allocating a Binding SID from its local dynamic range. Furthermore, the PCE needs to be aware of the actual BSID allocated by the PCC to maintain
     an accurate view of the network state. This document defines extensions to PCEP to address these operational needs.
  </t>
</section>
    <section title="PCEP Extensions">
      <section title="STATEFUL-PCE-CAPABILITY TLV">
        <t>
          A new flag is proposed for the STATEFUL-PCE-CAPABILITY TLV, originally defined in <xref format="default" section="5.4" sectionFormat="of" target="RFC8231"/>.
        </t>
        <t>
          <ul spacing="compact">
            <li>E (BSID-FALLBACK-CAPABILITY): If set, indicates that the PCEP peer supports LSP creation and fall back to dynamic binding value allocation if the specific binding value is unavailable, as detailed in <xref target="Operation"/>.</li>
          </ul>
        </t>
      </section>
      <section title="TE-PATH-BINDING TLV">
        <t>
          New flags are proposed in the TE-PATH-BINDING TLV, which was originally defined in <xref format="default" section="4" sectionFormat="of" target="RFC9604"/>.
        </t>
        <t>
          <ul spacing="compact">
            <li>A (Allocated): If set, indicates that the binding value encoded in the TLV represents an allocated binding value.</li>
            <li>D (Down on BSID Unavailability): If set, indicates that LSP can be created even if specified binding value is unavailable, but LSP will be in down state.</li>
            <li>F (Fallback): If set, indicates that binding value allocation from the dynamic range will be performed if the specified binding value is unavailable.</li>
          </ul>
        </t>
      </section>
    </section>
    <section anchor="Operation" title="Operation">
      <t>
        The PCEP protocol extensions defined in this document MUST NOT be used if one or both PCEP speakers have not indicated support for the extensions by setting the E flag (BSID-FALLBACK-CAPABILITY) in the STATEFUL-PCE-CAPABILITY TLV in their respective OPEN messages.
      </t>
      <t>
        When a PCE wants to instantiate or update an LSP and suggest a binding value, it includes the TE-PATH-BINDING TLV in the Path Computation LSP Initiate Request (PCInitiate) or Path Computation LSP Update Request (PCUpd) message <xref target="RFC8231"/>. The PCE can set the F flag or the D flag in this TLV to control the PCC's behavior in case the requested binding value is unavailable. The F and D flags are mutually exclusive. If a PCEP speaker receives a TE-PATH-BINDING TLV where both the F flag and the D flag are set, the PCEP speaker MUST send a PCErr message with Error-Type 10 (Reception of an invalid object) and Error-Value TBD5 (Mutually exclusive F and D flags are both set). The LSP instantiation or update request associated with this
        malformed TLV MUST be rejected.
      </t>
      <t>
        When both F=0 and D=0, the current behavior as specified in <xref target="RFC9604"/> applies: the LSP instantiation fails if the requested binding value is unavailable.
      </t>
      <t>
        If a PCEP speaker receives a TE-PATH-BINDING TLV with the A flag set in a PCInitiate or PCUpd message, the PCEP speaker MUST send a PCErr message with Error-Type 10 (Reception of an invalid object) and Error-Value TBD7 (A flag incorrectly set by PCE). The LSP instantiation or update request associated with this malformed TLV MUST be rejected.
      </t>
      <t>
        If the PCC receives a TE-PATH-BINDING TLV with the F flag set and the requested binding value is unavailable, the PCC MUST attempt to allocate a new binding value from its dynamic pool. If successful, the LSP is brought up with the new binding value.
      </t>
      <t>
        If the PCC receives a TE-PATH-BINDING TLV with the D flag set and the requested binding value is unavailable, the PCC MUST instantiate the LSP but keep it in a down state.
      </t>
      <t>
        If the PCC attempts to allocate a binding value from its dynamic pool (when the F flag is set) but the allocation fails due to pool exhaustion or other reasons, the PCC MUST report the LSP in a down state with appropriate error indication in the PCRpt message.
      </t>
      <t>
        In its Path Computation LSP State Report (PCRpt) message <xref target="RFC8231"/>, the PCC reports the status of the binding value allocation. If the originally requested binding value and the allocated binding value differ, two instances of the TE-PATH-BINDING TLV MUST be included in the PCRpt message:
        <ul spacing="compact">
          <li>A TLV instance with the originally requested binding value with the A flag cleared.</li>
          <li>A TLV instance with the actually allocated binding value with the A flag set.</li>
        </ul>
      </t>
      <t>
        For example, if the PCE requested BSID value 100 with the F flag set, but value 100 was unavailable and the PCC allocated BSID value 200 from its dynamic pool, the PCRpt message would contain:
        <ul spacing="compact">
          <li>TE-PATH-BINDING TLV with binding value 100, A flag = 0, F flag = 1</li>
          <li>TE-PATH-BINDING TLV with binding value 200, A flag = 1, F flag = 1</li>
        </ul>
        This allows the PCE to correlate what it requested with what was actually allocated.
      </t>
      <t>
        If the requested binding value was successfully allocated, only a single instance of the TE-PATH-BINDING TLV with the A flag set SHOULD be included in the PCEP message.
      </t>
      <t>
        For PCC-initiated LSPs, the PCC MAY set the F or D flags in the TE-PATH-BINDING TLV included in PCRpt messages to indicate the desired fallback behavior for the binding value. For PCE-initiated LSPs, the PCC MUST reflect the D and F flag values from the PCE's PCInitiate or PCUpd message in all TE-PATH-BINDING TLV instances included in PCRpt messages. This reflection ensures that the binding value allocation policy is propagated to all PCEs in redundant PCE deployments.
      </t>
      <t>
        The A, D, and F flags in the TE-PATH-BINDING TLV MUST NOT be used if one or both PCEP speakers have not set the BSID-FALLBACK-CAPABILITY in the STATEFUL-PCE-CAPABILITY TLV in their respective OPEN messages.
        If a PCEP speaker receives a PCEP message containing the A, D, or F flags in the TE-PATH-BINDING TLV, or any other element specific to these extensions, from a peer that has not advertised the BSID-FALLBACK-CAPABILITY in its OPEN message, the receiving PCEP speaker MUST send a PCErr message with Error-Type 10 (Reception of an invalid object) and Error-Value TBD6 (Unsupported Binding SID Extension Flags).
      </t>
    </section>
    <section title="Operational Considerations">
      <t>
        All operational requirements and considerations listed in <xref target="RFC5440"/>, <xref target="RFC8231"/>, and <xref target="RFC9604"/> apply to the PCEP extensions defined in this document.
      </t>
      <section title="Control of Function and Policy">
        <t>
          A PCE or PCC implementation SHOULD allow the BSID fallback capability to be enabled or disabled through configuration, either globally or on a per-LSP basis. An implementation SHOULD allow the operator to view the advertised and received BSID-FALLBACK-CAPABILITY flags.
        </t>
        <t>
          Implementations SHOULD provide configuration options to:
          <ul spacing="compact">
            <li>Enable or disable the BSID-FALLBACK-CAPABILITY advertisement</li>
            <li>Configure the range of binding values available for dynamic allocation</li>
            <li>Set policies for when to use fallback allocation (F flag) versus keeping LSP down (D flag)</li>
            <li>Define priority or preference for BSID allocation from the dynamic pool</li>
          </ul>
        </t>
      </section>
      <section title="Information and Data Models">
        <t>
          Implementations SHOULD provide operational state information including:
          <ul spacing="compact">
            <li>Whether BSID-FALLBACK-CAPABILITY is enabled and advertised</li>
            <li>List of LSPs with binding values, showing both requested and allocated values when they differ</li>
            <li>History of binding value allocation failures</li>
          </ul>
        </t>
        <t>
          A YANG data model for PCEP <xref target="RFC9604"/> MAY be extended to include:
          <ul spacing="compact">
            <li>Capability advertisement of BSID-FALLBACK-CAPABILITY</li>
            <li>Operational state showing requested versus allocated binding values</li>
            <li>Configuration parameters for dynamic binding value pool management</li>
          </ul>
        </t>
      </section>
      <section title="Liveness Detection and Monitoring">
        <t>
          Operators SHOULD monitor binding value allocation events and configure alerts for:
          <ul spacing="compact">
            <li>Binding value allocation failures due to unavailability</li>
            <li>Dynamic binding value pool utilization exceeding configured thresholds</li>
            <li>Frequent fallback allocations indicating potential BSID conflicts</li>
            <li>LSPs in down state due to D flag with unavailable binding values</li>
          </ul>
        </t>
        <t>
          Implementations SHOULD provide logging for binding value allocation events, including requested values, allocated values, and reasons for any allocation failures.
        </t>
      </section>
      <section title="Fault Management">
        <t>
          As specified in <xref target="Operation"/>, when BSID fallback allocation fails (for example, due to dynamic pool exhaustion), the LSP is reported as down with appropriate error indication. Implementations should provide clear diagnostic information to help operators identify the root cause of allocation failures, such as pool exhaustion, configuration errors, or BSID conflicts.
        </t>
        <t>
          Operators need to be aware that:
          <ul spacing="compact">
            <li>Binding value conflicts can occur due to configuration errors, race conditions, or pool exhaustion</li>
            <li>The D flag behavior (LSP down when requested BSID unavailable) may impact service availability and requires monitoring</li>
            <li>In redundant PCE deployments, binding value allocation state should be synchronized or coordinated to avoid conflicts</li>
          </ul>
        </t>
      </section>
    </section>
    <section title="Security Considerations">
      <t>
        The security considerations described in <xref target="RFC5440"/>, <xref target="RFC8231"/>, and <xref target="RFC9604"/> are applicable to this document.
      </t>
      <t>
        The extensions defined in this document introduce new operational behaviors that require careful security consideration:
      </t>
      <t>
        <ul spacing="compact">
          <li>Binding Value Allocation: The fallback mechanism allows a PCC to allocate binding values from its dynamic pool when requested values are unavailable. Implementations MUST ensure that the dynamic allocation process includes proper validation and does not allow unauthorized binding value usage. An attacker attempting to exhaust the dynamic pool through repeated requests with unavailable values could cause a denial-of-service condition. Implementations SHOULD implement rate limiting and monitoring of allocation failures.</li>
          <li>State Reporting: The mechanism for reporting both requested and allocated binding values provides visibility into binding value allocation. This information MUST be protected to prevent unauthorized correlation of network state. Implementations MUST validate that reported binding values in PCRpt messages accurately reflect the actual allocated values.</li>
          <li>LSP Down State: The D flag allows LSPs to be created in a down state when binding values are unavailable. Implementations need to ensure that this does not create opportunities for denial-of-service attacks where an attacker forces numerous LSPs into down state by requesting unavailable binding values.</li>
          <li>Flag Manipulation: The A, D, and F flags control critical allocation behavior. Implementations MUST enforce the rules for flag usage, including rejecting messages with the A flag set by a PCE and properly handling mutually exclusive F and D flags, as specified in <xref target="Operation"/>.</li>
        </ul>
      </t>
      <t>
        It is RECOMMENDED that these PCEP extensions only be activated on authenticated and encrypted sessions across PCEs and PCCs belonging to the same administrative authority, using Transport Layer Security (TLS) <xref target="RFC8253"/> as per the recommendations and best current practices in <xref target="RFC9325"/>. This is particularly important given the sensitivity of binding value allocation and the potential for denial-of-service attacks through pool exhaustion.
      </t>
      <t>
        Operators SHOULD carefully review and configure the dynamic binding value pool ranges to ensure adequate capacity while preventing overlap with statically configured binding values. Regular monitoring of binding value allocation patterns can help detect potential security issues or misconfigurations.
      </t>
    </section>
    <section title="IANA Considerations">
     <section anchor="SR-CAPABILITY-FLAG" title="STATEFUL-PCE-CAPABILITY TLV Flag">
      <t>
        IANA maintains the "STATEFUL-PCE-CAPABILITY TLV Flag Field" registry within the "Path Computation Element Protocol (PCEP) Numbers" registry group.
        See https://www.iana.org/assignments/pcep/pcep.xhtml#stateful-pce-capability-tlv-flag-field
      </t>
      <t>
        IANA is requested to make the following assignment:
      </t>
      <texttable>
        <ttcol>Bit</ttcol>
        <ttcol>Description</ttcol>
        <ttcol>Reference</ttcol>
        <c>TBA1</c>
        <c>E (BSID-FALLBACK-CAPABILITY)</c>
        <c>This document</c>
      </texttable>
	 </section>
	 <section anchor="TE-PATH-BINDING-FLAG" title="TE-PATH-BINDING TLV Flags">
      <t>
        IANA maintains the "TE-PATH-BINDING TLV Flag Field" registry within the "Path Computation Element Protocol (PCEP) Numbers" registry group.
        See https://www.iana.org/assignments/pcep/pcep.xhtml#te-path-binding-tlv-flag-field
      </t>
      <t>
        IANA is requested to make the following assignments:
      </t>
      <texttable>
        <ttcol>Bit</ttcol>
        <ttcol>Description</ttcol>
        <ttcol>Reference</ttcol>
        <c>TBA2</c>
        <c>A (Allocated)</c>
        <c>This document</c>
        <c>TBA3</c>
        <c>D (Down on BSID Unavailability)</c>
        <c>This document</c>
        <c>TBA4</c>
        <c>F (Fallback)</c>
        <c>This document</c>
      </texttable>
	 </section>
   <section anchor="PCERR-VALUES" title="PCEP Errors">
  <t>IANA maintains the "PCEP-ERROR Object Error Types and Values" registry within the "Path Computation Element Protocol (PCEP) Numbers" registry group.
     See https://www.iana.org/assignments/pcep/pcep.xhtml#pcep-error-object
  </t>
  <t>
     IANA is requested to make the following assignments:
  </t>

      <texttable>
        <ttcol>Error-Type</ttcol>
        <ttcol>Meaning</ttcol>
        <ttcol>Error-value</ttcol>
        <ttcol>Reference</ttcol>
        <c>10</c>
        <c>Reception of an invalid object</c>
        <c>TBD5: Mutually exclusive F and D flags are both set</c>
        <c>This document</c>
        <c></c>
        <c></c>
        <c>TBD6: Unsupported Binding SID Extension Flags</c>
        <c>This document</c>
        <c></c>
        <c></c>
        <c>TBD7: A flag incorrectly set by PCE</c>
        <c>This document</c>
      </texttable>
</section>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.5440"?>
      <?rfc include="reference.RFC.8174"?>
      <?rfc include="reference.RFC.8231"?>
      <?rfc include="reference.RFC.8253"?>
      <?rfc include="reference.RFC.8664"?>
      <?rfc include="reference.RFC.9325"?>
	  <?rfc include="reference.RFC.9604"?>
    </references>
    <references title="Informative References">
      <?rfc include="reference.RFC.4655"?>
      <?rfc include="reference.RFC.9603"?>
    </references>
    <section title="Acknowledgements">
      <t>The authors would like to thank Rajesh Melarcode Venkateswaran for their contributions to this document.</t>
    </section>
  </back>
</rfc>
