<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-teas-yang-path-computation-27" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Yang for Path Computation">A YANG Data Model for requesting path computation</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-teas-yang-path-computation-27"/>
    <author initials="I." surname="Busi" fullname="Italo Busi" role="editor">
      <organization>Huawei Technologies</organization>
      <address>
        <email>italo.busi@huawei.com</email>
      </address>
    </author>
    <author initials="S." surname="Belotti" fullname="Sergio Belotti" role="editor">
      <organization>Nokia</organization>
      <address>
        <email>sergio.belotti@nokia.com</email>
      </address>
    </author>
    <author initials="O." surname="Gonzalez de Dios" fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author initials="A." surname="Sharma" fullname="Anurag Sharma">
      <organization>Google</organization>
      <address>
        <email>ansha@google.com</email>
      </address>
    </author>
    <author initials="Y." surname="Shi" fullname="Yan Shi">
      <organization>China Unicom</organization>
      <address>
        <email>shiyan49@chinaunicom.cn</email>
      </address>
    </author>
    <date year="2026" month="April" day="22"/>
    <area>Routing</area>
    <workgroup>Traffic Engineering Architecture and Signaling</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 96?>

<t>In certain scenarios — particularly within hierarchical Software-Defined Networking (SDN) environments—the topology information provided by a Traffic Engineering (TE) network provider may be insufficient for a client to perform end-to-end multi-domain path computation. In such cases, the client may need to delegate the computation of specific intra-domain paths to the TE provider, leveraging the resulting path segments to construct optimal multi-domain end-to-end paths.</t>
      <t>This document defines a mechanism to enable path computation requests by augmenting the Remote Procedure Calls (RPCs) specified in RFC YYYY. The augmented RPCs support path computation on demand, allowing clients to request intra-domain TE path computations from the provider while maintaining control over inter-domain path selection.</t>
      <t>Additionally, this document outlines several use cases in which such path computation requests are beneficial, particularly in environments where YANG-based management protocols—such as NETCONF or RESTCONF—are used for network automation and control.</t>
      <t>[RFC EDITOR NOTE: Please replace RFC YYYY with the RFC number assigned to draft-ietf-teas-yang-te upon publication.]</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://IETF-TEAS-WG.github.io/ietf-teas-yang-path-computation/draft-ietf-teas-yang-path-computation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-teas-yang-path-computation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Traffic Engineering Architecture and Signaling Working Group mailing list (<eref target="mailto:teas@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/teas/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/teas/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/IETF-TEAS-WG/ietf-teas-yang-path-computation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="intro">
      <name>Introduction</name>
      <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 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>
      <ul spacing="normal">
        <li>
          <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>
        </li>
        <li>
          <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 MDSC and Provisioning Network
Controller (PNC), called MDSC-PNC Interface  (MPI).
<xref target="RFC8454"/> describes an information model for the Path
Computation request.  </t>
          <t>
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"/>).  </t>
          <t>
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"/>.  </t>
          <t>
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.  </t>
          <t>
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"/>.</t>
        </li>
      </ul>
      <t>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 complementary to the configuration of a TE tunnel path in "compute-only" mode, as described in <xref target="I-D.ietf-teas-yang-te"/>.</t>
      <t>The YANG data model definition does not make any assumption about
   whether 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"/>.</t>
      <t>Moreover, this document describes some use cases where a path
   computation request, via YANG-based protocols (e.g., NETCONF or
   RESTCONF), can be needed.</t>
      <t>The YANG data model defined in this document conforms to the Network
   Management Datastore Architecture <xref target="RFC8342"/>.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
        </t>
        <t>TED:</t>
        <ul empty="true">
          <li>
            <t>The traffic engineering database is a collection of all TE
   information about all TE nodes and TE links in a given network.</t>
          </li>
        </ul>
        <t>PCE:</t>
        <ul empty="true">
          <li>
            <t>A Path Computation Element (PCE) is an entity that is capable of
   computing a network path or route based on a network graph, and of
   applying computational constraints during the computation.  The PCE
   entity is an application that can be located within a network node or
   component, on an out-of-network server, etc.  For example, a PCE
   would be able to compute the path of a TE Label Switched Path (LSP)
   by operating on the TED and considering bandwidth and other
   constraints applicable to the TE LSP service request. <xref target="RFC4655"/>.</t>
          </li>
        </ul>
        <t>Domain:</t>
        <ul empty="true">
          <li>
            <t>TE information is the data relating to nodes and TE links
   that is used in the process of selecting a TE path.  TE information
   is usually only available within a network.  We call such a zone of
   visibility of TE information a domain.  An example of a domain may be
   an IGP area or an Autonomous System. <xref target="RFC7926"/></t>
          </li>
        </ul>
        <t>The terminology for describing YANG data models is found in
   <xref target="RFC7950"/>.</t>
      </section>
      <section anchor="tree-diagram">
        <name>Tree Diagram</name>
        <t>Tree diagrams used in this document follow the notation defined in
   <xref target="RFC8340"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names">
        <name>Prefixes in Data Node Names</name>
        <t>In this document, names of data nodes and other data model objects
   are prefixed using the standard prefix associated with the
   corresponding YANG imported modules, as shown in <xref target="tab-prefix"/>.</t>
        <table anchor="tab-prefix">
          <name>Prefixes and corresponding YANG modules</name>
          <thead>
            <tr>
              <th align="left">Prefix</th>
              <th align="left">YANG module</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">te-types</td>
              <td align="left">ietf-te-types</td>
              <td align="left">[RFCZZZZ]</td>
            </tr>
            <tr>
              <td align="left">te</td>
              <td align="left">ietf-te</td>
              <td align="left">[RFCYYYY]</td>
            </tr>
            <tr>
              <td align="left">te-pc</td>
              <td align="left">ietf-te-path-computation</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
        <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 anchor="fig-poi-uc">
          <name>Packet/Optical Integration use case</name>
          <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 anchor="fig-poi-abstraction">
          <name>Packet and Optical Topology Abstractions</name>
          <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 anchor="fig-poi-example">
          <name>Packet/Optical Integration path computation example</name>
          <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 anchor="md-ml-connection">
          <name>Multi-domain multi-link interconnection</name>
          <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>
        <ul spacing="normal">
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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)  </t>
            <t>
This approach may have some scalability issues when the number of TE
domains is quite big (e.g. 20).  </t>
            <t>
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.  </t>
            <t>
For more details, see <xref target="topo-pc-complement"/>.</t>
          </li>
        </ul>
      </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 anchor="fig-dci-uc">
          <name>Data Center Interconnection use case</name>
          <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 shows a typical BRPC scenario where 3 PCEs cooperate to
   compute inter-domain paths.</t>
        <figure anchor="fig-brpc-example">
          <name>BRPC Scenario</name>
          <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 on which PCE will request the path.</t>
        <figure anchor="fig-hpce-example">
          <name>Hierarchical domain topology from RFC6805</name>
          <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>
          <ul spacing="normal">
            <li>
              <t>There is no need for an error-prone mapping or correlation of
information.</t>
            </li>
            <li>
              <t>It is possible to use the same endpoint identifiers in path
computation requests and in the topology modeling.</t>
            </li>
            <li>
              <t>The attributes used for path computation constraints are the same
as those used when setting up a TE tunnel.</t>
            </li>
          </ul>
        </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>
          <ol spacing="normal" type="1"><li>
              <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>
            </li>
            <li>
              <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>
            </li>
            <li>
              <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>
            </li>
            <li>
              <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>
            </li>
            <li>
              <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>
            </li>
          </ol>
        </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>
          <ol spacing="normal" type="1"><li>
              <t>Receiving notifications for topology changes as well as
integration with fault management</t>
            </li>
            <li>
              <t>Performance management such as retrieving monitoring and telemetry
data</t>
            </li>
            <li>
              <t>Service assurance, e.g., by triggering OAM functionality</t>
            </li>
            <li>
              <t>Other fulfilment and provisioning actions beyond tunnels and
services, such as changing QoS configurations  </t>
              <t>
YANG is a very extensible and flexible data modeling language that
can be used for all these use cases.</t>
            </li>
          </ol>
        </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 complementary 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 anchor="poi-multi-path">
            <name>Packet/Optical Integration path computation Example with multiple choices</name>
            <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>
          <ul spacing="normal">
            <li>
              <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>
            </li>
            <li>
              <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 through the VP1-VP4 sub-path (with cost 50) within
the optical domain.  </t>
              <t>
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.  </t>
              <t>
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 constraints 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.  </t>
              <t>
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.  </t>
              <t>
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.  </t>
              <t>
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.  </t>
              <t>
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.  </t>
              <t>
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.  </t>
              <t>
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>
            </li>
            <li>
              <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>
            </li>
            <li>
              <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 through the VP1-VP4 sub-
path (with cost 50) within the optical domain.</t>
            </li>
          </ul>
        </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>
          <ul spacing="normal">
            <li>
              <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>
            </li>
            <li>
              <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>
            </li>
            <li>
              <t>So what the Multi-Domain Controller has computed is not good and
it needs to re-start the path computation from scratch  </t>
              <t>
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.  </t>
              <t>
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>
            </li>
          </ul>
        </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 anchor="fig-topo-many-domains">
            <name>Multi-domain with many domains (Topology information)</name>
            <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>
          <ul spacing="normal">
            <li>
              <t>Domain B cannot be selected as the path connecting domains A and F
is not feasible;</t>
            </li>
            <li>
              <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).  </t>
              <t>
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.  </t>
              <t>
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>
            </li>
          </ul>
          <figure anchor="fig-pc-many-domains">
            <name>Multi-domain with many domains (Path Computation information)</name>
            <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>
        <ul spacing="normal">
          <li>
            <t>Several messages required for any path computation</t>
          </li>
          <li>
            <t>Requires persistent storage in the underlying controller</t>
          </li>
          <li>
            <t>Need for garbage collection for stranded paths</t>
          </li>
          <li>
            <t>Process burden to detect changes on the computed paths in order to
provide notifications update</t>
          </li>
        </ul>
        <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>
          <ul spacing="normal">
            <li>
              <t>When the tunnel is configured with path constraints which are not
compatible with the computed path;</t>
            </li>
            <li>
              <t>When the tunnel set-up is requested after the resources of the
computed path are no longer available;</t>
            </li>
            <li>
              <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.  </t>
              <t>
In all these cases, the underlying controller should compute and set
 up a new path.  </t>
              <t>
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".  </t>
              <t>
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.  </t>
              <t>
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.  </t>
              <t>
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 of a
 path that has been previously computed with that transaction-id.  </t>
              <t>
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).  </t>
              <t>
This approach is complementary 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>
            </li>
          </ul>
        </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 defines 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>
      <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>
      <t>This model extensively re-uses the grouping defined in <xref target="I-D.ietf-teas-yang-te"/>
   and <xref target="I-D.ietf-teas-rfc8776-update"/> to ensure maximal syntax and semantics commonality.</t>
      <t>This YANG data model allows one RPC to include multiple path
   requests, each path request being identified by a request-id.
   Therefore, one RPC can return multiple responses, one for each path
   request, being identified by a response-id equal to the corresponding
   request-id. Each response reports one or more computed paths, as
   requested by the k-requested-paths attribute. By default, each
   response reports one computed path.</t>
      <section anchor="synchronization-of-multiple-path-computation-requests">
        <name>Synchronization of multiple path computation requests</name>
        <t>The YANG data model permits the synchronization of a set of multiple
   path requests (identified by specific request-id) all related to a
   "svec" container emulating the syntax of the Synchronization VECtor
   (SVEC) PCEP object, defined in <xref target="RFC5440"/>.</t>
        <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>
        <t>The model, in addition to the metric types, defined in <xref target="I-D.ietf-teas-rfc8776-update"/>,
   which can be applied to each individual path request, supports also
   additional metric types, which apply to a set of synchronized
   requests, as referenced in <xref target="RFC5541"/>. These additional metric types
   are defined by the following YANG identities:</t>
        <ul spacing="normal">
          <li>
            <t>svec-metric-type: base YANG identity from which cumulative metric
types identities are derived.</t>
          </li>
          <li>
            <t>svec-metric-cumul-te: cumulative TE cost metric type, as defined
in <xref target="RFC5541"/>.</t>
          </li>
          <li>
            <t>svec-metric-cumul-igp: cumulative IGP cost metric type, as defined
in <xref target="RFC5541"/>.</t>
          </li>
          <li>
            <t>svec-metric-cumul-hop: cumulative Hop metric type, representing
the cumulative version of the Hop metric type defined in
<xref target="I-D.ietf-teas-rfc8776-update"/>.</t>
          </li>
          <li>
            <t>svec-metric-aggregate-bandwidth-consumption: aggregate bandwidth
consumption metric type, as defined in <xref target="RFC5541"/>.</t>
          </li>
          <li>
            <t>svec-metric-load-of-the-most-loaded-link: load of the most loaded
link metric type, as defined in <xref target="RFC5541"/>.</t>
          </li>
        </ul>
      </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>
        <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>
        <t>It also allows the client to request which information (metrics, SRLG
   and/or affinities) should be returned:</t>
        <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>
        <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>
        <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>
        <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>
        <ul spacing="normal">
          <li>
            <t>avoiding repeating the same set of per-tunnel parameters on
multiple requested paths;</t>
          </li>
          <li>
            <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.  </t>
            <t>
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.  </t>
            <t>
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.  </t>
            <t>
The choices below are defined to distinguish the cases above:</t>
          </li>
          <li>
            <t>whether the per-tunnel attributes are configured by reference
(providing a leafref), to:  </t>
            <ul spacing="normal">
              <li>
                <t>either a TE tunnel instance, if it exists;</t>
              </li>
              <li>
                <t>or to an entry of the tunnel-attributes list, if the TE tunnel
instance does not exist;</t>
              </li>
            </ul>
          </li>
          <li>
            <t>or by value, providing the set of tunnel attributes within the
path request:</t>
          </li>
        </ul>
        <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>
        <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>
          <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>
          <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>
          <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>
          <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>
          <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>
          <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>
          <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>
          <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>
          <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>
          <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>
        <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>
        <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>
        <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>
        <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 anchor="fig-pc-tree">
          <name>TE path computation tree diagram</name>
          <artwork type="ascii-art" name="ietf-te-path-computation.tree"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

module: ietf-te-path-computation

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

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

  feature svec {
    description
      "This feature indicates that the server supports synchronized
       path computation requests.";
    reference
      "RFC 5440: Path Computation Element (PCE) Communication
                 Protocol (PCEP), Section 7.13";
  }

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

  /*
   * Identities
   */

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

  /*
   * 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
            "RFC 5541: Encoding of Objective Functions in the Path
                       Computation Element Communication Protocol
                       (PCEP)";
        }
        leaf upper-bound {
          type uint64;
          description
            "Upper bound on SVEC metric";
        }
      }
    }
    uses te-types:generic-path-srlgs;
    container exclude-objects {
      description
        "Resources to be excluded";
      list excludes {
        description
          "List of Explicit Route Objects to always exclude
           from synchronized path computation";
        uses te-types:explicit-route-hop;
      }
    }
  } // grouping synchronization-constraints

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

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

  /*
   * Augment TE RPCs
   */

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

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

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

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

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

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

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

}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document describes use cases of requesting Path Computation
   using YANG data models, which could be used at the ABNO Control
   Interface <xref target="RFC7491"/> and/or between controllers in ACTN <xref target="RFC8453"/>. As
   such, it does not introduce any new security considerations compared
   to the ones related to YANG specification, ABNO specification and
   ACTN Framework defined in <xref target="RFC7950"/>, <xref target="RFC7491"/> and <xref target="RFC8453"/>.</t>
      <t>The YANG module defined in this document is designed to be accessed via
   the NETCONF protocol <xref target="RFC6241"/> or RESTCONF protocol <xref target="RFC8040"/>. The
   lowest NETCONF layer is the secure transport layer, and the
   mandatory-to-implement secure transport is Secure Shell (SSH)
   <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the mandatory-to-
   implement secure transport is TLS <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM)
   <xref target="RFC8341"/> provides the means to
   restrict access for particular NETCONF or RESTCONF users to a
   preconfigured subset of all available NETCONF or RESTCONF protocol
   operations and content.</t>
      <t>The YANG module defined in this document augments the "tunnels-path-compute" and the "tunnel-actions" RPCs defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> are also applicable to the YANG module
   defined in this document.</t>
      <t>The RPC defined in this document can also be used for Denial-of-service (DoS) attacks. The security considerations defined in section 10.7.2 of <xref target="RFC5440"/> also applies to the use of this RPC.</t>
      <t>The definition of the input shaping/policing mechanisms and of their configuration is outside the scope of this document.</t>
      <t>Some of the RPC operations defined in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control access to these operations. These are the
   operations and their sensitivity/vulnerability:</t>
      <t>"te-pc:response/computed-paths-properties": provides the same information provided by the "te:computed-paths-properties" defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> for the TE tunnel state apply also to this subtree.</t>
      <t>"te-pc:response/te-pc:tunnel-ref", "te-pc:response/te-pc:primary-path-ref", "te-pc:response/te-pc:primary-reverse-path-ref", "te-pc:response/te-pc:secondary-path-ref" and "te-pc:response/te-pc:secondary-reverse-path-ref" provides a reference where the same information provided in "te-pc:response/computed-paths-properties" is temporarily 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>
      <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>
      <t>This document registers a YANG module in the "YANG Module Names"
   registry <xref target="RFC7950"/>.</t>
      <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>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8795">
          <front>
            <title>YANG Data Model for Traffic Engineering (TE) Topologies</title>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="I. Bryskin" initials="I." surname="Bryskin"/>
            <author fullname="V. Beeram" initials="V." surname="Beeram"/>
            <author fullname="T. Saad" initials="T." surname="Saad"/>
            <author fullname="H. Shah" initials="H." surname="Shah"/>
            <author fullname="O. Gonzalez de Dios" initials="O." surname="Gonzalez de Dios"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document defines a YANG data model for representing, retrieving, and manipulating Traffic Engineering (TE) Topologies. The model serves as a base model that other technology-specific TE topology models can augment.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8795"/>
          <seriesInfo name="DOI" value="10.17487/RFC8795"/>
        </reference>
        <reference anchor="I-D.ietf-teas-yang-te">
          <front>
            <title>A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths, and Interfaces</title>
            <author fullname="Tarek Saad" initials="T." surname="Saad">
              <organization>Cisco Systems Inc</organization>
            </author>
            <author fullname="Rakesh Gandhi" initials="R." surname="Gandhi">
              <organization>Cisco Systems Inc</organization>
            </author>
            <author fullname="Xufeng Liu" initials="X." surname="Liu">
              <organization>Alef Edge</organization>
            </author>
            <author fullname="Vishnu Pavan Beeram" initials="V. P." surname="Beeram">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
              <organization>Individual</organization>
            </author>
            <date day="26" month="March" year="2026"/>
            <abstract>
              <t>   This document defines a YANG data model for the provisioning and
   management of Traffic Engineering (TE) tunnels, Label Switched Paths
   (LSPs), and interfaces.  The model covers data pertinent to TE
   tunnels, TE LSPs, and TE interfaces that are independent of any
   technology or dataplane encapsulation.  The model is divided into two
   YANG modules that address both device-specific and device-independent
   data, supporting configuration, operational state, Remote Procedure
   Calls (RPCs), and event notifications.

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

   This document obsoletes RFC 8776.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teas-rfc8776-update-22"/>
        </reference>
        <reference anchor="RFC5441">
          <front>
            <title>A Backward-Recursive PCE-Based Computation (BRPC) Procedure to Compute Shortest Constrained Inter-Domain Traffic Engineering Label Switched Paths</title>
            <author fullname="JP. Vasseur" initials="JP." role="editor" surname="Vasseur"/>
            <author fullname="R. Zhang" initials="R." surname="Zhang"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="JL. Le Roux" initials="JL." surname="Le Roux"/>
            <date month="April" year="2009"/>
            <abstract>
              <t>The ability to compute shortest constrained Traffic Engineering Label Switched Paths (TE LSPs) in Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks across multiple domains has been identified as a key requirement. In this context, a domain is a collection of network elements within a common sphere of address management or path computational responsibility such as an IGP area or an Autonomous Systems. This document specifies a procedure relying on the use of multiple Path Computation Elements (PCEs) to compute such inter-domain shortest constrained paths across a predetermined sequence of domains, using a backward-recursive path computation technique. This technique preserves confidentiality across domains, which is sometimes required when domains are managed by different service providers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5441"/>
          <seriesInfo name="DOI" value="10.17487/RFC5441"/>
        </reference>
        <reference anchor="RFC5541">
          <front>
            <title>Encoding of Objective Functions in the Path Computation Element Communication Protocol (PCEP)</title>
            <author fullname="JL. Le Roux" initials="JL." surname="Le Roux"/>
            <author fullname="JP. Vasseur" initials="JP." surname="Vasseur"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <date month="June" year="2009"/>
            <abstract>
              <t>The computation of one or a set of Traffic Engineering Label Switched Paths (TE LSPs) in MultiProtocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks is subject to a set of one or more specific optimization criteria, referred to as objective functions (e.g., minimum cost path, widest path, etc.).</t>
              <t>In the Path Computation Element (PCE) architecture, a Path Computation Client (PCC) may want a path to be computed for one or more TE LSPs according to a specific objective function. Thus, the PCC needs to instruct the PCE to use the correct objective function. Furthermore, it is possible that not all PCEs support the same set of objective functions; therefore, it is useful for the PCC to be able to automatically discover the set of objective functions supported by each PCE.</t>
              <t>This document defines extensions to the PCE communication Protocol (PCEP) to allow a PCE to indicate the set of objective functions it supports. Extensions are also defined so that a PCC can indicate in a path computation request the required objective function, and a PCE can report in a path computation reply the objective function that was used for path computation.</t>
              <t>This document defines objective function code types for six objective functions previously listed in the PCE requirements work, and provides the definition of four new metric types that apply to a set of synchronized requests. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5541"/>
          <seriesInfo name="DOI" value="10.17487/RFC5541"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7491">
          <front>
            <title>A PCE-Based Architecture for Application-Based Network Operations</title>
            <author fullname="D. King" initials="D." surname="King"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>Services such as content distribution, distributed databases, or inter-data center connectivity place a set of new requirements on the operation of networks. They need on-demand and application-specific reservation of network connectivity, reliability, and resources (such as bandwidth) in a variety of network applications (such as point-to-point connectivity, network virtualization, or mobile back-haul) and in a range of network technologies from packet (IP/MPLS) down to optical. An environment that operates to meet these types of requirements is said to have Application-Based Network Operations (ABNO). ABNO brings together many existing technologies and may be seen as the use of a toolbox of existing components enhanced with a few new elements.</t>
              <t>This document describes an architecture and framework for ABNO, showing how these components fit together. It provides a cookbook of existing technologies to satisfy the architecture and meet the needs of the applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7491"/>
          <seriesInfo name="DOI" value="10.17487/RFC7491"/>
        </reference>
        <reference anchor="RFC8453">
          <front>
            <title>Framework for Abstraction and Control of TE Networks (ACTN)</title>
            <author fullname="D. Ceccarelli" initials="D." role="editor" surname="Ceccarelli"/>
            <author fullname="Y. Lee" initials="Y." role="editor" surname="Lee"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>Traffic Engineered (TE) networks have a variety of mechanisms to facilitate the separation of the data plane and control plane. They also have a range of management and provisioning protocols to configure and activate network resources. These mechanisms represent key technologies for enabling flexible and dynamic networking. The term "Traffic Engineered network" refers to a network that uses any connection-oriented technology under the control of a distributed or centralized control plane to support dynamic provisioning of end-to- end connectivity.</t>
              <t>Abstraction of network resources is a technique that can be applied to a single network domain or across multiple domains to create a single virtualized network that is under the control of a network operator or the customer of the operator that actually owns the network resources.</t>
              <t>This document provides a framework for Abstraction and Control of TE Networks (ACTN) to support virtual network services and connectivity services.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8453"/>
          <seriesInfo name="DOI" value="10.17487/RFC8453"/>
        </reference>
        <reference anchor="RFC8454">
          <front>
            <title>Information Model for Abstraction and Control of TE Networks (ACTN)</title>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="S. Belotti" initials="S." surname="Belotti"/>
            <author fullname="D. Dhody" initials="D." surname="Dhody"/>
            <author fullname="D. Ceccarelli" initials="D." surname="Ceccarelli"/>
            <author fullname="B. Yoon" initials="B." surname="Yoon"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document provides an information model for Abstraction and Control of TE Networks (ACTN).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8454"/>
          <seriesInfo name="DOI" value="10.17487/RFC8454"/>
        </reference>
        <reference anchor="I-D.ietf-ccamp-otn-topo-yang">
          <front>
            <title>A YANG Data Model for Optical Transport Network Topology</title>
            <author fullname="Haomian Zheng" initials="H." surname="Zheng">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Italo Busi" initials="I." surname="Busi">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Xufeng Liu" initials="X." surname="Liu">
              <organization>Alef Edge</organization>
            </author>
            <author fullname="Sergio Belotti" initials="S." surname="Belotti">
              <organization>Nokia</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <date day="7" month="November" year="2024"/>
            <abstract>
              <t>   This document defines a YANG data model for representing, retrieving,
   and manipulating Optical Transport Network (OTN) topologies.  It is
   independent of control plane protocols and captures topological and
   resource-related information pertaining to OTN.

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

<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 <xref section="12.1" sectionFormat="of" 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>
        <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>
        <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>
      </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 <xref section="12.1" sectionFormat="of" 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>
        <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>
        <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>
      </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 <xref section="12.3" sectionFormat="of" 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>
        <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>
        <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>
      </section>
      <section anchor="tunnel-path-constraint-example">
        <name>Path Computation with Per-tunnel Path Constraint</name>
        <t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in <xref section="12.4" sectionFormat="of" target="I-D.ietf-teas-yang-te"/>, using a per tunnel path constraint.</t>
        <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>
        <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>
      </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>
        <artwork type="ascii-art"><![CDATA[
HTTP/1.1 200 OK
Host: example.com
Content-Type: application/yang-data+json

]]></artwork>
        <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>
      </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>
        <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>
        <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>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Karthik Sethuraman, Igor Bryskin and Xian Zhang for
participating in the initial discussions that have triggered this
work and providing valuable insights.</t>
      <t>The authors would like to thank the authors of the TE tunnel YANG
data model <xref target="I-D.ietf-teas-yang-te"/>, in particular Igor Bryskin, Vishnu Pavan
Beeram, Tarek Saad and Xufeng Liu, for their inputs to the
discussions and support in having consistency between the Path
Computation and TE tunnel YANG data models.</t>
      <t>The authors would like to thank Adrian Farrel, Dhruv Dhody, Igor
Bryskin, Julien Meuric and Lou Berger for their valuable input to the
discussions that has clarified that the path being set up is not
necessarily the same as the path that has been previously computed
and, in particular to Dhruv Dhody, for his suggestion to describe the
need for a path verification phase to check that the actual path
being set up meets the required end-to-end metrics and constraints.</t>
      <t>The authors would like to thank Aihua Guo, Lou Berger, Shaolong Gan,
Martin Bjorklund and Tom Petch for their useful comments on how to
define XPath statements in YANG RPCs.</t>
      <t>The authors would like to thank Haomian Zheng, Yanlei Zheng, Tom
Petch, Aihua Guo and Martin Bjorklund for their review and valuable
comments to this document.</t>
      <t>Previous versions of document were prepared using 2-Word-v2.0.template.dot.</t>
      <t>This document was prepared using kramdown.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
        <organization>Cisco</organization>
        <address>
          <email>daniele.ietf@gmail.com</email>
        </address>
      </contact>
      <contact initials="V." surname="Lopez" fullname="Victor Lopez">
        <organization>Nokia</organization>
        <address>
          <email>victor.lopez@nokia.com</email>
        </address>
      </contact>
      <contact initials="R." surname="Vilalta" fullname="Ricard Vilalta">
        <organization>CTTC</organization>
        <address>
          <email>ricard.vilalta@cttc.es</email>
        </address>
      </contact>
      <contact initials="M." surname="Scharf" fullname="Michael Scharf">
        <organization>Nokia</organization>
        <address>
          <email>michael.scharf@gmail.com</email>
        </address>
      </contact>
      <contact initials="D." surname="Beller" fullname="Dieter Beller">
        <organization>Nokia</organization>
        <address>
          <email>dieter.beller@nokia.com</email>
        </address>
      </contact>
      <contact initials="G." surname="Bruno" fullname="Gianmarco Bruno">
        <organization>Ericsson</organization>
        <address>
          <email>gianmarco.bruno@ericsson.com</email>
        </address>
      </contact>
      <contact initials="F." surname="Lazzeri" fullname="Francesco Lazzeri">
        <organization>Retired</organization>
        <address>
      </address>
      </contact>
      <contact initials="Y." surname="Lee" fullname="Young Lee">
        <organization>Samsung Electronics</organization>
        <address>
          <email>younglee.tx@gmail.com</email>
        </address>
      </contact>
      <contact initials="C." surname="Perocchio" fullname="Carlo Perocchio">
        <organization>Ericsson</organization>
        <address>
          <email>carlo.perocchio@ericsson.com</email>
        </address>
      </contact>
      <contact initials="O." surname="Dugeon" fullname="Olivier Dugeon">
        <organization>Orange Labs</organization>
        <address>
          <email>olivier.dugeon@orange.com</email>
        </address>
      </contact>
      <contact initials="J." surname="Meuric" fullname="Julien Meuric">
        <organization>Orange Labs</organization>
        <address>
          <email>julien.meuric@orange.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
Av9iPAkVM4WBxWRlq5Bt15SEcLQ+6CzD5NgVNxYYIfM/oAxrjMI+nqGy4AzY
TC2VpDVMtiX62aRcLq63CN4x2hR+m/ohcmQQr5kWRCYVYAiwAgQGyvBbdJxf
syBZsZJyCuYVDgLaB5GgssxFItYg8dGAs2uEhWwBoaJL25ytlzO22+A4C+QK
kyh+H37+6BGqN0g3VsBq0YHDiPTAr5XIfGllLMqUlzuOsqJ5cADe4kcPUUSJ
pIajjeQfW5NeDUCtW9mSon7R1ghri3WAsaf3jbSOQzhyH9sTxRrZhm2zQkGD
jdQEfMi5OqxahCv15ilycOAxsI7gskT0oAcP7xN2PvnEvM6RpzELGiEgb/Nr
gzc5tdl69sPJa7xawv+iLYp/vzr+5x+evjo+wr9Pvjv4/nv3x0hanHz34ofv
j/xfvufhi2fPjp8fcWf41gRfjbaeHfx5i8lj68XL109fPD/4fquNAJSZsPZT
0RxXFTOjehQclceHL//f/2fvodDD/b29P8CRF0G09wWqgbDNS54Nj5z8EzB6
PQI7J88q0hgWC9iwFd5w1ERs9UV5tTRIINPRH79Gb4SZfP71n0a8j8dH+/TH
n5ghi9aSK61lLloLMosM9nIhng9iCzDZ62M2/7xSSudSfoPDO89ZoMA/YPa3
Nes158U70JuFt4tidnhsgTno1NLoQO0QMOj7aFAUE19EXpatyG3FopYPAS4h
8xYsjor3piUalk5b8w3Oq2x1ITimUdCCvGaPkIMF9A32u6HDCPZ5XVmBEBjc
hFKAFocRSBnsTBl8WvYtSryOnVvnqocKkSjnEmcolzDcmABfootpUp5NbFPm
eKBrNTOA4AmsNX+fIfsbs4JA/NLa5IStyNJmFAnL/z47xcsIAAjk95w3Zfv7
k5c7JDOvreqL6s3Sq4jsHqrRVYA/ncIXV8W8uWC0IqvmlXgUCkYEHBGtMA8t
B002a8kEjJnJho07R8bHAS0WLCeJTVX5gmGFKdpkydoZExLZQaLcrtChWbN7
gb1+RFHiWcRdPo59FzTCmtxLdFBFb4TFxTsL3X/KyRpkZTIzP8PmCumh7uiV
zWhhmWFnCIxwsLR7zPsmXhL2HxENL83Tb18iG8qQ+NHlsG7KZXlZrmtzcl03
+eXUaRr3P//40WtonteSRi4My+quiv3XuOqzcr0MxRprLsK4qxyvMTM4Y5c8
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

-->

</rfc>
