ietf-network

This module defines a common base data model for a collection of nodes in a network. Node definitions are further used in netwo...

  • Version: 2018-02-26

    ietf-network@2018-02-26


    
      module ietf-network {
    
        yang-version 1.1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-network";
    
        prefix nw;
    
        import ietf-inet-types {
          prefix inet;
          reference
            "RFC 6991: Common YANG Data Types";
    
    
        }
    
        organization
          "IETF I2RS (Interface to the Routing System) Working Group";
    
        contact
          "WG Web:    <https://datatracker.ietf.org/wg/i2rs/>
    WG List:   <mailto:i2rs@ietf.org>
    
    Editor:    Alexander Clemm
    	   <mailto:ludwig@clemm.org>
    
    Editor:    Jan Medved
    	   <mailto:jmedved@cisco.com>
    
    Editor:    Robert Varga
    	   <mailto:robert.varga@pantheon.tech>
    
    Editor:    Nitin Bahadur
    	   <mailto:nitin_bahadur@yahoo.com>
    
    Editor:    Hariharan Ananthakrishnan
    	   <mailto:hari@packetdesign.com>
    
    Editor:    Xufeng Liu
    	   <mailto:xufeng.liu.ietf@gmail.com>";
    
        description
          "This module defines a common base data model for a collection
    of nodes in a network.  Node definitions are further used
    in network topologies and inventories.
    
    Copyright (c) 2018 IETF Trust and the persons identified as
    authors of the code.  All rights reserved.
    
    Redistribution and use in source and binary forms, with or
    without modification, is permitted pursuant to, and subject
    to the license terms contained in, the Simplified BSD License
    set forth in Section 4.c of the IETF Trust's Legal Provisions
    Relating to IETF Documents
    (https://trustee.ietf.org/license-info).
    
    This version of this YANG module is part of RFC 8345;
    see the RFC itself for full legal notices.";
    
        revision "2018-02-26" {
          description "Initial revision.";
          reference
            "RFC 8345: A YANG Data Model for Network Topologies";
    
        }
    
    
        typedef node-id {
          type inet:uri;
          description
            "Identifier for a node.  The precise structure of the node-id
    will be up to the implementation.  For example, some
    implementations MAY pick a URI that includes the network-id
    as part of the path.  The identifier SHOULD be chosen
    such that the same node in a real network topology will
    always be identified through the same identifier, even if
    the data model is instantiated in separate datastores.  An
    implementation MAY choose to capture semantics in the
    identifier -- for example, to indicate the type of node.";
        }
    
        typedef network-id {
          type inet:uri;
          description
            "Identifier for a network.  The precise structure of the
    network-id will be up to the implementation.  The identifier
    SHOULD be chosen such that the same network will always be
    identified through the same identifier, even if the data model
    is instantiated in separate datastores.  An implementation MAY
    choose to capture semantics in the identifier -- for example,
    to indicate the type of network.";
        }
    
        container networks {
          description
            "Serves as a top-level container for a list of networks.";
          list network {
            key "network-id";
            description
              "Describes a network.
    A network typically contains an inventory of nodes,
    topological information (augmented through the
    network-topology data model), and layering information.";
            leaf network-id {
              type network-id;
              description
                "Identifies a network.";
            }
    
            container network-types {
              description
                "Serves as an augmentation target.
    The network type is indicated through corresponding
    presence containers augmented into this container.";
              container l2-topology {
                presence
                  "Indicates L2 Network Topology.";
                description
                  "The presence of the container node indicates
    L2 Network Topology.";
              }  // container l2-topology
    
              container fabric-network {
                presence
                  "indicates fabric Network";
                description
                  "The presence of the container node indicates
    fabric topology";
              }  // container fabric-network
    
              container l2-topology {
                presence
                  "Indicates L2 Network Topology.";
                description
                  "The presence of the container node indicates
    L2 Network Topology.";
              }  // container l2-topology
    
              container l3-unicast-topology {
                presence
                  "indicates L3 Unicast topology";
                description
                  "The presence of the container node indicates L3 Unicast
    topology";
              }  // container l3-unicast-topology
    
              container te-topology {
                presence
                  "Indicates a TE topology";
                description
                  "Its presence identifies the TE topology type.";
                container wson-topology {
                  presence
                    "Its presence identifies the WSON topology type.";
                  description
                    "Introduce a new network type for WSON topology.";
                }  // container wson-topology
              }  // container te-topology
            }  // container network-types
    
            list supporting-network {
              key "network-ref";
              description
                "An underlay network, used to represent layered network
    topologies.";
              leaf network-ref {
                type leafref {
                  path "/nw:networks/nw:network/nw:network-id";
                  require-instance false;
                }
                description
                  "References the underlay network.";
              }
            }  // list supporting-network
    
            list node {
              key "node-id";
              description
                "The inventory of nodes of this network.";
              leaf node-id {
                type node-id;
                description
                  "Uniquely identifies a node within the containing
    network.";
              }
    
              list supporting-node {
                key "network-ref node-ref";
                description
                  "Represents another node that is in an underlay network
    and that supports this node.  Used to represent layering
    structure.";
                leaf network-ref {
                  type leafref {
                    path "../../../nw:supporting-network/nw:network-ref";
                    require-instance false;
                  }
                  description
                    "References the underlay network of which the
    underlay node is a part.";
                }
    
                leaf node-ref {
                  type leafref {
                    path "/nw:networks/nw:network/nw:node/nw:node-id";
                    require-instance false;
                  }
                  description
                    "References the underlay node itself.";
                }
              }  // list supporting-node
    
              list termination-point {
                key "tp-id";
                description
                  "A termination point can terminate a link.
    Depending on the type of topology, a termination point
    could, for example, refer to a port or an interface.";
                leaf tp-id {
                  type tp-id;
                  description
                    "Termination point identifier.";
                }
    
                list supporting-termination-point {
                  key "network-ref node-ref tp-ref";
                  description
                    "This list identifies any termination points on which a
    given termination point depends or onto which it maps.
    Those termination points will themselves be contained
    in a supporting node.  This dependency information can be
    inferred from the dependencies between links.  Therefore,
    this item is not separately configurable.  Hence, no
    corresponding constraint needs to be articulated.
    The corresponding information is simply provided by the
    implementing system.";
                  leaf network-ref {
                    type leafref {
                      path "../../../nw:supporting-node/nw:network-ref";
                      require-instance false;
                    }
                    description
                      "This leaf identifies in which topology the
    supporting termination point is present.";
                  }
    
                  leaf node-ref {
                    type leafref {
                      path "../../../nw:supporting-node/nw:node-ref";
                      require-instance false;
                    }
                    description
                      "This leaf identifies in which node the supporting
    termination point is present.";
                  }
    
                  leaf tp-ref {
                    type leafref {
                      path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node[nw:node-id=current()/../node-ref]/termination-point/tp-id";
                      require-instance false;
                    }
                    description
                      "Reference to the underlay node (the underlay node must
    be in a different topology).";
                  }
                }  // list supporting-termination-point
    
                container l2-termination-point-attributes {
                  description
                    "Containing L2 termination point attributes.";
                  leaf interface-name {
                    type string;
                    description
                      "Name of the interface.  The name can (but does not
    have to) correspond to an interface reference of a
    containing node's interface, i.e., the path name of a
    corresponding interface data node on the containing
    node is reminiscent of data type interface-ref defined
    in RFC 8343.  It should be noted that data type
    interface-ref of RFC 8343 cannot be used directly,
    as this data type is used to reference an interface
    in a datastore of a single node in the network, not
    to uniquely reference interfaces across a network.";
                  }
    
                  leaf mac-address {
                    type yang:mac-address;
                    description
                      "Interface MAC address for logical link control.";
                  }
    
                  leaf-list port-number {
                    type uint32;
                    description
                      " List of port numbers of the bridge ports for which each
     entry contains bridge management information.";
                  }
    
                  leaf-list unnumbered-id {
                    type uint32;
                    description
                      "List of unnumbered interface identifiers.
    The unnumbered interface identifier will correspond to
    the ifIndex value of the interface, i.e., the ifIndex
    value of the ifEntry that represents the interface in
    implementations where the Interfaces Group MIB
    (RFC 2863) is supported.";
                  }
    
                  leaf encapsulation-type {
                    type identityref {
                      base eth-encapsulation-type;
                    }
                    description
                      "Encapsulation type of this
          termination point.";
                  }
    
                  leaf lag {
                    type boolean;
                    default "false";
                    description
                      "Defines whether lag is supported or not.
    When it is set to true, the lag is supported.";
                  }
    
                  leaf-list member-link-tp {
                    when "../lag = 'true'" {
                      description
                        "Relevant only when the lag interface is supported.";
                    }
                    type leafref {
                      path "/nw:networks/nw:network/nw:node/nt:termination-point/nt:tp-id";
                    }
                    description
                      "List of member link termination points associated with
    specific L2 termination point.";
                  }
    
                  container vxlan {
                    when
                      "derived-from-or-self(../encapsulation-type, 'l2t:vxlan')" {
                      description
                        "Only applies when the type of the Ethernet
    encapsulation is 'vxlan'.";
                    }
                    if-feature VXLAN;
                    description
                      "Vxlan encapsulation type.";
                    leaf vni-id {
                      type vni;
                      description
                        "VXLAN Network Identifier (VNI).";
                    }
                  }  // container vxlan
                }  // container l2-termination-point-attributes
    
                container fport-attributes {
                  config false;
                  description
                    "Attributes for fabric ports";
                  leaf name {
                    type string;
                    description
                      "Name of the port.";
                  }
    
                  leaf role {
                    type fabric-port-role;
                    description
                      "Role of the port in a fabric.";
                  }
    
                  leaf type {
                    type fabric-port-type;
                    description
                      "Type of the port";
                  }
    
                  leaf device-port {
                    type tp-ref;
                    description
                      "The device port it mapped to.";
                  }
    
                  choice tunnel-option {
                    description
                      "Tunnel options to connect two fabrics.
    It could be L2 Tunnel or L3 Tunnel.";
                  }  // choice tunnel-option
                }  // container fport-attributes
    
                container l2-termination-point-attributes {
                  description
                    "Containing L2 termination point attributes.";
                  leaf interface-name {
                    type string;
                    description
                      "Name of the interface.  The name can (but does not
    have to) correspond to an interface reference of a
    containing node's interface, i.e., the path name of a
    corresponding interface data node on the containing
    node is reminiscent of data type interface-ref defined
    in RFC 8343.  It should be noted that data type
    interface-ref of RFC 8343 cannot be used directly,
    as this data type is used to reference an interface
    in a datastore of a single node in the network, not
    to uniquely reference interfaces across a network.";
                  }
    
                  leaf mac-address {
                    type yang:mac-address;
                    description
                      "Interface MAC address for logical link control.";
                  }
    
                  leaf-list port-number {
                    type uint32;
                    description
                      " List of port numbers of the bridge ports for which each
     entry contains bridge management information.";
                  }
    
                  leaf-list unnumbered-id {
                    type uint32;
                    description
                      "List of unnumbered interface identifiers.
    The unnumbered interface identifier will correspond to
    the ifIndex value of the interface, i.e., the ifIndex
    value of the ifEntry that represents the interface in
    implementations where the Interfaces Group MIB
    (RFC 2863) is supported.";
                  }
    
                  leaf encapsulation-type {
                    type identityref {
                      base eth-encapsulation-type;
                    }
                    description
                      "Encapsulation type of this
          termination point.";
                  }
    
                  leaf lag {
                    type boolean;
                    default "false";
                    description
                      "Defines whether lag is supported or not.
    When it is set to true, the lag is supported.";
                  }
    
                  leaf-list member-link-tp {
                    when "../lag = 'true'" {
                      description
                        "Relevant only when the lag interface is supported.";
                    }
                    type leafref {
                      path "/nw:networks/nw:network/nw:node/nt:termination-point/nt:tp-id";
                    }
                    description
                      "List of member link termination points associated with
    specific L2 termination point.";
                  }
    
                  container vxlan {
                    when
                      "derived-from-or-self(../encapsulation-type, 'l2t:vxlan')" {
                      description
                        "Only applies when the type of the Ethernet
    encapsulation is 'vxlan'.";
                    }
                    if-feature VXLAN;
                    description
                      "Vxlan encapsulation type.";
                    leaf vni-id {
                      type vni;
                      description
                        "VXLAN Network Identifier (VNI).";
                    }
                  }  // container vxlan
                }  // container l2-termination-point-attributes
    
                container l3-termination-point-attributes {
                  description
                    "Contains termination point attributes";
                  choice termination-point-type {
                    description
                      "Indicates the termination point type";
                    leaf-list ip-address {
                      type inet:ip-address;
                      description
                        "IPv4 or IPv6 address.";
                    }
                    leaf unnumbered-id {
                      type uint32;
                      description
                        "Unnumbered interface identifier.
    The identifier will correspond to the ifIndex value
    of the interface, i.e., the ifIndex value of the
    ifEntry that represents the interface in
    implementations where the Interfaces Group MIB
    (RFC 2863) is supported.";
                      reference
                        "RFC 2863: The Interfaces Group MIB";
    
                    }
                    leaf interface-name {
                      type string;
                      description
                        "Name of the interface.  The name can (but does not
    have to) correspond to an interface reference of a
    containing node's interface, i.e., the path name of a
    corresponding interface data node on the containing
    node reminiscent of data type interface-ref defined
    in RFC 8343. It should be noted that data type
    interface-ref of RFC 8343 cannot be used directly,
    
    as this data type is used to reference an interface
    in a datastore of a single node in the network, not
    to uniquely reference interfaces across a network.";
                      reference
                        "RFC 8343: A YANG Data Model for Interface Management";
    
                    }
                  }  // choice termination-point-type
                }  // container l3-termination-point-attributes
    
                leaf te-tp-id {
                  type te-types:te-tp-id;
                  description
                    "An identifier that uniquely identifies a TE termination
    point.";
                }
    
                container te {
                  must "../te-tp-id";
                  presence "TE support";
                  description
                    "Indicates TE support.";
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the LTP.";
                  }
    
                  leaf name {
                    type string;
                    description
                      "A descriptive name for the LTP.";
                  }
    
                  list interface-switching-capability {
                    key "switching-capability encoding";
                    description
                      "List of ISCDs for this link.";
                    reference
                      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
                      Signaling Functional Description
                       RFC 4203: OSPF Extensions in Support of Generalized
                      Multi-Protocol Label Switching (GMPLS)";
    
                    leaf switching-capability {
                      type identityref {
                        base te-types:switching-capabilities;
                      }
                      description
                        "Switching capability for this interface.";
                    }
    
                    leaf encoding {
                      type identityref {
                        base te-types:lsp-encoding-types;
                      }
                      description
                        "Encoding supported by this interface.";
                    }
    
                    list max-lsp-bandwidth {
                      key "priority";
                      max-elements 8;
                      description
                        "Maximum Label Switched Path (LSP) bandwidth at
    priorities 0-7.";
                      leaf priority {
                        type uint8 {
                          range "0..7";
                        }
                        description "Priority.";
                      }
    
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
                    }  // list max-lsp-bandwidth
                  }  // list interface-switching-capability
    
                  leaf inter-domain-plug-id {
                    type binary;
                    description
                      "A network-wide unique number that identifies on the
    network a connection that supports a given inter-domain
    TE link.  This is a more flexible alternative to specifying
    'remote-te-node-id' and 'remote-te-link-tp-id' on a TE link
    when the provider either does not know 'remote-te-node-id'
    and 'remote-te-link-tp-id' or needs to give the client the
    flexibility to mix and match multiple topologies.";
                  }
    
                  leaf-list inter-layer-lock-id {
                    type uint32;
                    description
                      "Inter-layer lock ID, used for path computation in a TE
    topology covering multiple layers or multiple regions.";
                    reference
                      "RFC 5212: Requirements for GMPLS-Based Multi-Region and
                      Multi-Layer Networks (MRN/MLN)
                       RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
                      for Multi-Layer and Multi-Region Networks (MLN/MRN)";
    
                  }
    
                  leaf oper-status {
                    type te-types:te-oper-status;
                    config false;
                    description
                      "The current operational state of the LTP.";
                  }
    
                  container geolocation {
                    config false;
                    description
                      "Contains a GPS location.";
                    leaf altitude {
                      type int64;
                      units "millimeters";
                      description
                        "Distance above sea level.";
                    }
    
                    leaf latitude {
                      type geographic-coordinate-degree {
                        fraction-digits 0;
                        range "-90..90";
                      }
                      description
                        "Relative position north or south on the Earth's surface.";
                    }
    
                    leaf longitude {
                      type geographic-coordinate-degree {
                        fraction-digits 0;
                        range "-180..180";
                      }
                      description
                        "Angular distance east or west on the Earth's surface.";
                    }
                  }  // container geolocation
                }  // container te
              }  // list termination-point
    
              container l2-node-attributes {
                description
                  "Contains L2 node attributes.";
                leaf name {
                  type string;
                  description "Node name.";
                }
    
                leaf-list flags {
                  type node-flag-type;
                  description
                    "Node flags.  It can be used to indicate
    node flag attributes.";
                }
    
                leaf-list bridge-id {
                  type string {
                    pattern
                      '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}';
                  }
                  description
                    "This is the bridge identifier represented as a
    hexadecimal 8-octet string.  It has 4 bits of
    priority, 12 bits of Multiple Spanning Tree
    Instance Identifier (MSTI-ID), and the base bridge
    identifier.  There may be multiple for each
    spanning tree instance.";
                  reference
                    "RFC 7727: Spanning Tree Protocol (STP) Application of
                    	  the Inter-Chassis Communication Protocol
                    	  (ICCP)";
    
                }
    
                leaf-list management-address {
                  type inet:ip-address;
                  description
                    "IP address used for management purpose.";
                }
    
                leaf management-mac {
                  type yang:mac-address;
                  description
                    "This is a MAC address used for the bridge management.
    It can be the Bridge Base VLAN ID (VID), interface
    MAC address, or other. ";
                }
    
                leaf management-vlan {
                  type string;
                  description
                    "This is a VLAN that supports the management address.
    The actual VLAN ID type and value would be a member of
    this VLAN.";
                }
              }  // container l2-node-attributes
    
              container fabric-attributes {
                description
                  "Attributes for a fabric network";
                leaf fabric-id {
                  type fabrictypes:fabric-id;
                  description
                    "An identifier for a fabric in a topology.
    This identifier can be generated when composing a fabric.
    The composition of a fabric can be achieved by defining an
    RPC, which is left for vendor-specific implementation and
    not provided in this model.";
                }
    
                leaf name {
                  type string;
                  description
                    "Name of the fabric";
                }
    
                leaf type {
                  type fabrictypes:underlay-network-type;
                  description
                    "The type of physical network that implements this
    fabric.  Examples are VLAN and TRILL.";
                }
    
                container vni-capacity {
                  description
                    "The range of the VXLAN Network Identifier
    (VNI) defined in RFC 7348 that the POD uses.";
                  leaf min {
                    type int32;
                    description
                      "The lower-limit VNI.";
                  }
    
                  leaf max {
                    type int32;
                    description
                      "The upper-limit VNI.";
                  }
                }  // container vni-capacity
    
                leaf description {
                  type string;
                  description
                    "Description of the fabric";
                }
    
                container options {
                  description
                    "Options of the fabric";
                  leaf gateway-mode {
                    type enumeration {
                      enum "centralized" {
                        value 0;
                        description
                          "The Fabric uses centralized
    gateway, in which gateway is deployed on SPINE
    node.";
                      }
                      enum "distributed" {
                        value 1;
                        description
                          "The Fabric uses distributed
    gateway, in which gateway is deployed on LEAF
    node.";
                      }
                    }
                    default "distributed";
                    description
                      "Gateway mode of the fabric";
                  }
    
                  leaf traffic-behavior {
                    type enumeration {
                      enum "normal" {
                        value 0;
                        description
                          "Normal means no policy is needed
    for all traffic";
                      }
                      enum "policy-driven" {
                        value 1;
                        description
                          "Policy driven means policy is
    needed for the traffic; otherwise, the traffic
    will be discarded.";
                      }
                    }
                    default "normal";
                    description
                      "Traffic behavior of the fabric";
                  }
    
                  leaf-list capability-supported {
                    type fabrictypes:service-capabilities;
                    description
                      "It provides a list of supported services of the
    fabric.  The service-capabilities is defined as
    identity-ref.  Users can define more services
    by defining new identities.";
                  }
                }  // container options
    
                list device-nodes {
                  key "device-ref";
                  description
                    "Device nodes that are included in a fabric.";
                  leaf device-ref {
                    type fabrictypes:node-ref;
                    description
                      "The device that the fabric includes that refers
    to a node in another topology.";
                  }
    
                  leaf-list role {
                    type fabrictypes:device-role;
                    default "fabrictypes:leaf";
                    description
                      "It is a list of device roles to represent the roles
    that a device plays within a POD, such as SPINE,
    LEAF, Border, or Border-Leaf.
    The device role is defined as identity-ref.  If more
    than 2 stages are used for a POD, users can
    define new identities for the device role.";
                  }
                }  // list device-nodes
    
                list device-links {
                  key "link-ref";
                  description
                    "Links that are included within a fabric.";
                  leaf link-ref {
                    type fabrictypes:link-ref;
                    description
                      "The link that the fabric includes that refers to
    a link in another topology.";
                  }
                }  // list device-links
    
                list device-ports {
                  key "port-ref";
                  description
                    "Ports that are included in the fabric.";
                  leaf port-ref {
                    type fabrictypes:tp-ref;
                    description
                      "The port that the fabric includes that refers to
    a termination-point in another topology.";
                  }
    
                  leaf port-type {
                    type fabrictypes:port-type;
                    description
                      "Port type is defined as identity-ref.  The current
    types include ethernet or serial.  If more types
    are needed, developers can define new identities.";
                  }
    
                  leaf bandwidth {
                    type fabrictypes:bandwidth;
                    description
                      "Bandwidth of the port.  It is defined as identity-ref.
    If more speeds are introduced, developers can define
    new identities for them.  Current speeds include 1M, 10M,
    100M, 1G, 10G, 25G, 40G, 100G, and 400G.";
                  }
                }  // list device-ports
              }  // container fabric-attributes
    
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                description
                  "Test point location type.";
              }
    
              container ipv4-location-type {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "When test point location type is equal to IPv4 address.";
                }
                description
                  "Container for IPv4 location types.";
                container test-point-ipv4-location-list {
                  description
                    "Serves as top-level container
    for test point location list.";
                  list test-point-locations {
                    key "ipv4-location ni";
                    description
                      "List of test point locations.";
                    leaf ipv4-location {
                      type inet:ipv4-address;
                      description
                        "IPv4 address.";
                    }
    
                    leaf ni {
                      type routing-instance-ref;
                      description
                        "The ni is used to describe the
    corresponding network instance";
                    }
    
                    choice technology {
                      default "technology-null";
                      description
                        "Technology choice.";
                      case technology-null {
                        description
                          "This is a placeholder when no technology is needed.";
                        leaf tech-null {
                          type empty;
                          description
                            "There is no technology to be defined.";
                        }
                      }  // case technology-null
                    }  // choice technology
    
                    container tp-tools {
                      description
                        "Container for test point OAM toolset.";
                      leaf continuity-check {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    Continuity Check function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 5880: Bidirectional Forwarding Detection
                           RFC 5881: BFD for IPv4 and IPv6
                           RFC 5883: BFD for Multihop Paths
                           RFC 5884: BFD for MPLS Label Switched Paths
                           RFC 5885: BFD for PW VCCV
                           RFC 6450: Multicast Ping Protocol
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
    
                      leaf path-discovery {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    path discovery function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 4884: Extended ICMP to Support Multi-Part Messages
                           RFC 5837: Extending ICMP for Interface and Next-Hop
                              Identification
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
                    }  // container tp-tools
    
                    anydata root {
                      yangmnt:mount-point "root";
                      description
                        "Root for models supported per test point.";
                    }
    
                    list oam-neighboring-tps {
                      key "index";
                      description
                        "List of neighboring test points in the same layer that are
    related to current test point.  If the neighboring test point
    is placed after the current test point, the position is
    specified as +1.  If the neighboring test point is placed
    before the current test point, the position is specified
    as -1; if no neighboring test points are placed before or
    after the current test point in the same layer, the
    position is specified as 0.";
                      leaf index {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Index of a list of neighboring test points
    in layers up and down the stack for
    the same interface that are related to the
    current test point.";
                      }
    
                      leaf position {
                        type int8 {
                          range "-1..1";
                        }
                        default "0";
                        description
                          "The position of the neighboring test point relative to
    the current test point.  Level 0 indicates a test point
    corresponding to a specific index in the same layer as
    the current test point.  -1 means there is a test point
    corresponding to a specific index in the test point down
    the stack, and +1 means there is a test point corresponding
    to a specific index in the test point up the stack.";
                      }
    
                      choice tp-location {
                        description
                          "TP location.";
                        case mac-address {
                          description
                            "MAC address based TP addressing.";
                          leaf mac-address-location {
                            type yang:mac-address;
                            description
                              "MAC address.";
                          }
                        }  // case mac-address
    
                        case ipv4-address {
                          description
                            "IP address based TP addressing.";
                          leaf ipv4-address-location {
                            type inet:ipv4-address;
                            description
                              "IPv4 address.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          description
                            "IPv6 address based TP addressing.";
                          leaf ipv6-address-location {
                            type inet:ipv6-address;
                            description
                              "IPv6 address.";
                          }
                        }  // case ipv6-address
    
                        case as-number {
                          description
                            "AS number for point-to-multipoint OAM.";
                          leaf as-number-location {
                            type inet:as-number;
                            description
                              "AS number location.";
                          }
                        }  // case as-number
    
                        case router-id {
                          description
                            "System ID.";
                          leaf router-id-location {
                            type rt:router-id;
                            description
                              "System ID location.";
                          }
                        }  // case router-id
                      }  // choice tp-location
                    }  // list oam-neighboring-tps
                  }  // list test-point-locations
                }  // container test-point-ipv4-location-list
              }  // container ipv4-location-type
    
              container ipv6-location-type {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "When test point location is equal to IPv6 address.";
                }
                description
                  "ipv6 location type container.";
                container test-point-ipv6-location-list {
                  description
                    "Serves as top-level container
    for test point location list.";
                  list test-point-locations {
                    key "ipv6-location ni";
                    description
                      "List of test point locations.";
                    leaf ipv6-location {
                      type inet:ipv6-address;
                      description
                        "IPv6 address.";
                    }
    
                    leaf ni {
                      type routing-instance-ref;
                      description
                        "The ni is used to describe the
    corresponding network instance.";
                    }
    
                    choice technology {
                      default "technology-null";
                      description
                        "Technology choice.";
                      case technology-null {
                        description
                          "This is a placeholder when no technology is needed.";
                        leaf tech-null {
                          type empty;
                          description
                            "There is no technology to be defined.";
                        }
                      }  // case technology-null
                    }  // choice technology
    
                    container tp-tools {
                      description
                        "Container for test point OAM toolset.";
                      leaf continuity-check {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    Continuity Check function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 5880: Bidirectional Forwarding Detection
                           RFC 5881: BFD for IPv4 and IPv6
                           RFC 5883: BFD for Multihop Paths
                           RFC 5884: BFD for MPLS Label Switched Paths
                           RFC 5885: BFD for PW VCCV
                           RFC 6450: Multicast Ping Protocol
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
    
                      leaf path-discovery {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    path discovery function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 4884: Extended ICMP to Support Multi-Part Messages
                           RFC 5837: Extending ICMP for Interface and Next-Hop
                              Identification
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
                    }  // container tp-tools
    
                    anydata root {
                      yangmnt:mount-point "root";
                      description
                        "Root for models supported per test point.";
                    }
    
                    list oam-neighboring-tps {
                      key "index";
                      description
                        "List of neighboring test points in the same layer that are
    related to current test point.  If the neighboring test point
    is placed after the current test point, the position is
    specified as +1.  If the neighboring test point is placed
    before the current test point, the position is specified
    as -1; if no neighboring test points are placed before or
    after the current test point in the same layer, the
    position is specified as 0.";
                      leaf index {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Index of a list of neighboring test points
    in layers up and down the stack for
    the same interface that are related to the
    current test point.";
                      }
    
                      leaf position {
                        type int8 {
                          range "-1..1";
                        }
                        default "0";
                        description
                          "The position of the neighboring test point relative to
    the current test point.  Level 0 indicates a test point
    corresponding to a specific index in the same layer as
    the current test point.  -1 means there is a test point
    corresponding to a specific index in the test point down
    the stack, and +1 means there is a test point corresponding
    to a specific index in the test point up the stack.";
                      }
    
                      choice tp-location {
                        description
                          "TP location.";
                        case mac-address {
                          description
                            "MAC address based TP addressing.";
                          leaf mac-address-location {
                            type yang:mac-address;
                            description
                              "MAC address.";
                          }
                        }  // case mac-address
    
                        case ipv4-address {
                          description
                            "IP address based TP addressing.";
                          leaf ipv4-address-location {
                            type inet:ipv4-address;
                            description
                              "IPv4 address.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          description
                            "IPv6 address based TP addressing.";
                          leaf ipv6-address-location {
                            type inet:ipv6-address;
                            description
                              "IPv6 address.";
                          }
                        }  // case ipv6-address
    
                        case as-number {
                          description
                            "AS number for point-to-multipoint OAM.";
                          leaf as-number-location {
                            type inet:as-number;
                            description
                              "AS number location.";
                          }
                        }  // case as-number
    
                        case router-id {
                          description
                            "System ID.";
                          leaf router-id-location {
                            type rt:router-id;
                            description
                              "System ID location.";
                          }
                        }  // case router-id
                      }  // choice tp-location
                    }  // list oam-neighboring-tps
                  }  // list test-point-locations
                }  // container test-point-ipv6-location-list
              }  // container ipv6-location-type
    
              container mac-location-type {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "When test point location type is equal to MAC address.";
                }
                description
                  "Container for MAC address location types.";
                container test-point-mac-address-location-list {
                  description
                    "Serves as top-level container
    for test point location list.";
                  list test-point-locations {
                    key "mac-address-location";
                    description
                      "List of test point locations.";
                    leaf mac-address-location {
                      type yang:mac-address;
                      description "MAC address.";
                    }
    
                    choice technology {
                      default "technology-null";
                      description
                        "Technology choice.";
                      case technology-null {
                        description
                          "This is a placeholder when no technology is needed.";
                        leaf tech-null {
                          type empty;
                          description
                            "There is no technology to be defined.";
                        }
                      }  // case technology-null
                    }  // choice technology
    
                    container tp-tools {
                      description
                        "Container for test point OAM toolset.";
                      leaf continuity-check {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    Continuity Check function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 5880: Bidirectional Forwarding Detection
                           RFC 5881: BFD for IPv4 and IPv6
                           RFC 5883: BFD for Multihop Paths
                           RFC 5884: BFD for MPLS Label Switched Paths
                           RFC 5885: BFD for PW VCCV
                           RFC 6450: Multicast Ping Protocol
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
    
                      leaf path-discovery {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    path discovery function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 4884: Extended ICMP to Support Multi-Part Messages
                           RFC 5837: Extending ICMP for Interface and Next-Hop
                              Identification
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
                    }  // container tp-tools
    
                    anydata root {
                      yangmnt:mount-point "root";
                      description
                        "Root for models supported per test point.";
                    }
    
                    list oam-neighboring-tps {
                      key "index";
                      description
                        "List of neighboring test points in the same layer that are
    related to current test point.  If the neighboring test point
    is placed after the current test point, the position is
    specified as +1.  If the neighboring test point is placed
    before the current test point, the position is specified
    as -1; if no neighboring test points are placed before or
    after the current test point in the same layer, the
    position is specified as 0.";
                      leaf index {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Index of a list of neighboring test points
    in layers up and down the stack for
    the same interface that are related to the
    current test point.";
                      }
    
                      leaf position {
                        type int8 {
                          range "-1..1";
                        }
                        default "0";
                        description
                          "The position of the neighboring test point relative to
    the current test point.  Level 0 indicates a test point
    corresponding to a specific index in the same layer as
    the current test point.  -1 means there is a test point
    corresponding to a specific index in the test point down
    the stack, and +1 means there is a test point corresponding
    to a specific index in the test point up the stack.";
                      }
    
                      choice tp-location {
                        description
                          "TP location.";
                        case mac-address {
                          description
                            "MAC address based TP addressing.";
                          leaf mac-address-location {
                            type yang:mac-address;
                            description
                              "MAC address.";
                          }
                        }  // case mac-address
    
                        case ipv4-address {
                          description
                            "IP address based TP addressing.";
                          leaf ipv4-address-location {
                            type inet:ipv4-address;
                            description
                              "IPv4 address.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          description
                            "IPv6 address based TP addressing.";
                          leaf ipv6-address-location {
                            type inet:ipv6-address;
                            description
                              "IPv6 address.";
                          }
                        }  // case ipv6-address
    
                        case as-number {
                          description
                            "AS number for point-to-multipoint OAM.";
                          leaf as-number-location {
                            type inet:as-number;
                            description
                              "AS number location.";
                          }
                        }  // case as-number
    
                        case router-id {
                          description
                            "System ID.";
                          leaf router-id-location {
                            type rt:router-id;
                            description
                              "System ID location.";
                          }
                        }  // case router-id
                      }  // choice tp-location
                    }  // list oam-neighboring-tps
                  }  // list test-point-locations
                }  // container test-point-mac-address-location-list
              }  // container mac-location-type
    
              container group-as-number-location-type {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:as-number-address-type')" {
                  description
                    "When test point location type is equal to AS number.";
                }
                description
                  "Container for AS number location types.";
                container test-point-as-number-location-list {
                  description
                    "Serves as top-level container
    for test point location list.";
                  list test-point-locations {
                    key "as-number-location";
                    description
                      "List of test point locations.";
                    leaf as-number-location {
                      type inet:as-number;
                      description
                        "AS number for point-to-multipoint OAM.";
                    }
    
                    leaf ni {
                      type routing-instance-ref;
                      description
                        "The ni is used to describe the
    corresponding network instance.";
                    }
    
                    choice technology {
                      default "technology-null";
                      description
                        "Technology choice.";
                      case technology-null {
                        description
                          "This is a placeholder when no technology is needed.";
                        leaf tech-null {
                          type empty;
                          description
                            "There is no technology to be defined.";
                        }
                      }  // case technology-null
                    }  // choice technology
    
                    container tp-tools {
                      description
                        "Container for test point OAM toolset.";
                      leaf continuity-check {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    Continuity Check function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 5880: Bidirectional Forwarding Detection
                           RFC 5881: BFD for IPv4 and IPv6
                           RFC 5883: BFD for Multihop Paths
                           RFC 5884: BFD for MPLS Label Switched Paths
                           RFC 5885: BFD for PW VCCV
                           RFC 6450: Multicast Ping Protocol
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
    
                      leaf path-discovery {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    path discovery function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 4884: Extended ICMP to Support Multi-Part Messages
                           RFC 5837: Extending ICMP for Interface and Next-Hop
                              Identification
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
                    }  // container tp-tools
    
                    anydata root {
                      yangmnt:mount-point "root";
                      description
                        "Root for models supported per test point.";
                    }
    
                    list oam-neighboring-tps {
                      key "index";
                      description
                        "List of neighboring test points in the same layer that are
    related to current test point.  If the neighboring test point
    is placed after the current test point, the position is
    specified as +1.  If the neighboring test point is placed
    before the current test point, the position is specified
    as -1; if no neighboring test points are placed before or
    after the current test point in the same layer, the
    position is specified as 0.";
                      leaf index {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Index of a list of neighboring test points
    in layers up and down the stack for
    the same interface that are related to the
    current test point.";
                      }
    
                      leaf position {
                        type int8 {
                          range "-1..1";
                        }
                        default "0";
                        description
                          "The position of the neighboring test point relative to
    the current test point.  Level 0 indicates a test point
    corresponding to a specific index in the same layer as
    the current test point.  -1 means there is a test point
    corresponding to a specific index in the test point down
    the stack, and +1 means there is a test point corresponding
    to a specific index in the test point up the stack.";
                      }
    
                      choice tp-location {
                        description
                          "TP location.";
                        case mac-address {
                          description
                            "MAC address based TP addressing.";
                          leaf mac-address-location {
                            type yang:mac-address;
                            description
                              "MAC address.";
                          }
                        }  // case mac-address
    
                        case ipv4-address {
                          description
                            "IP address based TP addressing.";
                          leaf ipv4-address-location {
                            type inet:ipv4-address;
                            description
                              "IPv4 address.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          description
                            "IPv6 address based TP addressing.";
                          leaf ipv6-address-location {
                            type inet:ipv6-address;
                            description
                              "IPv6 address.";
                          }
                        }  // case ipv6-address
    
                        case as-number {
                          description
                            "AS number for point-to-multipoint OAM.";
                          leaf as-number-location {
                            type inet:as-number;
                            description
                              "AS number location.";
                          }
                        }  // case as-number
    
                        case router-id {
                          description
                            "System ID.";
                          leaf router-id-location {
                            type rt:router-id;
                            description
                              "System ID location.";
                          }
                        }  // case router-id
                      }  // choice tp-location
                    }  // list oam-neighboring-tps
                  }  // list test-point-locations
                }  // container test-point-as-number-location-list
              }  // container group-as-number-location-type
    
              container group-router-id-location-type {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "When test point location type is equal to system-info.";
                }
                description
                  "Container for system ID location types.";
                container test-point-system-info-location-list {
                  description
                    "Serves as top-level container for
    test point location list.";
                  list test-point-locations {
                    key "router-id-location";
                    description
                      "List of test point locations.";
                    leaf router-id-location {
                      type rt:router-id;
                      description "System ID.";
                    }
    
                    leaf ni {
                      type routing-instance-ref;
                      description
                        "The ni is used to describe the
    corresponding network instance.";
                    }
    
                    choice technology {
                      default "technology-null";
                      description
                        "Technology choice.";
                      case technology-null {
                        description
                          "This is a placeholder when no technology is needed.";
                        leaf tech-null {
                          type empty;
                          description
                            "There is no technology to be defined.";
                        }
                      }  // case technology-null
                    }  // choice technology
    
                    container tp-tools {
                      description
                        "Container for test point OAM toolset.";
                      leaf continuity-check {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    Continuity Check function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 5880: Bidirectional Forwarding Detection
                           RFC 5881: BFD for IPv4 and IPv6
                           RFC 5883: BFD for Multihop Paths
                           RFC 5884: BFD for MPLS Label Switched Paths
                           RFC 5885: BFD for PW VCCV
                           RFC 6450: Multicast Ping Protocol
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
    
                      leaf path-discovery {
                        type boolean;
                        mandatory true;
                        description
                          "A flag indicating whether or not the
    path discovery function is supported.";
                        reference
                          "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
                           RFC 4443: Internet Control Message Protocol (ICMPv6)
                              for the Internet Protocol Version 6 (IPv6) Specification
                           RFC 4884: Extended ICMP to Support Multi-Part Messages
                           RFC 5837: Extending ICMP for Interface and Next-Hop
                              Identification
                           RFC 8029: Detecting Multiprotocol Label Switched (MPLS)
                              Data-Plane Failures";
    
                      }
                    }  // container tp-tools
    
                    anydata root {
                      yangmnt:mount-point "root";
                      description
                        "Root for models supported per test point.";
                    }
    
                    list oam-neighboring-tps {
                      key "index";
                      description
                        "List of neighboring test points in the same layer that are
    related to current test point.  If the neighboring test point
    is placed after the current test point, the position is
    specified as +1.  If the neighboring test point is placed
    before the current test point, the position is specified
    as -1; if no neighboring test points are placed before or
    after the current test point in the same layer, the
    position is specified as 0.";
                      leaf index {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Index of a list of neighboring test points
    in layers up and down the stack for
    the same interface that are related to the
    current test point.";
                      }
    
                      leaf position {
                        type int8 {
                          range "-1..1";
                        }
                        default "0";
                        description
                          "The position of the neighboring test point relative to
    the current test point.  Level 0 indicates a test point
    corresponding to a specific index in the same layer as
    the current test point.  -1 means there is a test point
    corresponding to a specific index in the test point down
    the stack, and +1 means there is a test point corresponding
    to a specific index in the test point up the stack.";
                      }
    
                      choice tp-location {
                        description
                          "TP location.";
                        case mac-address {
                          description
                            "MAC address based TP addressing.";
                          leaf mac-address-location {
                            type yang:mac-address;
                            description
                              "MAC address.";
                          }
                        }  // case mac-address
    
                        case ipv4-address {
                          description
                            "IP address based TP addressing.";
                          leaf ipv4-address-location {
                            type inet:ipv4-address;
                            description
                              "IPv4 address.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          description
                            "IPv6 address based TP addressing.";
                          leaf ipv6-address-location {
                            type inet:ipv6-address;
                            description
                              "IPv6 address.";
                          }
                        }  // case ipv6-address
    
                        case as-number {
                          description
                            "AS number for point-to-multipoint OAM.";
                          leaf as-number-location {
                            type inet:as-number;
                            description
                              "AS number location.";
                          }
                        }  // case as-number
    
                        case router-id {
                          description
                            "System ID.";
                          leaf router-id-location {
                            type rt:router-id;
                            description
                              "System ID location.";
                          }
                        }  // case router-id
                      }  // choice tp-location
                    }  // list oam-neighboring-tps
                  }  // list test-point-locations
                }  // container test-point-system-info-location-list
              }  // container group-router-id-location-type
    
              container l2-node-attributes {
                description
                  "Contains L2 node attributes.";
                leaf name {
                  type string;
                  description "Node name.";
                }
    
                leaf-list flags {
                  type node-flag-type;
                  description
                    "Node flags.  It can be used to indicate
    node flag attributes.";
                }
    
                leaf-list bridge-id {
                  type string {
                    pattern
                      '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}';
                  }
                  description
                    "This is the bridge identifier represented as a
    hexadecimal 8-octet string.  It has 4 bits of
    priority, 12 bits of Multiple Spanning Tree
    Instance Identifier (MSTI-ID), and the base bridge
    identifier.  There may be multiple for each
    spanning tree instance.";
                  reference
                    "RFC 7727: Spanning Tree Protocol (STP) Application of
                    	  the Inter-Chassis Communication Protocol
                    	  (ICCP)";
    
                }
    
                leaf-list management-address {
                  type inet:ip-address;
                  description
                    "IP address used for management purpose.";
                }
    
                leaf management-mac {
                  type yang:mac-address;
                  description
                    "This is a MAC address used for the bridge management.
    It can be the Bridge Base VLAN ID (VID), interface
    MAC address, or other. ";
                }
    
                leaf management-vlan {
                  type string;
                  description
                    "This is a VLAN that supports the management address.
    The actual VLAN ID type and value would be a member of
    this VLAN.";
                }
              }  // container l2-node-attributes
    
              container l3-node-attributes {
                description
                  "Contains node attributes";
                leaf name {
                  type inet:domain-name;
                  description "Node name";
                }
    
                leaf-list flag {
                  type node-flag-type;
                  description "Node flags";
                }
    
                leaf-list router-id {
                  type rt-types:router-id;
                  description
                    "Router-id for the node";
                }
    
                list prefix {
                  key "prefix";
                  description
                    "A list of prefixes along with their attributes";
                  leaf prefix {
                    type inet:ip-prefix;
                    description
                      "IP prefix value";
                  }
    
                  leaf metric {
                    type uint32;
                    description "Prefix metric";
                  }
    
                  leaf-list flag {
                    type prefix-flag-type;
                    description "Prefix flags";
                  }
                }  // list prefix
              }  // container l3-node-attributes
    
              leaf te-node-id {
                type te-types:te-node-id;
                description
                  "The identifier of a node in the TE topology.
    A node is specific to a topology to which it belongs.";
              }
    
              container te {
                must "../te-node-id" {
                  description
                    "'te-node-id' is mandatory.";
                }
                must
                  "count(../nw:supporting-node)<=1" {
                  description
                    "For a node in a TE topology, there cannot be more
    than one supporting node.  If multiple nodes are
    abstracted, the 'underlay-topology' field is used.";
                }
                presence "TE support";
                description
                  "Indicates TE support.";
                leaf-list te-node-template {
                  if-feature template;
                  type leafref {
                    path "../../../../te/templates/node-template/name";
                  }
                  description
                    "The reference to a TE node template.";
                }
    
                container te-node-attributes {
                  description
                    "Contains node attributes in a TE topology.";
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the link.";
                  }
    
                  container connectivity-matrices {
                    description
                      "Contains a connectivity matrix on a TE node.";
                    leaf number-of-entries {
                      type uint16;
                      description
                        "The number of connectivity matrix entries.
    If this number is specified in the configuration request,
    the number is the requested number of entries, which may
    not all be listed in the list;
    if this number is reported in the state data,
    the number is the current number of operational entries.";
                    }
    
                    container label-restrictions {
                      description
                        "The label restrictions container.";
                      list label-restriction {
                        key "index";
                        description
                          "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                        reference
                          "RFC 7579: General Network Element Constraint Encoding
                          for GMPLS-Controlled Networks";
    
                        leaf restriction {
                          type enumeration {
                            enum "inclusive" {
                              value 0;
                              description
                                "The label or label range is inclusive.";
                            }
                            enum "exclusive" {
                              value 1;
                              description
                                "The label or label range is exclusive.";
                            }
                          }
                          default "inclusive";
                          description
                            "Indicates whether the list item is inclusive or exclusive.";
                        }
    
                        leaf index {
                          type uint32;
                          description
                            "The index of the label restriction list entry.";
                        }
    
                        container label-start {
                          must
                            "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-start
    
                        container label-end {
                          must
                            "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-end
    
                        container label-step {
                          description
                            "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type int32;
                              default "1";
                              description
                                "Label range step.";
                            }
                            choice l0-grid-type {
                              description
                                "Grid type: DWDM, CWDM, etc.";
                              leaf wson-dwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type identityref {
                                  base dwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf wson-cwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type identityref {
                                  base cwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice l0-grid-type
                          }  // choice technology
                        }  // container label-step
    
                        leaf range-bitmap {
                          type yang:hex-string;
                          description
                            "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                        }
    
                        leaf grid-type {
                          type identityref {
                            base l0-grid-type;
                          }
                          description
                            "Grid type";
                        }
    
                        leaf priority {
                          type uint8;
                          description
                            "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                          reference
                            "RFC 4203: OSPF Extensions in Support of Generalized
                            Multi-Protocol Label Switching (GMPLS)";
    
                        }
                      }  // list label-restriction
                    }  // container label-restrictions
    
                    leaf is-allowed {
                      type boolean;
                      description
                        "'true' - switching is allowed;
    'false' - switching is disallowed.";
                    }
    
                    container underlay {
                      if-feature te-topology-hierarchy;
                      description
                        "Attributes of the TE link underlay.";
                      reference
                        "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Traffic Engineering (TE)";
    
                      leaf enabled {
                        type boolean;
                        description
                          "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                      }
    
                      container primary-path {
                        description
                          "The service path on the underlay topology that
    supports this link.";
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // container primary-path
    
                      list 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.";
                        }
    
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // list backup-path
    
                      leaf protection-type {
                        type identityref {
                          base te-types:lsp-protection-type;
                        }
                        description
                          "Underlay protection type desired for this link.";
                      }
    
                      container tunnel-termination-points {
                        description
                          "Underlay TTPs desired for this link.";
                        leaf source {
                          type binary;
                          description
                            "Source TTP identifier.";
                        }
    
                        leaf destination {
                          type binary;
                          description
                            "Destination TTP identifier.";
                        }
                      }  // container tunnel-termination-points
    
                      container tunnels {
                        description
                          "Underlay TE tunnels supporting this TE link.";
                        leaf sharing {
                          type boolean;
                          default "true";
                          description
                            "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                        }
    
                        list tunnel {
                          key "tunnel-name";
                          description
                            "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                          leaf tunnel-name {
                            type string;
                            description
                              "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                          }
    
                          leaf sharing {
                            type boolean;
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                          }
                        }  // list tunnel
                      }  // container tunnels
                    }  // container underlay
    
                    container path-constraints {
                      description
                        "TE named path constraints container.";
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
    
                      leaf link-protection {
                        type identityref {
                          base link-protection-type;
                        }
                        default
                          "te-types:link-protection-unprotected";
                        description
                          "Link protection type required for the links included
    in the computed path.";
                        reference
                          "RFC 4202: Routing Extensions in Support of
                          Generalized Multi-Protocol Label Switching (GMPLS)";
    
                      }
    
                      leaf setup-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested setup priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf hold-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested hold priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf signaling-type {
                        type identityref {
                          base path-signaling-type;
                        }
                        default
                          "te-types:path-setup-rsvp";
                        description
                          "TE tunnel path signaling type.";
                      }
    
                      container path-metric-bounds {
                        description
                          "TE path metric bounds container.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of TE path metric bounds.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                          }
    
                          leaf upper-bound {
                            type uint64;
                            default "0";
                            description
                              "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                          }
                        }  // list path-metric-bound
                      }  // container path-metric-bounds
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      leaf disjointness {
                        type te-path-disjointness;
                        description
                          "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                      }
                    }  // container path-constraints
    
                    container optimizations {
                      description
                        "The objective function container that includes
    attributes to impose when computing a TE path.";
                      choice algorithm {
                        description
                          "Optimizations algorithm.";
                        case metric {
                          if-feature path-optimization-metric;
                          list optimization-metric {
                            key "metric-type";
                            description
                              "TE path metric type.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                            }
    
                            leaf weight {
                              type uint8;
                              default "1";
                              description
                                "TE path metric normalization weight.";
                            }
    
                            container explicit-route-exclude-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-excludes'";
                              description
                                "Container for the 'exclude route' object list.";
                              list route-object-exclude-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be excluded in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
    
                                  case srlg {
                                    description
                                      "An SRLG value to be included or excluded.";
                                    container srlg {
                                      description
                                        "SRLG container.";
                                      leaf srlg {
                                        type uint32;
                                        description
                                          "SRLG value.";
                                      }
                                    }  // container srlg
                                  }  // case srlg
                                }  // choice type
                              }  // list route-object-exclude-object
                            }  // container explicit-route-exclude-objects
    
                            container explicit-route-include-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-includes'";
                              description
                                "Container for the 'include route' object list.";
                              list route-object-include-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be included in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
                                }  // choice type
                              }  // list route-object-include-object
                            }  // container explicit-route-include-objects
                          }  // list optimization-metric
    
                          container tiebreakers {
                            description
                              "Container for the list of tiebreakers.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              description
                                "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                              leaf tiebreaker-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies an entry in the list of tiebreakers.";
                              }
                            }  // list tiebreaker
                          }  // container tiebreakers
                        }  // case metric
    
                        case objective-function {
                          if-feature path-optimization-objective-function;
                          container objective-function {
                            description
                              "The objective function container that includes
    attributes to impose when computing a TE path.";
                            leaf objective-function-type {
                              type identityref {
                                base objective-function-type;
                              }
                              default
                                "te-types:of-minimize-cost-path";
                              description
                                "Objective function entry.";
                            }
                          }  // container objective-function
                        }  // case objective-function
                      }  // choice algorithm
                    }  // container optimizations
    
                    container path-properties {
                      config false;
                      description
                        "The TE path properties.";
                      list path-metric {
                        key "metric-type";
                        description
                          "TE path metric type.";
                        leaf metric-type {
                          type identityref {
                            base path-metric-type;
                          }
                          description
                            "TE path metric type.";
                        }
    
                        leaf accumulative-value {
                          type uint64;
                          description
                            "TE path metric accumulative value.";
                        }
                      }  // list path-metric
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      container path-route-objects {
                        description
                          "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                        list path-route-object {
                          key "index";
                          ordered-by user;
                          description
                            "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                          leaf index {
                            type uint32;
                            description
                              "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-route-object
                      }  // container path-route-objects
                    }  // container path-properties
    
                    list connectivity-matrix {
                      key "id";
                      description
                        "Represents a node's switching limitations, i.e.,
    limitations in the interconnecting network TE links
    across the node.";
                      reference
                        "RFC 7579: General Network Element Constraint Encoding
                        for GMPLS-Controlled Networks";
    
                      leaf id {
                        type uint32;
                        description
                          "Identifies the connectivity matrix entry.";
                      }
    
                      container from {
                        description
                          "Reference to a source LTP.";
                        leaf tp-ref {
                          type leafref {
                            path "../../../../../../nt:termination-point/nt:tp-id";
                          }
                          description
                            "Relative reference to a termination point.";
                        }
    
                        container label-restrictions {
                          description
                            "The label restrictions container.";
                          list label-restriction {
                            key "index";
                            description
                              "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                            reference
                              "RFC 7579: General Network Element Constraint Encoding
                              for GMPLS-Controlled Networks";
    
                            leaf restriction {
                              type enumeration {
                                enum "inclusive" {
                                  value 0;
                                  description
                                    "The label or label range is inclusive.";
                                }
                                enum "exclusive" {
                                  value 1;
                                  description
                                    "The label or label range is exclusive.";
                                }
                              }
                              default
                                "inclusive";
                              description
                                "Indicates whether the list item is inclusive or exclusive.";
                            }
    
                            leaf index {
                              type uint32;
                              description
                                "The index of the label restriction list entry.";
                            }
    
                            container label-start {
                              must
                                "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-start
    
                            container label-end {
                              must
                                "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-end
    
                            container label-step {
                              description
                                "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type int32;
                                  default "1";
                                  description
                                    "Label range step.";
                                }
                                choice l0-grid-type {
                                  description
                                    "Grid type: DWDM, CWDM, etc.";
                                  leaf wson-dwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type identityref {
                                      base dwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf wson-cwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type identityref {
                                      base cwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice l0-grid-type
                              }  // choice technology
                            }  // container label-step
    
                            leaf range-bitmap {
                              type yang:hex-string;
                              description
                                "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                            }
    
                            leaf grid-type {
                              type identityref {
                                base l0-grid-type;
                              }
                              description
                                "Grid type";
                            }
    
                            leaf priority {
                              type uint8;
                              description
                                "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                              reference
                                "RFC 4203: OSPF Extensions in Support of Generalized
                                Multi-Protocol Label Switching (GMPLS)";
    
                            }
                          }  // list label-restriction
                        }  // container label-restrictions
                      }  // container from
    
                      container to {
                        description
                          "Reference to a destination LTP.";
                        leaf tp-ref {
                          type leafref {
                            path "../../../../../../nt:termination-point/nt:tp-id";
                          }
                          description
                            "Relative reference to a termination point.";
                        }
    
                        container label-restrictions {
                          description
                            "The label restrictions container.";
                          list label-restriction {
                            key "index";
                            description
                              "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                            reference
                              "RFC 7579: General Network Element Constraint Encoding
                              for GMPLS-Controlled Networks";
    
                            leaf restriction {
                              type enumeration {
                                enum "inclusive" {
                                  value 0;
                                  description
                                    "The label or label range is inclusive.";
                                }
                                enum "exclusive" {
                                  value 1;
                                  description
                                    "The label or label range is exclusive.";
                                }
                              }
                              default
                                "inclusive";
                              description
                                "Indicates whether the list item is inclusive or exclusive.";
                            }
    
                            leaf index {
                              type uint32;
                              description
                                "The index of the label restriction list entry.";
                            }
    
                            container label-start {
                              must
                                "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-start
    
                            container label-end {
                              must
                                "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-end
    
                            container label-step {
                              description
                                "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type int32;
                                  default "1";
                                  description
                                    "Label range step.";
                                }
                                choice l0-grid-type {
                                  description
                                    "Grid type: DWDM, CWDM, etc.";
                                  leaf wson-dwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type identityref {
                                      base dwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf wson-cwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type identityref {
                                      base cwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice l0-grid-type
                              }  // choice technology
                            }  // container label-step
    
                            leaf range-bitmap {
                              type yang:hex-string;
                              description
                                "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                            }
    
                            leaf grid-type {
                              type identityref {
                                base l0-grid-type;
                              }
                              description
                                "Grid type";
                            }
    
                            leaf priority {
                              type uint8;
                              description
                                "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                              reference
                                "RFC 4203: OSPF Extensions in Support of Generalized
                                Multi-Protocol Label Switching (GMPLS)";
    
                            }
                          }  // list label-restriction
                        }  // container label-restrictions
                      }  // container to
    
                      leaf is-allowed {
                        type boolean;
                        description
                          "'true' - switching is allowed;
    'false' - switching is disallowed.";
                      }
    
                      container underlay {
                        if-feature te-topology-hierarchy;
                        description
                          "Attributes of the TE link underlay.";
                        reference
                          "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                          Generalized Multi-Protocol Label Switching (GMPLS)
                          Traffic Engineering (TE)";
    
                        leaf enabled {
                          type boolean;
                          description
                            "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                        }
    
                        container primary-path {
                          description
                            "The service path on the underlay topology that
    supports this link.";
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // container primary-path
    
                        list 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.";
                          }
    
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // list backup-path
    
                        leaf protection-type {
                          type identityref {
                            base te-types:lsp-protection-type;
                          }
                          description
                            "Underlay protection type desired for this link.";
                        }
    
                        container tunnel-termination-points {
                          description
                            "Underlay TTPs desired for this link.";
                          leaf source {
                            type binary;
                            description
                              "Source TTP identifier.";
                          }
    
                          leaf destination {
                            type binary;
                            description
                              "Destination TTP identifier.";
                          }
                        }  // container tunnel-termination-points
    
                        container tunnels {
                          description
                            "Underlay TE tunnels supporting this TE link.";
                          leaf sharing {
                            type boolean;
                            default "true";
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                          }
    
                          list tunnel {
                            key "tunnel-name";
                            description
                              "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                            leaf tunnel-name {
                              type string;
                              description
                                "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                            }
    
                            leaf sharing {
                              type boolean;
                              description
                                "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                            }
                          }  // list tunnel
                        }  // container tunnels
                      }  // container underlay
    
                      container path-constraints {
                        description
                          "TE named path constraints container.";
                        container te-bandwidth {
                          description
                            "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type te-bandwidth;
                              description
                                "Bandwidth specified in a generic format.";
                            }
                          }  // choice technology
                        }  // container te-bandwidth
    
                        leaf link-protection {
                          type identityref {
                            base link-protection-type;
                          }
                          default
                            "te-types:link-protection-unprotected";
                          description
                            "Link protection type required for the links included
    in the computed path.";
                          reference
                            "RFC 4202: Routing Extensions in Support of
                            Generalized Multi-Protocol Label Switching (GMPLS)";
    
                        }
    
                        leaf setup-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested setup priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf hold-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested hold priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf signaling-type {
                          type identityref {
                            base path-signaling-type;
                          }
                          default
                            "te-types:path-setup-rsvp";
                          description
                            "TE tunnel path signaling type.";
                        }
    
                        container path-metric-bounds {
                          description
                            "TE path metric bounds container.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of TE path metric bounds.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                            }
    
                            leaf upper-bound {
                              type uint64;
                              default "0";
                              description
                                "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                            }
                          }  // list path-metric-bound
                        }  // container path-metric-bounds
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        leaf disjointness {
                          type te-path-disjointness;
                          description
                            "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                        }
                      }  // container path-constraints
    
                      container optimizations {
                        description
                          "The objective function container that includes
    attributes to impose when computing a TE path.";
                        choice algorithm {
                          description
                            "Optimizations algorithm.";
                          case metric {
                            if-feature path-optimization-metric;
                            list optimization-metric {
                              key "metric-type";
                              description
                                "TE path metric type.";
                              leaf metric-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                              }
    
                              leaf weight {
                                type uint8;
                                default "1";
                                description
                                  "TE path metric normalization weight.";
                              }
    
                              container explicit-route-exclude-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-excludes'";
                                description
                                  "Container for the 'exclude route' object list.";
                                list route-object-exclude-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be excluded in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
    
                                    case srlg {
                                      description
                                        "An SRLG value to be included or excluded.";
                                      container srlg {
                                        description
                                          "SRLG container.";
                                        leaf srlg {
                                          type uint32;
                                          description
                                            "SRLG value.";
                                        }
                                      }  // container srlg
                                    }  // case srlg
                                  }  // choice type
                                }  // list route-object-exclude-object
                              }  // container explicit-route-exclude-objects
    
                              container explicit-route-include-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-includes'";
                                description
                                  "Container for the 'include route' object list.";
                                list route-object-include-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be included in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
                                  }  // choice type
                                }  // list route-object-include-object
                              }  // container explicit-route-include-objects
                            }  // list optimization-metric
    
                            container tiebreakers {
                              description
                                "Container for the list of tiebreakers.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                description
                                  "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                                leaf tiebreaker-type {
                                  type identityref {
                                    base path-metric-type;
                                  }
                                  description
                                    "Identifies an entry in the list of tiebreakers.";
                                }
                              }  // list tiebreaker
                            }  // container tiebreakers
                          }  // case metric
    
                          case objective-function {
                            if-feature path-optimization-objective-function;
                            container objective-function {
                              description
                                "The objective function container that includes
    attributes to impose when computing a TE path.";
                              leaf objective-function-type {
                                type identityref {
                                  base objective-function-type;
                                }
                                default
                                  "te-types:of-minimize-cost-path";
                                description
                                  "Objective function entry.";
                              }
                            }  // container objective-function
                          }  // case objective-function
                        }  // choice algorithm
                      }  // container optimizations
    
                      container path-properties {
                        config false;
                        description
                          "The TE path properties.";
                        list path-metric {
                          key "metric-type";
                          description
                            "TE path metric type.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "TE path metric type.";
                          }
    
                          leaf accumulative-value {
                            type uint64;
                            description
                              "TE path metric accumulative value.";
                          }
                        }  // list path-metric
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        container path-route-objects {
                          description
                            "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                          list path-route-object {
                            key "index";
                            ordered-by user;
                            description
                              "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                            leaf index {
                              type uint32;
                              description
                                "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-route-object
                        }  // container path-route-objects
                      }  // container path-properties
                    }  // list connectivity-matrix
                  }  // container connectivity-matrices
    
                  leaf domain-id {
                    type uint32;
                    description
                      "Identifies the domain to which this node belongs.
    This attribute is used to support inter-domain links.";
                    reference
                      "RFC 5152: A Per-Domain Path Computation Method for
                      Establishing Inter-Domain Traffic Engineering (TE)
                      Label Switched Paths (LSPs)
                       RFC 5316: ISIS Extensions in Support of Inter-Autonomous
                      System (AS) MPLS and GMPLS Traffic Engineering
                       RFC 5392: OSPF 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 string;
                    description "Node name.";
                  }
    
                  leaf-list signaling-address {
                    type inet:ip-address;
                    description
                      "The node's 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.";
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
                  }  // container underlay-topology
    
                  container wson-node {
                    presence
                      "The TE node is a WSON node.";
                    description
                      "WSON node attributes";
                    leaf is-reconfigurable-node {
                      type boolean;
                      default "true";
                      description
                        "Indicates whether the WSON node is reconfigurable:
    - true: the node is reconfigurable, i.e.,
      it is representing a Reconfigurable Optical
      Add/Drop Multiplexer (ROADM) node;
    - false: the node is not reconfigurable, i.e.,
      it is representing a Fixed Optical Add/Drop
      Multiplexer (FOADM) node.";
                    }
                  }  // container wson-node
                }  // container te-node-attributes
    
                leaf oper-status {
                  type te-types:te-oper-status;
                  config false;
                  description
                    "The current operational state of the node.";
                }
    
                container geolocation {
                  config false;
                  description
                    "Contains a GPS location.";
                  leaf altitude {
                    type int64;
                    units "millimeters";
                    description
                      "Distance above sea level.";
                  }
    
                  leaf latitude {
                    type geographic-coordinate-degree {
                      fraction-digits 0;
                      range "-90..90";
                    }
                    description
                      "Relative position north or south on the Earth's surface.";
                  }
    
                  leaf longitude {
                    type geographic-coordinate-degree {
                      fraction-digits 0;
                      range "-180..180";
                    }
                    description
                      "Angular distance east or west on the Earth's surface.";
                  }
                }  // container geolocation
    
                leaf is-multi-access-dr {
                  type empty;
                  config false;
                  description
                    "The presence of this attribute indicates that this TE node
    is a pseudonode elected as a designated router.";
                  reference
                    "RFC 1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
                    Environments
                     RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                    Version 2";
    
                }
    
                leaf information-source {
                  type te-info-source;
                  config false;
                  description
                    "Indicates the type of information source.";
                }
    
                leaf information-source-instance {
                  type string;
                  config false;
                  description
                    "The name indicating the instance of the information
    source.";
                }
    
                container information-source-state {
                  config false;
                  description
                    "Contains state attributes related to the information
    source.";
                  leaf credibility-preference {
                    type uint16;
                    description
                      "The preference value for calculating the Traffic
    Engineering database credibility value used for
    tie-break selection between different information-source
    values.  A higher value is preferable.";
                  }
    
                  leaf logical-network-element {
                    type string;
                    description
                      "When applicable, this is the name of a logical network
    element from which the information is learned.";
                  }
    
                  leaf network-instance {
                    type string;
                    description
                      "When applicable, this is the name of a network instance
    from which the information is learned.";
                  }
    
                  container topology {
                    description
                      "When the information is processed by the system,
    the attributes in this container indicate which topology
    is used to generate the result information.";
                    leaf node-ref {
                      type leafref {
                        path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node/nw:node-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a node.
    Nodes are identified relative to the network that
    contains them.";
                    }
    
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
                  }  // container topology
                }  // container information-source-state
    
                list information-source-entry {
                  key "information-source information-source-instance";
                  config false;
                  description
                    "A list of information sources learned, including the source
    that is used.";
                  leaf information-source {
                    type te-info-source;
                    config false;
                    description
                      "Indicates the type of information source.";
                  }
    
                  leaf information-source-instance {
                    type string;
                    config false;
                    description
                      "The name indicating the instance of the information
    source.";
                  }
    
                  container information-source-state {
                    config false;
                    description
                      "Contains state attributes related to the information
    source.";
                    leaf credibility-preference {
                      type uint16;
                      description
                        "The preference value for calculating the Traffic
    Engineering database credibility value used for
    tie-break selection between different information-source
    values.  A higher value is preferable.";
                    }
    
                    leaf logical-network-element {
                      type string;
                      description
                        "When applicable, this is the name of a logical network
    element from which the information is learned.";
                    }
    
                    leaf network-instance {
                      type string;
                      description
                        "When applicable, this is the name of a network instance
    from which the information is learned.";
                    }
    
                    container topology {
                      description
                        "When the information is processed by the system,
    the attributes in this container indicate which topology
    is used to generate the result information.";
                      leaf node-ref {
                        type leafref {
                          path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node/nw:node-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a node.
    Nodes are identified relative to the network that
    contains them.";
                      }
    
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
                    }  // container topology
                  }  // container information-source-state
    
                  container connectivity-matrices {
                    description
                      "Contains a connectivity matrix on a TE node.";
                    leaf number-of-entries {
                      type uint16;
                      description
                        "The number of connectivity matrix entries.
    If this number is specified in the configuration request,
    the number is the requested number of entries, which may
    not all be listed in the list;
    if this number is reported in the state data,
    the number is the current number of operational entries.";
                    }
    
                    container label-restrictions {
                      description
                        "The label restrictions container.";
                      list label-restriction {
                        key "index";
                        description
                          "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                        reference
                          "RFC 7579: General Network Element Constraint Encoding
                          for GMPLS-Controlled Networks";
    
                        leaf restriction {
                          type enumeration {
                            enum "inclusive" {
                              value 0;
                              description
                                "The label or label range is inclusive.";
                            }
                            enum "exclusive" {
                              value 1;
                              description
                                "The label or label range is exclusive.";
                            }
                          }
                          default "inclusive";
                          description
                            "Indicates whether the list item is inclusive or exclusive.";
                        }
    
                        leaf index {
                          type uint32;
                          description
                            "The index of the label restriction list entry.";
                        }
    
                        container label-start {
                          must
                            "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-start
    
                        container label-end {
                          must
                            "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-end
    
                        container label-step {
                          description
                            "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type int32;
                              default "1";
                              description
                                "Label range step.";
                            }
                            choice l0-grid-type {
                              description
                                "Grid type: DWDM, CWDM, etc.";
                              leaf wson-dwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type identityref {
                                  base dwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf wson-cwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type identityref {
                                  base cwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice l0-grid-type
                          }  // choice technology
                        }  // container label-step
    
                        leaf range-bitmap {
                          type yang:hex-string;
                          description
                            "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                        }
    
                        leaf grid-type {
                          type identityref {
                            base l0-grid-type;
                          }
                          description
                            "Grid type";
                        }
    
                        leaf priority {
                          type uint8;
                          description
                            "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                          reference
                            "RFC 4203: OSPF Extensions in Support of Generalized
                            Multi-Protocol Label Switching (GMPLS)";
    
                        }
                      }  // list label-restriction
                    }  // container label-restrictions
    
                    leaf is-allowed {
                      type boolean;
                      description
                        "'true' - switching is allowed;
    'false' - switching is disallowed.";
                    }
    
                    container underlay {
                      if-feature te-topology-hierarchy;
                      description
                        "Attributes of the TE link underlay.";
                      reference
                        "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Traffic Engineering (TE)";
    
                      leaf enabled {
                        type boolean;
                        description
                          "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                      }
    
                      container primary-path {
                        description
                          "The service path on the underlay topology that
    supports this link.";
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // container primary-path
    
                      list 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.";
                        }
    
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // list backup-path
    
                      leaf protection-type {
                        type identityref {
                          base te-types:lsp-protection-type;
                        }
                        description
                          "Underlay protection type desired for this link.";
                      }
    
                      container tunnel-termination-points {
                        description
                          "Underlay TTPs desired for this link.";
                        leaf source {
                          type binary;
                          description
                            "Source TTP identifier.";
                        }
    
                        leaf destination {
                          type binary;
                          description
                            "Destination TTP identifier.";
                        }
                      }  // container tunnel-termination-points
    
                      container tunnels {
                        description
                          "Underlay TE tunnels supporting this TE link.";
                        leaf sharing {
                          type boolean;
                          default "true";
                          description
                            "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                        }
    
                        list tunnel {
                          key "tunnel-name";
                          description
                            "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                          leaf tunnel-name {
                            type string;
                            description
                              "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                          }
    
                          leaf sharing {
                            type boolean;
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                          }
                        }  // list tunnel
                      }  // container tunnels
                    }  // container underlay
    
                    container path-constraints {
                      description
                        "TE named path constraints container.";
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
    
                      leaf link-protection {
                        type identityref {
                          base link-protection-type;
                        }
                        default
                          "te-types:link-protection-unprotected";
                        description
                          "Link protection type required for the links included
    in the computed path.";
                        reference
                          "RFC 4202: Routing Extensions in Support of
                          Generalized Multi-Protocol Label Switching (GMPLS)";
    
                      }
    
                      leaf setup-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested setup priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf hold-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested hold priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf signaling-type {
                        type identityref {
                          base path-signaling-type;
                        }
                        default
                          "te-types:path-setup-rsvp";
                        description
                          "TE tunnel path signaling type.";
                      }
    
                      container path-metric-bounds {
                        description
                          "TE path metric bounds container.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of TE path metric bounds.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                          }
    
                          leaf upper-bound {
                            type uint64;
                            default "0";
                            description
                              "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                          }
                        }  // list path-metric-bound
                      }  // container path-metric-bounds
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      leaf disjointness {
                        type te-path-disjointness;
                        description
                          "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                      }
                    }  // container path-constraints
    
                    container optimizations {
                      description
                        "The objective function container that includes
    attributes to impose when computing a TE path.";
                      choice algorithm {
                        description
                          "Optimizations algorithm.";
                        case metric {
                          if-feature path-optimization-metric;
                          list optimization-metric {
                            key "metric-type";
                            description
                              "TE path metric type.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                            }
    
                            leaf weight {
                              type uint8;
                              default "1";
                              description
                                "TE path metric normalization weight.";
                            }
    
                            container explicit-route-exclude-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-excludes'";
                              description
                                "Container for the 'exclude route' object list.";
                              list route-object-exclude-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be excluded in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
    
                                  case srlg {
                                    description
                                      "An SRLG value to be included or excluded.";
                                    container srlg {
                                      description
                                        "SRLG container.";
                                      leaf srlg {
                                        type uint32;
                                        description
                                          "SRLG value.";
                                      }
                                    }  // container srlg
                                  }  // case srlg
                                }  // choice type
                              }  // list route-object-exclude-object
                            }  // container explicit-route-exclude-objects
    
                            container explicit-route-include-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-includes'";
                              description
                                "Container for the 'include route' object list.";
                              list route-object-include-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be included in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
                                }  // choice type
                              }  // list route-object-include-object
                            }  // container explicit-route-include-objects
                          }  // list optimization-metric
    
                          container tiebreakers {
                            description
                              "Container for the list of tiebreakers.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              description
                                "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                              leaf tiebreaker-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies an entry in the list of tiebreakers.";
                              }
                            }  // list tiebreaker
                          }  // container tiebreakers
                        }  // case metric
    
                        case objective-function {
                          if-feature path-optimization-objective-function;
                          container objective-function {
                            description
                              "The objective function container that includes
    attributes to impose when computing a TE path.";
                            leaf objective-function-type {
                              type identityref {
                                base objective-function-type;
                              }
                              default
                                "te-types:of-minimize-cost-path";
                              description
                                "Objective function entry.";
                            }
                          }  // container objective-function
                        }  // case objective-function
                      }  // choice algorithm
                    }  // container optimizations
    
                    container path-properties {
                      config false;
                      description
                        "The TE path properties.";
                      list path-metric {
                        key "metric-type";
                        description
                          "TE path metric type.";
                        leaf metric-type {
                          type identityref {
                            base path-metric-type;
                          }
                          description
                            "TE path metric type.";
                        }
    
                        leaf accumulative-value {
                          type uint64;
                          description
                            "TE path metric accumulative value.";
                        }
                      }  // list path-metric
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      container path-route-objects {
                        description
                          "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                        list path-route-object {
                          key "index";
                          ordered-by user;
                          description
                            "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                          leaf index {
                            type uint32;
                            description
                              "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-route-object
                      }  // container path-route-objects
                    }  // container path-properties
    
                    list connectivity-matrix {
                      key "id";
                      description
                        "Represents a node's switching limitations, i.e.,
    limitations in the interconnecting network TE links
    across the node.";
                      reference
                        "RFC 7579: General Network Element Constraint Encoding
                        for GMPLS-Controlled Networks";
    
                      leaf id {
                        type uint32;
                        description
                          "Identifies the connectivity matrix entry.";
                      }
    
                      container from {
                        description
                          "Reference to a source LTP.";
                        leaf tp-ref {
                          type leafref {
                            path "../../../../../../nt:termination-point/nt:tp-id";
                          }
                          description
                            "Relative reference to a termination point.";
                        }
    
                        container label-restrictions {
                          description
                            "The label restrictions container.";
                          list label-restriction {
                            key "index";
                            description
                              "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                            reference
                              "RFC 7579: General Network Element Constraint Encoding
                              for GMPLS-Controlled Networks";
    
                            leaf restriction {
                              type enumeration {
                                enum "inclusive" {
                                  value 0;
                                  description
                                    "The label or label range is inclusive.";
                                }
                                enum "exclusive" {
                                  value 1;
                                  description
                                    "The label or label range is exclusive.";
                                }
                              }
                              default
                                "inclusive";
                              description
                                "Indicates whether the list item is inclusive or exclusive.";
                            }
    
                            leaf index {
                              type uint32;
                              description
                                "The index of the label restriction list entry.";
                            }
    
                            container label-start {
                              must
                                "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-start
    
                            container label-end {
                              must
                                "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-end
    
                            container label-step {
                              description
                                "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type int32;
                                  default "1";
                                  description
                                    "Label range step.";
                                }
                                choice l0-grid-type {
                                  description
                                    "Grid type: DWDM, CWDM, etc.";
                                  leaf wson-dwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type identityref {
                                      base dwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf wson-cwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type identityref {
                                      base cwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice l0-grid-type
                              }  // choice technology
                            }  // container label-step
    
                            leaf range-bitmap {
                              type yang:hex-string;
                              description
                                "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                            }
    
                            leaf grid-type {
                              type identityref {
                                base l0-grid-type;
                              }
                              description
                                "Grid type";
                            }
    
                            leaf priority {
                              type uint8;
                              description
                                "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                              reference
                                "RFC 4203: OSPF Extensions in Support of Generalized
                                Multi-Protocol Label Switching (GMPLS)";
    
                            }
                          }  // list label-restriction
                        }  // container label-restrictions
                      }  // container from
    
                      container to {
                        description
                          "Reference to a destination LTP.";
                        leaf tp-ref {
                          type leafref {
                            path "../../../../../../nt:termination-point/nt:tp-id";
                          }
                          description
                            "Relative reference to a termination point.";
                        }
    
                        container label-restrictions {
                          description
                            "The label restrictions container.";
                          list label-restriction {
                            key "index";
                            description
                              "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                            reference
                              "RFC 7579: General Network Element Constraint Encoding
                              for GMPLS-Controlled Networks";
    
                            leaf restriction {
                              type enumeration {
                                enum "inclusive" {
                                  value 0;
                                  description
                                    "The label or label range is inclusive.";
                                }
                                enum "exclusive" {
                                  value 1;
                                  description
                                    "The label or label range is exclusive.";
                                }
                              }
                              default
                                "inclusive";
                              description
                                "Indicates whether the list item is inclusive or exclusive.";
                            }
    
                            leaf index {
                              type uint32;
                              description
                                "The index of the label restriction list entry.";
                            }
    
                            container label-start {
                              must
                                "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-start
    
                            container label-end {
                              must
                                "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                                error-message
                                  "'label-start' and 'label-end' must have the same direction.";
                              }
                              description
                                "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    leaf dwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                        description
                                          "Valid only when grid type is DWDM.";
                                      }
                                      type l0-types:dwdm-n;
                                      description
                                        "The central frequency of DWDM.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                    leaf cwdm-n {
                                      when
                                        "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                        description
                                          "Valid only when grid type is CWDM.";
                                      }
                                      type l0-types:cwdm-n;
                                      description
                                        "Channel wavelength computing input.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-end
    
                            container label-step {
                              description
                                "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type int32;
                                  default "1";
                                  description
                                    "Label range step.";
                                }
                                choice l0-grid-type {
                                  description
                                    "Grid type: DWDM, CWDM, etc.";
                                  leaf wson-dwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type identityref {
                                      base dwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf wson-cwdm-channel-spacing {
                                    when
                                      "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type identityref {
                                      base cwdm-ch-spc-type;
                                    }
                                    description
                                      "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice l0-grid-type
                              }  // choice technology
                            }  // container label-step
    
                            leaf range-bitmap {
                              type yang:hex-string;
                              description
                                "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                            }
    
                            leaf grid-type {
                              type identityref {
                                base l0-grid-type;
                              }
                              description
                                "Grid type";
                            }
    
                            leaf priority {
                              type uint8;
                              description
                                "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                              reference
                                "RFC 4203: OSPF Extensions in Support of Generalized
                                Multi-Protocol Label Switching (GMPLS)";
    
                            }
                          }  // list label-restriction
                        }  // container label-restrictions
                      }  // container to
    
                      leaf is-allowed {
                        type boolean;
                        description
                          "'true' - switching is allowed;
    'false' - switching is disallowed.";
                      }
    
                      container underlay {
                        if-feature te-topology-hierarchy;
                        description
                          "Attributes of the TE link underlay.";
                        reference
                          "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                          Generalized Multi-Protocol Label Switching (GMPLS)
                          Traffic Engineering (TE)";
    
                        leaf enabled {
                          type boolean;
                          description
                            "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                        }
    
                        container primary-path {
                          description
                            "The service path on the underlay topology that
    supports this link.";
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // container primary-path
    
                        list 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.";
                          }
    
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // list backup-path
    
                        leaf protection-type {
                          type identityref {
                            base te-types:lsp-protection-type;
                          }
                          description
                            "Underlay protection type desired for this link.";
                        }
    
                        container tunnel-termination-points {
                          description
                            "Underlay TTPs desired for this link.";
                          leaf source {
                            type binary;
                            description
                              "Source TTP identifier.";
                          }
    
                          leaf destination {
                            type binary;
                            description
                              "Destination TTP identifier.";
                          }
                        }  // container tunnel-termination-points
    
                        container tunnels {
                          description
                            "Underlay TE tunnels supporting this TE link.";
                          leaf sharing {
                            type boolean;
                            default "true";
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                          }
    
                          list tunnel {
                            key "tunnel-name";
                            description
                              "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                            leaf tunnel-name {
                              type string;
                              description
                                "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                            }
    
                            leaf sharing {
                              type boolean;
                              description
                                "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                            }
                          }  // list tunnel
                        }  // container tunnels
                      }  // container underlay
    
                      container path-constraints {
                        description
                          "TE named path constraints container.";
                        container te-bandwidth {
                          description
                            "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type te-bandwidth;
                              description
                                "Bandwidth specified in a generic format.";
                            }
                          }  // choice technology
                        }  // container te-bandwidth
    
                        leaf link-protection {
                          type identityref {
                            base link-protection-type;
                          }
                          default
                            "te-types:link-protection-unprotected";
                          description
                            "Link protection type required for the links included
    in the computed path.";
                          reference
                            "RFC 4202: Routing Extensions in Support of
                            Generalized Multi-Protocol Label Switching (GMPLS)";
    
                        }
    
                        leaf setup-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested setup priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf hold-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested hold priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf signaling-type {
                          type identityref {
                            base path-signaling-type;
                          }
                          default
                            "te-types:path-setup-rsvp";
                          description
                            "TE tunnel path signaling type.";
                        }
    
                        container path-metric-bounds {
                          description
                            "TE path metric bounds container.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of TE path metric bounds.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                            }
    
                            leaf upper-bound {
                              type uint64;
                              default "0";
                              description
                                "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                            }
                          }  // list path-metric-bound
                        }  // container path-metric-bounds
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        leaf disjointness {
                          type te-path-disjointness;
                          description
                            "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                        }
                      }  // container path-constraints
    
                      container optimizations {
                        description
                          "The objective function container that includes
    attributes to impose when computing a TE path.";
                        choice algorithm {
                          description
                            "Optimizations algorithm.";
                          case metric {
                            if-feature path-optimization-metric;
                            list optimization-metric {
                              key "metric-type";
                              description
                                "TE path metric type.";
                              leaf metric-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                              }
    
                              leaf weight {
                                type uint8;
                                default "1";
                                description
                                  "TE path metric normalization weight.";
                              }
    
                              container explicit-route-exclude-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-excludes'";
                                description
                                  "Container for the 'exclude route' object list.";
                                list route-object-exclude-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be excluded in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
    
                                    case srlg {
                                      description
                                        "An SRLG value to be included or excluded.";
                                      container srlg {
                                        description
                                          "SRLG container.";
                                        leaf srlg {
                                          type uint32;
                                          description
                                            "SRLG value.";
                                        }
                                      }  // container srlg
                                    }  // case srlg
                                  }  // choice type
                                }  // list route-object-exclude-object
                              }  // container explicit-route-exclude-objects
    
                              container explicit-route-include-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-includes'";
                                description
                                  "Container for the 'include route' object list.";
                                list route-object-include-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be included in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
                                  }  // choice type
                                }  // list route-object-include-object
                              }  // container explicit-route-include-objects
                            }  // list optimization-metric
    
                            container tiebreakers {
                              description
                                "Container for the list of tiebreakers.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                description
                                  "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                                leaf tiebreaker-type {
                                  type identityref {
                                    base path-metric-type;
                                  }
                                  description
                                    "Identifies an entry in the list of tiebreakers.";
                                }
                              }  // list tiebreaker
                            }  // container tiebreakers
                          }  // case metric
    
                          case objective-function {
                            if-feature path-optimization-objective-function;
                            container objective-function {
                              description
                                "The objective function container that includes
    attributes to impose when computing a TE path.";
                              leaf objective-function-type {
                                type identityref {
                                  base objective-function-type;
                                }
                                default
                                  "te-types:of-minimize-cost-path";
                                description
                                  "Objective function entry.";
                              }
                            }  // container objective-function
                          }  // case objective-function
                        }  // choice algorithm
                      }  // container optimizations
    
                      container path-properties {
                        config false;
                        description
                          "The TE path properties.";
                        list path-metric {
                          key "metric-type";
                          description
                            "TE path metric type.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "TE path metric type.";
                          }
    
                          leaf accumulative-value {
                            type uint64;
                            description
                              "TE path metric accumulative value.";
                          }
                        }  // list path-metric
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        container path-route-objects {
                          description
                            "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                          list path-route-object {
                            key "index";
                            ordered-by user;
                            description
                              "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                            leaf index {
                              type uint32;
                              description
                                "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-route-object
                        }  // container path-route-objects
                      }  // container path-properties
                    }  // list connectivity-matrix
                  }  // container connectivity-matrices
    
                  leaf domain-id {
                    type uint32;
                    description
                      "Identifies the domain to which this node belongs.
    This attribute is used to support inter-domain links.";
                    reference
                      "RFC 5152: A Per-Domain Path Computation Method for
                      Establishing Inter-Domain Traffic Engineering (TE)
                      Label Switched Paths (LSPs)
                       RFC 5316: ISIS Extensions in Support of Inter-Autonomous
                      System (AS) MPLS and GMPLS Traffic Engineering
                       RFC 5392: OSPF 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 string;
                    description "Node name.";
                  }
    
                  leaf-list signaling-address {
                    type inet:ip-address;
                    description
                      "The node's 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.";
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
                  }  // container underlay-topology
                }  // list information-source-entry
    
                container statistics {
                  config false;
                  description "Statistics data.";
                  leaf discontinuity-time {
                    type yang:date-and-time;
                    description
                      "The time of the most recent occasion at which any one or
    more of this interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the last re-initialization of the local management
    subsystem, then this node contains the time the local
    management subsystem re-initialized itself.";
                  }
    
                  container node {
                    description
                      "Contains statistics attributes at the TE node level.";
                    leaf disables {
                      type yang:counter32;
                      description
                        "Number of times that a node was disabled.";
                    }
    
                    leaf enables {
                      type yang:counter32;
                      description
                        "Number of times that a node was enabled.";
                    }
    
                    leaf maintenance-sets {
                      type yang:counter32;
                      description
                        "Number of times that a node was put in maintenance.";
                    }
    
                    leaf maintenance-clears {
                      type yang:counter32;
                      description
                        "Number of times that a node was taken out of
    maintenance.";
                    }
    
                    leaf modifies {
                      type yang:counter32;
                      description
                        "Number of times that a node was modified.";
                    }
                  }  // container node
    
                  container connectivity-matrix-entry {
                    description
                      "Contains statistics attributes at the level of a
    connectivity matrix entry.";
                    leaf creates {
                      type yang:counter32;
                      description
                        "Number of times that a connectivity matrix entry was
    created.";
                      reference
                        "RFC 6241: Network Configuration Protocol (NETCONF),
                        	  Section 7.2, 'create' operation";
    
                    }
    
                    leaf deletes {
                      type yang:counter32;
                      description
                        "Number of times that a connectivity matrix entry was
    deleted.";
                      reference
                        "RFC 6241: Network Configuration Protocol (NETCONF),
                        	  Section 7.2, 'delete' operation";
    
                    }
    
                    leaf disables {
                      type yang:counter32;
                      description
                        "Number of times that a connectivity matrix entry was
    disabled.";
                    }
    
                    leaf enables {
                      type yang:counter32;
                      description
                        "Number of times that a connectivity matrix entry was
    enabled.";
                    }
    
                    leaf modifies {
                      type yang:counter32;
                      description
                        "Number of times that a connectivity matrix entry was
    modified.";
                    }
                  }  // container connectivity-matrix-entry
                }  // container statistics
    
                list tunnel-termination-point {
                  key "tunnel-tp-id";
                  description
                    "A termination point can terminate a tunnel.";
                  leaf tunnel-tp-id {
                    type binary;
                    description
                      "TTP identifier.";
                  }
    
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the TTP.";
                  }
    
                  leaf name {
                    type string;
                    description
                      "A descriptive name for the TTP.";
                  }
    
                  leaf switching-capability {
                    type identityref {
                      base te-types:switching-capabilities;
                    }
                    description
                      "Switching capability for this interface.";
                  }
    
                  leaf encoding {
                    type identityref {
                      base te-types:lsp-encoding-types;
                    }
                    description
                      "Encoding supported by this interface.";
                  }
    
                  leaf-list inter-layer-lock-id {
                    type uint32;
                    description
                      "Inter-layer lock ID, used for path computation in a TE
    topology covering multiple layers or multiple regions.";
                    reference
                      "RFC 5212: Requirements for GMPLS-Based Multi-Region and
                      Multi-Layer Networks (MRN/MLN)
                       RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
                      for Multi-Layer and Multi-Region Networks (MLN/MRN)";
    
                  }
    
                  leaf protection-type {
                    type identityref {
                      base te-types:lsp-protection-type;
                    }
                    description
                      "The protection type that this TTP is capable of.";
                  }
    
                  container client-layer-adaptation {
                    description
                      "Contains capability information to support a client-layer
    adaptation in a multi-layer topology.";
                    list switching-capability {
                      key "switching-capability encoding";
                      description
                        "List of supported switching capabilities.";
                      reference
                        "RFC 4202: Routing Extensions in Support of
                        Generalized Multi-Protocol Label Switching (GMPLS)
                         RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
                        for Multi-Layer and Multi-Region Networks (MLN/MRN)";
    
                      leaf switching-capability {
                        type identityref {
                          base te-types:switching-capabilities;
                        }
                        description
                          "Switching capability for the client-layer adaptation.";
                      }
    
                      leaf encoding {
                        type identityref {
                          base te-types:lsp-encoding-types;
                        }
                        description
                          "Encoding supported by the client-layer adaptation.";
                      }
    
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
                    }  // list switching-capability
                  }  // container client-layer-adaptation
    
                  container local-link-connectivities {
                    description
                      "Contains an LLCL for a TTP on a TE node.";
                    leaf number-of-entries {
                      type uint16;
                      description
                        "The number of LLCL entries.
    If this number is specified in the configuration request,
    the number is the requested number of entries, which may
    not all be listed in the list;
    if this number is reported in the state data,
    the number is the current number of operational entries.";
                    }
    
                    container label-restrictions {
                      description
                        "The label restrictions container.";
                      list label-restriction {
                        key "index";
                        description
                          "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                        reference
                          "RFC 7579: General Network Element Constraint Encoding
                          for GMPLS-Controlled Networks";
    
                        leaf restriction {
                          type enumeration {
                            enum "inclusive" {
                              value 0;
                              description
                                "The label or label range is inclusive.";
                            }
                            enum "exclusive" {
                              value 1;
                              description
                                "The label or label range is exclusive.";
                            }
                          }
                          default "inclusive";
                          description
                            "Indicates whether the list item is inclusive or exclusive.";
                        }
    
                        leaf index {
                          type uint32;
                          description
                            "The index of the label restriction list entry.";
                        }
    
                        container label-start {
                          must
                            "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-start
    
                        container label-end {
                          must
                            "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                            error-message
                              "'label-start' and 'label-end' must have the same direction.";
                          }
                          description
                            "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                          container te-label {
                            description
                              "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type rt-types:generalized-label;
                                description
                                  "TE label specified in a generic format.";
                              }
                              choice grid-type {
                                description
                                  "Label for DWDM or CWDM grid";
                                leaf dwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type l0-types:dwdm-n;
                                  description
                                    "The central frequency of DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf cwdm-n {
                                  when
                                    "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type l0-types:cwdm-n;
                                  description
                                    "Channel wavelength computing input.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice grid-type
                            }  // choice technology
    
                            leaf direction {
                              type te-label-direction;
                              default "forward";
                              description
                                "Label direction.";
                            }
                          }  // container te-label
                        }  // container label-end
    
                        container label-step {
                          description
                            "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type int32;
                              default "1";
                              description
                                "Label range step.";
                            }
                            choice l0-grid-type {
                              description
                                "Grid type: DWDM, CWDM, etc.";
                              leaf wson-dwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type identityref {
                                  base dwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf wson-cwdm-channel-spacing {
                                when
                                  "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type identityref {
                                  base cwdm-ch-spc-type;
                                }
                                description
                                  "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice l0-grid-type
                          }  // choice technology
                        }  // container label-step
    
                        leaf range-bitmap {
                          type yang:hex-string;
                          description
                            "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                        }
    
                        leaf grid-type {
                          type identityref {
                            base l0-grid-type;
                          }
                          description
                            "Grid type";
                        }
    
                        leaf priority {
                          type uint8;
                          description
                            "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                          reference
                            "RFC 4203: OSPF Extensions in Support of Generalized
                            Multi-Protocol Label Switching (GMPLS)";
    
                        }
                      }  // list label-restriction
                    }  // container label-restrictions
    
                    leaf is-allowed {
                      type boolean;
                      description
                        "'true' - switching is allowed;
    'false' - switching is disallowed.";
                    }
    
                    container underlay {
                      if-feature te-topology-hierarchy;
                      description
                        "Attributes of the TE link underlay.";
                      reference
                        "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Traffic Engineering (TE)";
    
                      leaf enabled {
                        type boolean;
                        description
                          "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                      }
    
                      container primary-path {
                        description
                          "The service path on the underlay topology that
    supports this link.";
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // container primary-path
    
                      list 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.";
                        }
    
                        leaf network-ref {
                          type leafref {
                            path "/nw:networks/nw:network/nw:network-id";
                            require-instance
                              false;
                          }
                          description
                            "Used to reference a network -- for example, an underlay
    network.";
                        }
    
                        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.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-element
                      }  // list backup-path
    
                      leaf protection-type {
                        type identityref {
                          base te-types:lsp-protection-type;
                        }
                        description
                          "Underlay protection type desired for this link.";
                      }
    
                      container tunnel-termination-points {
                        description
                          "Underlay TTPs desired for this link.";
                        leaf source {
                          type binary;
                          description
                            "Source TTP identifier.";
                        }
    
                        leaf destination {
                          type binary;
                          description
                            "Destination TTP identifier.";
                        }
                      }  // container tunnel-termination-points
    
                      container tunnels {
                        description
                          "Underlay TE tunnels supporting this TE link.";
                        leaf sharing {
                          type boolean;
                          default "true";
                          description
                            "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                        }
    
                        list tunnel {
                          key "tunnel-name";
                          description
                            "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                          leaf tunnel-name {
                            type string;
                            description
                              "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                          }
    
                          leaf sharing {
                            type boolean;
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                          }
                        }  // list tunnel
                      }  // container tunnels
                    }  // container underlay
    
                    container path-constraints {
                      description
                        "TE named path constraints container.";
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
    
                      leaf link-protection {
                        type identityref {
                          base link-protection-type;
                        }
                        default
                          "te-types:link-protection-unprotected";
                        description
                          "Link protection type required for the links included
    in the computed path.";
                        reference
                          "RFC 4202: Routing Extensions in Support of
                          Generalized Multi-Protocol Label Switching (GMPLS)";
    
                      }
    
                      leaf setup-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested setup priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf hold-priority {
                        type uint8 {
                          range "0..7";
                        }
                        default "7";
                        description
                          "TE LSP requested hold priority.";
                        reference
                          "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                      }
    
                      leaf signaling-type {
                        type identityref {
                          base path-signaling-type;
                        }
                        default
                          "te-types:path-setup-rsvp";
                        description
                          "TE tunnel path signaling type.";
                      }
    
                      container path-metric-bounds {
                        description
                          "TE path metric bounds container.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of TE path metric bounds.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                          }
    
                          leaf upper-bound {
                            type uint64;
                            default "0";
                            description
                              "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                          }
                        }  // list path-metric-bound
                      }  // container path-metric-bounds
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      leaf disjointness {
                        type te-path-disjointness;
                        description
                          "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                      }
                    }  // container path-constraints
    
                    container optimizations {
                      description
                        "The objective function container that includes
    attributes to impose when computing a TE path.";
                      choice algorithm {
                        description
                          "Optimizations algorithm.";
                        case metric {
                          if-feature path-optimization-metric;
                          list optimization-metric {
                            key "metric-type";
                            description
                              "TE path metric type.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                            }
    
                            leaf weight {
                              type uint8;
                              default "1";
                              description
                                "TE path metric normalization weight.";
                            }
    
                            container explicit-route-exclude-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-excludes'";
                              description
                                "Container for the 'exclude route' object list.";
                              list route-object-exclude-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be excluded in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
    
                                  case srlg {
                                    description
                                      "An SRLG value to be included or excluded.";
                                    container srlg {
                                      description
                                        "SRLG container.";
                                      leaf srlg {
                                        type uint32;
                                        description
                                          "SRLG value.";
                                      }
                                    }  // container srlg
                                  }  // case srlg
                                }  // choice type
                              }  // list route-object-exclude-object
                            }  // container explicit-route-exclude-objects
    
                            container explicit-route-include-objects {
                              when
                                "../metric-type = 'te-types:path-metric-optimize-includes'";
                              description
                                "Container for the 'include route' object list.";
                              list route-object-include-object {
                                key "index";
                                ordered-by
                                  user;
                                description
                                  "List of Explicit Route Objects to be included in the
    path computation.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                }
    
                                choice type {
                                  description
                                    "The explicit route entry type.";
                                  container numbered-node-hop {
                                    description
                                      "Numbered node route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container numbered-node-hop
                                  container numbered-link-hop {
                                    description
                                      "Numbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container numbered-link-hop
                                  container unnumbered-link-hop {
                                    description
                                      "Unnumbered link explicit route hop.";
                                    reference
                                      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                      Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                       RFC 3477: Signalling Unnumbered Links in Resource
                                      ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      mandatory
                                        true;
                                      description
                                        "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      mandatory
                                        true;
                                      description
                                        "The identifier of a node in the TE topology.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
    
                                    leaf direction {
                                      type te-link-direction;
                                      default
                                        "outgoing";
                                      description
                                        "Link route object direction.";
                                    }
                                  }  // container unnumbered-link-hop
                                  container as-number-hop {
                                    description
                                      "AS explicit route hop.";
                                    leaf as-number {
                                      type inet:as-number;
                                      mandatory
                                        true;
                                      description
                                        "The Autonomous System (AS) number.";
                                    }
    
                                    leaf hop-type {
                                      type te-hop-type;
                                      default
                                        "strict";
                                      description
                                        "Strict or loose hop.";
                                    }
                                  }  // container as-number-hop
    
                                  case label {
                                    description
                                      "The label explicit route hop type.";
                                    container label-hop {
                                      description
                                        "Label hop type.";
                                      container te-label {
                                        description
                                          "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                        choice technology {
                                          default
                                            "generic";
                                          description
                                            "Data-plane technology type.";
                                          leaf generic {
                                            type rt-types:generalized-label;
                                            description
                                              "TE label specified in a generic format.";
                                          }
                                          choice grid-type {
                                            description
                                              "Label for DWDM or CWDM grid";
                                            choice single-or-super-channel {
                                              description
                                                "single or super channel";
                                              leaf dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the
    nominal central frequency.";
                                              }
                                              leaf-list subcarrier-dwdm-n {
                                                type l0-types:dwdm-n;
                                                description
                                                  "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                reference
                                                  "ITU-T Recommendation G.694.1: Spectral grids for
                                                  WDM applications: DWDM frequency grid";
    
                                              }
                                            }  // choice single-or-super-channel
                                            leaf cwdm-n {
                                              type l0-types:cwdm-n;
                                              description
                                                "The given value 'N' is used to determine the nominal
    central wavelength.";
                                              reference
                                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                (LSC) Label Switching Routers";
    
                                            }
                                          }  // choice grid-type
                                        }  // choice technology
    
                                        leaf direction {
                                          type te-label-direction;
                                          default
                                            "forward";
                                          description
                                            "Label direction.";
                                        }
                                      }  // container te-label
                                    }  // container label-hop
                                  }  // case label
                                }  // choice type
                              }  // list route-object-include-object
                            }  // container explicit-route-include-objects
                          }  // list optimization-metric
    
                          container tiebreakers {
                            description
                              "Container for the list of tiebreakers.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              description
                                "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                              leaf tiebreaker-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies an entry in the list of tiebreakers.";
                              }
                            }  // list tiebreaker
                          }  // container tiebreakers
                        }  // case metric
    
                        case objective-function {
                          if-feature path-optimization-objective-function;
                          container objective-function {
                            description
                              "The objective function container that includes
    attributes to impose when computing a TE path.";
                            leaf objective-function-type {
                              type identityref {
                                base objective-function-type;
                              }
                              default
                                "te-types:of-minimize-cost-path";
                              description
                                "Objective function entry.";
                            }
                          }  // container objective-function
                        }  // case objective-function
                      }  // choice algorithm
                    }  // container optimizations
    
                    container path-properties {
                      config false;
                      description
                        "The TE path properties.";
                      list path-metric {
                        key "metric-type";
                        description
                          "TE path metric type.";
                        leaf metric-type {
                          type identityref {
                            base path-metric-type;
                          }
                          description
                            "TE path metric type.";
                        }
    
                        leaf accumulative-value {
                          type uint64;
                          description
                            "TE path metric accumulative value.";
                        }
                      }  // list path-metric
    
                      container path-affinities-values {
                        description
                          "Path affinities represented as values.";
                        list path-affinities-value {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of value affinity
    constraints.";
                          }
    
                          leaf value {
                            type admin-groups;
                            default "";
                            description
                              "The affinity value.  The default is empty.";
                          }
                        }  // list path-affinities-value
                      }  // container path-affinities-values
    
                      container path-affinity-names {
                        description
                          "Path affinities represented as names.";
                        list path-affinity-name {
                          key "usage";
                          description
                            "List of named affinity constraints.";
                          leaf usage {
                            type identityref {
                              base resource-affinities-type;
                            }
                            description
                              "Identifies an entry in the list of named affinity
    constraints.";
                          }
    
                          list affinity-name {
                            key "name";
                            description
                              "List of named affinities.";
                            leaf name {
                              type string;
                              description
                                "Identifies a named affinity entry.";
                            }
                          }  // list affinity-name
                        }  // list path-affinity-name
                      }  // container path-affinity-names
    
                      container path-srlgs-lists {
                        description
                          "Path SRLG properties container.";
                        list path-srlgs-list {
                          key "usage";
                          description
                            "List of SRLG values to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list values {
                            type srlg;
                            description
                              "List of SRLG values.";
                          }
                        }  // list path-srlgs-list
                      }  // container path-srlgs-lists
    
                      container path-srlgs-names {
                        description
                          "Container for the list of named SRLGs.";
                        list path-srlgs-name {
                          key "usage";
                          description
                            "List of named SRLGs to be included or excluded.";
                          leaf usage {
                            type identityref {
                              base route-usage-type;
                            }
                            description
                              "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                          }
    
                          leaf-list names {
                            type string;
                            description
                              "List of named SRLGs.";
                          }
                        }  // list path-srlgs-name
                      }  // container path-srlgs-names
    
                      container path-route-objects {
                        description
                          "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                        list path-route-object {
                          key "index";
                          ordered-by user;
                          description
                            "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                          leaf index {
                            type uint32;
                            description
                              "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                mandatory true;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                    choice grid-type {
                                      description
                                        "Label for DWDM or CWDM grid";
                                      choice single-or-super-channel {
                                        description
                                          "single or super channel";
                                        leaf dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given value 'N' is used to determine the
    nominal central frequency.";
                                        }
                                        leaf-list subcarrier-dwdm-n {
                                          type l0-types:dwdm-n;
                                          description
                                            "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                          reference
                                            "ITU-T Recommendation G.694.1: Spectral grids for
                                            WDM applications: DWDM frequency grid";
    
                                        }
                                      }  // choice single-or-super-channel
                                      leaf cwdm-n {
                                        type l0-types:cwdm-n;
                                        description
                                          "The given value 'N' is used to determine the nominal
    central wavelength.";
                                        reference
                                          "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                          (LSC) Label Switching Routers";
    
                                      }
                                    }  // choice grid-type
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list path-route-object
                      }  // container path-route-objects
                    }  // container path-properties
    
                    list local-link-connectivity {
                      key "link-tp-ref";
                      description
                        "The termination capabilities between the TTP and the LTP.
    This capability information can be used to compute
    the tunnel path.
    The Interface Adjustment Capability Descriptors (IACDs)
    (defined in RFC 6001) on each LTP can be derived from
    this list.";
                      reference
                        "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
                        for Multi-Layer and Multi-Region Networks (MLN/MRN)";
    
                      leaf link-tp-ref {
                        type leafref {
                          path "../../../../../nt:termination-point/nt:tp-id";
                        }
                        description "LTP.";
                      }
    
                      container label-restrictions {
                        description
                          "The label restrictions container.";
                        list label-restriction {
                          key "index";
                          description
                            "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                          reference
                            "RFC 7579: General Network Element Constraint Encoding
                            for GMPLS-Controlled Networks";
    
                          leaf restriction {
                            type enumeration {
                              enum "inclusive" {
                                value 0;
                                description
                                  "The label or label range is inclusive.";
                              }
                              enum "exclusive" {
                                value 1;
                                description
                                  "The label or label range is exclusive.";
                              }
                            }
                            default "inclusive";
                            description
                              "Indicates whether the list item is inclusive or exclusive.";
                          }
    
                          leaf index {
                            type uint32;
                            description
                              "The index of the label restriction list entry.";
                          }
    
                          container label-start {
                            must
                              "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                              error-message
                                "'label-start' and 'label-end' must have the same direction.";
                            }
                            description
                              "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                            container te-label {
                              description
                                "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type rt-types:generalized-label;
                                  description
                                    "TE label specified in a generic format.";
                                }
                                choice grid-type {
                                  description
                                    "Label for DWDM or CWDM grid";
                                  leaf dwdm-n {
                                    when
                                      "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type l0-types:dwdm-n;
                                    description
                                      "The central frequency of DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf cwdm-n {
                                    when
                                      "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type l0-types:cwdm-n;
                                    description
                                      "Channel wavelength computing input.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice grid-type
                              }  // choice technology
    
                              leaf direction {
                                type te-label-direction;
                                default
                                  "forward";
                                description
                                  "Label direction.";
                              }
                            }  // container te-label
                          }  // container label-start
    
                          container label-end {
                            must
                              "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                              error-message
                                "'label-start' and 'label-end' must have the same direction.";
                            }
                            description
                              "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                            container te-label {
                              description
                                "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                              choice technology {
                                default
                                  "generic";
                                description
                                  "Data-plane technology type.";
                                leaf generic {
                                  type rt-types:generalized-label;
                                  description
                                    "TE label specified in a generic format.";
                                }
                                choice grid-type {
                                  description
                                    "Label for DWDM or CWDM grid";
                                  leaf dwdm-n {
                                    when
                                      "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                      description
                                        "Valid only when grid type is DWDM.";
                                    }
                                    type l0-types:dwdm-n;
                                    description
                                      "The central frequency of DWDM.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                  leaf cwdm-n {
                                    when
                                      "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                      description
                                        "Valid only when grid type is CWDM.";
                                    }
                                    type l0-types:cwdm-n;
                                    description
                                      "Channel wavelength computing input.";
                                    reference
                                      "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                      (LSC) Label Switching Routers";
    
                                  }
                                }  // choice grid-type
                              }  // choice technology
    
                              leaf direction {
                                type te-label-direction;
                                default
                                  "forward";
                                description
                                  "Label direction.";
                              }
                            }  // container te-label
                          }  // container label-end
    
                          container label-step {
                            description
                              "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                            choice technology {
                              default "generic";
                              description
                                "Data-plane technology type.";
                              leaf generic {
                                type int32;
                                default "1";
                                description
                                  "Label range step.";
                              }
                              choice l0-grid-type {
                                description
                                  "Grid type: DWDM, CWDM, etc.";
                                leaf wson-dwdm-channel-spacing {
                                  when
                                    "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                    description
                                      "Valid only when grid type is DWDM.";
                                  }
                                  type identityref {
                                    base dwdm-ch-spc-type;
                                  }
                                  description
                                    "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                                leaf wson-cwdm-channel-spacing {
                                  when
                                    "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                    description
                                      "Valid only when grid type is CWDM.";
                                  }
                                  type identityref {
                                    base cwdm-ch-spc-type;
                                  }
                                  description
                                    "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                                  reference
                                    "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                    (LSC) Label Switching Routers";
    
                                }
                              }  // choice l0-grid-type
                            }  // choice technology
                          }  // container label-step
    
                          leaf range-bitmap {
                            type yang:hex-string;
                            description
                              "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                          }
    
                          leaf grid-type {
                            type identityref {
                              base l0-grid-type;
                            }
                            description
                              "Grid type";
                          }
    
                          leaf priority {
                            type uint8;
                            description
                              "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                            reference
                              "RFC 4203: OSPF Extensions in Support of Generalized
                              Multi-Protocol Label Switching (GMPLS)";
    
                          }
                        }  // list label-restriction
                      }  // container label-restrictions
    
                      leaf is-allowed {
                        type boolean;
                        description
                          "'true' - switching is allowed;
    'false' - switching is disallowed.";
                      }
    
                      container underlay {
                        if-feature te-topology-hierarchy;
                        description
                          "Attributes of the TE link underlay.";
                        reference
                          "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                          Generalized Multi-Protocol Label Switching (GMPLS)
                          Traffic Engineering (TE)";
    
                        leaf enabled {
                          type boolean;
                          description
                            "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                        }
    
                        container primary-path {
                          description
                            "The service path on the underlay topology that
    supports this link.";
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // container primary-path
    
                        list 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.";
                          }
    
                          leaf network-ref {
                            type leafref {
                              path "/nw:networks/nw:network/nw:network-id";
                              require-instance
                                false;
                            }
                            description
                              "Used to reference a network -- for example, an underlay
    network.";
                          }
    
                          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.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-element
                        }  // list backup-path
    
                        leaf protection-type {
                          type identityref {
                            base te-types:lsp-protection-type;
                          }
                          description
                            "Underlay protection type desired for this link.";
                        }
    
                        container tunnel-termination-points {
                          description
                            "Underlay TTPs desired for this link.";
                          leaf source {
                            type binary;
                            description
                              "Source TTP identifier.";
                          }
    
                          leaf destination {
                            type binary;
                            description
                              "Destination TTP identifier.";
                          }
                        }  // container tunnel-termination-points
    
                        container tunnels {
                          description
                            "Underlay TE tunnels supporting this TE link.";
                          leaf sharing {
                            type boolean;
                            default "true";
                            description
                              "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                          }
    
                          list tunnel {
                            key "tunnel-name";
                            description
                              "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                            leaf tunnel-name {
                              type string;
                              description
                                "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                            }
    
                            leaf sharing {
                              type boolean;
                              description
                                "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                            }
                          }  // list tunnel
                        }  // container tunnels
                      }  // container underlay
    
                      container path-constraints {
                        description
                          "TE named path constraints container.";
                        container te-bandwidth {
                          description
                            "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type te-bandwidth;
                              description
                                "Bandwidth specified in a generic format.";
                            }
                          }  // choice technology
                        }  // container te-bandwidth
    
                        leaf link-protection {
                          type identityref {
                            base link-protection-type;
                          }
                          default
                            "te-types:link-protection-unprotected";
                          description
                            "Link protection type required for the links included
    in the computed path.";
                          reference
                            "RFC 4202: Routing Extensions in Support of
                            Generalized Multi-Protocol Label Switching (GMPLS)";
    
                        }
    
                        leaf setup-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested setup priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf hold-priority {
                          type uint8 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE LSP requested hold priority.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf signaling-type {
                          type identityref {
                            base path-signaling-type;
                          }
                          default
                            "te-types:path-setup-rsvp";
                          description
                            "TE tunnel path signaling type.";
                        }
    
                        container path-metric-bounds {
                          description
                            "TE path metric bounds container.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of TE path metric bounds.";
                            leaf metric-type {
                              type identityref {
                                base path-metric-type;
                              }
                              description
                                "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                            }
    
                            leaf upper-bound {
                              type uint64;
                              default "0";
                              description
                                "Upper bound on the end-to-end TE path metric.  A zero
    indicates an unbounded upper limit for the specific
    'metric-type'.";
                            }
                          }  // list path-metric-bound
                        }  // container path-metric-bounds
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        leaf disjointness {
                          type te-path-disjointness;
                          description
                            "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.  When configured for a
    secondary path, the disjointness level overrides the level
    configured for the primary path.";
                        }
                      }  // container path-constraints
    
                      container optimizations {
                        description
                          "The objective function container that includes
    attributes to impose when computing a TE path.";
                        choice algorithm {
                          description
                            "Optimizations algorithm.";
                          case metric {
                            if-feature path-optimization-metric;
                            list optimization-metric {
                              key "metric-type";
                              description
                                "TE path metric type.";
                              leaf metric-type {
                                type identityref {
                                  base path-metric-type;
                                }
                                description
                                  "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                              }
    
                              leaf weight {
                                type uint8;
                                default "1";
                                description
                                  "TE path metric normalization weight.";
                              }
    
                              container explicit-route-exclude-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-excludes'";
                                description
                                  "Container for the 'exclude route' object list.";
                                list route-object-exclude-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be excluded in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
    
                                    case srlg {
                                      description
                                        "An SRLG value to be included or excluded.";
                                      container srlg {
                                        description
                                          "SRLG container.";
                                        leaf srlg {
                                          type uint32;
                                          description
                                            "SRLG value.";
                                        }
                                      }  // container srlg
                                    }  // case srlg
                                  }  // choice type
                                }  // list route-object-exclude-object
                              }  // container explicit-route-exclude-objects
    
                              container explicit-route-include-objects {
                                when
                                  "../metric-type = 'te-types:path-metric-optimize-includes'";
                                description
                                  "Container for the 'include route' object list.";
                                list route-object-include-object {
                                  key "index";
                                  ordered-by
                                    user;
                                  description
                                    "List of Explicit Route Objects to be included in the
    path computation.";
                                  leaf index {
                                    type uint32;
                                    description
                                      "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key values.";
                                  }
    
                                  choice type {
                                    description
                                      "The explicit route entry type.";
                                    container numbered-node-hop {
                                      description
                                        "Numbered node route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container numbered-node-hop
                                    container numbered-link-hop {
                                      description
                                        "Numbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container numbered-link-hop
                                    container unnumbered-link-hop {
                                      description
                                        "Unnumbered link explicit route hop.";
                                      reference
                                        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                        Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                         RFC 3477: Signalling Unnumbered Links in Resource
                                        ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        mandatory
                                          true;
                                        description
                                          "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        mandatory
                                          true;
                                        description
                                          "The identifier of a node in the TE topology.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
    
                                      leaf direction {
                                        type te-link-direction;
                                        default
                                          "outgoing";
                                        description
                                          "Link route object direction.";
                                      }
                                    }  // container unnumbered-link-hop
                                    container as-number-hop {
                                      description
                                        "AS explicit route hop.";
                                      leaf as-number {
                                        type inet:as-number;
                                        mandatory
                                          true;
                                        description
                                          "The Autonomous System (AS) number.";
                                      }
    
                                      leaf hop-type {
                                        type te-hop-type;
                                        default
                                          "strict";
                                        description
                                          "Strict or loose hop.";
                                      }
                                    }  // container as-number-hop
    
                                    case label {
                                      description
                                        "The label explicit route hop type.";
                                      container label-hop {
                                        description
                                          "Label hop type.";
                                        container te-label {
                                          description
                                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                          choice technology {
                                            default
                                              "generic";
                                            description
                                              "Data-plane technology type.";
                                            leaf generic {
                                              type rt-types:generalized-label;
                                              description
                                                "TE label specified in a generic format.";
                                            }
                                            choice grid-type {
                                              description
                                                "Label for DWDM or CWDM grid";
                                              choice single-or-super-channel {
                                                description
                                                  "single or super channel";
                                                leaf dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given value 'N' is used to determine the
    nominal central frequency.";
                                                }
                                                leaf-list subcarrier-dwdm-n {
                                                  type l0-types:dwdm-n;
                                                  description
                                                    "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                                  reference
                                                    "ITU-T Recommendation G.694.1: Spectral grids for
                                                    WDM applications: DWDM frequency grid";
    
                                                }
                                              }  // choice single-or-super-channel
                                              leaf cwdm-n {
                                                type l0-types:cwdm-n;
                                                description
                                                  "The given value 'N' is used to determine the nominal
    central wavelength.";
                                                reference
                                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                                  (LSC) Label Switching Routers";
    
                                              }
                                            }  // choice grid-type
                                          }  // choice technology
    
                                          leaf direction {
                                            type te-label-direction;
                                            default
                                              "forward";
                                            description
                                              "Label direction.";
                                          }
                                        }  // container te-label
                                      }  // container label-hop
                                    }  // case label
                                  }  // choice type
                                }  // list route-object-include-object
                              }  // container explicit-route-include-objects
                            }  // list optimization-metric
    
                            container tiebreakers {
                              description
                                "Container for the list of tiebreakers.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                description
                                  "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                                leaf tiebreaker-type {
                                  type identityref {
                                    base path-metric-type;
                                  }
                                  description
                                    "Identifies an entry in the list of tiebreakers.";
                                }
                              }  // list tiebreaker
                            }  // container tiebreakers
                          }  // case metric
    
                          case objective-function {
                            if-feature path-optimization-objective-function;
                            container objective-function {
                              description
                                "The objective function container that includes
    attributes to impose when computing a TE path.";
                              leaf objective-function-type {
                                type identityref {
                                  base objective-function-type;
                                }
                                default
                                  "te-types:of-minimize-cost-path";
                                description
                                  "Objective function entry.";
                              }
                            }  // container objective-function
                          }  // case objective-function
                        }  // choice algorithm
                      }  // container optimizations
    
                      container path-properties {
                        config false;
                        description
                          "The TE path properties.";
                        list path-metric {
                          key "metric-type";
                          description
                            "TE path metric type.";
                          leaf metric-type {
                            type identityref {
                              base path-metric-type;
                            }
                            description
                              "TE path metric type.";
                          }
    
                          leaf accumulative-value {
                            type uint64;
                            description
                              "TE path metric accumulative value.";
                          }
                        }  // list path-metric
    
                        container path-affinities-values {
                          description
                            "Path affinities represented as values.";
                          list path-affinities-value {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of value affinity
    constraints.";
                            }
    
                            leaf value {
                              type admin-groups;
                              default "";
                              description
                                "The affinity value.  The default is empty.";
                            }
                          }  // list path-affinities-value
                        }  // container path-affinities-values
    
                        container path-affinity-names {
                          description
                            "Path affinities represented as names.";
                          list path-affinity-name {
                            key "usage";
                            description
                              "List of named affinity constraints.";
                            leaf usage {
                              type identityref {
                                base resource-affinities-type;
                              }
                              description
                                "Identifies an entry in the list of named affinity
    constraints.";
                            }
    
                            list affinity-name {
                              key "name";
                              description
                                "List of named affinities.";
                              leaf name {
                                type string;
                                description
                                  "Identifies a named affinity entry.";
                              }
                            }  // list affinity-name
                          }  // list path-affinity-name
                        }  // container path-affinity-names
    
                        container path-srlgs-lists {
                          description
                            "Path SRLG properties container.";
                          list path-srlgs-list {
                            key "usage";
                            description
                              "List of SRLG values to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list values {
                              type srlg;
                              description
                                "List of SRLG values.";
                            }
                          }  // list path-srlgs-list
                        }  // container path-srlgs-lists
    
                        container path-srlgs-names {
                          description
                            "Container for the list of named SRLGs.";
                          list path-srlgs-name {
                            key "usage";
                            description
                              "List of named SRLGs to be included or excluded.";
                            leaf usage {
                              type identityref {
                                base route-usage-type;
                              }
                              description
                                "Identifies an entry in a list of named SRLGs to either
    include or exclude.";
                            }
    
                            leaf-list names {
                              type string;
                              description
                                "List of named SRLGs.";
                            }
                          }  // list path-srlgs-name
                        }  // container path-srlgs-names
    
                        container path-route-objects {
                          description
                            "Container for the list of route objects either returned by
    the computation engine or actually used by an LSP.";
                          list path-route-object {
                            key "index";
                            ordered-by user;
                            description
                              "List of route objects either returned by the computation
    engine or actually used by an LSP.";
                            leaf index {
                              type uint32;
                              description
                                "Route object entry index.  The index is used to
    identify an entry in the list.  The order of entries
    is defined by the user without relying on key
    values.";
                            }
    
                            choice type {
                              description
                                "The explicit route entry type.";
                              container numbered-node-hop {
                                description
                                  "Numbered node route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container numbered-node-hop
                              container numbered-link-hop {
                                description
                                  "Numbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE Link Termination Point (LTP) identifier.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container numbered-link-hop
                              container unnumbered-link-hop {
                                description
                                  "Unnumbered link explicit route hop.";
                                reference
                                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                   RFC 3477: Signalling Unnumbered Links in Resource
                                  ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  mandatory
                                    true;
                                  description
                                    "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  mandatory
                                    true;
                                  description
                                    "The identifier of a node in the TE topology.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
    
                                leaf direction {
                                  type te-link-direction;
                                  default
                                    "outgoing";
                                  description
                                    "Link route object direction.";
                                }
                              }  // container unnumbered-link-hop
                              container as-number-hop {
                                description
                                  "AS explicit route hop.";
                                leaf as-number {
                                  type inet:as-number;
                                  mandatory
                                    true;
                                  description
                                    "The Autonomous System (AS) number.";
                                }
    
                                leaf hop-type {
                                  type te-hop-type;
                                  default
                                    "strict";
                                  description
                                    "Strict or loose hop.";
                                }
                              }  // container as-number-hop
    
                              case label {
                                description
                                  "The label explicit route hop type.";
                                container label-hop {
                                  description
                                    "Label hop type.";
                                  container te-label {
                                    description
                                      "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                    choice technology {
                                      default
                                        "generic";
                                      description
                                        "Data-plane technology type.";
                                      leaf generic {
                                        type rt-types:generalized-label;
                                        description
                                          "TE label specified in a generic format.";
                                      }
                                      choice grid-type {
                                        description
                                          "Label for DWDM or CWDM grid";
                                        choice single-or-super-channel {
                                          description
                                            "single or super channel";
                                          leaf dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given value 'N' is used to determine the
    nominal central frequency.";
                                          }
                                          leaf-list subcarrier-dwdm-n {
                                            type l0-types:dwdm-n;
                                            description
                                              "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                            reference
                                              "ITU-T Recommendation G.694.1: Spectral grids for
                                              WDM applications: DWDM frequency grid";
    
                                          }
                                        }  // choice single-or-super-channel
                                        leaf cwdm-n {
                                          type l0-types:cwdm-n;
                                          description
                                            "The given value 'N' is used to determine the nominal
    central wavelength.";
                                          reference
                                            "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                            (LSC) Label Switching Routers";
    
                                        }
                                      }  // choice grid-type
                                    }  // choice technology
    
                                    leaf direction {
                                      type te-label-direction;
                                      default
                                        "forward";
                                      description
                                        "Label direction.";
                                    }
                                  }  // container te-label
                                }  // container label-hop
                              }  // case label
                            }  // choice type
                          }  // list path-route-object
                        }  // container path-route-objects
                      }  // container path-properties
                    }  // list local-link-connectivity
                  }  // container local-link-connectivities
    
                  leaf oper-status {
                    type te-types:te-oper-status;
                    config false;
                    description
                      "The current operational state of the TTP.";
                  }
    
                  container geolocation {
                    config false;
                    description
                      "Contains a GPS location.";
                    leaf altitude {
                      type int64;
                      units "millimeters";
                      description
                        "Distance above sea level.";
                    }
    
                    leaf latitude {
                      type geographic-coordinate-degree {
                        fraction-digits 0;
                        range "-90..90";
                      }
                      description
                        "Relative position north or south on the Earth's surface.";
                    }
    
                    leaf longitude {
                      type geographic-coordinate-degree {
                        fraction-digits 0;
                        range "-180..180";
                      }
                      description
                        "Angular distance east or west on the Earth's surface.";
                    }
                  }  // container geolocation
    
                  container statistics {
                    config false;
                    description
                      "Statistics data.";
                    leaf discontinuity-time {
                      type yang:date-and-time;
                      description
                        "The time of the most recent occasion at which any one or
    more of this interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the last re-initialization of the local management
    subsystem, then this node contains the time the local
    management subsystem re-initialized itself.";
                    }
    
                    container tunnel-termination-point {
                      description
                        "Contains statistics attributes at the TE TTP level.";
                      leaf disables {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was disabled.";
                      }
    
                      leaf enables {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was enabled.";
                      }
    
                      leaf maintenance-clears {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was taken out of maintenance.";
                      }
    
                      leaf maintenance-sets {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was put in maintenance.";
                      }
    
                      leaf modifies {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was modified.";
                      }
    
                      leaf downs {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was set to an operational state
    of 'down'.";
                      }
    
                      leaf ups {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was set to an operational state
    of 'up'.";
                      }
    
                      leaf in-service-clears {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was taken out of service
    (TE tunnel was released).";
                      }
    
                      leaf in-service-sets {
                        type yang:counter32;
                        description
                          "Number of times that a TTP was put in service by a TE
    tunnel (TE tunnel was set up).";
                      }
                    }  // container tunnel-termination-point
    
                    container local-link-connectivity {
                      description
                        "Contains statistics attributes at the TE LLCL (Local Link
    Connectivity List) level.";
                      leaf creates {
                        type yang:counter32;
                        description
                          "Number of times that an LLCL entry was created.";
                        reference
                          "RFC 6241: Network Configuration Protocol (NETCONF),
                          	  Section 7.2, 'create' operation";
    
                      }
    
                      leaf deletes {
                        type yang:counter32;
                        description
                          "Number of times that an LLCL entry was deleted.";
                        reference
                          "RFC 6241: Network Configuration Protocol (NETCONF),
                          	  Section 7.2, 'delete' operation";
    
                      }
    
                      leaf disables {
                        type yang:counter32;
                        description
                          "Number of times that an LLCL entry was disabled.";
                      }
    
                      leaf enables {
                        type yang:counter32;
                        description
                          "Number of times that an LLCL entry was enabled.";
                      }
    
                      leaf modifies {
                        type yang:counter32;
                        description
                          "Number of times that an LLCL entry was modified.";
                      }
                    }  // container local-link-connectivity
                  }  // container statistics
    
                  list supporting-tunnel-termination-point {
                    key "node-ref tunnel-tp-ref";
                    description
                      "Identifies the TTPs on which this TTP depends.";
                    leaf node-ref {
                      type inet:uri;
                      description
                        "This leaf identifies the node in which the supporting
    TTP is present.
    This node is either the supporting node or a node in
    an underlay topology.";
                    }
    
                    leaf tunnel-tp-ref {
                      type binary;
                      description
                        "Reference to a TTP that is in either the supporting node
    or a node in an underlay topology.";
                    }
                  }  // list supporting-tunnel-termination-point
                }  // list tunnel-termination-point
              }  // container te
            }  // list node
    
            list link {
              key "link-id";
              description
                "A network link connects a local (source) node and
    a remote (destination) node via a set of the respective
    node's termination points.  It is possible to have several
    links between the same source and destination nodes.
    Likewise, a link could potentially be re-homed between
    termination points.  Therefore, in order to ensure that we
    would always know to distinguish between links, every link
    is identified by a dedicated link identifier.  Note that a
    link models a point-to-point link, not a multipoint link.";
              leaf link-id {
                type link-id;
                description
                  "The identifier of a link in the topology.
    A link is specific to a topology to which it belongs.";
              }
    
              container source {
                description
                  "This container holds the logical source of a particular
    link.";
                leaf source-node {
                  type leafref {
                    path "../../../nw:node/nw:node-id";
                    require-instance false;
                  }
                  description
                    "Source node identifier.  Must be in the same topology.";
                }
    
                leaf source-tp {
                  type leafref {
                    path "../../../nw:node[nw:node-id=current()/../source-node]/termination-point/tp-id";
                    require-instance false;
                  }
                  description
                    "This termination point is located within the source node
    and terminates the link.";
                }
              }  // container source
    
              container destination {
                description
                  "This container holds the logical destination of a
    particular link.";
                leaf dest-node {
                  type leafref {
                    path "../../../nw:node/nw:node-id";
                    require-instance false;
                  }
                  description
                    "Destination node identifier.  Must be in the same
    network.";
                }
    
                leaf dest-tp {
                  type leafref {
                    path "../../../nw:node[nw:node-id=current()/../dest-node]/termination-point/tp-id";
                    require-instance false;
                  }
                  description
                    "This termination point is located within the
    destination node and terminates the link.";
                }
              }  // container destination
    
              list supporting-link {
                key "network-ref link-ref";
                description
                  "Identifies the link or links on which this link depends.";
                leaf network-ref {
                  type leafref {
                    path "../../../nw:supporting-network/nw:network-ref";
                    require-instance false;
                  }
                  description
                    "This leaf identifies in which underlay topology
    the supporting link is present.";
                }
    
                leaf link-ref {
                  type leafref {
                    path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/link/link-id";
                    require-instance false;
                  }
                  description
                    "This leaf identifies a link that is a part
    of this link's underlay.  Reference loops in which
    a link identifies itself as its underlay, either
    directly or transitively, are not allowed.";
                }
              }  // list supporting-link
    
              container l2-link-attributes {
                description
                  "Contains L2 link attributes.";
                leaf name {
                  type string;
                  description "Link name.";
                }
    
                leaf-list flags {
                  type link-flag-type;
                  description
                    "Link flags.  It can be used to indicate
    link flag attributes.";
                }
    
                leaf rate {
                  type uint64;
                  units "Kbps";
                  description
                    "Link rate.  It specifies bandwidth requirements
    associated with the specific link.  The link
    contains a source and a destination.";
                }
    
                leaf delay {
                  type uint32;
                  units "microseconds";
                  description
                    "Unidirectional link delay in
    microseconds.";
                }
    
                leaf auto-nego {
                  type boolean;
                  default "true";
                  description
                    "Set to true if auto-negotiation is supported.
    Set to false if auto-negotiation is not supported.";
                }
    
                leaf duplex {
                  type duplex-mode;
                  description
                    "Exposes the duplex mode, full-duplex or half-duplex.";
                }
              }  // container l2-link-attributes
    
              container l2-link-attributes {
                description
                  "Contains L2 link attributes.";
                leaf name {
                  type string;
                  description "Link name.";
                }
    
                leaf-list flags {
                  type link-flag-type;
                  description
                    "Link flags.  It can be used to indicate
    link flag attributes.";
                }
    
                leaf rate {
                  type uint64;
                  units "Kbps";
                  description
                    "Link rate.  It specifies bandwidth requirements
    associated with the specific link.  The link
    contains a source and a destination.";
                }
    
                leaf delay {
                  type uint32;
                  units "microseconds";
                  description
                    "Unidirectional link delay in
    microseconds.";
                }
    
                leaf auto-nego {
                  type boolean;
                  default "true";
                  description
                    "Set to true if auto-negotiation is supported.
    Set to false if auto-negotiation is not supported.";
                }
    
                leaf duplex {
                  type duplex-mode;
                  description
                    "Exposes the duplex mode, full-duplex or half-duplex.";
                }
              }  // container l2-link-attributes
    
              container l3-link-attributes {
                description
                  "Contains link attributes";
                leaf name {
                  type string;
                  description "Link Name";
                }
    
                leaf-list flag {
                  type link-flag-type;
                  description "Link flags";
                }
    
                leaf metric1 {
                  type uint64;
                  description "Link Metric 1";
                }
    
                leaf metric2 {
                  type uint64;
                  description "Link Metric 2";
                }
              }  // container l3-link-attributes
    
              container te {
                must
                  "count(../nt:supporting-link)<=1" {
                  description
                    "For a link in a TE topology, there cannot be more
    than one supporting link.  If one or more link paths are
    abstracted, the underlay is used.";
                }
                presence "TE support";
                description
                  "Indicates TE support.";
                choice bundle-stack-level {
                  description
                    "The TE link can be partitioned into bundled links or
    component links.";
                  container bundled-links {
                    description
                      "A set of bundled links.";
                    reference
                      "RFC 4201: Link Bundling in MPLS Traffic
                      Engineering (TE)";
    
                    list bundled-link {
                      key "sequence";
                      description
                        "Specifies a bundled interface that is
    further partitioned.";
                      leaf sequence {
                        type uint32;
                        description
                          "Identifies the sequence in the bundle.";
                      }
    
                      leaf src-tp-ref {
                        type leafref {
                          path "../../../../../nw:node[nw:node-id = current()/../../../../nt:source/nt:source-node]/nt:termination-point/nt:tp-id";
                          require-instance
                            true;
                        }
                        description
                          "Reference to another TE termination point on the
    same source node.";
                      }
    
                      leaf des-tp-ref {
                        type leafref {
                          path "../../../../../nw:node[nw:node-id = current()/../../../../nt:destination/nt:dest-node]/nt:termination-point/nt:tp-id";
                          require-instance
                            true;
                        }
                        description
                          "Reference to another TE termination point on the
    same destination node.";
                      }
                    }  // list bundled-link
                  }  // container bundled-links
                  container component-links {
                    description
                      "A set of component links.";
                    list component-link {
                      key "sequence";
                      description
                        "Specifies a component interface that is
    sufficient to unambiguously identify the
    appropriate resources.";
                      leaf sequence {
                        type uint32;
                        description
                          "Identifies the sequence in the bundle.";
                      }
    
                      leaf src-interface-ref {
                        type string;
                        description
                          "Reference to a component link interface on the
    source node.";
                      }
    
                      leaf des-interface-ref {
                        type string;
                        description
                          "Reference to a component link interface on the
    destination node.";
                      }
                    }  // list component-link
                  }  // container component-links
                }  // choice bundle-stack-level
    
                leaf-list te-link-template {
                  if-feature template;
                  type leafref {
                    path "../../../../te/templates/link-template/name";
                  }
                  description
                    "The reference to a TE link template.";
                }
    
                container te-link-attributes {
                  description
                    "Link attributes in a TE topology.";
                  leaf access-type {
                    type te-types:te-link-access-type;
                    description
                      "Link access type, which can be point-to-point or
    multi-access.";
                  }
    
                  container external-domain {
                    description
                      "For an inter-domain link, specifies the attributes of
    the remote end of the link, to facilitate the signaling at
    the local end.";
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
    
                    leaf remote-te-node-id {
                      type te-types:te-node-id;
                      description
                        "Remote TE node identifier, used together with
    'remote-te-link-tp-id' to identify the remote Link
    Termination Point (LTP) in a different domain.";
                    }
    
                    leaf remote-te-link-tp-id {
                      type te-types:te-tp-id;
                      description
                        "Remote TE LTP identifier, used together with
    'remote-te-node-id' to identify the remote LTP in a
    different domain.";
                    }
                  }  // container external-domain
    
                  leaf is-abstract {
                    type empty;
                    description
                      "Present if the link is abstract.";
                  }
    
                  leaf name {
                    type string;
                    description "Link name.";
                  }
    
                  container underlay {
                    if-feature te-topology-hierarchy;
                    description
                      "Attributes of the TE link underlay.";
                    reference
                      "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                      Generalized Multi-Protocol Label Switching (GMPLS)
                      Traffic Engineering (TE)";
    
                    leaf enabled {
                      type boolean;
                      description
                        "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                    }
    
                    container primary-path {
                      description
                        "The service path on the underlay topology that
    supports this link.";
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
    
                      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.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    choice single-or-super-channel {
                                      description
                                        "single or super channel";
                                      leaf dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given value 'N' is used to determine the
    nominal central frequency.";
                                      }
                                      leaf-list subcarrier-dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                        reference
                                          "ITU-T Recommendation G.694.1: Spectral grids for
                                          WDM applications: DWDM frequency grid";
    
                                      }
                                    }  // choice single-or-super-channel
                                    leaf cwdm-n {
                                      type l0-types:cwdm-n;
                                      description
                                        "The given value 'N' is used to determine the nominal
    central wavelength.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
                        }  // choice type
                      }  // list path-element
                    }  // container primary-path
    
                    list 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.";
                      }
    
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
    
                      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.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    choice single-or-super-channel {
                                      description
                                        "single or super channel";
                                      leaf dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given value 'N' is used to determine the
    nominal central frequency.";
                                      }
                                      leaf-list subcarrier-dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                        reference
                                          "ITU-T Recommendation G.694.1: Spectral grids for
                                          WDM applications: DWDM frequency grid";
    
                                      }
                                    }  // choice single-or-super-channel
                                    leaf cwdm-n {
                                      type l0-types:cwdm-n;
                                      description
                                        "The given value 'N' is used to determine the nominal
    central wavelength.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
                        }  // choice type
                      }  // list path-element
                    }  // list backup-path
    
                    leaf protection-type {
                      type identityref {
                        base te-types:lsp-protection-type;
                      }
                      description
                        "Underlay protection type desired for this link.";
                    }
    
                    container tunnel-termination-points {
                      description
                        "Underlay TTPs desired for this link.";
                      leaf source {
                        type binary;
                        description
                          "Source TTP identifier.";
                      }
    
                      leaf destination {
                        type binary;
                        description
                          "Destination TTP identifier.";
                      }
                    }  // container tunnel-termination-points
    
                    container tunnels {
                      description
                        "Underlay TE tunnels supporting this TE link.";
                      leaf sharing {
                        type boolean;
                        default "true";
                        description
                          "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                      }
    
                      list tunnel {
                        key "tunnel-name";
                        description
                          "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                        leaf tunnel-name {
                          type string;
                          description
                            "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf sharing {
                          type boolean;
                          description
                            "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                        }
                      }  // list tunnel
                    }  // container tunnels
                  }  // container underlay
    
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the link.";
                  }
    
                  leaf link-index {
                    type uint64;
                    description
                      "The link identifier.  If OSPF is used, this object
    represents an ospfLsdbID.  If IS-IS is used, this object
    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
                      "Administrative group or color of the link.
    This attribute covers both administrative groups (defined
    in RFCs 3630 and 5305) and Extended Administrative Groups
    (defined in RFC 7308).";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering
                       RFC 7308: Extended Administrative Groups in MPLS Traffic
                      Engineering (MPLS-TE)";
    
                  }
    
                  list interface-switching-capability {
                    key "switching-capability encoding";
                    description
                      "List of ISCDs for this link.";
                    reference
                      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
                      Signaling Functional Description
                       RFC 4203: OSPF Extensions in Support of Generalized
                      Multi-Protocol Label Switching (GMPLS)";
    
                    leaf switching-capability {
                      type identityref {
                        base te-types:switching-capabilities;
                      }
                      description
                        "Switching capability for this interface.";
                    }
    
                    leaf encoding {
                      type identityref {
                        base te-types:lsp-encoding-types;
                      }
                      description
                        "Encoding supported by this interface.";
                    }
    
                    list max-lsp-bandwidth {
                      key "priority";
                      max-elements 8;
                      description
                        "Maximum Label Switched Path (LSP) bandwidth at
    priorities 0-7.";
                      leaf priority {
                        type uint8 {
                          range "0..7";
                        }
                        description "Priority.";
                      }
    
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
                    }  // list max-lsp-bandwidth
                  }  // list interface-switching-capability
    
                  container label-restrictions {
                    description
                      "The label restrictions container.";
                    list label-restriction {
                      key "index";
                      description
                        "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                      reference
                        "RFC 7579: General Network Element Constraint Encoding
                        for GMPLS-Controlled Networks";
    
                      leaf restriction {
                        type enumeration {
                          enum "inclusive" {
                            value 0;
                            description
                              "The label or label range is inclusive.";
                          }
                          enum "exclusive" {
                            value 1;
                            description
                              "The label or label range is exclusive.";
                          }
                        }
                        default "inclusive";
                        description
                          "Indicates whether the list item is inclusive or exclusive.";
                      }
    
                      leaf index {
                        type uint32;
                        description
                          "The index of the label restriction list entry.";
                      }
    
                      container label-start {
                        must
                          "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-start
    
                      container label-end {
                        must
                          "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-end
    
                      container label-step {
                        description
                          "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type int32;
                            default "1";
                            description
                              "Label range step.";
                          }
                          choice l0-grid-type {
                            description
                              "Grid type: DWDM, CWDM, etc.";
                            leaf wson-dwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                description
                                  "Valid only when grid type is DWDM.";
                              }
                              type identityref {
                                base dwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                            leaf wson-cwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                description
                                  "Valid only when grid type is CWDM.";
                              }
                              type identityref {
                                base cwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                          }  // choice l0-grid-type
                        }  // choice technology
                      }  // container label-step
    
                      leaf range-bitmap {
                        type yang:hex-string;
                        description
                          "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                      }
    
                      leaf grid-type {
                        type identityref {
                          base l0-grid-type;
                        }
                        description "Grid type";
                      }
    
                      leaf priority {
                        type uint8;
                        description
                          "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                        reference
                          "RFC 4203: OSPF Extensions in Support of Generalized
                          Multi-Protocol Label Switching (GMPLS)";
    
                      }
                    }  // list label-restriction
                  }  // container label-restrictions
    
                  leaf link-protection-type {
                    type identityref {
                      base te-types:link-protection-type;
                    }
                    description
                      "Link Protection Type desired for this link.";
                    reference
                      "RFC 4202: Routing Extensions in Support of
                      Generalized Multi-Protocol Label Switching (GMPLS)";
    
                  }
    
                  container max-link-bandwidth {
                    description
                      "Maximum bandwidth that can be seen on this link in this
    direction.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-link-bandwidth
    
                  container max-resv-link-bandwidth {
                    description
                      "Maximum amount of bandwidth that can be reserved in this
    direction in this link.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-resv-link-bandwidth
    
                  list unreserved-bandwidth {
                    key "priority";
                    max-elements 8;
                    description
                      "Unreserved bandwidth for priority levels 0-7.  Units are in
    bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    leaf priority {
                      type uint8 {
                        range "0..7";
                      }
                      description "Priority.";
                    }
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // list unreserved-bandwidth
    
                  leaf te-default-metric {
                    type uint32;
                    description
                      "Traffic Engineering metric.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                  }
    
                  leaf te-delay-metric {
                    type uint32;
                    description
                      "Traffic Engineering delay metric.";
                    reference
                      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
    
                  }
    
                  leaf te-igp-metric {
                    type uint32;
                    description
                      "IGP metric used for Traffic Engineering.";
                    reference
                      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
                      second MPLS Traffic Engineering (TE) Metric";
    
                  }
    
                  container te-srlgs {
                    description
                      "Contains a list of SRLGs.";
                    leaf-list value {
                      type te-types:srlg;
                      description "SRLG value.";
                      reference
                        "RFC 4202: Routing Extensions in Support of
                        Generalized Multi-Protocol Label Switching (GMPLS)";
    
                    }
                  }  // container te-srlgs
    
                  container te-nsrlgs {
                    if-feature nsrlg;
                    description
                      "Contains a list of NSRLGs (Non-Shared Risk Link Groups).
    When an abstract TE link is configured, this list specifies
    the request that underlay TE paths need to be mutually
    disjoint with other TE links in the same groups.";
                    leaf-list id {
                      type uint32;
                      description
                        "NSRLG ID, uniquely configured within a topology.";
                      reference
                        "RFC 4872: RSVP-TE Extensions in Support of End-to-End
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Recovery";
    
                    }
                  }  // container te-nsrlgs
                }  // container te-link-attributes
    
                leaf oper-status {
                  type te-types:te-oper-status;
                  config false;
                  description
                    "The current operational state of the link.";
                }
    
                leaf is-transitional {
                  type empty;
                  config false;
                  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
                    "RFC 5212: Requirements for GMPLS-Based Multi-Region and
                    Multi-Layer Networks (MRN/MLN)
                     RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
                    for Multi-Layer and Multi-Region Networks (MLN/MRN)";
    
                }
    
                leaf information-source {
                  type te-info-source;
                  config false;
                  description
                    "Indicates the type of information source.";
                }
    
                leaf information-source-instance {
                  type string;
                  config false;
                  description
                    "The name indicating the instance of the information
    source.";
                }
    
                container information-source-state {
                  config false;
                  description
                    "Contains state attributes related to the information
    source.";
                  leaf credibility-preference {
                    type uint16;
                    description
                      "The preference value for calculating the Traffic
    Engineering database credibility value used for
    tie-break selection between different information-source
    values.  A higher value is preferable.";
                  }
    
                  leaf logical-network-element {
                    type string;
                    description
                      "When applicable, this is the name of a logical network
    element from which the information is learned.";
                  }
    
                  leaf network-instance {
                    type string;
                    description
                      "When applicable, this is the name of a network instance
    from which the information is learned.";
                  }
    
                  container topology {
                    description
                      "When the information is processed by the system,
    the attributes in this container indicate which topology
    is used to generate the result information.";
                    leaf link-ref {
                      type leafref {
                        path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nt:link/nt:link-id";
                        require-instance false;
                      }
                      description
                        "A type for an absolute reference to a link instance.
    (This type should not be used for relative references.
    In such a case, a relative path should be used instead.)";
                    }
    
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
                  }  // container topology
                }  // container information-source-state
    
                list information-source-entry {
                  key "information-source information-source-instance";
                  config false;
                  description
                    "A list of information sources learned, including the source
    that is used.";
                  leaf information-source {
                    type te-info-source;
                    config false;
                    description
                      "Indicates the type of information source.";
                  }
    
                  leaf information-source-instance {
                    type string;
                    config false;
                    description
                      "The name indicating the instance of the information
    source.";
                  }
    
                  container information-source-state {
                    config false;
                    description
                      "Contains state attributes related to the information
    source.";
                    leaf credibility-preference {
                      type uint16;
                      description
                        "The preference value for calculating the Traffic
    Engineering database credibility value used for
    tie-break selection between different information-source
    values.  A higher value is preferable.";
                    }
    
                    leaf logical-network-element {
                      type string;
                      description
                        "When applicable, this is the name of a logical network
    element from which the information is learned.";
                    }
    
                    leaf network-instance {
                      type string;
                      description
                        "When applicable, this is the name of a network instance
    from which the information is learned.";
                    }
    
                    container topology {
                      description
                        "When the information is processed by the system,
    the attributes in this container indicate which topology
    is used to generate the result information.";
                      leaf link-ref {
                        type leafref {
                          path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nt:link/nt:link-id";
                          require-instance
                            false;
                        }
                        description
                          "A type for an absolute reference to a link instance.
    (This type should not be used for relative references.
    In such a case, a relative path should be used instead.)";
                      }
    
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
                    }  // container topology
                  }  // container information-source-state
    
                  leaf link-index {
                    type uint64;
                    description
                      "The link identifier.  If OSPF is used, this object
    represents an ospfLsdbID.  If IS-IS is used, this object
    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
                      "Administrative group or color of the link.
    This attribute covers both administrative groups (defined
    in RFCs 3630 and 5305) and Extended Administrative Groups
    (defined in RFC 7308).";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering
                       RFC 7308: Extended Administrative Groups in MPLS Traffic
                      Engineering (MPLS-TE)";
    
                  }
    
                  list interface-switching-capability {
                    key "switching-capability encoding";
                    description
                      "List of ISCDs for this link.";
                    reference
                      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
                      Signaling Functional Description
                       RFC 4203: OSPF Extensions in Support of Generalized
                      Multi-Protocol Label Switching (GMPLS)";
    
                    leaf switching-capability {
                      type identityref {
                        base te-types:switching-capabilities;
                      }
                      description
                        "Switching capability for this interface.";
                    }
    
                    leaf encoding {
                      type identityref {
                        base te-types:lsp-encoding-types;
                      }
                      description
                        "Encoding supported by this interface.";
                    }
    
                    list max-lsp-bandwidth {
                      key "priority";
                      max-elements 8;
                      description
                        "Maximum Label Switched Path (LSP) bandwidth at
    priorities 0-7.";
                      leaf priority {
                        type uint8 {
                          range "0..7";
                        }
                        description "Priority.";
                      }
    
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
                    }  // list max-lsp-bandwidth
                  }  // list interface-switching-capability
    
                  container label-restrictions {
                    description
                      "The label restrictions container.";
                    list label-restriction {
                      key "index";
                      description
                        "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                      reference
                        "RFC 7579: General Network Element Constraint Encoding
                        for GMPLS-Controlled Networks";
    
                      leaf restriction {
                        type enumeration {
                          enum "inclusive" {
                            value 0;
                            description
                              "The label or label range is inclusive.";
                          }
                          enum "exclusive" {
                            value 1;
                            description
                              "The label or label range is exclusive.";
                          }
                        }
                        default "inclusive";
                        description
                          "Indicates whether the list item is inclusive or exclusive.";
                      }
    
                      leaf index {
                        type uint32;
                        description
                          "The index of the label restriction list entry.";
                      }
    
                      container label-start {
                        must
                          "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-start
    
                      container label-end {
                        must
                          "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-end
    
                      container label-step {
                        description
                          "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type int32;
                            default "1";
                            description
                              "Label range step.";
                          }
                          choice l0-grid-type {
                            description
                              "Grid type: DWDM, CWDM, etc.";
                            leaf wson-dwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                description
                                  "Valid only when grid type is DWDM.";
                              }
                              type identityref {
                                base dwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                            leaf wson-cwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                description
                                  "Valid only when grid type is CWDM.";
                              }
                              type identityref {
                                base cwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                          }  // choice l0-grid-type
                        }  // choice technology
                      }  // container label-step
    
                      leaf range-bitmap {
                        type yang:hex-string;
                        description
                          "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                      }
    
                      leaf grid-type {
                        type identityref {
                          base l0-grid-type;
                        }
                        description "Grid type";
                      }
    
                      leaf priority {
                        type uint8;
                        description
                          "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                        reference
                          "RFC 4203: OSPF Extensions in Support of Generalized
                          Multi-Protocol Label Switching (GMPLS)";
    
                      }
                    }  // list label-restriction
                  }  // container label-restrictions
    
                  leaf link-protection-type {
                    type identityref {
                      base te-types:link-protection-type;
                    }
                    description
                      "Link Protection Type desired for this link.";
                    reference
                      "RFC 4202: Routing Extensions in Support of
                      Generalized Multi-Protocol Label Switching (GMPLS)";
    
                  }
    
                  container max-link-bandwidth {
                    description
                      "Maximum bandwidth that can be seen on this link in this
    direction.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-link-bandwidth
    
                  container max-resv-link-bandwidth {
                    description
                      "Maximum amount of bandwidth that can be reserved in this
    direction in this link.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-resv-link-bandwidth
    
                  list unreserved-bandwidth {
                    key "priority";
                    max-elements 8;
                    description
                      "Unreserved bandwidth for priority levels 0-7.  Units are in
    bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    leaf priority {
                      type uint8 {
                        range "0..7";
                      }
                      description "Priority.";
                    }
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // list unreserved-bandwidth
    
                  leaf te-default-metric {
                    type uint32;
                    description
                      "Traffic Engineering metric.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                  }
    
                  leaf te-delay-metric {
                    type uint32;
                    description
                      "Traffic Engineering delay metric.";
                    reference
                      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
    
                  }
    
                  leaf te-igp-metric {
                    type uint32;
                    description
                      "IGP metric used for Traffic Engineering.";
                    reference
                      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
                      second MPLS Traffic Engineering (TE) Metric";
    
                  }
    
                  container te-srlgs {
                    description
                      "Contains a list of SRLGs.";
                    leaf-list value {
                      type te-types:srlg;
                      description "SRLG value.";
                      reference
                        "RFC 4202: Routing Extensions in Support of
                        Generalized Multi-Protocol Label Switching (GMPLS)";
    
                    }
                  }  // container te-srlgs
    
                  container te-nsrlgs {
                    if-feature nsrlg;
                    description
                      "Contains a list of NSRLGs (Non-Shared Risk Link Groups).
    When an abstract TE link is configured, this list specifies
    the request that underlay TE paths need to be mutually
    disjoint with other TE links in the same groups.";
                    leaf-list id {
                      type uint32;
                      description
                        "NSRLG ID, uniquely configured within a topology.";
                      reference
                        "RFC 4872: RSVP-TE Extensions in Support of End-to-End
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Recovery";
    
                    }
                  }  // container te-nsrlgs
                }  // list information-source-entry
    
                container recovery {
                  config false;
                  description
                    "Status of the recovery process.";
                  leaf restoration-status {
                    type te-types:te-recovery-status;
                    description
                      "Restoration status.";
                  }
    
                  leaf protection-status {
                    type te-types:te-recovery-status;
                    description
                      "Protection status.";
                  }
                }  // container recovery
    
                container underlay {
                  if-feature te-topology-hierarchy;
                  config false;
                  description
                    "State attributes for the 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.";
                  }
                }  // container underlay
    
                container statistics {
                  config false;
                  description "Statistics data.";
                  leaf discontinuity-time {
                    type yang:date-and-time;
                    description
                      "The time of the most recent occasion at which any one or
    more of this interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the last re-initialization of the local management
    subsystem, then this node contains the time the local
    management subsystem re-initialized itself.";
                  }
    
                  leaf disables {
                    type yang:counter32;
                    description
                      "Number of times that a link was disabled.";
                  }
    
                  leaf enables {
                    type yang:counter32;
                    description
                      "Number of times that a link was enabled.";
                  }
    
                  leaf maintenance-clears {
                    type yang:counter32;
                    description
                      "Number of times that a link was taken out of maintenance.";
                  }
    
                  leaf maintenance-sets {
                    type yang:counter32;
                    description
                      "Number of times that a link was put in maintenance.";
                  }
    
                  leaf modifies {
                    type yang:counter32;
                    description
                      "Number of times that a link was modified.";
                  }
    
                  leaf downs {
                    type yang:counter32;
                    description
                      "Number of times that a link was set to an operational state
    of 'down'.";
                  }
    
                  leaf ups {
                    type yang:counter32;
                    description
                      "Number of times that a link was set to an operational state
    of 'up'.";
                  }
    
                  leaf fault-clears {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced a fault-clear
    event.";
                  }
    
                  leaf fault-detects {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced fault detection.";
                  }
    
                  leaf protection-switches {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced protection
    switchover.";
                  }
    
                  leaf protection-reverts {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced protection
    reversion.";
                  }
    
                  leaf restoration-failures {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    failure.";
                  }
    
                  leaf restoration-starts {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    start.";
                  }
    
                  leaf restoration-successes {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    success.";
                  }
    
                  leaf restoration-reversion-failures {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    reversion failure.";
                  }
    
                  leaf restoration-reversion-starts {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    reversion start.";
                  }
    
                  leaf restoration-reversion-successes {
                    type yang:counter32;
                    description
                      "Number of times that a link experienced restoration
    reversion success.";
                  }
                }  // container statistics
              }  // container te
            }  // list link
    
            container l2-topology-attributes {
              description
                "Contains L2 topology attributes.";
              leaf name {
                type string;
                description
                  "Name of the topology.";
              }
    
              leaf-list flags {
                type l2-flag-type;
                description "Topology flags.";
              }
            }  // container l2-topology-attributes
    
            container l2-topology-attributes {
              description
                "Contains L2 topology attributes.";
              leaf name {
                type string;
                description
                  "Name of the topology.";
              }
    
              leaf-list flags {
                type l2-flag-type;
                description "Topology flags.";
              }
            }  // container l2-topology-attributes
    
            container l3-topology-attributes {
              description
                "Contains topology attributes";
              leaf name {
                type string;
                description
                  "Name of the topology";
              }
    
              leaf-list flag {
                type l3-flag-type;
                description "Topology flags";
              }
            }  // container l3-topology-attributes
    
            container te-topology-identifier {
              description
                "TE topology identifier container.";
              leaf provider-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a provider.
    If omitted, it assumes that the topology provider ID
    value = 0 (the default).";
              }
    
              leaf client-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a client.
    If omitted, it assumes that the topology client ID
    value = 0 (the default).";
              }
    
              leaf topology-id {
                type te-topology-id;
                default "";
                description
                  "When the datastore contains several topologies,
    'topology-id' distinguishes between them.  If omitted,
    the default (empty) string for this leaf is assumed.";
              }
            }  // container te-topology-identifier
    
            container te {
              must
                "../te-topology-identifier/provider-id and ../te-topology-identifier/client-id and ../te-topology-identifier/topology-id";
              presence "TE support";
              description
                "Indicates TE support.";
              leaf name {
                type string;
                description
                  "Name of the TE topology.  This attribute is optional and can
    be specified by the operator to describe the TE topology,
    which can be useful when 'network-id' (RFC 8345) is not
    descriptive and not modifiable because of being generated
    by the system.";
                reference
                  "RFC 8345: A YANG Data Model for Network Topologies";
    
              }
    
              leaf preference {
                type uint8 {
                  range "1..255";
                }
                description
                  "Specifies a preference for this topology.  A lower number
    indicates a higher preference.";
              }
    
              leaf optimization-criterion {
                type identityref {
                  base te-types:objective-function-type;
                }
                description
                  "Optimization criterion applied to this topology.";
                reference
                  "RFC 3272: Overview and Principles of Internet Traffic
                  Engineering";
    
              }
    
              list nsrlg {
                if-feature nsrlg;
                key "id";
                description
                  "List of NSRLGs (Non-Shared Risk Link Groups).";
                reference
                  "RFC 4872: RSVP-TE Extensions in Support of End-to-End
                  Generalized Multi-Protocol Label Switching (GMPLS)
                  Recovery";
    
                leaf id {
                  type uint32;
                  description
                    "Identifies the NSRLG entry.";
                }
    
                leaf disjointness {
                  type te-types:te-path-disjointness;
                  description
                    "The type of resource disjointness.";
                }
              }  // list nsrlg
    
              container geolocation {
                config false;
                description
                  "Contains a GPS location.";
                leaf altitude {
                  type int64;
                  units "millimeters";
                  description
                    "Distance above sea level.";
                }
    
                leaf latitude {
                  type geographic-coordinate-degree {
                    fraction-digits 0;
                    range "-90..90";
                  }
                  description
                    "Relative position north or south on the Earth's surface.";
                }
    
                leaf longitude {
                  type geographic-coordinate-degree {
                    fraction-digits 0;
                    range "-180..180";
                  }
                  description
                    "Angular distance east or west on the Earth's surface.";
                }
              }  // container geolocation
            }  // container te
          }  // list network
    
          container te {
            presence "TE support";
            description "Indicates TE support.";
            container templates {
              description
                "Configuration parameters for templates used for a TE
    topology.";
              list node-template {
                if-feature template;
                key "name";
                description
                  "The list of TE node templates used to define sharable
    and reusable TE node attributes.";
                leaf name {
                  type te-types:te-template-name;
                  description
                    "The name to identify a TE node template.";
                }
    
                leaf priority {
                  type uint16;
                  description
                    "The preference value for resolving 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.
    A lower number indicates a higher priority.  The highest
    priority is 0.";
                }
    
                leaf reference-change-policy {
                  type enumeration {
                    enum "no-action" {
                      value 0;
                      description
                        "When an attribute changes in this template, the
    configuration node referring to this template does
    not take any action.";
                    }
                    enum "not-allowed" {
                      value 1;
                      description
                        "When any configuration object has a reference to this
    template, changing this template is not allowed.";
                    }
                    enum "cascade" {
                      value 2;
                      description
                        "When an attribute changes in this template, the
    configuration object referring to this template applies
    the new attribute value to the corresponding
    configuration.";
                    }
                  }
                  description
                    "This attribute specifies the action taken for a
    configuration node that has a reference to this template.";
                }
    
                container te-node-attributes {
                  description
                    "Contains node attributes in a TE topology.";
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the link.";
                  }
    
                  leaf domain-id {
                    type uint32;
                    description
                      "Identifies the domain to which this node belongs.
    This attribute is used to support inter-domain links.";
                    reference
                      "RFC 5152: A Per-Domain Path Computation Method for
                      Establishing Inter-Domain Traffic Engineering (TE)
                      Label Switched Paths (LSPs)
                       RFC 5316: ISIS Extensions in Support of Inter-Autonomous
                      System (AS) MPLS and GMPLS Traffic Engineering
                       RFC 5392: OSPF 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 string;
                    description "Node name.";
                  }
    
                  leaf-list signaling-address {
                    type inet:ip-address;
                    description
                      "The node's 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.";
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
                  }  // container underlay-topology
                }  // container te-node-attributes
              }  // list node-template
    
              list link-template {
                if-feature template;
                key "name";
                description
                  "The list of TE link templates used to define sharable
    and reusable TE link attributes.";
                leaf name {
                  type te-types:te-template-name;
                  description
                    "The name to identify a TE link template.";
                }
    
                leaf priority {
                  type uint16;
                  description
                    "The preference value for resolving 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.
    A lower number indicates a higher priority.  The highest
    priority is 0.";
                }
    
                leaf reference-change-policy {
                  type enumeration {
                    enum "no-action" {
                      value 0;
                      description
                        "When an attribute changes in this template, the
    configuration node referring to this template does
    not take any action.";
                    }
                    enum "not-allowed" {
                      value 1;
                      description
                        "When any configuration object has a reference to this
    template, changing this template is not allowed.";
                    }
                    enum "cascade" {
                      value 2;
                      description
                        "When an attribute changes in this template, the
    configuration object referring to this template applies
    the new attribute value to the corresponding
    configuration.";
                    }
                  }
                  description
                    "This attribute specifies the action taken for a
    configuration node that has a reference to this template.";
                }
    
                container te-link-attributes {
                  description
                    "Link attributes in a TE topology.";
                  leaf access-type {
                    type te-types:te-link-access-type;
                    description
                      "Link access type, which can be point-to-point or
    multi-access.";
                  }
    
                  container external-domain {
                    description
                      "For an inter-domain link, specifies the attributes of
    the remote end of the link, to facilitate the signaling at
    the local end.";
                    leaf network-ref {
                      type leafref {
                        path "/nw:networks/nw:network/nw:network-id";
                        require-instance false;
                      }
                      description
                        "Used to reference a network -- for example, an underlay
    network.";
                    }
    
                    leaf remote-te-node-id {
                      type te-types:te-node-id;
                      description
                        "Remote TE node identifier, used together with
    'remote-te-link-tp-id' to identify the remote Link
    Termination Point (LTP) in a different domain.";
                    }
    
                    leaf remote-te-link-tp-id {
                      type te-types:te-tp-id;
                      description
                        "Remote TE LTP identifier, used together with
    'remote-te-node-id' to identify the remote LTP in a
    different domain.";
                    }
                  }  // container external-domain
    
                  leaf is-abstract {
                    type empty;
                    description
                      "Present if the link is abstract.";
                  }
    
                  leaf name {
                    type string;
                    description "Link name.";
                  }
    
                  container underlay {
                    if-feature te-topology-hierarchy;
                    description
                      "Attributes of the TE link underlay.";
                    reference
                      "RFC 4206: Label Switched Paths (LSP) Hierarchy with
                      Generalized Multi-Protocol Label Switching (GMPLS)
                      Traffic Engineering (TE)";
    
                    leaf enabled {
                      type boolean;
                      description
                        "'true' if the underlay is enabled.
    'false' if the underlay is disabled.";
                    }
    
                    container primary-path {
                      description
                        "The service path on the underlay topology that
    supports this link.";
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
    
                      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.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    choice single-or-super-channel {
                                      description
                                        "single or super channel";
                                      leaf dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given value 'N' is used to determine the
    nominal central frequency.";
                                      }
                                      leaf-list subcarrier-dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                        reference
                                          "ITU-T Recommendation G.694.1: Spectral grids for
                                          WDM applications: DWDM frequency grid";
    
                                      }
                                    }  // choice single-or-super-channel
                                    leaf cwdm-n {
                                      type l0-types:cwdm-n;
                                      description
                                        "The given value 'N' is used to determine the nominal
    central wavelength.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
                        }  // choice type
                      }  // list path-element
                    }  // container primary-path
    
                    list 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.";
                      }
    
                      leaf network-ref {
                        type leafref {
                          path "/nw:networks/nw:network/nw:network-id";
                          require-instance
                            false;
                        }
                        description
                          "Used to reference a network -- for example, an underlay
    network.";
                      }
    
                      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.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE LTP identifier.  The combination of the TE link ID
    and the TE node ID is used to identify an unnumbered
    TE link.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              mandatory true;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                  choice grid-type {
                                    description
                                      "Label for DWDM or CWDM grid";
                                    choice single-or-super-channel {
                                      description
                                        "single or super channel";
                                      leaf dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given value 'N' is used to determine the
    nominal central frequency.";
                                      }
                                      leaf-list subcarrier-dwdm-n {
                                        type l0-types:dwdm-n;
                                        description
                                          "The given values 'N' are used to determine the
    nominal central frequency for each subcarrier
    channel.";
                                        reference
                                          "ITU-T Recommendation G.694.1: Spectral grids for
                                          WDM applications: DWDM frequency grid";
    
                                      }
                                    }  // choice single-or-super-channel
                                    leaf cwdm-n {
                                      type l0-types:cwdm-n;
                                      description
                                        "The given value 'N' is used to determine the nominal
    central wavelength.";
                                      reference
                                        "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                        (LSC) Label Switching Routers";
    
                                    }
                                  }  // choice grid-type
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
                        }  // choice type
                      }  // list path-element
                    }  // list backup-path
    
                    leaf protection-type {
                      type identityref {
                        base te-types:lsp-protection-type;
                      }
                      description
                        "Underlay protection type desired for this link.";
                    }
    
                    container tunnel-termination-points {
                      description
                        "Underlay TTPs desired for this link.";
                      leaf source {
                        type binary;
                        description
                          "Source TTP identifier.";
                      }
    
                      leaf destination {
                        type binary;
                        description
                          "Destination TTP identifier.";
                      }
                    }  // container tunnel-termination-points
    
                    container tunnels {
                      description
                        "Underlay TE tunnels supporting this TE link.";
                      leaf sharing {
                        type boolean;
                        default "true";
                        description
                          "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.
    This leaf is the default option for all TE tunnels
    and may be overridden by the per-TE-tunnel value.";
                      }
    
                      list tunnel {
                        key "tunnel-name";
                        description
                          "Zero, one, or more underlay TE tunnels that support this
    TE link.";
                        leaf tunnel-name {
                          type string;
                          description
                            "A tunnel name uniquely identifies an underlay TE tunnel,
    used together with the 'source-node' value for this
    link.";
                          reference
                            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                        }
    
                        leaf sharing {
                          type boolean;
                          description
                            "'true' if the underlay tunnel can be shared with other
    TE links;
    'false' if the underlay tunnel is dedicated to this
    TE link.";
                        }
                      }  // list tunnel
                    }  // container tunnels
                  }  // container underlay
    
                  leaf admin-status {
                    type te-types:te-admin-status;
                    description
                      "The administrative state of the link.";
                  }
    
                  leaf link-index {
                    type uint64;
                    description
                      "The link identifier.  If OSPF is used, this object
    represents an ospfLsdbID.  If IS-IS is used, this object
    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
                      "Administrative group or color of the link.
    This attribute covers both administrative groups (defined
    in RFCs 3630 and 5305) and Extended Administrative Groups
    (defined in RFC 7308).";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering
                       RFC 7308: Extended Administrative Groups in MPLS Traffic
                      Engineering (MPLS-TE)";
    
                  }
    
                  list interface-switching-capability {
                    key "switching-capability encoding";
                    description
                      "List of ISCDs for this link.";
                    reference
                      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
                      Signaling Functional Description
                       RFC 4203: OSPF Extensions in Support of Generalized
                      Multi-Protocol Label Switching (GMPLS)";
    
                    leaf switching-capability {
                      type identityref {
                        base te-types:switching-capabilities;
                      }
                      description
                        "Switching capability for this interface.";
                    }
    
                    leaf encoding {
                      type identityref {
                        base te-types:lsp-encoding-types;
                      }
                      description
                        "Encoding supported by this interface.";
                    }
    
                    list max-lsp-bandwidth {
                      key "priority";
                      max-elements 8;
                      description
                        "Maximum Label Switched Path (LSP) bandwidth at
    priorities 0-7.";
                      leaf priority {
                        type uint8 {
                          range "0..7";
                        }
                        description "Priority.";
                      }
    
                      container te-bandwidth {
                        description
                          "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type te-bandwidth;
                            description
                              "Bandwidth specified in a generic format.";
                          }
                        }  // choice technology
                      }  // container te-bandwidth
                    }  // list max-lsp-bandwidth
                  }  // list interface-switching-capability
    
                  container label-restrictions {
                    description
                      "The label restrictions container.";
                    list label-restriction {
                      key "index";
                      description
                        "The absence of the label restrictions container implies
    that all labels are acceptable; otherwise, only restricted
    labels are available.";
                      reference
                        "RFC 7579: General Network Element Constraint Encoding
                        for GMPLS-Controlled Networks";
    
                      leaf restriction {
                        type enumeration {
                          enum "inclusive" {
                            value 0;
                            description
                              "The label or label range is inclusive.";
                          }
                          enum "exclusive" {
                            value 1;
                            description
                              "The label or label range is exclusive.";
                          }
                        }
                        default "inclusive";
                        description
                          "Indicates whether the list item is inclusive or exclusive.";
                      }
    
                      leaf index {
                        type uint32;
                        description
                          "The index of the label restriction list entry.";
                      }
    
                      container label-start {
                        must
                          "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the starting label if a label range is specified.
    This is the label value if a single label is specified,
    in which case the 'label-end' attribute is not set.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-start
    
                      container label-end {
                        must
                          "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" {
                          error-message
                            "'label-start' and 'label-end' must have the same direction.";
                        }
                        description
                          "This is the ending label if a label range is specified.
    This attribute is not set if a single label is specified.";
                        container te-label {
                          description
                            "Container that specifies the TE label.  The choices can
    be augmented for specific data-plane technologies.";
                          choice technology {
                            default "generic";
                            description
                              "Data-plane technology type.";
                            leaf generic {
                              type rt-types:generalized-label;
                              description
                                "TE label specified in a generic format.";
                            }
                            choice grid-type {
                              description
                                "Label for DWDM or CWDM grid";
                              leaf dwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-dwdm")" {
                                  description
                                    "Valid only when grid type is DWDM.";
                                }
                                type l0-types:dwdm-n;
                                description
                                  "The central frequency of DWDM.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                              leaf cwdm-n {
                                when
                                  "derived-from-or-self(../../../grid-type,
    "wson-grid-cwdm")" {
                                  description
                                    "Valid only when grid type is CWDM.";
                                }
                                type l0-types:cwdm-n;
                                description
                                  "Channel wavelength computing input.";
                                reference
                                  "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                  (LSC) Label Switching Routers";
    
                              }
                            }  // choice grid-type
                          }  // choice technology
    
                          leaf direction {
                            type te-label-direction;
                            default "forward";
                            description
                              "Label direction.";
                          }
                        }  // container te-label
                      }  // container label-end
    
                      container label-step {
                        description
                          "The step increment between labels in the label range.
    The label start/end values will have to be consistent
    with the sign of label step.  For example,
    'label-start' < 'label-end' enforces 'label-step' > 0
    'label-start' > 'label-end' enforces 'label-step' < 0.";
                        choice technology {
                          default "generic";
                          description
                            "Data-plane technology type.";
                          leaf generic {
                            type int32;
                            default "1";
                            description
                              "Label range step.";
                          }
                          choice l0-grid-type {
                            description
                              "Grid type: DWDM, CWDM, etc.";
                            leaf wson-dwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-dwdm")" {
                                description
                                  "Valid only when grid type is DWDM.";
                              }
                              type identityref {
                                base dwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (GHz), e.g., 100.000,
    50.000, 25.000, or 12.500 GHz for DWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                            leaf wson-cwdm-channel-spacing {
                              when
                                "derived-from-or-self(../../grid-type,
    "wson-grid-cwdm")" {
                                description
                                  "Valid only when grid type is CWDM.";
                              }
                              type identityref {
                                base cwdm-ch-spc-type;
                              }
                              description
                                "Label-step is the channel spacing (nm), i.e., 20 nm
    for CWDM, which is the only value defined for CWDM.";
                              reference
                                "RFC 6205: Generalized Labels for Lambda-Switch-Capable
                                (LSC) Label Switching Routers";
    
                            }
                          }  // choice l0-grid-type
                        }  // choice technology
                      }  // container label-step
    
                      leaf range-bitmap {
                        type yang:hex-string;
                        description
                          "When there are gaps between 'label-start' and 'label-end',
    this attribute is used to specify the positions
    of the used labels.  This is represented in big endian as
    'hex-string'.
    The most significant byte in the hex-string is the farthest
    to the left in the byte sequence.  Leading zero bytes in the
    configured value may be omitted for brevity.
    Each bit position in the 'range-bitmap' 'hex-string' maps
    to a label in the range derived from 'label-start'.
    
    For example, assuming that 'label-start' = 16000 and
    'range-bitmap' = 0x01000001, then:
    
    - bit position (0) is set, and the corresponding mapped
      label from the range is 16000 + (0 * 'label-step') or
      16000 for default 'label-step' = 1.
    - bit position (24) is set, and the corresponding mapped
      label from the range is 16000 + (24 * 'label-step') or
      16024 for default 'label-step' = 1.";
                      }
    
                      leaf grid-type {
                        type identityref {
                          base l0-grid-type;
                        }
                        description "Grid type";
                      }
    
                      leaf priority {
                        type uint8;
                        description
                          "Priority in Interface Switching Capability Descriptor
    (ISCD).";
                        reference
                          "RFC 4203: OSPF Extensions in Support of Generalized
                          Multi-Protocol Label Switching (GMPLS)";
    
                      }
                    }  // list label-restriction
                  }  // container label-restrictions
    
                  leaf link-protection-type {
                    type identityref {
                      base te-types:link-protection-type;
                    }
                    description
                      "Link Protection Type desired for this link.";
                    reference
                      "RFC 4202: Routing Extensions in Support of
                      Generalized Multi-Protocol Label Switching (GMPLS)";
    
                  }
    
                  container max-link-bandwidth {
                    description
                      "Maximum bandwidth that can be seen on this link in this
    direction.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-link-bandwidth
    
                  container max-resv-link-bandwidth {
                    description
                      "Maximum amount of bandwidth that can be reserved in this
    direction in this link.  Units are in bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // container max-resv-link-bandwidth
    
                  list unreserved-bandwidth {
                    key "priority";
                    max-elements 8;
                    description
                      "Unreserved bandwidth for priority levels 0-7.  Units are in
    bytes per second.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                    leaf priority {
                      type uint8 {
                        range "0..7";
                      }
                      description "Priority.";
                    }
    
                    container te-bandwidth {
                      description
                        "Container that specifies TE bandwidth.  The choices
    can be augmented for specific data-plane technologies.";
                      choice technology {
                        default "generic";
                        description
                          "Data-plane technology type.";
                        leaf generic {
                          type te-bandwidth;
                          description
                            "Bandwidth specified in a generic format.";
                        }
                      }  // choice technology
                    }  // container te-bandwidth
                  }  // list unreserved-bandwidth
    
                  leaf te-default-metric {
                    type uint32;
                    description
                      "Traffic Engineering metric.";
                    reference
                      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
                      Version 2
                       RFC 5305: IS-IS Extensions for Traffic Engineering";
    
                  }
    
                  leaf te-delay-metric {
                    type uint32;
                    description
                      "Traffic Engineering delay metric.";
                    reference
                      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
    
                  }
    
                  leaf te-igp-metric {
                    type uint32;
                    description
                      "IGP metric used for Traffic Engineering.";
                    reference
                      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
                      second MPLS Traffic Engineering (TE) Metric";
    
                  }
    
                  container te-srlgs {
                    description
                      "Contains a list of SRLGs.";
                    leaf-list value {
                      type te-types:srlg;
                      description "SRLG value.";
                      reference
                        "RFC 4202: Routing Extensions in Support of
                        Generalized Multi-Protocol Label Switching (GMPLS)";
    
                    }
                  }  // container te-srlgs
    
                  container te-nsrlgs {
                    if-feature nsrlg;
                    description
                      "Contains a list of NSRLGs (Non-Shared Risk Link Groups).
    When an abstract TE link is configured, this list specifies
    the request that underlay TE paths need to be mutually
    disjoint with other TE links in the same groups.";
                    leaf-list id {
                      type uint32;
                      description
                        "NSRLG ID, uniquely configured within a topology.";
                      reference
                        "RFC 4872: RSVP-TE Extensions in Support of End-to-End
                        Generalized Multi-Protocol Label Switching (GMPLS)
                        Recovery";
    
                    }
                  }  // container te-nsrlgs
                }  // container te-link-attributes
              }  // list link-template
            }  // container templates
          }  // container te
        }  // container networks
      }  // module ietf-network
    

© 2023 YumaWorks, Inc. All rights reserved.