   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;
     }
   }
