<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.5 (Ruby 2.7.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-teas-yang-path-computation-18" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Yang for Path Computation">A YANG Data Model for requesting path computation</title>

    <author initials="I." surname="Busi" fullname="Italo Busi" role="editor">
      <organization>Huawei Technologies</organization>
      <address>
        <email>italo.busi@huawei.com</email>
      </address>
    </author>
    <author initials="S." surname="Belotti" fullname="Sergio Belotti" role="editor">
      <organization>Nokia</organization>
      <address>
        <email>sergio.belotti@nokia.com</email>
      </address>
    </author>
    <author initials="O." surname="Gonzalez de Dios" fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author initials="A." surname="Sharma" fullname="Anurag Sharma">
      <organization>Google</organization>
      <address>
        <email>ansha@google.com</email>
      </address>
    </author>
    <author initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
      <organization>Ericsson</organization>
      <address>
        <email>daniele.ceccarelli@ericsson.com</email>
      </address>
    </author>

    <date year="2022" month="March" day="21"/>

    
    <workgroup>TEAS Working Group</workgroup>
    

    <abstract>


<t>There are scenarios, typically in a hierarchical Software-Defined
   Networking (SDN) context, where the topology information provided by
   a Traffic Engineering (TE) network provider may be insufficient for
   its client to perform multi-domain path computation. In these cases the
   client would need to request the TE network provider to compute some
   intra-domain paths.</t>

<t>This document defines a YANG data model which contains Remote Procedure Calls
   (RPCs) to request path computation. This model complements the
   solution, defined in RFC YYYY, to configure a TE tunnel path in
   "compute-only" mode.</t>

<t>[RFC EDITOR NOTE: Please replace RFC YYYY with the RFC number of
   draft-ietf-teas-yang-te once it has been published.</t>

<t>Moreover, this document describes some use cases where the path
   computation request, via YANG-based protocols (e.g., NETCONF or
   RESTCONF), can be needed.</t>



    </abstract>



  </front>

  <middle>


<section anchor="intro"><name>Introduction</name>

<t anchor="pc-model">There are scenarios, typically in a hierarchical Software-Defined
   Networking (SDN) context, where the topology information provided by
   a Traffic Engineering (TE) network provider may be insufficient for
   its client to perform multi-domain path computation. In these cases the
   client would need to request the TE network provider to compute some
   intra-domain paths that could be used together with its topology information
   to compute the multi-domain path.</t>

<t>These types of scenarios can be applied to different interfaces in
   different reference architectures:</t>

<t><list style="symbols">
  <t>Application-Based Network Operations (ABNO) control interface
<xref target="RFC7491"/>, in which an Application Service Coordinator can request the
ABNO controller to take in charge path calculation (see Figure 1
in <xref target="RFC7491"/>).</t>
  <t>Abstraction and Control of TE Networks (ACTN) <xref target="RFC8453"/>, where a
controller hierarchy is defined.
In the ACTN context, path computation is needed on the interface
between Customer Network Controller (CNC)  and Multi-Domain
Service Coordinator (MDSC), called CNC-MDSC Interface (CMI),
and on the interface between MSDC and Provisioning Network
Controller (PNC), called MDSC-PNC Interface  (MPI). 
<xref target="RFC8454"/> describes an information model for the Path
Computation request.  <vspace blankLines='1'/>
Multiple protocol solutions can be used for communication between
different controller hierarchical levels. This document assumes that
the controllers are communicating using YANG-based protocols (e.g.,
NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>).  <vspace blankLines='1'/>
Path Computation Elements (PCEs), controllers and orchestrators
perform their operations based on Traffic Engineering Databases
(TED). Such TEDs can be described, in a technology agnostic way, with
the YANG data model for TE Topologies <xref target="RFC8795"/>. Furthermore, the
technology specific details of the TED are modelled in the technology
specific topology models, e.g., the <xref target="I-D.ietf-ccamp-otn-topo-yang"/> for Optical Transport
Network (OTN) Optical Data Unit (ODU) technologies, which augment the
common TE topology model in <xref target="RFC8795"/>.  <vspace blankLines='1'/>
The availability of such topology models allows the provisioning of
the TED using YANG-based protocols (e.g., NETCONF or RESTCONF).
Furthermore, it enables a PCE/controller performing the necessary
abstractions or modifications and offering this customized topology
to another PCE/controller or high level orchestrator.  <vspace blankLines='1'/>
The tunnels that can be provided over the networks described with the
topology models can be also set-up, deleted and modified via YANG-
based protocols (e.g., NETCONF or RESTCONF) using the TE tunnel YANG
data model <xref target="I-D.ietf-teas-yang-te"/>.  <vspace blankLines='1'/>
This document defines a YANG data model <xref target="RFC7950"/> for an RPC to
request path computation, which complements the solution defined in
<xref target="I-D.ietf-teas-yang-te"/>, to configure a TE tunnel path in "compute-only" mode.  <vspace blankLines='1'/>
The YANG data model definition does not make any assumption about
whether that the client or the server implement a "PCE"
functionality, as defined in <xref target="RFC4655"/>, and the Path Computation
Element Communication Protocol (PCEP) protocol, as defined in
<xref target="RFC5440"/>.  <vspace blankLines='1'/>
Moreover, this document describes some use cases where a path
computation request, via YANG-based protocols (e.g., NETCONF or
RESTCONF), can be needed.  <vspace blankLines='1'/>
The YANG data model defined in this document conforms to the Network
Management Datastore Architecture <xref target="RFC8342"/>.</t>
</list></t>

<section anchor="terminology"><name>Terminology</name>

<t>TED:</t>

<ul empty="true"><li>
  <t>The traffic engineering database is a collection of all TE
   information about all TE nodes and TE links in a given network.</t>
</li></ul>

<t>PCE:</t>

<ul empty="true"><li>
  <t>A Path Computation Element (PCE) is an entity that is capable of
   computing a network path or route based on a network graph, and of
   applying computational constraints during the computation.  The PCE
   entity is an application that can be located within a network node or
   component, on an out-of-network server, etc.  For example, a PCE
   would be able to compute the path of a TE Label Switched Path (LSP)
   by operating on the TED and considering bandwidth and other
   constraints applicable to the TE LSP service request. <xref target="RFC4655"/>.</t>
</li></ul>

<t>Domain:</t>

<ul empty="true"><li>
  <t>TE information is the data relating to nodes and TE links
   that is used in the process of selecting a TE path.  TE information
   is usually only available within a network.  We call such a zone of
   visibility of TE information a domain.  An example of a domain may be
   an IGP area or an Autonomous System. <xref target="RFC7926"/></t>
</li></ul>

<t>The terminology for describing YANG data models is found in
   <xref target="RFC7950"/>.</t>

</section>
<section anchor="tree-diagram"><name>Tree Diagram</name>

<t>Tree diagrams used in this document follow the notation defined in
   <xref target="RFC8340"/>.</t>

</section>
<section anchor="prefixes-in-data-node-names"><name>Prefixes in Data Node Names</name>

<t>In this document, names of data nodes and other data model objects
   are prefixed using the standard prefix associated with the
   corresponding YANG imported modules, as shown in <xref target="tab-prefix"/>.</t>

<texttable title="Prefixes and corresponding YANG modules" anchor="tab-prefix">
      <ttcol align='left'>Prefix</ttcol>
      <ttcol align='left'>YANG module</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>inet</c>
      <c>ietf-inet-types</c>
      <c><xref target="RFC6991"/></c>
      <c>te-types</c>
      <c>ietf-te-types</c>
      <c><xref target="RFC8776"/></c>
      <c>te</c>
      <c>ietf-te</c>
      <c>[RFCYYYY]</c>
      <c>te-pc</c>
      <c>ietf-te-path-computation</c>
      <c>RFCXXXX</c>
</texttable>

<t>RFC Editor Note:
Please replace XXXX with the RFC number assigned to this document.
Please replace RFC YYYY with the RFC number of <xref target="I-D.ietf-teas-yang-te"/> 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: a) Packet/Optical Integration; b)
   multi-domain Traffic Engineered (TE) Networks; and c) Data Center
   Interconnections. Use cases d) and e) respectively present how to
   apply this YANG data model for standard multi-domain PCE i.e.
   Backward Recursive Path Computation <xref target="RFC5441"/> and Hierarchical PCE
   <xref target="RFC6805"/>.</t>

<section anchor="poi-uc"><name>Packet/Optical Integration</name>

<t>In this use case, an optical domain is used to provide connectivity
   to some nodes of a packet domain (see <xref target="fig-poi-uc"/>).</t>

<figure title="Packet/Optical Integration use case" anchor="fig-poi-uc"><artwork type="ascii-art" name="poi-use-case.txt"><![CDATA[
                                +----------------+
                                |                |
                                | Packet/Optical |
                                |  Coordinator   |
                                |                |
                                +---+------+-----+
                                    |      |
                       +------------+      |
                       |                   +-----------+
                +------V-----+                         |
                |            |                  +------V-----+
                | Packet     |                  |            |
                | Domain     |                  | Optical    |
                | Controller |                  | Domain     |
                |            |                  | Controller |
                +------+-----+                  +-------+----+
                       |                                |
              .........V.........................       |
              :          packet domain          :       |
          +----+                               +----+   |
          | R1 |= = = = = = = = = = = = = = = =| R2 |   |
          +-+--+                               +--+-+   |
            | :                                 : |     |
            | :................................ : |     |
            |                                     |     |
            |               +-----+               |     |
            |    ...........| Opt |...........    |     |
            |    :          |  C  |          :    |     |
            |    :         /+--+--+\         :    |     |
            |    :        /    |    \        :    |     |
            |    :       /     |     \       :    |     |
            |   +-----+ /   +--+--+   \ +-----+   |     |
            |   | Opt |/    | Opt |    \| Opt |   |     |
            +---|  A  |     |  D  |     |  B  |---+     |
                +-----+\    +--+--+    /+-----+         |
                 :      \      |      /      :          |
                 :       \     |     /       :          |
                 :        \ +--+--+  / optical<---------+
                 :         \| Opt |/  domain :
                 :..........|  E  |..........:
                            +-----+
]]></artwork></figure>

<t><xref target="fig-poi-uc"/> as well as <xref target="fig-poi-abstraction"/> below only show a partial view of the
   packet network connectivity, before additional packet connectivity is
   provided by the optical network.</t>

<t>It is assumed that the Optical Domain Controller provides to the
   Packet/Optical Coordinator an abstracted view of the optical network.
   A possible abstraction could be to represent the whole optical
   network as one "virtual node" with "virtual ports" connected to the
   access links, as shown in <xref target="fig-poi-abstraction"/>.</t>

<t>It is also assumed that Packet Domain Controller can provide the
   Packet/Optical Coordinator the information it needs to set up
   connectivity between packet nodes through the optical network (e.g.,
   the access links).</t>

<t>The path computation request helps the Packet/Optical Coordinator to
   know the real connections that can be provided by the optical
   network.</t>

<figure title="Packet and Optical Topology Abstractions" anchor="fig-poi-abstraction"><artwork type="ascii-art" name="poi-topology-abstraction.txt"><![CDATA[
                       ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
                      ,  Packet/Optical Coordinator view          ,
                     ,                              +----+       , .
                    ,                               |    |      ,
                   ,                                | R2 |     ,   .
                  ,  +----+  +------------ +       /+----+    ,
                 ,   |    |  |             |/-----/ / /      ,     .
                ,    | R1 |--O VP1     VP4 O       / /      ,
               ,     |    |\ |             | /----/ /      ,       .
              ,      +----+ \|             |/      /      ,
             ,        /      O VP2     VP5 O      /      ,         .
            ,        /       |             |  +----+    ,
           ,        /        |             |  |    |   ,           .
          ,        /         O VP3     VP6 O--| R4 |  ,
         ,     +----+ /-----/|_____________|  +----+ ,             .
        ,      |    |/       +------------ +        ,
       ,       | R3 |                              ,               .
      ,        +----+                             ,,,,,,,,,,,,,,,,,
     ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,.
     . Packet Domain Controller view                +----+       ,
       only packet nodes and packet links           |    |      ,  .
     . with access links to the optical network     | R2 |     ,
                  ,  +----+                        /+----+    ,    .
     .           ,   |    |                 /-----/ / /      ,
                ,    | R1 |---                     / /      ,      .
     .         ,     +----+\                 /----/ /      ,
              ,        /    \               /      /      ,        .
     .       ,        /                           /      ,
            ,        /                        +----+    ,          .
     .     ,        /                         |    |   ,
          ,        /                       ---| R4 |  ,            .
     .   ,     +----+ /-----/                 +----+ ,
        ,      |    |/                              ,              .
     . ,       | R3 |                              ,
      ,        +----+                             ,,,,,,,,,,,,,,,,,.
     .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,
       Optical Domain Controller view                            , .
     . only optical nodes,        +--+                          ,
       optical links and         /|OF|                         ,   .
     . access links from the  +--++--+             /          ,
       packet network         |OA|    \     /-----/ /        ,     .
     .          ,          ---+--+--\  +--+/       /        ,
               ,           \   |  \  \-|OE|-------/        ,       .
     .        ,             \  |   \ /-+--+               ,
             ,               \+--+  X    |               ,         .
     .      ,                 |OB|-/ \   |              ,
           ,                  +--+-\  \+--+            ,           .
     .    ,                  /   \  \--|OD|---        ,
         ,            /-----/     +--+ +--+          ,             .
     .  ,            /            |OC|/             ,
       ,                          +--+             ,               .
     .,                                           ,,,,,,,,,,,,,,,,,,
      ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,                ,
     . Actual Physical View                         +----+       ,
                    ,             +--+              |    |      ,
     .             ,             /|OF|              | R2 |     ,
                  ,  +----+   +--++--+             /+----+    ,
     .           ,   |    |   |OA|    \     /-----/ / /      ,
                ,    | R1 |---+--+--\  +--+/       / /      ,
     .         ,     +----+\   |  \  \-|OE|-------/ /      ,
              ,        /    \  |   \ /-+--+        /      ,
     .       ,        /      \+--+  X    |        /      ,
            ,        /        |OB|-/ \   |    +----+    ,
     .     ,        /         +--+-\  \+--+   |    |   ,
          ,        /         /   \  \--|OD|---| R4 |  ,
     .   ,     +----+ /-----/     +--+ +--+   +----+ ,
        ,      |    |/            |OC|/             ,
     . ,       | R3 |             +--+             ,
      ,        +----+                             ,
     .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
]]></artwork></figure>

<t>In this use case, the Packet/Optical Coordinator needs to set up an
   optimal underlying path for an IP link between R1 and R2.</t>

<t>As depicted in <xref target="fig-poi-abstraction"/>, the Packet/Optical Coordinator has only an
   "abstracted view" of the physical network, and it does not know the
   feasibility or the cost of the possible optical paths (e.g., VP1-VP4
   and VP2-VP5), which depend on the current status of the physical
   resources within the optical network and on vendor-specific optical
   attributes.</t>

<t>The Packet/Optical Coordinator can request the underlying Optical
   Domain Controller to compute a set of potential optimal paths, taking
   into account optical constraints. Then, based on its own constraints,
   policy and knowledge (e.g. cost of the access links), it can choose
   which one of these potential paths to use to set up the optimal end-
   to-end path crossing optical network.</t>

<figure title="Packet/Optical Integration path computation example" anchor="fig-poi-example"><artwork type="ascii-art" name="poi-example.txt"><![CDATA[
                    ............................
                    :                          :
                    O VP1                  VP4 O
           cost=10 /:\                        /:\ cost=10
                  / : \----------------------/ : \
          +----+ /  :         cost=50          :  \ +----+
          |    |/   :                          :   \|    |
          | R1 |    :                          :    | R2 |
          |    |\   :                          :   /|    |
          +----+ \  :  /--------------------\  :  / +----+
                  \ : /       cost=55        \ : /
            cost=5 \:/                        \:/ cost=5
                    O VP2                  VP5 O
                    :                          :
                    :..........................:
]]></artwork></figure>

<t>For example, in <xref target="fig-poi-example"/>, the Packet/Optical Coordinator can request
   the Optical Domain Controller to compute the paths between VP1-VP4
   and VP2-VP5 and then decide to set up the optimal end-to-end path
   using the VP2-VP5 optical path even if this is not the optimal path
   from the optical domain perspective.</t>

<t>Considering the dynamicity of the connectivity constraints of an
   optical domain, it is possible that a path computed by the Optical
   Domain Controller when requested by the Packet/Optical Coordinator is
   no longer valid/available when the Packet/Optical Coordinator
   requests it to be set up. This is further discussed in <xref target="rpc-motivation"/>.</t>

</section>
<section anchor="md-uc"><name>Multi-domain TE networks</name>

<t>In this use case there are two TE domains which are interconnected
   together by multiple inter-domains links.</t>

<t>A possible example could be a multi-domain optical network.</t>

<figure title="Multi-domain multi-link interconnection" anchor="md-ml-connection"><artwork type="ascii-art" name="multi-domain-use-case.txt"><![CDATA[
                            +--------------+
                            | Multi-Domain |
                            | Controller   |
                            +---+------+---+
                                |      |
                   +------------+      |
                   |                   +-----------+
            +------V-----+                         |
            |            |                         |
            | TE Domain  |                  +------V-----+
            | Controller |                  |            |
            |      1     |                  | TE Domain  |
            +------+-----+                  | Controller |
                   |                        |      2     |
                   |                        +------+-----+
          .........V..........                     |
          :                  :                     |
         +-----+             :                     |
         |     |             :            .........V..........
         |  X  |             :            :                  :
         |     |          +-----+      +-----+                :
         +-----+          |     |      |     |               :
          :               |  C  |------|  E  |               :
      +-----+    +-----+ /|     |      |     |\ +-----+    +-----+
      |     |    |     |/ +-----+      +-----+ \|     |    |     |
      |  A  |----|  B  |     :            :     |  G  |----|  H  |
      |     |    |     |\    :            :    /|     |    |     |
      +-----+    +-----+ \+-----+      +-----+/ +-----+    +-----+
          :               |     |      |     |               :
          :               |  D  |------|  F  |               :
          :               |     |      |     |          +-----+
          :               +-----+      +-----+          |     |
          :                  :            :             |  Y  |
          :                  :            :             |     |
          :   TE domain 1    :            : TE domain 2 +-----+
          :..................:            :.................:
]]></artwork></figure>

<t>In order to set up an end-to-end multi-domain TE path (e.g., between
   nodes A and H), the Multi-Domain Controller needs to know the
   feasibility or the cost of the possible TE paths within the two TE
   domains, which depend on the current status of the physical resources
   within each TE domain. This is more challenging in case of optical
   networks because the optimal paths depend also on vendor-specific
   optical attributes (which may be different in the two domains if they
   are provided by different vendors).</t>

<t>In order to set up a multi-domain TE path (e.g., between nodes A and
   H), the Multi-Domain Controller can request the TE Domain Controllers
   to compute a set of intra-domain optimal paths and take decisions
   based on the information received. For example:</t>

<t><list style="symbols">
  <t>The Multi-Domain Controller asks TE Domain Controllers to provide
set of paths between A-C, A-D, E-H and F-H</t>
  <t>TE Domain Controllers return a set of feasible paths with the
associated costs: the path A-C is not part of this set (in optical
networks, it is typical to have some paths not being feasible due
to optical constraints that are known only by the Optical Domain
Controller)</t>
  <t>The Multi-Domain Controller will select the path A-D-F-H since it
is the only feasible multi-domain path and then request the TE
Domain Controllers to set up the A-D and F-H intra-domain paths</t>
  <t>If there are multiple feasible paths, the Multi-Domain Controller
can select the optimal path knowing the cost of the intra-domain
paths (provided by the TE domain controllers) and the cost of the
inter-domain links (known by the Multi-Domain Controller)  <vspace blankLines='1'/>
This approach may have some scalability issues when the number of TE
domains is quite big (e.g. 20).  <vspace blankLines='1'/>
In this case, it would be worthwhile using the abstract TE topology
information provided by the TE Domain Controllers to limit the number
of potential optimal end-to-end paths and then request path
computation from fewer TE Domain Controllers in order to decide what
the optimal path within this limited set is.  <vspace blankLines='1'/>
For more details, see <xref target="topo-pc-complement"/>.</t>
</list></t>

</section>
<section anchor="data-center-interconnections"><name>Data Center Interconnections</name>

<t>In these use case, there is a TE domain which is used to provide
   connectivity between Data Centers which are connected with the TE
   domain using access links.</t>

<figure title="Data Center Interconnection use case" anchor="fig-dci-uc"><artwork type="ascii-art" name="dci-use-case.txt"><![CDATA[
                        +--------------+
                        | Cloud Network|
                        | Orchestrator |
                        +--------------+
                          |  |  |  |
            +-------------+  |  |  +------------------------+
            |                |  +------------------+        |
            |       +--------V---+                 |        |
            |       |            |                 |        |
            |       | TE Network |                 |        |
     +------V-----+ | Controller |          +------V-----+  |
     | DC         | +------------+          | DC         |  |
     | Controller |     |                   | Controller |  |
     +------------+     |   +-----+         +------------+  |
          |         ....V...|     |........         |       |
          |         :       |  P  |       :         |       |
     .....V.....    :      /+-----+\      :    .....V.....  |
     :         :  +-----+ /    |    \ +-----+  :         :  |
     :  DC1 || :  |     |/     |     \|     |  :  DC2 || :  |
     :    ||||----| PE1 |      |      | PE2 |----   |||| :  |
     : _|||||| :  |     |\     |     /|     |  : _|||||| :  |
     :         :  +-----+ \ +-----+ / +-----+  :         :  |
     :.........:    :      \|     |/      :    :.........:  |
                    :.......| PE3 |.......:                 |
                            |     |                         |
                            +-----+               +---------V--+
                          .....|.....             | DC         |
                          :         :             | Controller |
                          :  DC3 || :             +------------+
                          :    |||| :                  |
                          : _|||||| <------------------+
                          :         :
                          :.........:
]]></artwork></figure>

<t>In this use case, there is the need to transfer data from Data Center
   1 (DC1) to either DC2 or DC3 (e.g. workload migration).</t>

<t>The optimal decision depends both on the cost of the TE path (DC1-DC2
   or DC1-DC3) and of the Data Center resources within DC2 or DC3.</t>

<t>The Cloud Network Orchestrator needs to make a decision for optimal
   connection based on TE network constraints and Data Center resources.</t>

<t>It may not be able to make this decision because it has only an
   abstract view of the TE network (as in <xref target="poi-uc"/>).</t>

<t>The Cloud Network Orchestrator can request to the TE Network
   Controller to compute the cost of the possible TE paths (e.g., DC1-
   DC2 and DC1-DC3) and to the DC Controller to provide the information
   it needs about the required Data Center resources within DC2 and DC3
   and then it can take the decision about the optimal solution based on
   this information and its policy.</t>

</section>
<section anchor="backward-recursive-path-computation-scenario"><name>Backward Recursive Path Computation scenario</name>

<t><xref target="RFC5441"/> has defined the Virtual Source Path Tree (VSPT) TLV within
   PCE Reply Object in order to compute inter-domain paths following a
   "Backward Recursive Path Computation" (BRPC) method. The main
   principle is to forward the PCE request message up to the destination
   domain. Then, each PCE involved in the computation will compute its
   part of the path and send it back to the requester through PCE
   Response message. The resulting computation is spread from
   destination PCE to source PCE. Each PCE is in charge of merging the
   path it received with the one it calculated. At the end, the source
   PCE merges its local part of the path with the received one to
   achieve the end-to-end path.</t>

<t><xref target="fig-brpc-example"/> below show a typical BRPC scenario where 3 PCEs cooperate to
   compute inter-domain paths.</t>

<figure title="BRPC Scenario" anchor="fig-brpc-example"><artwork type="ascii-art" name="brpc-scenario.txt"><![CDATA[
                   +----------------+          +----------------+
                   |  Domain (B)    |          |  Domain (C)    |
                   |                |          |                |
                   |        /-------|---PCEP---|--------\       |
                   |       /        |          |         \      |
                   |   (PCE)        |          |   -    (PCE)   |
                   |    /           <---------->  |D|           |
                   |   /            |  Inter   |   -            |
                   +---|----^-------+  Domain  +----------------+
                       |    |          Link
                     PCEP   |
                       |    | Inter-domain Link
                       |    |
                   +---|----v-------+
                   |   |            |
                   |   | Domain (A) |
                   |   \            |
                   |  (PCE)    -    |
                   |          |S|   |
                   |           -    |
                   +----------------+
]]></artwork></figure>

<t>In this use case, a client can use the YANG data model defined in
   this document to request path computation from the PCE that controls
   the source of the tunnel. For example, a client can request to the
   PCE of domain A to compute a path from a source S, within domain A,
   to a destination D, within domain C. Then PCE of domain A will use
   PCEP protocol, as per <xref target="RFC5441"/>, to compute the path from S to D and
   in turn gives the final answer to the requester.</t>

</section>
<section anchor="hierarchical-pce-scenario"><name>Hierarchical PCE scenario</name>

<t><xref target="RFC6805"/> has defined an architecture and extensions to the PCE
   standard to compute inter-domain path following a hierarchical
   method. Two new roles have been defined: parent PCE and child PCE.
   The parent PCE is in charge to coordinate the end-to-end path
   computation. For that purpose it sends to each child PCE involved in
   the multi-domain path computation a PCE Request message to obtain the
   local part of the path. Once received all answer through PCE Response
   message, the parent PCE will merge the different local parts of the
   path to achieve the end-to-end path.</t>

<t><xref target="fig-hpce-example"/> below shows a typical hierarchical scenario where a parent
   PCE request end-to-end path to the different child PCE. Note that a
   PCE could take independently the role of child or parent PCE
   depending of which PCE will request the path.</t>

<figure title="Hierarchical domain topology from RFC6805" anchor="fig-hpce-example"><artwork type="ascii-art" name="hierarchical-domain-topology.txt"><![CDATA[
    -----------------------------------------------------------------
    |   Domain 5                                                      |
    |                              -----                              |
    |                             |PCE 5|                             |
    |                              -----                              |
    |                                                                 |
    |    ----------------     ----------------     ----------------   |
    |   | Domain 1       |   | Domain 2       |   | Domain 3       |  |
    |   |                |   |                |   |                |  |
    |   |        -----   |   |        -----   |   |        -----   |  |
    |   |       |PCE 1|  |   |       |PCE 2|  |   |       |PCE 3|  |  |
    |   |        -----   |   |        -----   |   |        -----   |  |
    |   |                |   |                |   |                |  |
    |   |            ----|   |----        ----|   |----            |  |
    |   |           |BN11+---+BN21|      |BN23+---+BN31|           |  |
    |   |   -        ----|   |----        ----|   |----        -   |  |
    |   |  |S|           |   |                |   |           |D|  |  |
    |   |   -        ----|   |----        ----|   |----        -   |  |
    |   |           |BN12+---+BN22|      |BN24+---+BN32|           |  |
    |   |            ----|   |----        ----|   |----            |  |
    |   |                |   |                |   |                |  |
    |   |         ----   |   |                |   |   ----         |  |
    |   |        |BN13|  |   |                |   |  |BN33|        |  |
    |    -----------+----     ----------------     ----+-----------   |
    |                \                                /               |
    |                 \       ----------------       /                |
    |                  \     |                |     /                 |
    |                   \    |----        ----|    /                  |
    |                    ----+BN41|      |BN42+----                   |
    |                        |----        ----|                       |
    |                        |                |                       |
    |                        |        -----   |                       |
    |                        |       |PCE 4|  |                       |
    |                        |        -----   |                       |
    |                        |                |                       |
    |                        | Domain 4       |                       |
    |                         ----------------                        |
    |                                                                 |
     -----------------------------------------------------------------
]]></artwork></figure>

<t>In this use case, a client can use the YANG data model defined in
   this document to request to the parent PCE a path from a source S to
   a destination D. The parent PCE will in turn contact the child PCEs
   through PCEP protocol to compute the end-to-end path and then return
   the computed path to the client, using the YANG data model defined in
   this document. For example the YANG data model can be used to request
   to PCE5 acting as parent PCE to compute a path from source S, within
   domain 1, to destination D, within domain 3. PCE5 will contact child
   PCEs of domain 1, 2 and 3 to obtain local part of the end-to-end path
   through the PCEP protocol. Once received the PCE Response message, it
   merges the answers to compute the end-to-end path and send it back to
   the client.</t>

</section>
</section>
<section anchor="motivations"><name>Motivations</name>

<t>This section provides the motivation for the YANG data model defined
   in this document.</t>

<t><xref target="yang-motivation"/> describes the motivation for a YANG data model to request
   path computation.</t>

<t><xref target="topo-interaction"/> describes the motivation for a YANG data model which
   complements the TE topology YANG data model defined in <xref target="RFC8795"/>.</t>

<t><xref target="rpc-motivation"/> describes the motivation for a YANG RPC which complements
   the TE tunnel YANG data model defined in <xref target="I-D.ietf-teas-yang-te"/>.</t>

<section anchor="yang-motivation"><name>Motivation for a YANG Model</name>

<section anchor="benefits-of-common-data-models"><name>Benefits of common data models</name>

<t>The YANG data model for requesting path computation is closely
   aligned with the YANG data models that provide (abstract) TE topology
   information, i.e., <xref target="RFC8795"/> as well as that are used to configure
   and manage TE tunnels, i.e., <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>There are many benefits in aligning the data model used for path
   computation requests with the YANG data models used for TE topology
   information and for TE tunnels configuration and management:</t>

<t><list style="symbols">
  <t>There is no need for an error-prone mapping or correlation of
information.</t>
  <t>It is possible to use the same endpoint identifiers in path
computation requests and in the topology modeling.</t>
  <t>The attributes used for path computation constraints are the same
as those used when setting up a TE tunnel.</t>
</list></t>

</section>
<section anchor="benefits-of-a-single-interface"><name>Benefits of a single interface</name>

<t>The system integration effort is typically lower if a single,
   consistent interface is used by controllers, i.e., one data modeling
   language (i.e., YANG) and a common protocol (e.g., NETCONF or
   RESTCONF).</t>

<t>Practical benefits of using a single, consistent interface include:</t>

<t><list style="numbers">
  <t>Simple authentication and authorization: The interface between
different components has to be secured. If different protocols
have different security mechanisms, ensuring a common access
control model may result in overhead. For instance, there may be a
need to deal with different security mechanisms, e.g., different
credentials or keys. This can result in increased integration
effort.</t>
  <t>Consistency: Keeping data consistent over multiple different
interfaces or protocols is not trivial. For instance, the sequence
of actions can matter in certain use cases, or transaction
semantics could be desired. While ensuring consistency within one
protocol can already be challenging, it is typically cumbersome to
achieve that across different protocols.</t>
  <t>Testing: System integration requires comprehensive testing,
including corner cases. The more different technologies are
involved, the more difficult it is to run comprehensive test cases
and ensure proper integration.</t>
  <t>Middle-box friendliness: Provider and consumer of path computation
requests may be located in different networks, and middle-boxes
such as firewalls, NATs, or load balancers may be deployed. In
such environments it is simpler to deploy a single protocol. Also,
it may be easier to debug connectivity problems.</t>
  <t>Tooling reuse: Implementers may want to implement path computation
requests with tools and libraries that already exist in
controllers and/or orchestrators, e.g., leveraging the rapidly
growing eco-system for YANG tooling.</t>
</list></t>

</section>
<section anchor="extensibility"><name>Extensibility</name>

<t>Path computation is only a subset of the typical functionality of a
   controller. In many use cases, issuing path computation requests
   comes along with the need to access other functionality on the same
   system. In addition to obtaining TE topology, for instance also
   configuration of services (set-up/modification/deletion) may be
   required, as well as:</t>

<t><list style="numbers">
  <t>Receiving notifications for topology changes as well as
integration with fault management</t>
  <t>Performance management such as retrieving monitoring and telemetry
data</t>
  <t>Service assurance, e.g., by triggering OAM functionality</t>
  <t>Other fulfilment and provisioning actions beyond tunnels and
services, such as changing QoS configurations  <vspace blankLines='1'/>
YANG is a very extensible and flexible data modeling language that
can be used for all these use cases.</t>
</list></t>

</section>
</section>
<section anchor="topo-interaction"><name>Interactions with TE topology</name>

<t>The use cases described in <xref target="use-cases"/> have been described assuming
   that the topology view exported by each underlying controller to its
   client is aggregated using the "virtual node model", defined in
   <xref target="RFC7926"/>.</t>

<t>TE topology information, e.g., as provided by <xref target="RFC8795"/>, could in
   theory be used by an underlying controller to provide TE information
   to its client thus allowing a PCE available within its client to
   perform multi-domain path computation on its own, without requesting
   path computations to the underlying controllers.</t>

<t>In case the client does not implement a PCE function, as discussed in
   <xref target="intro"/>, it could not perform path computation based on TE topology
   information and would instead need to request path computation from
   the underlying controllers to get the information it needs to find
   the optimal end-to-end path.</t>

<t>In case the client implements a PCE function, as discussed in 
   <xref target="intro"/>, the TE topology information needs to be complete and accurate,
   which would bring to scalability issues.</t>

<t>Using TE topology to provide a "virtual link model" aggregation, as
   described in <xref target="RFC7926"/>, may be insufficient, unless the aggregation
   provides complete and accurate information, which would still cause
   scalability issues, as described in <xref target="topo-aggregation"/> below.</t>

<t>Using TE topology abstraction, as described in <xref target="RFC7926"/>, may lead to
   compute an unfeasible path, as described in <xref target="RFC7926"/> in 
   <xref target="topo-abstraction"/> below.</t>

<t>Therefore when computing an optimal multi-domain path, there is a
   scalability trade-off between providing complete and accurate TE
   information and the number of path computation requests to the
   underlying controllers.</t>

<t>The TE topology information used, in a complimentary way, to reduce
   the number for path computation requests to the underlying
   controllers, are described in <xref target="topo-pc-complement"/> below.</t>

<section anchor="topo-aggregation"><name>TE topology aggregation</name>

<t>Using the TE topology model, as defined in <xref target="RFC8795"/>, the underlying
   controller can export the whole TE domain as a single TE node with a
   "detailed connectivity matrix" (which provides specific TE
   attributes, such as delay, Shared Risk Link Groups (SRLGs) and other
   TE metrics, between each ingress and egress links).</t>

<t>The information provided by the "detailed connectivity matrix" would
   be equivalent to the information that should be provided by "virtual
   link model" as defined in <xref target="RFC7926"/>.</t>

<t>For example, in the Packet/Optical Integration use case, described in
   <xref target="poi-uc"/>, the Optical Domain Controller can make the information
   shown in <xref target="fig-poi-example"/> available to the Packet/Optical Coordinator as part
   of the TE topology information and the Packet/Optical Coordinator
   could use this information to calculate on its own the optimal path
   between R1 and R2, without requesting any additional information to
   the Optical Domain Controller.</t>

<t>However, when designing the amount of information to provide within
   the "detailed connectivity matrix", there is a tradeoff to be
   considered between accuracy (i.e., providing "all" the information
   that might be needed by the PCE available within the client) and
   scalability.</t>

<t><xref target="poi-multi-path"/> below shows another example, similar to <xref target="fig-poi-example"/>, where
   there are two possible Optical paths between VP1 and VP4 with
   different properties (e.g., available bandwidth and cost).</t>

<figure title="Packet/Optical Integration path computation Example with multiple choices" anchor="poi-multi-path"><artwork type="ascii-art" name="poi-example-multiple.txt"><![CDATA[
                    ............................
                    :  /--------------------\  :
                    : /       cost=65        \ :
                    :/    available-bw=10G    \:
                    O VP1                  VP4 O
           cost=10 /:\                        /:\ cost=10
                  / : \----------------------/ : \
          +----+ /  :         cost=50          :  \ +----+
          |    |/   :     available-bw=2G      :   \|    |
          | R1 |    :                          :    | R2 |
          |    |\   :                          :   /|    |
          +----+ \  :  /--------------------\  :  / +----+
                  \ : /       cost=55        \ : /
            cost=5 \:/    available-bw=3G     \:/ cost=5
                    O VP2                  VP5 O
                    :                          :
                    :..........................:
]]></artwork></figure>

<t>If the information in the "detailed connectivity matrix" is not
   complete/accurate, we can have the following drawbacks:</t>

<t><list style="symbols">
  <t>If only the VP1-VP4 path with available bandwidth of 2 Gb/s and
cost 50 is reported, the client's PCE will fail to compute a 5
Gb/s path between routers R1 and R2, although this would be
feasible;</t>
  <t>If only the VP1-VP4 path with available bandwidth of 10 Gb/s and
cost 60 is reported, the client's PCE will compute, as optimal,
the 1 Gb/s path between R1 and R2 going through the VP2-VP5 path
within the optical domain while the optimal path would actually be
the one going thought the VP1-VP4 sub-path (with cost 50) within
the optical domain.  <vspace blankLines='1'/>
Reporting all the information, as in <xref target="poi-multi-path"/>, using the "detailed
 connectivity matrix", is quite challenging from a scalability
 perspective. The amount of this information is not just based on
 number of end points (which would scale as N-square), but also on
 many other parameters, including client rate, user
 constraints/policies for the service, e.g. max latency &lt; N ms, max
 cost, etc., exclusion policies to route around busy links, min
 Optical Signal to Noise Ratio (OSNR) margin, max pre-Forward Error
 Correction (FEC) Bit Error Rate (BER) etc. All these constraints
 could be different based on connectivity requirements.  <vspace blankLines='1'/>
It is also worth noting that the "connectivity matrix" has been
 originally defined in Wavelength Switched Optical Networks (WSON),
 <xref target="RFC7446"/>, to report the connectivity constrains of a physical node
 within the Wavelength Division Multiplexing (WDM) network: the
 information it contains is pretty "static" and therefore, once taken
 and stored in the TE data base, it can be always being considered
 valid and up-to-date in path computation request.  <vspace blankLines='1'/>
The "connectivity matrix" is sometimes confused with "optical reach
 table" that contain multiple (e.g. k-shortest) regen-free reachable
 paths for every A-Z node combination in the network. Optical reach
 tables can be calculated offline, utilizing vendor optical design and
 planning tools, and periodically uploaded to the Controller: these
 optical path reach tables are fairly static. However, to get the
 connectivity matrix, between any two sites, either a regen free path
 can be used, if one is available, or multiple regen free paths are
 concatenated to get from the source to the destination, which can be
 a very large combination. Additionally, when the optical path within
 optical domain needs to be computed, it can result in different paths
 based on input objective, constraints, and network conditions. In
 summary, even though "optical reach table" is fairly static, which
 regen free paths to build the connectivity matrix between any source
 and destination is very dynamic, and is done using very sophisticated
 routing algorithms.  <vspace blankLines='1'/>
Using the "basic connectivity matrix" with an abstract node to
 abstract the information regarding the connectivity constraints of an
 Optical domain, would make this information more "dynamic" since the
 connectivity constraints of an optical domain can change over time
 because some optical paths that are feasible at a given time may
 become unfeasible at a later time when e.g., another optical path is
 established.  <vspace blankLines='1'/>
The information in the "detailed connectivity matrix" is even more
 dynamic since the establishment of another optical path may change
 some of the parameters (e.g., delay or available bandwidth) in the
 "detailed connectivity matrix" while not changing the feasibility of
 the path.  <vspace blankLines='1'/>
There is therefore the need to keep the information in the "detailed
 connectivity matrix" updated which means that there another tradeoff
 between the accuracy (i.e., providing "all" the information that
 might be needed by the client's PCE) and having up-to-date
 information. The more the information is provided and the longer it
 takes to keep it up-to-date which increases the likelihood that the
 client's PCE computes paths using not updated information.  <vspace blankLines='1'/>
It seems therefore quite challenging to have a "detailed connectivity
 matrix" that provides accurate, scalable and updated information to
 allow the client's PCE to take optimal decisions by its own.  <vspace blankLines='1'/>
Considering the example in <xref target="poi-multi-path"/> with the approach defined in this
 document, the client, when it needs to set up an end-to-end path, it
 can request the Optical Domain Controller to compute a set of optimal
 paths (e.g., for VP1-VP4 and VP2-VP5) and take decisions based on the
 information received:</t>
  <t>When setting up a 5 Gb/s path between routers R1 and R2, the
Optical Domain Controller may report only the VP1-VP4 path as the
only feasible path: the Packet/Optical Coordinator can
successfully set up the end-to-end path passing though this
optical path;</t>
  <t>When setting up a 1 Gb/s path between routers R1 and R2, the
Optical Domain Controller (knowing that the path requires only 1
Gb/s) can report both the VP1-VP4 path, with cost 50, and the VP2-
VP5 path, with cost 65. The Packet/Optical Coordinator can then
compute the optimal path which is passing thought the VP1-VP4 sub-
path (with cost 50) within the optical domain.</t>
</list></t>

</section>
<section anchor="topo-abstraction"><name>TE topology abstraction</name>

<t>Using the TE topology model, as defined in <xref target="RFC8795"/>, the underlying
   controller can export to its client an abstract TE topology, composed
   by a set of TE nodes and TE links, representing the abstract view of
   the topology under its control.</t>

<t>For example, in the multi-domain TE network use case, described in
   <xref target="md-uc"/>, the TE Domain Controller 1 can export a TE topology
   encompassing the TE nodes A, B, C and D and the TE links
   interconnecting them. In a similar way, the TE Domain Controller 2
   can export a TE topology encompassing the TE nodes E, F, G and H and
   the TE links interconnecting them.</t>

<t>In this example, for simplicity reasons, each abstract TE node maps
   with each physical node, but this is not necessary.</t>

<t>In order to set up a multi-domain TE path (e.g., between nodes A and
   H), the Multi-Domain Controller can compute by its own an optimal
   end-to-end path based on the abstract TE topology information
   provided by the domain controllers. For example:</t>

<t><list style="symbols">
  <t>Multi-Domain Controller can compute, based on its own TED data,
the optimal multi-domain path being A-B-C-E-G-H, and then request
the TE Domain Controllers to set up the A-B-C and E-G-H intra-
domain paths</t>
  <t>But, during path set-up, the TE Domain Controller may find out
that A-B-C intra-domain path is not feasible (as discussed in
<xref target="md-uc"/>, in optical networks it is typical to have some paths
not being feasible due to optical constraints that are known only
by the Optical Domain Controller), while only the path A-B-D is
feasible</t>
  <t>So what the Multi-Domain Controller has computed is not good and
it needs to re-start the path computation from scratch  <vspace blankLines='1'/>
As discussed in <xref target="topo-aggregation"/>, providing more extensive abstract
information from the TE Domain Controllers to the Multi-Domain
Controller may lead to scalability problems.  <vspace blankLines='1'/>
In a sense this is similar to the problem of routing and wavelength
assignment within an optical domain. It is possible to do first
routing (step 1) and then wavelength assignment (step 2), but the
chances of ending up with a good path is low. Alternatively, it is
possible to do combined routing and wavelength assignment, which is
known to be a more optimal and effective way for optical path set-up.
Similarly, it is possible to first compute an abstract end-to-end
path within the Multi-Domain Controller (step 1) and then compute an
intra-domain path within each optical domain (step 2), but there are
more chances not to find a path or to get a suboptimal path than by
performing multiple per-domain path computations and then stitching
them together.</t>
</list></t>

</section>
<section anchor="topo-pc-complement"><name>Complementary use of the TE topology</name>

<t>As discussed in <xref target="md-uc"/>, there are some scalability issues with
   path computation requests in a multi-domain TE network with many TE
   domains, in terms of the number of requests to send to the TE Domain
   Controllers. It would therefore be worthwhile using the abstract TE
   topology information provided by the TE Domain Controllers to limit
   the number of requests.</t>

<t>An example can be described considering the multi-domain abstract TE
   topology shown in <xref target="fig-topo-many-domains"/>. In this example, an end-to-end TE path
   between domains A and F needs to be set up. The transit TE domain
   should be selected between domains B, C, D and E.</t>

<figure title="Multi-domain with many domains (Topology information)" anchor="fig-topo-many-domains"><artwork type="ascii-art" name="many-domains-topology.txt"><![CDATA[
                          .........B.........
                          : _ _ _ _ _ _ _ _ :
                          :/               \:
                      +---O  NOT FEASIBLE   O---+
                cost=5|   :                 :   |
    ......A......     |   :.................:   |     ......F......
    :           :     |                         |     :           :
    :           O-----+   .........C.........   +-----O           :
    :           :         : /-------------\ :         :           :
    :           :         :/               \:         :           :
    :  cost<=20 O---------O   cost <= 30    O---------O cost<=20  :
    :          /: cost=5  :                 : cost=5  :\          :
    :  /------/ :         :.................:         : \------\  :
    : /         :                                     :         \ :
    :/ cost<=25 :         .........D.........         : cost<=25 \:
    O-----------O-------+ : /-------------\ : +-------O-----------O
    :\          : cost=5| :/               \: |cost=5 :          /:
    : \         :       +-O   cost <= 30    O-+       :         / :
    :  \------\ :         :                 :         : /------/  :
    : cost>=30 \:         :.................:         :/ cost>=30 :
    :           O-----+                         +-----O           :
    :...........:     |   .........E.........   |     :...........:
                      |   : /-------------\ :   |
                cost=5|   :/               \:   |cost=5
                      +---O   cost >= 30    O---+
                          :                 :
                          :.................:
]]></artwork></figure>

<t>The actual cost of each intra-domain path is not known a priori from
   the abstract topology information. The Multi-Domain Controller only
   knows, from the TE topology provided by the underlying domain
   controllers, the feasibility of some intra-domain paths and some
   upper-bound and/or lower-bound cost information. With this
   information, together with the cost of inter-domain links, the Multi-
   Domain Controller can understand by its own that:</t>

<t><list style="symbols">
  <t>Domain B cannot be selected as the path connecting domains A and F
is not feasible;</t>
  <t>Domain E cannot be selected as a transit domain since it is known
from the abstract topology information provided by domain
controllers that the cost of the multi-domain path A-E-F (which is
100, in the best case) will be always be higher than the cost of
the multi-domain paths A-D-F (which is 90, in the worst case) and
A-C-F (which is 80, in the worst case).  <vspace blankLines='1'/>
Therefore, the Multi-Domain Controller can understand by its own that
 the optimal multi-domain path could be either A-D-F or A-C-F but it
 cannot know which one of the two possible option actually provides
 the optimal end-to-end path.  <vspace blankLines='1'/>
The Multi-Domain Controller can therefore request path computation
 only to the TE Domain Controllers A, D, C and F (and not to all the
 possible TE Domain Controllers).</t>
</list></t>

<figure title="Multi-domain with many domains (Path Computation information)" anchor="fig-pc-many-domains"><artwork type="ascii-art" name="many-domain-path-computation.txt"><![CDATA[
                          .........B.........
                          :                 :
                      +---O                 O---+
    ......A......     |   :.................:   |     ......F......
    :           :     |                         |     :           :
    :           O-----+   .........C.........   +-----O           :
    :           :         : /-------------\ :         :           :
    :           :         :/               \:         :           :
    :  cost=15  O---------O    cost = 25    O---------O  cost=10  :
    :          /: cost=5  :                 : cost=5  :\          :
    :  /------/ :         :.................:         : \------\  :
    : /         :                                     :         \ :
    :/ cost=10  :         .........D.........         : cost=15  \:
    O-----------O-------+ : /-------------\ : +-------O-----------O
    :           : cost=5| :/               \: |cost=5 :           :
    :           :       +-O    cost = 15    O-+       :           :
    :           :         :                 :         :           :
    :           :         :.................:         :           :
    :           O-----+                         +-----O           :
    :...........:     |   .........E.........   |     :...........:
                      |   :                 :   |
                      +---O                 O---+
                          :.................:
]]></artwork></figure>

<t>Based on these requests, the Multi-Domain Controller can know the
   actual cost of each intra-domain paths which belongs to potential
   optimal end-to-end paths, as shown in <xref target="fig-pc-many-domains"/>, and then compute the
   optimal end-to-end path (e.g., A-D-F, having total cost of 50,
   instead of A-C-F having a total cost of 70).</t>

</section>
</section>
<section anchor="rpc-motivation"><name>Path Computation RPC</name>

<t>The TE tunnel YANG data model, defined in <xref target="I-D.ietf-teas-yang-te"/>, can support
   the need to request path computation, as described in section 5.1.2
   of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>This solution is stateful since the state of each created "compute-
   only" TE tunnel path needs to be maintained, in the YANG datastores
   (at least in the running datastore and operational datastore), and
   updated, when underlying network conditions change.</t>

<t>The RPC mechanism allows requesting path computation using a simple
   atomic operation, without creating any state in the YANG datastores,
   and it is the natural option/choice, especially with stateless PCE.</t>

<t>It is very useful to provide both the options of using an RPC as well
   as of setting up TE tunnel paths in "compute-only" mode. It is
   suggested to use the RPC as much as possible and to rely on
   "compute-only" TE tunnel paths, when really needed.</t>

<t>Using the RPC solution would imply that the underlying controller
   (e.g., a PNC) computes a path twice during the process to set up an
   LSP: at time T1, when its client (e.g., an MDSC) sends a path
   computation RPC request to it, and later, at time T2, when the same
   client (MDSC) creates a TE tunnel requesting the set-up of the LSP.
   The underlying assumption is that, if network conditions have not
   changed, the same path that has been computed at time T1 is also
   computed at time T2 by the underlying controller (e.g. PNC) and
   therefore the path that is set up at time T2 is exactly the same path
   that has been computed at time T1.</t>

<t>However, since the operation is stateless, there is no guarantee that
   the returned path would still be available when path set-up is
   requested: this does not cause major issues when the time between
   path computation and path set-up is short (especially if compared
   with the time that would be needed to update the information of a
   very detailed connectivity matrix).</t>

<t>In most of the cases, there is even no need to guarantee that the
   path that has been set up is the exactly same as the path that has
   been returned by path computation, especially if it has the same or
   even better metrics. Depending on the abstraction level applied by
   the server, the client may also not know the actual computed path.</t>

<t>The most important requirement is that the required global objectives
   (e.g., multi-domain path metrics and constraints) are met. For this
   reason a path verification phase is always necessary to verify that
   the actual path that has been set up meets the global objectives (for
   example in a multi-domain network, the resulting end-to-end path
   meets the required end-to-end metrics and constraints).</t>

<t>In most of the cases, even if the path being set up is not exactly
   the same as the path returned by path computation, its metrics and
   constraints are "good enough" and the path verification passes
   successfully. In the few corner cases where the path verification
   fails, it is possible repeat the whole process (path computation,
   path set-up and path verification).</t>

<t>In case it is required to set up at T2 exactly the same path computed
   at T1, the RPC solution should not be used and, instead, a "compute-
   only" TE tunnel path should be set up, allowing also notifications in
   case the computed path has been changed.</t>

<t>In this case, at time T1, the client (MDSC) creates a TE tunnel in a
   compute-only mode in the running datastore and later, at time T2,
   changes the configuration of that TE tunnel (not to be any more in a
   compute-only mode) to trigger the set-up of the LSP over the path
   which have been computed at time T1 and reported in the operational
   datastore.</t>

<t>It is worth noting that also using the "compute-only" TE tunnel path,
   although increasing the likelihood that the computed path is
   available at path set-up, does not guarantee that because
   notifications may not be reliable or delivered on time. Path
   verification is needed also in this case.</t>

<t>The solution based on "compute-only" TE tunnel path has also the
   following drawbacks:</t>

<t><list style="symbols">
  <t>Several messages required for any path computation</t>
  <t>Requires persistent storage in the underlying controller</t>
  <t>Need for garbage collection for stranded paths</t>
  <t>Process burden to detect changes on the computed paths in order to
provide notifications update</t>
</list></t>

<section anchor="temp-state"><name>Temporary reporting of the computed path state</name>

<t>This section describes an optional extension to the stateless
   behavior of the path computation RPC, where the underlying
   controller, after having received a path computation RPC request,
   maintains some "transient state" associated with the computed path,
   allowing the client to request the set-up of exactly that path, if
   still available.</t>

<t>This is similar to the "compute-only" TE tunnel path solution but, to
   avoid the drawbacks of the stateful approach, is leveraging the path
   computation RPC and the separation between configuration and
   operational datastore, as defined in the NMDA architecture <xref target="RFC8342"/>.</t>

<t>The underlying controller, after having computed a path, as requested
   by a path computation RPC, also creates a TE tunnel instance within
   the operational datastore, to store that computed path. This would be
   similar to a "compute-only" TE tunnel path, with the only difference
   that there is no associated TE tunnel instance within the running
   datastore.</t>

<t>Since the underlying controller stores in the operational datastore
   the computed path based on an abstract topology it exposes, it also
   remembers, internally, which is the actual native path (physical
   path), within its native topology (physical topology), associated
   with that compute-only TE tunnel instance.</t>

<t>Afterwards, the client (e.g., MDSC) can request the set-up of that
   specific path by creating a TE tunnel instance (not in compute-only
   mode) in the running datastore using the same tunnel-name of
   the existing TE tunnel in the operational datastore: this will
   trigger the underlying controller to set up that path, if still
   available.</t>

<t>There are still cases where the path being set up is not exactly the
   same as the path that has been computed:</t>

<t><list style="symbols">
  <t>When the tunnel is configured with path constraints which are not
compatible with the computed path;</t>
  <t>When the tunnel set-up is requested after the resources of the
computed path are no longer available;</t>
  <t>When the tunnel set-up is requested after the computed path is no
longer known (e.g. due to a server reboot) by the underlying
controller.  <vspace blankLines='1'/>
In all these cases, the underlying controller should compute and set
 up a new path.  <vspace blankLines='1'/>
Therefore the "path verification" phase, as described in <xref target="rpc-motivation"/>
 above, is always needed to check that the path that has been set up
 is still "good enough".  <vspace blankLines='1'/>
Since this new approach is not completely stateless, garbage
 collection is implemented using a timeout that, when it expires,
 triggers the removal of the computed path from the operational
 datastore. This operation is fully controlled by the underlying
 controller without the need for any action to be taken by the client
 that is not able to act on the operational datastore. The default
 value of this timeout is 10 minutes but a different value may be
 configured by the client.  <vspace blankLines='1'/>
In addition, it is possible for the client to tag each path
 computation request with a transaction-id allowing for a faster
 removal of all the paths associated with a transaction-id, without
 waiting for their timers to expire.  <vspace blankLines='1'/>
The underlying controller can remove from the operational datastore
 all the paths computed with a given transaction-id which have not
 been set up either when it receives a Path Delete RPC request for
 that transaction-id or, automatically, right after the set-up up of a
 path that has been previously computed with that transaction-id.  <vspace blankLines='1'/>
This possibility is useful when multiple paths are computed but, at
 most, only one is set up (e.g., in multi-domain path computation
 scenario scenarios). After the selected path has been set up (e.g, in
 one domain during multi-domain path set-up), all the other
 alternative computed paths can be automatically deleted by the
 underlying controller (since no longer needed). The client can also
 request, using the Path Delete RPC request, the underlying controller
 to remove all the computed paths, if none of them is going to be set
 up (e.g., in a transit domain not being selected by multi-domain path
 computation and so not being automatically deleted).  <vspace blankLines='1'/>
This approach is complimentary and not alternative to the timer which
 is always needed to avoid stranded computed paths being stored in the
 operational datastore when no path is set up and no explicit Path
 Delete RPC request is received.</t>
</list></t>

</section>
</section>
</section>
<section anchor="path-computation-and-optimization-for-multiple-paths"><name>Path computation and optimization for multiple paths</name>

<t>There are use cases, where it is advantageous to request path
   computation for a set of paths, through a network or through a
   network domain, using a single request <xref target="RFC5440"/>.</t>

<t>In this case, sending a single request for multiple path
   computations, instead of sending multiple requests for each path
   computation, would reduce the protocol overhead and it would consume
   less resources (e.g., threads in the client and server).</t>

<t>In the context of a typical multi-domain TE network, there could
   multiple choices for the ingress/egress points of a domain and the
   Multi-Domain Controller needs to request path computation between all
   the ingress/egress pairs to select the best pair. For example, in the
   example of <xref target="md-uc"/>, the Multi-Domain Controller needs to request
   the TE Network Controller 1 to compute the A-C and the A-D paths and
   to the TE Network Controller 2 to compute the E-H and the F-H paths.</t>

<t>It is also possible that the Multi-Domain Controller receives a
   request to set up a group of multiple end to end connections. The
   Multi-Domain Controller needs to request each TE domain Controller to
   compute multiple paths, one (or more) for each end to end connection.</t>

<t>There are also scenarios where it can be needed to request path
   computation for a set of paths in a synchronized fashion.</t>

<t>One example could be computing multiple diverse paths. Computing a
   set of diverse paths in an unsynchronized fashion, leads to the
   possibility of not being able to satisfy the diversity requirement.
   In this case, it is preferable to compute a sub-optimal primary path
   for which a diversely routed secondary path exists.</t>

<t>There are also scenarios where it is needed to request optimizing a
   set of paths using objective functions that apply to the whole set of
   paths, see <xref target="RFC5541"/>, e.g. to minimize the sum of the costs of all
   the computed paths in the set.</t>

</section>
<section anchor="yang-data-model-for-requesting-path-computation"><name>YANG data model for requesting Path Computation</name>

<t>This document define a YANG RPC to request path computation as an
   "augmentation" of tunnel-rpc, defined in <xref target="I-D.ietf-teas-yang-te"/>. This model
   provides the RPC input attributes that are needed to request path
   computation and the RPC output attributes that are needed to report
   the computed paths.</t>

<figure><artwork type="ascii-art" name="overview.txt"><![CDATA[
     augment /te:tunnels-path-compute/te:input/te:path-compute-info:
       +-- path-request* [request-id]
       |  +-- request-id                            uint32
       |  ...........

     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
          |     ...........
]]></artwork></figure>

<t>This model extensively re-uses the grouping defined in <xref target="I-D.ietf-teas-yang-te"/>
   and <xref target="RFC8776"/> to ensure maximal syntax and semantics commonality.</t>

<t>This YANG data model allows one RPC to include multiple path
   requests, each path request being identified by a request-id.
   Therefore, one RPC can return multiple responses, one for each path
   request, being identified by a response-id equal to the corresponding
   request-id. Each response reports one or more computed paths, as
   requested by the k-requested-paths attribute. By default, each
   response reports one computed path.</t>

<section anchor="synchronization-of-multiple-path-computation-requests"><name>Synchronization of multiple path computation requests</name>

<t>The YANG data model permits the synchronization of a set of multiple
   path requests (identified by specific request-id) all related to a
   "svec" container emulating the syntax of the Synchronization VECtor
   (SVEC) PCEP object, defined in <xref target="RFC5440"/>.</t>

<figure><artwork type="ascii-art" name="synchronization.txt"><![CDATA[
       +-- synchronization* []
          +-- svec
          |  +-- relaxable?           boolean
          |  +-- disjointness?        te-path-disjointness
          |  +-- request-id-number*   uint32
          +-- svec-constraints
          |  +-- path-metric-bound* [metric-type]
          |     +-- metric-type    identityref
          |     +-- upper-bound?   uint64
          +-- path-srlgs-lists
          |  +-- path-srlgs-list* [usage]
          |     +-- usage     identityref
          |     +-- values*   srlg
          +-- path-srlgs-names
          |  +-- path-srlgs-name* [usage]
          |     +-- usage    identityref
          |     +-- names*   string
          +-- exclude-objects
          |  +-- excludes* []
          |     +-- (type)?
          |        +--:(numbered-node-hop)
          |        |  +-- numbered-node-hop
          |        |     +-- node-id     te-node-id
          |        |     +-- hop-type?   te-hop-type
          |        +--:(numbered-link-hop)
          |        |  +-- numbered-link-hop
          |        |     +-- link-tp-id    te-tp-id
          |        |     +-- hop-type?     te-hop-type
          |        |     +-- direction?    te-link-direction
          |        +--:(unnumbered-link-hop)
          |        |  +-- unnumbered-link-hop
          |        |     +-- link-tp-id    te-tp-id
          |        |     +-- node-id       te-node-id
          |        |     +-- hop-type?     te-hop-type
          |        |     +-- direction?    te-link-direction
          |        +--:(as-number)
          |        |  +-- as-number-hop
          |        |     +-- as-number    inet:as-number
          |        |     +-- hop-type?    te-hop-type
          |        +--:(label)
          |           +-- label-hop
          |              +-- te-label
          |                 +-- (technology)?
          |                 |  +--:(generic)
          |                 |     +-- generic?
          |                 |             rt-types:generalized-label
          |                 +-- direction?       te-label-direction
          +-- optimizations
             +-- (algorithm)?
                +--:(metric) {te-types:path-optimization-metric}?
                |  +-- optimization-metric* [metric-type]
                |     +-- metric-type    identityref
                |     +-- weight?        uint8
                +--:(objective-function)
                         {te-types:path-optimization-objective-
   function}?
                   +-- objective-function
                      +-- objective-function-type?   identityref
]]></artwork></figure>

<t>The model, in addition to the metric types, defined in <xref target="RFC8776"/>,
   which can be applied to each individual path request, supports also
   additional metric types, which apply to a set of synchronized
   requests, as referenced in <xref target="RFC5541"/>. These additional metric types
   are defined by the following YANG identities:</t>

<t><list style="symbols">
  <t>svec-metric-type: base YANG identity from which cumulative metric
types identities are derived.</t>
  <t>svec-metric-cumul-te: cumulative TE cost metric type, as defined
in <xref target="RFC5541"/>.</t>
  <t>svec-metric-cumul-igp: cumulative IGP cost metric type, as defined
in <xref target="RFC5541"/>.</t>
  <t>svec-metric-cumul-hop: cumulative Hop metric type, representing
the cumulative version of the Hop metric type defined in
<xref target="RFC8776"/>.</t>
  <t>svec-metric-aggregate-bandwidth-consumption: aggregate bandwidth
consumption metric type, as defined in <xref target="RFC5541"/>.</t>
  <t>svec-metric-load-of-the-most-loaded-link: load of the most loaded
link metric type, as defined in <xref target="RFC5541"/>.</t>
</list></t>

</section>
<section anchor="returned-metric-values"><name>Returned metric values</name>

<t>This YANG data model provides a way to return the values of the
   metrics computed by the path computation in the output of RPC,
   together with other important information (e.g. srlg, affinities,
   explicit route), emulating the syntax of the "C" flag of the "METRIC"
   PCEP object <xref target="RFC5440"/>:</t>

<figure><artwork type="ascii-art" name="returned-metrics.txt"><![CDATA[
          |     +--ro path-properties
          |        +--ro path-metric* [metric-type]
          |        |  +--ro metric-type           identityref
          |        |  +--ro accumulative-value?   uint64
          |        +--ro path-affinities-values
          |        |  +--ro path-affinities-value* [usage]
          |        |     +--ro usage    identityref
          |        |     +--ro value?   admin-groups
          |        +--ro path-affinity-names
          |        |  +--ro path-affinity-name* [usage]
          |        |     +--ro usage            identityref
          |        |     +--ro affinity-name* [name]
          |        |        +--ro name    string
          |        +--ro path-srlgs-lists
          |        |  +--ro path-srlgs-list* [usage]
          |        |     +--ro usage     identityref
          |        |     +--ro values*   srlg
          |        +--ro path-srlgs-names
          |        |  +--ro path-srlgs-name* [usage]
          |        |     +--ro usage    identityref
          |        |     +--ro names*   string
          |        +--ro path-route-objects
          |        ...........
          |        +--ro te-bandwidth
          |        |  +--ro (technology)?
          |        |     +--:(generic)
          |        |        +--ro generic?   te-bandwidth
          |        +--ro disjointness-type?
          |                te-types:te-path-disjointness
]]></artwork></figure>

<t>It also allows the client to request which information (metrics, srlg
   and/or affinities) should be returned:</t>

<figure><artwork type="ascii-art" name="requested-metrics.txt"><![CDATA[
       |  +-- request-id                            uint32
       |  ...........
       |  +-- requested-metrics* [metric-type]
       |  |  +-- metric-type    identityref
       |  +-- return-srlgs?                         boolean
       |  +-- return-affinities?                    boolean
       |  ...........
]]></artwork></figure>

<t>This feature is essential for path computation in a multi-domain TE
   network as described in <xref target="md-uc"/>. In this case, the metrics
   returned by a path computation requested to a given underlying
   controller must be used by the client to compute the best end-to-end
   path. If they are missing, the client cannot compare different paths
   calculated by the underlying controllers and choose the best one for
   the optimal end-to-end (e2e) path.</t>

</section>
<section anchor="multiple-paths-requests-for-the-same-te-tunnel"><name>Multiple Paths Requests for the same TE tunnel</name>

<t>The YANG data model allows including multiple requests for different
   paths intended to be used within the same tunnel or within different
   tunnels.</t>

<t>When multiple requested paths are intended to be used within the same
   tunnel (e.g., requesting path computation for the primary and
   secondary paths of a protected tunnel), the set of attributes that
   are intended to be configured on per-tunnel basis rather than on per-
   path basis are common to all these path requests. These attributes
   includes both attributes which can be configured only a per-tunnel
   basis (e.g., tunnel-name, source/destination TTP, encoding and
   switching-type) as well attributes which can be configured both on a
   per-tunnel and on a per-path basis (e.g., the te-bandwidth or the
   associations).</t>

<t>Therefore, a tunnel-attributes list is defined, within the path
   computation request RPC:</t>

<figure><artwork type="ascii-art" name="tunnel-attributes-list.txt"><![CDATA[
       +-- tunnel-attributes* [tunnel-name]
       |  +-- tunnel-name               string
       |  +-- encoding?                 identityref
       |  +-- switching-type?           identityref
       |  +-- source?                   te-types:te-node-id
       |  +-- destination?              te-types:te-node-id
       |  +-- src-tunnel-tp-id?         binary
       |  +-- dst-tunnel-tp-id?         binary
       |  +-- bidirectional?            boolean
       |  +-- association-objects
       |  ...........
       |  +-- protection-type?          identityref
       |  +-- restoration-type?         identityref
       |  +-- restoration-scheme?       identityref
       |  +-- te-topology-identifier
       |  |  +-- provider-id?   te-global-id
       |  |  +-- client-id?     te-global-id
       |  |  +-- topology-id?   te-topology-id
       |  +-- te-bandwidth
       |  |  +-- (technology)?
       |  |     +--:(generic)
       |  |        +-- generic?   te-bandwidth
       |  +-- link-protection?          identityref
       |  +-- setup-priority?           uint8
       |  +-- hold-priority?            uint8
       |  +-- signaling-type?           identityref
       |  +-- hierarchy
       |     +-- dependency-tunnels
       |     ............ 
       |     +-- hierarchical-link
       |     ............ 
]]></artwork></figure>

<t>The path requests that are intended to be used within the same tunnel
   should reference the same entry in the tunnel-attributes list. This
   allows:</t>

<t><list style="symbols">
  <t>avoiding repeating the same set of per-tunnel parameters on
multiple requested paths;</t>
  <t>the server to understand what attributes are intended to be
configured on a per-tunnel basis (e.g., the te-bandwidth
configured in the tunnel-attributes) and what attributes are
intended to be configured on a per-path basis(e.g., the te-
bandwidth configured in the path-request). This could be useful
especially when the server also creates a TE tunnel instance
within the operational datastore to report the computed paths, as
described in <xref target="temp-state"/>: in this case, the tunnel-name is also
used as the suggested name for that TE tunnel instance.  <vspace blankLines='1'/>
The YANG data model allows also including requests for paths intended
 to modify existing tunnels (e.g., adding a protection path for an
 existing un-protected tunnel). In this case, the per-tunnel
 attributes are already provided in an existing TE tunnel instance and
 do not need to be re-configured in the path computation request RPC.
 Therefore, these requests should reference an existing TE tunnel
 instance.  <vspace blankLines='1'/>
It is also possible to request computing paths without indicating in
 which tunnel they are intended to be used (e.g., in case of an
 unprotected tunnel). In this case, the per-tunnel attributes could be
 provided together with the per-path attributes in the path request,
 without using the tunnel-attributes list.  <vspace blankLines='1'/>
The choices below are defined to distinguish the cases above:</t>
  <t>whether the per-tunnel attributes are configured by reference
(providing a leafref), to:  <list style="symbols">
      <t>either a TE tunnel instance, if it exists;</t>
      <t>or to an entry of the tunnel-attributes list, if the TE tunnel
instance does not exist;</t>
    </list></t>
  <t>or by value, providing the set of tunnel attributes within the
path request:</t>
</list></t>

<figure><artwork type="ascii-art" name="tunnel-attributes.txt"><![CDATA[
       |  +-- (tunnel-attributes)?
       |  |  +--:(reference)
       |  |  |  +-- tunnel-reference
       |  |  |     +-- (tunnel-exist)?
       |  |  |     |  +--:(tunnel-ref)
       |  |  |     |  |  +-- tunnel-ref                te:tunnel-ref
       |  |  |     |  +--:(tunnel-attributes-ref)
       |  |  |     |     +-- tunnel-attributes-ref     leafref
       |  |  |     +-- path-name?                      string
       |  |  |     +-- (path-role)
       |  |  |        +--:(primary-path)
       |  |  |         ...........
       |  |  +--:(value)
       |  |     +-- tunnel-name?                    string
       |  |     ...........
       |  |     +-- encoding?                       identityref
       |  |     +-- switching-type?                 identityref
       |  |     ...........
]]></artwork></figure>

<section anchor="tunnel-attributes-specified-by-value"><name>Tunnel attributes specified by value</name>

<t>The (value) case provides the set of attributes that are configured
   only on per-tunnel basis (e.g., tunnel-name, source/destination TTP,
   encoding and switching-type).</t>

<t>In this case, it is assumed that the requested path will be the only
   path within a tunnel.</t>

<t>If the requested path is a transit segment of a multi-domain end-to-
   end path, it can be of any type (primary, secondary, reverse-primary
   or reverse-secondary), as specified by the (path-role) choice:</t>

<figure><artwork type="ascii-art" name="tunnel-by-value.txt"><![CDATA[
       |  |     +-- (path-role)?
       |  |     |  +--:(primary-path)
       |  |     |  +--:(secondary-path)
       |  |     |  |  +-- secondary-path!
       |  |     |  |     +-- primary-path-name?   string
       |  |     |  +--:(primary-reverse-path)
       |  |     |  |  +-- primary-reverse-path!
       |  |     |  |     +-- primary-path-name?   string
       |  |     |  +--:(secondary-reverse-path)
       |  |     |     +-- secondary-reverse-path
       |  |     |        +-- primary-path-name?           string
       |  |     |        +-- primary-reverse-path-name?   string
       |  |     ...........
]]></artwork></figure>

<t>In all the other cases, the requested path can only be a primary
   path.</t>

<t>The secondary-path, the primary-reverse-path and the secondary-
   reverse-path are presence container used to indicate the role of the
   path: by default, the path is assumed to be a primary path.</t>

<t>They optionally can contain the name of the primary-path under which
   the requested path could be associated within the YANG tree structure
   defined in <xref target="I-D.ietf-teas-yang-te"/>, which could be useful when the server also
   creates a TE tunnel instance within the operational datastore to
   report the computed paths, as described in <xref target="temp-state"/>: in this
   case, the tunnel-name and the path names are also used as the
   suggested name for that TE tunnel and path instances.</t>

</section>
<section anchor="tunnel-attributes-specified-by-reference"><name>Tunnel attributes specified by reference</name>

<t>The (reference) case provides the information needed to associate
   multiple path requests that are intended to be used within the same
   tunnel.</t>

<t>In order to indicate the role of the path being requested within the
   intended tunnel (e.g., primary or secondary path), the (path-role)
   choice is defined:</t>

<figure><artwork type="ascii-art" name="tunnel-by-reference.txt"><![CDATA[
       |  |  |     +-- (path-role)
       |  |  |        +--:(primary-path)
       |  |  |        |  +-- primary-path!
       |  |  |        |     ...........
       |  |  |        +--:(secondary-path)
       |  |  |        |  +-- secondary-path
       |  |  |        |     ...........
       |  |  |        +--:(primary-reverse-path)
       |  |  |        |  +-- primary-reverse-path
       |  |  |        |     ...........
       |  |  |        +--:(secondary-reverse-path)
       |  |  |           +-- secondary-reverse-path
       |  |  |              +-- preference?                 uint8
       |  |  |              +-- protection-type?            identityref
       |  |  |              +-- restoration-type?           identityref
       |  |  |              +-- restoration-scheme?         identityref
       |  |  |              +-- primary-reverse-path-ref* []
       |  |  |                 +-- (primary-reverse-path-exist)?
       |  |  |                    +--:(path-ref)
       |  |  |                    |  +-- primary-path-ref    leafref
       |  |  |                    +--:(path-request-ref)
       |  |  |                       +-- path-request-ref    leafref
]]></artwork></figure>

<t>The primary-path is a presence container used to indicate that the
   requested path is intended to be used as a primary path. It can also
   contain some attributes which are configured only on primary paths
   (e.g., the k-requested-paths).</t>

<t>The secondary-path container indicates that the requested path is
   intended to be used as a secondary path and it contains at least
   references to one or more primary paths which can use it as a
   candidate secondary path:</t>

<figure><artwork type="ascii-art" name="secondary-path.txt"><![CDATA[
       |  |  |        |  +-- secondary-path
       |  |  |        |     ...........
       |  |  |        |     +-- primary-path-ref* []
       |  |  |        |        +-- (primary-path-exist)?
       |  |  |        |           +--:(path-ref)
       |  |  |        |           |  +-- primary-path-ref    leafref
       |  |  |        |           +--:(path-request-ref)
       |  |  |        |              +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested secondary path can reference any requested primary paths,
   and, in case they are intended to be used within an existing TE
   tunnel, it could also reference any existing primary-paths.</t>

<t>The secondary-path container can also contain some attributes which
   are configured only on secondary paths (e.g., the protection-type).</t>

<t>The primary-reverse-path container indicates that the requested path
   is intended to be used as a primary reverse path and it contains only
   the reference to the primary path which is intended to use it as a
   reverse path:</t>

<figure><artwork type="ascii-art" name="primary-reverse-path.txt"><![CDATA[
       |  |  |        |  +-- primary-reverse-path
       |  |  |        |     +-- (primary-path-exist)?
       |  |  |        |        +--:(path-ref)
       |  |  |        |        |  +-- primary-path-ref    leafref
       |  |  |        |        +--:(path-request-ref)
       |  |  |        |           +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested primary reverse path can reference either a requested
   primary path, or, in case it is intended to be used within an
   existing TE tunnel, an existing primary-path.</t>

<t>The secondary-reverse-path container indicates that the requested
   path is intended to be used as a secondary reverse path and it
   contains at least references to one or more primary paths, whose
   primary reverse path can use it as a candidate secondary reverse
   path:</t>

<figure><artwork type="ascii-art" name="secondary-reverse-path.txt"><![CDATA[
       |  |  |           +-- secondary-reverse-path
       |  |  |              ...........
       |  |  |              +-- primary-reverse-path-ref* []
       |  |  |                 +-- (primary-reverse-path-exist)?
       |  |  |                    +--:(path-ref)
       |  |  |                    |  +-- primary-path-ref    leafref
       |  |  |                    +--:(path-request-ref)
       |  |  |                       +-- path-request-ref    leafref
]]></artwork></figure>

<t>A requested secondary reverse path can reference any requested
   primary paths, and, in case they are intended to be used within an
   existing TE tunnel, it could reference also existing primary-paths.</t>

<t>The secondary-reverse-path container can also contain some attributes
   which are configured only on secondary reverse paths (e.g., the
   protection-type).</t>

<t>In case the requested path is a transit segment of a multi-domain
   end-to-end path, the primary-path may not be needed to be
   setup/computed. However, the request for path computation of a
   secondary-path or a primary-reverse or of a secondary-reverse-path
   requires that the primary-path exists or it is requested within the
   same RPC request. In the latter case, the path request for the
   primary-path should have an empty ERO to indicate to the server that
   path computation is not requested and no path properties will
   therefore be returned in the RPC response.</t>

</section>
</section>
<section anchor="multi-layer-path-computation"><name>Multi-Layer Path Computation</name>

<t>The models supports requesting multi-layer path computation following
   the same approach based on dependency tunnels, as defined in <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>The tunnel-attributes of a given client-layer path request can
   reference server-layer TE tunnels which can already exist in the YANG
   datastore or be specified in the tunnel-attributes list, within the
   same RPC request:</t>

<figure><artwork type="ascii-art" name="dependency-tunnels.txt"><![CDATA[
       |     +-- dependency-tunnels
       |     |  +-- dependency-tunnel* [name]
       |     |  |  +-- name              -> /te:te/tunnels/tunnel/name
       |     |  |  +-- encoding?         identityref
       |     |  |  +-- switching-type?   identityref
       |     |  +-- dependency-tunnel-attributes* [name]
       |     |     +-- name              leafref
       |     |     +-- encoding?         identityref
       |     |     +-- switching-type?   identityref
]]></artwork></figure>

<t>In a similar way as in <xref target="I-D.ietf-teas-yang-te"/>, the server-layer tunnel
   attributes should provide the information of what would be the
   dynamic link in the client layer topology supported by that tunnel,
   if instantiated:</t>

<figure><artwork type="ascii-art" name="hierarchical-link.txt"><![CDATA[
       |     +-- hierarchical-link
       |        +-- local-te-node-id?         te-types:te-node-id
       |        +-- local-te-link-tp-id?      te-types:te-tp-id
       |        +-- remote-te-node-id?        te-types:te-node-id
       |        +-- te-topology-identifier
       |           +-- provider-id?   te-global-id
       |           +-- client-id?     te-global-id
       |           +-- topology-id?   te-topology-id
]]></artwork></figure>

<t>It is worth noting that since path computation RPC is stateless, the
   dynamic hierarchical links configured for the server-layer tunnel
   attributes cannot be used for path computation of any client-layer
   path unless explicitly referenced in the dependency-tunnel-attributes
   list within the same RPC request.</t>

</section>
</section>
<section anchor="yang-data-model-for-te-path-computation"><name>YANG data model for TE path computation</name>

<section anchor="pc-tree"><name>Tree diagram</name>

<t><xref target="fig-pc-tree"/> below shows the tree diagram of the YANG data model defined
   in module ietf-te-path-computation.yang, defined in <xref target="pc-yang"/>.</t>

<figure title="TE path computation tree diagram" anchor="fig-pc-tree"><artwork type="ascii-art" name="ietf-te-path-computation.tree"><![CDATA[
module: ietf-te-path-computation

  augment /te:tunnels-path-compute/te:input/te:path-compute-info:
    +-- path-request* [request-id]
    |  +-- request-id                            uint32
    |  +-- (tunnel-attributes)?
    |  |  +--:(reference)
    |  |  |  +-- tunnel-reference
    |  |  |     +-- (tunnel-exist)?
    |  |  |     |  +--:(tunnel-ref)
    |  |  |     |  |  +-- tunnel-ref                te:tunnel-ref
    |  |  |     |  +--:(tunnel-attributes-ref)
    |  |  |     |     +-- tunnel-attributes-ref     leafref
    |  |  |     +-- path-name?                      string
    |  |  |     +-- (path-role)
    |  |  |        +--:(primary-path)
    |  |  |        |  +-- primary-path!
    |  |  |        |     +-- preference?          uint8
    |  |  |        |     +-- k-requested-paths?   uint8
    |  |  |        +--:(secondary-path)
    |  |  |        |  +-- secondary-path
    |  |  |        |     +-- 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-ref* []
    |  |  |                 +-- (primary-reverse-path-exist)?
    |  |  |                    +--:(path-ref)
    |  |  |                    |  +-- primary-path-ref    leafref
    |  |  |                    +--:(path-request-ref)
    |  |  |                       +-- path-request-ref    leafref
    |  |  +--:(value)
    |  |     +-- tunnel-name?                    string
    |  |     +-- path-name?                      string
    |  |     +-- (path-role)?
    |  |     |  +--:(primary-path)
    |  |     |  +--:(secondary-path)
    |  |     |  |  +-- secondary-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(primary-reverse-path)
    |  |     |  |  +-- primary-reverse-path!
    |  |     |  |     +-- primary-path-name?   string
    |  |     |  +--:(secondary-reverse-path)
    |  |     |     +-- secondary-reverse-path!
    |  |     |        +-- primary-path-name?           string
    |  |     |        +-- primary-reverse-path-name?   string
    |  |     +-- k-requested-paths?              uint8
    |  |     +-- encoding?                       identityref
    |  |     +-- switching-type?                 identityref
    |  |     +-- source?                         te-types:te-node-id
    |  |     +-- destination?                    te-types:te-node-id
    |  |     +-- src-tunnel-tp-id?               binary
    |  |     +-- dst-tunnel-tp-id?               binary
    |  |     +-- bidirectional?                  boolean
    |  |     +-- te-topology-identifier
    |  |        +-- provider-id?   te-global-id
    |  |        +-- client-id?     te-global-id
    |  |        +-- topology-id?   te-topology-id
    |  +-- association-objects
    |  |  +-- association-object* [association-key]
    |  |  |  +-- association-key    string
    |  |  |  +-- type?              identityref
    |  |  |  +-- id?                uint16
    |  |  |  +-- source
    |  |  |     +-- id?     te-gen-node-id
    |  |  |     +-- type?   enumeration
    |  |  +-- association-object-extended* [association-key]
    |  |     +-- association-key    string
    |  |     +-- type?              identityref
    |  |     +-- id?                uint16
    |  |     +-- source
    |  |     |  +-- id?     te-gen-node-id
    |  |     |  +-- type?   enumeration
    |  |     +-- global-source?     uint32
    |  |     +-- extended-id?       yang:hex-string
    |  +-- optimizations
    |  |  +-- (algorithm)?
    |  |     +--:(metric) {path-optimization-metric}?
    |  |     |  +-- optimization-metric* [metric-type]
    |  |     |  |  +-- metric-type                       identityref
    |  |     |  |  +-- weight?                           uint8
    |  |     |  |  +-- explicit-route-exclude-objects
    |  |     |  |  |  +-- route-object-exclude-object* [index]
    |  |     |  |  |     +-- index                        uint32
    |  |     |  |  |     +-- (type)?
    |  |     |  |  |        +--:(numbered-node-hop)
    |  |     |  |  |        |  +-- numbered-node-hop
    |  |     |  |  |        |     +-- node-id     te-node-id
    |  |     |  |  |        |     +-- hop-type?   te-hop-type
    |  |     |  |  |        +--:(numbered-link-hop)
    |  |     |  |  |        |  +-- numbered-link-hop
    |  |     |  |  |        |     +-- link-tp-id    te-tp-id
    |  |     |  |  |        |     +-- hop-type?     te-hop-type
    |  |     |  |  |        |     +-- direction?    te-link-direction
    |  |     |  |  |        +--:(unnumbered-link-hop)
    |  |     |  |  |        |  +-- unnumbered-link-hop
    |  |     |  |  |        |     +-- link-tp-id    te-tp-id
    |  |     |  |  |        |     +-- node-id       te-node-id
    |  |     |  |  |        |     +-- hop-type?     te-hop-type
    |  |     |  |  |        |     +-- direction?    te-link-direction
    |  |     |  |  |        +--:(as-number)
    |  |     |  |  |        |  +-- as-number-hop
    |  |     |  |  |        |     +-- as-number    inet:as-number
    |  |     |  |  |        |     +-- hop-type?    te-hop-type
    |  |     |  |  |        +--:(label)
    |  |     |  |  |        |  +-- label-hop
    |  |     |  |  |        |     +-- te-label
    |  |     |  |  |        |        +-- (technology)?
    |  |     |  |  |        |        |  +--:(generic)
    |  |     |  |  |        |        |     +-- generic?
    |  |     |  |  |        |        |             rt-types:generalized-label
    |  |     |  |  |        |        +-- direction?
    |  |     |  |  |        |                te-label-direction
    |  |     |  |  |        +--:(srlg)
    |  |     |  |  |           +-- srlg
    |  |     |  |  |              +-- srlg?   uint32
    |  |     |  |  +-- explicit-route-include-objects
    |  |     |  |     +-- route-object-include-object* [index]
    |  |     |  |        +-- index                        uint32
    |  |     |  |        +-- (type)?
    |  |     |  |           +--:(numbered-node-hop)
    |  |     |  |           |  +-- numbered-node-hop
    |  |     |  |           |     +-- node-id     te-node-id
    |  |     |  |           |     +-- hop-type?   te-hop-type
    |  |     |  |           +--:(numbered-link-hop)
    |  |     |  |           |  +-- numbered-link-hop
    |  |     |  |           |     +-- link-tp-id    te-tp-id
    |  |     |  |           |     +-- hop-type?     te-hop-type
    |  |     |  |           |     +-- direction?    te-link-direction
    |  |     |  |           +--:(unnumbered-link-hop)
    |  |     |  |           |  +-- unnumbered-link-hop
    |  |     |  |           |     +-- link-tp-id    te-tp-id
    |  |     |  |           |     +-- node-id       te-node-id
    |  |     |  |           |     +-- hop-type?     te-hop-type
    |  |     |  |           |     +-- direction?    te-link-direction
    |  |     |  |           +--:(as-number)
    |  |     |  |           |  +-- as-number-hop
    |  |     |  |           |     +-- as-number    inet:as-number
    |  |     |  |           |     +-- hop-type?    te-hop-type
    |  |     |  |           +--:(label)
    |  |     |  |              +-- label-hop
    |  |     |  |                 +-- te-label
    |  |     |  |                    +-- (technology)?
    |  |     |  |                    |  +--:(generic)
    |  |     |  |                    |     +-- generic?
    |  |     |  |                    |             rt-types:generalized-label
    |  |     |  |                    +-- direction?
    |  |     |  |                            te-label-direction
    |  |     |  +-- tiebreakers
    |  |     |     +-- tiebreaker* [tiebreaker-type]
    |  |     |        +-- tiebreaker-type    identityref
    |  |     +--:(objective-function)
    |  |              {path-optimization-objective-function}?
    |  |        +-- objective-function
    |  |           +-- objective-function-type?   identityref
    |  +-- named-path-constraint?                leafref
    |  |       {te-types:named-path-constraints}?
    |  +-- te-bandwidth
    |  |  +-- (technology)?
    |  |     +--:(generic)
    |  |        +-- generic?   te-bandwidth
    |  +-- link-protection?                      identityref
    |  +-- setup-priority?                       uint8
    |  +-- hold-priority?                        uint8
    |  +-- signaling-type?                       identityref
    |  +-- path-metric-bounds
    |  |  +-- path-metric-bound* [metric-type]
    |  |     +-- metric-type    identityref
    |  |     +-- upper-bound?   uint64
    |  +-- path-affinities-values
    |  |  +-- path-affinities-value* [usage]
    |  |     +-- usage    identityref
    |  |     +-- value?   admin-groups
    |  +-- path-affinity-names
    |  |  +-- path-affinity-name* [usage]
    |  |     +-- usage            identityref
    |  |     +-- affinity-name* [name]
    |  |        +-- name    string
    |  +-- path-srlgs-lists
    |  |  +-- path-srlgs-list* [usage]
    |  |     +-- usage     identityref
    |  |     +-- values*   srlg
    |  +-- path-srlgs-names
    |  |  +-- path-srlgs-name* [usage]
    |  |     +-- usage    identityref
    |  |     +-- names*   string
    |  +-- disjointness?                         te-path-disjointness
    |  +-- explicit-route-objects-always
    |  |  +-- route-object-exclude-always* [index]
    |  |  |  +-- index                        uint32
    |  |  |  +-- (type)?
    |  |  |     +--:(numbered-node-hop)
    |  |  |     |  +-- numbered-node-hop
    |  |  |     |     +-- node-id     te-node-id
    |  |  |     |     +-- hop-type?   te-hop-type
    |  |  |     +--:(numbered-link-hop)
    |  |  |     |  +-- numbered-link-hop
    |  |  |     |     +-- link-tp-id    te-tp-id
    |  |  |     |     +-- hop-type?     te-hop-type
    |  |  |     |     +-- direction?    te-link-direction
    |  |  |     +--:(unnumbered-link-hop)
    |  |  |     |  +-- unnumbered-link-hop
    |  |  |     |     +-- link-tp-id    te-tp-id
    |  |  |     |     +-- node-id       te-node-id
    |  |  |     |     +-- hop-type?     te-hop-type
    |  |  |     |     +-- direction?    te-link-direction
    |  |  |     +--:(as-number)
    |  |  |     |  +-- as-number-hop
    |  |  |     |     +-- as-number    inet:as-number
    |  |  |     |     +-- hop-type?    te-hop-type
    |  |  |     +--:(label)
    |  |  |        +-- label-hop
    |  |  |           +-- te-label
    |  |  |              +-- (technology)?
    |  |  |              |  +--:(generic)
    |  |  |              |     +-- generic?
    |  |  |              |             rt-types:generalized-label
    |  |  |              +-- direction?       te-label-direction
    |  |  +-- route-object-include-exclude* [index]
    |  |     +-- explicit-route-usage?        identityref
    |  |     +-- index                        uint32
    |  |     +-- (type)?
    |  |        +--:(numbered-node-hop)
    |  |        |  +-- numbered-node-hop
    |  |        |     +-- node-id     te-node-id
    |  |        |     +-- hop-type?   te-hop-type
    |  |        +--:(numbered-link-hop)
    |  |        |  +-- numbered-link-hop
    |  |        |     +-- link-tp-id    te-tp-id
    |  |        |     +-- hop-type?     te-hop-type
    |  |        |     +-- direction?    te-link-direction
    |  |        +--:(unnumbered-link-hop)
    |  |        |  +-- unnumbered-link-hop
    |  |        |     +-- link-tp-id    te-tp-id
    |  |        |     +-- node-id       te-node-id
    |  |        |     +-- hop-type?     te-hop-type
    |  |        |     +-- direction?    te-link-direction
    |  |        +--:(as-number)
    |  |        |  +-- as-number-hop
    |  |        |     +-- as-number    inet:as-number
    |  |        |     +-- hop-type?    te-hop-type
    |  |        +--:(label)
    |  |        |  +-- label-hop
    |  |        |     +-- te-label
    |  |        |        +-- (technology)?
    |  |        |        |  +--:(generic)
    |  |        |        |     +-- generic?
    |  |        |        |             rt-types:generalized-label
    |  |        |        +-- direction?       te-label-direction
    |  |        +--:(srlg)
    |  |           +-- srlg
    |  |              +-- srlg?   uint32
    |  +-- path-in-segment!
    |  |  +-- label-restrictions
    |  |     +-- label-restriction* [index]
    |  |        +-- restriction?    enumeration
    |  |        +-- index           uint32
    |  |        +-- label-start
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-end
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-step
    |  |        |  +-- (technology)?
    |  |        |     +--:(generic)
    |  |        |        +-- generic?   int32
    |  |        +-- range-bitmap?   yang:hex-string
    |  +-- path-out-segment!
    |  |  +-- label-restrictions
    |  |     +-- label-restriction* [index]
    |  |        +-- restriction?    enumeration
    |  |        +-- index           uint32
    |  |        +-- label-start
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-end
    |  |        |  +-- te-label
    |  |        |     +-- (technology)?
    |  |        |     |  +--:(generic)
    |  |        |     |     +-- generic?   rt-types:generalized-label
    |  |        |     +-- direction?       te-label-direction
    |  |        +-- label-step
    |  |        |  +-- (technology)?
    |  |        |     +--:(generic)
    |  |        |        +-- generic?   int32
    |  |        +-- range-bitmap?   yang:hex-string
    |  +-- requested-metrics* [metric-type]
    |  |  +-- metric-type    identityref
    |  +-- return-srlgs?                         boolean
    |  +-- return-affinities?                    boolean
    |  +-- requested-state!
    |     +-- timer?            uint16
    |     +-- transaction-id?   string
    +-- tunnel-attributes* [tunnel-name]
    |  +-- tunnel-name               string
    |  +-- encoding?                 identityref
    |  +-- switching-type?           identityref
    |  +-- source?                   te-types:te-node-id
    |  +-- destination?              te-types:te-node-id
    |  +-- src-tunnel-tp-id?         binary
    |  +-- dst-tunnel-tp-id?         binary
    |  +-- bidirectional?            boolean
    |  +-- association-objects
    |  |  +-- association-object* [association-key]
    |  |  |  +-- association-key    string
    |  |  |  +-- type?              identityref
    |  |  |  +-- id?                uint16
    |  |  |  +-- source
    |  |  |     +-- id?     te-gen-node-id
    |  |  |     +-- type?   enumeration
    |  |  +-- association-object-extended* [association-key]
    |  |     +-- association-key    string
    |  |     +-- type?              identityref
    |  |     +-- id?                uint16
    |  |     +-- source
    |  |     |  +-- id?     te-gen-node-id
    |  |     |  +-- type?   enumeration
    |  |     +-- global-source?     uint32
    |  |     +-- extended-id?       yang:hex-string
    |  +-- protection-type?          identityref
    |  +-- restoration-type?         identityref
    |  +-- restoration-scheme?       identityref
    |  +-- te-topology-identifier
    |  |  +-- provider-id?   te-global-id
    |  |  +-- client-id?     te-global-id
    |  |  +-- topology-id?   te-topology-id
    |  +-- te-bandwidth
    |  |  +-- (technology)?
    |  |     +--:(generic)
    |  |        +-- generic?   te-bandwidth
    |  +-- link-protection?          identityref
    |  +-- setup-priority?           uint8
    |  +-- hold-priority?            uint8
    |  +-- signaling-type?           identityref
    |  +-- hierarchy
    |     +-- dependency-tunnels
    |     |  +-- dependency-tunnel* [name]
    |     |  |  +-- name              -> /te:te/tunnels/tunnel/name
    |     |  |  +-- encoding?         identityref
    |     |  |  +-- switching-type?   identityref
    |     |  +-- dependency-tunnel-attributes* [name]
    |     |     +-- name              leafref
    |     |     +-- encoding?         identityref
    |     |     +-- switching-type?   identityref
    |     +-- hierarchical-link
    |        +-- local-te-node-id?         te-types:te-node-id
    |        +-- local-te-link-tp-id?      te-types:te-tp-id
    |        +-- remote-te-node-id?        te-types:te-node-id
    |        +-- te-topology-identifier
    |           +-- provider-id?   te-global-id
    |           +-- client-id?     te-global-id
    |           +-- topology-id?   te-topology-id
    +-- synchronization* []
       +-- svec
       |  +-- relaxable?           boolean
       |  +-- disjointness?        te-path-disjointness
       |  +-- request-id-number*   uint32
       +-- svec-constraints
       |  +-- path-metric-bound* [metric-type]
       |     +-- metric-type    identityref
       |     +-- upper-bound?   uint64
       +-- path-srlgs-lists
       |  +-- path-srlgs-list* [usage]
       |     +-- usage     identityref
       |     +-- values*   srlg
       +-- path-srlgs-names
       |  +-- path-srlgs-name* [usage]
       |     +-- usage    identityref
       |     +-- names*   string
       +-- exclude-objects
       |  +-- excludes* []
       |     +-- (type)?
       |        +--:(numbered-node-hop)
       |        |  +-- numbered-node-hop
       |        |     +-- node-id     te-node-id
       |        |     +-- hop-type?   te-hop-type
       |        +--:(numbered-link-hop)
       |        |  +-- numbered-link-hop
       |        |     +-- link-tp-id    te-tp-id
       |        |     +-- hop-type?     te-hop-type
       |        |     +-- direction?    te-link-direction
       |        +--:(unnumbered-link-hop)
       |        |  +-- unnumbered-link-hop
       |        |     +-- link-tp-id    te-tp-id
       |        |     +-- node-id       te-node-id
       |        |     +-- hop-type?     te-hop-type
       |        |     +-- direction?    te-link-direction
       |        +--:(as-number)
       |        |  +-- as-number-hop
       |        |     +-- as-number    inet:as-number
       |        |     +-- hop-type?    te-hop-type
       |        +--:(label)
       |           +-- label-hop
       |              +-- te-label
       |                 +-- (technology)?
       |                 |  +--:(generic)
       |                 |     +-- generic?
       |                 |             rt-types:generalized-label
       |                 +-- direction?       te-label-direction
       +-- optimizations
          +-- (algorithm)?
             +--:(metric) {te-types:path-optimization-metric}?
             |  +-- optimization-metric* [metric-type]
             |     +-- metric-type    identityref
             |     +-- weight?        uint8
             +--:(objective-function)
                      {te-types:path-optimization-objective-function}?
                +-- objective-function
                   +-- objective-function-type?   identityref
  augment /te:tunnels-path-compute/te:output/te:path-compute-result:
    +--ro response* [response-id]
       +--ro response-id                         uint32
       +--ro computed-paths-properties
       |  +--ro computed-path-properties* [k-index]
       |     +--ro k-index            uint8
       |     +--ro path-properties
       |        +--ro path-metric* [metric-type]
       |        |  +--ro metric-type           identityref
       |        |  +--ro accumulative-value?   uint64
       |        +--ro path-affinities-values
       |        |  +--ro path-affinities-value* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro value?   admin-groups
       |        +--ro path-affinity-names
       |        |  +--ro path-affinity-name* [usage]
       |        |     +--ro usage            identityref
       |        |     +--ro affinity-name* [name]
       |        |        +--ro name    string
       |        +--ro path-srlgs-lists
       |        |  +--ro path-srlgs-list* [usage]
       |        |     +--ro usage     identityref
       |        |     +--ro values*   srlg
       |        +--ro path-srlgs-names
       |        |  +--ro path-srlgs-name* [usage]
       |        |     +--ro usage    identityref
       |        |     +--ro names*   string
       |        +--ro path-route-objects
       |        |  +--ro path-route-object* [index]
       |        |     +--ro index                        uint32
       |        |     +--ro (type)?
       |        |        +--:(numbered-node-hop)
       |        |        |  +--ro numbered-node-hop
       |        |        |     +--ro node-id     te-node-id
       |        |        |     +--ro hop-type?   te-hop-type
       |        |        +--:(numbered-link-hop)
       |        |        |  +--ro numbered-link-hop
       |        |        |     +--ro link-tp-id    te-tp-id
       |        |        |     +--ro hop-type?     te-hop-type
       |        |        |     +--ro direction?    te-link-direction
       |        |        +--:(unnumbered-link-hop)
       |        |        |  +--ro unnumbered-link-hop
       |        |        |     +--ro link-tp-id    te-tp-id
       |        |        |     +--ro node-id       te-node-id
       |        |        |     +--ro hop-type?     te-hop-type
       |        |        |     +--ro direction?    te-link-direction
       |        |        +--:(as-number)
       |        |        |  +--ro as-number-hop
       |        |        |     +--ro as-number    inet:as-number
       |        |        |     +--ro hop-type?    te-hop-type
       |        |        +--:(label)
       |        |           +--ro label-hop
       |        |              +--ro te-label
       |        |                 +--ro (technology)?
       |        |                 |  +--:(generic)
       |        |                 |     +--ro generic?
       |        |                 |             rt-types:generalized-label
       |        |                 +--ro direction?
       |        |                         te-label-direction
       |        +--ro te-bandwidth
       |        |  +--ro (technology)?
       |        |     +--:(generic)
       |        |        +--ro generic?   te-bandwidth
       |        +--ro disjointness-type?
       |                te-types:te-path-disjointness
       +--ro computed-path-error-infos
       |  +--ro computed-path-error-info* []
       |     +--ro error-description?   string
       |     +--ro error-timestamp?     yang:date-and-time
       |     +--ro error-reason?        identityref
       +--ro tunnel-ref?                         te:tunnel-ref
       +--ro (path-role)?
          +--:(primary)
          |  +--ro primary-path-ref?             leafref
          +--:(primary-reverse)
          |  +--ro primary-reverse-path-ref?     leafref
          +--:(secondary)
          |  +--ro secondary-path-ref?           leafref
          +--:(secondary-reverse)
             +--ro secondary-reverse-path-ref?   leafref
  augment /te:tunnels-actions/te:input/te:tunnel-info/te:filter-type:
    +--:(path-compute-transactions)
       +-- path-compute-transaction-id*   string
  augment /te:tunnels-actions/te:output:
    +--ro path-computed-delete-result
       +--ro path-compute-transaction-id*   string
]]></artwork></figure>

</section>
<section anchor="pc-yang"><name>YANG module</name>

<figure title="TE path computation YANG module" anchor="fig-pc-yang"><sourcecode type="yang" markers="true" name="ietf-te-path-computation@2022-01-24.yang"><![CDATA[
module ietf-te-path-computation {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-te-path-computation";
  prefix te-pc;

  import ietf-te {
    prefix te;
    reference
      "RFCYYYY: A YANG Data Model for Traffic Engineering Tunnels
       and Interfaces";
  }

  /* Note: The RFC Editor will replace YYYY with the number assigned
     to the RFC once draft-ietf-teas-yang-te becomes an RFC.*/

  import ietf-te-types {
    prefix te-types;
    reference
      "RFC8776: Common YANG Data Types for Traffic Engineering.";
  }

  organization
    "Traffic Engineering Architecture and Signaling (TEAS)
     Working Group";
  contact
    "WG Web:   <http://tools.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 model defined in
     this document is based on RPCs augmenting the RPCs defined in
     the generic TE module (ietf-te).
     The model fully conforms to the
     Network Management Datastore Architecture (NMDA).

     Copyright (c) 2022 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 Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions

     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  // 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 2022-01-24 {
    description
      "Initial revision";
    reference
      "RFC XXXX: A YANG Data Model for requesting path computation";
  }

  // RFC Ed.: replace XXXX with actual RFC number and remove
  // this note

  /*
   * Identities
   */

  identity svec-metric-type {
    description
      "Base identity for SVEC metric type.";
    reference
      "RFC5541: Encoding of Objective Functions in the Path
       Computation Element Communication Protocol (PCEP).";
  }

  identity svec-metric-cumul-te {
    base svec-metric-type;
    description
      "Cumulative TE cost.";
    reference
      "RFC5541: Encoding of Objective Functions in the Path
       Computation Element Communication Protocol (PCEP).";
  }

  identity svec-metric-cumul-igp {
    base svec-metric-type;
    description
      "Cumulative IGP cost.";
    reference
      "RFC5541: Encoding of Objective Functions in the Path
       Computation Element Communication Protocol (PCEP).";
  }

  identity svec-metric-cumul-hop {
    base svec-metric-type;
    description
      "Cumulative Hop path metric.";
    reference
      "RFC8776: Common YANG Data Types for Traffic Engineering.";
  }

  identity svec-metric-aggregate-bandwidth-consumption {
    base svec-metric-type;
    description
      "Aggregate bandwidth consumption.";
    reference
      "RFC5541: Encoding of Objective Functions in the Path
       Computation Element Communication Protocol (PCEP).";
  }

  identity svec-metric-load-of-the-most-loaded-link {
    base svec-metric-type;
    description
      "Load of the most loaded link.";
    reference
      "RFC5541: Encoding of Objective Functions in the Path
       Computation Element Communication Protocol (PCEP).";
  }

  identity tunnel-action-path-compute-delete {
    base te:tunnel-actions-type;
    description
      "Action type to delete the transient states
       of computed paths, as described in section 3.3.1 of
       RFC XXXX.";
    reference
      "RFC XXXX: A YANG Data Model for requesting path computation";
  }

  /*
   * Groupings
   */

  grouping protection-restoration-properties {
    description
      "This grouping defines the restoration and protection types
       for a path in the path computation request.";
    leaf protection-type {
      type identityref {
        base te-types:lsp-protection-type;
      }
      default "te-types:lsp-protection-unprotected";
      description
        "LSP protection type.";
    }
    leaf restoration-type {
      type identityref {
        base te-types:lsp-restoration-type;
      }
      default "te-types:lsp-restoration-restore-any";
      description
        "LSP restoration type.";
    }
    leaf restoration-scheme {
      type identityref {
        base te-types:restoration-scheme-type;
      }
      default "te-types:restoration-scheme-preconfigured";
      description
        "LSP restoration scheme.";
    }
  } // grouping protection-restoration-properties

  grouping requested-info {
    description
      "This grouping defines the information (e.g., metrics)
       which is requested, 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 that must be returned in the response";
      }
    }
    leaf return-srlgs {
      type boolean;
      default "false";
      description
        "If true, path 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 also the tunnel name is 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 also the tunnel name is 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 also the tunnel name is 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 also the tunnel name is 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 svec-metric-type;
          }
          description
            "SVEC metric type.";
          reference
            "RFC5541: Encoding of Objective Functions in the Path
            Computation Element Communication Protocol (PCEP).";
        }
        leaf upper-bound {
          type uint64;
          description
            "Upper bound on SVEC metric";
        }
      }
    }
    uses te-types:generic-path-srlgs;
    container exclude-objects {
      description
        "Resources to be excluded";
      list excludes {
        description
          "List of Explicit Route Objects to always exclude
           from synchronized path computation";
        uses te-types:explicit-route-hop;
      }
    }
  } // grouping synchronization-constraints

  grouping synchronization-optimization {
    description
      "Optimizations applicable to synchronized path
       computation requests.";
    container optimizations {
      description
        "The objective function container that includes attributes
         to impose when computing a synchronized set of paths";
      choice algorithm {
        description
          "Optimizations algorithm.";
        case metric {
          if-feature "te-types:path-optimization-metric";
          list optimization-metric {
            key "metric-type";
            description
              "svec path metric type";
            leaf metric-type {
              type identityref {
                base 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:objective-function-type;
              }
              default "te-types:of-minimize-cost-path";
              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, 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-number {
          type uint32;
          description
            "This list reports the set of path computation
             requests that must 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
      "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-number.";
      }
      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 {
              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-preference;
                  uses te:k-requested-paths;
                } // container primary-path
              } // case primary-path
              case secondary-path {
                container secondary-path {
                  description
                    "TE secondary path";
                  uses te:path-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 {
                      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 {
                    description
                      "Whether the path reference to the primary
                      paths for which this path is the reverse-path
                      is to an existing te-tunnel path or to
                      another path request.";
                    case path-ref {
                      leaf primary-path-ref {
                        type leafref {
                          path "/te:te/te:tunnels/te:tunnel[te:name"
                            + "=current()/../../tunnel-ref]/"
                            + "te:primary-paths/te:primary-path/"
                            + "te:name";
                        }
                        must '../../tunnel-ref' {
                          description
                            "The primary-path can be referenced
                            if also the tunnel is referenced.";
                        }
                        mandatory true;
                        description
                          "The referenced primary path";
                      }
                    } // case path-ref
                    case path-request-ref {
                      leaf path-request-ref {
                        type leafref {
                          path "/te:tunnels-path-compute/"
                            + "te:path-compute-info/"
                            + "te-pc:path-request/"
                            + "te-pc:request-id";
                        }
                        mandatory true;
                        description
                          "The referenced primary path request";
                      }
                    } // case path-request-ref 
                  } // choice primary-path-exist
                } // container primary-reverse-path
              } // case primary-reverse-path
              case secondary-reverse-path {
                container secondary-reverse-path {
                  description
                    "TE secondary reverse path";
                  uses te:path-preference;
                  uses protection-restoration-properties;
                  list primary-reverse-path-ref {
                    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 {
                      description
                        "Whether the path reference is to an existing
                        te-tunnel path or to another path request";
                      case path-ref {
                        leaf primary-path-ref {
                          type leafref {
                            path "/te:te/te:tunnels/te:tunnel"
                              + "[te:name=current()/../../../"
                              + "tunnel-ref]/te:primary-paths/"
                              + "te:primary-path/te:name";
                          }
                          must '../../../tunnel-ref' {
                            description
                              "The primary-path can be referenced
                              if also the tunnel is referenced.";
                          }
                          mandatory true;
                          description
                            "The referenced primary path";
                        }
                      } // case path-ref
                      case path-request-ref {
                        leaf path-request-ref {
                          type leafref {
                            path "/te:tunnels-path-compute/"
                              + "te:path-compute-info/"
                              + "te-pc:path-request/"
                              + "te-pc:request-id";
                          }
                          mandatory true;
                          description
                            "The referenced primary reverse path
                            request";
                        }
                      } // case path-request-ref 
                    } // choice primary-reverse-path-exist
                  } // list primary-reverse-path-ref
                } // container secondary-reverse-path
              } // case secondary-reverse-path
            } // choice tunnel-path-role
          }
        } // case reference
        case value {
          leaf tunnel-name {
            type string;
            description
              "TE tunnel name.";
          }
          leaf path-name {
            type string;
            description
              "TE path name.";
          }
          choice path-role {
            when 'not (./source) and not (./destination) and
                  not (./src-tunnel-tp-id) and
                  not (./dst-tunnel-tp-id)' {
              description
                "When the tunnel attributes are specified by value
                within this path computation, it is assumed that the
                requested path will be the only path of a tunnel.

                If the requested path is a transit segment path, 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
                primary reverse 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: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: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:encoding-and-switching-type;
          }
        }
      }
    }
    uses synchronization-info;
  } // path-compute rpc input

  augment "/te:tunnels-path-compute/te:output/"
        + "te:path-compute-result" {
    description
      "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 Action RPC";
      leaf-list path-compute-transaction-id {
        type string;
        description
          "The list of the transaction-id values of the
           transient states to be deleted";
      }
    }
  } // path-delete rpc input

  augment "/te:tunnels-actions/te:output" {
    description
      "Augment Tunnels Action RPC output with path delete result";
    container path-computed-delete-result {
      description
        "Path Delete RPC output";
      leaf-list path-compute-transaction-id {
        type string;
        description
          "The list of the transaction-id values of the
           transient states that have been successfully deleted";
      }
    }
  } // path-delete rpc output
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document describes use cases of requesting Path Computation
   using YANG data models, which could be used at the ABNO Control
   Interface <xref target="RFC7491"/> and/or between controllers in ACTN <xref target="RFC8453"/>. As
   such, it does not introduce any new security considerations compared
   to the ones related to YANG specification, ABNO specification and
   ACTN Framework defined in <xref target="RFC7950"/>, <xref target="RFC7491"/> and <xref target="RFC8453"/>.</t>

<t>The YANG module defined in this document is designed to be accessed via
   the NETCONF protocol <xref target="RFC6241"/> or RESTCONF protocol <xref target="RFC8040"/>. The
   lowest NETCONF layer is the secure transport layer, and the
   mandatory-to-implement secure transport is Secure Shell (SSH)
   <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the mandatory-to-
   implement secure transport is TLS <xref target="RFC8446"/>.</t>

<t>The Network Configuration Access Control Model (NACM) 
   <xref target="RFC8341"/> provides the means to
   restrict access for particular NETCONF or RESTCONF users to a
   preconfigured subset of all available NETCONF or RESTCONF protocol
   operations and content.</t>

<t>The YANG module defined in this document augments the "tunnels-path-compute" and the "tunnel-actions" RPCs defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> are also applicable to the YANG module
   defined in this document.</t>

<t>Some of the RPC operations defined in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control access to these operations. These are the
   operations and their sensitivity/vulnerability:</t>

<t>"te-pc:response/computed-paths-properties": provides the same information provided by the "te:computed-paths-properties" defined in <xref target="I-D.ietf-teas-yang-te"/>. The security considerations provided in <xref target="I-D.ietf-teas-yang-te"/> for the TE tunnel state apply also to this subtree.</t>

<t>"te-pc:response/te-pc:tunnel-ref", "te-pc:response/te-pc:primary-path-ref", "te-pc:response/te-pc:primary-reverse-path-ref", "te-pc:response/te-pc:secondary-path-ref" and "te-pc:response/te-pc:secondary-reverse-path-ref" provides a reference where the same information provided in "te-pc:response/computed-paths-properties" is temporarly stored with the operational datastore (see <xref target="temp-state"/>). Therefore access to this information does not provide any additional security issue that the information provided with "te-pc:response/computed-paths-properties".</t>

<t>"/te:tunnels-actions": the YANG model defined in this document augments this action with a new action type that allows deleting the transient states of computed paths (see <xref target="temp-state"/>). A malicious use of this action would have no impact on the paths carrying live traffic but it would preclude the client from using the "transient states" to request the set-up of exactly that path, if still available.</t>

<t>The security considerations spelled out in the
   YANG specification <xref target="RFC7950"/> apply for this document as well.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document registers the following URIs in the "ns" subregistry
   within the "IETF XML registry" <xref target="RFC3688"/>.</t>

<figure><artwork><![CDATA[
      URI: urn:ietf:params:xml:ns:yang:ietf-te-path-computation
      Registrant Contact:  The IESG.
      XML: N/A, the requested URI is an XML namespace.
]]></artwork></figure>

<t>This document registers a YANG module in the "YANG Module Names"
   registry <xref target="RFC7950"/>.</t>

<figure><artwork><![CDATA[
      name:      ietf-te-path-computation
      namespace: urn:ietf:params:xml:ns:yang:ietf-te-path-computation
      prefix:    te-pc
      reference: this document
]]></artwork></figure>

</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='RFC6241' target='https://www.rfc-editor.org/info/rfc6241'>
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author fullname='R. Enns' initials='R.' role='editor' surname='Enns'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'><organization/></author>
<author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'><organization/></author>
<date month='June' year='2011'/>
<abstract><t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6241'/>
<seriesInfo name='DOI' value='10.17487/RFC6241'/>
</reference>



<reference anchor='RFC8040' target='https://www.rfc-editor.org/info/rfc8040'>
<front>
<title>RESTCONF Protocol</title>
<author fullname='A. Bierman' initials='A.' surname='Bierman'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<date month='January' year='2017'/>
<abstract><t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t></abstract>
</front>
<seriesInfo name='RFC' value='8040'/>
<seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>



<reference anchor='RFC8795' target='https://www.rfc-editor.org/info/rfc8795'>
<front>
<title>YANG Data Model for Traffic Engineering (TE) Topologies</title>
<author fullname='X. Liu' initials='X.' surname='Liu'><organization/></author>
<author fullname='I. Bryskin' initials='I.' surname='Bryskin'><organization/></author>
<author fullname='V. Beeram' initials='V.' surname='Beeram'><organization/></author>
<author fullname='T. Saad' initials='T.' surname='Saad'><organization/></author>
<author fullname='H. Shah' initials='H.' surname='Shah'><organization/></author>
<author fullname='O. Gonzalez de Dios' initials='O.' surname='Gonzalez de Dios'><organization/></author>
<date month='August' year='2020'/>
<abstract><t>This document defines a YANG data model for representing, retrieving, and manipulating Traffic Engineering (TE) Topologies. The model serves as a base model that other technology-specific TE topology models can augment.</t></abstract>
</front>
<seriesInfo name='RFC' value='8795'/>
<seriesInfo name='DOI' value='10.17487/RFC8795'/>
</reference>


<reference anchor='I-D.ietf-teas-yang-te'>
   <front>
      <title>A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths and Interfaces</title>
      <author fullname='Tarek Saad'>
	 <organization>Juniper Networks</organization>
      </author>
      <author fullname='Rakesh Gandhi'>
	 <organization>Cisco Systems Inc</organization>
      </author>
      <author fullname='Xufeng Liu'>
	 <organization>Volta Networks</organization>
      </author>
      <author fullname='Vishnu Pavan Beeram'>
	 <organization>Juniper Networks</organization>
      </author>
      <author fullname='Igor Bryskin'>
	 <organization>Individual</organization>
      </author>
      <author fullname='Oscar Gonzalez de Dios'>
	 <organization>Telefonica</organization>
      </author>
      <date day='7' month='February' year='2022'/>
      <abstract>
	 <t>   This document defines a YANG data model for the provisioning and
   management of Traffic Engineering (TE) tunnels, Label Switched Paths
   (LSPs), and interfaces.  The model is divided into YANG modules that
   classify data into generic, device-specific, technology agnostic, and
   technology-specific elements.

   This model covers data for configuration, operational state, remote
   procedural calls, and event notifications.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teas-yang-te-29'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teas-yang-te-29.txt' type='TXT'/>
</reference>



<reference anchor='RFC7950' target='https://www.rfc-editor.org/info/rfc7950'>
<front>
<title>The YANG 1.1 Data Modeling Language</title>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<date month='August' year='2016'/>
<abstract><t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t></abstract>
</front>
<seriesInfo name='RFC' value='7950'/>
<seriesInfo name='DOI' value='10.17487/RFC7950'/>
</reference>



<reference anchor='RFC5440' target='https://www.rfc-editor.org/info/rfc5440'>
<front>
<title>Path Computation Element (PCE) Communication Protocol (PCEP)</title>
<author fullname='JP. Vasseur' initials='JP.' role='editor' surname='Vasseur'><organization/></author>
<author fullname='JL. Le Roux' initials='JL.' role='editor' surname='Le Roux'><organization/></author>
<date month='March' year='2009'/>
<abstract><t>This document specifies the Path Computation Element (PCE) Communication Protocol (PCEP) for communications between a Path Computation Client (PCC) and a PCE, or between two PCEs.  Such interactions include path computation requests and path computation replies as well as notifications of specific states related to the use of a PCE in the context of Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) Traffic Engineering.  PCEP is designed to be flexible and extensible so as to easily allow for the addition of further messages and objects, should further requirements be expressed in the future.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5440'/>
<seriesInfo name='DOI' value='10.17487/RFC5440'/>
</reference>



<reference anchor='RFC7926' target='https://www.rfc-editor.org/info/rfc7926'>
<front>
<title>Problem Statement and Architecture for Information Exchange between Interconnected Traffic-Engineered Networks</title>
<author fullname='A. Farrel' initials='A.' role='editor' surname='Farrel'><organization/></author>
<author fullname='J. Drake' initials='J.' surname='Drake'><organization/></author>
<author fullname='N. Bitar' initials='N.' surname='Bitar'><organization/></author>
<author fullname='G. Swallow' initials='G.' surname='Swallow'><organization/></author>
<author fullname='D. Ceccarelli' initials='D.' surname='Ceccarelli'><organization/></author>
<author fullname='X. Zhang' initials='X.' surname='Zhang'><organization/></author>
<date month='July' year='2016'/>
<abstract><t>In Traffic-Engineered (TE) systems, it is sometimes desirable to establish an end-to-end TE path with a set of constraints (such as bandwidth) across one or more networks from a source to a destination.  TE information is the data relating to nodes and TE links that is used in the process of selecting a TE path.  TE information is usually only available within a network.  We call such a zone of visibility of TE information a domain.  An example of a domain may be an IGP area or an Autonomous System.</t><t>In order to determine the potential to establish a TE path through a series of connected networks, it is necessary to have available a certain amount of TE information about each network.  This need not be the full set of TE information available within each network but does need to express the potential of providing TE connectivity. This subset of TE information is called TE reachability information.</t><t>This document sets out the problem statement for the exchange of TE information between interconnected TE networks in support of end-to-end TE path establishment and describes the best current practice architecture to meet this problem statement.  For reasons that are explained in this document, this work is limited to simple TE constraints and information that determine TE reachability.</t></abstract>
</front>
<seriesInfo name='BCP' value='206'/>
<seriesInfo name='RFC' value='7926'/>
<seriesInfo name='DOI' value='10.17487/RFC7926'/>
</reference>



<reference anchor='RFC8340' target='https://www.rfc-editor.org/info/rfc8340'>
<front>
<title>YANG Tree Diagrams</title>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='L. Berger' initials='L.' role='editor' surname='Berger'><organization/></author>
<date month='March' year='2018'/>
<abstract><t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t></abstract>
</front>
<seriesInfo name='BCP' value='215'/>
<seriesInfo name='RFC' value='8340'/>
<seriesInfo name='DOI' value='10.17487/RFC8340'/>
</reference>



<reference anchor='RFC6991' target='https://www.rfc-editor.org/info/rfc6991'>
<front>
<title>Common YANG Data Types</title>
<author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'><organization/></author>
<date month='July' year='2013'/>
<abstract><t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t></abstract>
</front>
<seriesInfo name='RFC' value='6991'/>
<seriesInfo name='DOI' value='10.17487/RFC6991'/>
</reference>



<reference anchor='RFC8776' target='https://www.rfc-editor.org/info/rfc8776'>
<front>
<title>Common YANG Data Types for Traffic Engineering</title>
<author fullname='T. Saad' initials='T.' surname='Saad'><organization/></author>
<author fullname='R. Gandhi' initials='R.' surname='Gandhi'><organization/></author>
<author fullname='X. Liu' initials='X.' surname='Liu'><organization/></author>
<author fullname='V. Beeram' initials='V.' surname='Beeram'><organization/></author>
<author fullname='I. Bryskin' initials='I.' surname='Bryskin'><organization/></author>
<date month='June' year='2020'/>
<abstract><t>This document defines a collection of common data types and groupings in YANG data modeling language. These derived common types and groupings are intended to be imported by modules that model Traffic Engineering (TE) configuration and state capabilities.</t></abstract>
</front>
<seriesInfo name='RFC' value='8776'/>
<seriesInfo name='DOI' value='10.17487/RFC8776'/>
</reference>



<reference anchor='RFC5441' target='https://www.rfc-editor.org/info/rfc5441'>
<front>
<title>A Backward-Recursive PCE-Based Computation (BRPC) Procedure to Compute Shortest Constrained Inter-Domain Traffic Engineering Label Switched Paths</title>
<author fullname='JP. Vasseur' initials='JP.' role='editor' surname='Vasseur'><organization/></author>
<author fullname='R. Zhang' initials='R.' surname='Zhang'><organization/></author>
<author fullname='N. Bitar' initials='N.' surname='Bitar'><organization/></author>
<author fullname='JL. Le Roux' initials='JL.' surname='Le Roux'><organization/></author>
<date month='April' year='2009'/>
<abstract><t>The ability to compute shortest constrained Traffic Engineering Label Switched Paths (TE LSPs) in Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks across multiple domains has been identified as a key requirement.  In this context, a domain is a collection of network elements within a common sphere of address management or path computational responsibility such as an IGP area or an Autonomous Systems.  This document specifies a procedure relying on the use of multiple Path Computation Elements (PCEs) to compute such inter-domain shortest constrained paths across a predetermined sequence of domains, using a backward-recursive path computation technique.  This technique preserves confidentiality across domains, which is sometimes required when domains are managed by different service providers.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5441'/>
<seriesInfo name='DOI' value='10.17487/RFC5441'/>
</reference>



<reference anchor='RFC5541' target='https://www.rfc-editor.org/info/rfc5541'>
<front>
<title>Encoding of Objective Functions in the Path Computation Element Communication Protocol (PCEP)</title>
<author fullname='JL. Le Roux' initials='JL.' surname='Le Roux'><organization/></author>
<author fullname='JP. Vasseur' initials='JP.' surname='Vasseur'><organization/></author>
<author fullname='Y. Lee' initials='Y.' surname='Lee'><organization/></author>
<date month='June' year='2009'/>
<abstract><t>The computation of one or a set of Traffic Engineering Label Switched Paths (TE LSPs) in MultiProtocol Label Switching (MPLS) and Generalized MPLS (GMPLS) networks is subject to a set of one or more specific optimization criteria, referred to as objective functions (e.g., minimum cost path, widest path, etc.).</t><t>In the Path Computation Element (PCE) architecture, a Path Computation Client (PCC) may want a path to be computed for one or more TE LSPs according to a specific objective function.  Thus, the PCC needs to instruct the PCE to use the correct objective function. Furthermore, it is possible that not all PCEs support the same set of objective functions; therefore, it is useful for the PCC to be able to automatically discover the set of objective functions supported by each PCE.</t><t>This document defines extensions to the PCE communication Protocol (PCEP) to allow a PCE to indicate the set of objective functions it supports.  Extensions are also defined so that a PCC can indicate in a path computation request the required objective function, and a PCE can report in a path computation reply the objective function that was used for path computation.</t><t>This document defines objective function code types for six objective functions previously listed in the PCE requirements work, and provides the definition of four new metric types that apply to a set of synchronized requests.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5541'/>
<seriesInfo name='DOI' value='10.17487/RFC5541'/>
</reference>



<reference anchor='RFC6242' target='https://www.rfc-editor.org/info/rfc6242'>
<front>
<title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
<author fullname='M. Wasserman' initials='M.' surname='Wasserman'><organization/></author>
<date month='June' year='2011'/>
<abstract><t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem.  This document obsoletes RFC 4742.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6242'/>
<seriesInfo name='DOI' value='10.17487/RFC6242'/>
</reference>



<reference anchor='RFC8446' target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<date month='August' year='2018'/>
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>



<reference anchor='RFC8341' target='https://www.rfc-editor.org/info/rfc8341'>
<front>
<title>Network Configuration Access Control Model</title>
<author fullname='A. Bierman' initials='A.' surname='Bierman'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<date month='March' year='2018'/>
<abstract><t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t><t>This document obsoletes RFC 6536.</t></abstract>
</front>
<seriesInfo name='STD' value='91'/>
<seriesInfo name='RFC' value='8341'/>
<seriesInfo name='DOI' value='10.17487/RFC8341'/>
</reference>



<reference anchor='RFC3688' target='https://www.rfc-editor.org/info/rfc3688'>
<front>
<title>The IETF XML Registry</title>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<date month='January' year='2004'/>
<abstract><t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t></abstract>
</front>
<seriesInfo name='BCP' value='81'/>
<seriesInfo name='RFC' value='3688'/>
<seriesInfo name='DOI' value='10.17487/RFC3688'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC7491' target='https://www.rfc-editor.org/info/rfc7491'>
<front>
<title>A PCE-Based Architecture for Application-Based Network Operations</title>
<author fullname='D. King' initials='D.' surname='King'><organization/></author>
<author fullname='A. Farrel' initials='A.' surname='Farrel'><organization/></author>
<date month='March' year='2015'/>
<abstract><t>Services such as content distribution, distributed databases, or inter-data center connectivity place a set of new requirements on the operation of networks.  They need on-demand and application-specific reservation of network connectivity, reliability, and resources (such as bandwidth) in a variety of network applications (such as point-to-point connectivity, network virtualization, or mobile back-haul) and in a range of network technologies from packet (IP/MPLS) down to optical.  An environment that operates to meet these types of requirements is said to have Application-Based Network Operations (ABNO).  ABNO brings together many existing technologies and may be seen as the use of a toolbox of existing components enhanced with a few new elements.</t><t>This document describes an architecture and framework for ABNO, showing how these components fit together.  It provides a cookbook of existing technologies to satisfy the architecture and meet the needs of the applications.</t></abstract>
</front>
<seriesInfo name='RFC' value='7491'/>
<seriesInfo name='DOI' value='10.17487/RFC7491'/>
</reference>



<reference anchor='RFC8453' target='https://www.rfc-editor.org/info/rfc8453'>
<front>
<title>Framework for Abstraction and Control of TE Networks (ACTN)</title>
<author fullname='D. Ceccarelli' initials='D.' role='editor' surname='Ceccarelli'><organization/></author>
<author fullname='Y. Lee' initials='Y.' role='editor' surname='Lee'><organization/></author>
<date month='August' year='2018'/>
<abstract><t>Traffic Engineered (TE) networks have a variety of mechanisms to facilitate the separation of the data plane and control plane.  They also have a range of management and provisioning protocols to configure and activate network resources.  These mechanisms represent key technologies for enabling flexible and dynamic networking.  The term &quot;Traffic Engineered network&quot; refers to a network that uses any connection-oriented technology under the control of a distributed or centralized control plane to support dynamic provisioning of end-to- end connectivity.</t><t>Abstraction of network resources is a technique that can be applied to a single network domain or across multiple domains to create a single virtualized network that is under the control of a network operator or the customer of the operator that actually owns the network resources.</t><t>This document provides a framework for Abstraction and Control of TE Networks (ACTN) to support virtual network services and connectivity services.</t></abstract>
</front>
<seriesInfo name='RFC' value='8453'/>
<seriesInfo name='DOI' value='10.17487/RFC8453'/>
</reference>



<reference anchor='RFC8454' target='https://www.rfc-editor.org/info/rfc8454'>
<front>
<title>Information Model for Abstraction and Control of TE Networks (ACTN)</title>
<author fullname='Y. Lee' initials='Y.' surname='Lee'><organization/></author>
<author fullname='S. Belotti' initials='S.' surname='Belotti'><organization/></author>
<author fullname='D. Dhody' initials='D.' surname='Dhody'><organization/></author>
<author fullname='D. Ceccarelli' initials='D.' surname='Ceccarelli'><organization/></author>
<author fullname='B. Yoon' initials='B.' surname='Yoon'><organization/></author>
<date month='September' year='2018'/>
<abstract><t>This document provides an information model for Abstraction and Control of TE Networks (ACTN).</t></abstract>
</front>
<seriesInfo name='RFC' value='8454'/>
<seriesInfo name='DOI' value='10.17487/RFC8454'/>
</reference>


<reference anchor='I-D.ietf-ccamp-otn-topo-yang'>
   <front>
      <title>A YANG Data Model for Optical Transport Network Topology</title>
      <author fullname='Haomian Zheng'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Italo Busi'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Xufeng Liu'>
	 <organization>Volta Networks</organization>
      </author>
      <author fullname='Sergio Belotti'>
	 <organization>Nokia</organization>
      </author>
      <author fullname='Oscar Gonzalez de Dios'>
	 <organization>Telefonica</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <abstract>
	 <t>   This document describes a YANG data model to describe the topologies
   of an Optical Transport Network (OTN).  It is independent of control
   plane protocols and captures topological and resource related
   information pertaining to OTN.  This model enables clients, which
   interact with a transport domain controller, for OTN topology related
   operations such as obtaining the relevant topology resource
   information.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-ccamp-otn-topo-yang-14'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-ccamp-otn-topo-yang-14.txt' type='TXT'/>
</reference>



<reference anchor='RFC4655' target='https://www.rfc-editor.org/info/rfc4655'>
<front>
<title>A Path Computation Element (PCE)-Based Architecture</title>
<author fullname='A. Farrel' initials='A.' surname='Farrel'><organization/></author>
<author fullname='J.-P. Vasseur' initials='J.-P.' surname='Vasseur'><organization/></author>
<author fullname='J. Ash' initials='J.' surname='Ash'><organization/></author>
<date month='August' year='2006'/>
<abstract><t>Constraint-based path computation is a fundamental building block for traffic engineering systems such as Multiprotocol Label Switching (MPLS) and Generalized Multiprotocol Label Switching (GMPLS) networks.  Path computation in large, multi-domain, multi-region, or multi-layer networks is complex and may require special computational components and cooperation between the different network domains.</t><t>This document specifies the architecture for a Path Computation Element (PCE)-based model to address this problem space.  This document does not attempt to provide a detailed description of all the architectural components, but rather it describes a set of building blocks for the PCE architecture from which solutions may be constructed.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='4655'/>
<seriesInfo name='DOI' value='10.17487/RFC4655'/>
</reference>



<reference anchor='RFC8342' target='https://www.rfc-editor.org/info/rfc8342'>
<front>
<title>Network Management Datastore Architecture (NMDA)</title>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' surname='Schoenwaelder'><organization/></author>
<author fullname='P. Shafer' initials='P.' surname='Shafer'><organization/></author>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<author fullname='R. Wilton' initials='R.' surname='Wilton'><organization/></author>
<date month='March' year='2018'/>
<abstract><t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t></abstract>
</front>
<seriesInfo name='RFC' value='8342'/>
<seriesInfo name='DOI' value='10.17487/RFC8342'/>
</reference>



<reference anchor='RFC6805' target='https://www.rfc-editor.org/info/rfc6805'>
<front>
<title>The Application of the Path Computation Element Architecture to the Determination of a Sequence of Domains in MPLS and GMPLS</title>
<author fullname='D. King' initials='D.' role='editor' surname='King'><organization/></author>
<author fullname='A. Farrel' initials='A.' role='editor' surname='Farrel'><organization/></author>
<date month='November' year='2012'/>
<abstract><t>Computing optimum routes for Label Switched Paths (LSPs) across multiple domains in MPLS Traffic Engineering (MPLS-TE) and GMPLS networks presents a problem because no single point of path computation is aware of all of the links and resources in each domain.  A solution may be achieved using the Path Computation Element (PCE) architecture.</t><t>Where the sequence of domains is known a priori, various techniques can be employed to derive an optimum path.  If the domains are simply connected, or if the preferred points of interconnection are also known, the Per-Domain Path Computation technique can be used.  Where there are multiple connections between domains and there is no preference for the choice of points of interconnection, the Backward-Recursive PCE-based Computation (BRPC) procedure can be used to derive an optimal path.</t><t>This document examines techniques to establish the optimum path when the sequence of domains is not known in advance.  The document shows how the PCE architecture can be extended to allow the optimum sequence of domains to be selected, and the optimum end-to-end path to be derived through the use of a hierarchical relationship between domains.  This document is not an Internet Standards Track  specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6805'/>
<seriesInfo name='DOI' value='10.17487/RFC6805'/>
</reference>



<reference anchor='RFC7446' target='https://www.rfc-editor.org/info/rfc7446'>
<front>
<title>Routing and Wavelength Assignment Information Model for Wavelength Switched Optical Networks</title>
<author fullname='Y. Lee' initials='Y.' role='editor' surname='Lee'><organization/></author>
<author fullname='G. Bernstein' initials='G.' role='editor' surname='Bernstein'><organization/></author>
<author fullname='D. Li' initials='D.' surname='Li'><organization/></author>
<author fullname='W. Imajuku' initials='W.' surname='Imajuku'><organization/></author>
<date month='February' year='2015'/>
<abstract><t>This document provides a model of information needed by the Routing and Wavelength Assignment (RWA) process in Wavelength Switched Optical Networks (WSONs).  The purpose of the information described in this model is to facilitate constrained optical path computation in WSONs.  This model takes into account compatibility constraints between WSON signal attributes and network elements but does not include constraints due to optical impairments.  Aspects of this information that may be of use to other technologies utilizing a GMPLS control plane are discussed.</t></abstract>
</front>
<seriesInfo name='RFC' value='7446'/>
<seriesInfo name='DOI' value='10.17487/RFC7446'/>
</reference>




    </references>


<section anchor="examples"><name>Examples</name>

<t>This section contains examples of use of the model with RESTCONF
<xref target="RFC8040"/> and JSON encoding.</t>

<t>These examples show how path computation can be requested for the tunnels configuration provided in Appendix A of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<section anchor="basic-example"><name>Basic Path Computation</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 13.1 of of <xref target="I-D.ietf-teas-yang-te"/>.</t>

<t>In this case, the TE Tunnel has only one primary path with no specific constraints.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="basic.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 1,
          "tunnel-name": "Example_LSP_Tunnel_A_2",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "10.0.0.1",
          "destination": "10.0.0.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="transient-state-example"><name>Path Computation with transient state</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 13.1 of of <xref target="I-D.ietf-teas-yang-te"/> requesting some transient state to be reported within the operational datastore, as described <xref target="temp-state"/>.</t>

<t>In this case, the TE Tunnel has only one primary path with no specific constraints.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="transient-state.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 2,
          "tunnel-name": "Example_LSP_Tunnel_A_2",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "10.0.0.1",
          "destination": "10.0.0.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp",
          "requested-state": {
            "transaction-id": "example"
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="global-path-constraint-example"><name>Path Computation with Global Path Constraint</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 13.3 of of <xref target="I-D.ietf-teas-yang-te"/>. The 'named path constraint' is created in section 13.2 of <xref target="I-D.ietf-teas-yang-te"/> applies to this path computation request.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="global-path-constraint.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 3,
          "tunnel-name": "Example_LSP_Tunnel_A_4_1",
          "path-name": "Simple_LSP_1",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "10.0.0.1",
          "destination": "10.0.0.4",
          "bidirectional": "false",
          "signaling-type": "path-setup-rsvp",
          "named-path-constraint": "max-hop-3",
          "requested-state": {}
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="tunnel-path-constraint-example"><name>Path Computation with Per-tunnel Path Constraint</name>

<t>This example uses the path computation RPC defined in this document to request the computation of the path for the tunnel defined in section 13.4 of of <xref target="I-D.ietf-teas-yang-te"/>, using a per tunnel path constraint.</t>

<figure><artwork type="ascii-art"><![CDATA[
POST /restconf/operations/ietf-te:te:tunnels-path-compute HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="tunnel-path-constraint.json"><![CDATA[
{
  "ietf-te:input": {
    "path-compute-info": {
      "ietf-te-path-computation:path-request": [
        {
          "request-id": 4,
          "tunnel-name": "Example_LSP_Tunnel_A_4_2",
          "path-name": "path1",
          "encoding": "te-types:lsp-encoding-packet",
          "source": "10.0.0.1",
          "destination": "10.0.0.4",
          "bidirectional": "false",
          "signaling-type": "te-types:path-setup-rsvp",
          "path-metric-bounds": {
            "path-metric-bound": [
              {
                "metric-type": "te-types:path-metric-hop",
                "upper-bound": "3"
              }
            ]
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="path-computation-result"><name>Path Computation result</name>

<t>This example reports the output of the path computation RPC request described in <xref target="tunnel-path-constraint-example"/>.</t>

<figure><artwork type="ascii-art"><![CDATA[
HTTP/1.1 200 OK
Host: example.com
Content-Type: application/yang-data+json

]]></artwork></figure>
<figure><sourcecode type="json" markers="false" name="tunnel-path-constraint.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": "10.0.0.2"
                        }
                      },
                      {
                        "index": "2",
                        "numbered-node-hop": {
                          "node-id": "10.0.0.4"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          },
          "tunnel-ref": "Example_LSP_Tunnel_A_4_1",
          "primary-path-ref": "path1"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank Igor Bryskin and Xian Zhang for
   participating in the initial discussions that have triggered this
   work and providing valuable insights.</t>

<t>The authors would like to thank the authors of the TE tunnel YANG
   data model <xref target="I-D.ietf-teas-yang-te"/>, in particular Igor Bryskin, Vishnu Pavan
   Beeram, Tarek Saad and Xufeng Liu, for their inputs to the
   discussions and support in having consistency between the Path
   Computation and TE tunnel YANG data models.</t>

<t>The authors would like to thank Adrian Farrel, Dhruv Dhody, Igor
   Bryskin, Julien Meuric and Lou Berger for their valuable input to the
   discussions that has clarified that the path being set up is not
   necessarily the same as the path that has been previously computed
   and, in particular to Dhruv Dhody, for his suggestion to describe the
   need for a path verification phase to check that the actual path
   being set up meets the required end-to-end metrics and constraints.</t>

<t>The authors would like to thank Aihua Guo, Lou Berger, Shaolong Gan,
   Martin Bjorklund and Tom Petch for their useful comments on how to
   define XPath statements in YANG RPCs.</t>

<t>The authors would like to thank Haomian Zheng, Yanlei Zheng, Tom
   Petch, Aihua Guo and Martin Bjorklund for their review and valuable
   comments to this document.</t>

<t>Previous versions of document were prepared using 2-Word-v2.0.template.dot.</t>

<t>This document was prepared using kramdown.</t>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="V." surname="Lopez" fullname="Victor Lopez">
      <organization>Nokia</organization>
      <address>
        <email>victor.lopez@nokia.com</email>
      </address>
    </contact>
    <contact initials="R." surname="Vilalta" fullname="Ricard Vilalta">
      <organization>CTTC</organization>
      <address>
        <email>ricard.vilalta@cttc.es</email>
      </address>
    </contact>
    <contact initials="K." surname="Sethuraman" fullname="Karthik Sethuraman">
      <organization>NEC</organization>
      <address>
        <email>karthik.sethuraman@necam.com</email>
      </address>
    </contact>
    <contact initials="M." surname="Scharf" fullname="Michael Scharf">
      <organization>Nokia</organization>
      <address>
        <email>michael.scharf@gmail.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Beller" fullname="Dieter Beller">
      <organization>Nokia</organization>
      <address>
        <email>dieter.beller@nokia.com</email>
      </address>
    </contact>
    <contact initials="G." surname="Bruno" fullname="Gianmarco Bruno">
      <organization>Ericsson</organization>
      <address>
        <email>gianmarco.bruno@ericsson.com</email>
      </address>
    </contact>
    <contact initials="F." surname="Lazzeri" fullname="Francesco Lazzeri">
      <organization>Ericsson</organization>
      <address>
        <email>francesco.lazzeri@ericsson.com</email>
      </address>
    </contact>
    <contact initials="Y." surname="Lee" fullname="Young Lee">
      <organization>Samsung Electronics</organization>
      <address>
        <email>younglee.tx@gmail.com</email>
      </address>
    </contact>
    <contact initials="C." surname="Perocchio" fullname="Carlo Perocchio">
      <organization>Ericsson</organization>
      <address>
        <email>carlo.perocchio@ericsson.com</email>
      </address>
    </contact>
    <contact initials="O." surname="Dugeon" fullname="Olivier Dugeon">
      <organization>Orange Labs</organization>
      <address>
        <email>olivier.dugeon@orange.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Meuric" fullname="Julien Meuric">
      <organization>Orange Labs</organization>
      <address>
        <email>julien.meuric@orange.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
H4sIAKyoOGIAA+y9a3sbx5Ew+h2/opf5EDICQOvmJHQSm6JoR2dtSUfU2puz
2rPPEBiSswIx2JmBJDrU+e2n69Ld1beZAa0kzr7GZhMK6Et1dXXdurpqNptN
FvWyWl8eqW13MfvdZNJV3ao8UsfqL8fPv1FPi65Q39XLcqUu6kY15f9sy7bT
7dWm6K7Uor7ebLuiq+r1ZFKcnzfluyP1l0L/DK1fQpMT0WRZL9bFtR592RQX
3awq9ZRdWbSzG91lBiPOxIiz+7+bvK+bt5dNvd0cqdenx2fqB/1vmP0b+G6y
KLrysm5ujlTbLSfVpjlSXbNtuwefffb7zx5MJm1XrJf/VazqtZ7zpmwnm+pI
/UdXL6aqrZuuKS9a/dfNNf2hp74u1137n3op2+6qbo4mSs30/ytFUD/r9FDq
ybat8MumBkSVy6qrG/yibjQa/7wt3peVel0urtb1qr6s9LTwY3ldVKsjVcEY
83M9xldX2HKupw3mOSuby0pPVK7qruub63n9tirk6C32nJ9Tz6/W8Htighft
omjUN/X6x2JV/qiWpXpa1QRmtW717/P0jzjp63JVXtTrauHNXMOQ80vutdSQ
1u1XnW2aAOJ4vW2KS3V2VTTXhRv+m7q+XJVy6GLdXhVfXeL3iXGeFutKz6NO
yoUGoVytKjfYaVMt2lZTnhhuSe3nC9v+q5Kb4ej6QKy7pjrfdjEFfF8t9Lfq
23pT/tizDe+w2XwFzbKb8EqjpVnqIVfFqhMIOHn9+kQO1mC7+Ttq99Wi6xZz
pCk52L8WTXdVvdWk011ptF4XawHeqTfeW2o6b23Tr9blorhOgPhdtbgq9NE/
0//TXPQs+Joazlts+NUlfJvaKn3iywYIe1X2kfES2wEZ63ZZBH5TFevrolno
k9Js13X/rl+axvNzaOxvuT/u102xXpStHvfb4scfdcP+kS9M8/mKmveN/Zd6
q7nXt2Xpxjwrrlv48nRVLroGTovHMG6gx6os592HLF5PikYzppdlUy8WV9UA
JhbQeL4xjfugfbGq3lV6w55uL8taUNQLveTLUqPn3AO1pubzJTb/qsZWiWH/
r+2qKtfqu3Krpx4c9b+x9fwaW8tBJ7PZTOnGXVMsugl0eX1VNqXSh1q1i3Jd
NJoHTVV3s9EnaLW60bxNFepKQ6jp4Aq+U2f1Rfdet589LS+qdbmEQZ6X3XuW
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
t8lXdYkqki601Ok+JjS5p6wmXiiisuyeKCbPuuEs/XlaSQMh/3Twzg6uC8zT
JpmwXAp748mPUuSntC8FVqkoYOpPZphOFsG0sX+u34MVPiUmDr4ud9dQXFP2
9YtwHUZau/vVYfr1MowgqwdOj5qFdU5rngFkyosnNr+4MX5mJw32tLa7l6IL
pPzr6vIK362C8iKS9KbUYqdAHZjQeiGSzPUc0BeJMtigMHp5TVa8PR5tda0n
QRU+mQgaw5kZaSKXrr3geLGRNQREVmdO5/wIgUcdSDoFtcrbgU+GXe5uqee6
2/tqyTe/8Ar24G+XYT6bpjzTwUtO/rlMTp7ugO3t2mbn7/94/7NvsMf/kTns
PUw8+MZ2/SWHfUwoDwk9/yQ57H2ec5cU9qcccYP6k71pWVzV4IrqSWw/M21l
1NRFpGUw9xzQWujaxoVLdOWhNR3V+xKlPPqG8A2TfRa0bIr3EJvS4o2ynh2d
uNCGs9uL970pTqdl1gP1zfkh+d/w5b8+XBV4DMmhNBWs/9etC7a60GP5gUWP
JzgOzmeYsdYO0ZEu5HOxAvmMET16GpPqbGIMry/uvA7NlPyFfD5qIbwAVNVZ
vZhOoOl9Fa/HrkNd1iT9XXSSSfqPukmi4oxLFbaKc2syIgqsYbZCb7J56m1m
gok6DyXt9pyIfh/xwrt3YNSNeHKS068QI6gYkZ/TN91lvgkpzGVUmyVmVkkS
WozNeCczj5roPqc6sIvNVjagmAKrUEXaIV9v/ve27bx0Dc6QRQ9QjaEG+54b
Qk8KTm31fNb+z1ZrEwfaLNl2JpspxoiBpkhaitZ29Xnv6I7fXf+RD4lOpdZe
G6OScXDDISaHAO3CRHixS5tcoHqCDwr0WrgL/YN6ruB+WX83YYasW3ULrZOU
H/SEmKzCjgdGco0HTf+PXuH5tr0x5eKvSbc0zO5Mq6aUBfN5XWkN+xVgTu2/
OHv+Cq4qIMsAzqqVoXL2NWdrOIWYExjlBKJMKHpt/+vTkwP1pOroVxioVPtP
TvUwAKc6tm5ygQKn3XvZXq0/0aMWvi5Bd1xU0R6zH+JtCVId+733kuwT4g/O
Ob1v3VSX8MhTHyNhq/2gmSeQoR7yTB+QxVXp6oM9N6lv9384e/H8YEraLDzz
/O2jR5/zc1NiJBz7maqrwUEprmBWTQkABS8QQDyt6EqE8lBu4KZCL3P/h6ff
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

-->

</rfc>

