<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
There has to be one entity for each item to be referenced. 
An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
(Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="no" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
(using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-koldychev-pce-operational-05" ipr="trust200902">
<!-- category values: std, bcp, info, exp, and historic
ipr values: full3667, noModification3667, noDerivatives3667
you can add the attributes updates="NNNN" and obsoletes="NNNN" 
they will automatically be output with "(if approved)" -->

<!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="PCEP CLARIFICATION">
    PCEP Operational Clarification</title>

    <author fullname="Mike Koldychev" initials="M." surname="Koldychev">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>2000 Innovation Drive</street>
          <city>Kanata</city>
          <region>Ontario</region>
          <code>K2K 3E8</code>
          <country>Canada</country>
        </postal>
        <email>mkoldych@cisco.com</email>
      </address>
    </author>

    <author fullname="Siva Sivabalan" initials="S." surname="Sivabalan">
      <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>ssivabal@ciena.com</email>
      </address>
    </author>

    <author fullname="Shuping Peng" initials="S." surname="Peng">
      <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>pengshuping@huawei.com</email>
      </address>
    </author>

    <author fullname="Diego Achaval" initials="D." surname="Achaval">
      <organization>Nokia</organization>
      <address>
        <email>diego.achaval@nokia.com</email>
      </address>
    </author>

    <author fullname="Hari Kotni" initials="H." surname="Kotni">
      <organization>Juniper Networks, Inc</organization>
      <address>
        <email>hkotni@juniper.net</email>
      </address>
    </author>

    <date month="February" year="2022" />

    <workgroup>PCE Working Group</workgroup>

<abstract>
<t>
This document proposes some important simplifications to the original PCEP protocol and also serves to clarify certain aspects of PCEP operation.
The content of this document has been compiled based on the feedback from several multi-vendor interop exercises.
Several constructs are introduced, such as the LSP-DB and the ASSO-DB.
</t>
</abstract> 

<note 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 target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
</note>
</front>

<middle>

<section anchor="Introduction" title="Introduction">

<t>
The PCEP protocol started off being purely stateless with PCReq and PCReply messages, as described in Path Computation Element (PCE) Communication Protocol (PCEP) <xref target="RFC5440"/>.
Stateless PCEP operates in a "pull" model, i.e., PCC has to periodically ask the PCE for updates to the path, even if the path has not changed.
</t>

<t>
Stateful PCEP was later introduced in PCEP Extensions for the Stateful PCE Model <xref target="RFC8231"/>.
Stateful PCEP operates in a "push" model, where the PCC can register with PCE to receive future updates about the path, and there is no need to ask the PCE periodically.
The current document serves to optimize the original procedure in <xref target="RFC8231"/> to drop the PCReq and PCReply exchange, which greatly simplifies implementation and optimizes the protocol.
</t>

<t>
Due to different interpretations of PCEP standards, it was found that implementations often had to adjust their behavior in order to interoperate.
The current document serves to clarify certain aspects of PCEP to make it easier to produce interoperable implementations of PCEP.
</t>

</section> <!-- Introduction -->

<section anchor="Terminology" title="Terminology">

<t>The following terminologies are used in this document:

<list style="hanging">

<t hangText="PCC:"> Path Computation Client. Any client application requesting a path computation to be performed by a Path Computation Element.</t>

<t hangText="PCE:"> Path Computation Element. An entity (component, application, or network node) that is capable of computing a network path or route based on a network graph and applying computational constraints.</t>

<t hangText="PCEP:"> Path Computation Element Protocol.</t>

<t hangText="MBB:"> Make-Before-Break. A procedure during which the head-end of a traffic-engineered path wishes to move traffic to a new path without losing any traffic, by first "making" a new path and then "breaking" the old path.</t>

<t hangText="Association parameters:"> As described in <xref target="RFC8697"/>, the combination of the mandatory fields Association type, Association ID and Association Source in the ASSOCIATION object uniquely identify the association group.  If the optional TLVs - Global Association Source or Extended Association ID are included, then they MUST be included in combination with mandatory fields to uniquely identify the association group.</t>

<t hangText="Association information:"> As described in <xref target="RFC8697"/>, the ASSOCIATION object could also include other optional TLVs based on the association types, that provides 'information' related to the association type.</t>

<t hangText="ERO:"> Explicit Route Object is the path of the LSP encoded into a PCEP object. To represent an empty ERO object, i.e., without any subobjects, we use the notation "ERO={}". To represent an ERO object containing some given sequence of subobjects, we use the notation "ERO={A}".</t>

</list>
</t>

</section> <!-- Terminology -->

<section anchor="LSP_DB" title="PCEP LSP Database">

<t>We introduce the concept of the LSP-DB, as a database of actual LSP state in the network. This concept is not explicitly defined in <xref target="RFC8231"/>, but is fully compatible with it. We use the LSP-DB to describe how certain actions are performed, because it is easier to define actions as a function of database state, rather than as a function of previously received messages. The structure and format of the LSP-DB MUST be common among all dataplane types (i.e., RSVP-TE/SR-TE/SRv6), all instantiation methods (i.e., PCC-initiated/PCE-initiated), all destination types (i.e., point-to-point/point-to-multipoint).</t>

<t>Note that we use the term "Tunnel" somewhat loosely here, to mean "the object identified by the PLSP-ID". It may or may not be an actual tunnel in the implementation. For example, working and protect paths can be implemented as one tunnel interface, but in PCEP we would refer to them as two different Tunnels, because they would have different PLSP-IDs.</t>

<t>Note that the term "LSP", which stands for "Label Switched Path", if taken too literally would restrict our discussion to MPLS dataplane only. In this document, we allow the term "LSP" to refer to any path, regardless of the dataplane format. So that an LSP can refer to MPLS and SRv6 dataplane paths.</t>

<section anchor="LSP_DB_STRUCTURE" title="Structure">

<t><xref target="RFC8231"/> states that the LSP-IDENTIFIERS TLV contains the key that MUST be used to differentiate different LSPs during make before break procedure. We further clarify here that PCEP LSPs exist in a 2-tier structure. The top tier is the "Tunnel", identified by the PLSP-ID and/or SYMBOLIC-NAME, while the lower tier is the "LSP", identified by the values in LSP-IDENTIFIERS TLV. A single Tunnel may contain multiple LSPs at the same time, i.e., a Tunnel is a container for LSPs. A Tunnel MUST have at least one LSP and when the last LSP is removed from the Tunnel, the Tunnel itself is removed.</t>

</section> <!-- LSP_DB_STRUCTURE -->


<section anchor="LSP_DB_SYNC" title="Synchronization">

<t>The stateful PCE MUST maintain the PCE LSP-DB, which stores Tunnels and LSPs. The PCE LSP DB is only modified by PCRpt messages. No other PCEP message may modify the PCE LSP DB. The PCC MUST also maintain the PCC LSP DB, which it MUST synchronize with the PCE LSP DB by sending PCRpt messages.</t>

<t>The PCC adds/removes entries to/from its LSP-DB based on what LSPs it creates/destroys in the network. There can be many trigger types for updating the PCC LSP-DB, some examples include PCUpd messages, local computation on the PCC, local configuration on the PCC, etc. The trigger type does not affect the content of the PCC LSP-DB, i.e., the content of the PCC LSP-DB is updated identically regardless of the trigger type.</t>

<t>Whenever a PCC modifies an entry in its PCC LSP-DB, it MUST send a PCRpt message to the PCE (or multiple PCEs), to synchronize this change. Ensuring this synchronization is always in place allows one to define behavior as a function of LSP-DB state, instead of defining behavior as a function of what PCEP messages were sent or received.</t>

<t>The PCE MUST always act on the latest state of the PCE LSP DB. Note that this does not mean that the PCE cannot use information from outside of LSP-DB. For example, the PCE can use other mechanisms to collect traffic statistics and use them in the computation. However, these traffic statistics are not part of the LSP-DB, but only reference it.</t>

<t>The LSP-DB on both the PCC and the PCE only stores the actual state in the network, it does not store the desired state. For example, consider the case of PCE Initiated LSP, configured on the PCE. When the operator modifies the configuration of this LSP, that is a change in desired state. The actual state has not yet changed, so LSP-DB is not modified yet. The LSP-DB is only modified after the PCE sends PCInit/PCUpd message to the PCC and the PCC decides to act on that message. When the PCC acts on message, it would update its own PCC LSP DB and immediately send PCRpt to the PCE to synchronize the change. When the PCE receives the PCRpt msg, it updates its own PCE LSP DB. After this, the PCC LSP DB and PCE LSP DB are in sync.</t>

</section> <!-- LSP_DB_SYNC -->


<section anchor="LSP_DB_EMPTY" title="Stateful Bringup">

<t><xref target="RFC8231"/> in section 5.8.2, allows delegation of an LSP in operationally down state, but at the same time mandates the use of PCReq, before sending PCRpt. In this document, we would like to make it clear that sending PCReq is optional.</t>
<t>We shall refer to the process of sending PCReq before PCRpt as "stateless bringup". In reality, stateless bringup introduces overhead and is not possible to enforce from the PCE, because the stateless PCE is not supposed to keep any per-LSP state about previous PCReq messages. It was found that many vendors choose to ignore this requirement and send the PCRpt directly, without going through PCReq. This section will serve to explain and to validate this behavior.</t>
<t>Even though all the major vendors today are moving to the stateful PCE model, it does not deprecate the need for stateless PCEP. The key property of stateless PCEP is that PCReq messages MUST NOT modify the state of the PCE LSP-DB in any way. Therefore, PCReq messages are useful for many OAM ping/traceroute applications where the PCC wishes to probe the network without having any effect on the existing LSPs.</t>
<t>The PCC MAY delegate an empty LSP to the PCE and then wait for the PCE to send PCUpd, without sending PCReq. We shall refer to this process as "stateful bringup". The PCE MUST support the original stateless bringup, for backward compatibility purposes. Supporting stateful bringup should not require introducing any new behavior on the PCE, because as mentioned earlier, the PCE MUST NOT modify LSP-DB state based on PCReq messages. So whether the PCE has received a PCReq or not, it MUST process the PCRpt all the same.</t>
<t>An example of stateful bringup follows. In our example the PCC starts off by using LSP-ID of 0. The value 0 does not hold any special meaning, any other 16-bit value could have been used.</t>

<t>PCC has no LSP yet, but wants to establish a path. PCC sends PCRpt(R-FLAG=0, D-flag=1, OPER-FLAG=DOWN, PLSP-ID=100, LSP-ID=0, ERO={}).</t>
<t>
<figure anchor="LSP_DB_EMPTY_CONTENT_1" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=0, D-flag=1, OPER=DOWN, ERO={}       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC received a PCUpd from the PCE and has decided to install the ERO={A} from that PCUpd. PCC sends PCRpt(R-FLAG=0, D-flag=1, OPER-FLAG=UP, PLSP-ID=100, LSP-ID=0, ERO={A}).</t>
<t>
<figure anchor="LSP_DB_EMPTY_CONTENT_2" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=0, D-flag=1, OPER=UP, ERO={A}        |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

</section> <!-- LSP_DB_EMPTY -->



<section anchor="LSP_DB_MBB" title="Successful MBB">

<t>Below we give an example of doing MBB to switch the Tunnel from one path to another. We represent the path encoded into the ERO object as ERO={A} and ERO={B}.</t>

<t>PCC has an existing LSP in UP state, with LSP-ID=2. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=2, ERO={A}, OPER-FLAG=UP).</t>
<t><figure anchor="LSP_DB_CONTENT_MBB_1" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=2, ERO={A}, OPER=UP                  |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC initiates the MBB procedure by creating a new LSP with LSP-ID=3. It does not matter what triggered the creation of the new LSP, it could have been due to a new path received via PCUpd (if the given Tunnel is delegated), or it could have been local computation on the PCC (if the Tunnel is locally computed on the PCC), or it could have been a change in configuration on the PCC (if the Tunnel's path is explicitly configured on the PCC). It is important to emphasize that the procedure for updating the LSP-DB is common, regardless of the trigger that caused the change.</t>
<t>PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=3, ERO={B}, OPER-FLAG=UP).</t>
<t>
<figure anchor="LSP_DB_CONTENT_MBB_2" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=2, ERO={A}, OPER=UP                  |
  |                 | LSP-ID=3, ERO={B}, OPER=UP                  |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>After traffic has successfully switched to the new LSP, the PCC cleans up the old LSP. PCC sends PCRpt(R-FLAG=1, PLSP-ID=100, LSP-ID=2).</t>
<t>
<figure anchor="LSP_DB_CONTENT_MBB_4" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=3, ERO={B}, OPER=UP                  |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>
</section> <!-- LSP_DB_MBB -->




<section anchor="LSP_DB_MBB_ABORT" title="Aborted MBB">

<t>The MBB process can abort when the newly created LSP is destroyed before it is installed as traffic carrying. This scenario is described below.</t>

<t>PCC has an existing LSP in UP state, with LSP-ID=2. PCC sends PCRpt(R-FLAG=0, OPER-FLAG=UP, PLSP-ID=100, LSP-ID=2).</t>
<t>
<figure anchor="LSP_DB_MBB_ABORT_CONTENT_1" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=2, OPER=UP                           |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>MBB procedure is initiated, a new LSP is created with LSP-ID=3. LSP is currently being established, so its oper state is DOWN. PCC sends PCRpt(R-FLAG=0, OPER-FLAG=DOWN, PLSP-ID=100, LSP-ID=3).</t>
<t>
<figure anchor="LSP_DB_MBB_ABORT_CONTENT_2" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=2, OPER=UP                           |
  |                 | LSP-ID=3, OPER=DOWN                         |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>MBB procedure is aborted. PCC sends PCRpt(R-FLAG=1, PLSP-ID=100, LSP-ID=3).</t>
<t>
<figure anchor="LSP_DB_MBB_ABORT_CONTENT_3" title="Content of LSP DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | TUNNEL          | LSP                                         |
  +-----------------+---------------------------------------------+
  | PLSP-ID=100     | LSP-ID=2, OPER=UP                           |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

</section> <!-- LSP_DB_MBB_ABORT -->


</section> <!-- LSP_DB -->


<section anchor="ASSO_DB" title="PCEP Association Database">

<t>PCEP Association is a group of zero or more LSPs.</t>

<t>The PCE ASSO DB is populated by PCRpt messages and MAY also be populated via configuration on the PCE itself. An Association is identified by the Association Parameters. The Association parameters contain many fields, so for convenience we will group all the fields into a single value. We will use ASSO_PARAM=A, ASSO_PARAM=B, to refer to different PCEP Associations: A and B, respectively.</t>

<section anchor="ASSO_DB_2LSP_1ASSO" title="2 LSPs in same Association">

<t>Below, we give an example of LSPs joining the same Association.</t>

<t>PCC creates the first LSP. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=1, ASSO_PARAM=A, ASSO_R_FLAG=0).</t>
<t>
<figure anchor="ASSO_DB_2LSP_1ASSO_CONTENT_1" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC creates the second LSP. PCC sends PCRpt(R-FLAG=0, PLSP-ID=200, LSP-ID=1, ASSO_PARAM=A, ASSO_R_FLAG=0).</t>
<t>
<figure anchor="ASSO_DB_2TUN_1ASSO_CONTENT_2" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  |                 | PLSP-ID=200, LSP-ID=1                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC updates the first LSP, the PCC is NOT REQUIRED to send the ASSOCIATION object in this PCRpt, 
since the LSP is already in the Association. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=1). The 
content of the PCE ASSO DB is unchanged. Note that the PCC MUST send the ASSOCIATION OBJECT in the first PCRpt during SYNC state, even if it has already issued a PCRpt with the association object sometime in the past with this PCE. The synchronization steps outlined in <xref target="RFC8697"/> are to be followed.</t>
<t>
<figure anchor="ASSO_DB_2TUN_1ASSO_CONTENT_3" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  |                 | PLSP-ID=200, LSP-ID=1                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC decides to delete the second LSP. PCC sends PCRpt(R-FLAG=1, PLSP-ID=200, LSP-ID=1).</t>
<t>
<figure anchor="ASSO_DB_2TUN_1ASSO_CONTENT_4" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC decides to remove the first LSP from the Association, but not delete 
the LSP itself. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=1, ASSO_PARAM=A, ASSO_R_FLAG=1).
The PCE ASSO DB is now empty.</t>
<t>
<figure anchor="ASSO_DB_2TUN_1ASSO_CONTENT_5" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    |                                             |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

</section> <!-- ASSO_DB_2TUN_1ASSO -->


<section anchor="ASSO_DB_SWITCH_ASSO" title="Switch Association during MBB">

<t>Each new LSP (identified by the LSP-ID) does not inherit the Association membership of any previous LSPs within the same Tunnel. This is done so that a Tunnel can have two LSPs that are in different Associations, this may be required when switching from one Association to another.</t>

<t>Below, we give an example a Tunnel going through MBB and switching from Association A to Association B.</t>

<t>PCC creates the first LSP. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=1, ASSO_PARAM=A, ASSO_R_FLAG=0).</t>
<t>
<figure anchor="ASSO_DB_SWITCH_ASSO_CONTENT_1" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC creates the MBB LSP in a different Association. PCC sends PCRpt(R-FLAG=0, PLSP-ID=100, LSP-ID=2, ASSO_PARAM=B, ASSO_R_FLAG=0).</t>
<t>
<figure anchor="ASSO_DB_SWITCH_ASSO_CONTENT_2" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=A    | PLSP-ID=100, LSP-ID=1                       |
  +---------------------------------------------------------------+
  | ASSO_PARAM=B    | PLSP-ID=100, LSP-ID=2                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

<t>PCC deletes the old LSP. PCC sends PCRpt(R-FLAG=1, PLSP-ID=100, LSP-ID=1).</t>
<t>
<figure anchor="ASSO_DB_SWITCH_ASSO_CONTENT_3" title="Content of PCE ASSO DB">
<artwork align="left"><![CDATA[
  +---------------------------------------------------------------+
  | ASSO            | LSP                                         |
  +-----------------+---------------------------------------------+
  | ASSO_PARAM=B    | PLSP-ID=100, LSP-ID=2                       |
  +---------------------------------------------------------------+
]]></artwork>
</figure>
</t>

        
</section> <!-- ASSO_DB_2TUN_1ASSO -->

</section> <!-- ASSO_DB  -->


<section anchor="COMP_CONST" title="Computation Constraints">

<t>For any PCEP object that does not have an explicit removal flag, the absence of that object indicates removal of the constraint specified by that object. For example, suppose the first state-report contains an LSPA object with some affinity constraints. Then if a subsequent state-report does not contain an LSPA object, then this means that the previously specified affinity constraints do not apply anymore. Same applies to all PCEP objects, like METRIC, BANDWIDTH, etc., which do not have an explicit flag for removal. This simply ensures that it is possible to remove a constraint without using an explicit removal flag.</t>

</section> <!-- COMP_CONST  -->


<section anchor="RRO" title="Use of RRO, SR-RRO and SRv6-RRO objects">

<t><xref target="RFC8231"/> defines a PCRpt message which contains &#60;intended-path&#62; known as the ERO object and &#60;actual-path&#62; known as the RRO object. <xref target="RFC8664"/> defines SR-ERO and SR-RRO objects for SR-TE LSPs. <xref target="I-D.ietf-pce-segment-routing-ipv6"/> further defines SRv6-ERO and SRv6-RRO objects for SRv6-TE paths.</t>

<t>In practice RRO data set is the result of signalling of the intended path defined in the ERO via protocol such as RSVP. The ERO and RRO values may be different as the path encoded in the ERO may differ than the RRO such as during protection conditions or if the ERO contains loose hops which are expanded upon. As Segment Routing LSP does not perform any signalling, the values of an SR-ERO/SRv6-ERO and SR-RRO/SRv6-RRO (respectively) are in practice the same, therefore some implementations have omitted the SR-RRO/SRv6-RRO when reporting a SR-TE LSP while others continue to send both SR-ERO/SRv6-ERO and SR-RRO/SRv6-RRO values.</t>
 
<t>A PCC MUST send an (possibly empty) ERO/SR-ERO/SRv6-ERO in the PCRpt message for every LSP. A PCC MAY send an SR-RRO/SRv6-RRO for an SR-TE/SRv6-TE LSP (respectively). A PCE SHOULD interpret the RRO/SR-RRO/SRv6-RRO as the actual path the LSP is taking but MAY interpret only the ERO/SR-ERO/SRv6-ERO as the actual path. In the absence of an RRO/SR-RRO/SRv6-RRO a PCE SHOULD interpret the ERO/SR-ERO/SRv6-ERO (respectively) as the actual path for the LSP.</t>

</section> <!-- RRO -->


<section anchor="SECURITY" title="Security Considerations">

<t>None at this time.</t>

</section> <!-- SECURITY  -->


<section anchor="IANA" title="IANA Considerations">

<t>None at this time.</t>

</section> <!-- IANA  -->


<section anchor="Acknowledgement" title="Acknowledgement">
</section> <!-- Acknowledgement -->

</middle>

<back>

<references title="Normative References">
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5440.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8231.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8664.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8697.xml"?>
  <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-pce-segment-routing-ipv6"?>
</references>
  
<section title="Contributors">

<t><figure><artwork>
Dhruv Dhody
Huawei Technologies
Divyashree Techno Park, Whitefield
Bangalore, Karnataka  560066
India

Email: dhruv.ietf@gmail.com
</artwork></figure></t>  

<t><figure><artwork>
Andrew Stone
Nokia
Ottawa, Canada

Email: andrew.stone@nokia.com
</artwork></figure></t> 
 
<t><figure><artwork>
Samuel Sidor
Cisco Systems
Bratislava, Slovakia

Email: ssidor@cisco.com
</artwork></figure></t> 
 
<t><figure><artwork>
Mahendra Singh Negi
RtBrick Inc
N-17L, 18th Cross Rd, HSR Layout
Bangalore, Karnataka  560102
India

Email: mahend.ietf@gmail.com
</artwork></figure></t> 

</section> <!-- Contributors -->

</back>

</rfc>

