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 sap-network {
                presence
                  "Indicates the SAP network type.";
                description
                  "The presence of the container node indicates the
    SAP network type.";
                leaf-list service-type {
                  type identityref {
                    base vpn-common:service-type;
                  }
                  description
                    "Indicates the set of supported service types.";
                }
              }  // container sap-network
    
              container service {
                presence
                  "Presence of the container indicates performance
    monitoring of the VPN service, and absence of
    the container indicates performance monitoring
    of the network itself.";
                description
                  "Container for VPN service.";
                leaf service-type {
                  type identityref {
                    base vpn-common:service-type;
                  }
                  mandatory true;
                  description
                    "This indicates the network service type,
    e.g., L3VPN and VPLS.";
                }
    
                leaf vpn-id {
                  type vpn-common:vpn-id;
                  description "VPN identifier.";
                }
    
                leaf vpn-service-topology {
                  type identityref {
                    base vpn-common:vpn-topology;
                  }
                  description
                    "VPN service topology, e.g., hub-spoke, any-to-any,
    and hub-spoke-disjoint.";
                }
              }  // container service
    
              container te-topology {
                presence
                  "Indicates a TE topology";
                description
                  "Its presence identifies the TE topology type.";
              }  // container te-topology
    
              container fabric-network {
                presence
                  "indicates fabric Network";
                description
                  "The presence of the container node indicates
    fabric topology";
              }  // container fabric-network
            }  // 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 pm-statistics {
                  config false;
                  description
                    "Container for termination point PM attributes.";
                  leaf last-updated {
                    type yang:date-and-time;
                    config false;
                    description
                      "Indicates the date and time when the counters were
    last updated.";
                  }
    
                  leaf inbound-octets {
                    type yang:counter64;
                    description
                      "The total number of octets received on the
    interface, including framing characters.";
                  }
    
                  leaf inbound-unicast {
                    type yang:counter64;
                    description
                      "The total number of inbound unicast packets.";
                  }
    
                  leaf inbound-broadcast {
                    type yang:counter64;
                    description
                      "The total number of inbound broadcast packets.";
                  }
    
                  leaf inbound-multicast {
                    type yang:counter64;
                    description
                      "The total number of inbound multicast packets.";
                  }
    
                  leaf inbound-discards {
                    type yang:counter64;
                    description
                      "The number of inbound packets that were discarded
    even though no errors had been detected.  Possible
    reasons for discarding such a packet could be to
    free up buffer space, not enough buffer for too
    much data, etc.";
                  }
    
                  leaf inbound-errors {
                    type yang:counter64;
                    description
                      "The number of inbound packets that contained errors.";
                  }
    
                  leaf inbound-unknown-protocol {
                    type yang:counter64;
                    description
                      "The number of packets received via the interface
    that were discarded because of an unknown or
    unsupported protocol.";
                  }
    
                  leaf outbound-octets {
                    type yang:counter64;
                    description
                      "The total number of octets transmitted out of the
    interface, including framing characters.";
                  }
    
                  leaf outbound-unicast {
                    type yang:counter64;
                    description
                      "The total number of outbound unicast packets.";
                  }
    
                  leaf outbound-broadcast {
                    type yang:counter64;
                    description
                      "The total number of outbound broadcast packets.";
                  }
    
                  leaf outbound-multicast {
                    type yang:counter64;
                    description
                      "The total number of outbound multicast packets.";
                  }
    
                  leaf outbound-discards {
                    type yang:counter64;
                    description
                      "The number of outbound packets that were discarded
    even though no errors had been detected to
    prevent their transmission.  Possible reasons
    for discarding such a packet could be to free
    up buffer space, not enough buffer for too
    much data, etc.";
                  }
    
                  leaf outbound-errors {
                    type yang:counter64;
                    description
                      "The number of outbound packets that contained errors.";
                  }
    
                  list vpn-network-access {
                    key "network-access-id";
                    description
                      "The list of PM based on VPN network accesses.";
                    leaf network-access-id {
                      type vpn-common:vpn-id;
                      description
                        "The reference to an identifier for the VPN network
    access.";
                    }
    
                    leaf last-updated {
                      type yang:date-and-time;
                      config false;
                      description
                        "Indicates the date and time when the counters were
    last updated.";
                    }
    
                    leaf inbound-octets {
                      type yang:counter64;
                      description
                        "The total number of octets received on the
    interface, including framing characters.";
                    }
    
                    leaf inbound-unicast {
                      type yang:counter64;
                      description
                        "The total number of inbound unicast packets.";
                    }
    
                    leaf inbound-broadcast {
                      type yang:counter64;
                      description
                        "The total number of inbound broadcast packets.";
                    }
    
                    leaf inbound-multicast {
                      type yang:counter64;
                      description
                        "The total number of inbound multicast packets.";
                    }
    
                    leaf inbound-discards {
                      type yang:counter64;
                      description
                        "The number of inbound packets that were discarded
    even though no errors had been detected.  Possible
    reasons for discarding such a packet could be to
    free up buffer space, not enough buffer for too
    much data, etc.";
                    }
    
                    leaf inbound-errors {
                      type yang:counter64;
                      description
                        "The number of inbound packets that contained errors.";
                    }
    
                    leaf inbound-unknown-protocol {
                      type yang:counter64;
                      description
                        "The number of packets received via the interface
    that were discarded because of an unknown or
    unsupported protocol.";
                    }
    
                    leaf outbound-octets {
                      type yang:counter64;
                      description
                        "The total number of octets transmitted out of the
    interface, including framing characters.";
                    }
    
                    leaf outbound-unicast {
                      type yang:counter64;
                      description
                        "The total number of outbound unicast packets.";
                    }
    
                    leaf outbound-broadcast {
                      type yang:counter64;
                      description
                        "The total number of outbound broadcast packets.";
                    }
    
                    leaf outbound-multicast {
                      type yang:counter64;
                      description
                        "The total number of outbound multicast packets.";
                    }
    
                    leaf outbound-discards {
                      type yang:counter64;
                      description
                        "The number of outbound packets that were discarded
    even though no errors had been detected to
    prevent their transmission.  Possible reasons
    for discarding such a packet could be to free
    up buffer space, not enough buffer for too
    much data, etc.";
                    }
    
                    leaf outbound-errors {
                      type yang:counter64;
                      description
                        "The number of outbound packets that contained errors.";
                    }
                  }  // list vpn-network-access
                }  // container pm-statistics
    
                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
    
                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
              }  // list termination-point
    
              list service {
                key "service-type";
                description
                  "A list of supported service types for the node.";
                leaf service-type {
                  type identityref {
                    base vpn-common:service-type;
                  }
                  description
                    "Indicates a service type.";
                }
    
                list sap {
                  key "sap-id";
                  description
                    "The SAPs are an abstraction of the points to which
    network services such as L3VPNs, L2VPNs, or network
    slices can be attached.";
                  leaf sap-id {
                    type string;
                    description
                      "Indicates an identifier that uniquely identifies
    a SAP.";
                  }
    
                  leaf description {
                    type string;
                    description
                      "A textual description of the SAP.";
                  }
    
                  leaf parent-termination-point {
                    type nt:tp-id;
                    description
                      "Indicates the parent termination point to
    which the SAP is attached.  A termination
    point can be a physical port, an interface, etc.";
                  }
    
                  leaf attachment-interface {
                    type string;
                    description
                      "Indicates the interface to which the SAP is bound.";
                  }
    
                  leaf interface-type {
                    type identityref {
                      base interface-type;
                    }
                    description
                      "The type of the interface to which the SAP is bound.";
                  }
    
                  leaf encapsulation-type {
                    type identityref {
                      base vpn-common:encapsulation-type;
                    }
                    description
                      "Encapsulation type of the interface to which the
    SAP is bound.";
                  }
    
                  leaf role {
                    type identityref {
                      base interface-role;
                    }
                    description
                      "Indicates the role of a SAP.";
                  }
    
                  leaf allows-child-saps {
                    type boolean;
                    description
                      "Indicates whether the attachment interface of this
    SAP is capable of hosting per-service sub-interfaces.";
                  }
    
                  leaf-list peer-sap-id {
                    type string;
                    description
                      "Indicates an identifier of the peer's termination
    identifier (e.g., a Customer Edge (CE)).  This
    information can be used for correlation purposes,
    such as identifying the SAP that is attached to
    an endpoint that is provided in a service request.";
                  }
    
                  container sap-status {
                    config false;
                    description
                      "Indicates the operational status of the SAP,
    independent of any service provisioned over it.";
                    leaf status {
                      type identityref {
                        base operational-status;
                      }
                      config false;
                      description
                        "Operational status.";
                    }
    
                    leaf last-change {
                      type yang:date-and-time;
                      config false;
                      description
                        "Indicates the actual date and time of the service status
    change.";
                    }
                  }  // container sap-status
    
                  container service-status {
                    description
                      "Indicates the service status.";
                    container admin-status {
                      description
                        "Administrative service status.";
                      leaf status {
                        type identityref {
                          base vpn-common:administrative-status;
                        }
                        description
                          "Administrative status of the service provisioned
    at the SAP.";
                      }
    
                      leaf last-change {
                        type yang:date-and-time;
                        description
                          "Indicates the actual date and time of the service
    status change.";
                      }
                    }  // container admin-status
    
                    container oper-status {
                      config false;
                      description
                        "Operational status of the service provisioned
    at the SAP.";
                      leaf status {
                        type identityref {
                          base operational-status;
                        }
                        config false;
                        description
                          "Operational status.";
                      }
    
                      leaf last-change {
                        type yang:date-and-time;
                        config false;
                        description
                          "Indicates the actual date and time of the service status
    change.";
                      }
                    }  // container oper-status
                  }  // container service-status
                }  // list sap
              }  // list service
    
              leaf node-type {
                type identityref {
                  base node-type;
                }
                description
                  "Node type, e.g., PE, P, and ASBR.";
              }
    
              container entry-summary {
                config false;
                description
                  "Container for VPN or network entry summary.";
                container ipv4-num {
                  description
                    "IPv4-specific parameters.";
                  leaf maximum-routes {
                    type uint32;
                    description
                      "Indicates the maximum number of IPv4 routes
    for the VPN or network.";
                  }
    
                  leaf total-active-routes {
                    type uint32;
                    description
                      "Indicates total active IPv4 routes
    for the VPN or network.";
                  }
                }  // container ipv4-num
    
                container ipv6-num {
                  description
                    "IPv6-specific parameters.";
                  leaf maximum-routes {
                    type uint32;
                    description
                      "Indicates the maximum number of IPv6 routes
    for the VPN or network.";
                  }
    
                  leaf total-active-routes {
                    type uint32;
                    description
                      "Indicates total active IPv6 routes
    for the VPN or network.";
                  }
                }  // container ipv6-num
    
                container mac-num {
                  description "MAC statistics.";
                  leaf maximum-mac-entries {
                    type uint32;
                    description
                      "Indicates the maximum number of MAC entries
    for the VPN or network.";
                  }
    
                  leaf total-active-mac-entries {
                    type uint32;
                    description
                      "Indicates the total active MAC entries
    for the VPN or network.";
                  }
                }  // container mac-num
              }  // container entry-summary
    
              leaf role {
                type identityref {
                  base vpn-common:role;
                }
                default
                  "vpn-common:any-to-any-role";
                description
                  "Role of the node in the VPN service topology.";
              }
    
              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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                        }
                      }  // 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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
                          "Top-level container for the list of path metric bounds.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                          leaf metric-type {
                            type identityref {
                              base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                          }
                        }  // 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-optimization-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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                            status deprecated;
                            description
                              "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              status
                                deprecated;
                              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;
                                }
                                status
                                  deprecated;
                                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
    
                    leaf tiebreaker {
                      type identityref {
                        base path-tiebreaker-type;
                      }
                      default
                        "te-types:path-tiebreaker-random";
                      description
                        "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                    }
    
                    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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                            }
                          }  // 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                            }
                          }  // 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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
                            "Top-level container for the list of path metric bounds.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                            leaf metric-type {
                              type identityref {
                                base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                            }
                          }  // 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-optimization-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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                              status
                                deprecated;
                              description
                                "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                status
                                  deprecated;
                                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;
                                  }
                                  status
                                    deprecated;
                                  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
    
                      leaf tiebreaker {
                        type identityref {
                          base path-tiebreaker-type;
                        }
                        default
                          "te-types:path-tiebreaker-random";
                        description
                          "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                      }
    
                      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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                        }
                      }  // 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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
                          "Top-level container for the list of path metric bounds.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                          leaf metric-type {
                            type identityref {
                              base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                          }
                        }  // 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-optimization-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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                            status deprecated;
                            description
                              "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              status
                                deprecated;
                              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;
                                }
                                status
                                  deprecated;
                                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
    
                    leaf tiebreaker {
                      type identityref {
                        base path-tiebreaker-type;
                      }
                      default
                        "te-types:path-tiebreaker-random";
                      description
                        "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                    }
    
                    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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                            }
                          }  // 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                            }
                          }  // 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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
                            "Top-level container for the list of path metric bounds.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                            leaf metric-type {
                              type identityref {
                                base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                            }
                          }  // 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-optimization-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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                              status
                                deprecated;
                              description
                                "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                status
                                  deprecated;
                                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;
                                  }
                                  status
                                    deprecated;
                                  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
    
                      leaf tiebreaker {
                        type identityref {
                          base path-tiebreaker-type;
                        }
                        default
                          "te-types:path-tiebreaker-random";
                        description
                          "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                      }
    
                      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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                        }
                      }  // 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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
                          "Top-level container for the list of path metric bounds.";
                        list path-metric-bound {
                          key "metric-type";
                          description
                            "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                          leaf metric-type {
                            type identityref {
                              base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                          }
                        }  // 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-optimization-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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                                    must
                                      "node-id-uri or node-id" {
                                      description
                                        "At least one node identifier MUST be present.";
                                    }
                                    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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 {
                                    must
                                      "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                      description
                                        "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                    }
                                    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-uri {
                                      type nt:tp-id;
                                      description
                                        "Link Termination Point (LTP) identifier.";
                                    }
    
                                    leaf link-tp-id {
                                      type te-tp-id;
                                      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-uri {
                                      type node-id;
                                      description
                                        "The identifier of a node in the topology.";
                                    }
    
                                    leaf node-id {
                                      type te-node-id;
                                      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 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 {
                            status deprecated;
                            description
                              "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                            list tiebreaker {
                              key "tiebreaker-type";
                              status
                                deprecated;
                              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;
                                }
                                status
                                  deprecated;
                                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
    
                    leaf tiebreaker {
                      type identityref {
                        base path-tiebreaker-type;
                      }
                      default
                        "te-types:path-tiebreaker-random";
                      description
                        "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                    }
    
                    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 {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier MUST be present.";
                              }
                              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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                              }
                              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-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                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-uri {
                                type node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                          }
                        }  // 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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
                            "Top-level container for the list of path metric bounds.";
                          list path-metric-bound {
                            key "metric-type";
                            description
                              "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                            leaf metric-type {
                              type identityref {
                                base link-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 specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specificied 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                            }
                          }  // 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-optimization-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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                                      must
                                        "node-id-uri or node-id" {
                                        description
                                          "At least one node identifier MUST be present.";
                                      }
                                      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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 {
                                      must
                                        "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                        description
                                          "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                      }
                                      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-uri {
                                        type nt:tp-id;
                                        description
                                          "Link Termination Point (LTP) identifier.";
                                      }
    
                                      leaf link-tp-id {
                                        type te-tp-id;
                                        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-uri {
                                        type node-id;
                                        description
                                          "The identifier of a node in the topology.";
                                      }
    
                                      leaf node-id {
                                        type te-node-id;
                                        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 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 {
                              status
                                deprecated;
                              description
                                "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                              list tiebreaker {
                                key "tiebreaker-type";
                                status
                                  deprecated;
                                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;
                                  }
                                  status
                                    deprecated;
                                  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
    
                      leaf tiebreaker {
                        type identityref {
                          base path-tiebreaker-type;
                        }
                        default
                          "te-types:path-tiebreaker-random";
                        description
                          "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
                      }
    
                      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 {
                                must
                                  "node-id-uri or node-id" {
                                  description
                                    "At least one node identifier MUST be present.";
                                }
                                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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 {
                                must
                                  "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                  description
                                    "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                                }
                                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-uri {
                                  type nt:tp-id;
                                  description
                                    "Link Termination Point (LTP) identifier.";
                                }
    
                                leaf link-tp-id {
                                  type te-tp-id;
                                  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-uri {
                                  type node-id;
                                  description
                                    "The identifier of a node in the topology.";
                                }
    
                                leaf node-id {
                                  type te-node-id;
                                  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 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
    
              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
            }  // 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 perf-mon {
                description
                  "Container for PM attributes.";
                leaf low-percentile {
                  type percentile;
                  default "10.000";
                  description
                    "Low percentile to report.  Setting low-percentile
    to 0.000 indicates the client is not interested
    in receiving low percentile.";
                }
    
                leaf intermediate-percentile {
                  type percentile;
                  default "50.000";
                  description
                    "Intermediate percentile to report.  Setting
    intermediate-percentile to 0.000 indicates the client
    is not interested in receiving intermediate percentile.";
                }
    
                leaf high-percentile {
                  type percentile;
                  default "95.000";
                  description
                    "High percentile to report.  Setting high-percentile
    to 0.000 indicates the client is not interested in
    receiving high percentile.";
                }
    
                leaf measurement-interval {
                  type uint32 {
                    range "1..max";
                  }
                  units "seconds";
                  default "60";
                  description
                    "Indicates the time interval to perform PM
    measurement over.";
                }
    
                list pm {
                  key "pm-type";
                  config false;
                  description
                    "The list of PM based on PM type.";
                  leaf pm-type {
                    type identityref {
                      base pm-type;
                    }
                    config false;
                    description
                      "The PM type of the measured PM attributes.";
                  }
    
                  container pm-attributes {
                    description
                      "Container for PM attributes.";
                    leaf start-time {
                      type yang:date-and-time;
                      config false;
                      description
                        "The date and time the measurement last started.";
                    }
    
                    leaf end-time {
                      type yang:date-and-time;
                      config false;
                      description
                        "The date and time the measurement last ended.";
                    }
    
                    leaf pm-source {
                      type identityref {
                        base pm-source-type;
                      }
                      config false;
                      description
                        "The OAM tool used to collect the PM data.";
                    }
    
                    container one-way-pm-statistics {
                      config false;
                      description
                        "Container for link telemetry attributes.";
                      container loss-statistics {
                        description
                          "One-way link loss summarized information.";
                        reference
                          "RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf packet-loss-count {
                          type yang:counter64;
                          description
                            "Total number of lost packets.";
                        }
    
                        leaf loss-ratio {
                          type percentage;
                          description
                            "Loss ratio of the packets.  Expressed as percentage
    of packets lost with respect to packets sent.";
                        }
                      }  // container loss-statistics
    
                      container delay-statistics {
                        description
                          "One-way link delay summarized information.";
                        reference
                          "RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf unit-value {
                          type identityref {
                            base lime:time-unit-type;
                          }
                          default
                            "lime:milliseconds";
                          description
                            "Time units, where the options are hours, minutes, seconds,
    milliseconds, microseconds, and nanoseconds.";
                        }
    
                        leaf min-delay-value {
                          type yang:gauge64;
                          description
                            "Minimum observed one-way delay.";
                        }
    
                        leaf max-delay-value {
                          type yang:gauge64;
                          description
                            "Maximum observed one-way delay.";
                        }
    
                        leaf low-delay-percentile {
                          type yang:gauge64;
                          description
                            "Low percentile of observed one-way delay with
    specific measurement method.";
                        }
    
                        leaf intermediate-delay-percentile {
                          type yang:gauge64;
                          description
                            "Intermediate percentile of observed one-way delay with
    specific measurement method.";
                        }
    
                        leaf high-delay-percentile {
                          type yang:gauge64;
                          description
                            "High percentile of observed one-way delay with
    specific measurement method.";
                        }
                      }  // container delay-statistics
    
                      container jitter-statistics {
                        description
                          "One-way link jitter summarized information.";
                        reference
                          "RFC 3393: IP Packet Delay Variation Metric
                              for IP Performance Metrics (IPPM)
                           RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf unit-value {
                          type identityref {
                            base lime:time-unit-type;
                          }
                          default
                            "lime:milliseconds";
                          description
                            "Time units, where the options are hours, minutes, seconds,
    milliseconds, microseconds, and nanoseconds.";
                        }
    
                        leaf min-jitter-value {
                          type yang:gauge64;
                          description
                            "Minimum observed one-way jitter.";
                        }
    
                        leaf max-jitter-value {
                          type yang:gauge64;
                          description
                            "Maximum observed one-way jitter.";
                        }
    
                        leaf low-jitter-percentile {
                          type yang:gauge64;
                          description
                            "Low percentile of observed one-way jitter.";
                        }
    
                        leaf intermediate-jitter-percentile {
                          type yang:gauge64;
                          description
                            "Intermediate percentile of observed one-way jitter.";
                        }
    
                        leaf high-jitter-percentile {
                          type yang:gauge64;
                          description
                            "High percentile of observed one-way jitter.";
                        }
                      }  // container jitter-statistics
                    }  // container one-way-pm-statistics
    
                    list one-way-pm-statistics-per-class {
                      key "class-id";
                      config false;
                      description
                        "The list of PM data based on class of service.";
                      leaf class-id {
                        type string;
                        description
                          "The class-id is used to identify the class
    of service.  This identifier is internal
    to the administration.";
                      }
    
                      container loss-statistics {
                        description
                          "One-way link loss summarized information.";
                        reference
                          "RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf packet-loss-count {
                          type yang:counter64;
                          description
                            "Total number of lost packets.";
                        }
    
                        leaf loss-ratio {
                          type percentage;
                          description
                            "Loss ratio of the packets.  Expressed as percentage
    of packets lost with respect to packets sent.";
                        }
                      }  // container loss-statistics
    
                      container delay-statistics {
                        description
                          "One-way link delay summarized information.";
                        reference
                          "RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf unit-value {
                          type identityref {
                            base lime:time-unit-type;
                          }
                          default
                            "lime:milliseconds";
                          description
                            "Time units, where the options are hours, minutes, seconds,
    milliseconds, microseconds, and nanoseconds.";
                        }
    
                        leaf min-delay-value {
                          type yang:gauge64;
                          description
                            "Minimum observed one-way delay.";
                        }
    
                        leaf max-delay-value {
                          type yang:gauge64;
                          description
                            "Maximum observed one-way delay.";
                        }
    
                        leaf low-delay-percentile {
                          type yang:gauge64;
                          description
                            "Low percentile of observed one-way delay with
    specific measurement method.";
                        }
    
                        leaf intermediate-delay-percentile {
                          type yang:gauge64;
                          description
                            "Intermediate percentile of observed one-way delay with
    specific measurement method.";
                        }
    
                        leaf high-delay-percentile {
                          type yang:gauge64;
                          description
                            "High percentile of observed one-way delay with
    specific measurement method.";
                        }
                      }  // container delay-statistics
    
                      container jitter-statistics {
                        description
                          "One-way link jitter summarized information.";
                        reference
                          "RFC 3393: IP Packet Delay Variation Metric
                              for IP Performance Metrics (IPPM)
                           RFC 4656: A One-way Active Measurement Protocol (OWAMP)
                          ITU-T Y.1731: Operations, administration and
                                maintenance (OAM) functions and mechanisms
                                for Ethernet-based networks";
    
                        leaf unit-value {
                          type identityref {
                            base lime:time-unit-type;
                          }
                          default
                            "lime:milliseconds";
                          description
                            "Time units, where the options are hours, minutes, seconds,
    milliseconds, microseconds, and nanoseconds.";
                        }
    
                        leaf min-jitter-value {
                          type yang:gauge64;
                          description
                            "Minimum observed one-way jitter.";
                        }
    
                        leaf max-jitter-value {
                          type yang:gauge64;
                          description
                            "Maximum observed one-way jitter.";
                        }
    
                        leaf low-jitter-percentile {
                          type yang:gauge64;
                          description
                            "Low percentile of observed one-way jitter.";
                        }
    
                        leaf intermediate-jitter-percentile {
                          type yang:gauge64;
                          description
                            "Intermediate percentile of observed one-way jitter.";
                        }
    
                        leaf high-jitter-percentile {
                          type yang:gauge64;
                          description
                            "High percentile of observed one-way jitter.";
                        }
                      }  // container jitter-statistics
                    }  // list one-way-pm-statistics-per-class
                  }  // container pm-attributes
                }  // list pm
    
                container vpn-pm-type {
                  description
                    "The VPN PM type of this logical point-to-point
    unidirectional VPN link.";
                  container inter-vpn-access-interface {
                    description
                      "Indicates inter-vpn-access-interface PM, which is used
    to monitor the performance of logical point-to-point
    VPN connections between source and destination VPN
    access interfaces.";
                    leaf inter-vpn-access-interface {
                      type empty;
                      description
                        "This is a placeholder for inter-vpn-access-interface PM,
    which is not bound to a specific VPN access interface.
    The source or destination VPN access interface
    of the measurement can be augmented as needed.";
                    }
                  }  // container inter-vpn-access-interface
    
                  container vpn-tunnel {
                    presence
                      "Enables VPN tunnel PM";
                    description
                      "Indicates VPN tunnel PM, which is used to monitor
    the performance of VPN tunnels.";
                    leaf vpn-tunnel-type {
                      type identityref {
                        base vpn-common:protocol-type;
                      }
                      config false;
                      description
                        "The leaf indicates the VPN tunnel type, e.g.,
    Generic Routing Encapsulation (GRE) and Generic
    Network Virtualization Encapsulation (Geneve).";
                    }
                  }  // container vpn-tunnel
                }  // container vpn-pm-type
              }  // container perf-mon
    
              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 {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier MUST be present.";
                            }
                            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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                            }
                            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-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 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 {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier MUST be present.";
                            }
                            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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                            }
                            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-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                      }
                    }  // 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                      }
                    }  // 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 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 {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier MUST be present.";
                            }
                            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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                            }
                            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-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 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 {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier MUST be present.";
                            }
                            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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier MUST be present.";
                            }
                            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-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              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-uri {
                              type node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              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 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 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 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 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'.
    
    In case the restriction is 'inclusive', the bit-position is
    set if the corresponding mapped label is available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are available.
    
    In case the restriction is 'exclusive', the bit-position is
    set if the corresponding mapped label is not available.
    In this case, if the range-bitmap is not present, all the
    labels in the range are not available.
    
    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.";
                      }
                    }  // 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.