module ietf-te-topology {
  //yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";

  prefix "tet";

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

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

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

  import ietf-network {
    prefix "nw";
  }

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

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

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

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

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

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

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

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

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

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

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

  description "TE topology model";

  revision "2017-01-10" {
    description "Initial revision";
    reference "TBD";
  }

  /*
   * Features
   */
  feature nsrlg {
    description
      "This feature indicates that the system supports NSRLG
       (Not Sharing Risk Link Group).";
  }

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

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

  /*
   * Typedefs
   */
  typedef geographic-coordinate-degree {
      type decimal64 {
        fraction-digits 8;
      }
      description
        "Decimal degree (DD) used to express latitude and longitude
         geographic coordinates.";
  } // geographic-coordinate-degree

  typedef te-bandwidth {
    type string {
      pattern
        '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
      + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
      + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+'
      + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
      + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
      + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*';
    }
    description
      "This is the generic bandwidth type that is a string containing
       a list of numbers separated by commas, with each of these
       number can be non-negative decimal, hex integer, or hex float:
       (dec | hex | float)[*(','(dec | hex | float))]
       For packet switching type, a float number is used, such as
       0x1p10.
       For OTN switching type, a list of integers can be used, such
       as '0,2,3,1', indicating 2 odu0's and 1 odu3.
       For DWDM, a list of pairs of slot number and width can be
       used, such as '0, 2, 3, 3', indicating a frequency slot 0 with
       slot width 2 and a frequency slot 3 with slot width 3.";
  } // te-bandwidth

  typedef te-info-source {
    type enumeration {
      enum "unknown" {
        description "The source is unknown.";
      }
      enum "locally-configured" {
        description "Configured entity.";
      }
      enum "ospfv2" {
        description "OSPFv2.";
      }
      enum "ospfv3" {
        description "OSPFv3.";
      }
      enum "isis" {
        description "ISIS.";
      }
      enum "bgp-ls" {
        description "BGP-LS.";
        reference
          "RFC7752: North-Bound Distribution of Link-State and
           Traffic Engineering (TE) Information Using BGP";
      }
      enum "system-processed" {
        description "System processed entity.";
      }
      enum "other" {
        description "Other source.";
      }
    }
    description
      "Describining the type of source that has provided the
       related information, and the source credibility.";
  } // te-info-source

  typedef te-path-disjointness {
    type bits {
      bit node {
        position 0;
        description "Node disjoint.";
      }
      bit link {
        position 1;
        description "Link disjoint.";
      }
      bit srlg {
        position 2;
        description "SRLG (Shared Risk Link Group) disjoint.";
      }
    }
    description
      "Type of the resource disjointness for a TE tunnel path.";
    reference
      "RFC4872: RSVP-TE Extensions in Support of End-to-End
       Generalized Multi-Protocol Label Switching (GMPLS)
       Recovery";
  } // te-path-disjointness

  /*
   * Groupings
   */
  grouping connectivity-label-restriction-list {
    description
      "List of abel restrictions specifying what labels may or may
       not be used on a link connectivity.";
    list label-restriction {
      key "inclusive-exclusive label-start";
      description
        "List of abel restrictions specifying what labels may or may
         not be used on a link connectivity.";
      reference
        "RFC7579: General Network Element Constraint Encoding
         for GMPLS-Controlled Networks";
      leaf inclusive-exclusive {
        type enumeration {
          enum inclusive {
            description "The label or label range is inclusive.";
          }
          enum exclusive {
            description "The label or label range is exclusive.";
          }
        }
        description
          "Whether the list item is inclusive or exclusive.";
      }
      leaf label-start {
        type te-types:generalized-label;
        description
          "This is the starting lable if a lable range is specified.
           This is the lable value if a single lable is specified,
           in which case, attribute 'label-end' is not set.";
      }
      leaf label-end {
        type te-types:generalized-label;
        description
          "The ending lable if a lable range is specified;
           This attribute is not set, If a single lable is
           specified.";
      }
      leaf range-bitmap {
        type binary;
        description
          "When there are gaps between label-start and label-end,
           this attribute is used to specified the possitions
           of the used labels.";
      }
    }
  } // connectivity-label-restrictions

  grouping connectivity-matrix-entry-attributes {
    description
      "Attributes of connectivity matrix entry.";
    leaf is-allowed {
      type boolean;
      description
        "true  - switching is allowed,
         false - switching is disallowed.";
    }
    uses connectivity-label-restriction-list;
    container underlay {
      if-feature te-topology-hierarchy;
      presence
        "Indicates the underlay exists for this link.";
      description "Attributes of the te-link underlay.";
      reference
        "RFC4206: Label Switched Paths (LSP) Hierarchy with
         Generalized Multi-Protocol Label Switching (GMPLS)
         Traffic Engineering (TE)";
      
      uses te-link-underlay-attributes;
    } // underlay
    uses te-link-iscd-attributes;
    uses te-link-connectivity-attributes;
  } // connectivity-matrix-entry-attributes

  grouping geolocation-container {
    description
      "A container containing a GPS location.";
    container geolocation{
      description
        "A container containing a GPS location.";
      leaf altitude {
        type int64;
        units millimeter;
        description
          "Distance above the sea level.";
      }
      leaf latitude {
        type geographic-coordinate-degree {
          range "-90..90";
        }
        description
          "Relative position north or south on the Earth's surface.";
      }
      leaf longitude {
        type geographic-coordinate-degree {
          range "-180..180";
        }
        description
          "Angular distance east or west on the Earth's surface.";
      }
    } // gps-location
  } // geolocation-container

  grouping information-source-state-attributes {
    description
      "The attributes identifying source that has provided the
       related information, and the source credibility.";
    leaf credibility-preference {
      type uint16;
      description
        "The preference value to calculate the traffic
         engineering database credibility value used for
         tie-break selection between different
         information-source values.
         Higher value is more 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.";
    } // logical-network-element
    leaf network-instance {
      type string;
      description
        "When applicable, this is the name of a network-instance
         from which the information is learned.";
    } // network-instance
  } // information-source-state-attributes

  grouping information-source-per-link-attributes {
    description
      "Per node container of the attributes identifying source that
       has provided the related information, and the source
       credibility.";
    leaf information-source {
      type te-info-source;
      description
        "Indicates the source of the information.";
    }
    container information-source-state {
      description
        "The container contains state attributes related to
         the information source.";
      uses information-source-state-attributes;
      container topology {
        description
          "When the information is processed by the system,
           the attributes in this container indicate which topology
           is used to process to generate the result information.";
        uses te-topology-ref;
        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 reference to a link-id.";
        }
      } // topology
    } // information-source-state
  } // information-source-per-link-attributes

  grouping information-source-per-node-attributes {
    description
      "Per node container of the attributes identifying source that
       has provided the related information, and the source
       credibility.";
    leaf information-source {
      type te-info-source;
      description
        "Indicates the source of the information.";
    }
    container information-source-state {
      description
        "The container contains state attributes related to
         the information source.";
      uses information-source-state-attributes;
      container topology {
        description
          "When the information is processed by the system,
           the attributes in this container indicate which topology
           is used to process to generate the result information.";
        uses te-topology-ref;
        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
            "A reference to a node-id.";
        }
      } // topology
    } // information-source-state
  } // information-source-per-node-attributes

  grouping interface-switching-capability-list {
    description
      "List of Interface Switching Capabilities Descriptors (ISCD)";

    list interface-switching-capability {
      key "switching-capability";
      description
        "List of Interface Switching Capabilities Descriptors (ISCD)
         for this link.";
      reference
        "RFC3471: Generalized Multi-Protocol Label Switching (GMPLS)
         Signaling Functional Description.
         RFC4203: 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.";
      }
      uses te-link-iscd-attributes;
    } // interface-switching-capability
  } // interface-switching-capability-list

  grouping statistics-per-link {
    description
      "Statistics attributes per TE link.";
    leaf discontinuity-time {
      type yang:date-and-time;
      mandatory true;
      description
        "The time on 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.";
    }
    /* Administrative attributes */
    leaf disables {
      type yang:counter32;
      description
        "Number of times that link was disabled.";
    }
    leaf enables {
      type yang:counter32;
      description
        "Number of times that link was enabled.";
    }
    leaf maintenance-clears {
      type yang:counter32;
      description
        "Number of times that link was put out of maintenance.";
    }
    leaf maintenance-sets {
      type yang:counter32;
      description
        "Number of times that link was put in maintenance.";
      }
    leaf modifies {
      type yang:counter32;
      description
        "Number of times that link was modified.";
    }
    /* Operational attributes */
    leaf downs {
      type yang:counter32;
      description
        "Number of times that link was set to operational down.";
    }
    leaf ups {
      type yang:counter32;
      description
        "Number of times that link was set to operational up.";
    }
    /* Recovery attributes */
    leaf fault-clears {
      type yang:counter32;
      description
        "Number of times that link experienced fault clear event.";
    }
    leaf fault-detects {
      type yang:counter32;
      description
        "Number of times that link experienced fault detection.";
    }
    leaf protection-switches {
      type yang:counter32;
      description
        "Number of times that link experienced protection
         switchover.";
    }
    leaf protection-reverts {
      type yang:counter32;
      description
        "Number of times that link experienced protection
         reversion.";
    }
    leaf restoration-failures {
      type yang:counter32;
      description
        "Number of times that link experienced restoration
         failure.";
    }
    leaf restoration-starts {
      type yang:counter32;
      description
        "Number of times that link experienced restoration
         start.";
    }
    leaf restoration-successes {
      type yang:counter32;
      description
        "Number of times that link experienced restoration
         success.";
    }
    leaf restoration-reversion-failures {
      type yang:counter32;
      description
        "Number of times that link experienced restoration reversion
         failure.";
    }
    leaf restoration-reversion-starts {
      type yang:counter32;
      description
        "Number of times that link experienced restoration reversion
         start.";
    }
    leaf restoration-reversion-successes {
      type yang:counter32;
      description
        "Number of times that link experienced restoration reversion
         success.";
    }
  } // statistics-per-link

  grouping statistics-per-node {
    description
      "Statistics attributes per TE node.";
    leaf discontinuity-time {
      type yang:date-and-time;
      mandatory true;
      description
        "The time on 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
        "Containing TE node level statistics attributes.";
      leaf disables {
        type yang:counter32;
        description
          "Number of times that node was disabled.";
      }
      leaf enables {
        type yang:counter32;
        description
          "Number of times that node was enabled.";
      }
      leaf maintenance-sets {
        type yang:counter32;
        description
          "Number of times that node was put in maintenance.";
      }
      leaf maintenance-clears {
        type yang:counter32;
        description
          "Number of times that node was put out of maintenance.";
      }
      leaf modifies {
        type yang:counter32;
        description
          "Number of times that node was modified.";
      }
    } // node
    container connectivity-matrix-entry {
      description
        "Containing connectivity matrix entry level statistics
         attributes.";
      leaf creates {
        type yang:counter32;
        description
          "Number of times that a connectivity matrix entry was
           created.";
        reference
          "RFC6241. Section 7.2 for 'create' operation. ";
      }
      leaf deletes {
        type yang:counter32;
        description
          "Number of times that a connectivity matrix entry was
           deleted.";
        reference
          "RFC6241. Section 7.2 for '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.";
      }
    } // connectivity-matrix-entry
  } // statistics-per-node

  grouping statistics-per-ttp {
    description
      "Statistics attributes per TE TTP (Tunnel Termination Point).";
    leaf discontinuity-time {
      type yang:date-and-time;
      mandatory true;
      description
        "The time on 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
        "Containing TE TTP (Tunnel Termination Point) level
         statistics attributes.";
      /* Administrative attributes */
      leaf disables {
        type yang:counter32;
        description
          "Number of times that TTP was disabled.";
      }
      leaf enables {
        type yang:counter32;
        description
          "Number of times that TTP was enabled.";
      }
      leaf maintenance-clears {
        type yang:counter32;
        description
          "Number of times that TTP was put out of maintenance.";
      }
      leaf maintenance-sets {
        type yang:counter32;
        description
          "Number of times that TTP was put in maintenance.";
      }
      leaf modifies {
        type yang:counter32;
        description
          "Number of times that TTP was modified.";
      }
      /* Operational attributes */
      leaf downs {
        type yang:counter32;
        description
          "Number of times that TTP was set to operational down.";
      }
      leaf ups {
        type yang:counter32;
        description
          "Number of times that TTP was set to operational up.";
      }
      leaf in-service-clears {
        type yang:counter32;
        description
          "Number of times that TTP was taken out of service
           (TE tunnel was released).";
      }
      leaf in-service-sets {
        type yang:counter32;
        description
          "Number of times that TTP was put in service by a TE
           tunnel (TE tunnel was set up).";
      }
    } // tunnel-termination-point

    container local-link-connectivity {
      description
        "Containing TE LLCL (Local Link Connectivity List) level
         statistics attributes.";
      leaf creates {
        type yang:counter32;
        description
          "Number of times that an LLCL entry was created.";
        reference
          "RFC6241. Section 7.2 for 'create' operation. ";
      }
      leaf deletes {
        type yang:counter32;
        description
          "Number of times that an LLCL entry was deleted.";
        reference
          "RFC6241. Section 7.2 for '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.";
      }
    } // local-link-connectivity
  } // statistics-per-ttp

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

    container te {
      must "count(../nt:supporting-link)<=1" {
        description
          "For a link in a TE topology, there cannot be more
           than 1 supporting link. If one or more link paths are
           abstracted, the underlay is used.";
      }
      presence "TE support.";
      description
        "Indicates TE support.";

      container config {
        description
          "Configuration data.";
        uses te-link-config;
      } // config
      container state {
        config false;
        description
          "Operational state data.";
        uses te-link-config;
        uses te-link-state-derived;
      } // state
      container statistics {
        config false;
        description
          "Statistics data.";
        uses statistics-per-link;
      } // statistics
    } // te
  } // te-link-augment

  grouping te-link-config {
    description
      "TE link configuration grouping.";
    choice bundle-stack-level {
      description
        "The TE link can be partitioned into bundled
         links, or component links.";
      case bundle {
        container bundled-links {
          description
            "A set of bundled links.";
          reference
            "RFC4201: Link Bundling in MPLS Traffic Engineering
            (TE).";
          list bundled-link {
            key "sequence";
            description
              "Specify a bundled interface that is
               further partitioned.";
            leaf sequence {
              type uint32;
              description
                "Identify 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 souruce 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
        }
      }
      case component {
        container component-links {
          description
            "A set of component links";
          list component-link {
            key "sequence";
            description
              "Specify a component interface that is
               sufficient to unambiguously identify the
               appropriate resources";

            leaf sequence {
              type uint32;
              description
                "Identify the sequence in the bundle.";
            }
            leaf src-interface-ref {
              type string;
              description
                "Reference to component link interface on the
                 source node.";
            }
            leaf des-interface-ref {
              type string;
              description
                "Reference to component link interface on the
                 destinatioin node.";
            }
          }
        }
      }
    } // 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.";
    }
    uses te-link-config-attributes;
  } // te-link-config

  grouping te-link-config-attributes {
    description
      "Link configuration attributes in a TE topology.";
    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, specify the attributes of
           the remote end of link, to facilitate the signalling at
           local end.";
        uses te-topology-ref;
        leaf remote-te-node-id {
          type te-types:te-node-id;
          description
            "Remote TE node identifier, used together with
             remote-te-link-id to identify the remote link
             termination point in a different domain.";
        }
        leaf remote-te-link-tp-id {
          type te-types:te-tp-id;
          description
            "Remote TE link termination point identifier, used
             together with remote-te-node-id to identify the remote
             link termination point in a different domain.";
        }
        leaf plug-id {
          type uint32;
          description
            "A topology-wide unique number that identifies on the
             network a connectivity supporting a given inter-domain
             TE link. This is more flexible alternative to specifying
             remote-te-node-id and remote-te-link-tp-id, when the
             provider does not know remote-te-node-id and
             remote-te-link-tp-id or need to give client the
             flexibility to mix-n-match multiple topologies.";
        }
      }
      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;
        presence
          "Indicates the underlay exists for this link.";
        description "Attributes of the te-link underlay.";
        reference
          "RFC4206: Label Switched Paths (LSP) Hierarchy with
           Generalized Multi-Protocol Label Switching (GMPLS)
           Traffic Engineering (TE)";

        uses te-link-underlay-attributes;
      } // underlay
      leaf admin-status {
        type te-types:te-admin-status;
        description
          "The administrative state of the link.";
      }

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

  grouping te-link-connectivity-attributes {
    description
      "Advertised TE connectivity attributes.";
    leaf max-link-bandwidth {
      type te-bandwidth;
      description
        "Maximum bandwidth that can be seen on this link in this
         direction. Units in bytes per second.";
      reference
        "RFC3630: Traffic Engineering (TE) Extensions to OSPF
         Version 2.
         RFC5305: IS-IS Extensions for Traffic Engineering.";
    }
    leaf max-resv-link-bandwidth {
      type te-bandwidth;
      description
        "Maximum amount of bandwidth that can be reserved in this
         direction in this link. Units in bytes per second.";
      reference
        "RFC3630: Traffic Engineering (TE) Extensions to OSPF
         Version 2.
         RFC5305: IS-IS Extensions for Traffic Engineering.";
    }
    list unreserved-bandwidth {
      key "priority";
      max-elements "8";
      description
        "Unreserved bandwidth for 0-7 priority levels. Units in
         bytes per second.";
      reference
        "RFC3630: Traffic Engineering (TE) Extensions to OSPF
         Version 2.
         RFC5305: IS-IS Extensions for Traffic Engineering.";
      leaf priority {
        type uint8 {
          range "0..7";
        }
        description "Priority.";
      }
      leaf bandwidth {
        type te-bandwidth;
        description
          "Unreserved bandwidth for this level.";
      }
    }
    leaf te-default-metric {
      type uint32;
      description
        "Traffic engineering metric.";
    }
    leaf te-delay-metric {
      type uint32;
      description
        "Traffic engineering delay metric.";
    }
    container te-srlgs {
      description
        "Containing a list of SLRGs.";
      leaf-list value {
        type te-types:srlg;
        description "SRLG value.";
        reference
          "RFC4202: Routing Extensions in Support of
           Generalized Multi-Protocol Label Switching (GMPLS).";
      }
    }
    container te-nsrlgs {
      if-feature nsrlg;
      description
        "Containing a list of NSRLGs (Not Sharing 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
          "RFC4872: RSVP-TE Extensions in Support of End-to-End
           Generalized Multi-Protocol Label Switching (GMPLS)
           Recovery";
      }
    }
  } // te-link-connectivity-attributes

  grouping te-link-info-attributes {
    description
      "Advertised TE information attributes.";
    leaf link-index {
      type uint64;
      description
        "The link identifier.  If OSPF is used, this represents an
         ospfLsdbID.  If IS-IS is used, this represents an isisLSPID.
         If a locally configured link is used, this object represents
         a unique value, which is locally defined in a router.";
    }
    leaf administrative-group {
      type te-types:admin-groups;
      description
        "Administrative group or color of the link.
         This attribute covers both administrative group (defined in
         RFC3630, RFC5329, and RFC5305), and extended administrative
         group (defined in RFC7308).";
    }
    uses interface-switching-capability-list;
    leaf link-protection-type {
      type enumeration {
        enum "unprotected" {
          description "Unprotected.";
        }
        enum "extra-traffic" {
          description "Extra traffic.";
        }
        enum "shared" {
          description "Shared.";
        }
        enum "1-for-1" {
          description "One for one protection.";
        }
        enum "1-plus-1" {
          description "One plus one protection.";
        }
        enum "enhanced" {
          description "Enhanced protection.";
        }
      }
      description
        "Link Protection Type desired for this link.";
      reference
        "RFC4202: Routing Extensions in Support of
         Generalized Multi-Protocol Label Switching (GMPLS).";
    }
    uses te-link-connectivity-attributes;
  } // te-link-info-attributes

  grouping te-link-iscd-attributes {
    description
      "TE link ISCD (Interface Switching Capability Descriptor)
       attributes.";
    reference
      "Sec 1.4, RFC4203: OSPF Extensions in Support of Generalized
       Multi-Protocol Label Switching (GMPLS). Section 1.4.";
    list max-lsp-bandwidth {
      key "priority";
      max-elements "8";
      description
        "Maximum LSP Bandwidth at priorities 0-7.";
      leaf priority {
        type uint8 {
          range "0..7";
        }
        description "Priority.";
      }
      leaf bandwidth {
        type te-bandwidth;
        description
          "Max LSP Bandwidth for this level";
      }
    }
  } // te-link-iscd-attributes

  grouping te-link-state-derived {
    description
      "Link state attributes in a TE topology.";
    leaf oper-status {
      type te-types:te-oper-status;
      description
        "The current operational state of the link.";
    }
    leaf is-transitional {
      type empty;
      description
        "Present if the link is transitional, used as an
         alternative approach in lieu of inter-layer-lock-id
         for path computation in a TE topology covering multiple
         layers or multiple regions.";
      reference
        "RFC5212: Requirements for GMPLS-Based Multi-Region and
         Multi-Layer Networks (MRN/MLN).
         RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
    }
    uses information-source-per-link-attributes;
    list information-source-entry {
      key "information-source";
      description
        "A list of information sources learned, including the one
         used.";
      uses information-source-per-link-attributes;
      uses te-link-info-attributes;
    }
    container recovery {
      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 underlay {
      if-feature te-topology-hierarchy;
      description "State attributes for te-link underlay.";
      uses te-link-state-underlay-attributes;
    }
  } // te-link-state-derived

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

  grouping te-link-underlay-attributes {
    description "Attributes for  te-link underlay.";
    reference
      "RFC4206: Label Switched Paths (LSP) Hierarchy with
       Generalized Multi-Protocol Label Switching (GMPLS)
       Traffic Engineering (TE)";
    container primary-path {
      description
        "The service path on the underlay topology that
         supports this link.";
      uses te-topology-ref;
      list path-element {
        key "path-element-id";
        description
          "A list of path elements describing the service path.";
        leaf path-element-id {
          type uint32;
          description "To identify the element in a path.";
        }
        uses te-path-element;
      }
    } // 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.";
      }
      uses te-topology-ref;
      list path-element {
        key "path-element-id";
        description
          "A list of path elements describing the backup service
           path";
        leaf path-element-id {
          type uint32;
          description "To identify the element in a path.";
        }
        uses te-path-element;
      }
    } // underlay-backup-path
    leaf protection-type {
      type uint16;
      description
        "Underlay protection type desired for this link";
    }
    container tunnel-src {
      uses te-tunnel-tp-ref;
      description
        "Source tunnel termination point of the underlay
         tunnel.";
    }
    container tunnel-des {
      uses te-tunnel-tp-ref;
      description
        "Destination tunnel termination point of the underlay
         tunnel.";
    }
    leaf tunnel-id {
      type uint16;
      description
        "Tunnel identifier used in the SESSION that remains constant
         over the life of the tunnel.
         This attribute is used together with underlay tunnel-src
         and underlay tunnel-src.
         The detailed information of this tunnel can be retrieved
         from the ietf-te model.";
      reference "RFC3209";
    }
    leaf tunnel-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.";
    }
  } // te-link-underlay-attributes

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

    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 1 supporting node. If multiple nodes are abstracted,
           the underlay-topology is used.";
      }
      presence "TE support.";
      description
        "Indicates TE support.";

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

        uses te-node-config;
        uses te-node-state-derived;
      } // state
      container statistics {
        config false;
        description
          "Statistics data.";
        uses statistics-per-node;
      } // statistics

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

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

          uses te-node-tunnel-termination-attributes;
          uses geolocation-container;
        } // state
        container statistics {
          config false;
          description
            "Statistics data.";
          uses statistics-per-ttp;
        } // statistics
        
        // Relations to other tunnel termination points
        list supporting-tunnel-termination-point {
//          key "node-ref tunnel-tp-ref";
          key "network-ref node-ref tunnel-tp-ref";
          description
            "Identifies the tunnel termination points, that this
             tunnel termination point is depending on.";
//          leaf node-ref {
//            type leafref {
//              path "../../../../nw:supporting-node/nw:node-ref";
//              require-instance false;
//            }
//            description
//              "This leaf identifies in which node the supporting
//               tunnel termination point is present.";
//          }
          uses nw:node-ref;
          leaf tunnel-tp-ref {
            type leafref {
              path "/nw:networks/nw:network"+
                "[nw:network-id="+
                "current()/../../../../nw:supporting-node/"+
                "nw:network-ref]/"+
                "nw:node[nw:node-id=current()/../node-ref]/te/"+
                "tunnel-termination-point/tunnel-tp-id";
              require-instance false;
            }
            description
              "Reference to the underlay node, must be in a
               different topology";
          }
        } // supporting-tunnel-termination-point
      } // tunnel-termination-point
    } // te
  } // te-node-augment

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

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

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

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

  grouping te-node-connectivity-matrix {
    description "Connectivity matrix on a TE node.";
    container connectivity-matrices {
      description
        "Containing connectivity matrix on a TE node.";
      leaf number-of-entries {
        type uint16;
        description
          "The number of connectivity matrix entries.
           If this number is speficied in the configuration request,
           the number is 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.";
      }
      uses connectivity-matrix-entry-attributes;
      list connectivity-matrix {
        key "id";
        description
          "Represents node's switching limitations, i.e. limitations
           in interconnecting network TE links across the node.";
        reference
          "RFC7579: General Network Element Constraint Encoding
           for GMPLS-Controlled Networks.";
        leaf id {
          type uint32;
          description "Identifies the connectivity-matrix entry.";
        }
        container from {
          leaf tp-ref {
            type leafref {
              path "../../../../../../../nt:termination-point/"+
                "nt:tp-id";
            }
            description
              "Relative reference to source termination point.";
          }
          description
            "Reference to source NTP.";
        }
        container to {
          leaf tp-ref {
            type leafref {
              path "../../../../../../../nt:termination-point/"+
                "nt:tp-id";
            }
            description
              "Relative reference to destination termination point.";
          }
          description
            "Reference to destination NTP.";
        }
        uses connectivity-matrix-entry-attributes;
      } // connectivity-matrix
    } // connectivity-matrices
  } // te-node-connectivity-matrix

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

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

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

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

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

    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 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
        "RFC5212: Requirements for GMPLS-Based Multi-Region and
         Multi-Layer Networks (MRN/MLN).
         RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
    }
    leaf protection-type {
      type identityref {
        base te-types:lsp-prot-type;
      }
      description
        "The protection type that this tunnel termination point
         is capable of.";
    }

    container local-link-connectivities {
      description
        "Containing local link connectivity list for
         a tunnel termination point on a TE node.";
      leaf number-of-entries {
        type uint16;
        description
          "The number of local link connectivity list entries.
           If this number is speficied in the configuration request,
           the number is 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.";
      }
      uses connectivity-matrix-entry-attributes;
      list local-link-connectivity {
        key "link-tp-ref";
        description
          "The termination capabilities between
           tunnel-termination-point and link termination-point.
           The capability information can be used to compute
           the tunnel path.
           The Interface Adjustment Capability Descriptors (IACD)
           [RFC6001] on each link-tp can be derived from this
           local-link-connectivity list.";
        reference
          "RFC6001: 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
            "Link termination point.";
        }
        
        uses connectivity-matrix-entry-attributes;
      } // local-link-connectivity
    } // local-link-connectivities
  } // te-node-tunnel-termination-attributes

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

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

    leaf te-tp-id {
      type te-types:te-tp-id;
      description
        "An identifier to uniquely identify a TE termination
         point.";
    }

    container te {
      must "../te-tp-id";
      presence "TE support.";
      description
        "Indicates TE support.";

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

  grouping te-termination-point-config {
    description
      "TE termination point configuration grouping.";
    uses interface-switching-capability-list;
    leaf 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
        "RFC5212: Requirements for GMPLS-Based Multi-Region and
         Multi-Layer Networks (MRN/MLN).
         RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
    }
  } // te-termination-point-config

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

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

      container templates {
        description
          "Configuration parameters for templates used for TE
           topology.";

        list node-template {
          if-feature template;
          key "name";
          leaf name {
            type te-types:te-template-name;
            description
              "The name to identify a TE node template.";
          }
          description
            "The list of TE node templates used to define sharable
             and reusable TE node attributes.";
          uses template-attributes;
          uses te-node-config-attributes-template;
        } // node-template

        list link-template {
          if-feature template;
          key "name";
          leaf name {
            type te-types:te-template-name;
            description
              "The name to identify a TE link template.";
          }
          description
            "The list of TE link templates used to define sharable
             and reusable TE link attributes.";
          uses template-attributes;
          uses te-link-config-attributes;
        } // link-template
      } // templates
    } // te
  } // te-topologies-augment

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

    leaf provider-id {
      type te-types:te-global-id;
      description
        "An identifier to uniquely identify a provider.";
    }
    leaf client-id {
      type te-types:te-global-id;
      description
        "An identifier to uniquely identify a client.";
    }
    leaf te-topology-id {
      type te-types:te-topology-id;
      description
        "It is presumed that a datastore will contain many
         topologies. To distinguish between topologies it is
         vital to have UNIQUE topology identifiers.";
    }

    container te {
      must "../provider-id and ../client-id and ../te-topology-id";
      presence "TE support.";
      description
        "Indicates TE support.";

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

  grouping te-topology-config {
    description
      "TE topology configuration grouping.";
    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:te-optimization-criterion;
      }
      description
        "Optimization criterion applied to this topology.";
      reference
        "RFC3272: Overview and Principles of Internet Traffic
         Engineering.";
    }
    list nsrlg {
      if-feature nsrlg;
      key "id";
      description
        "List of NSRLGs (Not Sharing Risk Link Groups).";
      reference
        "RFC4872: RSVP-TE Extensions in Support of End-to-End
         Generalized Multi-Protocol Label Switching (GMPLS)
         Recovery";
      leaf id {
        type uint32;
        description
          "Identify the NSRLG entry.";
      }
      leaf disjointness {
        type te-path-disjointness;
        description
          "The type of resource disjointness.";
      }
    } // nsrlg
  } // te-topology-config

  grouping te-topology-ref {
    description
      "References a TE topology.";
    leaf network-ref {
      type leafref {
        path "/nw:networks/nw:network/nw:network-id";
        require-instance false;
      }
      description
        "A reference to a network-id in base ietf-network module.";
    }
  } // te-topology-ref

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

  grouping te-tunnel-tp-ref {
    description
      "References a tunnel termination point in a TE topology.";
    leaf tunnel-tp-ref {
      type leafref {
        path "/nw:networks/nw:network[nw:network-id=current()/../"+
          "network-ref]/nw:node[nw:node-id=current()/../node-ref]/"+
          "te/tunnel-termination-point/tunnel-tp-id";
        require-instance false;
      }
      description
        "An absolute reference to a tunnel termination point.
         (This should not be used for relative references.
         In such a case, a relative path should be used instead.)";
    }
    uses nw:node-ref;
  } // te-tunnel-tp-ref

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

    leaf priority {
      type uint16;
      description
        "The preference value to resolve conflicts between different
         templates. When two or more templates specify values for
         one configuration attribute, the value from the template
         with the highest priority is used.";
    }
    leaf reference-change-policy {
      type enumeration {
        enum no-action {
          description
            "When an attribute changes in this template, the
             configuration node referring to this template does
             not take any action.";
        }
        enum not-allowed {
          description
            "When any configuration object has a reference to this
             template, changing this template is not allowed.";
        }
        enum cascade {
          description
            "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 to a configuration
         node that has a reference to this template.";
    }
  } // template-attributes

  /*
   * Configuration data nodes
   */
  augment "/nw:networks/nw:network/nw:network-types" {
    description
      "Introduce new network type for TE topology.";
    uses te-topology-type;
  }

  augment "/nw:networks" {
    description
      "Augmentation parameters for TE topologies.";
    uses te-topologies-augment;
  }

  augment "/nw:networks/nw:network" {
    when "nw:network-types/te-topology" {
      description
        "Augmentation parameters apply only for networks with
         TE topology type.";
    }
    description
      "Configuration parameters for TE topology.";
    uses te-topology-augment;
  }

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

  augment "/nw:networks/nw:network/nt:link" {
    when "../nw:network-types/te-topology" {
      description
        "Augmentation parameters apply only for networks with
         TE topology type.";
    }
    description
      "Configuration parameters for TE at link level";
    uses te-link-augment;
  }

  augment "/nw:networks/nw:network/nw:node/"
        + "nt:termination-point" {
    when "../../nw:network-types/te-topology" {
      description
        "Augmentation parameters apply only for networks with
         TE topology type.";
    }
    description
      "Configuration parameters for TE at termination point level";
    uses te-termination-point-augment;
  }

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

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

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

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

}
