TEAS Working Group                                           Xufeng Liu
Internet Draft                                                 Ericsson
Intended status: Standards Track                           Igor Bryskin
                                                    Huawei Technologies
                                                    Vishnu Pavan Beeram
                                                       Juniper Networks
                                                             Tarek Saad
                                                      Cisco Systems Inc
                                                          Himanshu Shah
                                                                  Ciena
                                                 Oscar Gonzalez De Dios
                                                             Telefonica

Expires: September 21, 2016                              March 21, January 8, 2017                                   July 8, 2016

                     YANG Data Model for TE Topologies
                      draft-ietf-teas-yang-te-topo-04
                      draft-ietf-teas-yang-te-topo-05

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html

   This Internet-Draft will expire on September 21, 2016. January 8, 2017.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors. All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document. Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Abstract

   This document defines a YANG data model for representing, retrieving
   and manipulating TE Topologies. The model serves as a base model that
   other technology specific TE Topology models can augment.

Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC-2119 [RFC2119].

Table of Contents

   1. Introduction...................................................3
      1.1. Terminology...............................................4
      1.2. Tree Structure - Legend...................................4
      1.3. Prefixes in Data Node Names...............................5
   2. Characterizing TE Topologies...................................5
   3. Modeling Abstractions and Transformations......................7
      3.1. TE Topology...............................................7
      3.2. TE Node...................................................7
      3.3. TE Link...................................................8
      3.4. Transitional TE Link for Multi-Layer Topologies...........8
      3.5. TE Link Termination Point (LTP)...........................8
      3.5. (LTP)..........................10
      3.6. TE Tunnel Termination Point (TTP).........................8
      3.6. (TTP)........................10
      3.7. TE Node Connectivity Matrix...............................8
      3.7. Matrix..............................11
      3.8. TTP Local Link Connectivity List (LLCL)...................9
      3.8. TE Path...................................................9 (LLCL)..................11
      3.9. Underlay TE topology......................................9 Path..................................................11
      3.10. Overlay TE topology......................................9 Inter-Layer Lock.....................................11
      3.11. Underlay TE topology....................................13
      3.12. Overlay TE topology.....................................13
      3.13. Abstract TE topology.....................................9 topology....................................13
   4. Model Applicability...........................................11 Applicability...........................................14
      4.1. Native TE Topologies.....................................11 Topologies.....................................14
      4.2. Customized TE Topologies.................................13 Topologies.................................16
      4.3. Merging TE Topologies Provided by Multiple Providers.....18
      4.4. Dealing with Multiple Abstract TE Topologies Provided by the
      Same Provider.................................................22
   5. Modeling Considerations.......................................15 Considerations.......................................25
      5.1. Generic network topology building blocks.................15 blocks.................25
      5.2. Technology agnostic TE Topology model....................16 model....................25
      5.3. Model Structure..........................................16 Structure..........................................26
      5.4. Topology Identifiers.....................................18 Identifiers.....................................27
      5.5. Generic TE Link Attributes...............................18 Attributes...............................28
      5.6. Generic TE Node Attributes...............................19 Attributes...............................28
      5.7. TED Information Sources..................................19 Sources..................................29
      5.8. Overlay/Underlay Relationship............................20 Relationship............................30
      5.9. Scheduling Parameters....................................22 Parameters....................................31
      5.10. Templates...............................................22 Templates...............................................31
      5.11. Notifications...........................................23 Notifications...........................................32
      5.12. Open Items..............................................23 Items..............................................33
   6. Tree Structure................................................23
      6.1. Base TE Topology Module..................................23
      6.2. Packet Switching TE Topology Module......................49 Structure................................................33
   7. TE Topology Yang Modules......................................50
      7.1. Base TE Topology Module..................................50
      7.2. Packet Switching TE Topology Module......................94 Module.......................................62
   8. Security Considerations.......................................98 Considerations......................................105
   9. IANA Considerations...........................................98 Considerations..........................................105
   10. References...................................................99 References..................................................106
      10.1. Normative References....................................99 References...................................106
      10.2. Informative References..................................99 References.................................106
   11. Acknowledgments.............................................100
   Contributors....................................................100 Acknowledgments.............................................107
   Contributors....................................................107
   Authors' Addresses..............................................100 Addresses..............................................107

1. Introduction

   The Traffic Engineering Database (TED) is an essential component of
   Traffic Engineered (TE) systems that are based on MPLS-TE [RFC2702]
   and GMPLS [RFC3945]. The TED is a collection of all TE information
   about all TE nodes and TE links in the network. The TE Topology is a
   schematic arrangement of TE nodes and TE links present in a given
   TED. There could be one or more TE Topologies present in a given
   Traffic Engineered system. The TE Topology is the topology on which
   path computational algorithms are run to compute Traffic Engineered
   Paths (TE Paths).

   This document defines a YANG [RFC6020] data model for representing
   and manipulating TE Topologies. This model contains technology
   agnostic TE Topology building blocks that can be augmented and used
   by other technology-specific TE Topology models.

1.1. Terminology

   TED: The Traffic Engineering Database is a collection of all TE
   information about all TE nodes and TE links in a given network.

   TE-Topology: The TE Topology is a schematic arrangement of TE nodes
   and TE links in a given TED. It forms the basis for a graph suitable
   for TE path computations.

   Native TE Topology: Native TE Topology is a topology that is native
   to a given provider network. Native TE topology could be discovered
   via various routing protocols and/or subscribe/publish techniques.
   This is the topology on which path computational algorithms are run
   to compute TE Paths.

   Customized TE Topology: Customized TE Topology is a custom topology
   that is produced by a provider for a given Client. This topology
   typically augments the Client's Native TE Topology. Path
   computational algorithms aren't typically run on the Customized TE
   Topology; they are run on the Client's augmented Native TE Topology.

1.2. Tree Structure - Legend

   A simplified graphical representation of the data model is presented
   in Section 6. of this document. The following notations are used for
   the YANG model data tree representation.

      <status> <flags> <name> <opts> <type>

        <status> is one of:
          +  for current
          x  for deprecated
          o  for obsolete

        <flags> is one of:
          rw  for read-write configuration data
          ro  for read-only non-configuration data
          -x  for execution rpcs
          -n  for notifications

        <name> is the name of the node

         If the node is augmented into the tree from another module, its
         name is printed as <prefix>:<name>

        <opts> is one of:

          ? for an optional leaf or node
          ! for a presence container
          * for a leaf-list or list
          Brackets [<keys>] for a list's keys
          Curly braces {<condition>} for optional feature that make node
          conditional

          Colon : for marking case nodes
          Ellipses ("...") subtree contents not shown

          Parentheses enclose choice and case nodes, and case nodes are
          also marked with a colon (":").

        <type> is the name of the type for leafs and leaf-lists.

1.3. Prefixes in Data Node Names

   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 Table 1.

               +--------+-----------------+-----------+
               | Prefix | YANG module     | Reference |
               +--------+-----------------+-----------+
               | yang   | ietf-yang-types | [RFC6991] |
               | inet   | ietf-inet-types | [RFC6991] |
               +--------+-----------------+-----------+

             Table 1: Prefixes and corresponding YANG modules

2. Characterizing TE Topologies

   The data model proposed by this document takes the following
   characteristics of TE Topologies into account:

   - TE Topology is an abstract control-plane representation of the
     data-plane topology. Hence attributes specific to the data-plane
     must make their way into the corresponding TE Topology modeling.
     The TE Topology comprises of dynamic auto-discovered data (data
     that may change frequently - example: unreserved bandwidth
     available on data-plane links) as well as fairly static data (data
     that rarely changes- examples: layer network identification,
     switching and adaptation capabilities and limitations, fate
     sharing, administrative colors) associated with data-plane nodes
     and links. It is possible for a single TE Topology to encompass TE
     information at multiple switching layers.

   - TE Topologies are protocol independent. Information about
     topological elements may be learnt via link-state protocols, but
     the topology can exist without being dependent on any particular
     protocol.

   - TE Topology may not be congruent to the routing topology (topology
     constructed based on routing adjacencies) in a given TE System.
     There isn't always a one-to-one association between a TE-link and
     a routing adjacency. For example, the presence of a TE link
     between a pair of nodes doesn't necessarily imply the existence of
     a routing-adjacency between these nodes.

   - Each TE Topological element has an information source associated
     with it. In some scenarios, there could be more than one
     information source associated with each topological element.

   - TE Topologies can be hierarchical. Each node and link of a given
     TE Topology can be associated with respective underlay topology.
     This means that each node and link of a given TE Topology can be
     associated with an independent stack of supporting TE Topologies.

   - TE Topologies can be customized. TE topologies of a given network
     presented by the network provider to its client could be
     customized on per-client request basis. This customization could
     be performed by provider, by client or by provider/client
     negotiation. The relationship between a customized topology (as
     presented to the client) and provider's native topology (as known
     in its entirety to the provider itself) could be captured as
     hierarchical (overlay-underlay), but otherwise the two topologies
     are decoupled from each other.

3. Modeling Abstractions and Transformations

      Node-1                                            Node-3
   +------------+                                    +------------+
   |    TTP-1   |                                    |    TTP-1   |
   |LTP  __     |           TE-Tunel-1               |     __     |
   |-6   \/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\/     |
   o    *  *    oLTP-1           Node-2         LTP-6o    *  *    o
   |   *    *   |           +------------+           |   *    *   |
   |  * TTP-2*  |           |            |           |  * TTP-2*  |
   | *   __   * |LTP-2 LTP-6|            |LTP-1 LTP-5| *   __   * |
   o*    \/    *o-----------o************o-----------o*    \/    *o
   |LTP *  *    | Link-12   |          * | Link-23   |    *  *    |
   |-5 *    *   |      LTP-5|        *   |LTP-2      |   *    *   |
   +--o------o--+           o************o           +--o------o--+
    LTP-4  LTP-3            | *   *    * |            LTP-4  LTP-3
                            |  **     *  |
                            +--o------o--+
                             LTP-4  LTP-3

                Figure 1: TE Topology Modeling Abstractions

3.1. TE Topology

   TE topology is a traffic engineering representation of one or more
   layers of network topologies. TE topology is comprised of TE nodes
   (TE graph vertices) interconnected via TE links (TE graph edges). A
   TE topology is mapped to a TE graph.

3.2. TE Node

   TE node is an element of a TE topology (presented as a vertex on TE
   graph). TE node represents one or several nodes (physical switches),
   or a fraction of a node. TE node belongs to and is fully defined in
   exactly one TE topology. TE node is assigned with the TE topology
   scope unique ID. TE node attributes include information related to
   the data plane aspects of the associated node(s) (e.g. connectivity
   matrix), as well as configuration data (such as TE node name). A
   given TE node can be reached on the TE graph over one of TE links
   terminated by the TE node.

   Multi-layer TE nodes providing switching functions at multiple
   network layers are an example where a physical node can be decomposed
   into multiple logical TE nodes (fractions of a node). Some of these
   (logical) TE nodes may reside in the client layer TE topology while
   the remaining TE nodes belong to the server layer TE topology.

   In Figure 1, Node-1, Node-2, and Node-3 are TE nodes.

3.3. TE Link

   TE link is an element of a TE topology (presented as an edge on TE
   graph, arrows indicate one or both directions of the TE link). TE
   link represents one or several (physical) links or a fraction of a
   link.  TE link belongs to and is fully defined in exactly one TE
   topology. TE link is assigned with the TE topology scope unique ID.
   TE link attributes include parameters related to the data plane
   aspects of the associated link(s) (e.g. unreserved bandwidth,
   resource maps/pools, etc.), as well as the configuration data (such
   as remote node/link IDs, SRLGs, administrative colors, etc.). TE link
   is connected to TE node, terminating the TE link via exactly one TE
   link termination point (LTP).

   In Figure 1, Link-12 and Link-23 are TE links.

3.4. Transitional TE Link Termination Point (LTP)

   TE link termination point (LTP) is a conceptual point of connection for Multi-Layer Topologies

   Networks are typically composed of a TE node to multiple network layers where one of
   or multiple signals in the TE links, terminated by client layer network can be multiplexed
   and encapsulated into a server layer signal. The server layer signal
   can be carried in the TE node.
   Cardinality between an LTP server layer network across multiple nodes
   until the server layer signal is terminated and the associated client layer
   signals reappear in the node that terminates the server layer signal.
   Examples of multi-layer networks are: IP over MPLS over Ethernet, low
   order ODUk signals multiplexed into a high order ODUl (l>k) carried
   over an OCh signal (optical transport network).

   TE link is 1:0..1.

   In Figure 1, Node-2 has six LTPs: LTP-1 links as defined in 3.3. can be used to LTP-6.

3.5. represent links within a
   network layer. In case of a multi-layer network, TE Tunnel Termination Point (TTP) nodes and TE tunnel termination point (TTP) is an element
   links only allow representation of each network layer as a separate
   TE topology
   representing one or several Each of potential transport service
   termination points (i.e. service these single layer TE topologies would be
   isolated from their client adaptation points such as
   WDM/OCh transponder). TTP is associated with (hosted by) exactly one and their server layer TE node. TTP is assigned with topology, if
   present (the highest and the TE lowest network layer in the hierarchy
   only have a single adjacent layer below or above, respectively).
   Multiplexing of client layer signals and encapsulating them into a
   server layer signal requires a function that is provided inside a
   node scope unique ID. Depending
   on (typically realized in hardware). This function is also called
   layer transition.

   One of the TE node's internal constraints, key requirements for path computation is to be able to
   calculate a given TTP hosted by path between two endpoints across a multi-layer network
   based on the TE
   node could be accessed via one, several or all topology representing this multi-layer network. This
   means that an additional TE links terminated by construct is needed that represents
   potential layer transitions in the multi-layer TE-topology that
   connects the TE-topologies representing each separate network layer.
   The so-called transitional TE node.

   In Figure 1, Node-1 has two TTPs: TTP-1 link is such a construct and TTP-2.

3.6. TE Node Connectivity Matrix

   TE it
   represents the layer transition function residing inside a node connectivity matrix that
   is decomposed into multiple logical nodes that are represented as TE
   nodes. Hence, a transitional TE node's attribute describing the link connects a client layer node
   with a server layer node. A TE node's switching limitations link as defined in a form of valid switching
   combinations 3.3. has LTPs of
   exactly the same kind on each link end whereas the transitional TE node's
   link has client layer LTPs (see below). From on the point of
   view client side of a potential TE path arriving at the TE node at transitional
   link and in most cases a given
   inbound LTP, the node's connectivity matrix describes valid
   (permissible) outbound LTPs for single server layer LTP on the TE path to leave server side.
   It should be noted that transitional links are a helper construct in
   the multi-layer TE node
   from.

   In Figure 1, the connectivity matrix on Node-2 is:
   {<LTP-6, LTP-1>, <LTP-5, LTP-2>, <LTP-5, LTP-4>, <LTP-4, LTP-1>,
   <LTP-3, LTP-2>}

3.7. TTP Local Link Connectivity List (LLCL)

   TTP Local Link Connectivity List (LLCL) is a List topology and they only exist as long as they are
   not in use (as they represent potential connectivity). When the
   server layer trail has been established between the server layer LTP
   of TE two transitional links
   terminated by in the TTP hosting TE node (i.e. list of server layer network, the TE resulting
   client layer link
   LTPs), which in the TTP could data plane will be connected to. From represented as a normal
   TE link in the client layer topology. The transitional TE links will
   re-appear when the server layer trail has been torn down.

      +------------------+
      | +------+         |                          +------+
   -----|Client|------+  |              Client -----|Client|
      | |Layer |---+  |  |              Layer       |Layer |
   -----|Switch|-+ |  |  |              Links  -----|Node  |
      | +------+ | |  |  |                          +------+
      |          | |  |  | Client                    | |  |
      |          | | ---_| Layer                     --- ---
   ***|**********|*| \ /*|***************************\ /*\ /****
      |          ---  |  | Server       Transitional  |   |
      |    Layer \ /  |  | Layer               Links  |   |
      |    Term.  |   |  |                            |   |
      |           |   |  |                            |   |
      |         +------+ |                          +------+
   =============|Server|=====            Server ====|Server|====
      |         |Layer | |               Layer      |Layer |
   =============|Switch|=====            Links  ====|Node  |====
      |         +------+ |                          +------+
      +------------------+

       Physical Node View                       TE-Topology View

       Figure 2: Modeling a Multi-Layer Node (Dual-Layer Example)

3.5. TE Link Termination Point (LTP)

   TE link termination point (LTP) is a conceptual point of view connection
   of a potential TE path LLCL provides a list node to one of valid TE links the TE
   path needs to start/stop on for the connection, taking links, terminated by the TE path,
   to be successfully terminated on node.
   Cardinality between an LTP and the TTP in question. associated TE link is 1:0..1.

   In Figure 1, the LLCL on Node-1 is:
   {<TTP-1, LTP-5>, <TTP-1, LTP-2>, <TTP-2, LTP-3>, <TTP-2, LTP4>}

3.8. TE Path Node-2 has six LTPs: LTP-1 to LTP-6.

3.6. TE path Tunnel Termination Point (TTP)

   TE tunnel termination point (TTP) is an ordered list element of TE links and/or topology
   representing one or several of potential transport service
   termination points (i.e. service client adaptation points such as
   WDM/OCh transponder). TTP is associated with (hosted by) exactly one
   TE nodes node. TTP is assigned with the TE node scope unique ID. Depending
   on the TE
   topology graph, inter-connecting node's internal constraints, a pair of TTPs to be taken given TTP hosted by a
   potential connection. the TE paths, for example,
   node could be a product of
   successful path computation performed for a given transport service. accessed via one, several or all TE links terminated by
   the TE node.

   In Figure 1, the TE Path for TE-Tunnel-1 is:
   {Node-1:TTP-1, Link-12, Node-2, Link-23, Node-3:TTP1}

3.9. Underlay Node-1 has two TTPs: TTP-1 and TTP-2.

3.7. TE topology

   Underlay Node Connectivity Matrix

   TE topology node connectivity matrix is a TE topology that serves as a base for
   constructing of overlay TE topologies

3.10. Overlay TE topology

   Overlay node's attribute describing the
   TE topology is node's switching limitations in a TE topology constructed based on one or more
   underlay TE topologies. Each TE node form of valid switching
   combinations of the overlay TE topology
   represents an arbitrary segment node's LTPs (see below). From the point of an underlay TE topology; each TE
   link
   view of the overlay TE topology represents an arbitrary a potential TE path in
   one of arriving at the underlay TE topologies. The overlay TE topology and node at a given
   inbound LTP, the
   supporting underlay TE topologies may represent distinct layer
   networks (e.g. OTN/ODUk and WDM/OCh respectively) or node's connectivity matrix describes valid
   (permissible) outbound LTPs for the same layer
   network.

3.11. Abstract TE topology

   Abstract path to leave the TE topology node
   from.

   In Figure 1, the connectivity matrix on Node-2 is:
   {<LTP-6, LTP-1>, <LTP-5, LTP-2>, <LTP-5, LTP-4>, <LTP-4, LTP-1>,
   <LTP-3, LTP-2>}

3.8. TTP Local Link Connectivity List (LLCL)

   TTP Local Link Connectivity List (LLCL) is an overlay a List of TE topology created links
   terminated by the TTP hosting TE node (i.e. list of the TE link
   LTPs), which the TTP could be connected to. From the point of view of
   a topology
   provider and customized for potential TE path LLCL provides a topology provider's client based on one
   or more list of valid TE links the provider's native TE topologies (underlay
   path needs to start/stop on for the connection, taking the TE
   topologies), path,
   to be successfully terminated on the provider's policies and TTP in question.

   In Figure 1, the client's preferences.
   For example, a first level topology provider (such as Domain
   Controller) can create LLCL on Node-1 is:
   {<TTP-1, LTP-5>, <TTP-1, LTP-2>, <TTP-2, LTP-3>, <TTP-2, LTP4>}

3.9. TE Path

   TE path is an abstract ordered list of TE links and/or TE nodes on the TE
   topology graph, inter-connecting a pair of TTPs to be taken by a
   potential connection. TE paths, for its client (e.g.
   Super Controller) based on example, could be a product of
   successful path computation performed for a given transport service.

   In Figure 1, the provider's one or more native TE
   topologies, local policies/profiles Path for TE-Tunnel-1 is:
   {Node-1:TTP-1, Link-12, Node-2, Link-23, Node-3:TTP1}

3.10. TE Inter-Layer Lock

   TE inter-layer lock is a modeling concept describing client-server
   layer adaptation relationships and hence important for the client's TE topology
   configuration requests

   Figure 2 shows multi-
   layer traffic engineering. It is an example association of abstract TE topology.

     +---+              +---+
     |s31|--------------|S5 |
     +---+\           / +---+
           \         /
            \       /
             \+---+/                +---+
             /|AN1|\----------------|S8 |
            / +---+ \               +---+
     +---+ /         \ +---+
     |S9 |-------------|S11|
     +---+             +---+
           Abstract TE Topology

            +---+                    +---+
            |S1 |--------------------|S2 |
            +---+                    +---+
             /                          \
            /                            \
     +---+ /                  +---+       \ +---+
     |s3 |--------------------|S4 |---------|S5 |
     +---+\                   +---+         +---+
           \                      \             \
            \                      \             \
             \+---+                 +---+         +---+
             /|S6 |\                |S7 |---------|S8 |
            / +---+ \               +---+\       /+---+
     +---+ /         \ +---+              +---+ /
     |S9 |-------------|S10|--------------|S11|/
     +---+             +---+              +---+
           Native TE Topology

         Figure 2: Abstract M client layer
   LTPs and N server layer TTPs, within which data arriving at any of
   the client layer LTPs could be adopted onto any of the server layer
   TTPs. TE Topology

4. Model Applicability

4.1. Native inter-layer lock is identified by inter-layer lock ID, which
   is unique across all TE Topologies topologies provided by the same provider. The model discussed in this draft can be used to represent
   client layer LIPs and
   retrieve native TE topologies on the server layer TTPs associated within a given
   TE system.

     +---+       +---+        +---+         +---+         +---+ inter-layer lock are decorated with the same inter-layer lock ID
   attribute.

             (IL-1) C-LTP-1 +------------+   C-LTP-2 (IL-1)
                    --------O   (IL-1)   O--------
             (IL-1) C-LTP-3 |   S-TTP-1  |   C-LTP-4 (IL-1)
                    --------O     __     0--------
             (IL-1) C-LTP-5 |    *\/*    |   C-LTP-5 (IL-1)
                    --------O   *    *   O--------
                            | R1|-------| R2|--------| R3|---------| R4|---------| R5|
     +---+       +---+        +---+         +---+         +---+  *(IL-1)*  |                      /   \         /   \         /
                    S-LTP-3 |                     /     \       /     \       / * S-TTP-2* |                    /       \     /       \     /   S-LTP-4
                    --------o*    __    *o--------
                            |                   /         \   /         \   /    *\/*    |                  /           \ /           \ /
     +---+             +---+         +---+         +---+
                            | R6|-------------| R7|   *    *   | R8|---------| R9|
     +---+             +---+         +---+         +---+
                            +--o------o--+
                       S-LTP-1 |      | S-LTP-2

             Figure 3a: Example Network Topology

   Consider 3: TE Inter-Layer Lock ID Associations

   On the network topology depicted in Figure 3a (R1 .. R9 are
   nodes representing routers). An implementation MAY choose to
   construct picture above a native TE Topology using all nodes and links present in
   the given TED as depicted in Figure 3b. The data model proposed in
   this document can be used to retrieve/represent this TE topology.

          ---------------
          | Native      |                   |  [ ] TE Node
          | TE-Topology |                   |  +++ TE Link
          ---------------                   o--------------

      [R1] ++++ [R2] ++++ [R3] ++++ [R4] ++++ [R5]
        +                +    +    +    +    +
        +               +      +  +      +  +
        +              +        ++        ++
      [R6] +++++++++ [R7]      [R8] ++++ [R9]

               Figure 3b: Native TE Topology as seen on Node R3

   Consider the case of inter-layer lock with IL_1 ID associates 6
   client layer LTPs (C-LTP-1 - C-LTP-6) with two server layer TTPs (S-
   TTP-1 and S-TTP-2). They all have the topology being split in a way that some
   nodes participate in OSPF-TE while others participate in ISIS-TE
   (Figure 4a). An implementation MAY choose to construct separate same attribute - TE
   Topologies based on inter-layer
   lock ID:  IL-1, which is the information source. The native TE Topologies
   constructed using only nodes and links thing that were learnt via a
   specific information source are depicted in Figure 4b. The data model
   proposed in indicates the
   association. A given LTP may have 0, 1 or more inter-layer lock IDs.
   In the latter case this document can be used to retrieve/represent these TE
   topologies.

   Similarly, means that the data model can arriving at the LTP may
   be used to represent/retrieve a TE
   Topology adopted onto any of TTPs associated with all specified inter-layer
   locks. For example, C-LTP-1 could have two inter-layer lock IDs - IL-
   1 and IL-2. This would mean that is constructed using only nodes C-LTP-1 for adaptation purposes
   could use not just TTPs associated with inter-layer lock IL-1 (i.e.
   S-TTP-1 and links S-TTP-2 on the picture), but any of TTPs associated with
   inter-layer lock IL-2 as well. Likewise, a given TTP may have one or
   more inter-layer lock IDs, meaning that belong it can offer the adaptation
   service to a particular technology layer. The data model is flexible enough
   to retrieve any of client layer LTPs with inter-layer lock ID matching
   one of its own. Additionally, each TTP has an attribute - Unreserved
   Adaptation Bandwidth, which announces its remaining adaptation
   resources sharable between all potential client LTPs.

   LTPs and represent many such native TE Topologies.

                                     :
   TE info distributed via ISIS-TE   :  TE info distributed via OSPF-TE
                                     :
          +---+       +---+        +---+         +---+         +---+
          | R1|-------| R2|--------| R3|---------| R4|---------| R5|
          +---+       +---+        +---+         +---+         +---+
            |                      / : \         /   \         /
            |                     /  :  \       /     \       /
            |                    /   :   \     /       \     /
            |                   /    :    \   /         \   /
            |                  /     :     \ /           \ /
          +---+             +---+    :    +---+         +---+
          | R6|-------------| R7|    :    | R8|---------| R9|
          +---+             +---+    :    +---+         +---+
                                     :

                    Figure 4a: Example Network Topology

           -----------------------   :  -----------------------
           |Native TE Topology   |   :  |Native TTPs associated within the same TE Topology   |
           |Info-Source: ISIS-TE |   :  |Info-Source: OSPF-TE |
           -----------------------   :  -----------------------
                                     :
            [R1] ++++ [R2] ++++ [R3] : [R3'] ++++ [R4] ++++ [R5]
             +                +      :      +    +    +    +
             +               +       :       +  +      +  +
             +              +        :        ++        ++
            [R6] +++++++++ [R7]      :       [R8] ++++ [R9]

               Figure 4b: Native inter-layer lock may be
   hosted by the same (hybrid, multi-layer) TE Topologies as seen on Node R3

4.2. Customized node or multiple TE Topologies

   The model discussed nodes
   located in this draft can be used to represent, retrieve
   and manipulate customized the same or separate TE Topologies. topologies. The model allows latter is
   especially important since TE topologies of different layer networks
   could be modeled by separate augmentations of the
   provider basic (common to present the network in abstract
   all layers) TE Terms on a per client
   basis. These customized topologies contain sufficient information topology model.

3.11. Underlay TE topology

   Underlay TE topology is a TE topology that serves as a base for
   constructing of overlay TE topologies

3.12. Overlay TE topology

   Overlay TE topology is a TE topology constructed based on one or more
   underlay TE topologies. Each TE node of the overlay TE topology
   represents an arbitrary segment of an underlay TE topology; each TE
   link of the overlay TE topology represents an arbitrary TE path computing in
   one of the underlay TE topologies. The overlay TE topology and the
   supporting underlay TE topologies may represent distinct layer
   networks (e.g. OTN/ODUk and WDM/OCh respectively) or the same layer
   network.

3.13. Abstract TE topology

   Abstract TE topology is an overlay TE topology created by a topology
   provider and customized for a topology provider's client to select paths according to based on one
   or more of the provider's native TE topologies (underlay TE
   topologies), the provider's policies and the client's preferences.
   For example, a first level topology provider (such as Domain
   Controller) can create an abstract TE topology for its policies.

                                  | +---+            /-\
                                  | |   | Router    (   ) WDM
                                  | +---+ Node       \-/  node
                                  |
                                  o---------------------------- client (e.g.
   Super Controller) based on the provider's one or more native TE
   topologies, local policies/profiles and the client's TE topology
   configuration requests

   Figure 4 shows an example of abstract TE topology.

     +---+        /-\          /-\           /-\              +---+
     |s31|--------------|S5 | R1|-------( A )--------( C )---------( E )---------| R3|
     +---+        \-/          \-/           \-/          +---+
                              /   \         /   \
     +---+\           / +---+
           \         /
            \       /       \
             \+---+/                +---+
             /|AN1|\----------------|S8 |
            / +---+ \               +---+
     +---+ /         \   / +---+
     |S9 |-------------|S11|
     +---+             +---+
           Abstract TE Topology

            +---+                    +---+
            |S1 |--------------------|S2 |
            +---+                    +---+
             /                          \
            /                            \
     +---+ /                  +---+       \ +---+          /-\           /-\           /-\
     |s3 |--------------------|S4 |---------|S5 |
     +---+\                   +---+         +---+
           \                      \             \
            \                      \             \
             \+---+                 +---+         +---+
             /|S6 |\                |S7 |---------|S8 | R2|---------( B )---------( D )---------( F )---------| R4|
            / +---+ \               +---+\       /+---+
     +---+ /         \ +---+              +---+ /
     |S9 |-------------|S10|--------------|S11|/
     +---+          \-/           \-/           \-/             +---+              +---+
           Native TE Topology

         Figure 5: Example packet optical topology

   Consider the network topology depicted 4: Abstract TE Topology

4. Model Applicability

4.1. Native TE Topologies

   The model discussed in Figure 5. This is a typical
   packet optical transport deployment scenario where the WDM layer
   network domain serves as a Server Network Domain providing transport
   connectivity to the packet layer network Domain (Client Network
   Domain). Nodes R1, R2, R3 and R4 are IP routers that are connected this draft can be used to
   an Optical WDM transport network. A, B, C, D, E represent and F are WDM nodes
   that constitute the Server Network Domain.

                                            | *****  B-F WDM Path
                                            | @@@@@  B-E WDM Path
                                            | $$$$$  A-E WDM Path
                                            o--------------------
   retrieve native TE topologies on a given TE system.

     +---+       +---+        +---+         +---+        /-\ $$$$$$$$ /-\ $$$$$$$$$ /-\         +---+
     | R1|-------( A )--------( C )---------( E )---------| R3| R1|-------| R2|--------| R3|---------| R4|---------| R5|
     +---+        \-/         @\-/ @@@@@@@@@ \-/       +---+
                             @/        +---+         +---+         +---+
       |                      /   \         /   \
                            @/         /
       |                     /     \       /     \
                           @/       /
       |                    /       \     /       \
                          @/     /
       |                   /         \   /         \
                         @/   /
       |                  /           \ /           \ /
     +---+             +---+         +---+         +---+
     | R6|-------------| R7|         | R8|---------| R9|
     +---+          /-\ ********* /-\ ********* /-\             +---+
         | R2|---------( B )---------( D )---------( F )---------| R4|         +---+          \-/           \-/           \-/         +---+

               Figure 6a: Paths within the provider domain
                 ++++++++ [A] ++++++++++++++++++++ [E] +++++++++
                                              +++++
                                          ++++
                                      ++++
                                  ++++
                              ++++
                 ++++++++ [B] ++++++++++++++++++++ [F] +++++++++

         Figure 6b: Customized TE 5a: Example Network Topology provided to

   Consider the Client

   The goal here is network topology depicted in Figure 5a (R1 .. R9 are
   nodes representing routers). An implementation MAY choose to augment the Client TE Topology with
   construct a customized native TE Topology provided by the WDM network. Given the availability of
   the paths A-E, B-F using all nodes and B-E (Figure 6a), a customized TE Topology links present in
   the given TED as depicted in Figure 6b is provided 5b. The data model proposed in
   this document can be used to the Client. This customized retrieve/represent this TE
   Topology is merged with the Client's topology.

          ---------------
          | Native      |                   |  [ ] TE Topology and the
   resulting topology is depicted in Figure 6c. Node
          | TE-Topology |                   |  +++ TE Link
          ---------------                   o--------------

      [R1] ++++++++ [A] ++++++++++++++++++++ [E] +++++++++ [R3]
                                              +++++ ++++ [R2] ++++ [R3] ++++ [R4] ++++
            [R2] ++++++++ [B] ++++++++++++++++++++ [F] [R5]
        +                +    +    +    +    +
        +               +      +  +      +  +
        +              +        ++        ++
      [R6] +++++++++ [R4] [R7]      [R8] ++++ [R9]

               Figure 6c: Customized 5b: Native TE Topology merged with as seen on Node R3

   Consider the Client's Native case of the topology being split in a way that some
   nodes participate in OSPF-TE while others participate in ISIS-TE
   (Figure 6a). An implementation MAY choose to construct separate TE
                                 Topology
   Topologies based on the information source. The native TE Topologies
   constructed using only nodes and links that were learnt via a
   specific information source are depicted in Figure 6b. The data model
   proposed in this document can be used to
   retrieve/represent/manipulate the customized retrieve/represent these TE Topology depicted in
   Figure 6b.

5. Modeling Considerations

5.1. Generic network topology building blocks

   The generic network topology building blocks are discussed in [YANG-
   NET-TOPO]. The
   topologies.

   Similarly, the data model can be used to represent/retrieve a TE
   Topology that is constructed using only nodes and links that belong
   to a particular technology layer. The data model proposed in this document augments is flexible enough
   to retrieve and uses the ietf-network-topology module defined in [YANG-NET-TOPO].

                  +------------------------+
                  |       Generic represent many such native TE Topologies.

                                     :
   TE info distributed via ISIS-TE   :  TE info distributed via OSPF-TE
                                     :
          +---+       +---+        +---+         +---+         +---+
          | R1|-------| R2|--------| R3|---------| R4|---------| R5|
          +---+       +---+        +---+         +---+         +---+
            | Network Topology Model                      / : \         /   \         /
            |                     /  :  \       /     \       /
            | (ietf-network-topology)|
                  +------------------------+                    /   :   \     /       \     /
            |                   /    :    \   /         \   /
            |                  /     :     \ /           \ /
          +---+             +---+    :    +---+         +---+
          |
                               V
                  +------------------------+ R6|-------------| R7|    :    | R8|---------| R9|
          +---+             +---+    :    +---+         +---+
                                     :

                    Figure 6a: Example Network Topology

           -----------------------   :  -----------------------
           |Native TE Topology   |   :  |Native TE Topology   |         Model          |
           |Info-Source: ISIS-TE |   :  |Info-Source: OSPF-TE |
                  +------------------------+
           -----------------------   :  -----------------------
                                     :
            [R1] ++++ [R2] ++++ [R3] : [R3'] ++++ [R4] ++++ [R5]
             +                +      :      +    +    +    +
             +               +       :       +  +      +  +
             +              +        :        ++        ++
            [R6] +++++++++ [R7]      :       [R8] ++++ [R9]

               Figure 7: Augmenting the Generic Network Topology Model

5.2. Technology agnostic 6b: Native TE Topology model

   The Topologies as seen on Node R3

4.2. Customized TE Topology Topologies

   The model proposed discussed in this document is meant to be
   technology agnostic. Other technology specific TE Topology models draft can
   augment be used to represent, retrieve
   and use manipulate customized TE Topologies. The model allows the building blocks provided by
   provider to present the proposed model.

                     +-------------------+
                     |     Generic       |
                     | network in abstract TE Topology Model |
                     +-------------------+
                               |
            +-------------+-------------+-------------+
            |             |             |             |
            V             V             V             V
      +------------+                            +------------+
      | Technology |                            | Technology |
      |  Specific  |   ...................... Terms on a per client
   basis. These customized topologies contain sufficient information for
   the path computing client to select paths according to its policies.

                                  |  Specific +---+            /-\
                                  | | TE Topology|   | TE Topology| Router    (   ) WDM
                                  |   Model 1 +---+ Node       \-/  node
                                  |
                                  o----------------------------

     +---+        /-\          /-\           /-\          +---+
     |   Model n R1|-------( A )--------( C )---------( E )---------| R3|
     +---+        \-/          \-/           \-/          +---+
                              /   \         /   \
                             /     \       /     \
                            /       \     /       \
                           /         \   /         \
                          /           \ /           \
         +---+          /-\           /-\           /-\          +---+
         |
      +------------+                            +------------+ R2|---------( B )---------( D )---------( F )---------| R4|
         +---+          \-/           \-/           \-/          +---+

               Figure 8: Augmenting 7: Example packet optical topology

   Consider the Technology agnostic TE Topology model

5.3. Model Structure

   The high-level model structure proposed by this document network topology depicted in Figure 7. This is a typical
   packet optical transport deployment scenario where the WDM layer
   network domain serves as shown
   below:

   module: ietf-te-topology
   augment /nw:networks/nw:network/nw:network-types:
      +--rw te-topology!

   augment /nw:networks:
      +--rw te!
         +--rw templates
            +--rw node-template* [name] {template}?
            |  ............
            +--rw link-template* [name] {template}?
               ............

   augment /nw:networks/nw:network:
      +--rw te!
         +--rw provider-id       te-global-id
         +--rw client-id         te-global-id
         +--rw te-topology-id    te-topology-id
         +--rw config
         |  ............
         +--ro state
            ............

   augment /nw:networks/nw:network/nw:node:
      +--rw te!
         +--rw te-node-id    te-node-id
         +--rw config
         |  ............
         +--ro state a Server Network Domain providing transport
   connectivity to the packet layer network Domain (Client Network
   Domain). Nodes R1, R2, R3 and R4 are IP routers that are connected to
   an Optical WDM transport network. A, B, C, D, E and F are WDM nodes
   that constitute the Server Network Domain.

                                            |  ............
         +--rw tunnel-termination-point* [tunnel-tp-id]
            +--rw tunnel-tp-id    binary
            +--rw config *****  B-F WDM Path
                                            |  ............
            +--ro state

   augment /nw:networks/nw:network/nt:link:
      +--rw te!
         +--rw config @@@@@  B-E WDM Path
                                            |  ..........
         +--ro state
            ..........

   augment /nw:networks/nw:network/nw:node/nt:termination-point:
      +--rw te!
         +--rw te-tp-id    te-tp-id
         +--rw config $$$$$  A-E WDM Path
                                            o--------------------

     +---+        /-\ $$$$$$$$ /-\ $$$$$$$$$ /-\          +---+
     |  ............

         +--ro state
            ............

   notifications:
      +---n te-node-event R1|-------( A )--------( C )---------( E )---------| R3|
     +---+        \-/         @\-/ @@@@@@@@@ \-/          +---+
                             @/   \         /   \
                            @/     \       /     \
                           @/       \     /       \
                          @/         \   /         \
                         @/           \ /           \
         +---+          /-\ ********* /-\ ********* /-\          +---+
         |  ............
      +---n te-link-event
         ............

5.4. R2|---------( B )---------( D )---------( F )---------| R4|
         +---+          \-/           \-/           \-/          +---+

                Figure 8a: Paths within the provider domain
                 ++++++++ [A] ++++++++++++++++++++ [E] +++++++++
                                              +++++
                                          ++++
                                      ++++
                                  ++++
                              ++++
                 ++++++++ [B] ++++++++++++++++++++ [F] +++++++++

         Figure 8b: Customized TE Topology Identifiers provided to the Client

   The TE-Topology goal here is uniquely identified by a key that has 3
   constituents - te-topology-id, provider-id and client-id. The
   combination of provider-id and te-topology-id uniquely identifies a
   native to augment the Client TE Topology on with a given provider. The client-id is used only
   when Customized customized
   TE Topologies come into play; a value Topology provided by the WDM network. Given the availability of "0" is used
   as
   the client-id for native paths A-E, B-F and B-E (Figure 8a), a customized TE Topologies.

   augment /nw:networks/nw:network:
      +--rw te!
         +--rw provider-id       te-global-id
         +--rw client-id         te-global-id
         +--rw te-topology-id    te-topology-id

5.5. Generic Topology as
   depicted in Figure 8b is provided to the Client. This customized TE Link Attributes

   The model covers
   Topology is merged with the definitions for generic Client's Native TE Link attributes -
   bandwidth, admin groups, SRLGs, switching capabilities, Topology and the
   resulting topology is depicted in Figure 8c.

            [R1] ++++++++ [A] ++++++++++++++++++++ [E] +++++++++ [R3]
                                              +++++
                                          ++++
                                      ++++
                                  ++++
                              ++++
            [R2] ++++++++ [B] ++++++++++++++++++++ [F] +++++++++ [R4]

   Figure 8c: Customized TE metric
   extensions etc.

     +--rw te-link-attributes
        .....................
        +--rw admin-status?                     te-admin-status
        +--rw performance-metric-throttle {te-performance-metric}?
        |  .....................
        +--rw link-index?                       uint64
        +--rw administrative-group?             te-types:admin-groups
        +--rw max-link-bandwidth?               decimal64
        +--rw max-resv-link-bandwidth?          decimal64
        +--rw unreserved-bandwidth* [priority]
        |  .....................
        +--rw te-default-metric?                uint32
        +--rw performance-metric {te-performance-metric}?
        |  .....................
        +--rw link-protection-type?             enumeration
        +--rw interface-switching-capability* [switching-capability]
        |  .....................
        +--rw te-srlgs
           .....................

5.6. Generic Topology merged with the Client's Native TE Node Attributes
                                 Topology

   The data model covers proposed in this document can be used to
   retrieve/represent/manipulate the definitions for generic customized TE Node attributes.

   The definition Topology depicted in
   Figure 8b.

4.3. Merging TE Topologies Provided by Multiple Providers

   A client may receive TE topologies provided by multiple providers,
   each of which managing a generic connectivity matrix is shown below:

     +--rw te-node-attributes
        ...........
        +--rw connectivity-matrix* [id]
        |  +--rw id            uint32
        |  +--rw from
        |  |  +--rw tp-ref?        leafref
        |  +--rw separate domain of multi-domain network. In
   order to
        |  |  +--rw tp-ref?        leafref
        |  +--rw is-allowed?   boolean

   The definition make use of a TTP Local Link Connectivity List is shown below:

     +--rw tunnel-termination-point* [tunnel-tp-id]
        +--rw tunnel-tp-id    binary
        +--rw config
        |  +--rw termination-capability* [link-tp]
        |     +--rw link-tp    leafref
        +--ro state
           +--ro termination-capability* [link-tp]
           |  +--ro link-tp    leafref
           +--ro switching-capability      identityref
           +--ro encoding                  identityref

5.7. TED Information Sources

   The model allows each TE topological element to have multiple TE
   information sources (OSPF-TE, ISIS-TE, BGP-LS, User-Configured,
   System-Processed, Other). Each information source said topologies, the client is associated with
   a credibility preference expected to indicate precedence. In scenarios where a
   customized merge
   the provided TE Topology is merged topologies into a Client's one or more client's native TE Topology,
   topologies, each of which homogeneously representing the merged topological elements would point to multi-domain
   network. This makes it possible for the corresponding
   customized client to select end-to-end
   TE Topology as paths for its information source.

   augment /nw:networks/nw:network/nw:node:
      +--rw te!
         ...........
         +--ro state
            ........
            +--ro information-source?         enumeration
            +--ro information-source-state
               +--ro credibility-preference?   uint16
               +--ro topology
               |  +--ro provider-id-ref?      leafref
               |  +--ro client-id-ref?        leafref
               |  +--ro te-topology-id-ref?   leafref
               |  +--ro network-id-ref?       leafref
               +--ro routing-instance?         string

   augment /nw:networks/nw:network/nt:link:
      +--rw te!
         ...........
         +--ro state
            .........
            +--ro information-source?         enumeration
            +--ro information-source-state
            |  +--ro credibility-preference?   uint16
            |  +--ro topology
            |  |  +--ro provider-id-ref?      leafref
            |  |  +--ro client-id-ref?        leafref
            |  |  +--ro te-topology-id-ref?   leafref
            |  |  +--ro network-id-ref?       leafref
            |  +--ro routing-instance?         string
            +--ro alt-information-sources* [information-source]
            |  ............

5.8. Overlay/Underlay Relationship

   The model captures overlay services traversing multiple domains.

   In particular, the process of merging TE topologies includes:

   - Identifying neighboring domains and underlay relationship for locking their topologies
     horizontally by connecting their inter-domain open-ended TE
   nodes/links. For example links;
   - in networks where multiple Renaming TE Topologies
   are built hierarchically, this model allows the user node, link, and SRLG IDs to start ones allocated from a
   specific topological element in the top most topology and traverse
     separate name space; this is necessary because all TE topologies
     are considered to be, generally speaking, independent with a
     possibility of clashes among TE node, link or SRLG IDs;
   - Locking, vertically, TE topologies associated with different layer
     networks, according to provided topology inter-layer locks; this is
     to facilitate inter-layer path computations across multiple TE
     topologies provided by the way down same topology provider.

     /---\      +---+    +---+      +---+    +---+      /---\
     |s3 |------|S13|----|S15|------|S23|----|S25|------|C21|
     \---/      +---+\   +---+      +---+   /+---+      \---/
                      \                    /
                       \                  /
                        \+---+      +---+/   +---+      /---\
                         |S18|------|S24|    |S28|------|C22|
                         +---+      +---+\  /+---+      \---/
                                          \/
                                          /\
     /---\      +---+    +---+      +---+/  \+---+      /---\
     |C12|------|S19|----|S17|------|S29|----|S27|------|C23|
     \---/      +---+    +---+      +---+    +---+      \---/

        Domain 1 TE Topology              Domain 2 TE Topology

             +---+    +---+                  +---+    +---+
        -----|S13|----|S15|----          ----|S23|----|S25|----
             +---+\   +---+                  +---+   /+---+
                   \                                /
                    \                              /
                     \+---+                  +---+/   +---+
                      |S18|----          ----|S24|    |S28|----
                      +---+                  +---+\  /+---+
                                                   \/
                                                   /\
             +---+    +---+                  +---+/  \+---+
        -----|S19|----|S17|----          ----|S29|----|S27|----
             +---+    +---+                  +---+    +---+

         Figure 9: Merging Domain TE Topologies

   Figure 9 illustrates the process of merging, by the client, of TE
   topologies provided by the client's providers. In the Figure, each of
   the two providers caters to the supporting topological elements in client (abstract or native) TE
   topology, describing the bottom
   most topology.

   This relationship network domain under the respective
   provider's control. The client, by consulting the attributes of the
   inter-domain TE links - such as inter-domain plug IDs or remote TE
   node/link IDs (as defined by the TE Topology model) - is captured able to
   determine that:

   a) the two domains are adjacent and are inter-connected via three
     inter-domain TE links, and;

   b) each domain is connected to a separate customer site, connecting
     the "underlay-topology" field for left domain in the node Figure to customer devices C-11 and C-12,
     and via the "underlay" field for right domain to customer devices C-21, C-22 and C-23.

   Therefore, the link. The use client inter-connects the open-ended TE links, as
   shown on the upper part of these
   fields the Figure.

   As mentioned, one way to inter-connect the open-ended inter-domain TE
   links of neighboring domains is optional and to mandate the providers to specify
   remote nodeID/linkID attribute in the provided inter-domain TE links.
   This, however, may prove to be not flexible. For example, the
   providers may not know the respective remote nodeIDs/ linkIDs. More
   importantly, this functionality is tagged as a "feature"
   ("te-topology-hierarchy").

   augment /nw:networks/nw:network/nw:node:
      +--rw te!
         +--rw te-node-id    te-node-id
         +--rw config
         |  +--rw te-node-template*     leafref {template}?
         |  +--rw te-node-attributes
         |     ....................
         |     +--rw underlay-topology {te-topology-hierarchy}?
         |        +--rw provider-id-ref?      leafref
         |        +--rw client-id-ref?        leafref
         |        +--rw te-topology-id-ref?   leafref
         |        +--rw network-id-ref?       leafref

   augment /nw:networks/nw:network/nt:link:
      +--rw te!
         +--rw config
         |  .........
         |  +--rw te-link-attributes
         |     ....................
         |     +--rw underlay! {te-topology-hierarchy}?
         |     |  +--rw underlay-primary-path
         |     |  |  +--rw provider-id-ref?      leafref
         |     |  |  +--rw client-id-ref?        leafref
         |     |  |  +--rw te-topology-id-ref?   leafref
         |     |  |  +--rw network-id-ref?       leafref
         |     |  |  +--rw path-element* [path-element-id]
         |     |  |     ...............
         |     |  +--rw underlay-backup-path* [index]
         |     |  |  +--rw index                 uint32
         |     |  |  +--rw provider-id-ref?      leafref
         |     |  |  +--rw client-id-ref?        leafref
         |     |  |  +--rw te-topology-id-ref?   leafref
         |     |  |  +--rw network-id-ref?       leafref
         |     |  |  +--rw path-element* [path-element-id]
         |     |  |     ...............
         |     |  +--rw underlay-protection-type?   uint16
         |     |  +--rw underlay-trail-src
         |     |  |  ...........
         |     |  |  +--rw network-ref?   leafref
         |     |  +--rw underlay-trail-des
         |     |     ...........

5.9. Scheduling Parameters

   The model allows time scheduling parameters to be specified for each
   topological element or for the topology as a whole. These parameters option does not allow for the provider client to present different topological views mix-n-match
   multiple (more than one) topologies catered by the same providers
   (see below). Another, more flexible, option to resolve the
   client at different time slots. The use of "scheduling parameters" is
   optional and this functionality is tagged as a "feature"
   ("configuration-schedule"). The YANG data model for configuration
   scheduling open-ended
   inter-domain TE links is defined in [YANG-SCHEDULE] and imported by decorating them with the TE
   Topology module.

5.10. Templates

   The data model provides inter-domain
   plug ID attribute. Inter-domain plug ID is a network-wide unique
   number that identifies on the users network a connectivity supporting a
   given inter-domain TE link. Instead of specifying remote node ID/link
   ID, an inter-domain TE link may provide a non-zero inert-domain plug
   ID. It is expected that two neighboring domain TE topologies
   (provided by separate providers) will have each at least one open-
   ended inter-domain TE link with the ability to define
   templates and apply them an inter-domain plug ID matching to
   one provided by its neighbor. For example, the inter-domain TE link
   originating from node S5 of the Domain 1 TE topology (Figure 1) and
   the inter-domain TE link coming from node configurations. The use S3 of
   "template" configuration is optional Domain2 TE topology
   may specify matching inter-domain plug ID (e.g. 175344)  This allows
   for the client to identify adjacent nodes in the separate neighboring
   TE topologies and this functionality is tagged resolve the inter-domain TE links connecting them
   regardless of their respective nodeIDs/linkIDs (which, as a "feature" ("template").

     +--rw topology* [provider-id client-id te-topology-id]
     |  ...........
     |  +--rw node* [te-node-id]
     |  |  +--rw te-node-template?     leafref {template}?
     |  |     ..........
     |  +--rw link* [source-te-node-id source-te-link-id dest-te-node-id
   dest-te-link-id]
     |     +--rw te-link-template?     leafref {template}?
     |        ..........

     +--rw node-template* [name] {template}?
     |  +--rw name                       te-template-name
     |  +--rw priority?                  uint16
     |  +--rw reference-change-policy?   enumeration
     |  +--rw te-node-attributes
     |     ..........
     +--rw link-template* [name] {template}?
        +--rw mentioned,
   could be allocated from independent name                       te-template-name
        +--rw priority?                  uint16
        +--rw reference-change-policy?   enumeration
        +--rw te-link-attributes
           ..........

   Multiple templates can spaces). Inter-domain plug
   IDs may be specified to assigned and managed by a configuration element. When
   two or more templates specify values for central network authority.
   Alternatively, inter-domain plug IDs could be dynamically auto-
   discovered (e.g. via LMP protocol).

   Furthermore, the same configuration
   field, client renames the value from TE nodes, links and SRLGs offered
   in the template with abstract TE topologies by assigning to them IDs allocated from
   a separate name space managed by the highest priority client. Such renaming is used.
   The reference-change-policy specifies the action that needs to be
   taken when the template changes on a configuration element that has a
   reference to this template. The choices of action include taking no
   action, rejecting
   necessary, because the change to two abstract TE topologies may have their own
   name spaces, generally speaking, independent one from another; hence,
   ID overlaps/clashes are possible. For example, both TE topologies
   have TE nodes named S7, which, after renaming, appear in the template merged
   TE topology as S17 and applying S27, respectively.

   Once the change
   to the corresponding configuration. [Editor's Note: The notion of
   "templates" has wider applicability. It merging process is possible complete, the client can use the merged
   TE topology for this path computations across both domains, for example,
   to be
   discussed in compute a separate document.]

5.11. Notifications

   Notifications are TE path connecting C-11 to C-23.

4.4. Dealing with Multiple Abstract TE Topologies Provided by the Same
   Provider

      Domain 1 Abstract TE Topology 1   Domain 2 Abstract TE Topology 1

             +---+    +---+                  +---+    +---+
        -----|S13|----|S15|----          ----|S23|----|S25|----
             +---+\   +---+                  +---+   /+---+
                   \                                /
                    \                              /
                     \+---+                  +---+/   +---+
                      |S18|----          ----|S24|    |S28|----
                      +---+                  +---+\  /+---+
                                                   \/
                                                   /\
             +---+    +---+                  +---+/  \+---+
        -----|S19|----|S17|----          ----|S29|----|S27|----
             +---+    +---+                  +---+    +---+

      Domain 1 Abstract TE Topology 1   Domain 2 Abstract TE Topology 1

             +------------+                  +------------+
        -----|            |----          ----|            |----
             |            |                  |            |
             |    AN1     |----          ----|    AN1     |----
             |            |                  |            |
        -----|            |----          ----|            |----
             +------------+                  +------------+

         Figure 10: Merging Domain TE Topologies

   Based on local configuration, templates and/or policies pushed by the
   client, a key component of any given provider may expose more than one abstract TE
   topology data model.

   [YANG-PUSH] defines a subscription and push mechanism for YANG
   datastores. This mechanism currently allows to the user to:

   - Subscribe notifications client. For example, one abstract TE topology could
   be optimized based on a per client basis
   - Specify subtree filters or xpath filters so that only interested
     contents will lowest-cost criterion, while another one
   could be sent.
   - Specify either periodic based on best possible delay metrics, while yet another one
   could be based on maximum bandwidth availability for the client
   services. Furthermore, the client may request all or on-demand notifications.

   The authors would like some providers
   to recommend the use expose additional abstract TE topologies, possibly of this mechanism for the
   TE-Topology notifications. They would also like a different
   type and/or optimized differently, as compared to suggest already-provided TE
   topologies. In any case, the
   following extensions client should be prepared for a provider
   to offer to [YANG-PUSH]

   - Specify specific entities that will trigger the push
     notifications. These entities can client more than one abstract TE topology.

   It should be specified by xpath, like up to the
     way a filter is specified.

   - Specify or limit client (based on the triggering event type, e.g. "add", "delete",
     "modify", or "all". The system sends client's local
   configuration and/or policies conveyed to the push notifications only
     when such events happen on client by the triggering entities.

   - Have an option client's
   clients) to request either "incremental" decide how to mix-and-match multiple abstract TE
   topologies provided by each or "full"
     notifications for an entity. For "incremental", the notification
     will contain only some of the changed attributes.

5.12. Open Items

   - Coordinating changes providers, as well as how
   to [YANG-PUSH]: merge them into the client's native TE topologies. The changes client also
   decides how many such merged TE topologies it needs to [YANG-PUSH]
     discussed produce and
   maintain. For example, in Section 4.10 will need addition to be coordinated with the
     authors merged TE topology depicted
   in the upper part of Figure 1, the client may merge the abstract TE
   topologies received from the two providers, as shown in Figure 10,
   into the client's additional native TE topologies, as shown in Figure
   11.

   Note that draft.

6. Tree Structure

6.1. Base allowing for the client mix-n-matching of multiple TE Topology Module

   module: ietf-te-topology
   augment /nw:networks/nw:network/nw:network-types:
      +--rw te-topology!
   augment /nw:networks:
      +--rw te!
         +--rw templates
            +--rw node-template* [name] {template}?
            |  +--rw name                       te-template-name
            |  +--rw priority?                  uint16
            |  +--rw reference-change-policy?   enumeration
            |  +--rw te-node-attributes
            |     +--rw schedules
            |     |  +--rw schedule* [schedule-id]
            |     |     +--rw schedule-id          uint32
            |     |     +--rw start?               yang:date-and-time
            |     |     +--rw schedule-duration?   string
            |     |     +--rw repeat-interval?     string
            |     +--rw admin-status?        te-admin-status
            |     +--rw domain-id?           uint32
            |     +--rw is-abstract?         empty
            |     +--rw name?                inet:domain-name
            |     +--rw signaling-address*   inet:ip-address
            |     +--rw underlay-topology {te-topology-hierarchy}?
            |        +--rw provider-id-ref?      leafref
            |        +--rw client-id-ref?        leafref
            |        +--rw te-topology-id-ref?   leafref
            |        +--rw network-id-ref?       leafref
            +--rw link-template* [name] {template}?
               +--rw name                       te-template-name
               +--rw priority?                  uint16
               +--rw reference-change-policy?   enumeration
               +--rw te-link-attributes
                  +--rw schedules
                  |  +--rw schedule* [schedule-id]
                  |     +--rw schedule-id          uint32
                  |     +--rw start?               yang:date-and-time
                  |     +--rw schedule-duration?   string
                  |     +--rw repeat-interval?     string
                  +--rw access-type?                      te-link-
   access-type
                  +--rw is-abstract?                      empty
                  +--rw name?                             string
                  +--rw underlay! {te-topology-hierarchy}?
                  |  +--rw underlay-primary-path
                  |  |  +--rw provider-id-ref?      leafref
                  |  |  +--rw client-id-ref?        leafref
                  |  |  +--rw te-topology-id-ref?   leafref
   topologies assumes that inter-domain plug IDs (rather than remote
   nodeID/linkID) option is used for identifying neighboring domains and
   inter-domain TE link resolution.

                Client's Merged TE Topology 2

     /---\      +------------+      +------------+      /---\
     |s3 |------|            |------|            |------|C21|
     \---/      |            |  +--rw network-id-ref?       leafref      |            |  +--rw path-element* [path-element-id]      \---/
                |            |     +--rw path-element-id     uint32      |            |     +--rw (type)?
                |            |        +--:(ipv4-address)      |            |
                |  +--rw v4-address?         inet:ipv4-
   address            |      |            |  +--rw v4-prefix-length?   uint8      /---\
                |    AN11    |------|    AN21    |------|C22|
                |            |  +--rw v4-loose?           boolean      |            |        +--:(ipv6-address)      \---/
                |            |      |  +--rw v6-address?         inet:ipv6-
   address            |
                |            |  +--rw v6-prefix-length?   uint8      |            |
     /---\      |  +--rw v6-loose?           boolean            |      |        +--:(as-number)            |      /---\
     |C12|------|            |------|            |------|C23|
     \---/      +------------+      +------------+      \---/

                Client's Merged TE Topology 3

     /---\      +------------+      +---+    +---+      /---\
     |s3 |------|            |------|S23|----|S25|------|C21|
     \---/      |            |  +--rw as-number?          uint16      +---+   /+---+      \---/
                |            |        +--:(unnumbered-link)             /
                |            |            /
                |  +--rw router-id?          inet:ip-
   address            |      +---+/   +---+      /---\
                |    AN11    |------|S24|    |S28|------|C22|
                |  +--rw interface-id?       uint32            |      +---+\  /+---+      \---/
                |        +--:(label)            |            \/
                |           +--rw value?              uint32            |  +--rw underlay-backup-path* [index]            /\
     /---\      |            |  +--rw index                 uint32
                  |  |  +--rw provider-id-ref?      leafref
                  |  |  +--rw client-id-ref?        leafref      +---+/  \+---+      /---\
     |C12|------|            |------|S29|----|S27|------|C23|
     \---/      +------------+      +---+    +---+      \---/

     Figure 11: Multiple Native (Merged) Client's TE Topologies

   It is important to note that each of the three native (merged) TE
   topologies could be used by the client for computing TE paths for any
   of the multi-domain services. The choice as to which topology to use
   for a given service depends on the service parameters/requirements
   and the topology's style, optimization criteria and the level of
   details.

5. Modeling Considerations

5.1. Generic network topology building blocks

   The generic network topology building blocks are discussed in [YANG-
   NET-TOPO]. The TE Topology model proposed in this document augments
   and uses the ietf-network-topology module defined in [YANG-NET-TOPO].

                  +------------------------+
                  |       Generic          |  +--rw te-topology-id-ref?   leafref
                  | Network Topology Model |  +--rw network-id-ref?       leafref
                  | (ietf-network-topology)|
                  +------------------------+
                               |  +--rw path-element* [path-element-id]
                               |
                               |     +--rw path-element-id     uint32
                               V
                  +------------------------+
                  |       TE Topology      |     +--rw (type)?
                  |         Model          |        +--:(ipv4-address)
                  |                        |
                  +------------------------+

         Figure 12: Augmenting the Generic Network Topology Model

5.2. Technology agnostic TE Topology model

   The TE Topology model proposed in this document is meant to be
   technology agnostic. Other technology specific TE Topology models can
   augment and use the building blocks provided by the proposed model.

                     +-------------------+
                     |  +--rw v4-address?         inet:ipv4-
   address     Generic       |
                     | TE Topology Model |  +--rw v4-prefix-length?   uint8
                     +-------------------+
                               |
            +-------------+-------------+-------------+
            |             |  +--rw v4-loose?           boolean             |             |        +--:(ipv6-address)
            V             V             V             V
      +------------+                            +------------+
      | Technology |                            |  +--rw v6-address?         inet:ipv6-
   address Technology |
      |  Specific  |  +--rw v6-prefix-length?   uint8   ......................   |  Specific  |
      |  +--rw v6-loose?           boolean TE Topology|                            | TE Topology|
      |        +--:(as-number)   Model 1  |                            |   Model n  |
      +------------+                            +------------+

   Figure 13: Augmenting the Technology agnostic TE Topology model

5.3. Model Structure

   The high-level model structure proposed by this document is as shown
   below:

   module: ietf-te-topology
   augment /nw:networks/nw:network/nw:network-types:
      +--rw as-number?          uint16
                  |  |        +--:(unnumbered-link)
                  |  |        | te-topology!

   augment /nw:networks:
      +--rw router-id?          inet:ip-
   address
                  |  |        | te!
         +--rw interface-id?       uint32
                  |  |        +--:(label)
                  |  | templates
            +--rw value?              uint32 node-template* [name] {template}?
            |  ............
            +--rw underlay-protection-type?   uint16 link-template* [name] {template}?
               ............

   augment /nw:networks/nw:network:
      +--rw te!
         +--rw provider-id       te-global-id
         +--rw client-id         te-global-id
         +--rw te-topology-id    te-topology-id
         +--rw config
         |  ............
         +--ro state
            ............

   augment /nw:networks/nw:network/nw:node:
      +--rw underlay-trail-src te!
         +--rw te-node-id    te-node-id
         +--rw config
         |  ............
         +--ro state
         |  ............
         +--rw tp-ref?        leafref tunnel-termination-point* [tunnel-tp-id]
            +--rw tunnel-tp-id    binary
            +--rw config
            |  ............
            +--ro state

   augment /nw:networks/nw:network/nt:link:
      +--rw te!
         +--rw config
         |  ..........
         +--ro state
            ..........

   augment /nw:networks/nw:network/nw:node/nt:termination-point:
      +--rw node-ref?      leafref te!
         +--rw te-tp-id    te-tp-id
         +--rw config
         |  ............
         +--ro state
            ............

   notifications:
      +---n te-node-event
      |  ............
      +---n te-link-event
         ............

5.4. Topology Identifiers

   The TE-Topology is uniquely identified by a key that has 3
   constituents - te-topology-id, provider-id and client-id. The
   combination of provider-id and te-topology-id uniquely identifies a
   native TE Topology on a given provider. The client-id is used only
   when Customized TE Topologies come into play; a value of "0" is used
   as the client-id for native TE Topologies.

   augment /nw:networks/nw:network:
      +--rw network-ref?   leafref
                  | te!
         +--rw underlay-trail-des
                  | provider-id       te-global-id
         +--rw tp-ref?        leafref
                  | client-id         te-global-id
         +--rw node-ref?      leafref
                  | te-topology-id    te-topology-id

5.5. Generic TE Link Attributes

   The model covers the definitions for generic TE Link attributes -
   bandwidth, admin groups, SRLGs, switching capabilities, TE metric
   extensions etc.

     +--rw network-ref?   leafref te-link-attributes
        .....................
        +--rw admin-status?                     te-admin-
   status                     te-admin-status
        +--rw performance-metric-throttle {te-performance-
   metric}? {te-performance-metric}?
        |  .....................
        +--rw unidirectional-delay-offset?           uint32
                  | link-index?                       uint64
        +--rw measure-interval?                      uint32
                  | administrative-group?             te-types:admin-groups
        +--rw advertisement-interval?                uint32
                  | max-link-bandwidth?               decimal64
        +--rw suppression-interval?                  uint32
                  | max-resv-link-bandwidth?          decimal64
        +--rw threshold-out
                  | unreserved-bandwidth* [priority]
        |  .....................
        +--rw unidirectional-delay? te-default-metric?                uint32
                  |  |
        +--rw unidirectional-min-delay?
   uint32
                  | performance-metric {te-performance-metric}?
        |  .....................
        +--rw unidirectional-max-delay?
   uint32 link-protection-type?             enumeration
        +--rw interface-switching-capability* [switching-capability]
        |  .....................
        +--rw te-srlgs
           .....................

5.6. Generic TE Node Attributes

   The model covers the definitions for generic TE Node attributes.

   The definition of a generic connectivity matrix is shown below:

     +--rw te-node-attributes
        ...........
        +--rw connectivity-matrix* [id]
        |  +--rw unidirectional-delay-variation? id            uint32
        |  |  +--rw unidirectional-packet-loss?
   decimal64 from
        |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
                  | tp-ref?        leafref
        |  +--rw unidirectional-available-bandwidth?
   decimal64 to
        |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64 tp-ref?        leafref
        |  +--rw threshold-in
                  |  | is-allowed?   boolean

   The definition of a TTP Local Link Connectivity List is shown below:

     +--rw unidirectional-delay?
   uint32
                  | tunnel-termination-point* [tunnel-tp-id]
        +--rw tunnel-tp-id    binary
        +--rw config
        |  +--rw unidirectional-min-delay?
   uint32 termination-capability* [link-tp]
        |     +--rw link-tp    leafref
        +--ro state
           +--ro termination-capability* [link-tp]
           |  +--ro link-tp    leafref
           +--ro switching-capability      identityref
           +--ro encoding                  identityref

5.7. TED Information Sources

   The model allows each TE topological element to have multiple TE
   information sources (OSPF-TE, ISIS-TE, BGP-LS, User-Configured,
   System-Processed, Other). Each information source is associated with
   a credibility preference to indicate precedence. In scenarios where a
   customized TE Topology is merged into a Client's native TE Topology,
   the merged topological elements would point to the corresponding
   customized TE Topology as its information source.

   augment /nw:networks/nw:network/nw:node:
      +--rw unidirectional-max-delay?
   uint32 te!
         ...........
         +--ro state
            ........
            +--ro information-source?         enumeration
            +--ro information-source-state
               +--ro credibility-preference?   uint16
               +--ro topology
               |  +--ro provider-id-ref?      leafref
               |  +--rw unidirectional-delay-variation?
   uint32  +--ro client-id-ref?        leafref
               |  +--ro te-topology-id-ref?   leafref
               |  +--ro network-id-ref?       leafref
               +--ro routing-instance?         string

   augment /nw:networks/nw:network/nt:link:
      +--rw unidirectional-packet-loss?
   decimal64 te!
         ...........
         +--ro state
            .........
            +--ro information-source?         enumeration
            +--ro information-source-state
            |  +--ro credibility-preference?   uint16
            |  +--rw unidirectional-residual-bandwidth?
   decimal64  +--ro topology
            |  |  +--rw unidirectional-available-bandwidth?
   decimal64  +--ro provider-id-ref?      leafref
            |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64  +--ro client-id-ref?        leafref
            |  +--rw threshold-accelerated-advertisement  |     +--rw unidirectional-delay?
   uint32  +--ro te-topology-id-ref?   leafref
            |     +--rw unidirectional-min-delay?
   uint32  |     +--rw unidirectional-max-delay?
   uint32  +--ro network-id-ref?       leafref
            |     +--rw unidirectional-delay-variation?
   uint32  +--ro routing-instance?         string
            +--ro alt-information-sources* [information-source]
            |  ............

5.8. Overlay/Underlay Relationship

   The model captures overlay and underlay relationship for TE
   nodes/links. For example - in networks where multiple TE Topologies
   are built hierarchically, this model allows the user to start from a
   specific topological element in the top most topology and traverse
   all the way down to the supporting topological elements in the bottom
   most topology.

   This relationship is captured via the "underlay-topology" field for
   the node and via the "underlay" field for the link. The use of these
   fields is optional and this functionality is tagged as a "feature"
   ("te-topology-hierarchy").

   augment /nw:networks/nw:network/nw:node:
      +--rw unidirectional-packet-loss?
   decimal64
                  | te!
         +--rw unidirectional-residual-bandwidth?
   decimal64
                  | te-node-id    te-node-id
         +--rw unidirectional-available-bandwidth?
   decimal64 config
         |  +--rw unidirectional-utilized-bandwidth?
   decimal64
                  +--rw link-index?                       uint64 te-node-template*     leafref {template}?
         |  +--rw administrative-group?             te-
   types:admin-groups te-node-attributes
         |     ....................
         |     +--rw max-link-bandwidth?               decimal64 underlay-topology {te-topology-hierarchy}?
         |        +--rw max-resv-link-bandwidth?          decimal64 provider-id-ref?      leafref
         |        +--rw unreserved-bandwidth* [priority] client-id-ref?        leafref
         |        +--rw priority     uint8 te-topology-id-ref?   leafref
         |        +--rw bandwidth?   decimal64 network-id-ref?       leafref

   augment /nw:networks/nw:network/nt:link:
      +--rw te-default-metric?                uint32 te!
         +--rw performance-metric {te-performance-metric}? config
         |  .........
         |  +--rw measurement te-link-attributes
         |     ....................
         |     +--rw unidirectional-delay?
   uint32 underlay! {te-topology-hierarchy}?
         |     |  +--rw unidirectional-min-delay?
   uint32 underlay-primary-path
         |     |  |  +--rw unidirectional-max-delay?
   uint32 provider-id-ref?      leafref
         |     |  |  +--rw unidirectional-delay-variation?
   uint32 client-id-ref?        leafref
         |     |  |  +--rw unidirectional-packet-loss?
   decimal64 te-topology-id-ref?   leafref
         |     |  |  +--rw unidirectional-residual-bandwidth?
   decimal64 network-id-ref?       leafref
         |     |  |  +--rw unidirectional-available-bandwidth?
   decimal64 path-element* [path-element-id]
         |     |  +--rw unidirectional-utilized-bandwidth?
   decimal64  |  +--rw normality     ...............
         |     +--rw unidirectional-delay?
   performance-metric-normality     |  +--rw unidirectional-min-delay?
   performance-metric-normality underlay-backup-path* [index]
         |     +--rw unidirectional-max-delay?
   performance-metric-normality     |     +--rw unidirectional-delay-variation?
   performance-metric-normality  |  +--rw unidirectional-packet-loss?
   performance-metric-normality index                 uint32
         |     +--rw unidirectional-residual-bandwidth?
   performance-metric-normality     |     +--rw unidirectional-available-bandwidth?
   performance-metric-normality  |  +--rw unidirectional-utilized-bandwidth?
   performance-metric-normality
                  +--rw link-protection-type?             enumeration
                  +--rw interface-switching-capability* [switching-
   capability] provider-id-ref?      leafref
         |  +--rw switching-capability
   identityref     |  +--rw encoding?
   identityref  |  +--rw max-lsp-bandwidth* [priority] client-id-ref?        leafref
         |     |  |  +--rw priority     uint8 te-topology-id-ref?   leafref
         |     |  +--rw bandwidth?   decimal64  |  +--rw time-division-multiplex-capable
                  | network-id-ref?       leafref
         |  +--rw minimum-lsp-bandwidth?   decimal64     |  |  +--rw indication?              enumeration path-element* [path-element-id]
         |  +--rw interface-adjustment-capability* [upper-sc]     |     +--rw upper-sc             identityref  |     +--rw upper-encoding?      identityref     ...............
         |     +--rw max-lsp-bandwidth* [priority]     |  +--rw priority     uint8 underlay-protection-type?   uint16
         |        +--rw bandwidth?   decimal64
                  +--rw te-srlgs
                     +--rw values*   te-types:srlg
   augment /nw:networks/nw:network:
      +--rw te!
         +--rw provider-id       te-global-id
         +--rw client-id         te-global-id
         +--rw te-topology-id    te-topology-id
         +--rw config     |  +--rw schedules underlay-trail-src
         |     |  +--rw schedule* [schedule-id]  |  ...........
         |     +--rw schedule-id          uint32     |  |  +--rw start?               yang:date-and-time network-ref?   leafref
         |     |  +--rw schedule-duration?   string underlay-trail-des
         |     |     ...........

5.9. Scheduling Parameters

   The model allows time scheduling parameters to be specified for each
   topological element or for the topology as a whole. These parameters
   allow the provider to present different topological views to the
   client at different time slots. The use of "scheduling parameters" is
   optional and this functionality is tagged as a "feature"
   ("configuration-schedule"). The YANG data model for configuration
   scheduling is defined in [YANG-SCHEDULE] and imported by the TE
   Topology module.

5.10. Templates

   The data model provides the users with the ability to define
   templates and apply them to link and node configurations. The use of
   "template" configuration is optional and this functionality is tagged
   as a "feature" ("template").

     +--rw repeat-interval?     string topology* [provider-id client-id te-topology-id]
     |  ...........
     |  +--rw preference?   uint8
         +--ro state
            +--ro schedules node* [te-node-id]
     |  +--ro schedule* [schedule-id]  |     +--ro schedule-id          uint32  +--rw te-node-template?     leafref {template}?
     |     +--ro start?               yang:date-and-time  |     +--ro schedule-duration?   string     ..........
     |     +--ro repeat-interval?     string
            +--ro preference?   uint8
   augment /nw:networks/nw:network/nw:node:
      +--rw te!
         +--rw te-node-id                  te-node-id  +--rw config link* [source-te-node-id source-te-link-id dest-te-node-id
   dest-te-link-id]
     |     +--rw te-node-template* te-link-template?     leafref {template}?
     |        ..........

     +--rw te-node-attributes node-template* [name] {template}?
     |  +--rw schedules
         | name                       te-template-name
     |  +--rw schedule* [schedule-id]
         | priority?                  uint16
     |  +--rw schedule-id          uint32
         | reference-change-policy?   enumeration
     |  +--rw start?               yang:date-and-time
         |     |     +--rw schedule-duration?   string
         |     |     +--rw repeat-interval?     string
         |     +--rw admin-status?          te-admin-status te-node-attributes
     |     ..........
     +--rw connectivity-matrix* [id]
         |     | link-template* [name] {template}?
        +--rw id            uint32
         |     | name                       te-template-name
        +--rw from
         |     |  | priority?                  uint16
        +--rw tp-ref?   leafref
         |     | reference-change-policy?   enumeration
        +--rw te-link-attributes
           ..........

   Multiple templates can be specified to
         |     |  |  +--rw tp-ref?   leafref
         |     |  +--rw is-allowed?   boolean
         |     +--rw domain-id?             uint32
         |     +--rw is-abstract?           empty
         |     +--rw name?                  inet:domain-name
         |     +--rw signaling-address*     inet:ip-address
         |     +--rw underlay-topology {te-topology-hierarchy}?
         |        +--rw provider-id-ref?      leafref
         |        +--rw client-id-ref?        leafref
         |        +--rw te-topology-id-ref?   leafref
         |        +--rw network-id-ref?       leafref
         +--ro state
         |  +--ro te-node-template*           leafref {template}?
         |  +--ro te-node-attributes
         |  |  +--ro schedules
         |  |  |  +--ro schedule* [schedule-id]
         |  |  |     +--ro schedule-id          uint32
         |  |  |     +--ro start?               yang:date-and-time
         |  |  |     +--ro schedule-duration?   string
         |  |  |     +--ro repeat-interval?     string
         |  |  +--ro admin-status?          te-admin-status
         |  |  +--ro connectivity-matrix* [id]
         |  |  |  +--ro id            uint32
         |  |  |  +--ro a configuration element. When
   two or more templates specify values for the same configuration
   field, the value from
         |  |  |  |  +--ro tp-ref?   leafref
         |  |  |  +--ro the template with the highest priority is used.
   The reference-change-policy specifies the action that needs to be
   taken when the template changes on a configuration element that has a
   reference to this template. The choices of action include taking no
   action, rejecting the change to the template and applying the change
   to the corresponding configuration. [Editor's Note: The notion of
   "templates" has wider applicability. It is possible for this to be
   discussed in a separate document.]

5.11. Notifications

   Notifications are a key component of any topology data model.

   [YANG-PUSH] defines a subscription and push mechanism for YANG
   datastores. This mechanism currently allows the user to:

   - Subscribe notifications on a per client basis
   - Specify subtree filters or xpath filters so that only interested
     contents will be sent.
   - Specify either periodic or on-demand notifications.

   The authors would like to recommend the use of this mechanism for the
   TE-Topology notifications. They would also like to suggest the
   following extensions to [YANG-PUSH]

   - Specify specific entities that will trigger the push
     notifications. These entities can be specified by xpath, like the
     way a filter is specified.

   - Specify or limit the triggering event type, e.g. "add", "delete",
     "modify", or "all". The system sends the push notifications only
     when such events happen on the triggering entities.

   - Have an option to request either "incremental" or "full"
     notifications for an entity. For "incremental", the notification
     will contain only the changed attributes.

5.12. Open Items

   - Coordinating changes to [YANG-PUSH]: The changes to [YANG-PUSH]
     discussed in Section 4.10 will need to be coordinated with the
     authors of that draft.

6. Tree Structure

   module: ietf-te-topology
   augment /nw:networks/nw:network/nw:network-types:
      +--rw te-topology!
   augment /nw:networks:
      +--rw te!
         +--rw templates
            +--rw node-template* [name] {template}?
            |  +--rw name                       te-types:te-template-
   name
            |  +--rw priority?                  uint16
            |  +--rw reference-change-policy?   enumeration
            |  +--rw te-node-attributes
            |     +--rw schedules
            |     |  +--rw schedule* [schedule-id]
            |     |     +--rw schedule-id          uint32
            |     |     +--rw start?               yang:date-and-time
            |     |     +--rw schedule-duration?   string
            |     |     +--rw repeat-interval?     string
            |     +--rw admin-status?        te-types:te-admin-status
            |     +--rw domain-id?           uint32
            |     +--rw is-abstract?         empty
            |     +--rw name?                inet:domain-name
            |     +--rw signaling-address*   inet:ip-address
            |     +--rw underlay-topology {te-topology-hierarchy}?
            |        +--rw provider-id-ref?      leafref
            |        +--rw client-id-ref?        leafref
            |        +--rw te-topology-id-ref?   leafref
            |        +--rw network-id-ref?       leafref
            +--rw link-template* [name] {template}?
               +--rw name                       te-types:te-template-
   name
               +--rw priority?                  uint16
               +--rw reference-change-policy?   enumeration
               +--rw te-link-attributes
                  +--rw schedules
                  |  +--rw schedule* [schedule-id]
                  |     +--rw schedule-id          uint32
                  |     +--rw start?               yang:date-and-time
                  |     +--rw schedule-duration?   string
                  |     +--rw repeat-interval?     string
                  +--rw access-type?                      te-types:te-
   link-access-type
                  +--rw external-domain
                  |  +--rw remote-te-node-id?      te-types:te-node-id
                  |  +--rw remote-te-link-tp-id?   te-types:te-tp-id
                  |  +--rw plug-id?                uint32
                  +--rw is-abstract?                      empty
                  +--rw name?                             string
                  +--rw underlay! {te-topology-hierarchy}?
                  |  +--rw underlay-primary-path
                  |  |  +--rw provider-id-ref?      leafref
                  |  |  +--rw client-id-ref?        leafref
                  |  |  +--rw te-topology-id-ref?   leafref
                  |  |  +--rw network-id-ref?       leafref
                  |  |  +--rw path-element* [path-element-id]
                  |  |     +--rw path-element-id     uint32
                  |  |     +--rw (type)?
                  |  |        +--:(ipv4-address)
                  |  |        |  +--rw v4-address?         inet:ipv4-
   address
                  |  |        |  +--rw v4-prefix-length?   uint8
                  |  |        |  +--rw v4-loose?           boolean
                  |  |        +--:(ipv6-address)
                  |  |        |  +--rw v6-address?         inet:ipv6-
   address
                  |  |        |  +--rw v6-prefix-length?   uint8
                  |  |        |  +--rw v6-loose?           boolean
                  |  |        +--:(as-number)
                  |  |        |  +--rw as-number?          uint16
                  |  |        +--:(unnumbered-link)
                  |  |        |  +--rw router-id?          inet:ip-
   address
                  |  |        |  +--rw interface-id?       uint32
                  |  |        +--:(label)
                  |  |           +--rw value?              uint32
                  |  +--rw underlay-backup-path* [index]
                  |  |  +--rw index                 uint32
                  |  |  +--rw provider-id-ref?      leafref
                  |  |  +--rw client-id-ref?        leafref
                  |  |  +--rw te-topology-id-ref?   leafref
                  |  |  +--rw network-id-ref?       leafref
                  |  |  +--rw path-element* [path-element-id]
                  |  |     +--rw path-element-id     uint32
                  |  |     +--rw (type)?
                  |  |        +--:(ipv4-address)
                  |  |        |  +--rw v4-address?         inet:ipv4-
   address
                  |  |        |  +--rw v4-prefix-length?   uint8
                  |  |        |  +--rw v4-loose?           boolean
                  |  |        +--:(ipv6-address)
                  |  |        |  +--rw v6-address?         inet:ipv6-
   address
                  |  |        |  +--rw v6-prefix-length?   uint8
                  |  |        |  +--rw v6-loose?           boolean
                  |  |        +--:(as-number)
                  |  |        |  +--rw as-number?          uint16
                  |  |        +--:(unnumbered-link)
                  |  |        |  +--rw router-id?          inet:ip-
   address
                  |  |        |  +--rw interface-id?       uint32
                  |  |        +--:(label)
                  |  |           +--rw value?              uint32
                  |  +--rw underlay-protection-type?   uint16
                  |  +--rw underlay-trail-src
                  |  |  +--rw tp-ref?        leafref
                  |  |  +--rw node-ref?      leafref
                  |  |  +--rw network-ref?   leafref
                  |  +--rw underlay-trail-des
                  |     +--rw tp-ref?        leafref
                  |     +--rw node-ref?      leafref
                  |     +--rw network-ref?   leafref
                  +--rw admin-status?                     te-types:te-
   admin-status
                  +--rw performance-metric-throttle {te-performance-
   metric}?
                  |  +--rw unidirectional-delay-offset?           uint32
                  |  +--rw measure-interval?                      uint32
                  |  +--rw advertisement-interval?                uint32
                  |  +--rw suppression-interval?                  uint32
                  |  +--rw threshold-out
                  |  |  +--rw unidirectional-delay?
   uint32
                  |  |  +--rw unidirectional-min-delay?
   uint32
                  |  |  +--rw unidirectional-max-delay?
   uint32
                  |  |  +--rw unidirectional-delay-variation?
   uint32
                  |  |  +--rw unidirectional-packet-loss?
   decimal64
                  |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-available-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
                  |  +--rw threshold-in
                  |  |  +--rw unidirectional-delay?
   uint32
                  |  |  +--rw unidirectional-min-delay?
   uint32
                  |  |  +--rw unidirectional-max-delay?
   uint32
                  |  |  +--rw unidirectional-delay-variation?
   uint32
                  |  |  +--rw unidirectional-packet-loss?
   decimal64
                  |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-available-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
                  |  +--rw threshold-accelerated-advertisement
                  |     +--rw unidirectional-delay?
   uint32
                  |     +--rw unidirectional-min-delay?
   uint32
                  |     +--rw unidirectional-max-delay?
   uint32
                  |     +--rw unidirectional-delay-variation?
   uint32
                  |     +--rw unidirectional-packet-loss?
   decimal64
                  |     +--rw unidirectional-residual-bandwidth?
   decimal64
                  |     +--rw unidirectional-available-bandwidth?
   decimal64
                  |     +--rw unidirectional-utilized-bandwidth?
   decimal64
                  +--rw link-index?                       uint64
                  +--rw administrative-group?             te-
   types:admin-groups
                  +--rw interface-switching-capability* [switching-
   capability]
                  |  +--rw switching-capability
   identityref
                  |  +--rw encoding?
   identityref
                  |  +--rw max-lsp-bandwidth* [priority]
                  |  |  +--rw priority     uint8
                  |  |  +--rw bandwidth?   decimal64
                  |  +--rw time-division-multiplex-capable
                  |     +--rw minimum-lsp-bandwidth?   decimal64
                  |     +--rw indication?              enumeration
                  +--rw link-protection-type?             enumeration
                  +--rw max-link-bandwidth?               decimal64
                  +--rw max-resv-link-bandwidth?          decimal64
                  +--rw unreserved-bandwidth* [priority]
                  |  +--rw priority     uint8
                  |  +--rw bandwidth?   decimal64
                  +--rw te-default-metric?                uint32
                  +--rw performance-metric {te-performance-metric}?
                  |  +--rw measurement
                  |  |  +--rw unidirectional-delay?
   uint32
                  |  |  +--rw unidirectional-min-delay?
   uint32
                  |  |  +--rw unidirectional-max-delay?
   uint32
                  |  |  +--rw unidirectional-delay-variation?
   uint32
                  |  |  +--rw unidirectional-packet-loss?
   decimal64
                  |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-available-bandwidth?
   decimal64
                  |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
                  |  +--rw normality
                  |     +--rw unidirectional-delay?                 te-
   types:performance-metric-normality
                  |     +--rw unidirectional-min-delay?             te-
   types:performance-metric-normality
                  |     +--rw unidirectional-max-delay?             te-
   types:performance-metric-normality
                  |     +--rw unidirectional-delay-variation?       te-
   types:performance-metric-normality
                  |     +--rw unidirectional-packet-loss?           te-
   types:performance-metric-normality
                  |     +--rw unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
                  |     +--rw unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
                  |     +--rw unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
                  +--rw te-srlgs
                     +--rw value*   te-types:srlg
   augment /nw:networks/nw:network:
      +--rw te!
         +--rw provider-id       te-types:te-global-id
         +--rw client-id         te-types:te-global-id
         +--rw te-topology-id    te-types:te-topology-id
         +--rw config
         |  +--rw schedules
         |  |  +--rw schedule* [schedule-id]
         |  |     +--rw schedule-id          uint32
         |  |     +--rw start?               yang:date-and-time
         |  |     +--rw schedule-duration?   string
         |  |     +--rw repeat-interval?     string
         |  +--rw preference?               uint8
         |  +--rw optimization-criterion?   identityref
         +--ro state
            +--ro schedules
            |  +--ro schedule* [schedule-id]
            |     +--ro schedule-id          uint32
            |     +--ro start?               yang:date-and-time
            |     +--ro schedule-duration?   string
            |     +--ro repeat-interval?     string
            +--ro preference?               uint8
            +--ro optimization-criterion?   identityref
   augment /nw:networks/nw:network/nw:node:
      +--rw te!
         +--rw te-node-id                  te-types:te-node-id
         +--rw config
         |  +--rw te-node-template*     leafref {template}?
         |  +--rw te-node-attributes
         |     +--rw schedules
         |     |  +--rw schedule* [schedule-id]
         |     |     +--rw schedule-id          uint32
         |     |     +--rw start?               yang:date-and-time
         |     |     +--rw schedule-duration?   string
         |     |     +--rw repeat-interval?     string
         |     +--rw admin-status?          te-types:te-admin-status
         |     +--rw connectivity-matrix* [id]
         |     |  +--rw id                         uint32
         |     |  +--rw from
         |     |  |  +--rw tp-ref?   leafref
         |     |  +--rw to
         |     |  |  +--rw tp-ref?   leafref
         |     |  +--rw is-allowed?                boolean
         |     |  +--rw label-restriction* [inclusive-exclusive label-
   start]
         |     |  |  +--rw inclusive-exclusive    enumeration
         |     |  |  +--rw label-start            te-types:generalized-
   label
         |     |  |  +--rw label-end?             te-types:generalized-
   label
         |     |  |  +--rw range-bitmap?          binary
         |     |  +--rw max-link-bandwidth?        decimal64
         |     |  +--rw max-resv-link-bandwidth?   decimal64
         |     |  +--rw unreserved-bandwidth* [priority]
         |     |  |  +--rw priority     uint8
         |     |  |  +--rw bandwidth?   decimal64
         |     |  +--rw te-default-metric?         uint32
         |     |  +--rw performance-metric {te-performance-metric}?
         |     |  |  +--rw measurement
         |     |  |  |  +--rw unidirectional-delay?
   uint32
         |     |  |  |  +--rw unidirectional-min-delay?
   uint32
         |     |  |  |  +--rw unidirectional-max-delay?
   uint32
         |     |  |  |  +--rw unidirectional-delay-variation?
   uint32
         |     |  |  |  +--rw unidirectional-packet-loss?
   decimal64
         |     |  |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
         |     |  |  |  +--rw unidirectional-available-bandwidth?
   decimal64
         |     |  |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
         |     |  |  +--rw normality
         |     |  |     +--rw unidirectional-delay?                 te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-min-delay?             te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-max-delay?             te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |     |  |     +--rw unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |     |  +--rw te-srlgs
         |     |     +--rw value*   te-types:srlg
         |     +--rw domain-id?             uint32
         |     +--rw is-abstract?           empty
         |     +--rw name?                  inet:domain-name
         |     +--rw signaling-address*     inet:ip-address
         |     +--rw underlay-topology {te-topology-hierarchy}?
         |        +--rw provider-id-ref?      leafref
         |  |  |  +--ro tp-ref?   leafref
         |  |  |  +--ro is-allowed?   boolean
         |  |  +--ro domain-id?             uint32
         |  |  +--ro is-abstract?           empty
         |  |  +--ro name?                  inet:domain-name
         |  |  +--ro signaling-address*     inet:ip-address
         |  |  +--ro underlay-topology {te-topology-hierarchy}?
         |  |     +--ro provider-id-ref?      leafref
         |  |     +--ro client-id-ref?        leafref
         |  |     +--ro te-topology-id-ref?   leafref
         |  |     +--ro        +--rw client-id-ref?        leafref
         |        +--rw te-topology-id-ref?   leafref
         |        +--rw network-id-ref?       leafref
         +--ro state
         |  +--ro oper-status?                te-oper-status te-node-template*           leafref {template}?
         |  +--ro is-multi-access-dr?         empty te-node-attributes
         |  |  +--ro information-source?         enumeration schedules
         |  |  |  +--ro information-source-state schedule* [schedule-id]
         |  |  |     +--ro credibility-preference?   uint16 schedule-id          uint32
         |  |  |     +--ro topology start?               yang:date-and-time
         |  |  |     +--ro provider-id-ref?      leafref schedule-duration?   string
         |  |  |     +--ro client-id-ref?        leafref repeat-interval?     string
         |  |  +--ro admin-status?          te-types:te-admin-status
         |  |  +--ro te-topology-id-ref? connectivity-matrix* [id]
         |  |  |  +--ro id                         uint32
         |  |  |  +--ro from
         |  |  |  |  +--ro tp-ref?   leafref
         |  |  |  +--ro network-id-ref? to
         |  |  |  |  +--ro tp-ref?   leafref
         |  |  |  +--ro routing-instance?         string is-allowed?                boolean
         |  |  |  +--ro alt-information-sources* [information-source] label-restriction* [inclusive-exclusive label-
   start]
         |  |  |  |  +--ro information-source inclusive-exclusive    enumeration
         |  |  |  |  +--ro information-source-state label-start            te-types:generalized-
   label
         |  |  |  |  +--ro credibility-preference?   uint16 label-end?             te-types:generalized-
   label
         |  |  |  |  +--ro topology range-bitmap?          binary
         |  |  |  +--ro provider-id-ref?      leafref max-link-bandwidth?        decimal64
         |  |  |  +--ro client-id-ref?        leafref max-resv-link-bandwidth?   decimal64
         |  |  |  +--ro te-topology-id-ref?   leafref unreserved-bandwidth* [priority]
         |  |  |  |  +--ro network-id-ref?       leafref priority     uint8
         |  |  |  |  +--ro routing-instance?         string bandwidth?   decimal64
         |  |  |  +--ro connectivity-matrix* [id] te-default-metric?         uint32
         |  |  |  +--ro id performance-metric {te-performance-metric}?
         |  |  |  |  +--ro measurement
         |  |  |  |  |  +--ro unidirectional-delay?
   uint32
         |  |  |  |  |  +--ro unidirectional-min-delay?
   uint32
         |  |  |  |  |  +--ro unidirectional-max-delay?
   uint32
         |  |  |  |  |  +--ro unidirectional-delay-variation?
   uint32
         |  |  |  |  |  +--ro unidirectional-packet-loss?
   decimal64
         |  |  |  |  |  +--ro unidirectional-residual-bandwidth?
   decimal64
         |  |  |  |  |  +--ro unidirectional-available-bandwidth?
   decimal64
         |  |  |  |  |  +--ro unidirectional-utilized-bandwidth?
   decimal64
         |  |  |  |  +--ro normality
         |  |  |  |     +--ro unidirectional-delay?                 te-
   types:performance-metric-normality
         |  |  |  |     +--ro unidirectional-min-delay?             te-
   types:performance-metric-normality
         |  |  |  |     +--ro unidirectional-max-delay?             te-
   types:performance-metric-normality
         |  |  |  |     +--ro unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |  |  |  |     +--ro unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |  |  |  |     +--ro unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |  |  |  |     +--ro from
         | unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |  |  +--ro tp-ref?   leafref  |  |     +--ro to unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |  |  |  +--ro tp-ref?   leafref te-srlgs
         |  |  |     +--ro is-allowed?   boolean value*   te-types:srlg
         |  |  +--ro domain-id?             uint32
         |  |  +--ro is-abstract?           empty
         |  |  +--ro name?                  inet:domain-name
         |  |  +--ro signaling-address*     inet:ip-address
         |  |  +--ro underlay-topology {te-topology-hierarchy}?
         |  |     +--ro provider-id-ref?      leafref
         |  |     +--ro client-id-ref?        leafref
         |  |     +--ro te-topology-id-ref?   leafref
         |  |     +--ro network-id-ref?       leafref
         +--rw tunnel-termination-point* [tunnel-tp-id]
            +--rw tunnel-tp-id    binary
            +--rw config
            |  +--rw termination-capability* [link-tp]
         |     +--rw link-tp    leafref
            +--ro state  +--ro termination-capability* [link-tp] oper-status?                te-types:te-oper-status
         |  +--ro link-tp    leafref
               +--ro switching-capability      identityref
               +--ro encoding                  identityref
   augment /nw:networks/nw:network/nt:link:
      +--rw te!
         +--rw config
         |  +--rw (bundle-stack-level)?
         |  |  +--:(bundle)
         |  |  |  +--rw bundled-links is-multi-access-dr?         empty
         |  +--ro information-source?         enumeration
         |  +--ro information-source-state
         |     +--rw bundled-link* [sequence]  |  +--ro credibility-preference?   uint16
         |  |        +--rw sequence      uint32  +--ro topology
         |  |  |        +--rw src-tp-ref?  +--ro provider-id-ref?      leafref
         |  |  |        +--rw des-tp-ref?  +--ro client-id-ref?        leafref
         |  |  +--:(component)
         |  |     +--rw component-links
         |  |        +--rw component-link* [sequence]
         |  |           +--rw sequence             uint32
         |  |           +--rw src-interface-ref?   string
         |  |           +--rw des-interface-ref?   string  |  +--rw te-link-template*  +--ro te-topology-id-ref?   leafref {template}?
         |  +--rw te-link-attributes
         |     +--rw schedules
         |     |  +--rw schedule* [schedule-id]
         |  |     +--rw schedule-id          uint32
         |  |     +--rw start?               yang:date-and-time  +--ro network-id-ref?       leafref
         |  |     +--rw schedule-duration?  +--ro routing-instance?         string
         |  +--ro information-source-entry* [information-source]
         |     +--rw repeat-interval?     string
         |     +--rw access-type?                      te-link-access-
   type     +--ro information-source          enumeration
         |     +--rw is-abstract?                      empty     +--ro information-source-state
         |     +--rw name?                             string     |     +--rw underlay! {te-topology-hierarchy}?  +--ro credibility-preference?   uint16
         |     |  +--rw underlay-primary-path  +--ro topology
         |     |  |  +--rw  +--ro provider-id-ref?      leafref
         |     |  |  +--rw  +--ro client-id-ref?        leafref
         |     |  |  +--rw  +--ro te-topology-id-ref?   leafref
         |     |  |  +--rw  +--ro network-id-ref?       leafref
         |     |  +--ro routing-instance?         string
         |  +--rw path-element* [path-element-id]
         |     +--ro connectivity-matrix* [id]
         |     |     +--rw path-element-id  +--ro id                         uint32
         |     |  +--ro from
         |     +--rw (type)?     |  |  +--ro tp-ref?   leafref
         |        +--:(ipv4-address)     |  +--ro to
         |     |  |  +--rw v4-address?         inet:ipv4-
   address  +--ro tp-ref?   leafref
         |     |  +--ro is-allowed?                boolean
         |     |  +--ro label-restriction* [inclusive-exclusive label-
   start]
         |     |  +--rw v4-prefix-length?   uint8  |  +--ro inclusive-exclusive    enumeration
         |     |  |  +--ro label-start            te-types:generalized-
   label
         |     |  +--rw v4-loose?           boolean  |  +--ro label-end?             te-types:generalized-
   label
         |     |        +--:(ipv6-address)  |  +--ro range-bitmap?          binary
         |     |  +--ro max-link-bandwidth?        decimal64
         |     |  +--ro max-resv-link-bandwidth?   decimal64
         |  +--rw v6-address?         inet:ipv6-
   address     |  +--ro unreserved-bandwidth* [priority]
         |     |  |  +--rw v6-prefix-length?  +--ro priority     uint8
         |     |  |  +--ro bandwidth?   decimal64
         |  +--rw v6-loose?           boolean     |  +--ro te-default-metric?         uint32
         |     |        +--:(as-number)  +--ro performance-metric {te-performance-metric}?
         |     |  |  +--ro measurement
         |  +--rw as-number?          uint16     |  |  |        +--:(unnumbered-link)  +--ro unidirectional-delay?
   uint32
         |     |  |  |  +--rw router-id?          inet:ip-address  +--ro unidirectional-min-delay?
   uint32
         |     |  |  |  +--rw interface-id?  +--ro unidirectional-max-delay?
   uint32
         |     |  |        +--:(label)  |  +--ro unidirectional-delay-variation?
   uint32
         |     |           +--rw value?              uint32  |  |  +--rw underlay-backup-path* [index]  +--ro unidirectional-packet-loss?
   decimal64
         |     |  |  +--rw index                 uint32  |  +--ro unidirectional-residual-bandwidth?
   decimal64
         |     |  +--rw provider-id-ref?      leafref  |  |  +--ro unidirectional-available-bandwidth?
   decimal64
         |  +--rw client-id-ref?        leafref     |  |  |  +--rw te-topology-id-ref?   leafref  +--ro unidirectional-utilized-bandwidth?
   decimal64
         |     |  |  +--rw network-id-ref?       leafref  +--ro normality
         |     |  |  +--rw path-element* [path-element-id]     +--ro unidirectional-delay?                 te-
   types:performance-metric-normality
         |     |  |     +--rw path-element-id     uint32     +--ro unidirectional-min-delay?             te-
   types:performance-metric-normality
         |     |  |     +--rw (type)?     +--ro unidirectional-max-delay?             te-
   types:performance-metric-normality
         |     |  |        +--:(ipv4-address)     +--ro unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |     |  |     +--ro unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |  +--rw v4-address?         inet:ipv4-
   address     |  |     +--ro unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |     |  +--rw v4-prefix-length?   uint8  |     +--ro unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |     |  |     +--ro unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |  +--rw v4-loose?           boolean     |  +--ro te-srlgs
         |     |        +--:(ipv6-address)     +--ro value*   te-types:srlg
         |     +--ro domain-id?                  uint32
         |     +--ro is-abstract?                empty
         |     +--ro name?                       inet:domain-name
         |     +--ro signaling-address*          inet:ip-address
         |  +--rw v6-address?         inet:ipv6-
   address     +--ro underlay-topology {te-topology-hierarchy}?
         |        +--ro provider-id-ref?      leafref
         |        +--ro client-id-ref?        leafref
         |        +--ro te-topology-id-ref?   leafref
         |        +--ro network-id-ref?       leafref
         +--rw v6-prefix-length?   uint8 tunnel-termination-point* [tunnel-tp-id]
            +--rw tunnel-tp-id    binary
            +--rw config
            |  +--rw switching-capability?     identityref
            |  +--rw encoding?                 identityref
            |  +--rw inter-layer-lock-id?      uint32
            |  +--rw v6-loose?           boolean protection-type?          identityref
            |  +--rw termination-capability* [link-tp]
            |     +--rw link-tp              leafref
            |        +--:(as-number)     +--rw label-restriction* [inclusive-exclusive label-
   start]
            |     |  +--rw inclusive-exclusive    enumeration
            |     |  +--rw as-number?          uint16 label-start            te-types:generalized-
   label
            |     |  +--rw label-end?             te-types:generalized-
   label
            |        +--:(unnumbered-link)     |  +--rw range-bitmap?          binary
            |     +--rw max-lsp-bandwidth* [priority]
            |        +--rw priority     uint8
            |        +--rw router-id?          inet:ip-address bandwidth?   decimal64
            +--ro state
               +--ro switching-capability?     identityref
               +--ro encoding?                 identityref
               +--ro inter-layer-lock-id?      uint32
               +--ro protection-type?          identityref
               +--ro termination-capability* [link-tp]
                  +--ro link-tp              leafref
                  +--ro label-restriction* [inclusive-exclusive label-
   start]
                  |  +--ro inclusive-exclusive    enumeration
                  |  +--ro label-start            te-types:generalized-
   label
                  |  +--ro label-end?             te-types:generalized-
   label
                  |  +--ro range-bitmap?          binary
                  +--ro max-lsp-bandwidth* [priority]
                     +--ro priority     uint8
                     +--ro bandwidth?   decimal64
   augment /nw:networks/nw:network/nt:link:
      +--rw interface-id?       uint32 te!
         +--rw config
         |  +--rw (bundle-stack-level)?
         |  |        +--:(label)  +--:(bundle)
         |  |  |  +--rw value?              uint32 bundled-links
         |  |  |     +--rw underlay-protection-type?   uint16 bundled-link* [sequence]
         |  |  |        +--rw underlay-trail-src sequence      uint32
         |  |  |        +--rw tp-ref? src-tp-ref?   leafref
         |  |  |        +--rw node-ref? des-tp-ref?   leafref
         |  |  +--:(component)
         |  |     +--rw network-ref?   leafref component-links
         |  |        +--rw underlay-trail-des component-link* [sequence]
         |  |           +--rw tp-ref?        leafref sequence             uint32
         |  |           +--rw node-ref?      leafref src-interface-ref?   string
         |  |           +--rw network-ref?   leafref des-interface-ref?   string
         |  +--rw admin-status?                     te-admin-status te-link-template*     leafref {template}?
         |  +--rw performance-metric-throttle {te-performance-
   metric}?
         | te-link-attributes
         |     +--rw unidirectional-delay-offset?           uint32 schedules
         |     |  +--rw measure-interval?                      uint32 schedule* [schedule-id]
         |     |     +--rw advertisement-interval? schedule-id          uint32
         |     |     +--rw suppression-interval?                  uint32 start?               yang:date-and-time
         |     |     +--rw threshold-out schedule-duration?   string
         |     |     +--rw repeat-interval?     string
         |     +--rw unidirectional-delay?                 uint32 access-type?                      te-types:te-link-
   access-type
         |     +--rw external-domain
         |     |  +--rw unidirectional-min-delay?             uint32 remote-te-node-id?      te-types:te-node-id
         |     |  +--rw remote-te-link-tp-id?   te-types:te-tp-id
         |     |  +--rw unidirectional-max-delay? plug-id?                uint32
         |     |     +--rw is-abstract?                      empty
         |     +--rw unidirectional-delay-variation?       uint32 name?                             string
         |     +--rw underlay! {te-topology-hierarchy}?
         |     |  +--rw unidirectional-packet-loss?
   decimal64 underlay-primary-path
         |     |  |  +--rw unidirectional-residual-bandwidth?
   decimal64 provider-id-ref?      leafref
         |     |  |  +--rw unidirectional-available-bandwidth?
   decimal64 client-id-ref?        leafref
         |     |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64 te-topology-id-ref?   leafref
         |     |  |  +--rw threshold-in network-id-ref?       leafref
         |     |  |  +--rw unidirectional-delay?                 uint32 path-element* [path-element-id]
         |     |  |     +--rw unidirectional-min-delay? path-element-id     uint32
         |     |  |     +--rw unidirectional-max-delay?             uint32 (type)?
         |     |  |  +--rw unidirectional-delay-variation?       uint32        +--:(ipv4-address)
         |     |  |        |  +--rw unidirectional-packet-loss?
   decimal64 v4-address?         inet:ipv4-
   address
         |     |  |        |  +--rw unidirectional-residual-bandwidth?
   decimal64 v4-prefix-length?   uint8
         |     |  |        |  +--rw unidirectional-available-bandwidth?
   decimal64 v4-loose?           boolean
         |     |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64        +--:(ipv6-address)
         |     |  +--rw threshold-accelerated-advertisement  |        |  +--rw unidirectional-delay?                 uint32 v6-address?         inet:ipv6-
   address
         |     |     +--rw unidirectional-min-delay?             uint32  |        |  +--rw unidirectional-max-delay?             uint32 v6-prefix-length?   uint8
         |     |     +--rw unidirectional-delay-variation?       uint32  |        |  +--rw unidirectional-packet-loss?
   decimal64 v6-loose?           boolean
         |     |     +--rw unidirectional-residual-bandwidth?
   decimal64  |        +--:(as-number)
         |     +--rw unidirectional-available-bandwidth?
   decimal64     |  |     +--rw unidirectional-utilized-bandwidth?
   decimal64        |  +--rw link-index?                       uint64 as-number?          uint16
         |     +--rw administrative-group?             te-types:admin-
   groups     |     +--rw max-link-bandwidth?               decimal64  |     +--rw max-resv-link-bandwidth?          decimal64        +--:(unnumbered-link)
         |     |     +--rw unreserved-bandwidth* [priority]  |        |  +--rw priority     uint8 router-id?          inet:ip-address
         |     |  |  +--rw bandwidth?   decimal64        |  +--rw te-default-metric? interface-id?       uint32
         |     +--rw performance-metric {te-performance-metric}?     |  |  +--rw measurement        +--:(label)
         |     |  |           +--rw unidirectional-delay? value?              uint32
         |     |  |  +--rw unidirectional-min-delay?             uint32 underlay-backup-path* [index]
         |     |  |  +--rw unidirectional-max-delay? index                 uint32
         |     |  |  +--rw unidirectional-delay-variation?       uint32 provider-id-ref?      leafref
         |     |  |  +--rw unidirectional-packet-loss?
   decimal64 client-id-ref?        leafref
         |     |  |  +--rw unidirectional-residual-bandwidth?
   decimal64 te-topology-id-ref?   leafref
         |     |  |  +--rw unidirectional-available-bandwidth?
   decimal64 network-id-ref?       leafref
         |     |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
         | path-element* [path-element-id]
         |  +--rw normality     |  |     +--rw unidirectional-delay?
   performance-metric-normality
         | path-element-id     uint32
         |     +--rw unidirectional-min-delay?
   performance-metric-normality     |  |     +--rw unidirectional-max-delay?
   performance-metric-normality (type)?
         |     |     +--rw unidirectional-delay-variation?
   performance-metric-normality  |        +--:(ipv4-address)
         |     |     +--rw unidirectional-packet-loss?
   performance-metric-normality  |        |  +--rw unidirectional-residual-bandwidth?
   performance-metric-normality v4-address?         inet:ipv4-
   address
         |     |     +--rw unidirectional-available-bandwidth?
   performance-metric-normality  |        |  +--rw unidirectional-utilized-bandwidth?
   performance-metric-normality v4-prefix-length?   uint8
         |     +--rw link-protection-type?             enumeration     |     +--rw interface-switching-capability* [switching-
   capability]  |        |  +--rw switching-capability               identityref v4-loose?           boolean
         |     |  +--rw encoding?                          identityref  |        +--:(ipv6-address)
         |  +--rw max-lsp-bandwidth* [priority]     |  |        |  +--rw priority     uint8
         | v6-address?         inet:ipv6-
   address
         |     |  +--rw bandwidth?   decimal64  |        |  +--rw time-division-multiplex-capable v6-prefix-length?   uint8
         |     |  |        |  +--rw minimum-lsp-bandwidth?   decimal64 v6-loose?           boolean
         |     |  |  +--rw indication?              enumeration        +--:(as-number)
         |     |  +--rw interface-adjustment-capability* [upper-sc]  |        |  +--rw upper-sc             identityref as-number?          uint16
         |     |     +--rw upper-encoding?      identityref  |        +--:(unnumbered-link)
         |     |     +--rw max-lsp-bandwidth* [priority]  |        |  +--rw priority     uint8 router-id?          inet:ip-address
         |     |        +--rw bandwidth?   decimal64  |     +--rw te-srlgs        |  +--rw values*   te-types:srlg
         +--ro state
            +--ro (bundle-stack-level)?
            |  +--:(bundle) interface-id?       uint32
         |     |  +--ro bundled-links  |        +--:(label)
         |     +--ro bundled-link* [sequence]     |  |        +--ro sequence           +--rw value?              uint32
         |     |        +--ro src-tp-ref?   leafref  +--rw underlay-protection-type?   uint16
         |     |        +--ro des-tp-ref?   leafref  +--rw underlay-trail-src
         |  +--:(component)     |     +--ro component-links  |        +--ro component-link* [sequence]  +--rw tp-ref?        leafref
         |           +--ro sequence             uint32     |           +--ro src-interface-ref?   string  |           +--ro des-interface-ref?   string
            +--ro te-link-template*  +--rw node-ref?      leafref {template}?
            +--ro te-link-attributes
         |  +--ro schedules     |  |  +--ro schedule* [schedule-id]  +--rw network-ref?   leafref
         |     |     +--ro schedule-id          uint32  +--rw underlay-trail-des
         |     |     +--ro start?               yang:date-and-time     +--rw tp-ref?        leafref
         |     |     +--ro schedule-duration?   string     +--rw node-ref?      leafref
         |     |     +--ro repeat-interval?     string     +--rw network-ref?   leafref
         |  +--ro access-type?                      te-link-access-
   type     +--rw admin-status?                     te-types:te-
   admin-status
         |  +--ro is-abstract?                      empty     +--rw performance-metric-throttle {te-performance-
   metric}?
         |  +--ro name?                             string     |  +--ro underlay! {te-topology-hierarchy}?  +--rw unidirectional-delay-offset?           uint32
         |     |  +--ro underlay-primary-path  +--rw measure-interval?                      uint32
         |     |  +--rw advertisement-interval?                uint32
         |  +--ro provider-id-ref?      leafref     |  +--rw suppression-interval?                  uint32
         |     |  +--ro client-id-ref?        leafref  +--rw threshold-out
         |     |  |  +--ro te-topology-id-ref?   leafref  +--rw unidirectional-delay?                 uint32
         |     |  |  +--ro network-id-ref?       leafref  +--rw unidirectional-min-delay?             uint32
         |     |  |  +--ro path-element* [path-element-id]  +--rw unidirectional-max-delay?             uint32
         |     |  |     +--ro path-element-id  +--rw unidirectional-delay-variation?       uint32
         |     |  |     +--ro (type)?  +--rw unidirectional-packet-loss?
   decimal64
         |     |  |        +--:(ipv4-address)  +--rw unidirectional-residual-bandwidth?
   decimal64
         |     |  |  +--rw unidirectional-available-bandwidth?
   decimal64
         |  +--ro v4-address?         inet:ipv4-
   address     |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
         |     |  +--ro v4-prefix-length?   uint8  +--rw threshold-in
         |     |  |  +--rw unidirectional-delay?                 uint32
         |  +--ro v4-loose?           boolean     |  |  +--rw unidirectional-min-delay?             uint32
         |        +--:(ipv6-address)     |  |  +--rw unidirectional-max-delay?             uint32
         |     |  +--ro v6-address?         inet:ipv6-
   address  |  +--rw unidirectional-delay-variation?       uint32
         |     |  |  +--ro v6-prefix-length?   uint8  +--rw unidirectional-packet-loss?
   decimal64
         |     |  |  +--rw unidirectional-residual-bandwidth?
   decimal64
         |     |  |  +--ro v6-loose?           boolean  +--rw unidirectional-available-bandwidth?
   decimal64
         |     |  |        +--:(as-number)  +--rw unidirectional-utilized-bandwidth?
   decimal64
         |     |  +--rw threshold-accelerated-advertisement
         |     |  +--ro as-number?          uint16     +--rw unidirectional-delay?                 uint32
         |     |     +--rw unidirectional-min-delay?             uint32
         |        +--:(unnumbered-link)     |     +--rw unidirectional-max-delay?             uint32
         |     |     +--rw unidirectional-delay-variation?       uint32
         |  +--ro router-id?          inet:ip-address     |     +--rw unidirectional-packet-loss?
   decimal64
         |     |     +--rw unidirectional-residual-bandwidth?
   decimal64
         |  +--ro interface-id?       uint32     |     +--rw unidirectional-available-bandwidth?
   decimal64
         |     |        +--:(label)     +--rw unidirectional-utilized-bandwidth?
   decimal64
         |     +--rw link-index?                       uint64
         |     +--rw administrative-group?             te-types:admin-
   groups
         |           +--ro value?              uint32     +--rw interface-switching-capability* [switching-
   capability]
         |     |  +--ro underlay-backup-path* [index]  +--rw switching-capability               identityref
         |     |  +--rw encoding?                          identityref
         |  +--ro index                 uint32     |  +--rw max-lsp-bandwidth* [priority]
         |     |  +--ro provider-id-ref?      leafref  |  +--rw priority     uint8
         |     |  +--ro client-id-ref?        leafref  |  +--rw bandwidth?   decimal64
         |     |  +--ro te-topology-id-ref?   leafref  +--rw time-division-multiplex-capable
         |     |     +--rw minimum-lsp-bandwidth?   decimal64
         |  +--ro network-id-ref?       leafref     |     +--rw indication?              enumeration
         |     +--rw link-protection-type?             enumeration
         |  +--ro path-element* [path-element-id]     +--rw max-link-bandwidth?               decimal64
         |     +--rw max-resv-link-bandwidth?          decimal64
         |     +--rw unreserved-bandwidth* [priority]
         |     +--ro path-element-id     uint32     |  +--rw priority     uint8
         |     |     +--ro (type)?  +--rw bandwidth?   decimal64
         |     +--rw te-default-metric?                uint32
         |     +--rw performance-metric {te-performance-metric}?
         |        +--:(ipv4-address)     |  +--rw measurement
         |     |  |  +--ro v4-address?         inet:ipv4-
   address  +--rw unidirectional-delay?                 uint32
         |     |  |  +--rw unidirectional-min-delay?             uint32
         |  +--ro v4-prefix-length?   uint8     |  |  +--rw unidirectional-max-delay?             uint32
         |     |  +--ro v4-loose?           boolean  |  +--rw unidirectional-delay-variation?       uint32
         |     |        +--:(ipv6-address)  |  +--rw unidirectional-packet-loss?
   decimal64
         |     |  |  +--ro v6-address?         inet:ipv6-
   address  +--rw unidirectional-residual-bandwidth?
   decimal64
         |     |  |  +--rw unidirectional-available-bandwidth?
   decimal64
         |  +--ro v6-prefix-length?   uint8     |  |  +--rw unidirectional-utilized-bandwidth?
   decimal64
         |     |  +--ro v6-loose?           boolean  +--rw normality
         |     |     +--rw unidirectional-delay?                 te-
   types:performance-metric-normality
         |        +--:(as-number)     |     +--rw unidirectional-min-delay?             te-
   types:performance-metric-normality
         |     |     +--rw unidirectional-max-delay?             te-
   types:performance-metric-normality
         |  +--ro as-number?          uint16     |     +--rw unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |     |        +--:(unnumbered-link)     +--rw unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |     |     +--rw unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |     |  +--ro router-id?          inet:ip-address     +--rw unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |     |     +--rw unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |     +--rw te-srlgs
         |        +--rw value*   te-types:srlg
         +--ro interface-id?       uint32 state
            +--ro (bundle-stack-level)?
            |  +--:(bundle)
            |  |        +--:(label)  +--ro bundled-links
            |  |     +--ro bundled-link* [sequence]
            |  |        +--ro value? sequence      uint32
            |  |        +--ro underlay-protection-type?   uint16 src-tp-ref?   leafref
            |  |        +--ro underlay-trail-src des-tp-ref?   leafref
            |  +--:(component)
            |     +--ro component-links
            |        +--ro tp-ref?        leafref component-link* [sequence]
            |           +--ro sequence             uint32
            |           +--ro src-interface-ref?   string
            |           +--ro node-ref? des-interface-ref?   string
            +--ro te-link-template*           leafref {template}?
            +--ro te-link-attributes
            |  +--ro schedules
            |  |  +--ro network-ref?   leafref schedule* [schedule-id]
            |  |     +--ro underlay-trail-des schedule-id          uint32
            |  |     +--ro tp-ref?        leafref start?               yang:date-and-time
            |  |     +--ro node-ref?      leafref schedule-duration?   string
            |  |     +--ro network-ref?   leafref repeat-interval?     string
            |  +--ro admin-status?                     te-admin-status access-type?                      te-types:te-link-
   access-type
            |  +--ro performance-metric-throttle {te-performance-
   metric}? external-domain
            |  |  +--ro unidirectional-delay-offset?           uint32 remote-te-node-id?      te-types:te-node-id
            |  |  +--ro measure-interval?                      uint32 remote-te-link-tp-id?   te-types:te-tp-id
            |  |  +--ro advertisement-interval? plug-id?                uint32
            |  |  +--ro suppression-interval?                  uint32
            | is-abstract?                      empty
            |  +--ro threshold-out name?                             string
            |  +--ro underlay! {te-topology-hierarchy}?
            |  |  +--ro unidirectional-delay?                 uint32 underlay-primary-path
            |  |  |  +--ro unidirectional-min-delay?             uint32 provider-id-ref?      leafref
            |  |  |  +--ro unidirectional-max-delay?             uint32 client-id-ref?        leafref
            |  |  |  +--ro unidirectional-delay-variation?       uint32 te-topology-id-ref?   leafref
            |  |  |  +--ro unidirectional-packet-loss?
   decimal64 network-id-ref?       leafref
            |  |  |  +--ro unidirectional-residual-bandwidth?
   decimal64 path-element* [path-element-id]
            |  |  |     +--ro unidirectional-available-bandwidth?
   decimal64 path-element-id     uint32
            |  |  |     +--ro unidirectional-utilized-bandwidth?
   decimal64
            | (type)?
            |  +--ro threshold-in  |  |        +--:(ipv4-address)
            |  +--ro unidirectional-delay?                 uint32  |  |        |  +--ro unidirectional-min-delay?             uint32 v4-address?         inet:ipv4-
   address
            |  |  |        |  +--ro unidirectional-max-delay?             uint32 v4-prefix-length?   uint8
            |  |  |        |  +--ro unidirectional-delay-variation?       uint32 v4-loose?           boolean
            |  |  |  +--ro unidirectional-packet-loss?
   decimal64        +--:(ipv6-address)
            |  |  |        |  +--ro unidirectional-residual-bandwidth?
   decimal64 v6-address?         inet:ipv6-
   address
            |  |  |  +--ro unidirectional-available-bandwidth?
   decimal64        |  +--ro v6-prefix-length?   uint8
            |  |  +--ro unidirectional-utilized-bandwidth?
   decimal64  |        |  +--ro threshold-accelerated-advertisement v6-loose?           boolean
            |  |     +--ro unidirectional-delay?                 uint32  |        +--:(as-number)
            |  |     +--ro unidirectional-min-delay?             uint32  |        |  +--ro unidirectional-max-delay?             uint32 as-number?          uint16
            |  |     +--ro unidirectional-delay-variation?       uint32  |        +--:(unnumbered-link)
            |  |     +--ro unidirectional-packet-loss?
   decimal64  |        |  +--ro unidirectional-residual-bandwidth?
   decimal64 router-id?          inet:ip-address
            |  |     +--ro unidirectional-available-bandwidth?
   decimal64  |        |  +--ro unidirectional-utilized-bandwidth?
   decimal64 interface-id?       uint32
            |  +--ro link-index?                       uint64  |  +--ro administrative-group?             te-types:admin-
   groups  |  +--ro max-link-bandwidth?               decimal64        +--:(label)
            |  |  +--ro max-resv-link-bandwidth?          decimal64  |           +--ro unreserved-bandwidth* [priority] value?              uint32
            |  |  +--ro priority     uint8 underlay-backup-path* [index]
            |  |  +--ro bandwidth?   decimal64  |  +--ro te-default-metric? index                 uint32
            |  +--ro performance-metric {te-performance-metric}?  |  |  +--ro measurement provider-id-ref?      leafref
            |  |  |  +--ro unidirectional-delay?                 uint32 client-id-ref?        leafref
            |  |  |  +--ro unidirectional-min-delay?             uint32 te-topology-id-ref?   leafref
            |  |  |  +--ro unidirectional-max-delay?             uint32 network-id-ref?       leafref
            |  |  |  +--ro unidirectional-delay-variation?       uint32 path-element* [path-element-id]
            |  |  |     +--ro unidirectional-packet-loss?
   decimal64 path-element-id     uint32
            |  |  |     +--ro unidirectional-residual-bandwidth?
   decimal64 (type)?
            |  |  |  +--ro unidirectional-available-bandwidth?
   decimal64        +--:(ipv4-address)
            |  |  |        |  +--ro unidirectional-utilized-bandwidth?
   decimal64 v4-address?         inet:ipv4-
   address
            |  |  +--ro normality  |        |  +--ro unidirectional-delay?
   performance-metric-normality v4-prefix-length?   uint8
            |  |     +--ro unidirectional-min-delay?
   performance-metric-normality  |        |  +--ro unidirectional-max-delay?
   performance-metric-normality v4-loose?           boolean
            |  |     +--ro unidirectional-delay-variation?
   performance-metric-normality  |        +--:(ipv6-address)
            |  |     +--ro unidirectional-packet-loss?
   performance-metric-normality  |        |  +--ro unidirectional-residual-bandwidth?
   performance-metric-normality v6-address?         inet:ipv6-
   address
            |  |     +--ro unidirectional-available-bandwidth?
   performance-metric-normality  |        |  +--ro unidirectional-utilized-bandwidth?
   performance-metric-normality v6-prefix-length?   uint8
            |  +--ro link-protection-type?             enumeration  |  +--ro interface-switching-capability* [switching-
   capability]  |        |  +--ro switching-capability               identityref v6-loose?           boolean
            |  |  +--ro encoding?                          identityref  |        +--:(as-number)
            |  +--ro max-lsp-bandwidth* [priority]  |  |        |  +--ro priority     uint8
            | as-number?          uint16
            |  |  +--ro bandwidth?   decimal64  |        +--:(unnumbered-link)
            |  +--ro time-division-multiplex-capable  |  |        |  +--ro minimum-lsp-bandwidth?   decimal64 router-id?          inet:ip-address
            |  |  |        |  +--ro indication?              enumeration interface-id?       uint32
            |  |  +--ro interface-adjustment-capability* [upper-sc]  |        +--:(label)
            |     +--ro upper-sc             identityref  |  |           +--ro upper-encoding?      identityref value?              uint32
            |  |  +--ro max-lsp-bandwidth* [priority] underlay-protection-type?   uint16
            |  |  +--ro priority     uint8 underlay-trail-src
            |  |        +--ro bandwidth?   decimal64  |  +--ro te-srlgs tp-ref?        leafref
            |     +--ro values*   te-types:srlg
            +--ro oper-status?                te-oper-status
            +--ro information-source?         enumeration
            +--ro information-source-state  |  +--ro credibility-preference?   uint16  |  +--ro topology node-ref?      leafref
            |  |  |  +--ro provider-id-ref? network-ref?   leafref
            |  |  +--ro client-id-ref?        leafref underlay-trail-des
            |  |     +--ro te-topology-id-ref? tp-ref?        leafref
            |  |     +--ro network-id-ref? node-ref?      leafref
            |  |     +--ro routing-instance?         string network-ref?   leafref
            |  +--ro alt-information-sources* [information-source] admin-status?                     te-types:te-
   admin-status
            |  +--ro information-source                enumeration performance-metric-throttle {te-performance-
   metric}?
            |  |  +--ro information-source-state unidirectional-delay-offset?           uint32
            |  |  +--ro credibility-preference?   uint16 measure-interval?                      uint32
            |  |  +--ro topology advertisement-interval?                uint32
            |  |  +--ro suppression-interval?                  uint32
            |  |  +--ro provider-id-ref?      leafref threshold-out
            |  |  |  +--ro client-id-ref?        leafref unidirectional-delay?                 uint32
            |  |  |  +--ro te-topology-id-ref?   leafref unidirectional-min-delay?             uint32
            |  |  |  +--ro network-id-ref?       leafref unidirectional-max-delay?             uint32
            |  |  +--ro routing-instance?         string  |  +--ro link-index?                       uint64 unidirectional-delay-variation?       uint32
            |  +--ro administrative-group?             te-types:admin-
   groups  |  +--ro max-link-bandwidth?               decimal64  |  +--ro max-resv-link-bandwidth? unidirectional-packet-loss?
   decimal64
            |  +--ro unreserved-bandwidth* [priority]  |  |  +--ro priority     uint8 unidirectional-residual-bandwidth?
   decimal64
            |  |  |  +--ro bandwidth? unidirectional-available-bandwidth?
   decimal64
            |  +--ro te-default-metric?                uint32  |  |  +--ro performance-metric {te-performance-metric}? unidirectional-utilized-bandwidth?
   decimal64
            |  |  +--ro measurement threshold-in
            |  |  |  +--ro unidirectional-delay?                 uint32
            |  |  |  +--ro unidirectional-min-delay?             uint32
            |  |  |  +--ro unidirectional-max-delay?             uint32
            |  |  |  +--ro unidirectional-delay-variation?       uint32
            |  |  |  +--ro unidirectional-packet-loss?
   decimal64
            |  |  |  +--ro unidirectional-residual-bandwidth?
   decimal64
            |  |  |  +--ro unidirectional-available-bandwidth?
   decimal64
            |  |  |  +--ro unidirectional-utilized-bandwidth?
   decimal64
            |  |  +--ro normality threshold-accelerated-advertisement
            |  |     +--ro unidirectional-delay?
   performance-metric-normality                 uint32
            |  |     +--ro unidirectional-min-delay?
   performance-metric-normality             uint32
            |  |     +--ro unidirectional-max-delay?
   performance-metric-normality             uint32
            |  |     +--ro unidirectional-delay-variation?
   performance-metric-normality       uint32
            |  |     +--ro unidirectional-packet-loss?
   performance-metric-normality
   decimal64
            |  |     +--ro unidirectional-residual-bandwidth?
   performance-metric-normality
   decimal64
            |  |     +--ro unidirectional-available-bandwidth?
   performance-metric-normality
   decimal64
            |  |     +--ro unidirectional-utilized-bandwidth?
   performance-metric-normality
   decimal64
            |  +--ro link-protection-type?             enumeration link-index?                       uint64
            |  +--ro administrative-group?             te-types:admin-
   groups
            |  +--ro interface-switching-capability* [switching-
   capability]
            |  |  +--ro switching-capability               identityref
            |  |  +--ro encoding?                          identityref
            |  |  +--ro max-lsp-bandwidth* [priority]
            |  |  |  +--ro priority     uint8
            |  |  |  +--ro bandwidth?   decimal64
            |  |  +--ro time-division-multiplex-capable
            |  |  |     +--ro minimum-lsp-bandwidth?   decimal64
            |  |  |     +--ro indication?              enumeration
            |  +--ro link-protection-type?             enumeration
            |  +--ro max-link-bandwidth?               decimal64
            |  +--ro max-resv-link-bandwidth?          decimal64
            |  +--ro unreserved-bandwidth* [priority]
            |  |  +--ro priority     uint8
            |  |  +--ro bandwidth?   decimal64
            |  +--ro te-default-metric?                uint32
            |  +--ro performance-metric {te-performance-metric}?
            |  |  +--ro measurement
            |  |  |  +--ro unidirectional-delay?                 uint32
            |  |  |  +--ro unidirectional-min-delay?             uint32
            |  |  |  +--ro unidirectional-max-delay?             uint32
            |  |  |  +--ro unidirectional-delay-variation?       uint32
            |  |  |  +--ro unidirectional-packet-loss?
   decimal64
            |  |  |  +--ro unidirectional-residual-bandwidth?
   decimal64
            |  |  |  +--ro interface-adjustment-capability* [upper-sc] unidirectional-available-bandwidth?
   decimal64
            |  |  |  +--ro upper-sc             identityref unidirectional-utilized-bandwidth?
   decimal64
            |  |  +--ro upper-encoding?      identityref normality
            |  |     +--ro max-lsp-bandwidth* [priority] unidirectional-delay?                 te-
   types:performance-metric-normality
            |  |     +--ro priority     uint8 unidirectional-min-delay?             te-
   types:performance-metric-normality
            |  |     +--ro bandwidth?   decimal64 unidirectional-max-delay?             te-
   types:performance-metric-normality
            |  +--ro te-srlgs  |     +--ro values*   te-types:srlg
            +--ro recovery unidirectional-delay-variation?       te-
   types:performance-metric-normality
            |  +--ro restoration-status?   te-recovery-status  |     +--ro protection-status?    te-recovery-status
            +--ro underlay {te-topology-hierarchy}?
               +--ro dynamic?     boolean
               +--ro committed?   boolean
   augment /nw:networks/nw:network/nw:node/nt:termination-point:
      +--rw te!
         +--rw te-tp-id    te-tp-id
         +--rw config unidirectional-packet-loss?           te-
   types:performance-metric-normality
            |  +--rw schedules  |     +--rw schedule* [schedule-id]     +--ro unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
            |        +--rw schedule-id          uint32  |        +--rw start?               yang:date-and-time     +--ro unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
            |        +--rw schedule-duration?   string  |        +--rw repeat-interval?     string     +--ro state unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
            |  +--ro schedules te-srlgs
            |     +--ro schedule* [schedule-id] value*   te-types:srlg
            +--ro schedule-id          uint32 oper-status?                te-types:te-oper-status
            +--ro start?               yang:date-and-time is-transitional?            empty
            +--ro schedule-duration?   string information-source?         enumeration
            +--ro repeat-interval?     string
   notifications:
      +---n te-node-event information-source-state
            |  +--ro event-type?                 te-topology-event-type credibility-preference?   uint16
            |  +--ro node-ref?                   leafref topology
            |  |  +--ro network-ref? provider-id-ref?      leafref
            |  +--ro te-topology!  |  +--ro te-node-attributes client-id-ref?        leafref
            |  |  +--ro schedules
      | te-topology-id-ref?   leafref
            |  |  +--ro schedule* [schedule-id]
      |  | network-id-ref?       leafref
            |  +--ro schedule-id          uint32
      |  |  | routing-instance?         string
            +--ro start?               yang:date-and-time
      |  | information-source-entry* [information-source]
            |  +--ro schedule-duration?   string
      |  | information-source                enumeration
            |  +--ro repeat-interval?     string information-source-state
            |  |  +--ro admin-status?          te-admin-status credibility-preference?   uint16
            |  |  +--ro connectivity-matrix* [id] topology
            |  |  |  +--ro id            uint32 provider-id-ref?      leafref
            |  |  |  +--ro from
      | client-id-ref?        leafref
            |  |  |  +--ro tp-ref? te-topology-id-ref?   leafref
            |  |  |  |  +--ro node-ref? network-id-ref?       leafref
            |  |  +--ro routing-instance?         string
            |  +--ro link-index?                       uint64
            |  +--ro network-ref?   leafref administrative-group?             te-types:admin-
   groups
            |  +--ro interface-switching-capability* [switching-
   capability]
            |  |  +--ro to switching-capability               identityref
            |  |  +--ro encoding?                          identityref
            |  |  +--ro tp-ref?        leafref
      | max-lsp-bandwidth* [priority]
            |  |  |  +--ro node-ref?      leafref
      | priority     uint8
            |  |  |  +--ro network-ref?   leafref
      | bandwidth?   decimal64
            |  |  +--ro is-allowed?   boolean time-division-multiplex-capable
            |  |     +--ro domain-id?             uint32 minimum-lsp-bandwidth?   decimal64
            |  |     +--ro is-abstract?           empty indication?              enumeration
            |  +--ro link-protection-type?             enumeration
            |  +--ro name?                  inet:domain-name max-link-bandwidth?               decimal64
            |  +--ro max-resv-link-bandwidth?          decimal64
            |  +--ro signaling-address*     inet:ip-address unreserved-bandwidth* [priority]
            |  |  +--ro underlay-topology {te-topology-hierarchy}? priority     uint8
            |  |  +--ro provider-id-ref?      leafref bandwidth?   decimal64
            |  +--ro te-default-metric?                uint32
            |  +--ro client-id-ref?        leafref performance-metric {te-performance-metric}?
            |  |  +--ro te-topology-id-ref?   leafref measurement
            |  |     +--ro network-id-ref?       leafref  |  +--ro oper-status?                te-oper-status unidirectional-delay?                 uint32
            |  +--ro is-multi-access-dr?         empty  |  +--ro information-source?         enumeration  |  +--ro information-source-state
      | unidirectional-min-delay?             uint32
            |  +--ro credibility-preference?   uint16  |  |  +--ro topology unidirectional-max-delay?             uint32
            |  |  |  +--ro provider-id-ref?      leafref unidirectional-delay-variation?       uint32
            |  |  |  +--ro client-id-ref?        leafref unidirectional-packet-loss?
   decimal64
            |  |  |  +--ro te-topology-id-ref?   leafref unidirectional-residual-bandwidth?
   decimal64
            |  |  |  +--ro network-id-ref?       leafref unidirectional-available-bandwidth?
   decimal64
            |  |  +--ro routing-instance?         string  |  +--ro alt-information-sources* [information-source] unidirectional-utilized-bandwidth?
   decimal64
            |     +--ro information-source          enumeration  |  +--ro information-source-state normality
            |  |     +--ro credibility-preference?   uint16 unidirectional-delay?                 te-
   types:performance-metric-normality
            |  |     +--ro topology
      | unidirectional-min-delay?             te-
   types:performance-metric-normality
            |  |     +--ro provider-id-ref?      leafref
      | unidirectional-max-delay?             te-
   types:performance-metric-normality
            |  |     +--ro client-id-ref?        leafref
      | unidirectional-delay-variation?       te-
   types:performance-metric-normality
            |  |     +--ro te-topology-id-ref?   leafref
      | unidirectional-packet-loss?           te-
   types:performance-metric-normality
            |  |     +--ro network-id-ref?       leafref unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
            |  |     +--ro routing-instance?         string unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
            |  |     +--ro connectivity-matrix* [id] unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
            |  +--ro te-srlgs
            |     +--ro id            uint32 value*   te-types:srlg
            +--ro recovery
            |  +--ro restoration-status?   te-types:te-recovery-status
            |  +--ro from protection-status?    te-types:te-recovery-status
            +--ro underlay {te-topology-hierarchy}?
               +--ro dynamic?     boolean
               +--ro committed?   boolean
   augment /nw:networks/nw:network/nw:node/nt:termination-point:
      +--rw te!
         +--rw te-tp-id    te-types:te-tp-id
         +--rw config
         |  +--rw schedules
         |  |  +--ro tp-ref?        leafref  +--rw schedule* [schedule-id]
         |  |     +--rw schedule-id          uint32
         |  +--ro node-ref?      leafref  |     +--rw start?               yang:date-and-time
         |  |  +--ro network-ref?   leafref     +--rw schedule-duration?   string
         |  |  +--ro to     +--rw repeat-interval?     string
         |  +--rw interface-switching-capability* [switching-capability]
         |  |  +--ro tp-ref?        leafref  +--rw switching-capability               identityref
         |  |  +--rw encoding?                          identityref
         |  +--ro node-ref?      leafref  |  +--rw max-lsp-bandwidth* [priority]
         |  |  +--ro network-ref?   leafref  |  +--rw priority     uint8
         |  +--ro is-allowed?   boolean  |     +--ro domain-id?                  uint32  |     +--ro is-abstract?                empty  +--rw bandwidth?   decimal64
         |     +--ro name?                       inet:domain-name  |     +--ro signaling-address*          inet:ip-address  +--rw time-division-multiplex-capable
         |     +--ro underlay-topology {te-topology-hierarchy}?  |        +--ro provider-id-ref?      leafref     +--rw minimum-lsp-bandwidth?   decimal64
         |        +--ro client-id-ref?        leafref  |        +--ro te-topology-id-ref?   leafref     +--rw indication?              enumeration
         |  +--rw inter-layer-lock-id?              uint32
         +--ro network-id-ref?       leafref
      +---n te-link-event
         +--ro event-type?                 te-topology-event-type
         +--ro link-ref?                   leafref
         +--ro network-ref?                leafref
         +--ro te-topology!
         +--ro te-link-attributes
         | state
            +--ro schedules
            |  |  +--ro schedule* [schedule-id]
            |  |     +--ro schedule-id          uint32
            |  |     +--ro start?               yang:date-and-time
            |  |     +--ro schedule-duration?   string
            |  |     +--ro repeat-interval?     string
         |
            +--ro access-type?                      te-link-access-type interface-switching-capability* [switching-capability]
            |  +--ro is-abstract?                      empty switching-capability               identityref
            |  +--ro name?                             string encoding?                          identityref
            |  +--ro underlay! {te-topology-hierarchy}? max-lsp-bandwidth* [priority]
            |  |  +--ro underlay-primary-path
         | priority     uint8
            |  |  +--ro provider-id-ref?      leafref bandwidth?   decimal64
            |  +--ro time-division-multiplex-capable
            |     +--ro minimum-lsp-bandwidth?   decimal64
            |     +--ro client-id-ref?        leafref indication?              enumeration
            +--ro inter-layer-lock-id?              uint32
   notifications:
      +---n te-node-event
      |  +--ro event-type?                 te-types:te-topology-event-
   type
      |  +--ro node-ref?                   leafref
      |  +--ro te-topology-id-ref? network-ref?                leafref
      |  +--ro te-topology!
      |  +--ro te-node-attributes
      |  |  +--ro network-id-ref?       leafref schedules
      |  |  |  +--ro path-element* [path-element-id] schedule* [schedule-id]
      |  |  |     +--ro path-element-id schedule-id          uint32
      |  |  |     +--ro (type)?
         | start?               yang:date-and-time
      |  |        +--:(ipv4-address)  |     +--ro schedule-duration?   string
      |  |  |     +--ro v4-address?         inet:ipv4-address repeat-interval?     string
      |  |  +--ro admin-status?          te-types:te-admin-status
      |  |  +--ro v4-prefix-length?   uint8
         | connectivity-matrix* [id]
      |  |  |  +--ro v4-loose?           boolean id            uint32
      |  |  |        +--:(ipv6-address)  +--ro from
      |  |  |  |  +--ro v6-address?         inet:ipv6-address tp-ref?        leafref
      |  |  |  |  +--ro v6-prefix-length?   uint8 node-ref?      leafref
      |  |  |  |  +--ro v6-loose?           boolean network-ref?   leafref
      |  |  |        +--:(as-number)  +--ro to
      |  |  |  |  +--ro as-number?          uint16
         |  |  |        +--:(unnumbered-link) tp-ref?        leafref
      |  |  |  |  +--ro router-id?          inet:ip-address node-ref?      leafref
      |  |  |  |  +--ro interface-id?       uint32
         | network-ref?   leafref
      |  |        +--:(label)  |  +--ro is-allowed?   boolean
      |  |  +--ro value? domain-id?             uint32
      |  |  +--ro underlay-backup-path* [index] is-abstract?           empty
      |  |  +--ro name?                  inet:domain-name
      |  |  +--ro index                 uint32 signaling-address*     inet:ip-address
      |  |  +--ro underlay-topology {te-topology-hierarchy}?
      |  |     +--ro provider-id-ref?      leafref
      |  |  |     +--ro client-id-ref?        leafref
      |  |  |     +--ro te-topology-id-ref?   leafref
      |  |  |     +--ro network-id-ref?       leafref
      |  +--ro oper-status?                te-types:te-oper-status
      |  +--ro is-multi-access-dr?         empty
      |  +--ro path-element* [path-element-id] information-source?         enumeration
      |  +--ro information-source-state
      |  |  +--ro path-element-id     uint32
         | credibility-preference?   uint16
      |  |  +--ro (type)?
         | topology
      |  |        +--:(ipv4-address)  |  +--ro provider-id-ref?      leafref
      |  |  |  +--ro v4-address?         inet:ipv4-address
         | client-id-ref?        leafref
      |  |  |  +--ro v4-prefix-length?   uint8
         | te-topology-id-ref?   leafref
      |  |  |  +--ro v4-loose?           boolean
         |  | network-id-ref?       leafref
      |        +--:(ipv6-address)  |  +--ro routing-instance?         string
      |  +--ro information-source-entry* [information-source]
      |     +--ro information-source          enumeration
      |     +--ro v6-address?         inet:ipv6-address information-source-state
      |     |  +--ro credibility-preference?   uint16
      |     |  +--ro v6-prefix-length?   uint8
         | topology
      |     |  |  +--ro v6-loose?           boolean
         | provider-id-ref?      leafref
      |     |        +--:(as-number)  |  +--ro client-id-ref?        leafref
      |     |  |  +--ro as-number?          uint16
         | te-topology-id-ref?   leafref
      |     |        +--:(unnumbered-link)  |  +--ro network-id-ref?       leafref
      |     |  +--ro routing-instance?         string
      |     +--ro router-id?          inet:ip-address connectivity-matrix* [id]
      |     |  +--ro id            uint32
      |     |  +--ro interface-id?       uint32 from
      |     |  |        +--:(label)  +--ro tp-ref?        leafref
      |     |  |  +--ro value?              uint32 node-ref?      leafref
      |     |  |  +--ro underlay-protection-type?   uint16 network-ref?   leafref
      |     |  +--ro underlay-trail-src to
      |     |  |  +--ro tp-ref?        leafref
      |     |  |  +--ro node-ref?      leafref
      |     |  |  +--ro network-ref?   leafref
      |     |  +--ro underlay-trail-des is-allowed?   boolean
      |     +--ro domain-id?                  uint32
      |     +--ro is-abstract?                empty
      |     +--ro name?                       inet:domain-name
      |     +--ro signaling-address*          inet:ip-address
      |     +--ro tp-ref? underlay-topology {te-topology-hierarchy}?
      |        +--ro provider-id-ref?      leafref
      |        +--ro client-id-ref?        leafref
      |        +--ro te-topology-id-ref?   leafref
      |        +--ro node-ref? network-id-ref?       leafref
      +---n te-link-event
         +--ro event-type?                 te-types:te-topology-event-
   type
         +--ro link-ref?                   leafref
         +--ro network-ref?                leafref
         +--ro te-topology!
         +--ro te-link-attributes
         |  +--ro schedules
         |  |  +--ro schedule* [schedule-id]
         |  |     +--ro network-ref?   leafref schedule-id          uint32
         |  |     +--ro dynamic?                    boolean start?               yang:date-and-time
         |  |     +--ro committed?                  boolean schedule-duration?   string
         |  +--ro admin-status?                     te-admin-status  |     +--ro performance-metric-throttle {te-performance-metric}? repeat-interval?     string
         |  +--ro access-type?                      te-types:te-link-
   access-type
         |  +--ro unidirectional-delay-offset?           uint32 external-domain
         |  |  +--ro measure-interval?                      uint32 remote-te-node-id?      te-types:te-node-id
         |  |  +--ro advertisement-interval?                uint32 remote-te-link-tp-id?   te-types:te-tp-id
         |  |  +--ro suppression-interval? plug-id?                uint32
         |  +--ro is-abstract?                      empty
         |  +--ro threshold-out name?                             string
         |  +--ro underlay! {te-topology-hierarchy}?
         |  |  +--ro unidirectional-delay?                 uint32 underlay-primary-path
         |  |  |  +--ro unidirectional-min-delay?             uint32 provider-id-ref?      leafref
         |  |  |  +--ro unidirectional-max-delay?             uint32 client-id-ref?        leafref
         |  |  |  +--ro unidirectional-delay-variation?       uint32 te-topology-id-ref?   leafref
         |  |  |  +--ro unidirectional-packet-loss?           decimal64 network-id-ref?       leafref
         |  |  |  +--ro unidirectional-residual-bandwidth?    decimal64 path-element* [path-element-id]
         |  |  |     +--ro unidirectional-available-bandwidth?   decimal64 path-element-id     uint32
         |  |  |     +--ro unidirectional-utilized-bandwidth?    decimal64
         | (type)?
         |  +--ro threshold-in  |  |        +--:(ipv4-address)
         |  +--ro unidirectional-delay?                 uint32  |  |        |  +--ro unidirectional-min-delay?             uint32 v4-address?         inet:ipv4-address
         |  |  |        |  +--ro unidirectional-max-delay?             uint32 v4-prefix-length?   uint8
         |  |  |        |  +--ro unidirectional-delay-variation?       uint32 v4-loose?           boolean
         |  |  |  +--ro unidirectional-packet-loss?           decimal64        +--:(ipv6-address)
         |  |  |        |  +--ro unidirectional-residual-bandwidth?    decimal64 v6-address?         inet:ipv6-address
         |  |  |  +--ro unidirectional-available-bandwidth?   decimal64        |  +--ro v6-prefix-length?   uint8
         |  |  +--ro unidirectional-utilized-bandwidth?    decimal64  |        |  +--ro threshold-accelerated-advertisement v6-loose?           boolean
         |  |     +--ro unidirectional-delay?                 uint32  |        +--:(as-number)
         |  |     +--ro unidirectional-min-delay?             uint32  |        |  +--ro unidirectional-max-delay?             uint32 as-number?          uint16
         |  |     +--ro unidirectional-delay-variation?       uint32  |        +--:(unnumbered-link)
         |  |     +--ro unidirectional-packet-loss?           decimal64  |        |  +--ro unidirectional-residual-bandwidth?    decimal64 router-id?          inet:ip-address
         |  |     +--ro unidirectional-available-bandwidth?   decimal64  |        |  +--ro unidirectional-utilized-bandwidth?    decimal64 interface-id?       uint32
         |  +--ro link-index?                       uint64  |  +--ro administrative-group?             te-types:admin-
   groups  |  +--ro max-link-bandwidth?               decimal64        +--:(label)
         |  |  +--ro max-resv-link-bandwidth?          decimal64  |           +--ro unreserved-bandwidth* [priority] value?              uint32
         |  |  +--ro priority     uint8 underlay-backup-path* [index]
         |  |  +--ro bandwidth?   decimal64  |  +--ro te-default-metric? index                 uint32
         |  +--ro performance-metric {te-performance-metric}?  |  |  +--ro measurement provider-id-ref?      leafref
         |  |  |  +--ro unidirectional-delay?                 uint32 client-id-ref?        leafref
         |  |  |  +--ro unidirectional-min-delay?             uint32 te-topology-id-ref?   leafref
         |  |  |  +--ro unidirectional-max-delay?             uint32 network-id-ref?       leafref
         |  |  |  +--ro unidirectional-delay-variation?       uint32 path-element* [path-element-id]
         |  |  |     +--ro unidirectional-packet-loss?           decimal64 path-element-id     uint32
         |  |  |     +--ro unidirectional-residual-bandwidth?    decimal64 (type)?
         |  |  |  +--ro unidirectional-available-bandwidth?   decimal64        +--:(ipv4-address)
         |  |  |        |  +--ro unidirectional-utilized-bandwidth?    decimal64 v4-address?         inet:ipv4-address
         |  |  +--ro normality  |        |  +--ro unidirectional-delay?
   performance-metric-normality v4-prefix-length?   uint8
         |  |     +--ro unidirectional-min-delay?
   performance-metric-normality  |        |  +--ro unidirectional-max-delay?
   performance-metric-normality v4-loose?           boolean
         |  |     +--ro unidirectional-delay-variation?
   performance-metric-normality  |        +--:(ipv6-address)
         |  |     +--ro unidirectional-packet-loss?
   performance-metric-normality  |        |  +--ro unidirectional-residual-bandwidth?
   performance-metric-normality v6-address?         inet:ipv6-address
         |  |     +--ro unidirectional-available-bandwidth?
   performance-metric-normality  |        |  +--ro unidirectional-utilized-bandwidth?
   performance-metric-normality v6-prefix-length?   uint8
         |  +--ro link-protection-type?             enumeration  |  +--ro interface-switching-capability* [switching-capability]  |        |  +--ro switching-capability               identityref v6-loose?           boolean
         |  |  +--ro encoding?                          identityref  |        +--:(as-number)
         |  +--ro max-lsp-bandwidth* [priority]  |  |        |  +--ro priority     uint8 as-number?          uint16
         |  |  |        +--:(unnumbered-link)
         |  |  +--ro bandwidth?   decimal64  |        |  +--ro time-division-multiplex-capable router-id?          inet:ip-address
         |  |  |        |  +--ro minimum-lsp-bandwidth?   decimal64 interface-id?       uint32
         |  |  |  +--ro indication?              enumeration        +--:(label)
         |  |  |           +--ro interface-adjustment-capability* [upper-sc] value?              uint32
         |  |  +--ro upper-sc             identityref underlay-protection-type?   uint16
         |  |  +--ro upper-encoding?      identityref underlay-trail-src
         |  |  |  +--ro max-lsp-bandwidth* [priority] tp-ref?        leafref
         |  |  |  +--ro priority     uint8 node-ref?      leafref
         |  |        +--ro bandwidth?   decimal64  |  +--ro te-srlgs network-ref?   leafref
         |     +--ro values*   te-types:srlg
         +--ro oper-status?                te-oper-status
         +--ro information-source?         enumeration
         +--ro information-source-state  |  +--ro credibility-preference?   uint16 underlay-trail-des
         |  +--ro topology  |  |  +--ro provider-id-ref? tp-ref?        leafref
         |  |  |  +--ro client-id-ref? node-ref?      leafref
         |  |  |  +--ro te-topology-id-ref? network-ref?   leafref
         |  |  +--ro network-id-ref?       leafref dynamic?                    boolean
         |  |  +--ro routing-instance?         string committed?                  boolean
         |  +--ro alt-information-sources* [information-source] admin-status?                     te-types:te-admin-
   status
         |  +--ro information-source                enumeration performance-metric-throttle {te-performance-metric}?
         |  |  +--ro information-source-state unidirectional-delay-offset?           uint32
         |  |  +--ro credibility-preference?   uint16 measure-interval?                      uint32
         |  |  +--ro topology advertisement-interval?                uint32
         |  |  +--ro suppression-interval?                  uint32
         |  |  +--ro provider-id-ref?      leafref threshold-out
         |  |  |  +--ro client-id-ref?        leafref unidirectional-delay?                 uint32
         |  |  |  +--ro te-topology-id-ref?   leafref unidirectional-min-delay?             uint32
         |  |  |  +--ro network-id-ref?       leafref unidirectional-max-delay?             uint32
         |  |  +--ro routing-instance?         string  |  +--ro link-index?                       uint64 unidirectional-delay-variation?       uint32
         |  +--ro administrative-group?             te-types:admin-
   groups  |  +--ro max-link-bandwidth?               decimal64  |  +--ro max-resv-link-bandwidth? unidirectional-packet-loss?           decimal64
         |  +--ro unreserved-bandwidth* [priority]  |  |  +--ro priority     uint8 unidirectional-residual-bandwidth?    decimal64
         |  |  |  +--ro bandwidth? unidirectional-available-bandwidth?   decimal64
         |  +--ro te-default-metric?                uint32  |  |  +--ro performance-metric {te-performance-metric}? unidirectional-utilized-bandwidth?    decimal64
         |  |  +--ro measurement threshold-in
         |  |  |  +--ro unidirectional-delay?                 uint32
         |  |  |  +--ro unidirectional-min-delay?             uint32
         |  |  |  +--ro unidirectional-max-delay?             uint32
         |  |  |  +--ro unidirectional-delay-variation?       uint32
         |  |  |  +--ro unidirectional-packet-loss?           decimal64
         |  |  |  +--ro unidirectional-residual-bandwidth?    decimal64
         |  |  |  +--ro unidirectional-available-bandwidth?   decimal64
         |  |  |  +--ro unidirectional-utilized-bandwidth?    decimal64
         |  |  +--ro normality threshold-accelerated-advertisement
         |  |     +--ro unidirectional-delay?
   performance-metric-normality                 uint32
         |  |     +--ro unidirectional-min-delay?
   performance-metric-normality             uint32
         |  |     +--ro unidirectional-max-delay?
   performance-metric-normality             uint32
         |  |     +--ro unidirectional-delay-variation?
   performance-metric-normality       uint32
         |  |     +--ro unidirectional-packet-loss?
   performance-metric-normality           decimal64
         |  |     +--ro unidirectional-residual-bandwidth?
   performance-metric-normality    decimal64
         |  |     +--ro unidirectional-available-bandwidth?
   performance-metric-normality   decimal64
         |  |     +--ro unidirectional-utilized-bandwidth?
   performance-metric-normality    decimal64
         |  +--ro link-protection-type?             enumeration link-index?                       uint64
         |  +--ro administrative-group?             te-types:admin-
   groups
         |  +--ro interface-switching-capability* [switching-capability]
         |  |  +--ro switching-capability               identityref
         |  |  +--ro encoding?                          identityref
         |  |  +--ro max-lsp-bandwidth* [priority]
         |  |  |  +--ro priority     uint8
         |  |  |  +--ro bandwidth?   decimal64
         |  |  +--ro time-division-multiplex-capable
         |  |  |     +--ro minimum-lsp-bandwidth?   decimal64
         |  |  |     +--ro indication?              enumeration
         |  |  +--ro interface-adjustment-capability* [upper-sc]
         | link-protection-type?             enumeration
         |  +--ro upper-sc             identityref
         | max-link-bandwidth?               decimal64
         |  +--ro upper-encoding?      identityref
         | max-resv-link-bandwidth?          decimal64
         |  +--ro max-lsp-bandwidth* unreserved-bandwidth* [priority]
         |  |  +--ro priority     uint8
         |  |  +--ro bandwidth?   decimal64
         |  +--ro te-srlgs te-default-metric?                uint32
         |  +--ro values*   te-types:srlg performance-metric {te-performance-metric}?
         |  |  +--ro recovery measurement
         |  |  |  +--ro restoration-status?   te-recovery-status unidirectional-delay?                 uint32
         |  |  |  +--ro protection-status?    te-recovery-status unidirectional-min-delay?             uint32
         |  |  |  +--ro underlay {te-topology-hierarchy}? unidirectional-max-delay?             uint32
         |  |  |  +--ro dynamic?     boolean unidirectional-delay-variation?       uint32
         |  |  |  +--ro committed?   Boolean

6.2. Packet Switching TE Topology Module

   module: ietf-te-topology-psc
   augment /nw:networks/tet:te/tet:templates/tet:link-template/tet:te-
   link-attributes/tet:interface-switching-capability:
      +--rw packet-switch-capable
         +--rw minimum-lsp-bandwidth? unidirectional-packet-loss?           decimal64
         +--rw interface-mtu?           uint16
   augment /nw:networks/nw:network/nt:link/tet:te/tet:config/tet:te-
   link-attributes/tet:interface-switching-capability:
      +--rw packet-switch-capable
         +--rw minimum-lsp-bandwidth?
         |  |  |  +--ro unidirectional-residual-bandwidth?    decimal64
         +--rw interface-mtu?           uint16
   augment /nw:networks/nw:network/nt:link/tet:te/tet:state/tet:te-link-
   attributes/tet:interface-switching-capability:
         |  |  |  +--ro unidirectional-available-bandwidth?   decimal64
         |  |  |  +--ro unidirectional-utilized-bandwidth?    decimal64
         |  |  +--ro packet-switch-capable normality
         |  |     +--ro minimum-lsp-bandwidth?   decimal64 unidirectional-delay?                 te-
   types:performance-metric-normality
         |  |     +--ro interface-mtu?           uint16
   augment /nw:networks/nw:network/nt:link/tet:te/tet:state/tet:alt-
   information-sources/tet:interface-switching-capability: unidirectional-min-delay?             te-
   types:performance-metric-normality
         |  |     +--ro packet-switch-capable unidirectional-max-delay?             te-
   types:performance-metric-normality
         |  |     +--ro minimum-lsp-bandwidth?   decimal64 unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |  |     +--ro interface-mtu?           uint16
   augment /tet:te-link-event/tet:te-link-attributes/tet:interface-
   switching-capability:
      +---- packet-switch-capable
         +---- minimum-lsp-bandwidth?   decimal64
         +---- interface-mtu?           uint16
   augment /tet:te-link-event/tet:alt-information-sources/tet:interface-
   switching-capability:
      +---- packet-switch-capable
         +---- minimum-lsp-bandwidth?   decimal64
         +---- interface-mtu?           uint16

7. TE Topology Yang Modules

7.1. Base TE Topology Module

   <CODE BEGINS> file "ietf-te-topology@2016-03-17.yang"
   module ietf-te-topology {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
     // replace with IANA namespace when assigned

     prefix "tet";

     import ietf-inet-types {
       prefix "inet";
     }

     import ietf-schedule {
       prefix "sch";
     }

     import ietf-te-types {
       prefix "te-types";
     }

     import ietf-network {
       prefix "nw";
     }

     import ietf-network-topology {
       prefix "nt";
     }

     organization
       "Traffic Engineering Architecture and Signaling (TEAS)
        Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/teas/>
        WG List:  <mailto:teas@ietf.org>

        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>

        WG Chair: Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Xufeng Liu
                  <mailto:xliu@kuatrotech.com>

        Editor:   Igor Bryskin
                  <mailto:Igor.Bryskin@huawei.com>

        Editor:   Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Tarek Saad
                  <mailto:tsaad@cisco.com>

        Editor:   Himanshu Shah
                  <mailto:hshah@ciena.com>

        Editor:   Oscar Gonzalez De Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com>";

     description "TE topology model";

     revision "2016-03-17" {
       description "Initial revision";
       reference "TBD";
     }

     /*
      * Features
      */

     feature configuration-schedule {
       description
         "This feature indicates that the system supports
          configuration scheduling.";
     }
     feature te-topology-hierarchy {
       description
         "This feature indicates that the system allows underlay
          and/or overlay TE topology hierarchy.";
     }

     feature te-performance-metric {
       description
         "This feature indicates that the system supports
          TE performance metric defined in
          RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
     }

     feature template {
       description
         "This feature indicates that the system supports
          template configuration.";
     }

     /*
      * Typedefs
      */
     typedef performance-metric-normality {
       type unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |  +--ro te-srlgs
         |     +--ro value*   te-types:srlg
         +--ro oper-status?                te-types:te-oper-status
         +--ro is-transitional?            empty
         +--ro information-source?         enumeration {
         enum "unknown" {
           value 0;
           description
             "Unknown.";
         }
         enum "normal" {
           value 1;
           description
             "Normal.";
         }
         enum "abnormal" {
           value 2;
           description
             "Abnormal. The anomalous bit is set.";
         }
       }
       description
         "Indicates whether a performance metric is normal, abnormal, or
          unknown.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
     }

     typedef te-admin-status {
       type
         +--ro information-source-state
         |  +--ro credibility-preference?   uint16
         |  +--ro topology
         |  |  +--ro provider-id-ref?      leafref
         |  |  +--ro client-id-ref?        leafref
         |  |  +--ro te-topology-id-ref?   leafref
         |  |  +--ro network-id-ref?       leafref
         |  +--ro routing-instance?         string
         +--ro information-source-entry* [information-source]
         |  +--ro information-source                enumeration {
         enum up {
           description
             "Enabled.";
         }
         enum down {
           description
             "Disabled.";
         }
         enum testing {
           description
             "In some test mode.";
         }
         enum preparing-maintenance {
           description
             "Resource is disabled in the control plane to prepare for
              graceful shutdown for maintenance purposes.";
           reference
             "RFC5817: Graceful Shutdown in MPLS and Generalized MPLS
              Traffic Engineering Networks";
         }
         enum maintenance {
           description
             "Resource is disabled in the data plane for maintenance
              purposes.";
         }
       }
       description
         "Defines a type representing the administrative status of
          a TE resource.";
     }
     typedef te-global-id {
       type uint32;
       description
         "An identifier to uniquely identify an operator, which can be
          either a provider or a client.
          The definition of this type is taken from RFC6370 and RFC5003.
          This attribute type is used solely to provide a globally
          unique context for TE topologies.";
     }

     typedef te-link-access-type {
       type
         |  +--ro information-source-state
         |  |  +--ro credibility-preference?   uint16
         |  |  +--ro topology
         |  |  |  +--ro provider-id-ref?      leafref
         |  |  |  +--ro client-id-ref?        leafref
         |  |  |  +--ro te-topology-id-ref?   leafref
         |  |  |  +--ro network-id-ref?       leafref
         |  |  +--ro routing-instance?         string
         |  +--ro link-index?                       uint64
         |  +--ro administrative-group?             te-types:admin-
   groups
         |  +--ro interface-switching-capability* [switching-capability]
         |  |  +--ro switching-capability               identityref
         |  |  +--ro encoding?                          identityref
         |  |  +--ro max-lsp-bandwidth* [priority]
         |  |  |  +--ro priority     uint8
         |  |  |  +--ro bandwidth?   decimal64
         |  |  +--ro time-division-multiplex-capable
         |  |     +--ro minimum-lsp-bandwidth?   decimal64
         |  |     +--ro indication?              enumeration {
         enum point-to-point {
           description
             "The link is point-to-point.";
         }
         enum multi-access {
           description
             "The link is multi-access, including broacast and NBMA.";
         }
       }
       description
         "Defines a type representing the access type of a TE link.";
       reference
         "RFC3630: Traffic Engineering (TE) Extensions to OSPF
          Version 2.";
     }

     typedef te-node-id {
       type inet:ip-address;
       description
         "An identifier for a node in a topology.
          The identifier is represented as an IPv4 or IPv6 address.
          This attribute is mapped to Router ID in
          RFC3630, RFC5329, RFC5305, and RFC 6119.";
     }

     typedef te-oper-status {
       type
         |  +--ro link-protection-type?             enumeration {
         enum up {
           description
           "Operational up.";
         }
         enum down {
           description
           "Operational down.";
         }
         enum testing {
           description
           "In some test mode.";
         }
         enum unknown {
           description
           "Status cannot be determined for some reason.";
         }
         enum preparing-maintenance {
           description
             "Resource is disabled in the control plane to prepare for
              graceful shutdown for maintenance purposes.";
           reference
             "RFC5817: Graceful Shutdown in MPLS and Generalized MPLS
              Traffic Engineering Networks";
         }
         enum maintenance {
           description
             "Resource is disabled in the data plane for maintenance
              purposes.";
         }
       }
       description
         "Defines a type representing the operational status of
          a
         |  +--ro max-link-bandwidth?               decimal64
         |  +--ro max-resv-link-bandwidth?          decimal64
         |  +--ro unreserved-bandwidth* [priority]
         |  |  +--ro priority     uint8
         |  |  +--ro bandwidth?   decimal64
         |  +--ro te-default-metric?                uint32
         |  +--ro performance-metric {te-performance-metric}?
         |  |  +--ro measurement
         |  |  |  +--ro unidirectional-delay?                 uint32
         |  |  |  +--ro unidirectional-min-delay?             uint32
         |  |  |  +--ro unidirectional-max-delay?             uint32
         |  |  |  +--ro unidirectional-delay-variation?       uint32
         |  |  |  +--ro unidirectional-packet-loss?           decimal64
         |  |  |  +--ro unidirectional-residual-bandwidth?    decimal64
         |  |  |  +--ro unidirectional-available-bandwidth?   decimal64
         |  |  |  +--ro unidirectional-utilized-bandwidth?    decimal64
         |  |  +--ro normality
         |  |     +--ro unidirectional-delay?                 te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-min-delay?             te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-max-delay?             te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-delay-variation?       te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-packet-loss?           te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-residual-bandwidth?    te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-available-bandwidth?   te-
   types:performance-metric-normality
         |  |     +--ro unidirectional-utilized-bandwidth?    te-
   types:performance-metric-normality
         |  +--ro te-srlgs
         |     +--ro value*   te-types:srlg
         +--ro recovery
         |  +--ro restoration-status?   te-types:te-recovery-status
         |  +--ro protection-status?    te-types:te-recovery-status
         +--ro underlay {te-topology-hierarchy}?
            +--ro dynamic?     boolean
            +--ro committed?   Boolean

7. TE resource.";
     }

     typedef te-recovery-status {
       type enumeration Topology Yang Module

   <CODE BEGINS> file "ietf-te-topology@2016-07-08.yang"
   module ietf-te-topology {
         enum normal
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
     // replace with IANA namespace when assigned

     prefix "tet";

     import ietf-inet-types {
           description
             "Both the recovery and working spans are fully
              allocated and active, data traffic is being
              transported over (or selected from) the working
              span, and no trigger events are reported.";
       prefix "inet";
     }
         enum recovery-started

     import ietf-schedule {
           description
             "The recovery action has been started, but not completed.";
       prefix "sch";
     }
         enum recovery-succeeded

     import ietf-te-types {
           description
             "The recovery action has succeeded. The working span has
              reported a failure/degrade condition and the user traffic
              is being transported (or selected) on the recovery span.";
       prefix "te-types";
     }
         enum recovery-failed

     import ietf-network {
           description
             "The recovery action has failed.";
       prefix "nw";
     }
         enum reversion-started

     import ietf-network-topology {
           description
             "The reversion has started.";
       prefix "nt";
     }
         enum reversion-failed {

     organization
       "Traffic Engineering Architecture and Signaling (TEAS)
        Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/teas/>
        WG List:  <mailto:teas@ietf.org>

        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>

        WG Chair: Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Xufeng Liu
                  <mailto:xliu@kuatrotech.com>

        Editor:   Igor Bryskin
                  <mailto:Igor.Bryskin@huawei.com>

        Editor:   Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Tarek Saad
                  <mailto:tsaad@cisco.com>

        Editor:   Himanshu Shah
                  <mailto:hshah@ciena.com>

        Editor:   Oscar Gonzalez De Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com>";

     description
             "The reversion has failed.";
         }
         enum recovery-unavailable "TE topology model";

     revision "2016-07-08" {
       description
             "The recovery is unavailable -- either as a result of an
              operator Lockout command or a failure condition detected
              on the recovery span."; "Initial revision";
       reference "TBD";
     }
         enum recovery-admin

     /*
      * Features
      */

     feature configuration-schedule {
       description
             "The operator has issued a command switching the user
              traffic to
         "This feature indicates that the recovery span."; system supports
          configuration scheduling.";
     }
         enum wait-to-restore

     feature te-topology-hierarchy {
       description
             "The recovery domain is recovering from a failuer/degrade
              condition on the working span
         "This feature indicates that is being controlled by the Wait-to-Restore (WTR) timer.";
         } system allows underlay
          and/or overlay TE topology hierarchy.";

     }

     feature te-performance-metric {
       description
         "Defines
         "This feature indicates that the status of a recovery action."; system supports
          TE performance metric.";
       reference
         "RFC4427: Recovery (Protection and Restoration) Terminology
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.
          RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
          RFC7823: Performance-Based Path Selection for Generalized Multi-Protocol Explicitly
          Routed Label Switching (GMPLS).
          RFC6378: MPLS Transport Profile (MPLS-TP) Linear Protection"; Switched Paths (LSPs) Using TE Metric
          Extensions";
     }

     typedef te-template-name {
       type string

     feature template {
         pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
       }
       description
         "A type for
         "This feature indicates that the name of a TE node system supports
          template or TE link
          template.";
     }

     typedef te-topology-event-type {
       type enumeration {
         enum "add" {
           value 0;
           description
             "A TE node or te-link has been added.";
         }
         enum "remove" {
           value 1;
           description
             "A TE node or te-link has been removed.";
         }
         enum "update" {
           value 2;
           description
             "A TE node or te-link has been updated.";
         }
       }
       description "TE  Event type for notifications";
     } // te-topology-event-type
     typedef te-topology-id {
       type string {
         pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
       }
       description
         "An identifier for a topology.";
     }

     typedef te-tp-id {
       type union {
         type uint32;          // Unnumbered
         type inet:ip-address; // IPv4 or IPv6 address
       }
       description
         "An identifier for a TE link endpoint on a node.
          This attribute is mapped to local or remote link identifier in
          RFC3630 and RFC5305."; configuration.";
     }

     /*
      * Typedefs
      */

     /*
      * Identities
      */

     /*
      * Groupings
      */
     grouping information-source-attributes connectivity-label-restriction-list {
       description
         "The attributes identifying source that has provided the
          related information, and the source credibility.";
         "List of abel restrictions specifying what labels may or may
          not be used on a link connectivity.";
       list label-restriction {
         key "inclusive-exclusive label-start";
         description
           "List of abel restrictions specifying what labels may or may
            not be used on a link connectivity.";

         reference
           "RFC7579: General Network Element Constraint Encoding
            for GMPLS-Controlled Networks";
         leaf information-source inclusive-exclusive {
           type enumeration {
             enum "unknown" inclusive {
               description "The source label or label range is unknown.";
           }
           enum "locally-configured" {
             description "Configured entity.";
           }
           enum "ospfv2" {
             description "OSPFv2.";
           }
           enum "ospfv3" {
             description "OSPFv3.";
           }
           enum "isis" {
             description "ISIS.";
           }
           enum "system-processed" {
             description "System processed entity."; inclusive.";
             }
             enum "other" exclusive {
               description "Other source."; "The label or label range is exclusive.";
             }
           }
           description
           "Indicates the source of
             "Whether the information."; list item is inclusive or exclusive.";
         }
       container information-source-state {
         description
           "The container contains state attributes related to
            the information source.";
         leaf credibility-preference label-start {
           type uint16; te-types:generalized-label;
           description
             "The preference value to calculate
             "This is the traffic
              engineering database credibility value used for
              tie-break selection between different
              information-source values.
              Higher starting lable if a lable range is specified.
              This is the lable value if a single lable is more preferable."; specified,
              in which case, attribute 'label-end' is not set.";
         }
         container topology
         leaf label-end {
           type te-types:generalized-label;
           description
             "When the information
             "The ending lable if a lable range is processed by the system,
              the attributes in this container indicate which topology specified;
              This attribute is used to process to generate the result information.";
           uses te-topology-ref; not set, If a single lable is
              specified.";
         } // topology
         leaf routing-instance range-bitmap {
           type string; binary;
           description
             "When applicable, there are gaps between label-start and label-end,
              this attribute is used to specified the name possitions
              of a routing instance
              from which the information is learned."; used labels.";
         } // routing-information
       }
     } // information-source-attributes connectivity-label-restrictions

     grouping performance-metric-attributes {
       description
         "Link performance information in real time.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
       leaf unidirectional-delay {
         type uint32 {
           range 0..16777215;
         }
         description "Delay or latency in micro seconds.";
       }
       leaf unidirectional-min-delay {
         type uint32 information-source-attributes {
           range 0..16777215;
         }
       description "Minimum delay or latency in micro seconds.";
       }
         "The attributes identifying source that has provided the
          related information, and the source credibility.";
       leaf unidirectional-max-delay information-source {
         type uint32 enumeration {
           range 0..16777215;
           enum "unknown" {
             description "The source is unknown.";
           }
           enum "locally-configured" {
             description "Maximum delay or latency in micro seconds."; "Configured entity.";
           }
       leaf unidirectional-delay-variation
           enum "ospfv2" {
         type uint32
             description "OSPFv2.";
           }
           enum "ospfv3" {
           range 0..16777215;
             description "OSPFv3.";
           }
           enum "isis" {
             description "Delay variation in micro seconds."; "ISIS.";
           }
       leaf unidirectional-packet-loss
           enum "system-processed" {
         type decimal64
             description "System processed entity.";
           }
           enum "other" {
           fraction-digits 6;
           range "0 .. 50.331642";
             description "Other source.";
           }
         }
         description
           "Packet loss as a percentage
           "Indicates the source of the total traffic sent
            over a configurable interval. The finest precision is
            0.000003%."; information.";
       }
       leaf unidirectional-residual-bandwidth {
         type decimal64
       container information-source-state {
           fraction-digits 2;
         }
         description
           "Residual bandwidth that subtracts tunnel
            reservations from Maximum Bandwidth (or link capacity)
            [RFC3630] and provides an aggregated remainder across QoS
            classes.";
       }
           "The container contains state attributes related to
            the information source.";
         leaf unidirectional-available-bandwidth credibility-preference {
           type decimal64 {
           fraction-digits 2;
         } uint16;
           description
           "Available bandwidth that is defined
             "The preference value to be residual
            bandwidth minus calculate the measured bandwidth traffic
              engineering database credibility value used for the
            actual forwarding of non-RSVP-TE LSP packets.  For a
            bundled link, available bandwidth
              tie-break selection between different
              information-source values.
              Higher value is defined to be the
            sum of the component link available bandwidths."; more preferable.";
         }
       leaf unidirectional-utilized-bandwidth {
         type decimal64
         container topology {
           fraction-digits 2;
         }
           description
           "Bandwidth utilization that represents
             "When the actual
            utilization of information is processed by the link (i.e. as measured system,
              the attributes in this container indicate which topology
              is used to process to generate the router).
            For a bundled link, bandwidth utilization result information.";
           uses te-topology-ref;
         } // topology
         leaf routing-instance {
           type string;
           description
             "When applicable, this is defined to
            be the sum name of a routing instance
              from which the component link bandwidth
            utilizations."; information is learned.";
         } // routing-information
       }
     } // performance-metric-attributes information-source-attributes

     grouping performance-metric-normality-attributes interface-switching-capability-list {
       description
         "Link performance metric normality attributes.";
         "List of Interface Switching Capabilities Descriptors (ISCD)";

       list interface-switching-capability {
         key "switching-capability";
         description
           "List of Interface Switching Capabilities Descriptors (ISCD)
            for this link.";
         reference
         "RFC7471:
           "RFC3471: Generalized Multi-Protocol Label Switching (GMPLS)
            Signaling Functional Description.
            RFC4203: OSPF Traffic Engineering (TE) Metric Extensions."; Extensions in Support of Generalized
            Multi-Protocol Label Switching (GMPLS).";
         leaf unidirectional-delay switching-capability {
           type performance-metric-normality; identityref {
             base te-types:switching-capabilities;
           }
           description "Delay normality.";
             "Switching Capability for this interface.";
         }
         leaf unidirectional-min-delay encoding {
           type performance-metric-normality; identityref {
             base te-types:lsp-encoding-types;
           }
           description "Minimum delay or latency normality.";
             "Encoding supported by this interface.";
         }
       leaf unidirectional-max-delay
         list max-lsp-bandwidth {
         type performance-metric-normality;
           key "priority";
           max-elements "8";
           description
             "Maximum delay or latency normality.";
       } LSP Bandwidth at priorities 0-7.";
           leaf unidirectional-delay-variation priority {
             type performance-metric-normality; uint8 {
               range "0..7";
             }
             description "Delay variation normality."; "Priority.";
           }
           leaf unidirectional-packet-loss bandwidth {
             type performance-metric-normality; decimal64 {
               fraction-digits 2;
             }
             description "Packet loss normality.";
               "Max LSP Bandwidth for this level";
           }
       leaf unidirectional-residual-bandwidth
         }
         container time-division-multiplex-capable {
           when "../switching-capability = 'TDM'" {
         type performance-metric-normality;
             description "Residual bandwidth normality."; "Valid only for TDM";
           }
           description
             "Interface has time-division multiplex capabilities.";

           leaf unidirectional-available-bandwidth minimum-lsp-bandwidth {
             type performance-metric-normality; decimal64 {
               fraction-digits 2;
             }
             description "Available bandwidth normality.";
               "Minimum LSP Bandwidth. Units in bytes per second.";
           }
           leaf unidirectional-utilized-bandwidth indication {
             type performance-metric-normality; enumeration {
               enum "standard" {
                 description "Bandwidth utilization normality.";
       }
                   "Indicates support of standard SONET/SDH.";
               } // performance-metric-normality-attributes

     grouping performance-metric-throttle-container
               enum "arbitrary" {
                 description
         "A container controlling performance metric throttle.";
       container performance-metric-throttle {
         if-feature te-performance-metric;
         must "suppression-interval >= measure-interval" {
           error-message
             "suppression-interval cannot be less then
              measure-interval.";
                   "Indicates support of arbitrary SONET/SDH.";
               }
             }
             description
             "Constraint on suppression-interval and
              measure-interval.";
               "Indication whether the interface supports Standard or
                Arbitrary SONET/SDH";
           }
         } // time-division-multiplex-capable
       } // interface-switching-capability
     } // interface-switching-capability-list

     grouping performance-metric-attributes {
       description
         "Link performance information in real time.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions."; Extensions.
          RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
          RFC7823: Performance-Based Path Selection for Explicitly
          Routed Label Switched Paths (LSPs) Using TE Metric
          Extensions";
       leaf unidirectional-delay-offset unidirectional-delay {
         type uint32 {
           range 0..16777215;
         }
         description
             "Offset value to be added to the measured delay value."; "Delay or latency in micro seconds.";
       }
       leaf measure-interval unidirectional-min-delay {
         type uint32;
           default 30; uint32 {
           range 0..16777215;
         }
         description
             "Interval "Minimum delay or latency in seconds to measure the extended metric
              values."; micro seconds.";
       }
       leaf advertisement-interval unidirectional-max-delay {
         type uint32; uint32 {
           range 0..16777215;
         }
         description
             "Interval "Maximum delay or latency in seconds to advertise the extended metric
              values."; micro seconds.";
       }
       leaf suppression-interval unidirectional-delay-variation {
         type uint32 {
           range "1 .. max"; 0..16777215;
         }
           default 120;
         description
             "Interval "Delay variation in seconds to suppress advertising the extended
              metric values."; micro seconds.";
       }
         container threshold-out
       leaf unidirectional-packet-loss {
           uses performance-metric-attributes;
         type decimal64 {
           fraction-digits 6;
           range "0 .. 50.331642";
         }
         description
             "If the measured parameter falls outside an upper bound
              for all but the min delay metric (or lower bound for
              min-delay metric only) and
           "Packet loss as a percentage of the advertised value total traffic sent
            over a configurable interval. The finest precision is not
              already outside that bound, anomalous announcement will be
              triggered.";
            0.000003%.";
       }
         container threshold-in
       leaf unidirectional-residual-bandwidth {
           uses performance-metric-attributes;
         type decimal64 {
           fraction-digits 2;
         }
         description
             "If the measured parameter falls inside an upper bound
              for all but the min delay metric
           "Residual bandwidth that subtracts tunnel
            reservations from Maximum Bandwidth (or lower bound link capacity)
            [RFC3630] and provides an aggregated remainder across QoS
            classes.";
       }
       leaf unidirectional-available-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         description
           "Available bandwidth that is defined to be residual
            bandwidth minus the measured bandwidth used for
              min-delay metric only) and the advertised value
            actual forwarding of non-RSVP-TE LSP packets.  For a
            bundled link, available bandwidth is not
              already inside that bound, normal (anomalous-flag cleared)
              announcement will defined to be triggered."; the
            sum of the component link available bandwidths.";
       }
         container threshold-accelerated-advertisement
       leaf unidirectional-utilized-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         description
             "When
           "Bandwidth utilization that represents the difference between actual
            utilization of the last advertised value and
              current link (i.e. as measured value exceed this threshold, anomalous
              announcement will in the router).
            For a bundled link, bandwidth utilization is defined to
            be triggered.";
           uses performance-metric-attributes;
         } the sum of the component link bandwidth
            utilizations.";
       }
     } // performance-metric-throttle-container performance-metric-attributes

     grouping te-link-augment performance-metric-normality-attributes {
       description
         "Augmentation
         "Link performance metric normality attributes.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.
          RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
          RFC7823: Performance-Based Path Selection for Explicitly
          Routed Label Switched Paths (LSPs) Using TE link.";

       container te Metric
          Extensions";
       leaf unidirectional-delay {
         presence "TE support.";
         type te-types:performance-metric-normality;
         description
           "Indicates TE support.";

         container config "Delay normality.";
       }
       leaf unidirectional-min-delay {
         type te-types:performance-metric-normality;
         description
             "Configuration data.";
           uses te-link-config; "Minimum delay or latency normality.";
       } // config
         container state
       leaf unidirectional-max-delay {
           config false;
         type te-types:performance-metric-normality;
         description
             "Operational state data.";
           uses te-link-config;
           uses te-link-state-derived; "Maximum delay or latency normality.";
       } // state
       leaf unidirectional-delay-variation {
         type te-types:performance-metric-normality;
         description "Delay variation normality.";

       } // te
       leaf unidirectional-packet-loss {
         type te-types:performance-metric-normality;
         description "Packet loss normality.";
       } // te-link-augment

     grouping te-link-config
       leaf unidirectional-residual-bandwidth {
         type te-types:performance-metric-normality;
         description
         "TE link configuration grouping.";
       choice bundle-stack-level "Residual bandwidth normality.";
       }
       leaf unidirectional-available-bandwidth {
         type te-types:performance-metric-normality;
         description
           "The TE link can be partitioned into bundled
            links, or component links.";
         case bundle "Available bandwidth normality.";
       }
       leaf unidirectional-utilized-bandwidth {
         type te-types:performance-metric-normality;
         description "Bandwidth utilization normality.";
       }
     } // performance-metric-normality-attributes

     grouping performance-metric-throttle-container {
       description
         "A container controlling performance metric throttle.";
       container bundled-links performance-metric-throttle {
         if-feature te-performance-metric;
         must "suppression-interval >= measure-interval" {
           error-message
             "suppression-interval cannot be less then
              measure-interval.";
           description
               "A set of bundled links.";
             reference
               "RFC4201: Link Bundling
             "Constraint on suppression-interval and
              measure-interval.";
         }
         description
           "Link performance information in MPLS real time.";
         reference
           "RFC7471: OSPF Traffic Engineering
               (TE).";
             list bundled-link (TE) Metric Extensions.
            RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
            RFC7823: Performance-Based Path Selection for Explicitly
            Routed Label Switched Paths (LSPs) Using TE Metric
            Extensions";

         leaf unidirectional-delay-offset {
               key "sequence";
           type uint32 {
             range 0..16777215;
           }
           description
                 "Specify a bundled interface that is
                  further partitioned.";
             "Offset value to be added to the measured delay value.";
         }
         leaf sequence measure-interval {
           type uint32;
           default 30;
           description
                   "Identify the sequence
             "Interval in seconds to measure the bundle."; extended metric
              values.";
         }
         leaf src-tp-ref advertisement-interval {
           type leafref {
                   path "../../../../../../nw:node[nw:node-id = "
                     + "current()/../../../../../nt:source/"
                     + "nt:source-node]/"
                     + "nt:termination-point/nt:tp-id";
                   require-instance true;
                 } uint32;
           description
                   "Reference
             "Interval in seconds to another TE termination point on advertise the
                    same souruce node."; extended metric
              values.";
         }
         leaf des-tp-ref suppression-interval {
           type leafref uint32 {
                   path "../../../../../../nw:node[nw:node-id = "
                     + "current()/../../../../../nt:destination/"
                     + "nt:dest-node]/"
                     + "nt:termination-point/nt:tp-id";
                   require-instance true;
             range "1 .. max";
           }
           default 120;
           description
                   "Reference
             "Interval in seconds to another TE termination point on suppress advertising the
                    same destination node.";
               }
             } // list bundled-link
           } extended
              metric values.";
         }
         case component {
         container component-links {
             description
               "A set of component links";
             list component-link threshold-out {
               key "sequence";
           uses performance-metric-attributes;
           description
                 "Specify a component interface that is
                  sufficient to unambiguously identify
             "If the
                  appropriate resources";

               leaf sequence {
                 type uint32;
                 description
                   "Identify measured parameter falls outside an upper bound
              for all but the sequence in min delay metric (or lower bound for
              min-delay metric only) and the bundle."; advertised value is not
              already outside that bound, anomalous announcement will be
              triggered.";
         }
               leaf src-interface-ref
         container threshold-in {
                 type string;
           uses performance-metric-attributes;
           description
                   "Reference to component link interface on
             "If the
                    source node."; measured parameter falls inside an upper bound
              for all but the min delay metric (or lower bound for
              min-delay metric only) and the advertised value is not
              already inside that bound, normal (anomalous-flag cleared)
              announcement will be triggered.";
         }
               leaf des-interface-ref
         container threshold-accelerated-advertisement {
                 type string;
           description
                   "Reference to component link interface on
             "When the
                    destinatioin node.";
               }
             }
           }
         }
       } // bundle-stack-level

       leaf-list te-link-template {
         if-feature template;
         type leafref {
           path "../../../../../te/templates/link-template/name"; difference between the last advertised value and
              current measured value exceed this threshold, anomalous
              announcement will be triggered.";
           uses performance-metric-attributes;
         }
         description
           "The reference to a TE link template.";
       }
       uses te-link-config-attributes;
     } // te-link-config performance-metric-throttle-container

     grouping te-link-config-attributes te-link-augment {
       description
         "Link configuration attributes in a
         "Augmentation for TE topology."; link.";

       container te-link-attributes te {
         presence "TE support.";
         description "Link attributes in a
           "Indicates TE topology.";
         uses sch:schedules;
         leaf access-type {
           type te-link-access-type;
           description
             "Link access type, which can be point-to-point or
              multi-access.";
         }
         leaf is-abstract {
           type empty;
           description "Present if the link is abstract.";
         }
         leaf name {
           type string;
           description "Link Name.";
         } support.";

         container underlay config {
           if-feature te-topology-hierarchy;
           presence
             "Indicates the underlay exists for this link.";
           description "Attributes of the te-link underlay.";
           reference
             "RFC4206: Label Switched Paths (LSP) Hierarchy with
              Generalized Multi-Protocol Label Switching (GMPLS)
              Traffic Engineering (TE)";
             "Configuration data.";
           uses te-link-underlay-attributes; te-link-config;
         } // underlay
         leaf admin-status config
         container state {
           type te-admin-status;
           config false;
           description
             "The administrative
             "Operational state of the link.";
         } data.";
           uses performance-metric-throttle-container; te-link-config;
           uses te-link-info-attributes; te-link-state-derived;
         } // te-link-attributes state
       } // te-link-config-attributes te
     } // te-link-augment
     grouping te-link-info-attributes te-link-config {
       description
         "TE link configuration grouping.";
       choice bundle-stack-level {
         description
         "Advertised
           "The TE information attributes.";
       leaf link-index link can be partitioned into bundled
            links, or component links.";
         case bundle {
           container bundled-links {
         type uint64;
             description
           "The link identifier.  If OSPF is used, this represents an
            ospfLsdbID.  If IS-IS is used, this represents an isisLSPID.
            If a locally configured link is used, this object represents
            a unique value, which is locally defined
               "A set of bundled links.";
             reference
               "RFC4201: Link Bundling in MPLS Traffic Engineering
               (TE).";
             list bundled-link {
               key "sequence";
               description
                 "Specify a router.";
       } bundled interface that is
                  further partitioned.";
               leaf administrative-group sequence {
                 type te-types:admin-groups; uint32;
                 description
           "Administrative group or color of
                   "Identify the link.
            This attribute covers both administrative group (defined in
            RFC3630, RFC5329, and RFC5305), and extended administrative
            group (defined sequence in RFC7308)."; the bundle.";
               }
               leaf max-link-bandwidth src-tp-ref {
                 type decimal64 leafref {
           fraction-digits 2;
                   path "../../../../../../nw:node[nw:node-id = "
                     + "current()/../../../../../nt:source/"
                     + "nt:source-node]/"
                     + "nt:termination-point/nt:tp-id";
                   require-instance true;
                 }
                 description
           "Maximum bandwidth that can be seen on this link in this
            direction. Units in bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions
                   "Reference to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering."; another TE termination point on the
                    same souruce node.";
               }
               leaf max-resv-link-bandwidth des-tp-ref {
                 type decimal64 leafref {
           fraction-digits 2;
                   path "../../../../../../nw:node[nw:node-id = "
                     + "current()/../../../../../nt:destination/"
                     + "nt:dest-node]/"
                     + "nt:termination-point/nt:tp-id";
                   require-instance true;
                 }
                 description
           "Maximum amount of bandwidth that can be reserved in this
            direction in this link. Units in bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions
                   "Reference to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering."; another TE termination point on the
                    same destination node.";
               }
             } // list bundled-link
           }
         }
         case component {
           container component-links {
             description
               "A set of component links";
             list unreserved-bandwidth component-link {
               key "priority";
         max-elements "8"; "sequence";
               description
           "Unreserved bandwidth for 0-7 priority levels. Units in
            bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions
                 "Specify a component interface that is
                  sufficient to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering."; unambiguously identify the
                  appropriate resources";

               leaf priority sequence {
                 type uint8 {
             range "0..7";
           } uint32;
                 description "Priority.";
                   "Identify the sequence in the bundle.";
               }
               leaf bandwidth src-interface-ref {
                 type decimal64 {
             fraction-digits 2;
           } string;
                 description
             "Unreserved bandwidth for this level.";
         }
                   "Reference to component link interface on the
                    source node.";
               }
               leaf te-default-metric des-interface-ref {
                 type uint32; string;
                 description
           "Traffic Engineering Metric.";
                   "Reference to component link interface on the
                    destinatioin node.";
               }
       container performance-metric

             }
           }
         }
       } // bundle-stack-level

       leaf-list te-link-template {
         if-feature te-performance-metric; template;
         type leafref {
           path "../../../../../te/templates/link-template/name";
         }
         description
           "The reference to a TE link template.";
       }
       uses te-link-config-attributes;
     } // te-link-config

     grouping te-link-config-attributes {
       description
         "Link performance information configuration attributes in real time.";
         reference
           "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions."; a TE topology.";
       container measurement te-link-attributes {
         description
             "Measured performance metric values. Static configuration
              and manual overrides of these measurements are also
              allowed."; "Link attributes in a TE topology.";
         uses performance-metric-attributes; sch:schedules;
         leaf access-type {
           type te-types:te-link-access-type;
           description
             "Link access type, which can be point-to-point or
              multi-access.";
         }
         container normality external-domain {
           description
             "Performance metric normality values.";
           uses performance-metric-normality-attributes;
         }
       }
             "For an inter-domain link, specify the attributes of
              the remote end of link, to facilitate the signalling at
              local end.";
           leaf link-protection-type remote-te-node-id {
             type enumeration {
           enum "unprotected" te-types:te-node-id;
             description
               "Remote TE node identifier, used together with
                remote-te-link-id to identify the remote link
                termination point in a different domain.";
           }
           leaf remote-te-link-tp-id {
             type te-types:te-tp-id;
             description "Unprotected.";
               "Remote TE link termination point identifier, used
                together with remote-te-node-id to identify the remote
                link termination point in a different domain.";
           }
           enum "extra-traffic"
           leaf plug-id {
             type uint32;
             description "Extra traffic.";
               "A topology-wide unique number that identifies on the
                network a connectivity supporting a given inter-domain
                TE link. This is more flexible alternative to specifying
                remote-te-node-id and remote-te-link-tp-id, when the
                provider does not know remote-te-node-id and
                remote-te-link-tp-id or need to give client the
                flexibility to mix-n-match multiple topologies.";
           }
           enum "shared" {
             description "Shared.";
         }
           enum "1-for-1"
         leaf is-abstract {
           type empty;
           description "One for one protection."; "Present if the link is abstract.";
         }
           enum "1-plus-1"
         leaf name {
           type string;
           description "One plus one protection."; "Link Name.";
         }
           enum "enhanced"
         container underlay {
             description "Enhanced protection.";
           }
         }
         description
           "Link Protection Type desired
           if-feature te-topology-hierarchy;
           presence
             "Indicates the underlay exists for this link.";
         reference
           "RFC4202: Routing Extensions in Support
           description "Attributes of the te-link underlay.";
           reference
             "RFC4206: Label Switched Paths (LSP) Hierarchy with
              Generalized Multi-Protocol Label Switching (GMPLS)."; (GMPLS)
              Traffic Engineering (TE)";

           uses te-link-underlay-attributes;
         }
       list interface-switching-capability // underlay
         leaf admin-status {
         key "switching-capability";
           type te-types:te-admin-status;
           description
           "List
             "The administrative state of Interface Switching Capabilities Descriptors (ISCD)
            for this the link.";
         reference
           "RFC3471: Generalized Multi-Protocol Label Switching (GMPLS)
            Signaling Functional Description.
            RFC4203: OSPF Extensions in Support of Generalized
            Multi-Protocol Label Switching (GMPLS).";
         }

         uses performance-metric-throttle-container;
         uses te-link-info-attributes;
       } // te-link-attributes
     } // te-link-config-attributes

     grouping te-link-connectivity-attributes {
       description
         "Advertised TE connectivity attributes.";
       leaf switching-capability max-link-bandwidth {
         type identityref decimal64 {
             base te-types:switching-capabilities;
           fraction-digits 2;
         }
         description
             "Switching Capability for
           "Maximum bandwidth that can be seen on this interface."; link in this
            direction. Units in bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering.";
       }
       leaf encoding max-resv-link-bandwidth {
         type identityref decimal64 {
             base te-types:lsp-encoding-types;
           fraction-digits 2;
         }
         description
             "Encoding supported by
           "Maximum amount of bandwidth that can be reserved in this interface.";
            direction in this link. Units in bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering.";
       }
       list max-lsp-bandwidth unreserved-bandwidth {
         key "priority";
         max-elements "8";
         description
             "Maximum LSP Bandwidth at priorities 0-7.";
           "Unreserved bandwidth for 0-7 priority levels. Units in
            bytes per second.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions to OSPF
            Version 2.
            RFC5305: IS-IS Extensions for Traffic Engineering.";
         leaf priority {
           type uint8 {
             range "0..7";
           }
           description "Priority.";
         }
         leaf bandwidth {
           type decimal64 {
             fraction-digits 2;
           }
           description
               "Max LSP Bandwidth
             "Unreserved bandwidth for this level"; level.";
         }
       }
         container time-division-multiplex-capable
       leaf te-default-metric {
           when "../switching-capability = 'TDM'"
         type uint32;
         description
           "Traffic Engineering Metric.";
       }
       container performance-metric {
         if-feature te-performance-metric;
         description "Valid only
           "Link performance information in real time.";
         reference
           "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.
            RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
            RFC7823: Performance-Based Path Selection for TDM"; Explicitly
            Routed Label Switched Paths (LSPs) Using TE Metric
            Extensions";
         container measurement {
           description
             "Measured performance metric values. Static configuration
              and manual overrides of these measurements are also
              allowed.";
           uses performance-metric-attributes;
         }
         container normality
         {
           description
             "Performance metric normality values.";
           uses performance-metric-normality-attributes;
         }
       }
       container te-srlgs {
         description
             "Interface has time-division multiplex capabilities.";

           leaf minimum-lsp-bandwidth
           "A list of SLRGs.";
         leaf-list value {
           type decimal64 te-types:srlg;
           description "SRLG value.";
           reference
             "RFC4202: Routing Extensions in Support of
              Generalized Multi-Protocol Label Switching (GMPLS).";
         }
       }
     } // te-link-connectivity-attributes

     grouping te-link-info-attributes {
               fraction-digits 2;
       description
         "Advertised TE information attributes.";
       leaf link-index {
         type uint64;
         description
           "The link identifier.  If OSPF is used, this represents an
            ospfLsdbID.  If IS-IS is used, this represents an isisLSPID.
            If a locally configured link is used, this object represents
            a unique value, which is locally defined in a router.";
       }
       leaf administrative-group {
         type te-types:admin-groups;
         description
               "Minimum LSP Bandwidth. Units
           "Administrative group or color of the link.
            This attribute covers both administrative group (defined in
            RFC3630, RFC5329, and RFC5305), and extended administrative
            group (defined in bytes per second."; RFC7308).";
       }
       uses interface-switching-capability-list;
       leaf indication link-protection-type {
         type enumeration {
           enum "standard" "unprotected" {
             description
                   "Indicates support of standard SONET/SDH."; "Unprotected.";
           }
           enum "arbitrary" "extra-traffic" {
             description
                   "Indicates support of arbitrary SONET/SDH.";
               }
             }
             description
               "Indication whether the interface supports Standard or
                Arbitrary SONET/SDH";
           } "Extra traffic.";
           }
         list interface-adjustment-capability
           enum "shared" {
           key "upper-sc";
             description
             "List of Interface Adjustment Capability Descriptors (IACD)
              for this link.";
           reference
             "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
              for Multi-Layer and Multi-Region Networks (MLN/MRN).";
           leaf upper-sc {
             type identityref {
               base te-types:switching-capabilities; "Shared.";
           }
           enum "1-for-1" {
             description
               "Switching Capability "One for this interface."; one protection.";
           }
           leaf upper-encoding {
             type identityref
           enum "1-plus-1" {
               base te-types:lsp-encoding-types;
             }
             description
               "Encoding supported by this interface."; "One plus one protection.";
           }
           list max-lsp-bandwidth {
             key "priority";
             max-elements "8";
             description
               "Maximum LSP Bandwidth at priorities 0-7.";
             leaf priority {
               type uint8
           enum "enhanced" {
                 range "0..7";
               }
             description "Priority."; "Enhanced protection.";
           }
             leaf bandwidth {
               type decimal64 {
                 fraction-digits 2;
         }
         description
                 "Max LSP Bandwidth
           "Link Protection Type desired for this level.";
             }
           }
         } // interface-adjustment-capability
       } // interface-switching-capability
       container te-srlgs {
         description
           "A list of SLRGs.";
         leaf-list values {
           type te-types:srlg;
           description "SRLG value."; link.";
         reference
           "RFC4202: Routing Extensions in Support of
            Generalized Multi-Protocol Label Switching (GMPLS).";
       }

       }
       uses te-link-connectivity-attributes;
     } // te-link-info-attributes

     grouping te-link-state-derived {
       description
         "Link state attributes in a TE topology.";
       leaf oper-status {
         type te-oper-status; te-types:te-oper-status;
         description
           "The current operational state of the link.";

       }
       leaf is-transitional {
         type empty;
         description
           "Present if the link is transitional, used as an
            alternative approach in lieu of inter-layer-lock-id
            for path computation in a TE topology covering multiple
            layers or multiple regions.";
         reference
           "RFC5212: Requirements for GMPLS-Based Multi-Region and
            Multi-Layer Networks (MRN/MLN).
            RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
            for Multi-Layer and Multi-Region Networks (MLN/MRN).";
       }
       uses information-source-attributes;
       list alt-information-sources information-source-entry {
         key "information-source";
         description
           "A list of information sources learned but not learned, including the one
            used.";
         uses information-source-attributes;
         uses te-link-info-attributes;
       }
       container recovery {
         description
           "Status of the recovery process.";
         leaf restoration-status {
           type te-recovery-status; te-types:te-recovery-status;
           description
             "Restoration status.";
         }
         leaf protection-status {
           type te-recovery-status; te-types:te-recovery-status;
           description
             "Protection status.";
         }
       }
       container underlay {
         if-feature te-topology-hierarchy;
         description "State attributes for te-link underlay.";
         uses te-link-state-underlay-attributes;
       }
     } // te-link-state-derived

     grouping te-link-state-underlay-attributes {
       description "State attributes for te-link underlay.";
       leaf dynamic {
         type boolean;
         description
           "true if the underlay is dynamically created.";
       }
       leaf committed {
         type boolean;
         description
           "true if the underlay is committed.";
       }
     } // te-link-state-underlay-attributes

     grouping te-link-underlay-attributes {
       description "Attributes for  te-link underlay.";
       reference
         "RFC4206: Label Switched Paths (LSP) Hierarchy with
          Generalized Multi-Protocol Label Switching (GMPLS)
          Traffic Engineering (TE)";
       container underlay-primary-path {
         description
           "The service path on the underlay topology that
            supports this link.";
         uses te-topology-ref;
         list path-element {
           key "path-element-id";
           description
             "A list of path elements describing the service path.";
           leaf path-element-id {
             type uint32;
             description "To identify the element in a path.";
           }
           uses te-path-element;
         }
       } // underlay-primary-path
       list underlay-backup-path {
         key "index";
         description
           "A list of backup service paths on the underlay topology that
            protect the underlay primary path. If the primary path is
            not protected, the list contains zero elements. If the
            primary path is protected, the list contains one or more
            elements.";
         leaf index {
           type uint32;
           description
             "A sequence number to identify a backup path.";
         }
         uses te-topology-ref;
         list path-element {
           key "path-element-id";
           description
             "A list of path elements describing the backup service
              path";
           leaf path-element-id {
             type uint32;
             description "To identify the element in a path.";
           }
           uses te-path-element;
         }
       } // underlay-backup-path
       leaf underlay-protection-type {
         type uint16;
         description
           "Underlay protection type desired for this link";
       }
       container underlay-trail-src {
         uses nt:tp-ref;
         description
           "Source TE link of the underlay trail.";
       }
       container underlay-trail-des {
         uses nt:tp-ref;
         description
           "Destination TE link of the underlay trail.";

       }
     } // te-link-underlay-attributes

     grouping te-node-augment {
       description
         "Augmentation for TE node.";

       container te {
         presence "TE support.";
         description
           "Indicates TE support.";

         leaf te-node-id {
           type te-node-id; te-types:te-node-id;
           mandatory true;
           description
             "The identifier of a node in the TE topology.
              A node is specific to a topology to which it belongs.";
         }

         container config {
           description
             "Configuration data.";
           uses te-node-config;
         } // config
         container state {
           config false;
           description
             "Operational state data.";

           uses te-node-config;
           uses te-node-state-derived;
         } // state

         list tunnel-termination-point {
           key "tunnel-tp-id";
           description
             "A termination point can terminate a tunnel.";
           leaf tunnel-tp-id {
             type binary;
             description
               "Tunnel termination point identifier.";
           }

           container config {
             description
               "Configuration data.";
             uses te-node-tunnel-termination-capability;
           }

           container state {
             config false;
             description
               "Operational state data.";

             uses te-node-tunnel-termination-capability;
             leaf switching-capability {
               type identityref {
                 base te-types:switching-capabilities;
               }
               mandatory true;
               description
                 "Switching Capability.";
             }
             leaf encoding {
               type identityref {
                 base te-types:lsp-encoding-types;
               }
               mandatory true;
               description
                 "Encoding type.";
             }
               "Operational state data.";

             uses te-node-tunnel-termination-capability;
           } // state

         } // tunnel-termination-point
       } // te
     } // te-node-augment

     grouping te-node-config {
       description "TE node configuration grouping.";

       leaf-list te-node-template {
         if-feature template;
         type leafref {
           path "../../../../../te/templates/node-template/name";
         }
         description
           "The reference to a TE node template.";
       }
       uses te-node-config-attributes;
     } // te-node-config

     grouping te-node-config-attributes {
       description "Configuration node attributes in a TE topology.";
       container te-node-attributes {
         description "Containing node attributes in a TE topology.";
         uses sch:schedules;
         leaf admin-status {
           type te-admin-status; te-types:te-admin-status;
           description
             "The administrative state of the link.";
         }
         uses te-node-connectivity-matrix;
         uses te-node-info-attributes;
       } // te-node-attributes
     } // te-node-config-attributes

     grouping te-node-config-attributes-notification {
       description
         "Configuration node attributes for template in a TE topology.";
       container te-node-attributes {
         description "Containing node attributes in a TE topology.";
         uses sch:schedules;
         leaf admin-status {
           type te-admin-status; te-types:te-admin-status;
           description
             "The administrative state of the link.";
         }
         uses te-node-connectivity-matrix-abs;
         uses te-node-info-attributes;
       } // te-node-attributes
     } // te-node-config-attributes-notification

     grouping te-node-config-attributes-template {
       description
         "Configuration node attributes for template in a TE topology.";
       container te-node-attributes {
         description "Containing node attributes in a TE topology.";
         uses sch:schedules;
         leaf admin-status {
           type te-admin-status; te-types:te-admin-status;
           description
             "The administrative state of the link.";
         }
         uses te-node-info-attributes;
       } // te-node-attributes

     } // te-node-config-attributes-template

     grouping te-node-connectivity-matrix {
       description "Connectivity matrix on a TE node.";
       list connectivity-matrix {
         key "id";
         description
           "Represents node's switching limitations, i.e. limitations
            in interconnecting network TE links across the node.";
         reference
           "RFC7579: General Network Element Constraint Encoding
            for GMPLS-Controlled Networks.";
         leaf id {
           type uint32;
           description "Identifies the connectivity-matrix entry.";
         }
         container from {
           leaf tp-ref {
             type leafref {
               path "../../../../../../nt:termination-point/nt:tp-id";
             }
             description
               "Relative reference to source termination point.";
           }
           description
             "Reference to source NTP.";
         }
         container to {
           leaf tp-ref {
             type leafref {
               path "../../../../../../nt:termination-point/nt:tp-id";
             }
             description
               "Relative reference to destination termination point.";
           }
           description
             "Reference to destination NTP.";
         }
         leaf is-allowed {
           type boolean;
           description
             "true  - switching is allowed,
              false - switching is disallowed.";
         }
         uses connectivity-label-restriction-list;
         uses te-link-connectivity-attributes;
       }
     } // te-node-connectivity-matrix

     grouping te-node-connectivity-matrix-abs {
       description
         "Connectivity matrix on a TE node, using absolute
          paths to reference termination points.";
       list connectivity-matrix {
         key "id";
         description
           "Represents node's switching limitations, i.e. limitations
            in interconnecting network TE links across the node.";
         reference
           "RFC7579: General Network Element Constraint Encoding
            for GMPLS-Controlled Networks.";
         leaf id {
           type uint32;
           description "Identifies the connectivity-matrix entry.";
         }
         container from {
           uses nt:tp-ref;
           description
             "Reference to source NTP.";
         }
         container to {
           uses nt:tp-ref;
           description
             "Reference to destination NTP.";
         }
         leaf is-allowed {
           type boolean;
           description
             "true  - switching is allowed,
              false - switching is disallowed.";

         }
       }
     } // te-node-connectivity-matrix-abs

     grouping te-node-info-attributes {
       description
         "Advertised TE information attributes.";
       leaf domain-id {
         type uint32;
         description
           "Identifies the domain that this node belongs.
            This attribute is used to support inter-domain links.";
         reference
           "RFC5152: A Per-Domain Path Computation Method for
            Establishing Inter-Domain Traffic Engineering (TE)
            Label Switched Paths (LSPs).
            RFC5392: OSPF Extensions in Support of Inter-Autonomous
            System (AS) MPLS and GMPLS Traffic Engineering.
            RFC5316: ISIS Extensions in Support of Inter-Autonomous
            System (AS) MPLS and GMPLS Traffic Engineering.";
       }
       leaf is-abstract {
         type empty;
         description
           "Present if the node is abstract, not present if the node
            is actual.";
       }
       leaf name {
         type inet:domain-name;
         description "Node name.";
       }
       leaf-list signaling-address {
         type inet:ip-address;
         description "Node signaling address.";
       }
       container underlay-topology {
         if-feature te-topology-hierarchy;
         description
           "When an abstract node encapsulates a topology,
            the attributes in this container point to said topology.";

         uses te-topology-ref;
       }
     } // te-node-info-attributes

     grouping te-node-state-derived {
       description "Node state attributes in a TE topology.";
       leaf oper-status {
         type te-oper-status; te-types:te-oper-status;
         description
           "The current operational state of the node.";
       }
       leaf is-multi-access-dr {
         type empty;
         description
           "The presence of this attribute indicates that this TE node
            is a pseudonode elected as a designated router.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions to OSPF
            Version 2.
            RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
            Environments.";
       }
       uses information-source-attributes;
       list alt-information-sources information-source-entry {
         key "information-source";
         description
           "A list of information sources learned but not learned, including the one
            used.";
         uses information-source-attributes;
         uses te-node-connectivity-matrix;
         uses te-node-info-attributes;
       }
     } // te-node-state-derived

     grouping te-node-state-derived-notification {
       description "Node state attributes in a TE topology.";
       leaf oper-status {
         type te-oper-status; te-types:te-oper-status;
         description
           "The current operational state of the node.";

       }
       leaf is-multi-access-dr {
         type empty;
         description
           "The presence of this attribute indicates that this TE node
            is a pseudonode elected as a designated router.";
         reference
           "RFC3630: Traffic Engineering (TE) Extensions to OSPF
            Version 2.
            RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
            Environments.";
       }
       uses information-source-attributes;
       list alt-information-sources information-source-entry {
         key "information-source";
         description
           "A list of information sources learned but not learned, including the one
            used.";
         uses information-source-attributes;
         uses te-node-connectivity-matrix-abs;
         uses te-node-info-attributes;
       }
     } // te-node-state-derived-notification

     grouping te-node-tunnel-termination-capability {
       description
         "Termination capability of a tunnel termination point on a
          TE node.";

       list termination-capability {
         key "link-tp";
         description
           "The termination capabilities between
            tunnel-termination-point and link termination-point.
            The capability information can be used to compute
            the tunnel path.";

       leaf link-tp switching-capability {
         type leafref identityref {
             path "../../../../../nt:termination-point/nt:tp-id";
           base te-types:switching-capabilities;
         }
         description
             "Link termination point.";
           "Switching Capability for this interface.";
       }
       leaf encoding {
         type identityref {
           base te-types:lsp-encoding-types;
         } // termination-capability
         description
           "Encoding supported by this interface.";
       } // te-node-tunnel-termination-capability

     grouping te-path-element
       leaf inter-layer-lock-id {
         type uint32;
         description
         "A group of attributes defining an element
           "Inter layer lock ID, used for path computation in a TE path
          such as TE node, TE link, TE atomic resource
            topology covering multiple layers or label.";
       uses te-types:explicit-route-subobject;
     } // te-path-element

     grouping te-termination-point-augment {
       description
         "Augmentation multiple regions.";
         reference
           "RFC5212: Requirements for TE termination point.";

       container te {
         presence "TE support.";
         description
           "Indicates TE support."; GMPLS-Based Multi-Region and
            Multi-Layer Networks (MRN/MLN).
            RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
            for Multi-Layer and Multi-Region Networks (MLN/MRN).";
       }
       leaf te-tp-id protection-type {
         type te-tp-id;
           mandatory true;
           description
             "An identifier to uniquely identify a TE termination
              point.";
         }

         container config {
           description
             "Configuration data.";
           uses te-termination-point-config;
         } // config
         container state identityref {
           config false;
           description
             "Operational state data.";
           uses te-termination-point-config;
         } // state
       } // te
           base te-types:lsp-prot-type;
         } // te-termination-point-augment

     grouping te-termination-point-config {
         description
         "TE
           "The protection type that this tunnel termination point configuration grouping.";
       uses sch:schedules;
            is capable of.";
       } // te-termination-point-config

     grouping te-topologies-augment

       list termination-capability {
         key "link-tp";
         description
         "Augmentation
           "The termination capabilities between
            tunnel-termination-point and link termination-point.
            The capability information can be used to compute
            the tunnel path.
            The Interface Adjustment Capability Descriptors (IACD)
            [RFC6001] on each link-tp can be derived from this
            termination-capability list.";
         reference
           "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
            for TE topologies.";

       container te Multi-Layer and Multi-Region Networks (MLN/MRN).";
         leaf link-tp {
         presence "TE support.";
         description
           "Indicates TE support.";

         container templates
           type leafref {
             path "../../../../../nt:termination-point/nt:tp-id";
           }
           description
             "Configuration parameters for templates used for TE
              topology.";
             "Link termination point.";
         }

         uses connectivity-label-restriction-list;

         list node-template max-lsp-bandwidth {
             if-feature template;
           key "name"; "priority";
           max-elements "8";
           description
             "Maximum LSP Bandwidth at priorities 0-7.";
           reference
             "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
              for Multi-Layer and Multi-Region Networks (MLN/MRN).";
           leaf name priority {
             type te-template-name;
               description
                 "The name to identify a TE node template."; uint8 {
               range "0..7";
             }
             description
               "The list of TE node templates used to define sharable
                and reusable TE node attributes.";
             uses template-attributes;
             uses te-node-config-attributes-template; "Priority.";
           } // node-template

           list link-template {
             if-feature template;
             key "name";
           leaf name bandwidth {
             type te-template-name;
               description
                 "The name to identify a TE link template."; decimal64 {
               fraction-digits 2;
             }
             description
               "The list of TE link templates used to define sharable
                and reusable TE link attributes.";
             uses template-attributes;
             uses te-link-config-attributes;
               "Max LSP Bandwidth for this level.";
           }
         } // link-template max-lsp-bandwidth
       } // templates termination-capability
     } // te te-node-tunnel-termination-capability

     grouping te-path-element {
       description
         "A group of attributes defining an element in a TE path
          such as TE node, TE link, TE atomic resource or label.";
       uses te-types:explicit-route-subobject;
     } // te-topologies-augment te-path-element

     grouping te-topology-augment te-termination-point-augment {
       description
         "Augmentation for TE topology."; termination point.";

       container te {
         presence "TE support.";
         description
           "Indicates TE support.";

         leaf provider-id {
           type te-global-id;
           mandatory true;
           description
             "An identifier to uniquely identify a provider.";
         }
         leaf client-id {
           type te-global-id;
           mandatory true;
           description
             "An identifier to uniquely identify a client.";
         }
         leaf te-topology-id {
           type te-topology-id;
           mandatory true;
           description
             "It is presumed that a datastore will contain many
              topologies. To distinguish between topologies it is
              vital support.";
         description
           "Indicates TE support.";

         leaf te-tp-id {
           type te-types:te-tp-id;
           mandatory true;
           description
             "An identifier to have UNIQUE topology identifiers."; uniquely identify a TE termination
              point.";
         }

         container config {
           description
             "Configuration data.";
           uses te-topology-config; te-termination-point-config;
         } // config
         container state {
           config false;
           description
             "Operational state data.";
           uses te-topology-config; te-termination-point-config;
         } // state
       } // te
     } // te-topology-augment te-termination-point-augment

     grouping te-topology-config te-termination-point-config {
       description
         "TE topology termination point configuration grouping.";
       uses sch:schedules;
       uses interface-switching-capability-list;
       leaf preference inter-layer-lock-id {
         type uint8 {
           range "1..255";
         } uint32;
         description
           "Specifies a preference
           "Inter layer lock ID, used for this topology. A lower number
            indicates a higher preference.";

       }
     } // te-topology-config

     grouping te-topology-ref {
       description
         "References a TE topology.";
       leaf provider-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:provider-id";
           require-instance false;
         }
         description
           "A reference to a provider-id.";
       }
       leaf client-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:client-id";
           require-instance false;
         }
         description
           "A reference to a client-id.";
       }
       leaf te-topology-id-ref {
         type leafref { path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:te-topology-id";
           require-instance false;
         }
         description
           "A reference to computation in a te-topology-id.";
       }
       leaf network-id-ref {
         type leafref {
           path "/nw:networks/nw:network/nw:network-id";
           require-instance false;
         }
         description
           "A TE
            topology covering multiple layers or multiple regions.";
         reference to a network-id in base ietf-network module.";
           "RFC5212: Requirements for GMPLS-Based Multi-Region and
            Multi-Layer Networks (MRN/MLN).
            RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
            for Multi-Layer and Multi-Region Networks (MLN/MRN).";
       }
     } // te-topology-ref te-termination-point-config

     grouping te-topology-type te-topologies-augment {
       description
         "Identifies the
         "Augmentation for TE topology type."; topologies.";

       container te-topology te {
         presence "Indicates TE topology."; "TE support.";
         description
           "Its presence identifies the
           "Indicates TE topology type.";
       }
     } // te-topology-type

     grouping template-attributes {
       description
         "Common attributes for all templates.";

       leaf priority support.";

         container templates {
         type uint16;
           description
           "The preference value to resolve conflicts between different
            templates. When two or more templates specify values for
            one configuration attribute, the value from the template
            with the highest priority is used.";
       }
             "Configuration parameters for templates used for TE
              topology.";

           list node-template {
             if-feature template;
             key "name";
             leaf reference-change-policy name {
               type enumeration {
           enum no-action { te-types:te-template-name;
               description
               "When an attribute changes in this template, the
                configuration node referring
                 "The name to this template does
                not take any action."; identify a TE node template.";
             }
           enum not-allowed {
             description
               "When any configuration object has a reference
               "The list of TE node templates used to this
                template, changing this template is not allowed."; define sharable
                and reusable TE node attributes.";
             uses template-attributes;
             uses te-node-config-attributes-template;
           }
           enum cascade // node-template

           list link-template {
             if-feature template;
             key "name";
             leaf name {
               type te-types:te-template-name;
               description
               "When an attribute changes in this template, the
                configuration object referring to this template applies
                the new attribute value
                 "The name to the corresponding
                configuration.";
           } identify a TE link template.";
             }
             description
           "This attribute specifies the action taken to a configuration
            node that has a reference
               "The list of TE link templates used to this template."; define sharable
                and reusable TE link attributes.";
             uses template-attributes;
             uses te-link-config-attributes;
           } // link-template
         } // templates
       } // template-attributes

     /*
      * Configuration data nodes
      */
     augment "/nw:networks/nw:network/nw:network-types" te
     } // te-topologies-augment

     grouping te-topology-augment {
       description
         "Introduce new network type
         "Augmentation for TE topology.";
       uses te-topology-type;
     }

     augment "/nw:networks"

       container te {
         presence "TE support.";
         description
         "Augmentation parameters for
           "Indicates TE topologies.";
       uses te-topologies-augment; support.";

         leaf provider-id {
           type te-types:te-global-id;
           mandatory true;
           description
             "An identifier to uniquely identify a provider.";
         }

     augment "/nw:networks/nw:network"
         leaf client-id {
       when "nw:network-types/te-topology"
           type te-types:te-global-id;
           mandatory true;
           description
             "An identifier to uniquely identify a client.";
         }
         leaf te-topology-id {
           type te-types:te-topology-id;
           mandatory true;
           description
           "Augmentation parameters apply only for networks with
            TE
             "It is presumed that a datastore will contain many
              topologies. To distinguish between topologies it is
              vital to have UNIQUE topology type."; identifiers.";
         }

         container config {
           description
             "Configuration parameters for TE topology."; data.";
           uses te-topology-augment; te-topology-config;
         }

     augment "/nw:networks/nw:network/nw:node" {
       when "../nw:network-types/te-topology" // config
         container state {
           config false;
           description
           "Augmentation parameters apply only for networks with
            TE topology type.";
       }
       description
         "Configuration parameters for TE at node level.";
             "Operational state data.";
           uses te-node-augment; te-topology-config;
         }

     augment "/nw:networks/nw:network/nt:link" {
       when "../nw:network-types/te-topology" // state
       } // te
     } // te-topology-augment

     grouping te-topology-config {
       description
           "Augmentation parameters apply only for networks with
            TE
         "TE topology type."; configuration grouping.";
       uses sch:schedules;
       leaf preference {
         type uint8 {
           range "1..255";
         }
         description
         "Configuration parameters
           "Specifies a preference for TE at link level";
       uses te-link-augment; this topology. A lower number
            indicates a higher preference.";
       }

     augment "/nw:networks/nw:network/nw:node/"
           + "nt:termination-point"
       leaf optimization-criterion {
       when "../../nw:network-types/te-topology"
         type identityref {
         description
           "Augmentation parameters apply only for networks with
            TE topology type.";
           base te-types:te-optimization-criterion;
         }
         description
         "Configuration parameters for TE at termination point level";
       uses te-termination-point-augment;
           "Optimization criterion applied to this topology.";
         reference
           "RFC3272: Overview and Principles of Internet Traffic
            Engineering.";
       }

     /*
      * Operational state data nodes
      */

     /*
      * Notifications
      */

     notification te-node-event

     } // te-topology-config

     grouping te-topology-ref {
       description "Notification event for
         "References a TE node."; topology.";
       leaf event-type provider-id-ref {
         type te-topology-event-type; leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:provider-id";
           require-instance false;
         }
         description "Event type.";
           "A reference to a provider-id.";
       }
       uses nw:node-ref;
       uses te-topology-type;
       uses tet:te-node-config-attributes-notification;
       uses tet:te-node-state-derived-notification;
       leaf client-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:client-id";
           require-instance false;
         }

     notification te-link-event
         description
           "A reference to a client-id.";
       }
       leaf te-topology-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:te-topology-id";
           require-instance false;
         }
         description "Notification event for TE link.";
           "A reference to a te-topology-id.";
       }
       leaf event-type network-id-ref {
         type te-topology-event-type;
         description "Event type";
       }
       uses nt:link-ref;
       uses te-topology-type;
       uses tet:te-link-config-attributes;
       uses tet:te-link-state-derived;
     }

     augment "/te-link-event/te-link-attributes/underlay" leafref {
           path "/nw:networks/nw:network/nw:network-id";
           require-instance false;
         }
         description "Add state attributes
           "A reference to te-link underlay.";
       uses te-link-state-underlay-attributes;
     }
   }
   <CODE ENDS>

7.2. Packet Switching TE Topology Module

   <CODE BEGINS> file "ietf-te-topology-psc@2016-03-17.yang"
   module ietf-te-topology-psc {
     yang-version 1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology-psc";
     // replace with IANA namespace when assigned

     prefix "tet-psc";
     import a network-id in base ietf-network {
       prefix "nw"; module.";
       }

     import ietf-network-topology {
       prefix "nt";

     }

     import ietf-te-topology // te-topology-ref

     grouping te-topology-type {
       prefix "tet";
     }

     organization
       "Traffic Engineering Architecture and Signaling (TEAS)
        Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/teas/>
        WG List:  <mailto:teas@ietf.org>

        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>

        WG Chair: Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editors:  Xufeng Liu
                  <mailto:xliu@kuatrotech.com>

                  Igor Bryskin
                  <mailto:Igor.Bryskin@huawei.com>

                  Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

                  Tarek Saad
                  <mailto:tsaad@cisco.com>

                  Himanshu Shah
                  <mailto:hshah@ciena.com>
                  Oscar Gonzalez De Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com>";
       description "TE
         "Identifies the TE topology model";

     revision "2016-03-17" type.";
       container te-topology {
         presence "Indicates TE topology.";
         description "Initial revision";
       reference "TBD";
           "Its presence identifies the TE topology type.";
       }

     /*
      * Groupings
      */
     } // te-topology-type

     grouping packet-switch-capable-container template-attributes {
       description
         "The container of packet switch capable attributes.";
       container packet-switch-capable
         "Common attributes for all templates.";

       leaf priority {
         type uint16;
         description
           "Interface has packet-switching capabilities.";
           "The preference value to resolve conflicts between different
            templates. When two or more templates specify values for
            one configuration attribute, the value from the template
            with the highest priority is used.";
       }
       leaf minimum-lsp-bandwidth reference-change-policy {
         type decimal64 enumeration {
             fraction-digits 2;
           enum no-action {
             description
               "When an attribute changes in this template, the
                configuration node referring to this template does
                not take any action.";
           }
           enum not-allowed {
             description
               "When any configuration object has a reference to this
                template, changing this template is not allowed.";
           }
           enum cascade {
             description
             "Minimum LSP Bandwidth. Units
               "When an attribute changes in bytes per second"; this template, the
                configuration object referring to this template applies
                the new attribute value to the corresponding
                configuration.";
           }
         leaf interface-mtu {
           type uint16;
           description
             "Interface MTU.";
         }
         description
           "This attribute specifies the action taken to a configuration
            node that has a reference to this template.";
       }
     } // template-attributes

     /*
      * Configuration data nodes
      */
     augment "/nw:networks/tet:te/tet:templates/"
           + "tet:link-template/tet:te-link-attributes/"
           + "tet:interface-switching-capability" {
       when "switching-capability = 'switching-psc1' " "/nw:networks/nw:network/nw:network-types" {
       description "Valid only
         "Introduce new network type for PSC"; TE topology.";
       uses te-topology-type;
     }

     augment "/nw:networks" {
       description
         "Parameters
         "Augmentation parameters for PSC TE topology."; topologies.";
       uses packet-switch-capable-container; te-topologies-augment;
     }

     augment "/nw:networks/nw:network/nt:link/tet:te/tet:config/"
           + "tet:te-link-attributes/"
           + "tet:interface-switching-capability" "/nw:networks/nw:network" {
       when "switching-capability = 'switching-psc1' " "nw:network-types/te-topology" {
         description "Valid
           "Augmentation parameters apply only for PSC"; networks with
            TE topology type.";
       }
       description
         "Parameters
         "Configuration parameters for PSC TE topology.";
       uses packet-switch-capable-container; te-topology-augment;
     }

     /*
      * Operational state data nodes
      */

     augment "/nw:networks/nw:network/nt:link/tet:te/tet:state/"
           + "tet:te-link-attributes/"
           + "tet:interface-switching-capability" "/nw:networks/nw:network/nw:node" {
       when "switching-capability = 'switching-psc1' " "../nw:network-types/te-topology" {
         description "Valid
           "Augmentation parameters apply only for PSC"; networks with
            TE topology type.";
       }
       description
         "Parameters
         "Configuration parameters for PSC TE topology."; at node level.";
       uses packet-switch-capable-container; te-node-augment;
     }

     augment "/nw:networks/nw:network/nt:link/tet:te/tet:state/"
           + "tet:alt-information-sources/"
           + "tet:interface-switching-capability" "/nw:networks/nw:network/nt:link" {
       when "switching-capability = 'switching-psc1' " "../nw:network-types/te-topology" {
         description "Valid
           "Augmentation parameters apply only for PSC"; networks with
            TE topology type.";
       }
       description
         "Parameters
         "Configuration parameters for PSC TE topology."; at link level";
       uses packet-switch-capable-container; te-link-augment;
     }

     /*
      * Notifications
      */

     augment "/tet:te-link-event/tet:te-link-attributes/" "/nw:networks/nw:network/nw:node/"
           + "tet:interface-switching-capability" "nt:termination-point" {
       when "switching-capability = 'switching-psc1' " "../../nw:network-types/te-topology" {
         description "Valid
           "Augmentation parameters apply only for PSC"; networks with
            TE topology type.";
       }
       description
         "Parameters
         "Configuration parameters for PSC TE topology."; at termination point level";
       uses packet-switch-capable-container; te-termination-point-augment;
     }

     augment "/tet:te-link-event/tet:alt-information-sources/"
           + "tet:interface-switching-capability" {
       when "switching-capability = 'switching-psc1' "

     /*
      * Operational state data nodes
      */

     /*
      * Notifications
      */

     notification te-node-event {
       description "Valid only "Notification event for PSC"; TE node.";
       leaf event-type {
         type te-types:te-topology-event-type;
         description "Event type.";
       }
       uses nw:node-ref;
       uses te-topology-type;
       uses tet:te-node-config-attributes-notification;
       uses tet:te-node-state-derived-notification;
     }

     notification te-link-event {
       description
         "Parameters "Notification event for PSC TE topology."; link.";
       leaf event-type {
         type te-types:te-topology-event-type;
         description "Event type";
       }
       uses nt:link-ref;
       uses te-topology-type;
       uses packet-switch-capable-container; tet:te-link-config-attributes;
       uses tet:te-link-state-derived;
     }

     augment "/te-link-event/te-link-attributes/underlay" {
       description "Add state attributes to te-link underlay.";
       uses te-link-state-underlay-attributes;
     }
   }
   <CODE ENDS>

8. Security Considerations

   The transport protocol used for retrieving/manipulating the TE
   topology data MUST support authentication and SHOULD support
   encryption. The data-model by itself does not create any security
   implications.

9. IANA Considerations

   This document registers the following URIs in the IETF XML registry
   [RFC3688]. Following the format in [RFC3688], the following
   registration is requested to be made.

   URI: urn:ietf:params:xml:ns:yang:ietf-te-topology
   XML: N/A, the requested URI is an XML namespace.

   This document registers a YANG module in the YANG Module Names
   registry [RFC6020].

   name: ietf-te-topology
   namespace: urn:ietf:params:xml:ns:yang:ietf-te-topology
   prefix: tet

10. References

10.1. Normative References

   [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
               Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC3688]   Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
               January 2004.

   [RFC6020]   Bjorklund, M., "YANG - A Data Modeling Language for the
               Network Configuration Protocol (NETCONF)", RFC 6020,
               October 2010.

   [RFC6991]   Schoenwaelder, J., "Common YANG Data Types", RFC 6991,
               July 2013.

   [RFC3945]   Mannie, E., "Generalized Multi-Protocol Label Switching
               (GMPLS) Architecture", October 2004.

   [YANG-NET-TOPO]   Clemm, A., "A Data Model for Network Topologies",
               draft-ietf-i2rs-yang-network-topo (Work in Progress).

   [YANG-PUSH] Clemm, A., "Subscribing to YANG datastore push updates",
               draft-clemm-netconf-yang-push (Work in Progress).

   [YANG-SCHEDULE]   Liu, X., " A YANG Data Model for Configuration
               Scheduling", draft-liu-netmod-yang-schedule-00 (Work in
               Progress).

10.2. Informative References

   [RFC2702]   Awduche, D., "Requirements for Traffic Engineering Over
               MPLS", RFC 2702, September 1999.

11. Acknowledgments

   The authors would like to thank Lou Berger, Sue Hares, Mazen Khaddam,
   Cyril Margaria and Zafar Ali for participating in design discussions
   and providing valuable insights.

Contributors

   Sergio Belotti
   Alcatel Lucent
   Nokia
   Email: sergio.belotti@alcatel-lucent.com sergio.belotti@nokia.com

   Dieter Beller
   Alcatel Lucent
   Nokia
   Email: dieter.beller@alcatel-lucent.com Dieter.Beller@nokia.com

Authors' Addresses

   Xufeng Liu
   Ericsson
   Email: xliu@kuatrotech.com

   Igor Bryskin
   Huawei Technologies
   Email: Igor.Bryskin@huawei.com

   Vishnu Pavan Beeram
   Juniper Networks
   Email: vbeeram@juniper.net

   Tarek Saad
   Cisco Systems Inc
   Email: tsaad@cisco.com

   Himanshu Shah
   Ciena
   Email: hshah@ciena.com

   Oscar Gonzalez De Dios
   Telefonica
   Email: oscar.gonzalezdedios@telefonica.com