<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.2.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-teas-yang-path-computation-26" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Yang for Path Computation">A YANG Data Model for requesting path computation</title>

    <author initials="I." surname="Busi" fullname="Italo Busi" role="editor">
      <organization>Huawei Technologies</organization>
      <address>
        <email>italo.busi@huawei.com</email>
      </address>
    </author>
    <author initials="S." surname="Belotti" fullname="Sergio Belotti" role="editor">
      <organization>Nokia</organization>
      <address>
        <email>sergio.belotti@nokia.com</email>
      </address>
    </author>
    <author initials="O." surname="Gonzalez de Dios" fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author initials="A." surname="Sharma" fullname="Anurag Sharma">
      <organization>Google</organization>
      <address>
        <email>ansha@google.com</email>
      </address>
    </author>
    <author initials="Y." surname="Shi" fullname="Yan Shi">
      <organization>China Unicom</organization>
      <address>
        <email>shiyan49@chinaunicom.cn</email>
      </address>
    </author>

    <date year="2026" month="February" day="05"/>

    
    <workgroup>TEAS Working Group</workgroup>
    

    <abstract>


<?line 86?>

<t>There are scenarios, typically in a hierarchical Software-Defined
   Networking (SDN) context, where the topology information provided by
   a Traffic Engineering (TE) network provider may be insufficient for
   its client to perform multi-domain path computation. In these cases the
   client would need to request the TE network provider to compute some
   intra-domain paths to be used by the client to choose the optimal multi-domain paths.</t>

<t>This document provides a mechanism to request path computation by augmenting the Remote Procedure Calls (RPCs) defined in RFC YYYY.</t>

<t>[RFC EDITOR NOTE: Please replace RFC YYYY with the RFC number of
   draft-ietf-teas-yang-te once it has been published.</t>

<t>Moreover, this document describes some use cases where the path
   computation request, via YANG-based protocols (e.g., NETCONF or
   RESTCONF), can be needed.</t>



    </abstract>



  </front>

  <middle>


<?line 104?>

<section anchor="intro"><name>Introduction</name>

<t anchor="pc-model">There are scenarios, typically in a hierarchical Software-Defined
   Networking (SDN) context, where the topology information provided by
   a Traffic Engineering (TE) network provider may be insufficient for
   its client to perform multi-domain path computation. In these cases the
   client would need to request the TE network provider to compute some
   intra-domain paths that could be used together with its topology information
   to compute the multi-domain path.</t>

<t>These types of scenarios can be applied to different interfaces in
   different reference architectures:</t>

<t><list style="symbols">
  <t>Application-Based Network Operations (ABNO) control interface
<xref target="RFC7491"/>, in which an Application Service Coordinator can request the
ABNO controller to take in charge path calculation (see Figure 1
in <xref target="RFC7491"/>).</t>
  <t>Abstraction and Control of TE Networks (ACTN) <xref target="RFC8453"/>, where a
controller hierarchy is defined.
In the ACTN context, path computation is needed on the interface
between Customer Network Controller (CNC)  and Multi-Domain
Service Coordinator (MDSC), called CNC-MDSC Interface (CMI),
and on the interface between MSDC and Provisioning Network
Controller (PNC), called MDSC-PNC Interface  (MPI). 
<xref target="RFC8454"/> describes an information model for the Path
Computation request.  <vspace blankLines='1'/>
Multiple protocol solutions can be used for communication between
different controller hierarchical levels. This document assumes that
the controllers are communicating using YANG-based protocols (e.g.,
NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>).  <vspace blankLines='1'/>
Path Computation Elements (PCEs), controllers and orchestrators
perform their operations based on Traffic Engineering Databases
(TED). Such TEDs can be described, in a technology agnostic way, with
the YANG data model for TE Topologies <xref target="RFC8795"/>. Furthermore, the
technology specific details of the TED are modelled in the technology
specific topology models, e.g., the <xref target="I-D.ietf-ccamp-otn-topo-yang"/> for Optical Transport
Network (OTN) Optical Data Unit (ODU) technologies, which augment the
common TE topology model in <xref target="RFC8795"/>.  <vspace blankLines='1'/>
The availability of such topology models allows the provisioning of
the TED using YANG-based protocols (e.g., NETCONF or RESTCONF).
Furthermore, it enables a PCE/controller performing the necessary
abstractions or modifications and offering this customized topology
to another PCE/controller or high level orchestrator.  <vspace blankLines='1'/>
The tunnels that can be provided over the networks described with the
topology models can be also set-up, deleted and modified via YANG-
based protocols (e.g., NETCONF or RESTCONF) using the TE tunnel YANG
data model <xref target="I-D.ietf-teas-yang-te"/>.  <vspace blankLines='1'/>
This document defines a YANG data model <xref target="RFC7950"/> that augments the RPC defined in <xref target="I-D.ietf-teas-yang-te"/>. The use of this RPC is complimentary to the configuration of a TE tunnel path in "compute-only" mode, as described in <xref target="I-D.ietf-teas-yang-te"/>.  <vspace blankLines='1'/>
The YANG data model definition does not make any assumption about
whether that the client or the server implement a "PCE"
functionality, as defined in <xref target="RFC4655"/>, and the Path Computation
Element Communication Protocol (PCEP) protocol, as defined in
<xref target="RFC5440"/>.  <vspace blankLines='1'/>
Moreover, this document describes some use cases where a path
computation request, via YANG-based protocols (e.g., NETCONF or
RESTCONF), can be needed.  <vspace blankLines='1'/>
The YANG data model defined in this document conforms to the Network
Management Datastore Architecture <xref target="RFC8342"/>.</t>
</list></t>

<section anchor="terminology"><name>Terminology</name>

<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.
<?line -6?></t>

<t>TED:</t>

<ul empty="true"><li>
  <t>The traffic engineering database is a collection of all TE
   information about all TE nodes and TE links in a given network.</t>
</li></ul>

<t>PCE:</t>

<ul empty="true"><li>
  <t>A Path Computation Element (PCE) is an entity that is capable of
   computing a network path or route based on a network graph, and of
   applying computational constraints during the computation.  The PCE
   entity is an application that can be located within a network node or
   component, on an out-of-network server, etc.  For example, a PCE
   would be able to compute the path of a TE Label Switched Path (LSP)
   by operating on the TED and considering bandwidth and other
   constraints applicable to the TE LSP service request. <xref target="RFC4655"/>.</t>
</li></ul>

<t>Domain:</t>

<ul empty="true"><li>
  <t>TE information is the data relating to nodes and TE links
   that is used in the process of selecting a TE path.  TE information
   is usually only available within a network.  We call such a zone of
   visibility of TE information a domain.  An example of a domain may be
   an IGP area or an Autonomous System. <xref target="RFC7926"/></t>
</li></ul>

<t>The terminology for describing YANG data models is found in
   <xref target="RFC7950"/>.</t>

</section>
<section anchor="tree-diagram"><name>Tree Diagram</name>

<t>Tree diagrams used in this document follow the notation defined in
   <xref target="RFC8340"/>.</t>

</section>
<section anchor="prefixes-in-data-node-names"><name>Prefixes in Data Node Names</name>

<t>In this document, names of data nodes and other data model objects
   are prefixed using the standard prefix associated with the
   corresponding YANG imported modules, as shown in <xref target="tab-prefix"/>.</t>

<texttable title="Prefixes and corresponding YANG modules" anchor="tab-prefix">
      <ttcol align='left'>Prefix</ttcol>
      <ttcol align='left'>YANG module</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>te-types</c>
      <c>ietf-te-types</c>
      <c>[RFCZZZZ]</c>
      <c>te</c>
      <c>ietf-te</c>
      <c>[RFCYYYY]</c>
      <c>te-pc</c>
      <c>ietf-te-path-computation</c>
      <c>RFCXXXX</c>
</texttable>

<t>RFC Editor Note:
Please replace XXXX with the RFC number assigned to this document.
Please replace YYYY with the RFC number of <xref target="I-D.ietf-teas-yang-te"/> once it has been published.
Please replace ZZZZ with the RFC number of <xref target="I-D.ietf-teas-rfc8776-update"/> once it has been published.
Please remove this note.</t>

</section>
</section>
<section anchor="use-cases"><name>Use Cases</name>

<t>This section presents some use cases, where a client needs to request
   underlying SDN controllers for path computation.</t>

<t>The use of the YANG data model defined in this document is not
   restricted to these use cases but can be used in any other use case
   when deemed useful.</t>

<t>The presented uses cases have been grouped, depending on the
   different underlying topologies: Packet/Optical Integration (<xref target="poi-uc"/>);
   multi-domain Traffic Engineered (TE) Networks (<xref target="md-uc"/>); and Data Center
   Interconnections (<xref target="dci-uc"/>). Use cases in <xref target="brpc-uc"/> and <xref target="hpce-uc"/>
   respectively present how to
   apply this YANG data model for standard multi-domain PCE i.e.
   Backward Recursive Path Computation <xref target="RFC5441"/> and Hierarchical PCE
   <xref target="RFC6805"/>.</t>

<section anchor="poi-uc"><name>Packet/Optical Integration</name>

<t>In this use case, an optical domain is used to provide connectivity
   to some nodes of a packet domain (see <xref target="fig-poi-uc"/>).</t>

<figure title="Packet/Optical Integration use case" anchor="fig-poi-uc"><artwork type="ascii-art" name="poi-use-case.txt"><![CDATA[
                                +----------------+
                                |                |
                                | Packet/Optical |
                                |  Coordinator   |
                                |                |
                                +---+------+-----+
                                    |      |
                       +------------+      |
                       |                   +-----------+
                +------V-----+                         |
                |            |                  +------V-----+
                | Packet     |                  |            |
                | Domain     |                  | Optical    |
                | Controller |                  | Domain     |
                |            |                  | Controller |
                +------+-----+                  +-------+----+
                       |                                |
              .........V.........................       |
              :          packet domain          :       |
          +----+                               +----+   |
          | R1 |= = = = = = = = = = = = = = = =| R2 |   |
          +-+--+                               +--+-+   |
            | :                                 : |     |
            | :................................ : |     |
            |                                     |     |
            |               +-----+               |     |
            |    ...........| Opt |...........    |     |
            |    :          |  C  |          :    |     |
            |    :         /+--+--+\         :    |     |
            |    :        /    |    \        :    |     |
            |    :       /     |     \       :    |     |
            |   +-----+ /   +--+--+   \ +-----+   |     |
            |   | Opt |/    | Opt |    \| Opt |   |     |
            +---|  A  |     |  D  |     |  B  |---+     |
                +-----+\    +--+--+    /+-----+         |
                 :      \      |      /      :          |
                 :       \     |     /       :          |
                 :        \ +--+--+  / optical<---------+
                 :         \| Opt |/  domain :
                 :..........|  E  |..........:
                            +-----+
]]></artwork></figure>

<t><xref target="fig-poi-uc"/> as well as <xref target="fig-poi-abstraction"/> describe two different
   examples of packet/optical topologies and only show a partial view of the
   packet network connectivity, before additional packet connectivity is
   provided by the optical network.</t>

<t>It is assumed that the Optical Domain Controller provides to the
   Packet/Optical Coordinator an abstracted view of the optical network.
   A possible abstraction could be to represent the whole optical
   network as one "virtual node" with "virtual ports" connected to the
   access links, as shown in <xref target="fig-poi-abstraction"/>.</t>

<t>It is also assumed that Packet Domain Controller can provide the
   Packet/Optical Coordinator the information it needs to set up
   connectivity between packet nodes through the optical network (e.g.,
   the access links).</t>

<t>The path computation request helps the Packet/Optical Coordinator to
   know the real connections that can be provided by the optical
   network.</t>

<figure title="Packet and Optical Topology Abstractions" anchor="fig-poi-abstraction"><artwork type="ascii-art" name="poi-topology-abstraction.txt"><![CDATA[
                       ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
                      ,  Packet/Optical Coordinator view          ,
                     ,                              +----+       , .
                    ,                               |    |      ,
                   ,                                | R2 |     ,   .
                  ,  +----+  +------------ +       /+----+    ,
                 ,   |    |  |             |/-----/ / /      ,     .
                ,    | R1 |--O VP1     VP4 O       / /      ,
               ,     |    |\ |             | /----/ /      ,       .
              ,      +----+ \|             |/      /      ,
             ,        /      O VP2     VP5 O      /      ,         .
            ,        /       |             |  +----+    ,
           ,        /        |             |  |    |   ,           .
          ,        /         O VP3     VP6 O--| R4 |  ,
         ,     +----+ /-----/|_____________|  +----+ ,             .
        ,      |    |/       +------------ +        ,
       ,       | R3 |                              ,               .
      ,        +----+                             ,,,,,,,,,,,,,,,,,
     ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,.
     . Packet Domain Controller view                +----+       ,
       only packet nodes and packet links           |    |      ,  .
     . with access links to the optical network     | R2 |     ,
                  ,  +----+                        /+----+    ,    .
     .           ,   |    |                 /-----/ / /      ,
                ,    | R1 |---                     / /      ,      .
     .         ,     +----+\                 /----/ /      ,
              ,        /    \               /      /      ,        .
     .       ,        /                           /      ,
            ,        /                        +----+    ,          .
     .     ,        /                         |    |   ,
          ,        /                       ---| R4 |  ,            .
     .   ,     +----+ /-----/                 +----+ ,
        ,      |    |/                              ,              .
     . ,       | R3 |                              ,
      ,        +----+                             ,,,,,,,,,,,,,,,,,.
     .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,
       Optical Domain Controller view                            , .
     . only optical nodes,        +--+                          ,
       optical links and         /|OF|                         ,   .
     . access links from the  +--++--+             /          ,
       packet network         |OA|    \     /-----/ /        ,     .
     .          ,          ---+--+--\  +--+/       /        ,
               ,           \   |  \  \-|OE|-------/        ,       .
     .        ,             \  |   \ /-+--+               ,
             ,               \+--+  X    |               ,         .
     .      ,                 |OB|-/ \   |              ,
           ,                  +--+-\  \+--+            ,           .
     .    ,                  /   \  \--|OD|---        ,
         ,            /-----/     +--+ +--+          ,             .
     .  ,            /            |OC|/             ,
       ,                          +--+             ,               .
     .,                                           ,,,,,,,,,,,,,,,,,,
      ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,
     . Actual Physical View                         +----+       ,
                    ,             +--+              |    |      ,
     .             ,             /|OF|              | R2 |     ,
                  ,  +----+   +--++--+             /+----+    ,
     .           ,   |    |   |OA|    \     /-----/ / /      ,
                ,    | R1 |---+--+--\  +--+/       / /      ,
     .         ,     +----+\   |  \  \-|OE|-------/ /      ,
              ,        /    \  |   \ /-+--+        /      ,
     .       ,        /      \+--+  X    |        /      ,
            ,        /        |OB|-/ \   |    +----+    ,
     .     ,        /         +--+-\  \+--+   |    |   ,
          ,        /         /   \  \--|OD|---| R4 |  ,
     .   ,     +----+ /-----/     +--+ +--+   +----+ ,
        ,      |    |/            |OC|/             ,
     . ,       | R3 |             +--+             ,
      ,        +----+                             ,
     .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
]]></artwork></figure>

<t>In this use case, the Packet/Optical Coordinator needs to set up an
   optimal underlying path for an IP link between R1 and R2.</t>

<t>As depicted in <xref target="fig-poi-abstraction"/>, the Packet/Optical Coordinator has only an
   "abstracted view" of the physical network, and it does not know the
   feasibility or the cost of the possible optical paths (e.g., VP1-VP4
   and VP2-VP5), which depend on the current status of the physical
   resources within the optical network and on vendor-specific optical
   attributes.</t>

<t>The Packet/Optical Coordinator can request the underlying Optical
   Domain Controller to compute a set of potential optimal paths, taking
   into account optical constraints. Then, based on its own constraints,
   policy and knowledge (e.g. cost of the access links), it can choose
   which one of these potential paths to use to set up the optimal end-
   to-end path crossing optical network.</t>

<figure title="Packet/Optical Integration path computation example" anchor="fig-poi-example"><artwork type="ascii-art" name="poi-example.txt"><![CDATA[
                    ............................
                    :                          :
                    O VP1                  VP4 O
           cost=10 /:\                        /:\ cost=10
                  / : \----------------------/ : \
          +----+ /  :         cost=50          :  \ +----+
          |    |/   :                          :   \|    |
          | R1 |    :                          :    | R2 |
          |    |\   :                          :   /|    |
          +----+ \  :  /--------------------\  :  / +----+
                  \ : /       cost=55        \ : /
            cost=5 \:/                        \:/ cost=5
                    O VP2                  VP5 O
                    :                          :
                    :..........................:
]]></artwork></figure>

<t>For example, in <xref target="fig-poi-example"/>, the Packet/Optical Coordinator can request
   the Optical Domain Controller to compute the paths between VP1-VP4
   and VP2-VP5 and then decide to set up the optimal end-to-end path
   using the VP2-VP5 optical path even if this is not the optimal path
   from the optical domain perspective.</t>

<t>Considering the dynamicity of the connectivity constraints of an
   optical domain, it is possible that a path computed by the Optical
   Domain Controller when requested by the Packet/Optical Coordinator is
   no longer valid/available when the Packet/Optical Coordinator
   requests it to be set up. This is further discussed in <xref target="rpc-motivation"/>.</t>

</section>
<section anchor="md-uc"><name>Multi-domain TE networks</name>

<t>In this use case there are two TE domains which are interconnected
   together by multiple inter-domains links.</t>

<t>A possible example could be a multi-domain optical network.</t>

<figure title="Multi-domain multi-link interconnection" anchor="md-ml-connection"><artwork type="ascii-art" name="multi-domain-use-case.txt"><![CDATA[
                            +--------------+
                            | Multi-Domain |
                            | Controller   |
                            +---+------+---+
                                |      |
                   +------------+      |
                   |                   +-----------+
            +------V-----+                         |
            |            |                         |
            | TE Domain  |                  +------V-----+
            | Controller |                  |            |
            |      1     |                  | TE Domain  |
            +------+-----+                  | Controller |
                   |                        |      2     |
                   |                        +------+-----+
          .........V..........                     |
          :                  :                     |
         +-----+             :                     |
         |     |             :            .........V..........
         |  X  |             :            :                  :
         |     |          +-----+      +-----+                :
         +-----+          |     |      |     |               :
          :               |  C  |------|  E  |               :
      +-----+    +-----+ /|     |      |     |\ +-----+    +-----+
      |     |    |     |/ +-----+      +-----+ \|     |    |     |
      |  A  |----|  B  |     :            :     |  G  |----|  H  |
      |     |    |     |\    :            :    /|     |    |     |
      +-----+    +-----+ \+-----+      +-----+/ +-----+    +-----+
          :               |     |      |     |               :
          :               |  D  |------|  F  |               :
          :               |     |      |     |          +-----+
          :               +-----+      +-----+          |     |
          :                  :            :             |  Y  |
          :                  :            :             |     |
          :   TE domain 1    :            : TE domain 2 +-----+
          :..................:            :.................:
]]></artwork></figure>

<t>In order to set up an end-to-end multi-domain TE path (e.g., between
   nodes A and H), the Multi-Domain Controller needs to know the
   feasibility or the cost of the possible TE paths within the two TE
   domains, which depend on the current status of the physical resources
   within each TE domain. This is more challenging in case of optical
   networks because the optimal paths depend also on vendor-specific
   optical attributes (which may be different in the two domains if they
   are provided by different vendors).</t>

<t>In order to set up a multi-domain TE path (e.g., between nodes A and
   H), the Multi-Domain Controller can request the TE Domain Controllers
   to compute a set of intra-domain optimal paths and take decisions
   based on the information received. For example:</t>

<t><list style="symbols">
  <t>The Multi-Domain Controller asks TE Domain Controllers to provide
set of paths between A-C, A-D, E-H and F-H</t>
  <t>TE Domain Controllers return a set of feasible paths with the
associated costs: the path A-C is not part of this set (in optical
networks, it is typical to have some paths not being feasible due
to optical constraints that are known only by the Optical Domain
Controller)</t>
  <t>The Multi-Domain Controller will select the path A-D-F-H since it
is the only feasible multi-domain path and then request the TE
Domain Controllers to set up the A-D and F-H intra-domain paths</t>
  <t>If there are multiple feasible paths, the Multi-Domain Controller
can select the optimal path knowing the cost of the intra-domain
paths (provided by the TE domain controllers) and the cost of the
inter-domain links (known by the Multi-Domain Controller)  <vspace blankLines='1'/>
This approach may have some scalability issues when the number of TE
domains is quite big (e.g. 20).  <vspace blankLines='1'/>
In this case, it would be worthwhile using the abstract TE topology
information provided by the TE Domain Controllers to limit the number
of potential optimal end-to-end paths and then request path
computation from fewer TE Domain Controllers in order to decide what
the optimal path within this limited set is.  <vspace blankLines='1'/>
For more details, see <xref target="topo-pc-complement"/>.</t>
</list></t>

</section>
<section anchor="dci-uc"><name>Data Center Interconnections</name>

<t>In these use case, there is a TE domain which is used to provide
   connectivity between Data Centers which are connected with the TE
   domain using access links.</t>

<figure title="Data Center Interconnection use case" anchor="fig-dci-uc"><artwork type="ascii-art" name="dci-use-case.txt"><![CDATA[
                        +--------------+
                        | Cloud Network|
                        | Orchestrator |
                        +--------------+
                          |  |  |  |
            +-------------+  |  |  +------------------------+
            |                |  +------------------+        |
            |       +--------V---+                 |        |
            |       |            |                 |        |
            |       | TE Network |                 |        |
     +------V-----+ | Controller |          +------V-----+  |
     | DC         | +------------+          | DC         |  |
     | Controller |     |                   | Controller |  |
     +------------+     |   +-----+         +------------+  |
          |         ....V...|     |........         |       |
          |         :       |  P  |       :         |       |
     .....V.....    :      /+-----+\      :    .....V.....  |
     :         :  +-----+ /    |    \ +-----+  :         :  |
     :  DC1 || :  |     |/     |     \|     |  :  DC2 || :  |
     :    ||||----| PE1 |      |      | PE2 |----   |||| :  |
     : _|||||| :  |     |\     |     /|     |  : _|||||| :  |
     :         :  +-----+ \ +-----+ / +-----+  :         :  |
     :.........:    :      \|     |/      :    :.........:  |
                    :.......| PE3 |.......:                 |
                            |     |                         |
                            +-----+               +---------V--+
                          .....|.....             | DC         |
                          :         :             | Controller |
                          :  DC3 || :             +------------+
                          :    |||| :                  |
                          : _|||||| <------------------+
                          :         :
                          :.........:
]]></artwork></figure>

<t>In this use case, there is the need to transfer data from Data Center
   1 (DC1) to either DC2 or DC3 (e.g. workload migration).</t>

<t>The optimal decision depends both on the cost of the TE path (DC1-DC2
   or DC1-DC3) and of the Data Center resources within DC2 or DC3.</t>

<t>The Cloud Network Orchestrator needs to make a decision for optimal
   connection based on TE network constraints and Data Center resources.</t>

<t>It may not be able to make this decision because it has only an
   abstract view of the TE network (as in <xref target="poi-uc"/>).</t>

<t>The Cloud Network Orchestrator can request to the TE Network
   Controller to compute the cost of the possible TE paths (e.g., DC1-
   DC2 and DC1-DC3) and to the DC Controller to provide the information
   it needs about the required Data Center resources within DC2 and DC3
   and then it can take the decision about the optimal solution based on
   this information and its policy.</t>

</section>
<section anchor="brpc-uc"><name>Backward Recursive Path Computation scenario</name>

<t><xref target="RFC5441"/> has defined the Virtual Source Path Tree (VSPT) flag within the RP (Request Parameters) object in order to compute inter-domain paths following a
   "Backward Recursive Path Computation" (BRPC) method. The main
   principle is to forward the PCReq message up to the destination
   domain. Then, each PCE involved in the computation will compute its
   part of the path and send it back to the requester through PCE
   Response message. The resulting computation is spread from
   destination PCE to source PCE. Each PCE is in charge of merging the
   path it received with the one it calculated. At the end, the source
   PCE merges its local part of the path with the received one to
   achieve the end-to-end path.</t>

<t><xref target="fig-brpc-example"/> below show a typical BRPC scenario where 3 PCEs cooperate to
   compute inter-domain paths.</t>

<figure title="BRPC Scenario" anchor="fig-brpc-example"><artwork type="ascii-art" name="brpc-scenario.txt"><![CDATA[
                   +----------------+          +----------------+
                   |  Domain (B)    |          |  Domain (C)    |
                   |                |          |                |
                   |        /-------|---PCEP---|--------\       |
                   |       /        |          |         \      |
                   |   (PCE)        |          |   -    (PCE)   |
                   |    /           <---------->  |D|           |
                   |   /            |  Inter   |   -            |
                   +---|----^-------+  Domain  +----------------+
                       |    |          Link
                     PCEP   |
                       |    | Inter-domain Link
                       |    |
                   +---|----v-------+
                   |   |            |
                   |   | Domain (A) |
                   |   \            |
                   |  (PCE)    -    |
                   |          |S|   |
                   |           -    |
                   +----------------+
]]></artwork></figure>

<t>In this use case, a client can use the YANG data model defined in
   this document to request path computation from the PCE that controls
   the source of the tunnel. For example, a client can request to the
   PCE of domain A to compute a path from a source S, within domain A,
   to a destination D, within domain C. Then PCE of domain A will use
   PCEP protocol, as per <xref target="RFC5441"/>, to compute the path from S to D and
   in turn gives the final answer to the requester.</t>

</section>
<section anchor="hpce-uc"><name>Hierarchical PCE scenario</name>

<t><xref target="RFC6805"/> has defined an architecture and extensions to the PCE
   standard to compute inter-domain path following a hierarchical
   method. Two new roles have been defined: parent PCE and child PCE.
   The parent PCE is in charge to coordinate the end-to-end path
   computation. For that purpose it sends to each child PCE involved in
   the multi-domain path computation a PCE Request message to obtain the
   local part of the path. Once received all answer through PCE Response
   message, the parent PCE will merge the different local parts of the
   path to achieve the end-to-end path.</t>

<t><xref target="fig-hpce-example"/> below shows a typical hierarchical scenario where a parent
   PCE request end-to-end path to the different child PCE. Note that a
   PCE could take independently the role of child or parent PCE
   depending of which PCE will request the path.</t>

<figure title="Hierarchical domain topology from RFC6805" anchor="fig-hpce-example"><artwork type="ascii-art" name="hierarchical-domain-topology.txt"><![CDATA[
    -----------------------------------------------------------------
    |   Domain 5                                                      |
    |                              -----                              |
    |                             |PCE 5|                             |
    |                              -----                              |
    |                                                                 |
    |    ----------------     ----------------     ----------------   |
    |   | Domain 1       |   | Domain 2       |   | Domain 3       |  |
    |   |                |   |                |   |                |  |
    |   |        -----   |   |        -----   |   |        -----   |  |
    |   |       |PCE 1|  |   |       |PCE 2|  |   |       |PCE 3|  |  |
    |   |        -----   |   |        -----   |   |        -----   |  |
    |   |                |   |                |   |                |  |
    |   |            ----|   |----        ----|   |----            |  |
    |   |           |BN11+---+BN21|      |BN23+---+BN31|           |  |
    |   |   -        ----|   |----        ----|   |----        -   |  |
    |   |  |S|           |   |                |   |           |D|  |  |
    |   |   -        ----|   |----        ----|   |----        -   |  |
    |   |           |BN12+---+BN22|      |BN24+---+BN32|           |  |
    |   |            ----|   |----        ----|   |----            |  |
    |   |                |   |                |   |                |  |
    |   |         ----   |   |                |   |   ----         |  |
    |   |        |BN13|  |   |                |   |  |BN33|        |  |
    |    -----------+----     ----------------     ----+-----------   |
    |                \                                /               |
    |                 \       ----------------       /                |
    |                  \     |                |     /                 |
    |                   \    |----        ----|    /                  |
    |                    ----+BN41|      |BN42+----                   |
    |                        |----        ----|                       |
    |                        |                |                       |
    |                        |        -----   |                       |
    |                        |       |PCE 4|  |                       |
    |                        |        -----   |                       |
    |                        |                |                       |
    |                        | Domain 4       |                       |
    |                         ----------------                        |
    |                                                                 |
     -----------------------------------------------------------------
]]></artwork></figure>

<t>In this use case, a client can use the YANG data model defined in
   this document to request to the parent PCE a path from a source S to
   a destination D. The parent PCE will in turn contact the child PCEs
   through PCEP protocol to compute the end-to-end path and then return
   the computed path to the client, using the YANG data model defined in
   this document. For example the YANG data model can be used to request
   to PCE5 acting as parent PCE to compute a path from source S, within
   domain 1, to destination D, within domain 3. PCE5 will contact child
   PCEs of domain 1, 2 and 3 to obtain local part of the end-to-end path
   through the PCEP protocol. Once received the PCRep message, it
   merges the answers to compute the end-to-end path and send it back to
   the client.</t>

</section>
</section>
<section anchor="motivations"><name>Motivations</name>

<t>This section provides the motivation for the YANG data model defined
   in this document.</t>

<t><xref target="yang-motivation"/> describes the motivation for a YANG data model to request
   path computation.</t>

<t><xref target="topo-interaction"/> describes the motivation for a YANG data model which
   complements the TE topology YANG data model defined in <xref target="RFC8795"/>.</t>

<t><xref target="rpc-motivation"/> describes the motivation for a YANG RPC which complements
   the TE tunnel YANG data model defined in <xref target="I-D.ietf-teas-yang-te"/>.</t>

<section anchor="yang-motivation"><name>Motivation for a YANG Model</name>

<section anchor="benefits-of-common-data-models"><name>Benefits of common data models</name>

<t>The YANG data model for requesting path computation is closely
   aligned with the YANG data models that provide (abstract) TE topology
   information, i.e., <xref target="RFC8795"/> as well as that are used to configure
   and manage TE tunnels, i.e., <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>There are many benefits in aligning the data model used for path
   computation requests with the YANG data models used for TE topology
   information and for TE tunnels configuration and management:</t>

<t><list style="symbols">
  <t>There is no need for an error-prone mapping or correlation of
information.</t>
  <t>It is possible to use the same endpoint identifiers in path
computation requests and in the topology modeling.</t>
  <t>The attributes used for path computation constraints are the same
as those used when setting up a TE tunnel.</t>
</list></t>

</section>
<section anchor="benefits-of-a-single-interface"><name>Benefits of a single interface</name>

<t>The system integration effort is typically lower if a single,
   consistent interface is used by controllers, i.e., one data modeling
   language (i.e., YANG) and a common protocol (e.g., NETCONF or
   RESTCONF).</t>

<t>Practical benefits of using a single, consistent interface include:</t>

<t><list style="numbers" type="1">
  <t>Simple authentication and authorization: The interface between
different components has to be secured. If different protocols
have different security mechanisms, ensuring a common access
control model may result in overhead. For instance, there may be a
need to deal with different security mechanisms, e.g., different
credentials or keys. This can result in increased integration
effort.</t>
  <t>Consistency: Keeping data consistent over multiple different
interfaces or protocols is not trivial. For instance, the sequence
of actions can matter in certain use cases, or transaction
semantics could be desired. While ensuring consistency within one
protocol can already be challenging, it is typically cumbersome to
achieve that across different protocols.</t>
  <t>Testing: System integration requires comprehensive testing,
including corner cases. The more different technologies are
involved, the more difficult it is to run comprehensive test cases
and ensure proper integration.</t>
  <t>Middle-box friendliness: Provider and consumer of path computation
requests may be located in different networks, and middle-boxes
such as firewalls, NATs, or load balancers may be deployed. In
such environments it is simpler to deploy a single protocol. Also,
it may be easier to debug connectivity problems.</t>
  <t>Tooling reuse: Implementers may want to implement path computation
requests with tools and libraries that already exist in
controllers and/or orchestrators, e.g., leveraging the rapidly
growing eco-system for YANG tooling.</t>
</list></t>

</section>
<section anchor="extensibility"><name>Extensibility</name>

<t>Path computation is only a subset of the typical functionality of a
   controller. In many use cases, issuing path computation requests
   comes along with the need to access other functionality on the same
   system. In addition to obtaining TE topology, for instance also
   configuration of services (set-up/modification/deletion) may be
   required, as well as:</t>

<t><list style="numbers" type="1">
  <t>Receiving notifications for topology changes as well as
integration with fault management</t>
  <t>Performance management such as retrieving monitoring and telemetry
data</t>
  <t>Service assurance, e.g., by triggering OAM functionality</t>
  <t>Other fulfilment and provisioning actions beyond tunnels and
services, such as changing QoS configurations  <vspace blankLines='1'/>
YANG is a very extensible and flexible data modeling language that
can be used for all these use cases.</t>
</list></t>

</section>
</section>
<section anchor="topo-interaction"><name>Interactions with TE topology</name>

<t>The use cases described in <xref target="use-cases"/> have been described assuming
   that the topology view exported by each underlying controller to its
   client is aggregated using the "virtual node model", defined in
   <xref target="RFC7926"/>.</t>

<t>TE topology information, e.g., as provided by <xref target="RFC8795"/>, could in
   theory be used by an underlying controller to provide TE information
   to its client thus allowing a PCE available within its client to
   perform multi-domain path computation on its own, without requesting
   path computations to the underlying controllers.</t>

<t>In case the client does not implement a PCE function, as discussed in
   <xref target="intro"/>, it could not perform path computation based on TE topology
   information and would instead need to request path computation from
   the underlying controllers to get the information it needs to find
   the optimal end-to-end path.</t>

<t>In case the client implements a PCE function, as discussed in 
   <xref target="intro"/>, the TE topology information needs to be complete and accurate,
   which would bring to scalability issues.</t>

<t>Using TE topology to provide a "virtual link model" aggregation, as
   described in <xref target="RFC7926"/>, may be insufficient, unless the aggregation
   provides complete and accurate information, which would still cause
   scalability issues, as described in <xref target="topo-aggregation"/> below.</t>

<t>Using TE topology abstraction, as described in <xref target="RFC7926"/>, may lead to
   compute an unfeasible path, as described in <xref target="RFC7926"/> in 
   <xref target="topo-abstraction"/> below.</t>

<t>Therefore when computing an optimal multi-domain path, there is a
   scalability trade-off between providing complete and accurate TE
   information and the number of path computation requests to the
   underlying controllers.</t>

<t>The TE topology information used, in a complimentary way, to reduce
   the number for path computation requests to the underlying
   controllers, are described in <xref target="topo-pc-complement"/> below.</t>

<section anchor="topo-aggregation"><name>TE topology aggregation</name>

<t>Using the TE topology model, as defined in <xref target="RFC8795"/>, the underlying
   controller can export the whole TE domain as a single TE node with a
   "detailed connectivity matrix" (which provides specific TE
   attributes, such as delay, Shared Risk Link Groups (SRLGs) and other
   TE metrics, between each ingress and egress links).</t>

<t>The information provided by the "detailed connectivity matrix" would
   be equivalent to the information that should be provided by "virtual
   link model" as defined in <xref target="RFC7926"/>.</t>

<t>For example, in the Packet/Optical Integration use case, described in
   <xref target="poi-uc"/>, the Optical Domain Controller can make the information
   shown in <xref target="fig-poi-example"/> available to the Packet/Optical Coordinator as part
   of the TE topology information and the Packet/Optical Coordinator
   could use this information to calculate on its own the optimal path
   between R1 and R2, without requesting any additional information to
   the Optical Domain Controller.</t>

<t>However, when designing the amount of information to provide within
   the "detailed connectivity matrix", there is a tradeoff to be
   considered between accuracy (i.e., providing "all" the information
   that might be needed by the PCE available within the client) and
   scalability.</t>

<t><xref target="poi-multi-path"/> below shows another example, similar to <xref target="fig-poi-example"/>, where
   there are two possible Optical paths between VP1 and VP4 with
   different properties (e.g., available bandwidth and cost).</t>

<figure title="Packet/Optical Integration path computation Example with multiple choices" anchor="poi-multi-path"><artwork type="ascii-art" name="poi-example-multiple.txt"><![CDATA[
                    ............................
                    :  /--------------------\  :
                    : /       cost=65        \ :
                    :/    available-bw=10G    \:
                    O VP1                  VP4 O
           cost=10 /:\                        /:\ cost=10
                  / : \----------------------/ : \
          +----+ /  :         cost=50          :  \ +----+
          |    |/   :     available-bw=2G      :   \|    |
          | R1 |    :                          :    | R2 |
          |    |\   :                          :   /|    |
          +----+ \  :  /--------------------\  :  / +----+
                  \ : /       cost=55        \ : /
            cost=5 \:/    available-bw=3G     \:/ cost=5
                    O VP2                  VP5 O
                    :                          :
                    :..........................:
]]></artwork></figure>

<t>If the information in the "detailed connectivity matrix" is not
   complete/accurate, we can have the following drawbacks:</t>

<t><list style="symbols">
  <t>If only the VP1-VP4 path with available bandwidth of 2 Gb/s and
cost 50 is reported, the client's PCE will fail to compute a 5
Gb/s path between routers R1 and R2, although this would be
feasible;</t>
  <t>If only the VP1-VP4 path with available bandwidth of 10 Gb/s and
cost 65 is reported, the client's PCE will compute, as optimal,
the 1 Gb/s path between R1 and R2 going through the VP2-VP5 path
within the optical domain while the optimal path would actually be
the one going thought the VP1-VP4 sub-path (with cost 50) within
the optical domain.  <vspace blankLines='1'/>
Reporting all the information, as in <xref target="poi-multi-path"/>, using the "detailed
 connectivity matrix", is quite challenging from a scalability
 perspective. The amount of this information is not just based on
 number of end points (which would scale as N-square), but also on
 many other parameters, including client rate, user
 constraints/policies for the service, e.g. max latency &lt; N ms, max
 cost, etc., exclusion policies to route around busy links, min
 Optical Signal to Noise Ratio (OSNR) margin, max pre-Forward Error
 Correction (FEC) Bit Error Rate (BER) etc. All these constraints
 could be different based on connectivity requirements.  <vspace blankLines='1'/>
It is also worth noting that the "connectivity matrix" has been
 originally defined in Wavelength Switched Optical Networks (WSON),
 <xref target="RFC7446"/>, to report the connectivity constrains of a physical node
 within the Wavelength Division Multiplexing (WDM) network: the
 information it contains is pretty "static" and therefore, once taken
 and stored in the TE data base, it can be always being considered
 valid and up-to-date in path computation request.  <vspace blankLines='1'/>
The "connectivity matrix" is sometimes confused with "optical reach
 table" that contain multiple (e.g. k-shortest) regen-free reachable
 paths for every A-Z node combination in the network. Optical reach
 tables can be calculated offline, utilizing vendor optical design and
 planning tools, and periodically uploaded to the Controller: these
 optical path reach tables are fairly static. However, to get the
 connectivity matrix, between any two sites, either a regen free path
 can be used, if one is available, or multiple regen free paths are
 concatenated to get from the source to the destination, which can be
 a very large combination. Additionally, when the optical path within
 optical domain needs to be computed, it can result in different paths
 based on input objective, constraints, and network conditions. In
 summary, even though "optical reach table" is fairly static, which
 regen free paths to build the connectivity matrix between any source
 and destination is very dynamic, and is done using very sophisticated
 routing algorithms.  <vspace blankLines='1'/>
Using the "basic connectivity matrix" with an abstract node to
 abstract the information regarding the connectivity constraints of an
 Optical domain, would make this information more "dynamic" since the
 connectivity constraints of an optical domain can change over time
 because some optical paths that are feasible at a given time may
 become unfeasible at a later time when e.g., another optical path is
 established.  <vspace blankLines='1'/>
The information in the "detailed connectivity matrix" is even more
 dynamic since the establishment of another optical path may change
 some of the parameters (e.g., delay or available bandwidth) in the
 "detailed connectivity matrix" while not changing the feasibility of
 the path.  <vspace blankLines='1'/>
There is therefore the need to keep the information in the "detailed
 connectivity matrix" updated which means that there another tradeoff
 between the accuracy (i.e., providing "all" the information that
 might be needed by the client's PCE) and having up-to-date
 information. The more the information is provided and the longer it
 takes to keep it up-to-date which increases the likelihood that the
 client's PCE computes paths using not updated information.  <vspace blankLines='1'/>
It seems therefore quite challenging to have a "detailed connectivity
 matrix" that provides accurate, scalable and updated information to
 allow the client's PCE to take optimal decisions by its own.  <vspace blankLines='1'/>
Considering the example in <xref target="poi-multi-path"/> with the approach defined in this
 document, the client, when it needs to set up an end-to-end path, it
 can request the Optical Domain Controller to compute a set of optimal
 paths (e.g., for VP1-VP4 and VP2-VP5) and take decisions based on the
 information received:</t>
  <t>When setting up a 5 Gb/s path between routers R1 and R2, the
Optical Domain Controller may report only the VP1-VP4 path as the
only feasible path: the Packet/Optical Coordinator can
successfully set up the end-to-end path passing though this
optical path;</t>
  <t>When setting up a 1 Gb/s path between routers R1 and R2, the
Optical Domain Controller (knowing that the path requires only 1
Gb/s) can report both the VP1-VP4 path, with cost 50, and the VP2-
VP5 path, with cost 65. The Packet/Optical Coordinator can then
compute the optimal path which is passing thought the VP1-VP4 sub-
path (with cost 50) within the optical domain.</t>
</list></t>

</section>
<section anchor="topo-abstraction"><name>TE topology abstraction</name>

<t>Using the TE topology model, as defined in <xref target="RFC8795"/>, the underlying
   controller can export to its client an abstract TE topology, composed
   by a set of TE nodes and TE links, representing the abstract view of
   the topology under its control.</t>

<t>For example, in the multi-domain TE network use case, described in
   <xref target="md-uc"/>, the TE Domain Controller 1 can export a TE topology
   encompassing the TE nodes A, B, C and D and the TE links
   interconnecting them. In a similar way, the TE Domain Controller 2
   can export a TE topology encompassing the TE nodes E, F, G and H and
   the TE links interconnecting them.</t>

<t>In this example, for simplicity reasons, each abstract TE node maps
   with each physical node, but this is not necessary.</t>

<t>In order to set up a multi-domain TE path (e.g., between nodes A and
   H), the Multi-Domain Controller can compute by its own an optimal
   end-to-end path based on the abstract TE topology information
   provided by the domain controllers. For example:</t>

<t><list style="symbols">
  <t>Multi-Domain Controller can compute, based on its own TED data,
the optimal multi-domain path being A-B-C-E-G-H, and then request
the TE Domain Controllers to set up the A-B-C and E-G-H intra-
domain paths</t>
  <t>But, during path set-up, the TE Domain Controller may find out
that A-B-C intra-domain path is not feasible (as discussed in
<xref target="md-uc"/>, in optical networks it is typical to have some paths
not being feasible due to optical constraints that are known only
by the Optical Domain Controller), while only the path A-B-D is
feasible</t>
  <t>So what the Multi-Domain Controller has computed is not good and
it needs to re-start the path computation from scratch  <vspace blankLines='1'/>
As discussed in <xref target="topo-aggregation"/>, providing more extensive abstract
information from the TE Domain Controllers to the Multi-Domain
Controller may lead to scalability problems.  <vspace blankLines='1'/>
In a sense this is similar to the problem of routing and wavelength
assignment within an optical domain. It is possible to do first
routing (step 1) and then wavelength assignment (step 2), but the
chances of ending up with a good path is low. Alternatively, it is
possible to do combined routing and wavelength assignment, which is
known to be a more optimal and effective way for optical path set-up.
Similarly, it is possible to first compute an abstract end-to-end
path within the Multi-Domain Controller (step 1) and then compute an
intra-domain path within each optical domain (step 2), but there are
more chances not to find a path or to get a suboptimal path than by
performing multiple per-domain path computations and then stitching
them together.</t>
</list></t>

</section>
<section anchor="topo-pc-complement"><name>Complementary use of the TE topology</name>

<t>As discussed in <xref target="md-uc"/>, there are some scalability issues with
   path computation requests in a multi-domain TE network with many TE
   domains, in terms of the number of requests to send to the TE Domain
   Controllers. It would therefore be worthwhile using the abstract TE
   topology information provided by the TE Domain Controllers to limit
   the number of requests.</t>

<t>An example can be described considering the multi-domain abstract TE
   topology shown in <xref target="fig-topo-many-domains"/>. In this example, an end-to-end TE path
   between domains A and F needs to be set up. The transit TE domain
   should be selected between domains B, C, D and E.</t>

<figure title="Multi-domain with many domains (Topology information)" anchor="fig-topo-many-domains"><artwork type="ascii-art" name="many-domains-topology.txt"><![CDATA[
                          .........B.........
                          : _ _ _ _ _ _ _ _ :
                          :/               \:
                      +---O  NOT FEASIBLE   O---+
                cost=5|   :                 :   |
    ......A......     |   :.................:   |     ......F......
    :           :     |                         |     :           :
    :           O-----+   .........C.........   +-----O           :
    :           :         : /-------------\ :         :           :
    :           :         :/               \:         :           :
    :  cost<=20 O---------O   cost <= 30    O---------O cost<=20  :
    :          /: cost=5  :                 : cost=5  :\          :
    :  /------/ :         :.................:         : \------\  :
    : /         :                                     :         \ :
    :/ cost<=25 :         .........D.........         : cost<=25 \:
    O-----------O-------+ : /-------------\ : +-------O-----------O
    :\          : cost=5| :/               \: |cost=5 :          /:
    : \         :       +-O   cost <= 30    O-+       :         / :
    :  \------\ :         :                 :         : /------/  :
    : cost>=30 \:         :.................:         :/ cost>=30 :
    :           O-----+                         +-----O           :
    :...........:     |   .........E.........   |     :...........:
                      |   : /-------------\ :   |
                cost=5|   :/               \:   |cost=5
                      +---O   cost >= 30    O---+
                          :                 :
                          :.................:
]]></artwork></figure>

<t>The actual cost of each intra-domain path is not known a priori from
   the abstract topology information. The Multi-Domain Controller only
   knows, from the TE topology provided by the underlying domain
   controllers, the feasibility of some intra-domain paths and some
   upper-bound and/or lower-bound cost information. With this
   information, together with the cost of inter-domain links, the Multi-
   Domain Controller can understand by its own that:</t>

<t><list style="symbols">
  <t>Domain B cannot be selected as the path connecting domains A and F
is not feasible;</t>
  <t>Domain E cannot be selected as a transit domain since it is known
from the abstract topology information provided by domain
controllers that the cost of the multi-domain path A-E-F (which is
100, in the best case) will be always be higher than the cost of
the multi-domain paths A-D-F (which is 90, in the worst case) and
A-C-F (which is 80, in the worst case).  <vspace blankLines='1'/>
Therefore, the Multi-Domain Controller can understand by its own that
 the optimal multi-domain path could be either A-D-F or A-C-F but it
 cannot know which one of the two possible option actually provides
 the optimal end-to-end path.  <vspace blankLines='1'/>
The Multi-Domain Controller can therefore request path computation
 only to the TE Domain Controllers A, D, C and F (and not to all the
 possible TE Domain Controllers).</t>
</list></t>

<figure title="Multi-domain with many domains (Path Computation information)" anchor="fig-pc-many-domains"><artwork type="ascii-art" name="many-domain-path-computation.txt"><![CDATA[
                          .........B.........
                          :                 :
                      +---O                 O---+
    ......A......     |   :.................:   |     ......F......
    :           :     |                         |     :           :
    :           O-----+   .........C.........   +-----O           :
    :           :         : /-------------\ :         :           :
    :           :         :/               \:         :           :
    :  cost=15  O---------O    cost = 25    O---------O  cost=10  :
    :          /: cost=5  :                 : cost=5  :\          :
    :  /------/ :         :.................:         : \------\  :
    : /         :                                     :         \ :
    :/ cost=10  :         .........D.........         : cost=15  \:
    O-----------O-------+ : /-------------\ : +-------O-----------O
    :           : cost=5| :/               \: |cost=5 :           :
    :           :       +-O    cost = 15    O-+       :           :
    :           :         :                 :         :           :
    :           :         :.................:         :           :
    :           O-----+                         +-----O           :
    :...........:     |   .........E.........   |     :...........:
                      |   :                 :   |
                      +---O                 O---+
                          :.................:
]]></artwork></figure>

<t>Based on these requests, the Multi-Domain Controller can know the
   actual cost of each intra-domain paths which belongs to potential
   optimal end-to-end paths, as shown in <xref target="fig-pc-many-domains"/>, and then compute the
   optimal end-to-end path (e.g., A-D-F, having total cost of 50,
   instead of A-C-F having a total cost of 70).</t>

</section>
</section>
<section anchor="rpc-motivation"><name>Path Computation RPC</name>

<t>The TE tunnel YANG data model, defined in <xref target="I-D.ietf-teas-yang-te"/>, can support
   the need to request path computation, as described in section 5.1.2
   of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>This solution is stateful since the state of each created "compute-
   only" TE tunnel path needs to be maintained, in the YANG datastores
   (at least in the running datastore and operational datastore), and
   updated, when underlying network conditions change.</t>

<t>The RPC mechanism allows requesting path computation using a simple
   atomic operation, without creating any state in the YANG datastores,
   and it is the natural option/choice, especially with stateless PCE.</t>

<t>It is very useful to provide both the options of using an RPC as well
   as of setting up TE tunnel paths in "compute-only" mode. It is
   suggested to use the RPC as much as possible and to rely on
   "compute-only" TE tunnel paths, when really needed.</t>

<t>Using the RPC solution would imply that the underlying controller
   (e.g., a PNC) computes a path twice during the process to set up an
   LSP: at time T1, when its client (e.g., an MDSC) sends a path
   computation RPC request to it, and later, at time T2, when the same
   client (MDSC) creates a TE tunnel requesting the set-up of the LSP.
   The underlying assumption is that, if network conditions have not
   changed, the same path that has been computed at time T1 is also
   computed at time T2 by the underlying controller (e.g. PNC) and
   therefore the path that is set up at time T2 is exactly the same path
   that has been computed at time T1.</t>

<t>However, since the operation is stateless, there is no guarantee that
   the returned path would still be available when path set-up is
   requested: this does not cause major issues when the time between
   path computation and path set-up is short (especially if compared
   with the time that would be needed to update the information of a
   very detailed connectivity matrix).</t>

<t>In most of the cases, there is even no need to guarantee that the
   path that has been set up is the exactly same as the path that has
   been returned by path computation, especially if it has the same or
   even better metrics. Depending on the abstraction level applied by
   the server, the client may also not know the actual computed path.</t>

<t>The most important requirement is that the required global objectives
   (e.g., multi-domain path metrics and constraints) are met. For this
   reason a path verification phase is always necessary to verify that
   the actual path that has been set up meets the global objectives (for
   example in a multi-domain network, the resulting end-to-end path
   meets the required end-to-end metrics and constraints).</t>

<t>In most of the cases, even if the path being set up is not exactly
   the same as the path returned by path computation, its metrics and
   constraints are "good enough" and the path verification passes
   successfully. In the few corner cases where the path verification
   fails, it is possible repeat the whole process (path computation,
   path set-up and path verification).</t>

<t>In case it is required to set up at T2 exactly the same path computed
   at T1, the RPC solution should not be used and, instead, a "compute-
   only" TE tunnel path should be set up, allowing also notifications in
   case the computed path has been changed.</t>

<t>In this case, at time T1, the client (MDSC) creates a TE tunnel in a
   compute-only mode in the running datastore and later, at time T2,
   changes the configuration of that TE tunnel (not to be any more in a
   compute-only mode) to trigger the set-up of the LSP over the path
   which have been computed at time T1 and reported in the operational
   datastore.</t>

<t>It is worth noting that also using the "compute-only" TE tunnel path,
   although increasing the likelihood that the computed path is
   available at path set-up, does not guarantee that because
   notifications may not be reliable or delivered on time. Path
   verification is needed also in this case.</t>

<t>The solution based on "compute-only" TE tunnel path has also the
   following drawbacks:</t>

<t><list style="symbols">
  <t>Several messages required for any path computation</t>
  <t>Requires persistent storage in the underlying controller</t>
  <t>Need for garbage collection for stranded paths</t>
  <t>Process burden to detect changes on the computed paths in order to
provide notifications update</t>
</list></t>

<section anchor="temp-state"><name>Temporary reporting of the computed path state</name>

<t>This section describes an optional extension to the stateless
   behavior of the path computation RPC, where the underlying
   controller, after having received a path computation RPC request,
   maintains some "transient state" associated with the computed path,
   allowing the client to request the set-up of exactly that path, if
   still available.</t>

<t>This is similar to the "compute-only" TE tunnel path solution but, to
   avoid the drawbacks of the stateful approach, is leveraging the path
   computation RPC and the separation between configuration and
   operational datastore, as defined in the NMDA architecture <xref target="RFC8342"/>.</t>

<t>The underlying controller, after having computed a path, as requested
   by a path computation RPC, also creates a TE tunnel instance within
   the operational datastore, to store that computed path. This would be
   similar to a "compute-only" TE tunnel path, with the only difference
   that there is no associated TE tunnel instance within the running
   datastore.</t>

<t>Since the underlying controller stores in the operational datastore
   the computed path based on an abstract topology it exposes, it also
   remembers, internally, which is the actual native path (physical
   path), within its native topology (physical topology), associated
   with that compute-only TE tunnel instance.</t>

<t>Afterwards, the client (e.g., MDSC) can request the set-up of that
   specific path by creating a TE tunnel instance (not in compute-only
   mode) in the running datastore using the same tunnel-name of
   the existing TE tunnel in the operational datastore: this will
   trigger the underlying controller to set up that path, if still
   available.</t>

<t>There are still cases where the path being set up is not exactly the
   same as the path that has been computed:</t>

<t><list style="symbols">
  <t>When the tunnel is configured with path constraints which are not
compatible with the computed path;</t>
  <t>When the tunnel set-up is requested after the resources of the
computed path are no longer available;</t>
  <t>When the tunnel set-up is requested after the computed path is no
longer known (e.g. due to a server reboot) by the underlying
controller.  <vspace blankLines='1'/>
In all these cases, the underlying controller should compute and set
 up a new path.  <vspace blankLines='1'/>
Therefore the "path verification" phase, as described in <xref target="rpc-motivation"/>
 above, is always needed to check that the path that has been set up
 is still "good enough".  <vspace blankLines='1'/>
Since this new approach is not completely stateless, garbage
 collection is implemented using a timeout that, when it expires,
 triggers the removal of the computed path from the operational
 datastore. This operation is fully controlled by the underlying
 controller without the need for any action to be taken by the client
 that is not able to act on the operational datastore. The default
 value of this timeout is 10 minutes but a different value may be
 configured by the client.  <vspace blankLines='1'/>
In addition, it is possible for the client to tag each path
 computation request with a transaction-id allowing for a faster
 removal of all the paths associated with a transaction-id, without
 waiting for their timers to expire.  <vspace blankLines='1'/>
The underlying controller can remove from the operational datastore
 all the paths computed with a given transaction-id which have not
 been set up either when it receives a Path Delete RPC request for
 that transaction-id or, automatically, right after the set-up up of a
 path that has been previously computed with that transaction-id.  <vspace blankLines='1'/>
This possibility is useful when multiple paths are computed but, at
 most, only one is set up (e.g., in multi-domain path computation
 scenario scenarios). After the selected path has been set up (e.g, in
 one domain during multi-domain path set-up), all the other
 alternative computed paths can be automatically deleted by the
 underlying controller (since no longer needed). The client can also
 request, using the Path Delete RPC request, the underlying controller
 to remove all the computed paths, if none of them is going to be set
 up (e.g., in a transit domain not being selected by multi-domain path
 computation and so not being automatically deleted).  <vspace blankLines='1'/>
This approach is complimentary and not alternative to the timer which
 is always needed to avoid stranded computed paths being stored in the
 operational datastore when no path is set up and no explicit Path
 Delete RPC request is received.</t>
</list></t>

</section>
</section>
</section>
<section anchor="path-computation-and-optimization-for-multiple-paths"><name>Path computation and optimization for multiple paths</name>

<t>There are use cases, where it is advantageous to request path
   computation for a set of paths, through a network or through a
   network domain, using a single request <xref target="RFC5440"/>.</t>

<t>In this case, sending a single request for multiple path
   computations, instead of sending multiple requests for each path
   computation, would reduce the protocol overhead and it would consume
   less resources (e.g., threads in the client and server).</t>

<t>In the context of a typical multi-domain TE network, there could
   multiple choices for the ingress/egress points of a domain and the
   Multi-Domain Controller needs to request path computation between all
   the ingress/egress pairs to select the best pair. For example, in the
   example of <xref target="md-uc"/>, the Multi-Domain Controller needs to request
   the TE Network Controller 1 to compute the A-C and the A-D paths and
   to the TE Network Controller 2 to compute the E-H and the F-H paths.</t>

<t>It is also possible that the Multi-Domain Controller receives a
   request to set up a group of multiple end to end connections. The
   Multi-Domain Controller needs to request each TE domain Controller to
   compute multiple paths, one (or more) for each end to end connection.</t>

<t>There are also scenarios where it can be needed to request path
   computation for a set of paths in a synchronized fashion.</t>

<t>One example could be computing multiple diverse paths. Computing a
   set of diverse paths in an unsynchronized fashion, leads to the
   possibility of not being able to satisfy the diversity requirement.
   In this case, it is preferable to compute a sub-optimal primary path
   for which a diversely routed secondary path exists.</t>

<t>There are also scenarios where it is needed to request optimizing a
   set of paths using objective functions that apply to the whole set of
   paths, see <xref target="RFC5541"/>, e.g. to minimize the sum of the costs of all
   the computed paths in the set.</t>

</section>
<section anchor="yang-data-model-for-requesting-path-computation"><name>YANG data model for requesting Path Computation</name>

<t>This document define a YANG RPC to request path computation as an
   "augmentation" of tunnel-rpc, defined in <xref target="I-D.ietf-teas-yang-te"/>. This model
   provides the RPC input attributes that are needed to request path
   computation and the RPC output attributes that are needed to report
   the computed paths.</t>

<figure><artwork type="ascii-art" name="overview.txt"><![CDATA[
  augment /te:tunnels-path-compute/te:input/te:path-compute-info:
    +-- path-request* [request-id]
    |  ...

  augment /te:tunnels-path-compute/te:output/te:path-compute-result:
    +--ro response* [response-id]
       +--ro response-id                         uint32
       +--ro computed-paths-properties
       |  +--ro computed-path-properties* [k-index]
       |     ...
]]></artwork></figure>

<t>This model extensively re-uses the grouping defined in <xref target="I-D.ietf-teas-yang-te"/>
   and <xref target="I-D.ietf-teas-rfc8776-update"/> to ensure maximal syntax and semantics commonality.</t>

<t>This YANG data model allows one RPC to include multiple path
   requests, each path request being identified by a request-id.
   Therefore, one RPC can return multiple responses, one for each path
   request, being identified by a response-id equal to the corresponding
   request-id. Each response reports one or more computed paths, as
   requested by the k-requested-paths attribute. By default, each
   response reports one computed path.</t>

<section anchor="synchronization-of-multiple-path-computation-requests"><name>Synchronization of multiple path computation requests</name>

<t>The YANG data model permits the synchronization of a set of multiple
   path requests (identified by specific request-id) all related to a
   "svec" container emulating the syntax of the Synchronization VECtor
   (SVEC) PCEP object, defined in <xref target="RFC5440"/>.</t>

<figure><artwork type="ascii-art" name="synchronization.txt"><![CDATA[
    +-- synchronization* []
       +-- svec
       |  +-- relaxable?      boolean
       |  +-- disjointness?   te-path-disjointness
       |  +-- request-id*     uint32
       +-- svec-constraints
       |  +-- path-metric-bound* [metric-type]
       |     +-- metric-type    identityref
       |     +-- upper-bound?   uint64
       +-- path-srlgs-lists
       |  +-- path-srlgs-list* [usage]
       |     +-- usage     identityref
       |     +-- values*   srlg
       +-- path-srlgs-names
       |  +-- path-srlgs-name* [usage]
       |     +-- usage    identityref
       |     +-- names*   string
       +-- exclude-objects
       |  +-- excludes* []
       |     +-- (type)?
       |        +--:(numbered-node-hop)
       |        |  +-- numbered-node-hop
       |        |     +-- node-id     te-node-id
       |        |     +-- hop-type?   te-hop-type
       |        +--:(numbered-link-hop)
       |        |  +-- numbered-link-hop
       |        |     +-- link-tp-id    te-tp-id
       |        |     +-- hop-type?     te-hop-type
       |        |     +-- direction?    te-link-direction
       |        +--:(unnumbered-link-hop)
       |        |  +-- unnumbered-link-hop
       |        |     +-- link-tp-id    te-tp-id
       |        |     +-- node-id       te-node-id
       |        |     +-- hop-type?     te-hop-type
       |        |     +-- direction?    te-link-direction
       |        +--:(as-number)
       |        |  +-- as-number-hop
       |        |     +-- as-number    inet:as-number
       |        |     +-- hop-type?    te-hop-type
       |        +--:(label)
       |           +-- label-hop
       |              +-- te-label
       |                 ...
       +-- optimizations
          +-- (algorithm)?
             +--:(metric) {te-types:path-optimization-metric}?
             |  +-- optimization-metric* [metric-type]
             |     +-- metric-type    identityref
             |     +-- weight?        uint8
             +--:(objective-function)
                      {te-types:path-optimization-objective-function}?
                +-- objective-function
                   +-- objective-function-type?   identityref
]]></artwork></figure>

<t>The model, in addition to the metric types, defined in <xref target="I-D.ietf-teas-rfc8776-update"/>,
   which can be applied to each individual path request, supports also
   additional metric types, which apply to a set of synchronized
   requests, as referenced in <xref target="RFC5541"/>. These additional metric types
   are defined by the following YANG identities:</t>

<t><list style="symbols">
  <t>svec-metric-type: base YANG identity from which cumulative metric
types identities are derived.</t>
  <t>svec-metric-cumul-te: cumulative TE cost metric type, as defined
in <xref target="RFC5541"/>.</t>
  <t>svec-metric-cumul-igp: cumulative IGP cost metric type, as defined
in <xref target="RFC5541"/>.</t>
  <t>svec-metric-cumul-hop: cumulative Hop metric type, representing
the cumulative version of the Hop metric type defined in
<xref target="I-D.ietf-teas-rfc8776-update"/>.</t>
  <t>svec-metric-aggregate-bandwidth-consumption: aggregate bandwidth
consumption metric type, as defined in <xref target="RFC5541"/>.</t>
  <t>svec-metric-load-of-the-most-loaded-link: load of the most loaded
link metric type, as defined in <xref target="RFC5541"/>.</t>
</list></t>

</section>
<section anchor="returned-metric-values"><name>Returned metric values</name>

<t>This YANG data model provides a way to return the values of the
   metrics computed by the path computation in the output of RPC,
   together with other important information (e.g. SRLG, affinities,
   explicit route), emulating the syntax of the "C" flag of the "METRIC"
   PCEP object <xref target="RFC5440"/>:</t>

<figure><artwork type="ascii-art" name="returned-metrics.txt"><![CDATA[
       |     +--ro path-properties
       |        +--ro path-metric* [metric-type]
       |        |  +--ro metric-type           identityref
       |        |  +--ro accumulative-value?   uint64
       |        +--ro path-affinities-values
       |        |  +--ro path-affinities-value* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro value?   admin-groups
       |        +--ro path-affinity-names
       |        |  +--ro path-affinity-name* [usage]
       |        |     +--ro usage            identityref
       |        |     +--ro affinity-name* [name]
       |        |        +--ro name    string
       |        +--ro path-srlgs-lists
       |        |  +--ro path-srlgs-list* [usage]
       |        |     +--ro usage     identityref
       |        |     +--ro values*   srlg
       |        +--ro path-srlgs-names
       |        |  +--ro path-srlgs-name* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro names*   string
       |        +--ro path-route-objects
       |        |  ...
       |        +--ro te-bandwidth
       |        |  ...
       |        +--ro disjointness-type?
       |                te-types:te-path-disjointness
]]></artwork></figure>

<t>It also allows the client to request which information (metrics, SRLG
   and/or affinities) should be returned:</t>

<figure><artwork type="ascii-art" name="requested-metrics.txt"><![CDATA[
    |  +-- request-id                            uint32
    |  ...
    |  +-- requested-metrics* [metric-type]
    |  |  +-- metric-type    identityref
    |  +-- return-srlgs?                         boolean
    |  +-- return-affinities?                    boolean
    |  ...
]]></artwork></figure>

<t>This feature is essential for path computation in a multi-domain TE
   network as described in <xref target="md-uc"/>. In this case, the metrics
   returned by a path computation requested to a given underlying
   controller must be used by the client to compute the best end-to-end
   path. If they are missing, the client cannot compare different paths
   calculated by the underlying controllers and choose the best one for
   the optimal end-to-end (e2e) path.</t>

</section>
<section anchor="multiple-paths-requests-for-the-same-te-tunnel"><name>Multiple Paths Requests for the same TE tunnel</name>

<t>The YANG data model allows including multiple requests for different
   paths intended to be used within the same tunnel or within different
   tunnels.</t>

<t>When multiple requested paths are intended to be used within the same
   tunnel (e.g., requesting path computation for the primary and
   secondary paths of a protected tunnel), the set of attributes that
   are intended to be configured on per-tunnel basis rather than on per-
   path basis are common to all these path requests. These attributes
   includes both attributes which can be configured only a per-tunnel
   basis (e.g., tunnel-name, source/destination TTP, encoding and
   switching-type) as well attributes which can be configured both on a
   per-tunnel and on a per-path basis (e.g., the te-bandwidth or the
   associations).</t>

<t>Therefore, a tunnel-attributes list is defined, within the path
   computation request RPC:</t>

<figure><artwork type="ascii-art" name="tunnel-attributes-list.txt"><![CDATA[
    +-- tunnel-attributes* [tunnel-name]
    |  +-- tunnel-name               string
    |  +-- encoding?                 identityref
    |  +-- switching-type?           identityref
    |  +-- source?                   te-types:te-node-id
    |  +-- destination?              te-types:te-node-id
    |  +-- src-tunnel-tp-id?         binary
    |  +-- dst-tunnel-tp-id?         binary
    |  +-- bidirectional?            boolean
    |  +-- association-objects
    |  |  ...
    |  +-- protection-type?          identityref
    |  +-- restoration-type?         identityref
    |  +-- restoration-scheme?       identityref
    |  +-- te-topology-identifier
    |  |  +-- provider-id?   te-global-id
    |  |  +-- client-id?     te-global-id
    |  |  +-- topology-id?   te-topology-id
    |  +-- te-bandwidth
    |  |  ...
    |  +-- link-protection?          identityref
    |  +-- setup-priority?           uint8
    |  +-- hold-priority?            uint8
    |  +-- signaling-type?           identityref
    |  +-- hierarchy
    |     +-- dependency-tunnels
    |     |  ...
    |     +-- hierarchical-link
    |        ...
]]></artwork></figure>

<t>The path requests that are intended to be used within the same tunnel
   should reference the same entry in the tunnel-attributes list. This
   allows:</t>

<t><list style="symbols">
  <t>avoiding repeating the same set of per-tunnel parameters on
multiple requested paths;</t>
  <t>the server to understand what attributes are intended to be
configured on a per-tunnel basis (e.g., the te-bandwidth
configured in the tunnel-attributes) and what attributes are
intended to be configured on a per-path basis(e.g., the te-
bandwidth configured in the path-request). This could be useful
especially when the server also creates a TE tunnel instance
within the operational datastore to report the computed paths, as
described in <xref target="temp-state"/>: in this case, the tunnel-name is also
used as the suggested name for that TE tunnel instance.  <vspace blankLines='1'/>
The YANG data model allows also including requests for paths intended
 to modify existing tunnels (e.g., adding a protection path for an
 existing un-protected tunnel). In this case, the per-tunnel
 attributes are already provided in an existing TE tunnel instance and
 do not need to be re-configured in the path computation request RPC.
 Therefore, these requests should reference an existing TE tunnel
 instance.  <vspace blankLines='1'/>
It is also possible to request computing paths without indicating in
 which tunnel they are intended to be used (e.g., in case of an
 unprotected tunnel). In this case, the per-tunnel attributes could be
 provided together with the per-path attributes in the path request,
 without using the tunnel-attributes list.  <vspace blankLines='1'/>
The choices below are defined to distinguish the cases above:</t>
  <t>whether the per-tunnel attributes are configured by reference
(providing a leafref), to:  <list style="symbols">
      <t>either a TE tunnel instance, if it exists;</t>
      <t>or to an entry of the tunnel-attributes list, if the TE tunnel
instance does not exist;</t>
    </list></t>
  <t>or by value, providing the set of tunnel attributes within the
path request:</t>
</list></t>

<figure><artwork type="ascii-art" name="tunnel-attributes.txt"><![CDATA[
    |  +-- (tunnel-attributes)?
    |  |  +--:(reference)
    |  |  |  +-- tunnel-reference
    |  |  |     +-- (tunnel-exist)
    |  |  |     |  +--:(tunnel-ref)
    |  |  |     |  |  +-- tunnel-ref                te:tunnel-ref
    |  |  |     |  +--:(tunnel-attributes-ref)
    |  |  |     |     +-- tunnel-attributes-ref     leafref
    |  |  |     +-- path-name?                      string
    |  |  |     +-- (path-role)
    |  |  |        ...
    |  |  +--:(value)
    |  |     +-- tunnel-name?                    string
    |  |     +-- path-name?                      string
    |  |     +-- (path-role)?
    |  |     |  ...
    |  |     ...
    |  |     +-- encoding?                       identityref
    |  |     +-- switching-type?                 identityref
    |  |     ...
]]></artwork></figure>

<section anchor="tunnel-attributes-specified-by-value"><name>Tunnel attributes specified by value</name>

<t>The (value) case provides the set of attributes that are configured
   only on per-tunnel basis (e.g., tunnel-name, source/destination TTP,
   encoding and switching-type).</t>

<t>In this case, it is assumed that the requested path will be the only
   path within a tunnel.</t>

<t>If the only path within a tunnel is the transit segment of a multi-domain end-to-end path, it can be of any type (primary, secondary, reverse-primary
   or reverse-secondary). The (path-role) choice is used to specify its role in the path request:</t>

<figure><artwork type="ascii-art" name="tunnel-by-value.txt"><![CDATA[
    |  |     +-- (path-role)?
    |  |     |  +--:(primary-path)
    |  |     |  +--:(secondary-path)
    |  |     |  |  +-- secondary-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(primary-reverse-path)
    |  |     |  |  +-- primary-reverse-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(secondary-reverse-path)
    |  |     |     +-- secondary-reverse-path!
    |  |     |        +-- primary-path-name?           string
    |  |     |        +-- primary-reverse-path-name?   string
]]></artwork></figure>

<t>In all the other cases, the only path within a tunnel is a primary path.</t>

<t>The secondary-path, the primary-reverse-path and the secondary-
   reverse-path are presence container used to indicate the role of the
   path: by default, the path is assumed to be a primary path.</t>

<t>They optionally can contain the name of the primary-path under which
   the requested path could be associated within the YANG tree structure
   defined in <xref target="I-D.ietf-teas-yang-te"/>, which could be useful when the server also
   creates a TE tunnel instance within the operational datastore to
   report the computed paths, as described in <xref target="temp-state"/>: in this
   case, the tunnel-name and the path names are also used as the
   suggested name for that TE tunnel and path instances.</t>

</section>
<section anchor="tunnel-attributes-specified-by-reference"><name>Tunnel attributes specified by reference</name>

<t>The (reference) case provides the information needed to associate
   multiple path requests that are intended to be used within the same
   tunnel.</t>

<t>In order to indicate the role of the path being requested within the
   intended tunnel (e.g., primary or secondary path), the (path-role)
   choice is defined:</t>

<figure><artwork type="ascii-art" name="tunnel-by-reference.txt"><![CDATA[
    |  |  |     +-- (path-role)
    |  |  |        +--:(primary-path)
    |  |  |        |  +-- primary-path!
    |  |  |        |     ...
    |  |  |        +--:(secondary-path)
    |  |  |        |  +-- secondary-path
    |  |  |        |     ...
    |  |  |        +--:(primary-reverse-path)
    |  |  |        |  +-- primary-reverse-path
    |  |  |        |     ...
    |  |  |        +--:(secondary-reverse-path)
    |  |  |           +-- secondary-reverse-path
    |  |  |              ...
]]></artwork></figure>

<t>The primary-path is a presence container used to indicate that the
   requested path is intended to be used as a primary path. It can also
   contain some attributes which are configured only on primary paths
   (e.g., the k-requested-paths).</t>

<t>The secondary-path container indicates that the requested path is
   intended to be used as a secondary path and it contains at least
   references to one or more primary paths which can use it as a
   candidate secondary path:</t>

<figure><artwork type="ascii-art" name="secondary-path.txt"><![CDATA[
    |  |  |        |  +-- secondary-path
    |  |  |        |     ...
    |  |  |        |     +-- primary-path-ref* []
    |  |  |        |        +-- (primary-path-exist)
    |  |  |        |           +--:(path-ref)
    |  |  |        |           |  +-- primary-path-ref    leafref
    |  |  |        |           +--:(path-request-ref)
    |  |  |        |              +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested secondary path can reference any requested primary paths,
   and, in case they are intended to be used within an existing TE
   tunnel, it could also reference any existing primary-paths.</t>

<t>The secondary-path container can also contain some attributes which
   are configured only on secondary paths (e.g., the protection-type).</t>

<t>The primary-reverse-path container indicates that the requested path
   is intended to be used as a primary reverse path and it contains only
   the reference to the primary path which is intended to use it as a
   reverse path:</t>

<figure><artwork type="ascii-art" name="primary-reverse-path.txt"><![CDATA[
    |  |  |        |  +-- primary-reverse-path
    |  |  |        |     +-- (primary-path-exist)
    |  |  |        |        +--:(path-ref)
    |  |  |        |        |  +-- primary-path-ref    leafref
    |  |  |        |        +--:(path-request-ref)
    |  |  |        |           +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested primary reverse path can reference either a requested
   primary path, or, in case it is intended to be used within an
   existing TE tunnel, an existing primary-path.</t>

<t>The secondary-reverse-path container indicates that the requested
   path is intended to be used as a secondary reverse path and it
   contains at least references to one or more primary paths, whose
   primary reverse path can use it as a candidate secondary reverse
   path:</t>

<figure><artwork type="ascii-art" name="secondary-reverse-path.txt"><![CDATA[
    |  |  |           +-- secondary-reverse-path
    |  |  |              ...
    |  |  |              +-- primary-reverse-path* []
    |  |  |                 +-- (primary-reverse-path-exist)
    |  |  |                    +--:(path-ref)
    |  |  |                    |  +-- primary-path-ref    leafref
    |  |  |                    +--:(path-request-ref)
    |  |  |                       +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested secondary reverse path can reference any requested
   primary paths, and, in case they are intended to be used within an
   existing TE tunnel, it could reference also existing primary-paths.</t>

<t>The secondary-reverse-path container can also contain some attributes
   which are configured only on secondary reverse paths (e.g., the
   protection-type).</t>

<t>In case the requested path is a transit segment of a multi-domain
   end-to-end path, the primary-path may not be needed to be
   setup/computed. However, the request for path computation of a
   secondary-path or a primary-reverse or of a secondary-reverse-path
   requires that the primary-path exists or it is requested within the
   same RPC request. In the latter case, the path request for the
   primary-path should have an empty 'route-object-include-exclude' list,
   as described in section 5.1.1 of <xref target="I-D.ietf-teas-yang-te"/>, to indicate to the server that
   path computation is not requested and no path properties will
   therefore be returned in the RPC response.</t>

</section>
</section>
<section anchor="multi-layer-path-computation"><name>Multi-Layer Path Computation</name>

<t>The models supports requesting multi-layer path computation following
   the same approach based on dependency tunnels, as defined in <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>The tunnel-attributes of a given client-layer path request can
   reference server-layer TE tunnels which can already exist in the YANG
   datastore or be specified in the tunnel-attributes list, within the
   same RPC request:</t>

<figure><artwork type="ascii-art" name="dependency-tunnels.txt"><![CDATA[
    |     +-- dependency-tunnels
    |     |  +-- dependency-tunnel* [name]
    |     |  |  +-- name              -> /te:te/tunnels/tunnel/name
    |     |  |  +-- encoding?         identityref
    |     |  |  +-- switching-type?   identityref
    |     |  +-- dependency-tunnel-attributes* [name]
    |     |     +-- name              leafref
    |     |     +-- encoding?         identityref
    |     |     +-- switching-type?   identityref
]]></artwork></figure>

<t>In a similar way as in <xref target="I-D.ietf-teas-yang-te"/>, the server-layer tunnel
   attributes should provide the information of what would be the
   dynamic link in the client layer topology supported by that tunnel,
   if instantiated:</t>

<figure><artwork type="ascii-art" name="hierarchical-link.txt"><![CDATA[
    |     +-- hierarchical-link
    |        +-- enable?                   boolean
    |        +-- local-te-node-id?         te-types:te-node-id
    |        +-- local-te-link-tp-id?      te-types:te-tp-id
    |        +-- remote-te-node-id?        te-types:te-node-id
    |        +-- te-topology-identifier
    |           +-- provider-id?   te-global-id
    |           +-- client-id?     te-global-id
    |           +-- topology-id?   te-topology-id
]]></artwork></figure>

<t>It is worth noting that since path computation RPC is stateless, the
   dynamic hierarchical links configured for the server-layer tunnel
   attributes cannot be used for path computation of any client-layer
   path unless explicitly referenced in the dependency-tunnel-attributes
   list within the same RPC request.</t>

</section>
</section>
<section anchor="yang-data-model-for-te-path-computation"><name>YANG data model for TE path computation</name>

<section anchor="pc-tree"><name>Tree diagram</name>

<t><xref target="fig-pc-tree"/> below shows the tree diagram of the YANG data model defined
   in module ietf-te-path-computation.yang, defined in <xref target="pc-yang"/>.</t>

<figure title="TE path computation tree diagram" anchor="fig-pc-tree"><artwork type="ascii-art" name="ietf-te-path-computation.tree"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

module: ietf-te-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info:
    +-- path-request* [request-id]
    |  +-- request-id                            uint32
    |  +-- compute-priority?                     uint8
    |  |       {compute-priority}?
    |  +-- (tunnel-attributes)?
    |  |  +--:(reference)
    |  |  |  +-- tunnel-reference
    |  |  |     +-- (tunnel-exist)
    |  |  |     |  +--:(tunnel-ref)
    |  |  |     |  |  +-- tunnel-ref                te:tunnel-ref
    |  |  |     |  +--:(tunnel-attributes-ref)
    |  |  |     |     +-- tunnel-attributes-ref     leafref
    |  |  |     +-- path-name?                      string
    |  |  |     +-- (path-role)
    |  |  |        +--:(primary-path)
    |  |  |        |  +-- primary-path!
    |  |  |        |     +-- preference?          uint8
    |  |  |        |     +-- co-routed?           boolean
    |  |  |        |     +-- k-requested-paths?   uint8
    |  |  |        +--:(secondary-path)
    |  |  |        |  +-- secondary-path
    |  |  |        |     +-- secondary-reverse-path?   leafref
    |  |  |        |     +-- preference?               uint8
    |  |  |        |     +-- protection-type?          identityref
    |  |  |        |     +-- restoration-type?         identityref
    |  |  |        |     +-- restoration-scheme?       identityref
    |  |  |        |     +-- primary-path-ref* []
    |  |  |        |        +-- (primary-path-exist)
    |  |  |        |           +--:(path-ref)
    |  |  |        |           |  +-- primary-path-ref    leafref
    |  |  |        |           +--:(path-request-ref)
    |  |  |        |              +-- path-request-ref    leafref
    |  |  |        +--:(primary-reverse-path)
    |  |  |        |  +-- primary-reverse-path
    |  |  |        |     +-- (primary-path-exist)
    |  |  |        |        +--:(path-ref)
    |  |  |        |        |  +-- primary-path-ref    leafref
    |  |  |        |        +--:(path-request-ref)
    |  |  |        |           +-- path-request-ref    leafref
    |  |  |        +--:(secondary-reverse-path)
    |  |  |           +-- secondary-reverse-path
    |  |  |              +-- preference?             uint8
    |  |  |              +-- protection-type?        identityref
    |  |  |              +-- restoration-type?       identityref
    |  |  |              +-- restoration-scheme?     identityref
    |  |  |              +-- primary-reverse-path* []
    |  |  |                 +-- (primary-reverse-path-exist)
    |  |  |                    +--:(path-ref)
    |  |  |                    |  +-- primary-path-ref    leafref
    |  |  |                    +--:(path-request-ref)
    |  |  |                       +-- path-request-ref    leafref
    |  |  +--:(value)
    |  |     +-- tunnel-name?                    string
    |  |     +-- path-name?                      string
    |  |     +-- (path-role)?
    |  |     |  +--:(primary-path)
    |  |     |  +--:(secondary-path)
    |  |     |  |  +-- secondary-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(primary-reverse-path)
    |  |     |  |  +-- primary-reverse-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(secondary-reverse-path)
    |  |     |     +-- secondary-reverse-path!
    |  |     |        +-- primary-path-name?           string
    |  |     |        +-- primary-reverse-path-name?   string
    |  |     +-- k-requested-paths?              uint8
    |  |     +-- encoding?                       identityref
    |  |     +-- switching-type?                 identityref
    |  |     +-- source
    |  |     |  +-- node-id?        nw:node-id
    |  |     |  +-- te-node-id?     te-types:te-node-id
    |  |     |  +-- tunnel-tp-id?   binary
    |  |     +-- destination
    |  |     |  +-- node-id?        nw:node-id
    |  |     |  +-- te-node-id?     te-types:te-node-id
    |  |     |  +-- tunnel-tp-id?   binary
    |  |     +-- bidirectional?                  boolean
    |  |     +-- te-topology-identifier
    |  |        +-- provider-id?   te-global-id
    |  |        +-- client-id?     te-global-id
    |  |        +-- topology-id?   te-topology-id
    |  +-- association-objects
    |  |  +-- association-object* [association-key]
    |  |  |  +-- association-key    string
    |  |  |  +-- type?              identityref
    |  |  |  +-- id?                uint16
    |  |  |  +-- source
    |  |  |     +-- id?     te-gen-node-id
    |  |  |     +-- type?   enumeration
    |  |  +-- association-object-extended* [association-key]
    |  |     +-- association-key    string
    |  |     +-- type?              identityref
    |  |     +-- id?                uint16
    |  |     +-- source
    |  |     |  +-- id?     te-gen-node-id
    |  |     |  +-- type?   enumeration
    |  |     +-- global-source?     uint32
    |  |     +-- extended-id?       yang:hex-string
    |  +-- optimizations
    |  |  +-- (algorithm)?
    |  |     +--:(metric) {path-optimization-metric}?
    |  |     |  +-- optimization-metric* [metric-type]
    |  |     |  |  +-- metric-type                       identityref
    |  |     |  |  +-- weight?                           uint8
    |  |     |  |  +-- explicit-route-exclude-objects
    |  |     |  |  |  +-- route-object-exclude-object* [index]
    |  |     |  |  |     +-- index                        uint32
    |  |     |  |  |     +-- (type)?
    |  |     |  |  |        +--:(numbered-node-hop)
    |  |     |  |  |        |  +-- numbered-node-hop
    |  |     |  |  |        |     +-- node-id-uri?   nw:node-id
    |  |     |  |  |        |     +-- node-id?       te-node-id
    |  |     |  |  |        |     +-- hop-type?      te-hop-type
    |  |     |  |  |        +--:(numbered-link-hop)
    |  |     |  |  |        |  +-- numbered-link-hop
    |  |     |  |  |        |     +-- link-tp-id    te-tp-id
    |  |     |  |  |        |     +-- hop-type?     te-hop-type
    |  |     |  |  |        |     +-- direction?    te-link-direction
    |  |     |  |  |        +--:(unnumbered-link-hop)
    |  |     |  |  |        |  +-- unnumbered-link-hop
    |  |     |  |  |        |     +-- link-tp-id-uri?   nt:tp-id
    |  |     |  |  |        |     +-- link-tp-id?       te-tp-id
    |  |     |  |  |        |     +-- node-id-uri?      nw:node-id
    |  |     |  |  |        |     +-- node-id?          te-node-id
    |  |     |  |  |        |     +-- hop-type?         te-hop-type
    |  |     |  |  |        |     +-- direction?
    |  |     |  |  |        |             te-link-direction
    |  |     |  |  |        +--:(as-number)
    |  |     |  |  |        |  +-- as-number-hop
    |  |     |  |  |        |     +-- as-number    inet:as-number
    |  |     |  |  |        |     +-- hop-type?    te-hop-type
    |  |     |  |  |        +--:(label)
    |  |     |  |  |        |  +-- label-hop
    |  |     |  |  |        |     +-- te-label
    |  |     |  |  |        |        +-- (technology)?
    |  |     |  |  |        |        |  +--:(generic)
    |  |     |  |  |        |        |     +-- generic?
    |  |     |  |  |        |        |             rt-types:\
                                                    generalized-label
    |  |     |  |  |        |        +-- direction?
    |  |     |  |  |        |                te-label-direction
    |  |     |  |  |        +--:(srlg)
    |  |     |  |  |           +-- srlg
    |  |     |  |  |              +-- srlg?   uint32
    |  |     |  |  +-- explicit-route-include-objects
    |  |     |  |     +-- route-object-include-object* [index]
    |  |     |  |        +-- index                        uint32
    |  |     |  |        +-- (type)?
    |  |     |  |           +--:(numbered-node-hop)
    |  |     |  |           |  +-- numbered-node-hop
    |  |     |  |           |     +-- node-id-uri?   nw:node-id
    |  |     |  |           |     +-- node-id?       te-node-id
    |  |     |  |           |     +-- hop-type?      te-hop-type
    |  |     |  |           +--:(numbered-link-hop)
    |  |     |  |           |  +-- numbered-link-hop
    |  |     |  |           |     +-- link-tp-id    te-tp-id
    |  |     |  |           |     +-- hop-type?     te-hop-type
    |  |     |  |           |     +-- direction?    te-link-direction
    |  |     |  |           +--:(unnumbered-link-hop)
    |  |     |  |           |  +-- unnumbered-link-hop
    |  |     |  |           |     +-- link-tp-id-uri?   nt:tp-id
    |  |     |  |           |     +-- link-tp-id?       te-tp-id
    |  |     |  |           |     +-- node-id-uri?      nw:node-id
    |  |     |  |           |     +-- node-id?          te-node-id
    |  |     |  |           |     +-- hop-type?         te-hop-type
    |  |     |  |           |     +-- direction?
    |  |     |  |           |             te-link-direction
    |  |     |  |           +--:(as-number)
    |  |     |  |           |  +-- as-number-hop
    |  |     |  |           |     +-- as-number    inet:as-number
    |  |     |  |           |     +-- hop-type?    te-hop-type
    |  |     |  |           +--:(label)
    |  |     |  |              +-- label-hop
    |  |     |  |                 +-- te-label
    |  |     |  |                    +-- (technology)?
    |  |     |  |                    |  +--:(generic)
    |  |     |  |                    |     +-- generic?
    |  |     |  |                    |             rt-types:\
                                                    generalized-label
    |  |     |  |                    +-- direction?
    |  |     |  |                            te-label-direction
    |  |     |  +-- tiebreakers
    |  |     |     +-- tiebreaker* [tiebreaker-type]
    |  |     |        +-- tiebreaker-type    identityref
    |  |     +--:(objective-function)
    |  |              {path-optimization-objective-function}?
    |  |        +-- objective-function
    |  |           +-- objective-function-type?   identityref
    |  +-- named-path-constraint?                leafref
    |  |       {te-types:named-path-constraints}?
    |  +-- te-bandwidth
    |  |  +-- (technology)?
    |  |     +--:(generic)
    |  |        +-- generic?   te-bandwidth
    |  +-- link-protection?                      identityref
    |  +-- setup-priority?                       uint8
    |  +-- hold-priority?                        uint8
    |  +-- signaling-type?                       identityref
    |  +-- path-metric-bounds
    |  |  +-- path-metric-bound* [metric-type]
    |  |     +-- metric-type    identityref
    |  |     +-- upper-bound?   uint64
    |  +-- path-affinities-values
    |  |  +-- path-affinities-value* [usage]
    |  |     +-- usage    identityref
    |  |     +-- value?   admin-groups
    |  +-- path-affinity-names
    |  |  +-- path-affinity-name* [usage]
    |  |     +-- usage            identityref
    |  |     +-- affinity-name* [name]
    |  |        +-- name    string
    |  +-- path-srlgs-lists
    |  |  +-- path-srlgs-list* [usage]
    |  |     +-- usage     identityref
    |  |     +-- values*   srlg
    |  +-- path-srlgs-names
    |  |  +-- path-srlgs-name* [usage]
    |  |     +-- usage    identityref
    |  |     +-- names*   string
    |  +-- disjointness?                         te-path-disjointness
    |  +-- explicit-route-objects-always
    |  |  +-- route-object-exclude-always* [index]
    |  |  |  +-- index                        uint32
    |  |  |  +-- (type)?
    |  |  |     +--:(numbered-node-hop)
    |  |  |     |  +-- numbered-node-hop
    |  |  |     |     +-- node-id-uri?   nw:node-id
    |  |  |     |     +-- node-id?       te-node-id
    |  |  |     |     +-- hop-type?      te-hop-type
    |  |  |     +--:(numbered-link-hop)
    |  |  |     |  +-- numbered-link-hop
    |  |  |     |     +-- link-tp-id    te-tp-id
    |  |  |     |     +-- hop-type?     te-hop-type
    |  |  |     |     +-- direction?    te-link-direction
    |  |  |     +--:(unnumbered-link-hop)
    |  |  |     |  +-- unnumbered-link-hop
    |  |  |     |     +-- link-tp-id-uri?   nt:tp-id
    |  |  |     |     +-- link-tp-id?       te-tp-id
    |  |  |     |     +-- node-id-uri?      nw:node-id
    |  |  |     |     +-- node-id?          te-node-id
    |  |  |     |     +-- hop-type?         te-hop-type
    |  |  |     |     +-- direction?        te-link-direction
    |  |  |     +--:(as-number)
    |  |  |     |  +-- as-number-hop
    |  |  |     |     +-- as-number    inet:as-number
    |  |  |     |     +-- hop-type?    te-hop-type
    |  |  |     +--:(label)
    |  |  |        +-- label-hop
    |  |  |           +-- te-label
    |  |  |              +-- (technology)?
    |  |  |              |  +--:(generic)
    |  |  |              |     +-- generic?
    |  |  |              |             rt-types:generalized-label
    |  |  |              +-- direction?       te-label-direction
    |  |  +-- route-object-include-exclude* [index]
    |  |     +-- explicit-route-usage?        identityref
    |  |     +-- index                        uint32
    |  |     +-- (type)?
    |  |        +--:(numbered-node-hop)
    |  |        |  +-- numbered-node-hop
    |  |        |     +-- node-id-uri?   nw:node-id
    |  |        |     +-- node-id?       te-node-id
    |  |        |     +-- hop-type?      te-hop-type
    |  |        +--:(numbered-link-hop)
    |  |        |  +-- numbered-link-hop
    |  |        |     +-- link-tp-id    te-tp-id
    |  |        |     +-- hop-type?     te-hop-type
    |  |        |     +-- direction?    te-link-direction
    |  |        +--:(unnumbered-link-hop)
    |  |        |  +-- unnumbered-link-hop
    |  |        |     +-- link-tp-id-uri?   nt:tp-id
    |  |        |     +-- link-tp-id?       te-tp-id
    |  |        |     +-- node-id-uri?      nw:node-id
    |  |        |     +-- node-id?          te-node-id
    |  |        |     +-- hop-type?         te-hop-type
    |  |        |     +-- direction?        te-link-direction
    |  |        +--:(as-number)
    |  |        |  +-- as-number-hop
    |  |        |     +-- as-number    inet:as-number
    |  |        |     +-- hop-type?    te-hop-type
    |  |        +--:(label)
    |  |        |  +-- label-hop
    |  |        |     +-- te-label
    |  |        |        +-- (technology)?
    |  |        |        |  +--:(generic)
    |  |        |        |     +-- generic?
    |  |        |        |             rt-types:generalized-label
    |  |        |        +-- direction?       te-label-direction
    |  |        +--:(srlg)
    |  |           +-- srlg
    |  |              +-- srlg?   uint32
    |  +-- path-in-segment!
    |  |  +-- label-restrictions
    |  |     +-- label-restriction* [index]
    |  |        +-- restriction?    enumeration
    |  |        +-- index           uint32
    |  |        +-- label-start
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-end
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-step
    |  |        |  +-- (technology)?
    |  |        |     +--:(generic)
    |  |        |        +-- generic?   int32
    |  |        +-- range-bitmap?   yang:hex-string
    |  +-- path-out-segment!
    |  |  +-- label-restrictions
    |  |     +-- label-restriction* [index]
    |  |        +-- restriction?    enumeration
    |  |        +-- index           uint32
    |  |        +-- label-start
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-end
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-step
    |  |        |  +-- (technology)?
    |  |        |     +--:(generic)
    |  |        |        +-- generic?   int32
    |  |        +-- range-bitmap?   yang:hex-string
    |  +-- requested-metrics* [metric-type]
    |  |  +-- metric-type    identityref
    |  +-- return-srlgs?                         boolean
    |  +-- return-affinities?                    boolean
    |  +-- requested-state!
    |     +-- timer?            uint16
    |     +-- transaction-id?   string
    +-- tunnel-attributes* [tunnel-name]
    |  +-- tunnel-name               string
    |  +-- encoding?                 identityref
    |  +-- switching-type?           identityref
    |  +-- source
    |  |  +-- node-id?        nw:node-id
    |  |  +-- te-node-id?     te-types:te-node-id
    |  |  +-- tunnel-tp-id?   binary
    |  +-- destination
    |  |  +-- node-id?        nw:node-id
    |  |  +-- te-node-id?     te-types:te-node-id
    |  |  +-- tunnel-tp-id?   binary
    |  +-- bidirectional?            boolean
    |  +-- association-objects
    |  |  +-- association-object* [association-key]
    |  |  |  +-- association-key    string
    |  |  |  +-- type?              identityref
    |  |  |  +-- id?                uint16
    |  |  |  +-- source
    |  |  |     +-- id?     te-gen-node-id
    |  |  |     +-- type?   enumeration
    |  |  +-- association-object-extended* [association-key]
    |  |     +-- association-key    string
    |  |     +-- type?              identityref
    |  |     +-- id?                uint16
    |  |     +-- source
    |  |     |  +-- id?     te-gen-node-id
    |  |     |  +-- type?   enumeration
    |  |     +-- global-source?     uint32
    |  |     +-- extended-id?       yang:hex-string
    |  +-- protection-type?          identityref
    |  +-- restoration-type?         identityref
    |  +-- restoration-scheme?       identityref
    |  +-- network-id?               nw:network-id
    |  +-- te-topology-identifier
    |  |  +-- provider-id?   te-global-id
    |  |  +-- client-id?     te-global-id
    |  |  +-- topology-id?   te-topology-id
    |  +-- te-bandwidth
    |  |  +-- (technology)?
    |  |     +--:(generic)
    |  |        +-- generic?   te-bandwidth
    |  +-- link-protection?          identityref
    |  +-- setup-priority?           uint8
    |  +-- hold-priority?            uint8
    |  +-- signaling-type?           identityref
    |  +-- hierarchy
    |     +-- dependency-tunnels
    |     |  +-- dependency-tunnel* [name]
    |     |  |  +-- name              -> /te:te/tunnels/tunnel/name
    |     |  |  +-- encoding?         identityref
    |     |  |  +-- switching-type?   identityref
    |     |  +-- dependency-tunnel-attributes* [name]
    |     |     +-- name              leafref
    |     |     +-- encoding?         identityref
    |     |     +-- switching-type?   identityref
    |     +-- hierarchical-link
    |        +-- enable?                   boolean
    |        +-- local-node-id?            nw:node-id
    |        +-- local-te-node-id?         te-types:te-node-id
    |        +-- local-link-tp-id?         nt:tp-id
    |        +-- local-te-link-tp-id?      te-types:te-tp-id
    |        +-- remote-link-tp-id?        nt:tp-id
    |        +-- remote-te-node-id?        te-types:te-node-id
    |        +-- network-id?               nw:network-id
    |        +-- te-topology-identifier
    |           +-- provider-id?   te-global-id
    |           +-- client-id?     te-global-id
    |           +-- topology-id?   te-topology-id
    +-- synchronization* [] {svec}?
       +-- svec
       |  +-- relaxable?      boolean
       |  +-- disjointness?   te-path-disjointness
       |  +-- request-id*     uint32
       +-- svec-constraints
       |  +-- path-metric-bound* [metric-type]
       |     +-- metric-type    identityref
       |     +-- upper-bound?   uint64
       +-- path-srlgs-lists
       |  +-- path-srlgs-list* [usage]
       |     +-- usage     identityref
       |     +-- values*   srlg
       +-- path-srlgs-names
       |  +-- path-srlgs-name* [usage]
       |     +-- usage    identityref
       |     +-- names*   string
       +-- exclude-objects
       |  +-- excludes* []
       |     +-- (type)?
       |        +--:(numbered-node-hop)
       |        |  +-- numbered-node-hop
       |        |     +-- node-id-uri?   nw:node-id
       |        |     +-- node-id?       te-node-id
       |        |     +-- hop-type?      te-hop-type
       |        +--:(numbered-link-hop)
       |        |  +-- numbered-link-hop
       |        |     +-- link-tp-id    te-tp-id
       |        |     +-- hop-type?     te-hop-type
       |        |     +-- direction?    te-link-direction
       |        +--:(unnumbered-link-hop)
       |        |  +-- unnumbered-link-hop
       |        |     +-- link-tp-id-uri?   nt:tp-id
       |        |     +-- link-tp-id?       te-tp-id
       |        |     +-- node-id-uri?      nw:node-id
       |        |     +-- node-id?          te-node-id
       |        |     +-- hop-type?         te-hop-type
       |        |     +-- direction?        te-link-direction
       |        +--:(as-number)
       |        |  +-- as-number-hop
       |        |     +-- as-number    inet:as-number
       |        |     +-- hop-type?    te-hop-type
       |        +--:(label)
       |           +-- label-hop
       |              +-- te-label
       |                 +-- (technology)?
       |                 |  +--:(generic)
       |                 |     +-- generic?
       |                 |             rt-types:generalized-label
       |                 +-- direction?       te-label-direction
       +-- optimizations
          +-- (algorithm)?
             +--:(metric) {te-types:path-optimization-metric}?
             |  +-- optimization-metric* [metric-type]
             |     +-- metric-type    identityref
             |     +-- weight?        uint8
             +--:(objective-function)
                      {te-types:path-optimization-objective-function\
                                                                   }?
                +-- objective-function
                   +-- objective-function-type?   identityref
  augment /te:tunnels-path-compute/te:output/te:path-compute-result:
    +--ro response* [response-id]
       +--ro response-id                         uint32
       +--ro computed-paths-properties
       |  +--ro computed-path-properties* [k-index]
       |     +--ro k-index            uint8
       |     +--ro path-properties
       |        +--ro path-metric* [metric-type]
       |        |  +--ro metric-type           identityref
       |        |  +--ro accumulative-value?   uint64
       |        +--ro path-affinities-values
       |        |  +--ro path-affinities-value* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro value?   admin-groups
       |        +--ro path-affinity-names
       |        |  +--ro path-affinity-name* [usage]
       |        |     +--ro usage            identityref
       |        |     +--ro affinity-name* [name]
       |        |        +--ro name    string
       |        +--ro path-srlgs-lists
       |        |  +--ro path-srlgs-list* [usage]
       |        |     +--ro usage     identityref
       |        |     +--ro values*   srlg
       |        +--ro path-srlgs-names
       |        |  +--ro path-srlgs-name* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro names*   string
       |        +--ro path-route-objects
       |        |  +--ro path-route-object* [index]
       |        |     +--ro index                        uint32
       |        |     +--ro (type)?
       |        |        +--:(numbered-node-hop)
       |        |        |  +--ro numbered-node-hop
       |        |        |     +--ro node-id-uri?   nw:node-id
       |        |        |     +--ro node-id?       te-node-id
       |        |        |     +--ro hop-type?      te-hop-type
       |        |        +--:(numbered-link-hop)
       |        |        |  +--ro numbered-link-hop
       |        |        |     +--ro link-tp-id    te-tp-id
       |        |        |     +--ro hop-type?     te-hop-type
       |        |        |     +--ro direction?    te-link-direction
       |        |        +--:(unnumbered-link-hop)
       |        |        |  +--ro unnumbered-link-hop
       |        |        |     +--ro link-tp-id-uri?   nt:tp-id
       |        |        |     +--ro link-tp-id?       te-tp-id
       |        |        |     +--ro node-id-uri?      nw:node-id
       |        |        |     +--ro node-id?          te-node-id
       |        |        |     +--ro hop-type?         te-hop-type
       |        |        |     +--ro direction?
       |        |        |             te-link-direction
       |        |        +--:(as-number)
       |        |        |  +--ro as-number-hop
       |        |        |     +--ro as-number    inet:as-number
       |        |        |     +--ro hop-type?    te-hop-type
       |        |        +--:(label)
       |        |           +--ro label-hop
       |        |              +--ro te-label
       |        |                 +--ro (technology)?
       |        |                 |  +--:(generic)
       |        |                 |     +--ro generic?
       |        |                 |             rt-types:generalized\
                                                               -label
       |        |                 +--ro direction?
       |        |                         te-label-direction
       |        +--ro te-bandwidth
       |        |  +--ro (technology)?
       |        |     +--:(generic)
       |        |        +--ro generic?   te-bandwidth
       |        +--ro disjointness-type?
       |                te-types:te-path-disjointness
       +--ro computed-path-error-infos
       |  +--ro computed-path-error-info* []
       |     +--ro error-description?   string
       |     +--ro error-timestamp?     yang:date-and-time
       |     +--ro error-reason?        identityref
       +--ro tunnel-ref?                         te:tunnel-ref
       +--ro (path-role)?
          +--:(primary)
          |  +--ro primary-path-ref?             leafref
          +--:(primary-reverse)
          |  +--ro primary-reverse-path-ref?     leafref
          +--:(secondary)
          |  +--ro secondary-path-ref?           leafref
          +--:(secondary-reverse)
             +--ro secondary-reverse-path-ref?   leafref
  augment /te:tunnels-actions/te:input/te:tunnel-info/te:filter-type:
    +--:(path-compute-transactions)
       +-- path-compute-transaction-id*   string
  augment /te:tunnels-actions/te:output:
    +--ro path-computed-delete-result
       +--ro path-compute-transaction-id*   string
]]></artwork></figure>

</section>
<section anchor="pc-yang"><name>YANG module</name>

<figure title="TE path computation YANG module" anchor="fig-pc-yang"><sourcecode type="yang" markers="true" name="ietf-te-path-computation@2023-06-27.yang"><![CDATA[
module ietf-te-path-computation {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-te-path-computation";
  prefix te-pc;

  import ietf-te {
    prefix te;
    reference
      "RFCYYYY: A YANG Data Model for Traffic Engineering Tunnels
       and Interfaces";
  }

  /* Note: The RFC Editor will replace YYYY with the number assigned
     to the RFC once draft-ietf-teas-yang-te becomes an RFC.*/

  import ietf-te-types {
    prefix te-types;
    reference
      "RFCZZZZ: Updated Common YANG Data Types for Traffic 
      Engineering";
  }

  /* Note: The RFC Editor will replace ZZZZ with the number assigned
     to the RFC once draft-ietf-teas-rfc8776-update becomes an RFC.*/

  organization
    "Traffic Engineering Architecture and Signaling (TEAS)
     Working Group";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/teas/>
     WG List:  <mailto:teas@ietf.org>

     Editor:   Italo Busi
               <mailto:italo.busi@huawei.com>

     Editor:   Sergio Belotti
               <mailto:sergio.belotti@nokia.com>

     Editor:   Victor Lopez
               <mailto:victor.lopez@nokia.com>

     Editor:   Oscar Gonzalez de Dios
               <mailto:oscar.gonzalezdedios@telefonica.com>

     Editor:   Anurag Sharma
               <mailto:ansha@google.com>

     Editor:   Yan Shi
               <mailto:shiyan49@chinaunicom.cn>

     Editor:   Ricard Vilalta
               <mailto:ricard.vilalta@cttc.es>

     Editor:   Karthik Sethuraman
               <mailto:karthik.sethuraman@necam.com>

     Editor:   Michael Scharf
               <mailto:michael.scharf@gmail.com>

     Editor:   Daniele Ceccarelli
               <mailto:daniele.ceccarelli@ericsson.com>
     
    ";
  description
    "This module defines a YANG data model for requesting Traffic
     Engineering (TE) path computation. The YANG data model defined
     in this document augments the RPCs defined in the generic TE
     module (ietf-te).

     The model fully conforms to the
     Network Management Datastore Architecture (NMDA).

     Copyright (c) 2023 IETF Trust and the persons
     identified as authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Revised
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.

     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 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  // RFC Ed.: replace XXXX with actual RFC number and remove
  // this note
  // replace the revision date with the module publication date
  // the format is (year-month-day)

  revision 2023-06-27 {
    description
      "Initial revision";
    reference
      "RFC XXXX: A YANG Data Model for requesting path computation";
  }

  // RFC Ed.: replace XXXX with actual RFC number and remove
  // this note

  /*
   * Features
   */
  
  feature svec {
    description
      "This feature indicates that the server supports synchronized 
      path computation requests.";
    reference
      "Section 7.13 of RFC5440: Path Computation Element (PCE) 
      Communication Protocol (PCEP).";
  }

  feature compute-priority {
    description
      "This feature indicates that the server supports path 
      computation request's priority";
    reference
      "Section 7.4.1 of RFC5440: Path Computation Element (PCE) 
      Communication Protocol (PCEP).";
  }

  /*
   * Identities
   */

  identity tunnel-action-path-compute-delete {
    base te-types:tunnel-action-type;
    description
      "Action type to delete the transient states
      of computed paths, as described in section 3.3.1 of
      RFC XXXX.";
    reference
      "RFC XXXX: A YANG Data Model for requesting path computation";
  }

  /*
   * Groupings
   */

  grouping protection-restoration-properties {
    description
      "This grouping defines the restoration and protection types
       for a path in the path computation request.";
    leaf protection-type {
      type identityref {
        base te-types:lsp-protection-type;
      }
      default "te-types:lsp-protection-unprotected";
      description
        "LSP protection type.";
    }
    leaf restoration-type {
      type identityref {
        base te-types:lsp-restoration-type;
      }
      default "te-types:lsp-restoration-restore-any";
      description
        "LSP restoration type.";
    }
    leaf restoration-scheme {
      type identityref {
        base te-types:restoration-scheme-type;
      }
      default "te-types:restoration-scheme-preconfigured";
      description
        "LSP restoration scheme.";
    }
  } // grouping protection-restoration-properties

  grouping requested-info {
    description
      "This grouping defines the information which is requested
       (e.g., metrics), in the path computation request, to be
       returned in the path computation response.";
    list requested-metrics {
      key "metric-type";
      description
        "The list of the requested metrics.

         The metrics listed here MUST be returned in the response.
         Returning other metrics in the response is OPTIONAL.";
      leaf metric-type {
        type identityref {
          base te-types:path-metric-type;
        }
        description
          "The metric requested to be returned in the response";
      }
    }
    leaf return-srlgs {
      type boolean;
      default "false";
      description
        "If true, path Shared Risk Link Groups (SRLGs) MUST be
         returned in the response.
         If false, returning path SRLGs in the response OPTIONAL.";
    }
    leaf return-affinities {
      type boolean;
      default "false";
      description
        "If true, path affinities MUST be returned in the response.
         If false, returning path affinities in the response is
         OPTIONAL.";
    }
  } // grouping requested-info

  grouping requested-state {
    description
      "Configuration for the transient state used
       to report the computed path";
    container requested-state {
      presence
        "Request temporary reporting of the computed path state";
      description
        "Configures attributes for the temporary reporting of the
         computed path state (e.g., expiration timer).";
      leaf timer {
        type uint16;
        units "minutes";
        default "10";
        description
          "The timeout after which the transient state reporting
          the computed path SHOULD be removed.";
      }
      leaf transaction-id {
        type string;
        description
          "The transaction-id associated with this path computation
          to be used for fast deletion of the transient states
          associated with multiple path computations.

          This transaction-id can be used to explicitly delete all
          the transient states of all the computed paths associated
          with the same transaction-id.

          When one path associated with a transaction-id is setup,
          the transient states of all the other computed paths
          with the same transaction-id are automatically removed.

          If not specified, the transient state is removed only
          when the timer expires (when the timer is specified)
          or not created at all (stateless path computation,
          when the timer is not specified).";
      }
    }
  } // grouping requested-state

  grouping reported-state {
    description
      "This grouping defines the information, returned in the path
       computation response, reporting the transient state related
       to the computed path";
    leaf tunnel-ref {
      type te:tunnel-ref;
      description
        "
         Reference to the tunnel that reports the transient state
         of the computed path.

         If no transient state is created, this attribute is
         omitted.
        ";
    }
    choice path-role {
      description
        "The transient state of the computed path can be reported
         as a primary, primary-reverse, secondary or
         a secondary-reverse path of a te-tunnel";
      case primary {
        leaf primary-path-ref {
          type leafref {
            path "/te:te/te:tunnels/"
               + "te:tunnel[te:name=current()/../tunnel-ref]/"
               + "te:primary-paths/te:primary-path/"
               + "te:name";
          }
          must '../tunnel-ref' {
            description
              "The primary-path name can only be reported
               if the tunnel name is also reported.";
          }
          description
            "
             Reference to the primary-path that reports
             the transient state of the computed path.

             If no transient state is created,
             this attribute is omitted.
            ";
        }
      } // case primary
      case primary-reverse {
        leaf primary-reverse-path-ref {
          type leafref {
            path "/te:te/te:tunnels/"
               + "te:tunnel[te:name=current()/../tunnel-ref]/"
               + "te:primary-paths/te:primary-path/"
               + "te:name";
          }
          must '../tunnel-ref' {
            description
              "The primary-reverse-path name can only be reported
               if the tunnel name is also reported.";
          }
          description
            "
             Reference to the primary-reverse-path that reports
             the transient state of the computed path.

             If no transient state is created,
             this attribute is omitted.
            ";
        }
      } // case primary-reverse
      case secondary {
        leaf secondary-path-ref {
          type leafref {
            path "/te:te/te:tunnels/"
               + "te:tunnel[te:name=current()/../tunnel-ref]/"
               + "te:secondary-paths/te:secondary-path/"
               + "te:name";
          }
          must '../tunnel-ref' {
            description
              "The secondary-path name can only be reported
               if the tunnel name is also reported.";
          }
          description
            "
             Reference to the secondary-path that reports
             the transient state of the computed path.

             If no transient state is created,
             this attribute is omitted.
            ";
        }
      } // case secondary
      case secondary-reverse {
        leaf secondary-reverse-path-ref {
          type leafref {
            path "/te:te/te:tunnels/"
               + "te:tunnel[te:name=current()/../tunnel-ref]/"
               + "te:secondary-reverse-paths/"
               + "te:secondary-reverse-path/te:name";
          }
          must '../tunnel-ref' {
            description
              "The secondary-reverse-path name can only be reported
               if the tunnel name is also reported.";
          }
          description
            "
             Reference to the secondary-reverse-path that reports
             the transient state of the computed path.

             If no transient state is created,
             this attribute is omitted.
            ";
        }
      } // case secondary
    } // choice path
  } // grouping reported-state

  grouping synchronization-constraints {
    description
      "Global constraints applicable to synchronized path
       computation requests.";
    container svec-constraints {
      description
        "global svec constraints";
      list path-metric-bound {
        key "metric-type";
        description
          "list of bound metrics";
        leaf metric-type {
          type identityref {
            base te-types:svec-metric-type;
          }
          description
            "SVEC metric type.";
          reference
            "RFC5541: Encoding of Objective Functions in the Path
            Computation Element Communication Protocol (PCEP).";
        }
        leaf upper-bound {
          type uint64;
          description
            "Upper bound on SVEC metric";
        }
      }
    }
    uses te-types:generic-path-srlgs;
    container exclude-objects {
      description
        "Resources to be excluded";
      list excludes {
        description
          "List of Explicit Route Objects to always exclude
           from synchronized path computation";
        uses te-types:explicit-route-hop;
      }
    }
  } // grouping synchronization-constraints

  grouping synchronization-optimization {
    description
      "Optimizations applicable to synchronized path
       computation requests.";
    container optimizations {
      description
        "The objective function container that includes attributes
         to impose when computing a synchronized set of paths";
      choice algorithm {
        description
          "Optimizations algorithm.";
        case metric {
          if-feature "te-types:path-optimization-metric";
          list optimization-metric {
            key "metric-type";
            description
              "svec path metric type";
            leaf metric-type {
              type identityref {
                base te-types:svec-metric-type;
              }
              description
                "TE path metric type usable for computing a set of
                synchronized requests";
            }
            leaf weight {
              type uint8;
              description
                "Metric normalization weight";
            }
          }
        }
        case objective-function {
          if-feature
            "te-types:path-optimization-objective-function";
          container objective-function {
            description
              "The objective function container that includes
               attributes to impose when computing a TE path";
            leaf objective-function-type {
              type identityref {
                base te-types:svec-objective-function-type;
              }
              description
                "Objective function entry";
            }
          }
        }
      }
    }
  } // grouping synchronization-optimization

  grouping synchronization-info {
    description
      "Information for synchronized path computation requests.";
    list synchronization {
      description
        "List of Synchronization VECtors.";
      container svec {
        description
          "Synchronization VECtor";
        leaf relaxable {
          type boolean;
          default "true";
          description
            "If this leaf is true, taking into account this svec is
             OPTIONAL and the path computation process is
             free to ignore svec content.
             Otherwise, it MUST take into account this svec.";
        }
        uses te-types:generic-path-disjointness;
        leaf-list request-id {
          type uint32;
          description
            "This list reports the set of path computation
             requests that are requested to be synchronized.";
        }
      }
      uses synchronization-constraints;
      uses synchronization-optimization;
    }
  } // grouping synchronization-info

  /*
   * Augment TE RPCs
   */

  augment "/te:tunnels-path-compute/te:input/te:path-compute-info" {
    description
      "Augments Path Computation RPC input";
    list path-request {
      key "request-id";
      description
        "The list of the requested paths to be computed";
      leaf request-id {
        type uint32;
        mandatory true;
        description
          "Each path computation request is uniquely identified
           within the RPC request by the request-id.";
      }
      leaf compute-priority {
        if-feature compute-priority;
        type uint8;
        default 0;
        description
          "The path computation request's priority (from 1 to 7) 
          which can be used to constraint the order by which the 
          path computation server processes the path computation 
          requests.

          A higher numerical value of the priority field reflects a 
          higher priority.

          It MUST be set to the default value (i.e., 0) when 
          unused.";
        reference
          "Section 7.4.1 of RFC5440: Path Computation Element (PCE) 
          Communication Protocol (PCEP).";
      }
      choice tunnel-attributes {
        default "value";
        description
          "Whether the tunnel attributes are specified by value
           within this path computation request or by reference.
           The reference could be either to an existing te-tunnel
           or to an entry in the tunnel-attributes list";
        case reference {
          container tunnel-reference {
            description
              "Attributes for a requested path that belongs to
              either an exiting te-tunnel or to an entry in the
              tunnel-attributes list.";
            choice tunnel-exist {
              mandatory true;
              description
                "Whether the tunnel reference is to an existing
                te-tunnel or to an entry in the tunnel-attributes
                list";
              case tunnel-ref {
                leaf tunnel-ref {
                  type te:tunnel-ref;
                  mandatory true;
                  description
                    "The referenced te-tunnel instance";
                }
              } // case tunnel-ref
              case tunnel-attributes-ref {
                leaf tunnel-attributes-ref {
                  type leafref {
                    path "/te:tunnels-path-compute/"
                      + "te:path-compute-info/"
                      + "te-pc:tunnel-attributes/te-pc:tunnel-name";
                  }
                  mandatory true;
                  description
                    "The referenced te-tunnel instance";
                }
              } // case tunnel-attributes-ref 
            } // choice tunnel-exist
            leaf path-name {
              type string;
              description
                "TE path name.";
            }
            choice path-role {
              mandatory true;
              description
                "Whether this path is a primary, or a reverse
                primary, or a secondary, or a reverse secondary
                path.";
              case primary-path {
                container primary-path {
                  presence "Indicates that the requested path
                            is a primary path";
                  description
                    "TE primary path";
                  uses te:path-forward-properties;
                  uses te:k-requested-paths;
                } // container primary-path
              } // case primary-path
              case secondary-path {
                container secondary-path {
                  description
                    "TE secondary path";
                  leaf secondary-reverse-path {
                    type leafref {
                      path "/te:tunnels-path-compute/"
                        + "te:path-compute-info/te-pc:path-request/"
                        + "te-pc:request-id";
                    }
                    description
                      "A reference to the reverse secondary path 
                      when co-routed with the secondary path.";
                  }
                  leaf preference {
                    type uint8 {
                      range "1..255";
                    }
                    default "1";
                    description
                      "Specifies a preference for this path. The 
                      lower the number higher the preference.";
                  }
                  uses protection-restoration-properties;
                  list primary-path-ref {
                    min-elements 1;
                    description
                      "The list of primary paths that reference
                      this path as a candidate secondary path";
                    choice primary-path-exist {
                      mandatory true;
                      description
                        "Whether the path reference is to an existing
                        te-tunnel path or to another path request";
                      case path-ref {
                        leaf primary-path-ref {
                          type leafref {
                            path "/te:te/te:tunnels/te:tunnel"
                              + "[te:name=current()/../../../"
                              + "tunnel-ref]/te:primary-paths/"
                              + "te:primary-path/te:name";
                          }
                          must '../../../tunnel-ref' {
                            description
                              "The primary-path can be referenced
                              if also the tunnel is referenced.";
                          }
                          mandatory true;
                          description
                            "The referenced primary path";
                        }
                      } // case path-ref
                      case path-request-ref {
                        leaf path-request-ref {
                          type leafref {
                            path "/te:tunnels-path-compute/"
                              + "te:path-compute-info/"
                              + "te-pc:path-request/"
                              + "te-pc:request-id";
                          }
                          mandatory true;
                          description
                            "The referenced primary path request";
                        }
                      } // case path-request-ref 
                    } // choice primary-path-exist
                  } // list primary-path-ref
                } // container secondary-path
              } // case secondary-path
              case primary-reverse-path {
                container primary-reverse-path {
                  description
                    "TE primary reverse path";
                  choice primary-path-exist {
                    mandatory true;
                    description
                      "Whether the path reference to the primary
                      paths for which this path is the reverse-path
                      is to an existing te-tunnel path or to
                      another path request.";
                    case path-ref {
                      leaf primary-path-ref {
                        type leafref {
                          path "/te:te/te:tunnels/te:tunnel[te:name"
                            + "=current()/../../tunnel-ref]/"
                            + "te:primary-paths/te:primary-path/"
                            + "te:name";
                        }
                        must '../../tunnel-ref' {
                          description
                            "The primary-path can be referenced
                            if also the tunnel is referenced.";
                        }
                        mandatory true;
                        description
                          "The referenced primary path";
                      }
                    } // case path-ref
                    case path-request-ref {
                      leaf path-request-ref {
                        type leafref {
                          path "/te:tunnels-path-compute/"
                            + "te:path-compute-info/"
                            + "te-pc:path-request/"
                            + "te-pc:request-id";
                        }
                        mandatory true;
                        description
                          "The referenced primary path request";
                      }
                    } // case path-request-ref 
                  } // choice primary-path-exist
                } // container primary-reverse-path
              } // case primary-reverse-path
              case secondary-reverse-path {
                container secondary-reverse-path {
                  description
                    "TE secondary reverse path";
                  // uses te:path-preference;
                  leaf preference {
                    type uint8 {
                      range "1..255";
                    }
                    default "1";
                    description
                      "Specifies a preference for this path. The 
                      lower the number higher the preference.";
                  }
                  uses protection-restoration-properties;
                  list primary-reverse-path {
                    min-elements 1;
                    description
                      "The list of primary reverse paths that
                      reference this path as a candidate
                      secondary reverse path";
                    choice primary-reverse-path-exist {
                      mandatory true;
                      description
                        "Whether the path reference is to an existing
                        te-tunnel path or to another path request";
                      case path-ref {
                        leaf primary-path-ref {
                          type leafref {
                            path "/te:te/te:tunnels/te:tunnel"
                              + "[te:name=current()/../../../"
                              + "tunnel-ref]/te:primary-paths/"
                              + "te:primary-path/te:name";
                          }
                          must '../../../tunnel-ref' {
                            description
                              "The primary-path can be referenced
                              if also the tunnel is referenced.";
                          }
                          mandatory true;
                          description
                            "The referenced primary path";
                        }
                      } // case path-ref
                      case path-request-ref {
                        leaf path-request-ref {
                          type leafref {
                            path "/te:tunnels-path-compute/"
                              + "te:path-compute-info/"
                              + "te-pc:path-request/"
                              + "te-pc:request-id";
                          }
                          mandatory true;
                          description
                            "The referenced primary reverse path
                            request";
                        }
                      } // case path-request-ref 
                    } // choice primary-reverse-path-exist
                  } // list primary-reverse-path-ref
                } // container secondary-reverse-path
              } // case secondary-reverse-path
            } // choice tunnel-path-role
          }
        } // case reference
        case value {
          leaf tunnel-name {
            type string;
            description
              "TE tunnel name.";
          }
          leaf path-name {
            type string;
            description
              "TE path name.";
          }
          choice path-role {
            when 'not (./source) and not (./destination)' {
              description
                "When the tunnel attributes are specified by value
                within this path computation, it is assumed that the
                requested path will be the only path of a tunnel.

                If the requested path is a transit segment path
                (i.e., the source and destination containers are 
                not present), it could be of any type. Otherwise it 
                could only be a primary path.";
            }
            default primary-path;
            description
              "Indicates whether the requested path is a primary
              path, a secondary path, a reverse primary path or a
              reverse secondary path.";
            case primary-path {
              description
                "The requested path is a primary path.";
            }
            container secondary-path {
              presence
                "Indicates that the requested path is a secondary
                path.";
              description
                "The name of the primary path which the requested
                secondary path belongs to.";
              leaf primary-path-name {
                type string;
                description
                  "TE primary path name.";
              }
            } // container secondary-path
            container primary-reverse-path {
              presence
                "Indicates that the requested path is a primary
                reverse path.";
              description
                "The name of the primary path which the requested
                primary reverse path belongs to.";
              leaf primary-path-name {
                type string;
                description
                  "TE primary path name.";
              }
            } // container primary-reverse-path
            container secondary-reverse-path {
              presence
                "Indicates that the requested path is a secondary
                reverse path.";
              description
                "The names of the primary path and of the primary
                reverse path which the requested secondary reverse
                path belongs to.";
              leaf primary-path-name {
                type string;
                description
                  "TE primary path name.";
              }
              leaf primary-reverse-path-name {
                type string;
                description
                  "TE primary reverse path name.";
              }
            } // container primary-reverse-path
          } // choice path-role
          uses te:k-requested-paths;
          uses te-types:encoding-and-switching-type;
          uses te:tunnel-common-attributes;
          uses te-types:te-topology-identifier;
        } // case value
      } // choice tunnel-attributes
      uses te:path-compute-info;
      uses requested-info;
      uses requested-state;
    }
    list tunnel-attributes {
      key "tunnel-name";
      description
        "Tunnel attributes common to multiple request paths";
      leaf tunnel-name {
        type string;
        description
          "TE tunnel name.";
      }
      uses te-types:encoding-and-switching-type;
      uses te:tunnel-common-attributes;
      uses te:tunnel-associations-properties;
      uses protection-restoration-properties;
      uses te-types:tunnel-constraints;
      uses te:tunnel-hierarchy-properties {
        augment "hierarchy/dependency-tunnels" {
          description
            "Augment with the list of dependency tunnel requests.";
          list dependency-tunnel-attributes {
            key "name";
            description
              "A tunnel request entry that this tunnel request can
               potentially depend on.";
            leaf name {
              type leafref {
                path "/te:tunnels-path-compute/"
                   + "te:path-compute-info/te-pc:tunnel-attributes/"
                   + "te-pc:tunnel-name";
              }
              description
                "Dependency tunnel request name.";
            }
            uses te-types:encoding-and-switching-type;
          }
        }
      }
    }
    uses synchronization-info {
      if-feature svec;
    }
  } // path-compute rpc input

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result" {
    description
      "Auguments Path Computation RPC output";
    list response {
      key "response-id";
      config false;
      description
        "response";
      leaf response-id {
        type uint32;
        description
          "The response-id has the same value of the
           corresponding request-id.";
      }
      uses te:path-computation-response;
      uses reported-state;
    }
  } // path-compute rpc output

  augment "/te:tunnels-actions/te:input/te:tunnel-info/"
        + "te:filter-type" {
    description
      "Augment Tunnels Action RPC input filter types";
    case path-compute-transactions {
      when "derived-from-or-self(../te:action-info/te:action, "
         + "'tunnel-action-path-compute-delete')";
      description
        "Path Delete RPC input";
      leaf-list path-compute-transaction-id {
        type string;
        description
          "The list of the transaction-id values of the
           transient states to be deleted";
      }
    }
  } // path-delete rpc input

  augment "/te:tunnels-actions/te:output" {
    description
      "Augment Tunnels Action RPC output with path delete result";
    container path-computed-delete-result {
      description
        "Path Delete RPC output";
      leaf-list path-compute-transaction-id {
        type string;
        description
          "The list of the transaction-id values of the
           transient states that have been successfully deleted";
      }
    }
  } // path-delete rpc output
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document describes use cases of requesting Path Computation
   using YANG data models, which could be used at the ABNO Control
   Interface <xref target="RFC7491"/> and/or between controllers in ACTN <xref target="RFC8453"/>. As
   such, it does not introduce any new security considerations compared
   to the ones related to YANG specification, ABNO specification and
   ACTN Framework defined in <xref target="RFC7950"/>, <xref target="RFC7491"/> and <xref target="RFC8453"/>.</t>

<t>The YANG module defined in this document is designed to be accessed via
   the NETCONF protocol <xref target="RFC6241"/> or RESTCONF protocol <xref target="RFC8040"/>. The
   lowest NETCONF layer is the secure transport layer, and the
   mandatory-to-implement secure transport is Secure Shell (SSH)
   <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the mandatory-to-
   implement secure transport is TLS <xref target="RFC8446"/>.</t>

<t>The Network Configuration Access Control Model (NACM) 
   <xref target="RFC8341"/> provides the means to
   restrict access for particular NETCONF or RESTCONF users to a
   preconfigured subset of all available NETCONF or RESTCONF protocol
   operations and content.</t>

<t>The YANG module defined in this document augments the "tunnels-path-compute" and the "tunnel-actions" RPCs defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> are also applicable to the YANG module
   defined in this document.</t>

<t>The RPC defined in this document can also be used for Denial-of-service (DoS) attacks. The security considerations defines in section 10.7.2 of <xref target="RFC5440"/> also applies to the use of this RPC.</t>

<t>The definition of the input shaping/policing mechanisms and of their configuration is outside the scope of this document.</t>

<t>Some of the RPC operations defined in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control access to these operations. These are the
   operations and their sensitivity/vulnerability:</t>

<t>"te-pc:response/computed-paths-properties": provides the same information provided by the "te:computed-paths-properties" defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> for the TE tunnel state apply also to this subtree.</t>

<t>"te-pc:response/te-pc:tunnel-ref", "te-pc:response/te-pc:primary-path-ref", "te-pc:response/te-pc:primary-reverse-path-ref", "te-pc:response/te-pc:secondary-path-ref" and "te-pc:response/te-pc:secondary-reverse-path-ref" provides a reference where the same information provided in "te-pc:response/computed-paths-properties" is temporarly stored with the operational datastore (see <xref target="temp-state"/>). Therefore access to this information does not provide any additional security issue that the information provided with "te-pc:response/computed-paths-properties".</t>

<t>"/te:tunnels-actions": the YANG model defined in this document augments this action with a new action type that allows deleting the transient states of computed paths (see <xref target="temp-state"/>). A malicious use of this action would have no impact on the paths carrying live traffic but it would preclude the client from using the "transient states" to request the set-up of exactly that path, if still available.</t>

<t>The security considerations spelled out in the
   YANG specification <xref target="RFC7950"/> apply for this document as well.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document registers the following URIs in the "ns" subregistry
   within the "IETF XML registry" <xref target="RFC3688"/>.</t>

<figure><artwork><![CDATA[
      URI: urn:ietf:params:xml:ns:yang:ietf-te-path-computation
      Registrant Contact:  The IESG.
      XML: N/A, the requested URI is an XML namespace.
]]></artwork></figure>

<t>This document registers a YANG module in the "YANG Module Names"
   registry <xref target="RFC7950"/>.</t>

<figure><artwork><![CDATA[
      name:      ietf-te-path-computation
      namespace: urn:ietf:params:xml:ns:yang:ietf-te-path-computation
      prefix:    te-pc
      reference: this document
]]></artwork></figure>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC6241">
  <front>
    <title>Network Configuration Protocol (NETCONF)</title>
    <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
    <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6241"/>
  <seriesInfo name="DOI" value="10.17487/RFC6241"/>
</reference>
<reference anchor="RFC8040">
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="K. Watsen" initials="K." surname="Watsen"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8040"/>
  <seriesInfo name="DOI" value="10.17487/RFC8040"/>
</reference>
<reference anchor="RFC8795">
  <front>
    <title>YANG Data Model for Traffic Engineering (TE) Topologies</title>
    <author fullname="X. Liu" initials="X." surname="Liu"/>
    <author fullname="I. Bryskin" initials="I." surname="Bryskin"/>
    <author fullname="V. Beeram" initials="V." surname="Beeram"/>
    <author fullname="T. Saad" initials="T." surname="Saad"/>
    <author fullname="H. Shah" initials="H." surname="Shah"/>
    <author fullname="O. Gonzalez de Dios" initials="O." surname="Gonzalez de Dios"/>
    <date month="August" year="2020"/>
    <abstract>
      <t>This document defines a YANG data model for representing, retrieving, and manipulating Traffic Engineering (TE) Topologies. The model serves as a base model that other technology-specific TE topology models can augment.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8795"/>
  <seriesInfo name="DOI" value="10.17487/RFC8795"/>
</reference>

<reference anchor="I-D.ietf-teas-yang-te">
   <front>
      <title>A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths, and Interfaces</title>
      <author fullname="Tarek Saad" initials="T." surname="Saad">
         <organization>Cisco Systems Inc</organization>
      </author>
      <author fullname="Rakesh Gandhi" initials="R." surname="Gandhi">
         <organization>Cisco Systems Inc</organization>
      </author>
      <author fullname="Xufeng Liu" initials="X." surname="Liu">
         <organization>Alef Edge</organization>
      </author>
      <author fullname="Vishnu Pavan Beeram" initials="V. P." surname="Beeram">
         <organization>Juniper Networks</organization>
      </author>
      <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
         <organization>Individual</organization>
      </author>
      <date day="20" month="January" year="2026"/>
      <abstract>
	 <t>   This document defines a YANG data model for the provisioning and
   management of Traffic Engineering (TE) tunnels, Label Switched Paths
   (LSPs), and interfaces.  The model covers data that is independent of
   any technology or dataplane encapsulation and is divided into two
   YANG modules that cover device-specific, and device independent data.

   This model covers data for configuration, operational state, remote
   procedural calls, and event notifications.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-teas-yang-te-41"/>
   
</reference>
<reference anchor="RFC7950">
  <front>
    <title>The YANG 1.1 Data Modeling Language</title>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <date month="August" year="2016"/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7950"/>
  <seriesInfo name="DOI" value="10.17487/RFC7950"/>
</reference>
<reference anchor="RFC5440">
  <front>
    <title>Path Computation Element (PCE) Communication Protocol (PCEP)</title>
    <author fullname="JP. Vasseur" initials="JP." role="editor" surname="Vasseur"/>
    <author fullname="JL. Le Roux" initials="JL." role="editor" surname="Le Roux"/>
    <date month="March" year="2009"/>
    <abstract>
      <t>This document specifies the Path Computation Element (PCE) Communication Protocol (PCEP) for communications between a Path Computation Client (PCC) and a PCE, or between two PCEs. Such interactions include path computation requests and path computation replies as well as notifications of specific states related to the use of a PCE in the context of Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) Traffic Engineering. PCEP is designed to be flexible and extensible so as to easily allow for the addition of further messages and objects, should further requirements be expressed in the future. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5440"/>
  <seriesInfo name="DOI" value="10.17487/RFC5440"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC7926">
  <front>
    <title>Problem Statement and Architecture for Information Exchange between Interconnected Traffic-Engineered Networks</title>
    <author fullname="A. Farrel" initials="A." role="editor" surname="Farrel"/>
    <author fullname="J. Drake" initials="J." surname="Drake"/>
    <author fullname="N. Bitar" initials="N." surname="Bitar"/>
    <author fullname="G. Swallow" initials="G." surname="Swallow"/>
    <author fullname="D. Ceccarelli" initials="D." surname="Ceccarelli"/>
    <author fullname="X. Zhang" initials="X." surname="Zhang"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>In Traffic-Engineered (TE) systems, it is sometimes desirable to establish an end-to-end TE path with a set of constraints (such as bandwidth) across one or more networks from a source to a destination. TE information is the data relating to nodes and TE links that is used in the process of selecting a TE path. TE information is usually only available within a network. We call such a zone of visibility of TE information a domain. An example of a domain may be an IGP area or an Autonomous System.</t>
      <t>In order to determine the potential to establish a TE path through a series of connected networks, it is necessary to have available a certain amount of TE information about each network. This need not be the full set of TE information available within each network but does need to express the potential of providing TE connectivity. This subset of TE information is called TE reachability information.</t>
      <t>This document sets out the problem statement for the exchange of TE information between interconnected TE networks in support of end-to-end TE path establishment and describes the best current practice architecture to meet this problem statement. For reasons that are explained in this document, this work is limited to simple TE constraints and information that determine TE reachability.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="206"/>
  <seriesInfo name="RFC" value="7926"/>
  <seriesInfo name="DOI" value="10.17487/RFC7926"/>
</reference>
<reference anchor="RFC8340">
  <front>
    <title>YANG Tree Diagrams</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="215"/>
  <seriesInfo name="RFC" value="8340"/>
  <seriesInfo name="DOI" value="10.17487/RFC8340"/>
</reference>

<reference anchor="I-D.ietf-teas-rfc8776-update">
   <front>
      <title>Common YANG Data Types for Traffic Engineering</title>
      <author fullname="Italo Busi" initials="I." surname="Busi">
         <organization>Huawei</organization>
      </author>
      <author fullname="Aihua Guo" initials="A." surname="Guo">
         <organization>Futurewei Technologies</organization>
      </author>
      <author fullname="Xufeng Liu" initials="X." surname="Liu">
         <organization>Alef Edge</organization>
      </author>
      <author fullname="Tarek Saad" initials="T." surname="Saad">
         <organization>Cisco Systems Inc.</organization>
      </author>
      <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
         <organization>Individual</organization>
      </author>
      <date day="23" month="January" year="2026"/>
      <abstract>
	 <t>   This document defines a collection of common data types, identities,
   and groupings in YANG data modeling language.  These derived common
   data types, identities and groupings are intended to be imported by
   other modules, e.g., those which model the Traffic Engineering (TE)
   configuration and state capabilities.

   This document obsoletes RFC 8776.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-teas-rfc8776-update-21"/>
   
</reference>
<reference anchor="RFC5441">
  <front>
    <title>A Backward-Recursive PCE-Based Computation (BRPC) Procedure to Compute Shortest Constrained Inter-Domain Traffic Engineering Label Switched Paths</title>
    <author fullname="JP. Vasseur" initials="JP." role="editor" surname="Vasseur"/>
    <author fullname="R. Zhang" initials="R." surname="Zhang"/>
    <author fullname="N. Bitar" initials="N." surname="Bitar"/>
    <author fullname="JL. Le Roux" initials="JL." surname="Le Roux"/>
    <date month="April" year="2009"/>
    <abstract>
      <t>The ability to compute shortest constrained Traffic Engineering Label Switched Paths (TE LSPs) in Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks across multiple domains has been identified as a key requirement. In this context, a domain is a collection of network elements within a common sphere of address management or path computational responsibility such as an IGP area or an Autonomous Systems. This document specifies a procedure relying on the use of multiple Path Computation Elements (PCEs) to compute such inter-domain shortest constrained paths across a predetermined sequence of domains, using a backward-recursive path computation technique. This technique preserves confidentiality across domains, which is sometimes required when domains are managed by different service providers. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5441"/>
  <seriesInfo name="DOI" value="10.17487/RFC5441"/>
</reference>
<reference anchor="RFC5541">
  <front>
    <title>Encoding of Objective Functions in the Path Computation Element Communication Protocol (PCEP)</title>
    <author fullname="JL. Le Roux" initials="JL." surname="Le Roux"/>
    <author fullname="JP. Vasseur" initials="JP." surname="Vasseur"/>
    <author fullname="Y. Lee" initials="Y." surname="Lee"/>
    <date month="June" year="2009"/>
    <abstract>
      <t>The computation of one or a set of Traffic Engineering Label Switched Paths (TE LSPs) in MultiProtocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks is subject to a set of one or more specific optimization criteria, referred to as objective functions (e.g., minimum cost path, widest path, etc.).</t>
      <t>In the Path Computation Element (PCE) architecture, a Path Computation Client (PCC) may want a path to be computed for one or more TE LSPs according to a specific objective function. Thus, the PCC needs to instruct the PCE to use the correct objective function. Furthermore, it is possible that not all PCEs support the same set of objective functions; therefore, it is useful for the PCC to be able to automatically discover the set of objective functions supported by each PCE.</t>
      <t>This document defines extensions to the PCE communication Protocol (PCEP) to allow a PCE to indicate the set of objective functions it supports. Extensions are also defined so that a PCC can indicate in a path computation request the required objective function, and a PCE can report in a path computation reply the objective function that was used for path computation.</t>
      <t>This document defines objective function code types for six objective functions previously listed in the PCE requirements work, and provides the definition of four new metric types that apply to a set of synchronized requests. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5541"/>
  <seriesInfo name="DOI" value="10.17487/RFC5541"/>
</reference>
<reference anchor="RFC6242">
  <front>
    <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
    <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6242"/>
  <seriesInfo name="DOI" value="10.17487/RFC6242"/>
</reference>
<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="RFC8341">
  <front>
    <title>Network Configuration Access Control Model</title>
    <author fullname="A. Bierman" initials="A." surname="Bierman"/>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
      <t>This document obsoletes RFC 6536.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="91"/>
  <seriesInfo name="RFC" value="8341"/>
  <seriesInfo name="DOI" value="10.17487/RFC8341"/>
</reference>
<reference anchor="RFC3688">
  <front>
    <title>The IETF XML Registry</title>
    <author fullname="M. Mealling" initials="M." surname="Mealling"/>
    <date month="January" year="2004"/>
    <abstract>
      <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="81"/>
  <seriesInfo name="RFC" value="3688"/>
  <seriesInfo name="DOI" value="10.17487/RFC3688"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC7491">
  <front>
    <title>A PCE-Based Architecture for Application-Based Network Operations</title>
    <author fullname="D. King" initials="D." surname="King"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="March" year="2015"/>
    <abstract>
      <t>Services such as content distribution, distributed databases, or inter-data center connectivity place a set of new requirements on the operation of networks. They need on-demand and application-specific reservation of network connectivity, reliability, and resources (such as bandwidth) in a variety of network applications (such as point-to-point connectivity, network virtualization, or mobile back-haul) and in a range of network technologies from packet (IP/MPLS) down to optical. An environment that operates to meet these types of requirements is said to have Application-Based Network Operations (ABNO). ABNO brings together many existing technologies and may be seen as the use of a toolbox of existing components enhanced with a few new elements.</t>
      <t>This document describes an architecture and framework for ABNO, showing how these components fit together. It provides a cookbook of existing technologies to satisfy the architecture and meet the needs of the applications.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7491"/>
  <seriesInfo name="DOI" value="10.17487/RFC7491"/>
</reference>
<reference anchor="RFC8453">
  <front>
    <title>Framework for Abstraction and Control of TE Networks (ACTN)</title>
    <author fullname="D. Ceccarelli" initials="D." role="editor" surname="Ceccarelli"/>
    <author fullname="Y. Lee" initials="Y." role="editor" surname="Lee"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>Traffic Engineered (TE) networks have a variety of mechanisms to facilitate the separation of the data plane and control plane. They also have a range of management and provisioning protocols to configure and activate network resources. These mechanisms represent key technologies for enabling flexible and dynamic networking. The term "Traffic Engineered network" refers to a network that uses any connection-oriented technology under the control of a distributed or centralized control plane to support dynamic provisioning of end-to- end connectivity.</t>
      <t>Abstraction of network resources is a technique that can be applied to a single network domain or across multiple domains to create a single virtualized network that is under the control of a network operator or the customer of the operator that actually owns the network resources.</t>
      <t>This document provides a framework for Abstraction and Control of TE Networks (ACTN) to support virtual network services and connectivity services.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8453"/>
  <seriesInfo name="DOI" value="10.17487/RFC8453"/>
</reference>
<reference anchor="RFC8454">
  <front>
    <title>Information Model for Abstraction and Control of TE Networks (ACTN)</title>
    <author fullname="Y. Lee" initials="Y." surname="Lee"/>
    <author fullname="S. Belotti" initials="S." surname="Belotti"/>
    <author fullname="D. Dhody" initials="D." surname="Dhody"/>
    <author fullname="D. Ceccarelli" initials="D." surname="Ceccarelli"/>
    <author fullname="B. Yoon" initials="B." surname="Yoon"/>
    <date month="September" year="2018"/>
    <abstract>
      <t>This document provides an information model for Abstraction and Control of TE Networks (ACTN).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8454"/>
  <seriesInfo name="DOI" value="10.17487/RFC8454"/>
</reference>

<reference anchor="I-D.ietf-ccamp-otn-topo-yang">
   <front>
      <title>A YANG Data Model for Optical Transport Network Topology</title>
      <author fullname="Haomian Zheng" initials="H." surname="Zheng">
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname="Italo Busi" initials="I." surname="Busi">
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname="Xufeng Liu" initials="X." surname="Liu">
         <organization>Alef Edge</organization>
      </author>
      <author fullname="Sergio Belotti" initials="S." surname="Belotti">
         <organization>Nokia</organization>
      </author>
      <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
         <organization>Telefonica</organization>
      </author>
      <date day="7" month="November" year="2024"/>
      <abstract>
	 <t>   This document defines a YANG data model for representing, retrieving,
   and manipulating Optical Transport Network (OTN) topologies.  It is
   independent of control plane protocols and captures topological and
   resource-related information pertaining to OTN.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-ccamp-otn-topo-yang-20"/>
   
</reference>
<reference anchor="RFC4655">
  <front>
    <title>A Path Computation Element (PCE)-Based Architecture</title>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <author fullname="J.-P. Vasseur" initials="J.-P." surname="Vasseur"/>
    <author fullname="J. Ash" initials="J." surname="Ash"/>
    <date month="August" year="2006"/>
    <abstract>
      <t>Constraint-based path computation is a fundamental building block for traffic engineering systems such as Multiprotocol Label Switching (MPLS) and Generalized Multiprotocol Label Switching (GMPLS) networks. Path computation in large, multi-domain, multi-region, or multi-layer networks is complex and may require special computational components and cooperation between the different network domains.</t>
      <t>This document specifies the architecture for a Path Computation Element (PCE)-based model to address this problem space. This document does not attempt to provide a detailed description of all the architectural components, but rather it describes a set of building blocks for the PCE architecture from which solutions may be constructed. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4655"/>
  <seriesInfo name="DOI" value="10.17487/RFC4655"/>
</reference>
<reference anchor="RFC8342">
  <front>
    <title>Network Management Datastore Architecture (NMDA)</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
    <author fullname="P. Shafer" initials="P." surname="Shafer"/>
    <author fullname="K. Watsen" initials="K." surname="Watsen"/>
    <author fullname="R. Wilton" initials="R." surname="Wilton"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8342"/>
  <seriesInfo name="DOI" value="10.17487/RFC8342"/>
</reference>
<reference anchor="RFC6805">
  <front>
    <title>The Application of the Path Computation Element Architecture to the Determination of a Sequence of Domains in MPLS and GMPLS</title>
    <author fullname="D. King" initials="D." role="editor" surname="King"/>
    <author fullname="A. Farrel" initials="A." role="editor" surname="Farrel"/>
    <date month="November" year="2012"/>
    <abstract>
      <t>Computing optimum routes for Label Switched Paths (LSPs) across multiple domains in MPLS Traffic Engineering (MPLS-TE) and GMPLS networks presents a problem because no single point of path computation is aware of all of the links and resources in each domain. A solution may be achieved using the Path Computation Element (PCE) architecture.</t>
      <t>Where the sequence of domains is known a priori, various techniques can be employed to derive an optimum path. If the domains are simply connected, or if the preferred points of interconnection are also known, the Per-Domain Path Computation technique can be used. Where there are multiple connections between domains and there is no preference for the choice of points of interconnection, the Backward-Recursive PCE-based Computation (BRPC) procedure can be used to derive an optimal path.</t>
      <t>This document examines techniques to establish the optimum path when the sequence of domains is not known in advance. The document shows how the PCE architecture can be extended to allow the optimum sequence of domains to be selected, and the optimum end-to-end path to be derived through the use of a hierarchical relationship between domains. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6805"/>
  <seriesInfo name="DOI" value="10.17487/RFC6805"/>
</reference>
<reference anchor="RFC7446">
  <front>
    <title>Routing and Wavelength Assignment Information Model for Wavelength Switched Optical Networks</title>
    <author fullname="Y. Lee" initials="Y." role="editor" surname="Lee"/>
    <author fullname="G. Bernstein" initials="G." role="editor" surname="Bernstein"/>
    <author fullname="D. Li" initials="D." surname="Li"/>
    <author fullname="W. Imajuku" initials="W." surname="Imajuku"/>
    <date month="February" year="2015"/>
    <abstract>
      <t>This document provides a model of information needed by the Routing and Wavelength Assignment (RWA) process in Wavelength Switched Optical Networks (WSONs). The purpose of the information described in this model is to facilitate constrained optical path computation in WSONs. This model takes into account compatibility constraints between WSON signal attributes and network elements but does not include constraints due to optical impairments. Aspects of this information that may be of use to other technologies utilizing a GMPLS control plane are discussed.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7446"/>
  <seriesInfo name="DOI" value="10.17487/RFC7446"/>
</reference>



    </references>

</references>


<?line 3533?>

<section anchor="examples"><name>Examples</name>

<t>This section contains examples of use of the model with RESTCONF
<xref target="RFC8040"/> and JSON encoding.</t>

<t>These examples show how path computation can be requested for the tunnels configuration provided in Appendix A of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<section anchor="basic-example"><name>Basic Path Computation</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 12.1 of of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>In this case, the TE Tunnel has only one primary path with no specific constraints.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="basic.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 1,
          "tunnel-name": "Example_LSP_Tunnel_A_2",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "192.0.2.1",
          "destination": "192.0.2.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="transient-state-example"><name>Path Computation with transient state</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 12.1 of of <xref target="I-D.ietf-teas-yang-te"/> requesting some transient state to be reported within the operational datastore, as described <xref target="temp-state"/>.</t>

<t>In this case, the TE Tunnel has only one primary path with no specific constraints.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="transient-state.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 2,
          "tunnel-name": "Example_LSP_Tunnel_A_2",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "192.0.2.1",
          "destination": "192.0.2.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp",
          "requested-state": {
            "transaction-id": "example"
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="global-path-constraint-example"><name>Path Computation with Global Path Constraint</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 12.3 of of <xref target="I-D.ietf-teas-yang-te"/>. The 'named path constraint' is created in section 12.2 of <xref target="I-D.ietf-teas-yang-te"/> applies to this path computation request.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="global-path-constraint.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 3,
          "tunnel-name": "Example_LSP_Tunnel_A_4_1",
          "path-name": "Simple_LSP_1",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "192.0.2.1",
          "destination": "192.0.2.4",
          "bidirectional": "false",
          "signaling-type": "path-setup-rsvp",
          "named-path-constraint": "max-hop-3",
          "requested-state": {}
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="tunnel-path-constraint-example"><name>Path Computation with Per-tunnel Path Constraint</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in <xref section="12.4" sectionFormat="of" target="I-D.ietf-teas-yang-te"/>, using a per tunnel path constraint.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="tunnel-path-constraint.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 4,
          "tunnel-name": "Example_LSP_Tunnel_A_4_2",
          "path-name": "path1",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "192.0.2.1",
          "destination": "192.0.2.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp",
          "path-metric-bounds": {
            "path-metric-bound": [
              {
                "metric-type": "te-types:path-metric-hop",
                "upper-bound": "3"
              }
            ]
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="path-computation-result"><name>Path Computation result</name>

<t>This example reports the output of the path computation RPC request described in <xref target="tunnel-path-constraint-example"/>.</t>

<figure><artwork type="ascii-art"><![CDATA[
HTTP/1.1 200 OK
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="computed-path.json"><![CDATA[
{
  "ietf-te:output": {
    "path-compute-result": {
      "ietf-te-path-computation:response": [
        {
          "response-id": 3,
          "computed-paths-properties": {
            "computed-path-properties": [
              {
                "k-index": "1",
                "path-properties": {
                  "path-route-objects": {
                    "path-route-object": [
                      {
                        "index": "1",
                        "numbered-node-hop": {
                          "node-id": "192.0.2.2"
                        }
                      },
                      {
                        "index": "2",
                        "numbered-node-hop": {
                          "node-id": "192.0.2.4"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "tunnel-ref": "Example_LSP_Tunnel_A_4_1",
          "primary-path-ref": "path1"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="path-computation-with-primary-and-secondary-paths"><name>Path Computation with Primary and Secondary Paths</name>

<t>This section contains examples of use of the model to compute primary and secondary paths described in section 12.6 of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>These examples consider the cases where:
- primary and reverse paths are unidirectional and not co-routed (example-1);
- primary and reverse paths are bidirectional (example-3);
- primary and reverse paths are unidirectional and co-routed (example-4).</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>

<figure><sourcecode type="json" markers="false" name="primary-secondary-paths.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 1,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "primary-1 (fwd)",
            "primary-path": {}
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 2,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "primary-2 (rev)",
            "primary-reverse-path": {
              "primary-path-request-ref": 1
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.3",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 3,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-1 (fwd)",
            "secondary-path": {
              "primary-path": [
                {
                  "path-request-ref": 1
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.1"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 4,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-2 (fwd)",
            "secondary-path": {
              "primary-path": [
                {
                  "path-request-ref": 1
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.5",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 5,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-3 (rev)",
            "secondary-reverse-path": {
              "primary-reverse-path": [
                {
                  "path-request-ref": 2
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.5"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.4",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 6,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-4 (rev)",
            "secondary-reverse-path": {
              "primary-reverse-path": [
                {
                  "path-request-ref": 2
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.4"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.3",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 7,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-5 (rev)",
            "secondary-reverse-path": {
              "primary-reverse-path": [
                {
                  "path-request-ref": 2
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.3"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.1",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 8,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-3",
            "path-name": "primary-1 (bidir)",
            "primary-path": {}
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 9,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-3",
            "path-name": "secondary-1 (bidir)",
            "secondary-path": {
              "primary-path": [
                {
                  "path-request-ref": 8
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.1"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 10,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-3",
            "path-name": "secondary-2 (bidir)",
            "secondary-path": {
              "primary-path": [
                {
                  "path-request-ref": 8
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.5",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 11,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-4",
            "path-name": "primary-1 (fwd)",
            "primary-path": {
              "co-routed": [null]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 12,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-4",
            "path-name": "primary-2 (rev)",
            "primary-reverse-path": {
              "primary-path-request-ref": 11
            }
          }
        },
        {
          "request-id": 13,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-4",
            "path-name": "secondary-1 (fwd)",
            "secondary-path": {
              "primary-path": [
                {
                  "co-routed": [null],
                  "path-request-ref": 11
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.1"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 14,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-4",
            "path-name": "secondary-2 (fwd)",
            "secondary-path": {
              "primary-path": [
                {
                  "co-routed": [null],
                  "path-request-ref": 11
                }
              ]
            }
          },
          "explicit-route-objects-always": {
            "route-object-include-exclude": [
              {
                "index": 1,
                "numbered-node-hop": {
                  "node-id": "192.0.2.2"
                }
              },
              {
                "index": 2,
                "numbered-node-hop": {
                  "node-id": "192.0.2.5",
                  "hop-type": "loose"
                }
              }
            ]
          }
        },
        {
          "request-id": 15,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-3 (rev)",
            "secondary-reverse-path": {
              "primary-reverse-path": [
                {
                  "path-request-ref": 12
                }
              ]
            }
          }
        },
        {
          "request-id": 16,
          "tunnel-reference": {
            "tunnel-attributes-ref": "example-1",
            "path-name": "secondary-4 (rev)",
            "secondary-reverse-path": {
              "primary-reverse-path": [
                {
                  "path-request-ref": 12
                }
              ]
            }
          }
        }
      ],
      "ietf-te-path-computation:tunnel-attributes": [
        {
          "tunnel-name": "example-1",
          "source": "192.0.2.1",
          "destination": "192.0.2.5",
          "bidirectional": "false"
        },
        {
          "tunnel-name": "example-3",
          "source": "192.0.2.1",
          "destination": "192.0.2.5",
          "bidirectional": "true"
        },
        {
          "tunnel-name": "example-4",
          "source": "192.0.2.1",
          "destination": "192.0.2.5",
          "bidirectional": "false"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank Karthik Sethuraman, Igor Bryskin and Xian Zhang for
participating in the initial discussions that have triggered this
work and providing valuable insights.</t>

<t>The authors would like to thank the authors of the TE tunnel YANG
data model <xref target="I-D.ietf-teas-yang-te"/>, in particular Igor Bryskin, Vishnu Pavan
Beeram, Tarek Saad and Xufeng Liu, for their inputs to the
discussions and support in having consistency between the Path
Computation and TE tunnel YANG data models.</t>

<t>The authors would like to thank Adrian Farrel, Dhruv Dhody, Igor
Bryskin, Julien Meuric and Lou Berger for their valuable input to the
discussions that has clarified that the path being set up is not
necessarily the same as the path that has been previously computed
and, in particular to Dhruv Dhody, for his suggestion to describe the
need for a path verification phase to check that the actual path
being set up meets the required end-to-end metrics and constraints.</t>

<t>The authors would like to thank Aihua Guo, Lou Berger, Shaolong Gan,
Martin Bjorklund and Tom Petch for their useful comments on how to
define XPath statements in YANG RPCs.</t>

<t>The authors would like to thank Haomian Zheng, Yanlei Zheng, Tom
Petch, Aihua Guo and Martin Bjorklund for their review and valuable
comments to this document.</t>

<t>Previous versions of document were prepared using 2-Word-v2.0.template.dot.</t>

<t>This document was prepared using kramdown.</t>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
      <organization>Cisco</organization>
      <address>
        <email>daniele.ietf@gmail.com</email>
      </address>
    </contact>
    <contact initials="V." surname="Lopez" fullname="Victor Lopez">
      <organization>Nokia</organization>
      <address>
        <email>victor.lopez@nokia.com</email>
      </address>
    </contact>
    <contact initials="R." surname="Vilalta" fullname="Ricard Vilalta">
      <organization>CTTC</organization>
      <address>
        <email>ricard.vilalta@cttc.es</email>
      </address>
    </contact>
    <contact initials="M." surname="Scharf" fullname="Michael Scharf">
      <organization>Nokia</organization>
      <address>
        <email>michael.scharf@gmail.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Beller" fullname="Dieter Beller">
      <organization>Nokia</organization>
      <address>
        <email>dieter.beller@nokia.com</email>
      </address>
    </contact>
    <contact initials="G." surname="Bruno" fullname="Gianmarco Bruno">
      <organization>Ericsson</organization>
      <address>
        <email>gianmarco.bruno@ericsson.com</email>
      </address>
    </contact>
    <contact initials="F." surname="Lazzeri" fullname="Francesco Lazzeri">
      <organization>Retired</organization>
      <address>
      </address>
    </contact>
    <contact initials="Y." surname="Lee" fullname="Young Lee">
      <organization>Samsung Electronics</organization>
      <address>
        <email>younglee.tx@gmail.com</email>
      </address>
    </contact>
    <contact initials="C." surname="Perocchio" fullname="Carlo Perocchio">
      <organization>Ericsson</organization>
      <address>
        <email>carlo.perocchio@ericsson.com</email>
      </address>
    </contact>
    <contact initials="O." surname="Dugeon" fullname="Olivier Dugeon">
      <organization>Orange Labs</organization>
      <address>
        <email>olivier.dugeon@orange.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Meuric" fullname="Julien Meuric">
      <organization>Orange Labs</organization>
      <address>
        <email>julien.meuric@orange.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
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

-->

</rfc>

