module ietf-te-topology {
  //yang-version 1.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-07-08" {
    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.";
    reference
      "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.
       RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
       RFC7823: Performance-Based Path Selection for Explicitly
       Routed Label Switched Paths (LSPs) Using TE Metric
       Extensions";
  }

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

  /*
   * Typedefs
   */

  /*
   * Identities
   */

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

  grouping 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 interface-switching-capability-list {
    description
      "List of Interface Switching Capabilities Descriptors (ISCD)";

    list interface-switching-capability {
      key "switching-capability";
      description
        "List of Interface Switching Capabilities Descriptors (ISCD)
         for this link.";
      reference
        "RFC3471: Generalized Multi-Protocol Label Switching (GMPLS)
         Signaling Functional Description.
         RFC4203: OSPF Extensions in Support of Generalized 
         Multi-Protocol Label Switching (GMPLS).";
      leaf switching-capability {
        type identityref {
          base te-types:switching-capabilities;
        }
        description
          "Switching Capability for this interface.";
      }
      leaf encoding {
        type identityref {
          base te-types:lsp-encoding-types;
        }
        description
          "Encoding supported by this interface.";
      }
      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";
        }
      } // time-division-multiplex-capable
    } // interface-switching-capability
  } // interface-switching-capability-list

  grouping performance-metric-attributes {
    description
      "Link performance information in real time.";
    reference 
      "RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.
       RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
       RFC7823: Performance-Based Path Selection for Explicitly
       Routed Label Switched Paths (LSPs) Using 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.
       RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
       RFC7823: Performance-Based Path Selection for Explicitly
       Routed Label Switched Paths (LSPs) Using TE Metric
       Extensions";
    leaf unidirectional-delay {
      type te-types:performance-metric-normality;
      description "Delay normality.";
    }
    leaf unidirectional-min-delay {
      type te-types:performance-metric-normality;
      description "Minimum delay or latency normality.";
    }
    leaf unidirectional-max-delay {
      type te-types:performance-metric-normality;
      description "Maximum delay or latency normality.";
    }
    leaf unidirectional-delay-variation {
      type te-types:performance-metric-normality;
      description "Delay variation normality.";
    }
    leaf unidirectional-packet-loss {
      type te-types:performance-metric-normality;
      description "Packet loss normality.";
    }
    leaf unidirectional-residual-bandwidth {
      type te-types:performance-metric-normality;
      description "Residual bandwidth normality.";
    }
    leaf unidirectional-available-bandwidth {
      type te-types:performance-metric-normality;
      description "Available bandwidth normality.";
    }
    leaf unidirectional-utilized-bandwidth {
      type te-types: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.
         RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
         RFC7823: Performance-Based Path Selection for Explicitly
         Routed Label Switched Paths (LSPs) Using TE Metric
         Extensions";
      leaf unidirectional-delay-offset {
        type uint32 {
          range 0..16777215;
        }
        description 
          "Offset value to be added to the measured delay value.";
      }
      leaf measure-interval {
        type uint32;
        default 30;
        description 
          "Interval in seconds to measure the extended metric
           values.";
      }
      leaf advertisement-interval {
        type uint32;
        description 
          "Interval in seconds to advertise the extended metric
           values.";
      }
      leaf suppression-interval {
        type uint32 {
          range "1 .. max";
        }
        default 120;
        description 
          "Interval in seconds to suppress advertising the extended
           metric values.";
      }
      container threshold-out {
        uses performance-metric-attributes;
        description
          "If the measured parameter falls outside an upper bound
           for all but the min delay metric (or lower bound for
           min-delay metric only) and the advertised value is not
           already outside that bound, anomalous announcement will be
           triggered.";
      }
      container threshold-in {
        uses performance-metric-attributes;
        description
          "If the measured parameter falls inside an upper bound
           for all but the min delay metric (or lower bound for
           min-delay metric only) and the advertised value is not
           already inside that bound, normal (anomalous-flag cleared)
           announcement will be triggered.";
      }
      container threshold-accelerated-advertisement {
        description
          "When the difference between the last advertised value and
           current measured value exceed this threshold, anomalous
           announcement will be triggered.";
        uses performance-metric-attributes;
      }
    }
  } // performance-metric-throttle-container

  grouping te-link-augment {
    description 
      "Augmentation for TE link.";
    
    container te {
      presence "TE support.";
      description 
        "Indicates TE support.";

      container config {
        description
          "Configuration data.";
        uses te-link-config;
      } // config
      container state {
        config false;
        description
          "Operational state data.";
        uses te-link-config;
        uses te-link-state-derived;
      } // state
    } // te
  } // te-link-augment
  
  grouping te-link-config {
    description
      "TE link configuration grouping.";
    choice bundle-stack-level {
      description 
        "The TE link can be partitioned into bundled
         links, or component links.";
      case bundle {
        container bundled-links {
          description
            "A set of bundled links.";
          reference
            "RFC4201: Link Bundling in MPLS Traffic Engineering
            (TE).";
          list bundled-link {
            key "sequence";
            description
              "Specify a bundled interface that is
               further partitioned.";
            leaf sequence {
              type uint32;
              description
                "Identify the sequence in the bundle.";
            }
            leaf src-tp-ref {
              type leafref {
                path "../../../../../../nw:node[nw:node-id = "
                  + "current()/../../../../../nt:source/"
                  + "nt:source-node]/"
                  + "nt:termination-point/nt:tp-id";
                require-instance true;
              }
              description
                "Reference to another TE termination point on the
                 same souruce node.";
            }
            leaf des-tp-ref {
              type leafref {
                path "../../../../../../nw:node[nw:node-id = "
                  + "current()/../../../../../nt:destination/"
                  + "nt:dest-node]/"
                  + "nt:termination-point/nt:tp-id";
                require-instance true;
              }
              description
                "Reference to another TE termination point on the
                 same destination node.";
            }
          } // list bundled-link
        }
      }
      case component {
        container component-links {
          description
            "A set of component links";
          list component-link {
            key "sequence";
            description
              "Specify a component interface that is
               sufficient to unambiguously identify the
               appropriate resources";
            
            leaf sequence {
              type uint32;
              description
                "Identify the sequence in the bundle.";
            }
            leaf src-interface-ref {
              type string;
              description
                "Reference to component link interface on the
                 source node.";
            }
            leaf des-interface-ref {
              type string;
              description
                "Reference to component link interface on the
                 destinatioin node.";
            }
          }
        }
      }
    } // bundle-stack-level
    
    leaf-list te-link-template {
      if-feature template;
      type leafref {
        path "../../../../../te/templates/link-template/name";
      }
      description
        "The reference to a TE link template.";
    }
    uses te-link-config-attributes;
  } // te-link-config

  grouping te-link-config-attributes {
    description 
      "Link configuration attributes in a TE topology.";
    container te-link-attributes {
      description "Link attributes in a TE topology.";
      uses sch:schedules;
      leaf access-type {
        type te-types:te-link-access-type;
        description 
          "Link access type, which can be point-to-point or
           multi-access.";
      }
      container external-domain {
        description
          "For an inter-domain link, specify the attributes of 
           the remote end of link, to facilitate the signalling at
           local end.";
        leaf remote-te-node-id {
          type te-types:te-node-id;
          description
            "Remote TE node identifier, used together with
             remote-te-link-id to identify the remote link 
             termination point in a different domain.";
        }
        leaf remote-te-link-tp-id {
          type te-types:te-tp-id;
          description
            "Remote TE link termination point identifier, used
             together with remote-te-node-id to identify the remote
             link termination point in a different domain.";
        }
        leaf plug-id {
          type uint32;
          description
            "A topology-wide unique number that identifies on the
             network a connectivity supporting a given inter-domain
             TE link. This is more flexible alternative to specifying
             remote-te-node-id and remote-te-link-tp-id, when the
             provider does not know remote-te-node-id and
             remote-te-link-tp-id or need to give client the
             flexibility to mix-n-match multiple topologies.";
        }
      }
      leaf is-abstract {
        type empty;
        description "Present if the link is abstract.";
      }
      leaf name {
        type string;
        description "Link Name.";
      }
      container underlay {
        if-feature te-topology-hierarchy;
        presence 
          "Indicates the underlay exists for this link.";
        description "Attributes of the te-link underlay.";
        reference
          "RFC4206: Label Switched Paths (LSP) Hierarchy with
           Generalized Multi-Protocol Label Switching (GMPLS)
           Traffic Engineering (TE)";

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

  grouping te-link-connectivity-attributes {
    description
      "Advertised TE connectivity attributes.";
    leaf max-link-bandwidth {
      type 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.
         RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.
         RFC7823: Performance-Based Path Selection for Explicitly
         Routed Label Switched Paths (LSPs) Using 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;
      }
    }
    container te-srlgs {
      description
        "A list of SLRGs.";
      leaf-list value {
        type te-types:srlg;
        description "SRLG value.";
        reference
          "RFC4202: Routing Extensions in Support of
           Generalized Multi-Protocol Label Switching (GMPLS).";
      }
    }
  } // te-link-connectivity-attributes

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

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

  grouping te-link-state-underlay-attributes {
    description "State attributes for te-link underlay.";
    leaf dynamic {
      type boolean;
      description 
        "true if the underlay is dynamically created.";
    }
    leaf committed {
      type boolean;
      description 
        "true if the underlay is committed.";
    }
  } // te-link-state-underlay-attributes
    
  grouping te-link-underlay-attributes {
    description "Attributes for  te-link underlay.";
    reference
      "RFC4206: Label Switched Paths (LSP) Hierarchy with
       Generalized Multi-Protocol Label Switching (GMPLS)
       Traffic Engineering (TE)";
    container 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-types: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;
        } // state
        
      } // tunnel-termination-point
    } // te
  } // te-node-augment

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

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

  grouping te-node-config-attributes {
    description "Configuration node attributes in a TE topology.";
    container te-node-attributes {
      description "Containing node attributes in a TE topology.";
      uses sch:schedules;
      leaf admin-status {
        type te-types:te-admin-status;
        description
          "The administrative state of the link.";
      }
      uses te-node-connectivity-matrix;
      uses te-node-info-attributes;
    } // te-node-attributes
  } // te-node-config-attributes
    
  grouping te-node-config-attributes-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-types:te-admin-status;
        description
          "The administrative state of the link.";
      }
      uses te-node-connectivity-matrix-abs;
      uses te-node-info-attributes;
    } // te-node-attributes
  } // te-node-config-attributes-notification

  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-types:te-admin-status;
        description
          "The administrative state of the link.";
      }
      uses te-node-info-attributes;
    } // te-node-attributes
  } // te-node-config-attributes-template

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

  grouping te-node-info-attributes {
    description
      "Advertised TE information attributes.";
    leaf domain-id {
      type uint32;
      description
        "Identifies the domain that this node belongs.
         This attribute is used to support inter-domain links.";
      reference
        "RFC5152: A Per-Domain Path Computation Method for
         Establishing Inter-Domain Traffic Engineering (TE)
         Label Switched Paths (LSPs).
         RFC5392: OSPF Extensions in Support of Inter-Autonomous
         System (AS) MPLS and GMPLS Traffic Engineering.
         RFC5316: ISIS Extensions in Support of Inter-Autonomous
         System (AS) MPLS and GMPLS Traffic Engineering.";
    }
    leaf is-abstract {
      type empty;
      description 
        "Present if the node is abstract, not present if the node
         is actual.";
    }
    leaf name {
      type inet:domain-name;
      description "Node name.";
    }
    leaf-list signaling-address {
      type inet:ip-address;
      description "Node signaling address.";
    }
    container underlay-topology {
      if-feature te-topology-hierarchy;
      description 
        "When an abstract node encapsulates a topology, 
         the attributes in this container point to said topology.";
      uses te-topology-ref;
    }
  } // te-node-info-attributes
    
  grouping te-node-state-derived {
    description "Node state attributes in a TE topology.";
    leaf oper-status {
      type te-types:te-oper-status;
      description
        "The current operational state of the node.";
    }
    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 information-source-entry {
      key "information-source";
      description
        "A list of information sources learned, including the one
         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-types:te-oper-status;
      description
        "The current operational state of the node.";
    }
    leaf is-multi-access-dr {
      type empty;
      description
        "The presence of this attribute indicates that this TE node
         is a pseudonode elected as a designated router.";
      reference
        "RFC3630: Traffic Engineering (TE) Extensions to OSPF
         Version 2.
         RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
         Environments.";
    }
    uses information-source-attributes;
    list information-source-entry {
      key "information-source";
      description
        "A list of information sources learned, including the one
         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.";

    leaf switching-capability {
      type identityref {
        base te-types:switching-capabilities;
      }
      description
        "Switching Capability for this interface.";
    }
    leaf encoding {
      type identityref {
        base te-types:lsp-encoding-types;
      }
      description
        "Encoding supported by this interface.";
    }
    leaf inter-layer-lock-id {
      type uint32;
      description
        "Inter layer lock ID, used for path computation in a TE
         topology covering multiple layers or multiple regions.";
      reference
        "RFC5212: Requirements for GMPLS-Based Multi-Region and
         Multi-Layer Networks (MRN/MLN).
         RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";        
    }
    leaf protection-type {
      type identityref {
        base te-types:lsp-prot-type;
      }
      description
        "The protection type that this tunnel termination point
         is capable of.";
    }

    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.
         The Interface Adjustment Capability Descriptors (IACD)
         [RFC6001] on each link-tp can be derived from this 
         termination-capability list.";
      reference
        "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
      leaf link-tp {
        type leafref {
          path "../../../../../nt:termination-point/nt:tp-id";
        }
        description
          "Link termination point.";
      }

      uses connectivity-label-restriction-list;

      list max-lsp-bandwidth {
        key "priority";
        max-elements "8";
        description
          "Maximum LSP Bandwidth at priorities 0-7.";
        reference
          "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
           for Multi-Layer and Multi-Region Networks (MLN/MRN).";
        leaf priority {
          type uint8 {
            range "0..7";
          }
          description "Priority.";
        }
        leaf bandwidth {
          type decimal64 {
            fraction-digits 2;
          }
          description
            "Max LSP Bandwidth for this level.";
        }
      } // max-lsp-bandwidth
    } // 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-types: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;
    uses interface-switching-capability-list;
    leaf inter-layer-lock-id {
      type uint32;
      description
        "Inter layer lock ID, used for path computation in a TE
         topology covering multiple layers or multiple regions.";
      reference
        "RFC5212: Requirements for GMPLS-Based Multi-Region and
         Multi-Layer Networks (MRN/MLN).
         RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
         for Multi-Layer and Multi-Region Networks (MLN/MRN).";        
    }
  } // te-termination-point-config

  grouping te-topologies-augment {
    description
      "Augmentation for TE topologies.";
    
    container te {
      presence "TE support.";
      description 
        "Indicates TE support.";

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

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

  grouping te-topology-augment {
    description
      "Augmentation for TE topology.";
    
    container te {
      presence "TE support.";
      description 
        "Indicates TE support.";

      leaf provider-id {
        type te-types:te-global-id;
        mandatory true;
        description
          "An identifier to uniquely identify a provider.";
      }
      leaf client-id {
        type te-types:te-global-id;
        mandatory true;
        description
          "An identifier to uniquely identify a client.";
      }
      leaf te-topology-id {
        type te-types: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.";
    }
    leaf optimization-criterion {
      type identityref {
        base te-types:te-optimization-criterion;
      }
      description
        "Optimization criterion applied to this topology.";
      reference
        "RFC3272: Overview and Principles of Internet Traffic
         Engineering.";
    }
  } // te-topology-config

  grouping te-topology-ref {
    description
      "References a TE topology.";
    leaf provider-id-ref {
      type leafref {
        path "/nw:networks/nw:network[nw:network-id = "
          + "current()/../network-id-ref]/tet:te/tet:provider-id";
        require-instance false;
      }
      description
        "A reference to a provider-id.";
    }
    leaf client-id-ref {
      type leafref {
        path "/nw:networks/nw:network[nw:network-id = "
          + "current()/../network-id-ref]/tet:te/tet:client-id";
        require-instance false;
      }
      description
        "A reference to a client-id.";
    }
    leaf te-topology-id-ref {
      type leafref {
        path "/nw:networks/nw:network[nw:network-id = "
          + "current()/../network-id-ref]/tet:te/tet:te-topology-id";
        require-instance false;
      }
      description
        "A reference to a te-topology-id.";
    }
    leaf network-id-ref {
      type leafref {
        path "/nw:networks/nw:network/nw:network-id";
        require-instance false;
      }
      description
        "A reference to a network-id in base ietf-network module.";
    }
  } // te-topology-ref

  grouping te-topology-type {
    description
      "Identifies the TE topology type.";
    container te-topology {
      presence "Indicates TE topology.";
      description
        "Its presence identifies the TE topology type.";
    }
  } // te-topology-type
  
  grouping template-attributes {
    description 
      "Common attributes for all templates.";

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

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

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

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

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

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

  /*
   * Operational state data nodes
   */

  /*
   * Notifications
   */

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

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