<?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-19" category="std" consensus="true" 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>
    <author initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
      <organization>Ericsson</organization>
      <address>
        <email>daniele.ceccarelli@ericsson.com</email>
      </address>
    </author>

    <date year="2023" month="March" day="09"/>

    
    <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>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="RFC8776"/> 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="RFC8776"/>,
   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="RFC8776"/>.</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[
module: ietf-te-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info:
    +-- path-request* [request-id]
    |  +-- request-id                            uint32
    |  +-- (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?           empty
    |  |  |        |     +-- k-requested-paths?   uint8
    |  |  |        +--:(secondary-path)
    |  |  |        |  +-- secondary-path
    |  |  |        |     +-- preference?           uint8
    |  |  |        |     +-- co-routed?            empty
    |  |  |        |     +-- 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
    |  |  |              +-- 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?                         te-types:te-node-id
    |  |     +-- destination?                    te-types:te-node-id
    |  |     +-- src-tunnel-tp-id?               binary
    |  |     +-- dst-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     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
    |  |     |  |  |        |        +-- (technology)?
    |  |     |  |  |        |        |  +--:(generic)
    |  |     |  |  |        |        |     +-- generic?
    |  |     |  |  |        |        |             rt-types:generalized-label
    |  |     |  |  |        |        +-- direction?
    |  |     |  |  |        |                te-label-direction
    |  |     |  |  |        +--:(srlg)
    |  |     |  |  |           +-- srlg
    |  |     |  |  |              +-- srlg?   uint32
    |  |     |  |  +-- explicit-route-include-objects
    |  |     |  |     +-- route-object-include-object* [index]
    |  |     |  |        +-- index                        uint32
    |  |     |  |        +-- (type)?
    |  |     |  |           +--:(numbered-node-hop)
    |  |     |  |           |  +-- numbered-node-hop
    |  |     |  |           |     +-- node-id     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
    |  |     |  |                    +-- (technology)?
    |  |     |  |                    |  +--:(generic)
    |  |     |  |                    |     +-- generic?
    |  |     |  |                    |             rt-types:generalized-label
    |  |     |  |                    +-- direction?
    |  |     |  |                            te-label-direction
    |  |     |  +-- tiebreakers
    |  |     |     +-- tiebreaker* [tiebreaker-type]
    |  |     |        +-- tiebreaker-type    identityref
    |  |     +--:(objective-function)
    |  |              {path-optimization-objective-function}?
    |  |        +-- objective-function
    |  |           +-- objective-function-type?   identityref
    |  +-- named-path-constraint?                leafref
    |  |       {te-types:named-path-constraints}?
    |  +-- te-bandwidth
    |  |  +-- (technology)?
    |  |     +--:(generic)
    |  |        +-- generic?   te-bandwidth
    |  +-- link-protection?                      identityref
    |  +-- setup-priority?                       uint8
    |  +-- hold-priority?                        uint8
    |  +-- signaling-type?                       identityref
    |  +-- path-metric-bounds
    |  |  +-- path-metric-bound* [metric-type]
    |  |     +-- metric-type    identityref
    |  |     +-- upper-bound?   uint64
    |  +-- path-affinities-values
    |  |  +-- path-affinities-value* [usage]
    |  |     +-- usage    identityref
    |  |     +-- value?   admin-groups
    |  +-- path-affinity-names
    |  |  +-- path-affinity-name* [usage]
    |  |     +-- usage            identityref
    |  |     +-- affinity-name* [name]
    |  |        +-- name    string
    |  +-- path-srlgs-lists
    |  |  +-- path-srlgs-list* [usage]
    |  |     +-- usage     identityref
    |  |     +-- values*   srlg
    |  +-- path-srlgs-names
    |  |  +-- path-srlgs-name* [usage]
    |  |     +-- usage    identityref
    |  |     +-- names*   string
    |  +-- disjointness?                         te-path-disjointness
    |  +-- explicit-route-objects-always
    |  |  +-- route-object-exclude-always* [index]
    |  |  |  +-- index                        uint32
    |  |  |  +-- (type)?
    |  |  |     +--:(numbered-node-hop)
    |  |  |     |  +-- numbered-node-hop
    |  |  |     |     +-- node-id     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
    |  |  |              +-- (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     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
    |  |        |        +-- (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?                   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
    |  |  +-- 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
    |  +-- 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-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
    +-- 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
       |                 +-- (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     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    te-tp-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@2022-10-21.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-01-12 {
    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

  /*
   * Identities
   */

  identity tunnel-action-path-compute-delete {
    base te-types:tunnel-actions-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.";
      }
      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";
                  uses te:path-forward-properties;
                  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;
                  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) and
                  not (./src-tunnel-tp-id) and
                  not (./dst-tunnel-tp-id)' {
              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, src-tp-id, destination and
                dst-tp-id attributes are empty), 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;
  } // 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>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'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'><organization/></author>
<author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'><organization/></author>
<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'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<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'><organization/></author>
<author fullname='I. Bryskin' initials='I.' surname='Bryskin'><organization/></author>
<author fullname='V. Beeram' initials='V.' surname='Beeram'><organization/></author>
<author fullname='T. Saad' initials='T.' surname='Saad'><organization/></author>
<author fullname='H. Shah' initials='H.' surname='Shah'><organization/></author>
<author fullname='O. Gonzalez de Dios' initials='O.' surname='Gonzalez de Dios'><organization/></author>
<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-31'>
   <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>IBM Corporation</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='24' month='October' year='2022'/>
      <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-31'/>
   
</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'><organization/></author>
<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'><organization/></author>
<author fullname='JL. Le Roux' initials='JL.' role='editor' surname='Le Roux'><organization/></author>
<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='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'><organization/></author>
<author fullname='J. Drake' initials='J.' surname='Drake'><organization/></author>
<author fullname='N. Bitar' initials='N.' surname='Bitar'><organization/></author>
<author fullname='G. Swallow' initials='G.' surname='Swallow'><organization/></author>
<author fullname='D. Ceccarelli' initials='D.' surname='Ceccarelli'><organization/></author>
<author fullname='X. Zhang' initials='X.' surname='Zhang'><organization/></author>
<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'><organization/></author>
<author fullname='L. Berger' initials='L.' role='editor' surname='Berger'><organization/></author>
<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-01'>
   <front>
      <title>Updated 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>IBM Corporation</organization>
      </author>
      <author fullname='Tarek Saad' initials='T.' surname='Saad'>
         <organization>Juniper Networks</organization>
      </author>
      <author fullname='Rakesh Gandhi' initials='R.' surname='Gandhi'>
         <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='24' month='October' year='2022'/>
      <abstract>
	 <t>   This document defines few additional common data types, identities,
   and groupings in YANG data modeling language to be imported by
   modules that model Traffic Engineering (TE) configuration and state
   capabilities.

   Editors&#39; note: Copy the text from [RFC8776] and merge it with the
   content of this section before WG LC if the RFC8876-bis approach is
   confirmed.

   This document updates RFC 8776 with a new revision of the module
   ietf-te-types.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teas-rfc8776-update-01'/>
   
</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'><organization/></author>
<author fullname='R. Zhang' initials='R.' surname='Zhang'><organization/></author>
<author fullname='N. Bitar' initials='N.' surname='Bitar'><organization/></author>
<author fullname='JL. Le Roux' initials='JL.' surname='Le Roux'><organization/></author>
<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'><organization/></author>
<author fullname='JP. Vasseur' initials='JP.' surname='Vasseur'><organization/></author>
<author fullname='Y. Lee' initials='Y.' surname='Lee'><organization/></author>
<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='RFC8776' target='https://www.rfc-editor.org/info/rfc8776'>
<front>
<title>Common YANG Data Types for Traffic Engineering</title>
<author fullname='T. Saad' initials='T.' surname='Saad'><organization/></author>
<author fullname='R. Gandhi' initials='R.' surname='Gandhi'><organization/></author>
<author fullname='X. Liu' initials='X.' surname='Liu'><organization/></author>
<author fullname='V. Beeram' initials='V.' surname='Beeram'><organization/></author>
<author fullname='I. Bryskin' initials='I.' surname='Bryskin'><organization/></author>
<date month='June' year='2020'/>
<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.</t></abstract>
</front>
<seriesInfo name='RFC' value='8776'/>
<seriesInfo name='DOI' value='10.17487/RFC8776'/>
</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'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<author fullname='A. Farrel' initials='A.' surname='Farrel'><organization/></author>
<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'><organization/></author>
<author fullname='Y. Lee' initials='Y.' role='editor' surname='Lee'><organization/></author>
<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 &quot;Traffic Engineered network&quot; 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'><organization/></author>
<author fullname='S. Belotti' initials='S.' surname='Belotti'><organization/></author>
<author fullname='D. Dhody' initials='D.' surname='Dhody'><organization/></author>
<author fullname='D. Ceccarelli' initials='D.' surname='Ceccarelli'><organization/></author>
<author fullname='B. Yoon' initials='B.' surname='Yoon'><organization/></author>
<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'><organization/></author>
<author fullname='J.-P. Vasseur' initials='J.-P.' surname='Vasseur'><organization/></author>
<author fullname='J. Ash' initials='J.' surname='Ash'><organization/></author>
<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'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' surname='Schoenwaelder'><organization/></author>
<author fullname='P. Shafer' initials='P.' surname='Shafer'><organization/></author>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<author fullname='R. Wilton' initials='R.' surname='Wilton'><organization/></author>
<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'><organization/></author>
<author fullname='A. Farrel' initials='A.' role='editor' surname='Farrel'><organization/></author>
<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'><organization/></author>
<author fullname='G. Bernstein' initials='G.' role='editor' surname='Bernstein'><organization/></author>
<author fullname='D. Li' initials='D.' surname='Li'><organization/></author>
<author fullname='W. Imajuku' initials='W.' surname='Imajuku'><organization/></author>
<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="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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
YLG3itsfCwmZHrvmbmpxoKJw95IATnK5Ry6ABCP2ESTwbyVKEo6AVeBveF//
B3w+h7UYQjL3eNk2xfKcDg/SHegNCDqWpgMpy6dO9D0G4ls02UfP/nT6+qMJ
/zd7/oL+fnXyf/709NXJMf59+s3ht9/aPwztcrvTb1786dtj95frf/Ti2bOT
58c8BHybeV/JKB89O/zzR7TR2UcvXr5++uL54bcfRY5mXUjFZywAXYP4RUVp
Db694rhPjl5mDx5nu4iPhw8e/G6P//ztg9883suuL4sVT0fll+mfDoc3WCC2
yLGAe5YD+ub5Gq94LgmL5eNWGda5ne2IAL2/LwLY7MBKXrg1LHmBzLIB7GML
I4CtFuSn966Q3rRK2B7zbzMI101mestI+rKynBDEenO2lBNEDeyARcalMpFk
dm9gMVMQONHUkd/sMdR2YGQb008eTB88NHJth1sDv36Kr3r50nbb6ZN2afkp
xUDx85Bh+xLuz4hWlpgJxF9nT9n2UUp5Qivpi0nExrSwculpnaydGjydUcVt
a03S3dgG9Xkan4fMc+gtF2haBuayhFiqG+mdInes9AWH3mjJtjp6oiL0o9kj
qghtupotmf0Nds1gmUR3aO4j+UK+1W772r9eVZXuIUZilHYoIz7wcbFjEUG4
aQjVTpQ959riOV8BtoS3VsVNeUqDNDS/hOEGBsqMd1KZ1dwvIaEsm/U0GOZz
0/a9+QMWlW+WbbaT6rZZyT+Kxc7nrlcHWYCub09fhoiwi3qv1hZGRtx1ceE4
Y1en+/HfaNm8GbM8ve+j1seBHHdZYXeU0YuMdIVLzNV23XalPIa/1vfI+sYf
s+BYurBBlE3udgZ1mWauV142bmC7nN1idjGbiFNLszcZOocTvvtt/7C+fKSf
FJu3BxgL0XbiO91OozC0o5xshrbjNcmgTWukRju0WZSTtfBD2oDMid2gHcoR
GQlcZ0VnQRZ+NcYraoMYr6BJbccLuiDGjSA1c8ugU6C9iBSR9x2A8AhoT3WP
9hX1J5AmaOPOCmMs16VQsBOeLv9Yu+Da4ECLc//nnSN5DvLc4P4+hW2tN8WE
SQvNFQDZq7J5C3rE6i3fcCBenb769utmz2yjWuqYDYU5CJaJtLYXLI3a2dfO
pkYQ4Xyw/orYUJNsQ7/J5arxurSsBogjwGd6PhNLcjgSr/pY3JEwZmYnpu52
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
YKYCAA==

-->

</rfc>

