   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 nt:tp-id;
                 description
                   "Reference to another TE termination point on the
                    same souruce node.";
               }
               leaf des-tp-ref {
                 type nt:tp-id;
                 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 te-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 string;
           description
             "Switching Capability for this interface.";
         }
         leaf encoding {
           type string;
           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 string;
             description
               "Switching Capability for this interface.";
           }
           leaf upper-encoding {
             type string;
             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 string;
               mandatory true;
               description
                 "Switching Capability.";
             }
             leaf encoding {
               type string;
               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 te-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 nt:tp-id;
             description
               "Relative reference to source termination point.";
           }
           description
             "Reference to source NTP.";
         }
         container to {
           leaf tp-ref {
             type 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 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 te-global-id;
         description
           "A reference to a provider-id.";
       }
       leaf client-id-ref {
         type te-global-id;
         description
           "A reference to a client-id.";
       }
       leaf te-topology-id-ref {
         type tet:te-topology-id;
         description
           "A reference to a te-topology-id.";
       }
       leaf network-id-ref {
         type nw:network-id;
         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;
     }
   }
