<?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.6.17 (Ruby 2.7.0) -->


<!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-22" 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="2024" month="February" day="14"/>

    
    <workgroup>TEAS Working Group</workgroup>
    

    <abstract>


<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>


<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.</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">
  <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">
  <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:generali\
zed-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:generali\
zed-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='Normative References'>



<reference anchor='RFC6241' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://datatracker.ietf.org/doc/html/draft-ietf-teas-yang-te-36'>
   <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='2' month='February' year='2024'/>
      <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-36'/>
   
</reference>

<reference anchor='RFC7950' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://datatracker.ietf.org/doc/html/draft-ietf-teas-rfc8776-update-09'>
   <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='29' month='January' year='2024'/>
      <abstract>
	 <t>   This document defines a collection of common data types and groupings
   in YANG data modeling language.  These derived common types and
   groupings are intended to be imported by modules that model 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-09'/>
   
</reference>

<reference anchor='RFC5441' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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'>



<reference anchor='RFC7491' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://datatracker.ietf.org/doc/html/draft-ietf-ccamp-otn-topo-yang-17'>
   <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>IBM Corporation</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='10' month='July' year='2023'/>
      <abstract>
	 <t>   This document describes a YANG data model to describe the topologies
   of an Optical Transport Network (OTN).  It is independent of control
   plane protocols and captures topological and resource-related
   information pertaining to OTN.  This model enables clients, which
   interact with a transport domain controller, for OTN topology-related
   operations such as obtaining the relevant topology resource
   information.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-ccamp-otn-topo-yang-17'/>
   
</reference>

<reference anchor='RFC4655' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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>


<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 section 12.4 of of <xref 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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
yTKfKUzwj+EvsmXaS7CMLy5jq6HjVfBnTYw9z/YOQ6JMGNhlsVw3cr2Yngqb
nm9X4uKsC75ysPZu9FLd52i96NuYXZMtPrMUlEnvShG7u7YJIJM+6RiofJMs
gcoAED44bvsQGYKQWd2Q20YRmTh8PYMrMxPYd9OJoTFRqPp62O0+AdrP9s3x
xwhH0JgItvfwQH+Rff/yHn39/cuH2QuDhgXS6T6RyeL/vAmRyPYNEqptBAn5
QSb7JpyKQSKKgl0I+R1ncF9m8MjMIECgg0IIpDORLLUQnZ7drpaZNM94CHSB
0DQeyDQ+zV6gLvbqIULRw3M/QU1W/PY/9cdh7jOsGn6i0Da0TrCjGtyAA7Qe
DJkP4V6xg9sfRhhqHSkjQLYRTJ1Na0XVLH3e+GIpgq8jCuks3qGBmox8wdfd
7uPJGEeUGR+6+ggx957hqcMAnJgZEDHxjxYxNL7FwwPioau7d+TMgISZxrEI
tmgXC83rb7LwEwiahICRDRZ2DwSM+TrEIbJLYxOJYTDcNViFGAYjxneiZkC8
+J+pEi/6ez1+TNakZjEZkC6JT7A93ehbCZtfRbjYsX+RdLFkSBsIMeniwVBk
IPFihQDKFz3HnhkqCSW9Wa6gdDKf/dsXT9Kk1SrMzBdO53VFMdKMRAcRteYO
jcBwM5/bF4fKn+JEi0IiKqAU5dlxCf/3hvExnR2QhArDHxz5lv7zZnr74sRc
Yu+HbTtI+Iv/hjn+DcwhsjJJFcb05j50BR0uSVeFmcWBIDUf3wLmb7pQEiqM
+xAJ31hM4m09BCJAkGhESKDksZb8XRXG9FDEppH94eMqzCwEov9x++IokDpd
FSby6SxaSoWZDdoBGkhKh9lKielAtXQ4nJOZ/vLypqFN/n2fbEmoMD2z7nJy
zEyaeS18CBEZs43+EpcvXc08qbqk5MtY1SUhWYLuaZ0lKllG6ywxiZIYOjzx
oxJlrKoSypEUwSNqRihHRusnHdkRmj+9KomWHduoJGlp0auDdKXFB+kgH6Jy
xPzA2hXoOYTpvLdPbcwTCvVEsIl6hc1jCw3Y8xB3YwcGHFmBAw7wIjjm1bcK
LSGH2Tl7Rp++JI3DeudgU+KEXt03HrZDDKpfcwBN2vE4iN0l+UIxJJPR2glc
sjvGJ7s2glb0GI4QLlv3cMG46gjOeZG7UM1aAoOb1kIzrlyjo/HbW4nJ//7l
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
6LRpWpKvVLIeFAl35WlDxRZYwjnftJdV3ZiqqHNAdgYbFM8QhIsV2Kn87MIN
+gq2ecMhkqie4CibpqA69RRfTd/wy4GMZsu1xqU3HVEw5qZFygAec1qqCVbK
BUSvyhYPyPWmbjY5EKKtJghPOjcb8jObM2tZzosVDA0KxFXDB4QsFBefflW8
Kxu70o9Pj0H6cw/YaIgbsAugfcqGcfZwNjd0cFT8yNDtu+IiX2YvMZAO1bIG
oOPFFNYArrj9sbCQ6bFrzqYWARWFO5cEcVLOPXYBIhi1jzCBfytVkmgEogJ/
w/P63+DzBczFMJI5x8u2KZbntHmQ78B6QNSxYjFoWT534iMAYL5Fk3307M+n
rz+a8H+xPC3+/erkX//89NXJMf59+u3hd9/ZPwzvcrvTb1/8+btj95frf/Ti
2bOT58cMAr7NvK8EykfPDv/yES109tGLl6+fvnh++N1Hka0JWwCIfYbMBmsO
6ldLXCxQWMic8U59fPQyu/cw20V63L937w97/Ofn9z57uJddXxYrHq5awbak
fzoa3mT5el3AOQhgciDfPF/jEQ98nFO18utVdgka3mxHFOj9fVHAZgdW88Kl
Yc0LdJYNUB9bGAUMxsWw0XeF9KZZwvKYfxsguJ51wfyWkfZldTlhiPXmbCk7
iBpYgEXGFdSRZXZvYDJTUDjR/5GjcYvNLGAUG9NPPp3e/8zotR1pDfL6Kd6O
5kvbbadP26XppwwDJc9Dge1ruL8iWVljJhR/nz0pcpSmzDaowPJZdc5fU6Bn
HyVol5rG5WqB9C8aqStvy3WbovONCnkFzjRQOkaoUKWZpQlr5NRns3sPRAQ8
evjwk4PsJQI7UsBOlnyM7L48gmPRAECrA1UgbgOSrK3m1ZIavdybebQ30wsL
LP+adCESmN4RUnzUZGbYMTR5OLv3VyaKZaCn7EwrFQuRqSg+Nvskkr0TntuC
/RuGjGc5nV7GR+l1w+++SFP7kOdNYRUgEwUuVzsHzRmjt7nyvNXegTjGzUK0
Z3nmCc1GqPlg9oCoabqaLd3DnL/arjdEJtMPmvs0vpBv9bsr/TzKBbEMsqoF
ZdRPFrcWFgkUNwyR2plCOKecpyJ6YWpLW6KhEy98L2awzHgllZvW/RLyybJZ
TwMwX5i2780fMKl8s2yznVS3zUr+USx2vnC9OsQCcn13+jIkhJ3UezW38GXb
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
noziywha/x8dHkKwdbsCAA==

-->

</rfc>

