   module ietf-te-topology {
     yang-version 1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
     // replace with IANA namespace when assigned

     prefix "tet";

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

     import ietf-schedule {
       prefix "sch";
     }

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

     import ietf-network {
       prefix "nw";
     }

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

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

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

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

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

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

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

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

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

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

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

     description "TE topology model";

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

     /*
      * Features
      */

     feature configuration-schedule {
       description
         "This feature indicates that the system supports
          configuration scheduling.";
     }

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

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

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

     /*
      * Typedefs
      */
     typedef performance-metric-normality {
       type enumeration {
         enum "unknown" {
           value 0;
           description
             "Unknown.";
         }
         enum "normal" {
           value 1;
           description
             "Normal.";
         }
         enum "abnormal" {
           value 2;
           description
             "Abnormal. The anomalous bit is set.";
         }
       }
       description
         "Indicates whether a performance metric is normal, abnormal, or
          unknown.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
     }

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

     typedef te-link-access-type {
       type enumeration {
         enum point-to-point {
           description
             "The link is point-to-point.";
         }
         enum multi-access {
           description
             "The link is multi-access, including broacast and NBMA.";
         }
       }
       description
         "Defines a type representing the access type of a TE link.";
       reference
         "RFC3630: Traffic Engineering (TE) Extensions to OSPF
          Version 2.";
     }

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

     typedef te-oper-status {
       type enumeration {
         enum up {
           description
           "Operational up.";
         }
         enum down {
           description
           "Operational down.";
         }
         enum testing {
           description
           "In some test mode.";
         }
         enum unknown {
           description
           "Status cannot be determined for some reason.";
         }
         enum preparing-maintenance {
           description
             "Resource is disabled in the control plane to prepare for
              graceful shutdown for maintenance purposes.";
           reference
             "RFC5817: Graceful Shutdown in MPLS and Generalized MPLS
              Traffic Engineering Networks";
         }
         enum maintenance {
           description
             "Resource is disabled in the data plane for maintenance
              purposes.";
         }
       }
       description
         "Defines a type representing the operational status of
          a TE resource.";
     }

     typedef te-recovery-status {
       type enumeration {
         enum normal {
           description
             "Both the recovery and working spans are fully
              allocated and active, data traffic is being
              transported over (or selected from) the working
              span, and no trigger events are reported.";
         }
         enum recovery-started {
           description
             "The recovery action has been started, but not completed.";
         }
         enum recovery-succeeded {
           description
             "The recovery action has succeeded. The working span has
              reported a failure/degrade condition and the user traffic
              is being transported (or selected) on the recovery span.";
         }
         enum recovery-failed {
           description
             "The recovery action has failed.";
         }
         enum reversion-started {
           description
             "The reversion has started.";
         }
         enum reversion-failed {
           description
             "The reversion has failed.";
         }
         enum recovery-unavailable {
           description
             "The recovery is unavailable -- either as a result of an
              operator Lockout command or a failure condition detected
              on the recovery span.";
         }
         enum recovery-admin {
           description
             "The operator has issued a command switching the user
              traffic to the recovery span.";
         }
         enum wait-to-restore {
           description
             "The recovery domain is recovering from a failuer/degrade
              condition on the working span that is being controlled by
              the Wait-to-Restore (WTR) timer.";
         }
       }
       description
         "Defines the status of a recovery action.";
       reference
         "RFC4427: Recovery (Protection and Restoration) Terminology
          for Generalized Multi-Protocol Label Switching (GMPLS).
          RFC6378: MPLS Transport Profile (MPLS-TP) Linear Protection";
     }

     typedef te-template-name {
       type string {
         pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
       }
       description
         "A type for the name of a TE node template or TE link
          template.";
     }

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

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

     /*
      * Identities
      */

     /*
      * Groupings
      */
     grouping information-source-attributes {
       description
         "The attributes identifying source that has provided the
          related information, and the source credibility.";
       leaf information-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 "system-processed" {
             description "System processed entity.";
           }
           enum "other" {
             description "Other source.";
           }
         }
         description
           "Indicates the source of the information.";
       }
       container information-source-state {
         description
           "The container contains state attributes related to
            the information source.";
         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.";
         }
         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;
         } // topology
         leaf routing-instance {
           type string;
           description
             "When applicable, this is the name of a routing instance
              from which the information is learned.";
         } // routing-information
       }
     } // information-source-attributes

     grouping performance-metric-attributes {
       description
         "Link performance information in real time.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
       leaf unidirectional-delay {
         type uint32 {
           range 0..16777215;
         }
         description "Delay or latency in micro seconds.";
       }
       leaf unidirectional-min-delay {
         type uint32 {
           range 0..16777215;
         }
         description "Minimum delay or latency in micro seconds.";
       }
       leaf unidirectional-max-delay {
         type uint32 {
           range 0..16777215;
         }
         description "Maximum delay or latency in micro seconds.";
       }
       leaf unidirectional-delay-variation {
         type uint32 {
           range 0..16777215;
         }
         description "Delay variation in micro seconds.";
       }
       leaf unidirectional-packet-loss {
         type decimal64 {
           fraction-digits 6;
           range "0 .. 50.331642";
         }
         description
           "Packet loss as a percentage of the total traffic sent
            over a configurable interval. The finest precision is
            0.000003%.";
       }
       leaf unidirectional-residual-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         description
           "Residual bandwidth that subtracts tunnel
            reservations from Maximum Bandwidth (or link capacity)
            [RFC3630] and provides an aggregated remainder across QoS
            classes.";
       }
       leaf unidirectional-available-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         description
           "Available bandwidth that is defined to be residual
            bandwidth minus the measured bandwidth used for the
            actual forwarding of non-RSVP-TE LSP packets.  For a
            bundled link, available bandwidth is defined to be the
            sum of the component link available bandwidths.";
       }
       leaf unidirectional-utilized-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         description
           "Bandwidth utilization that represents the actual
            utilization of the link (i.e. as measured in the router).
            For a bundled link, bandwidth utilization is defined to
            be the sum of the component link bandwidth
            utilizations.";
       }
     } // performance-metric-attributes
     grouping performance-metric-normality-attributes {
       description
         "Link performance metric normality attributes.";
       reference
         "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
       leaf unidirectional-delay {
         type performance-metric-normality;
         description "Delay normality.";
       }
       leaf unidirectional-min-delay {
         type performance-metric-normality;
         description "Minimum delay or latency normality.";
       }
       leaf unidirectional-max-delay {
         type performance-metric-normality;
         description "Maximum delay or latency normality.";
       }
       leaf unidirectional-delay-variation {
         type performance-metric-normality;
         description "Delay variation normality.";
       }
       leaf unidirectional-packet-loss {
         type performance-metric-normality;
         description "Packet loss normality.";
       }
       leaf unidirectional-residual-bandwidth {
         type performance-metric-normality;
         description "Residual bandwidth normality.";
       }
       leaf unidirectional-available-bandwidth {
         type performance-metric-normality;
         description "Available bandwidth normality.";
       }
       leaf unidirectional-utilized-bandwidth {
         type performance-metric-normality;
         description "Bandwidth utilization normality.";
       }
     } // performance-metric-normality-attributes

     grouping performance-metric-throttle-container {
       description
         "A container controlling performance metric throttle.";
       container performance-metric-throttle {
         if-feature te-performance-metric;
         must "suppression-interval >= measure-interval" {
           error-message
             "suppression-interval cannot be less then
              measure-interval.";
           description
             "Constraint on suppression-interval and
              measure-interval.";
         }
         description
           "Link performance information in real time.";
         reference
           "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
         leaf unidirectional-delay-offset {
           type uint32 {
             range 0..16777215;
           }
           description
             "Offset value to be added to the measured delay value.";
         }
         leaf measure-interval {
           type uint32;
           default 30;
           description
             "Interval in seconds to measure the extended metric
              values.";
         }
         leaf advertisement-interval {
           type uint32;
           description
             "Interval in seconds to advertise the extended metric
              values.";
         }
         leaf suppression-interval {
           type uint32 {
             range "1 .. max";
           }
           default 120;
           description
             "Interval in seconds to suppress advertising the extended
              metric values.";
         }
         container threshold-out {
           uses performance-metric-attributes;
           description
             "If the measured parameter falls outside an upper bound
              for all but the min delay metric (or lower bound for
              min-delay metric only) and the advertised value is not
              already outside that bound, anomalous announcement will be
              triggered.";
         }
         container threshold-in {
           uses performance-metric-attributes;
           description
             "If the measured parameter falls inside an upper bound
              for all but the min delay metric (or lower bound for
              min-delay metric only) and the advertised value is not
              already inside that bound, normal (anomalous-flag cleared)
              announcement will be triggered.";
         }
         container threshold-accelerated-advertisement {
           description
             "When the difference between the last advertised value and
              current measured value exceed this threshold, anomalous
              announcement will be triggered.";
           uses performance-metric-attributes;
         }
       }
     } // performance-metric-throttle-container

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

       container te {
         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
       } // 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.";
         uses sch:schedules;
         leaf access-type {
           type te-link-access-type;
           description
             "Link access type, which can be point-to-point or
              multi-access.";
         }
         leaf is-abstract {
           type empty;
           description "Present if the link is abstract.";
         }
         leaf name {
           type string;
           description "Link Name.";
         }
         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-admin-status;
           description
             "The administrative state of the link.";
         }

         uses performance-metric-throttle-container;
         uses te-link-info-attributes;
       } // te-link-attributes
     } // te-link-config-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).";
       }
       leaf max-link-bandwidth {
         type decimal64 {
           fraction-digits 2;
         }
         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 decimal64 {
           fraction-digits 2;
         }
         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 decimal64 {
             fraction-digits 2;
           }
           description
             "Unreserved bandwidth for this level.";
         }
       }
       leaf te-default-metric {
         type uint32;
         description
           "Traffic Engineering Metric.";
       }
       container performance-metric {
         if-feature te-performance-metric;
         description
           "Link performance information in real time.";
         reference
           "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
         container measurement {
           description
             "Measured performance metric values. Static configuration
              and manual overrides of these measurements are also
              allowed.";
           uses performance-metric-attributes;
         }
         container normality
         {
           description
             "Performance metric normality values.";
           uses performance-metric-normality-attributes;
         }
       }
       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).";
       }
       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.";
         }
         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 decimal64 {
               fraction-digits 2;
             }
             description
               "Max LSP Bandwidth for this level";
           }
         }
         container time-division-multiplex-capable {
           when "../switching-capability = 'TDM'" {
             description "Valid only for TDM";
           }
           description
             "Interface has time-division multiplex capabilities.";

           leaf minimum-lsp-bandwidth {
             type decimal64 {
               fraction-digits 2;
             }
             description
               "Minimum LSP Bandwidth. Units in bytes per second.";
           }
           leaf indication {
             type enumeration {
               enum "standard" {
                 description
                   "Indicates support of standard SONET/SDH.";
               }
               enum "arbitrary" {
                 description
                   "Indicates support of arbitrary SONET/SDH.";
               }
             }
             description
               "Indication whether the interface supports Standard or
                Arbitrary SONET/SDH";
           }
         }
         list interface-adjustment-capability {
           key "upper-sc";
           description
             "List of Interface Adjustment Capability Descriptors (IACD)
              for this link.";
           reference
             "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
              for Multi-Layer and Multi-Region Networks (MLN/MRN).";
           leaf upper-sc {
             type identityref {
               base te-types:switching-capabilities;
             }
             description
               "Switching Capability for this interface.";
           }
           leaf upper-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 LSP Bandwidth at priorities 0-7.";
             leaf priority {
               type uint8 {
                 range "0..7";
               }
               description "Priority.";
             }
             leaf bandwidth {
               type decimal64 {
                 fraction-digits 2;
               }
               description
                 "Max LSP Bandwidth for this level.";
             }
           }
         } // interface-adjustment-capability
       } // interface-switching-capability
       container te-srlgs {
         description
           "A list of SLRGs.";
         leaf-list values {
           type te-types:srlg;
           description "SRLG value.";
           reference
             "RFC4202: Routing Extensions in Support of
              Generalized Multi-Protocol Label Switching (GMPLS).";
         }
       }
     } // te-link-info-attributes

     grouping te-link-state-derived {
       description
         "Link state attributes in a TE topology.";
       leaf oper-status {
         type te-oper-status;
         description
           "The current operational state of the link.";
       }
       uses information-source-attributes;
       list alt-information-sources {
         key "information-source";
         description
           "A list of information sources learned but not used.";
         uses information-source-attributes;
         uses te-link-info-attributes;
       }
       container recovery {
         description
           "Status of the recovery process.";
         leaf restoration-status {
           type te-recovery-status;
           description
             "Restoration status.";
         }
         leaf protection-status {
           type te-recovery-status;
           description
             "Protection status.";
         }
       }
       container underlay {
         if-feature te-topology-hierarchy;
         description "State attributes for te-link underlay.";
         uses te-link-state-underlay-attributes;
       }
     } // te-link-state-derived
     grouping te-link-state-underlay-attributes {
       description "State attributes for te-link underlay.";
       leaf dynamic {
         type boolean;
         description
           "true if the underlay is dynamically created.";
       }
       leaf committed {
         type boolean;
         description
           "true if the underlay is committed.";
       }
     } // te-link-state-underlay-attributes

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

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

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

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

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

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

         list tunnel-termination-point {
           key "tunnel-tp-id";
           description
             "A termination point can terminate a tunnel.";
           leaf tunnel-tp-id {
             type binary;
             description
               "Tunnel termination point identifier.";
           }
           container config {
             description
               "Configuration data.";
             uses te-node-tunnel-termination-capability;
           }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       list termination-capability {
         key "link-tp";
         description
           "The termination capabilities between
            tunnel-termination-point and link termination-point.
            The capability information can be used to compute
            the tunnel path.";
         leaf link-tp {
           type leafref {
             path "../../../../../nt:termination-point/nt:tp-id";
           }
           description
             "Link termination point.";
         }
       } // termination-capability
     } // te-node-tunnel-termination-capability

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

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

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

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

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

     grouping te-termination-point-config {
       description
         "TE termination point configuration grouping.";
       uses sch:schedules;
     } // 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-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-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.";

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

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

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

     grouping te-topology-config {
       description
         "TE topology configuration grouping.";
       uses sch:schedules;
       leaf preference {
         type uint8 {
           range "1..255";
         }
         description
           "Specifies a preference for this topology. A lower number
            indicates a higher preference.";
       }
     } // te-topology-config

     grouping te-topology-ref {
       description
         "References a TE topology.";
       leaf provider-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:provider-id";
           require-instance false;
         }
         description
           "A reference to a provider-id.";
       }
       leaf client-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:client-id";
           require-instance false;
         }
         description
           "A reference to a client-id.";
       }
       leaf te-topology-id-ref {
         type leafref {
           path "/nw:networks/nw:network[nw:network-id = "
             + "current()/../network-id-ref]/tet:te/tet:te-topology-id";
           require-instance false;
         }
         description
           "A reference to a te-topology-id.";
       }
       leaf network-id-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 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;
     }

     /*
      * Operational state data nodes
      */

     /*
      * Notifications
      */
     notification te-node-event {
       description "Notification event for TE node.";
       leaf event-type {
         type 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-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;
     }
   }
