<?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-21" 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="2023" month="July" day="07"/>

    
    <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-33'>
   <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>
      <author fullname='Oscar Gonzalez de Dios' initials='O. G.' surname='de Dios'>
         <organization>Telefonica</organization>
      </author>
      <date day='4' month='July' year='2023'/>
      <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-33'/>
   
</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-04'>
   <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='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='27' month='June' year='2023'/>
      <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-04'/>
   
</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-16'>
   <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='23' month='November' year='2022'/>
      <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-16'/>
   
</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 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="K." surname="Sethuraman" fullname="Karthik Sethuraman">
      <organization>NEC</organization>
      <address>
        <email>karthik.sethuraman@necam.com</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>Ericsson</organization>
      <address>
        <email>francesco.lazzeri@ericsson.com</email>
      </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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
9wnm/KMrFUpiqHJJcR9VFknJEg9PvSkk3VXHUWOyGDr1tc0v5JVzTO0zR5A8
wVMV7aaYJ85oxFzX9RymLddFasVNYkoJPw107RCmvTfkozUvWwMfYJScloif
DjG7DeqGcpICOkWU1QL9xMfWcqp5gshJlHwqKMeDuc3RDk+JMTS7REwXqoWC
7H9cUL0IfZNlvKAsDvzBKlR2N22FTv456zw1ZdlxklfkMmsLecolv64LsMw2
De0iPcvIqJ6NwrxkXrmZq1WannvAl0t+NwebLBSTF4gyY5KWJCnjhFaiApmk
f6lHgHwoz4tVXpeV/aPZm7FqJVSQaF3fpaYGmhg3HBUn5ZHkCrM7OhN1b2IZ
xNVVyN0r1NB4NxkX9YJlVOvMbl4+fuK3c3wf5k5kPi/2WK6o0vRKK2a7Vylt
CSbrOSeZ9yqzacyE/anxpaYLhr3CVZQMt+axmzlZ3ap2wqbda3T34O2mS/6O
XOIodtU9SuI9j3H1SeiXQDExsHolxf4meaNS6MUObza4rdMn4AGZnk7NmTaO
eR/Bihutyd6eI4Yo8yiLhXPJRcQHKWTsH+Hahd0qhRxTAnOTIrYkYP3d29Gh
VTlCVqH5aMkX73Kg4gWcZE0YwtNZNj4nJBeL8JFJvpzbO3IS9vIlOy7lB5N9
zy/na4fknDKPHj78xPkMfJ95I5d+na6d+YeoN/ZCgENBGI7KbSlvbinlaOo4
NXkDudQOnzOmpqspymsCYK5FV6WyowSI4lucCi+7CigFvazlbTPjLESh3vMo
QZ76tviJM+fZRBGJ58fm7nduC7iEOdatQiE1ZPalfoxkbKZBzEtc9h4RmFTY
nsrikChpZhNSGsMxMnZemvweKFKoyRkDK+tZLD+Pd+dIcWRe7p2x2FqEgIKS
etjP1qNyjGGzw6nzqR1Oj90DHSOB07Duh7BOpt9aWE/gb4IVyb7sMg8Mpdxw
ioo+WrycNhdYbggJZtlCnpsXKxdoQHlMX2+78LSHXIklL1GbvjQKpBZXGt/F
3YwRcm47RhHrOgqIRlahcIJODnIn87cUc3z4NTerOQi2Vfkzmh95c6lweLFy
qfPs+xRXrUyVtIZN3ch0ZxKpSTKNtSIe1GuVcTqPzSo2/oSyjHhFxrSGV53r
Q1YMnwam2ZxLLiAaKcj7PYvIXrFEwKKGc08AqYx7m7OpTRFRl5jt1tEW6SkO
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
FITEsa3q7UnM3efPjg8V/KNqfVPjRV+2O9/L7n9y/0H29OT1E6DTpmlJvlLJ
elAk3JWnDRVbYAnnfNNeVnVjqqLOAdkZbFA8QxAuVmCn8rMLN+gr2OYNh0ii
eoKjbJqC6tRTfDV9wy8HMpot1xqX3nREwZibFikDeMxpqSZYKRcQvSpbPCDX
m7rZ5ECItpogPOncbMjPbM6sZTkvVjA0KBBXDR8QslBcfPpV8a5s7Eo/Pj0G
6c89YKMhbsAugPYpG8bZw9nc0MFR8SNDt++Ki3yZvcRAOlTLGoCOF1NYA7ji
9sfCQqbHrjmbWgRUFO5cEsRJOffYBYhg1D7CBP6tVEmiEYgK/A3P6/8Jny9g
LoaRzDletk2xPKfNg3wH1gOijhWLQcvyuRMfAQDzLZrso2ffn77+aML/xfK0
+Perk3/7/umrk2P8+/Tbw+++s38Y3uV2p9+++P67Y/eX63/04tmzk+fHDAK+
zbyvBMpHzw7/8hEtdPbRi5evn754fvjdR5GtCVsAiH2GzAZrDupXS1wsUFjI
nPFOfXz0Mrv3MNtFety/d++Pe/zn5/c+e7iXXV8WKx6uWsG2pH86Gt5k+Xpd
wDkIYHIg3zxf4xEPfJxTtfLrVXYJGt5sRxTo/X1RwGYHVvPCpWHNC3SWDVAf
WxgFDMbFsNF3hfSmWcLymH8bILiedcH8lpH2ZXU5YYj15mwpO4gaWIBFxhXU
kWV2b2AyU1A40f+Ro3GLzSxgFBvTTz6d3v/M6LUdaQ3y+inejuZL222nT9ul
6acMAyXPQ4Hta7i/IVlZYyYU/yV7UuQoTZltUIHls+qcv6ZAzz5K0C41jcvV
AulfNFJX3pbrNkXnGxXyCpxpoHSMUKFKM0sT1sipz2b3HogIePTw4ScH2UsE
dqSAnSz5GNl9eQTHogGAVgeqQNwGJFlbzaslNXq5N/Nob6YXFlj+LelCJDC9
I6T4qMnMsGNo8nB2769MFMtAT9mZVioWIlNRfGz2SSR7Jzy3Bfs3DBnPcjq9
jI/S64bffZGm9iHPm8IqQCYKXK52DpozRm9z5XmrvQNxjJuFaM/yzBOajVDz
wewBUdN0NVu6hzl/s11viEymHzT3aXwh3+p3V/p5lAtiGWRVC8qonyxuLSwS
KG4YIrUzhXBOOU9F9MLUlrZEQyde+F7MYJnxSio3rfsl5JNls54GYL4wbd+b
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
eGboy0fMdg/UhJVbLpR0U+/hsal7DcUYO/vVpm6FVstul0xnTLkj2NR4HUNK
DNmMB2DA+pUGrM1jWa4zk1UgTEO2sTLNrEx/GStjOkCalYE//iTmpaaHhN+q
NZYTi5OUa6RPkWWi+INqIc8cTfxLZsx0mvizStFgeHY/l+xq5Jh+viuHzWrV
FNNns2mUJpUzXWrpNJ6Opdoe05YJe5Vty/Ckq8LO3ljtijAQTm931/n491Xb
CZ7xVWAoeMpZLVMh01NLzUSWApvzRsqONE3J19rqTWspwAWzgWPvGvXbKuX5
fq2wEi1+uQaYxYtRFzW1NbaRW0K27KiceNmMEJoYl0JQE1DoQtrEE9CQ9lvC
7vVKECqKQRkKyao1rN7qh9Vfalj2Lz7bPra0zRdrKTOV1lUUjoQbuOrm+bZc
S1dnhzXVrDC/5FLyMBScWwzlzUNou+zpCOZmkL81UzrXb0EnurlWvMZnNWL6
xnGKOKAklxXzK/GIfvD4UUejQccIg7yQNFQdCYkZkdWG2OJv6ext/1zdneaW
ZM/u13nWQoqFjP72xiH+FscP8sjQFv6y1W5SomCdnOE3HGau+HvO1tnVeDvf
WDEMxpY0Z3m8a2C7P9eXuY4bXLkL29qsNuvwgtnM6cF/667PYiXYs63Nte2/
fTmzLi0t2LsLfziIosSGLtzMfismtl1LTOxh47sQk56zxaxBsZioWUk2ZpsL
jYRgginUG38/kra/vpJmjwOuUtKyDLcik6RnzFVKmd11LnPSy6TSYCP9fP5e
JXevlkTmXltGZO97MuT2ANjdqFdvo17rrl62HfXaqdfT9VWvp/eoXvsFnpI9
g7tUzYyGt1G33kbdREubJD8Adeuvr7o9u0d162/U7aGpmy2wunbqtsZ7s5/u
Ud2ebtTtoalb/vx1DdWt4JhqHdTt+bdXt5xxKYzNYrB+E519EJv6F3cuKFrM
rEBU7nZb/3xjiUXLTdTsWyvY3u49alhvo2HO2mvYJnB2Sw1bwUF0LnBxu4Po
nG7JBAQQvzANgu9Y+tdXsFZwdF1TsFZ6dF16dt2cSys4dq3g0r0eu+ZV1y7A
NTiPXN6sgxtPk35ua65WcEBbWxHv4YB2o4gbhzTfdB0UcXOUm1O4W0e7m8/C
5oRvpbMgfs2sbnF+cY6xrZIkY+NmXQHvl7/yZliOoitvdQSugFTztuzqSEXU
5VtQal7/u0OmSvmhX257QUOoi+5wJMpVDexSrDmiI7rE4RyMLsLoKvDGBH6n
oLW56XwSxQnHjgv8Cw6h6oYXzuF5FDsv40Vy4SN4svO774bOfyYApn0WxdgH
Yd36jBi4kMsxUBB8FPBP/GSUJgnCv2Vg30xJzs+BSLxDjL0giCe8gYCpoCvA
EedYn4l/PuF4JjWonivf8wsmGTglAJdhLxk0duk9YzYgBc1XZUjb+aefTMLU
OXYveU2Ul54Xu9O2c+LG3oUzdN0xcS0989iA3vtpW1yA9mNCZBX4o0SSwi28
+ZLOCN84BL4BT/DCSjLHwiEChBvGB9dusAv1mg50oQ9cxQOvy82DcQyT/taN
Yy9oO68ncXrJ/h+NF21kBw1csOS3FPAGnQ9eGvsjpOB9lDK+xGy+lbErcwu3
NAt4wCUmcUaM91QqVSJK4o3OUw/xeby5k84AtiKMqABw6AGCJXsmWGRom65y
rV32jLjzM7YEASJjsJAgjtgNI98UAEapxgEYEkGbMolOCDkykleU5KhCjyOy
ufR+tuJlaIezCZSVgNtPE290kQ3RHc1TN8iqqWqjnXoev+kKS6APyuSFY0DL
huo7dBlYAkFriEB15tyfpK7zaxq1lelrO8OJG0HpOOdXNyRr+AE4Ezov/2Dq
G6QhiftJNHWOvflookx4mnhnaYCVsBB8kw0bYOw4hjbBADi/400zBFygVj4H
5gdY6bq0v3OjKVkppnNt599uGHi++OsEriexTpC8djZOpDs3mIx8EBDABg3H
UnSxHzkeAXligiEfc9GCGSehhgpQAjThCuBgmfQhvj2HNOh1/hXF484lLDsA
EgUY991xNO/KW3XZ425iPn3B7M84ugpZ6/8DZiVPzye8AgA=

-->

</rfc>

