Introducing the new YANG model for ietf-te-topology and modifying the converter utility
for TE-NBI app to match the latest YANG model.

Change-Id: I8b3a2c4204f9b91a402a8fdfeeb6ba74d7316a7a
diff --git a/apps/tenbi/yangmodel/src/main/yang/ietf-te-topology.yang b/apps/tenbi/yangmodel/src/main/yang/ietf-te-topology.yang
index e5305e2..5c3efb1 100644
--- a/apps/tenbi/yangmodel/src/main/yang/ietf-te-topology.yang
+++ b/apps/tenbi/yangmodel/src/main/yang/ietf-te-topology.yang
@@ -1,18 +1,17 @@
 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-yang-types {
+    prefix "yang";
+  }
+
   import ietf-inet-types {
     prefix "inet";
   }
 
-  import ietf-schedule { 
-    prefix "sch"; 
-  }
-
   import ietf-te-types {
     prefix "te-types";
   }
@@ -58,8 +57,8 @@
                <mailto:oscar.gonzalezdedios@telefonica.com>";
 
   description "TE topology model";
-  
-  revision "2016-07-08" {
+
+  revision "2017-01-10" {
     description "Initial revision";
     reference "TBD";
   }
@@ -67,11 +66,10 @@
   /*
    * Features
    */
-
-  feature configuration-schedule {
+  feature nsrlg {
     description
-      "This feature indicates that the system supports 
-       configuration scheduling.";
+      "This feature indicates that the system supports NSRLG
+       (Not Sharing Risk Link Group).";
   }
 
   feature te-topology-hierarchy {
@@ -80,31 +78,105 @@
        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 
+      "This feature indicates that the system supports
        template configuration.";
   }
 
   /*
    * Typedefs
    */
+  typedef geographic-coordinate-degree {
+      type decimal64 {
+        fraction-digits 8;
+      }
+      description
+        "Decimal degree (DD) used to express latitude and longitude
+         geographic coordinates.";
+  } // geographic-coordinate-degree
 
-  /*
-   * Identities
-   */
+  typedef te-bandwidth {
+    type string {
+      pattern
+        '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+      + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
+      + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+'
+      + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+      + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
+      + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*';
+    }
+    description
+      "This is the generic bandwidth type that is a string containing
+       a list of numbers separated by commas, with each of these
+       number can be non-negative decimal, hex integer, or hex float:
+       (dec | hex | float)[*(','(dec | hex | float))]
+       For packet switching type, a float number is used, such as
+       0x1p10.
+       For OTN switching type, a list of integers can be used, such
+       as '0,2,3,1', indicating 2 odu0's and 1 odu3.
+       For DWDM, a list of pairs of slot number and width can be
+       used, such as '0, 2, 3, 3', indicating a frequency slot 0 with
+       slot width 2 and a frequency slot 3 with slot width 3.";
+  } // te-bandwidth
+
+  typedef te-info-source {
+    type enumeration {
+      enum "unknown" {
+        description "The source is unknown.";
+      }
+      enum "locally-configured" {
+        description "Configured entity.";
+      }
+      enum "ospfv2" {
+        description "OSPFv2.";
+      }
+      enum "ospfv3" {
+        description "OSPFv3.";
+      }
+      enum "isis" {
+        description "ISIS.";
+      }
+      enum "bgp-ls" {
+        description "BGP-LS.";
+        reference
+          "RFC7752: North-Bound Distribution of Link-State and
+           Traffic Engineering (TE) Information Using BGP";
+      }
+      enum "system-processed" {
+        description "System processed entity.";
+      }
+      enum "other" {
+        description "Other source.";
+      }
+    }
+    description
+      "Describining the type of source that has provided the
+       related information, and the source credibility.";
+  } // te-info-source
+
+  typedef te-path-disjointness {
+    type bits {
+      bit node {
+        position 0;
+        description "Node disjoint.";
+      }
+      bit link {
+        position 1;
+        description "Link disjoint.";
+      }
+      bit srlg {
+        position 2;
+        description "SRLG (Shared Risk Link Group) disjoint.";
+      }
+    }
+    description
+      "Type of the resource disjointness for a TE tunnel path.";
+    reference
+      "RFC4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS)
+       Recovery";
+  } // te-path-disjointness
 
   /*
    * Groupings
@@ -144,77 +216,168 @@
         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.";
+           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, 
+          "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 
+  } // connectivity-label-restrictions
 
-  grouping information-source-attributes {
+  grouping connectivity-matrix-entry-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.";
-        }
+      "Attributes of connectivity matrix entry.";
+    leaf is-allowed {
+      type boolean;
+      description
+        "true  - switching is allowed,
+         false - switching is disallowed.";
+    }
+    uses connectivity-label-restriction-list;
+    container underlay {
+      if-feature te-topology-hierarchy;
+      presence
+        "Indicates the underlay exists for this link.";
+      description "Attributes of the te-link underlay.";
+      reference
+        "RFC4206: Label Switched Paths (LSP) Hierarchy with
+         Generalized Multi-Protocol Label Switching (GMPLS)
+         Traffic Engineering (TE)";
+      
+      uses te-link-underlay-attributes;
+    } // underlay
+    uses te-link-iscd-attributes;
+    uses te-link-connectivity-attributes;
+  } // connectivity-matrix-entry-attributes
+
+  grouping geolocation-container {
+    description
+      "A container containing a GPS location.";
+    container geolocation{
+      description
+        "A container containing a GPS location.";
+      leaf altitude {
+        type int64;
+        units millimeter;
+        description
+          "Distance above the sea level.";
       }
-      description 
+      leaf latitude {
+        type geographic-coordinate-degree {
+          range "-90..90";
+        }
+        description
+          "Relative position north or south on the Earth's surface.";
+      }
+      leaf longitude {
+        type geographic-coordinate-degree {
+          range "-180..180";
+        }
+        description
+          "Angular distance east or west on the Earth's surface.";
+      }
+    } // gps-location
+  } // geolocation-container
+
+  grouping information-source-state-attributes {
+    description
+      "The attributes identifying source that has provided the
+       related information, and the source credibility.";
+    leaf credibility-preference {
+      type uint16;
+      description
+        "The preference value to calculate the traffic
+         engineering database credibility value used for
+         tie-break selection between different
+         information-source values.
+         Higher value is more preferable.";
+    }
+    leaf logical-network-element {
+      type string;
+      description
+        "When applicable, this is the name of a logical network
+         element from which the information is learned.";
+    } // logical-network-element
+    leaf network-instance {
+      type string;
+      description
+        "When applicable, this is the name of a network-instance
+         from which the information is learned.";
+    } // network-instance
+  } // information-source-state-attributes
+
+  grouping information-source-per-link-attributes {
+    description
+      "Per node container of the attributes identifying source that
+       has provided the related information, and the source
+       credibility.";
+    leaf information-source {
+      type te-info-source;
+      description
         "Indicates the source of the information.";
     }
     container information-source-state {
       description
-        "The container contains state attributes related to 
+        "The 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.";
-      }      
+      uses information-source-state-attributes;
       container topology {
-        description 
+        description
           "When the information is processed by the system,
            the attributes in this container indicate which topology
            is used to process to generate the result information.";
         uses te-topology-ref;
+        leaf link-ref {
+          type leafref {
+            path "/nw:networks/nw:network[nw:network-id = "
+              + "current()/../network-ref]/nt:link/nt:link-id";
+            require-instance false;
+          }
+          description
+            "A reference to a link-id.";
+        }
       } // topology
-      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-state
+  } // information-source-per-link-attributes
+
+  grouping information-source-per-node-attributes {
+    description
+      "Per node container of the attributes identifying source that
+       has provided the related information, and the source
+       credibility.";
+    leaf information-source {
+      type te-info-source;
+      description
+        "Indicates the source of the information.";
     }
-  } // information-source-attributes
+    container information-source-state {
+      description
+        "The container contains state attributes related to
+         the information source.";
+      uses information-source-state-attributes;
+      container topology {
+        description
+          "When the information is processed by the system,
+           the attributes in this container indicate which topology
+           is used to process to generate the result information.";
+        uses te-topology-ref;
+        leaf node-ref {
+          type leafref {
+            path "/nw:networks/nw:network[nw:network-id = "
+              + "current()/../network-ref]/nw:node/nw:node-id";
+            require-instance false;
+          }
+          description
+            "A reference to a node-id.";
+        }
+      } // topology
+    } // information-source-state
+  } // information-source-per-node-attributes
 
   grouping interface-switching-capability-list {
     description
@@ -228,7 +391,7 @@
       reference
         "RFC3471: Generalized Multi-Protocol Label Switching (GMPLS)
          Signaling Functional Description.
-         RFC4203: OSPF Extensions in Support of Generalized 
+         RFC4203: OSPF Extensions in Support of Generalized
          Multi-Protocol Label Switching (GMPLS).";
       leaf switching-capability {
         type identityref {
@@ -244,263 +407,324 @@
         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
+      uses te-link-iscd-attributes;
     } // interface-switching-capability
   } // interface-switching-capability-list
 
-  grouping performance-metric-attributes {
+  grouping statistics-per-link {
     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;
-      }
+      "Statistics attributes per TE link.";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      mandatory true;
       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.";
+        "The time on the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
     }
-  } // 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.";
-      }
+    /* Administrative attributes */
+    leaf disables {
+      type yang:counter32;
       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;
-      }
+        "Number of times that link was disabled.";
     }
-  } // performance-metric-throttle-container
+    leaf enables {
+      type yang:counter32;
+      description
+        "Number of times that link was enabled.";
+    }
+    leaf maintenance-clears {
+      type yang:counter32;
+      description
+        "Number of times that link was put out of maintenance.";
+    }
+    leaf maintenance-sets {
+      type yang:counter32;
+      description
+        "Number of times that link was put in maintenance.";
+      }
+    leaf modifies {
+      type yang:counter32;
+      description
+        "Number of times that link was modified.";
+    }
+    /* Operational attributes */
+    leaf downs {
+      type yang:counter32;
+      description
+        "Number of times that link was set to operational down.";
+    }
+    leaf ups {
+      type yang:counter32;
+      description
+        "Number of times that link was set to operational up.";
+    }
+    /* Recovery attributes */
+    leaf fault-clears {
+      type yang:counter32;
+      description
+        "Number of times that link experienced fault clear event.";
+    }
+    leaf fault-detects {
+      type yang:counter32;
+      description
+        "Number of times that link experienced fault detection.";
+    }
+    leaf protection-switches {
+      type yang:counter32;
+      description
+        "Number of times that link experienced protection
+         switchover.";
+    }
+    leaf protection-reverts {
+      type yang:counter32;
+      description
+        "Number of times that link experienced protection
+         reversion.";
+    }
+    leaf restoration-failures {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration
+         failure.";
+    }
+    leaf restoration-starts {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration
+         start.";
+    }
+    leaf restoration-successes {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration
+         success.";
+    }
+    leaf restoration-reversion-failures {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration reversion
+         failure.";
+    }
+    leaf restoration-reversion-starts {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration reversion
+         start.";
+    }
+    leaf restoration-reversion-successes {
+      type yang:counter32;
+      description
+        "Number of times that link experienced restoration reversion
+         success.";
+    }
+  } // statistics-per-link
+
+  grouping statistics-per-node {
+    description
+      "Statistics attributes per TE node.";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The time on the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
+    }
+    container node {
+      description
+        "Containing TE node level statistics attributes.";
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that node was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that node was enabled.";
+      }
+      leaf maintenance-sets {
+        type yang:counter32;
+        description
+          "Number of times that node was put in maintenance.";
+      }
+      leaf maintenance-clears {
+        type yang:counter32;
+        description
+          "Number of times that node was put out of maintenance.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that node was modified.";
+      }
+    } // node
+    container connectivity-matrix-entry {
+      description
+        "Containing connectivity matrix entry level statistics
+         attributes.";
+      leaf creates {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           created.";
+        reference
+          "RFC6241. Section 7.2 for 'create' operation. ";
+      }
+      leaf deletes {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           deleted.";
+        reference
+          "RFC6241. Section 7.2 for 'delete' operation. ";
+      }
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           enabled.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           modified.";
+      }
+    } // connectivity-matrix-entry
+  } // statistics-per-node
+
+  grouping statistics-per-ttp {
+    description
+      "Statistics attributes per TE TTP (Tunnel Termination Point).";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The time on the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
+    }
+    container tunnel-termination-point {
+      description
+        "Containing TE TTP (Tunnel Termination Point) level
+         statistics attributes.";
+      /* Administrative attributes */
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that TTP was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that TTP was enabled.";
+      }
+      leaf maintenance-clears {
+        type yang:counter32;
+        description
+          "Number of times that TTP was put out of maintenance.";
+      }
+      leaf maintenance-sets {
+        type yang:counter32;
+        description
+          "Number of times that TTP was put in maintenance.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that TTP was modified.";
+      }
+      /* Operational attributes */
+      leaf downs {
+        type yang:counter32;
+        description
+          "Number of times that TTP was set to operational down.";
+      }
+      leaf ups {
+        type yang:counter32;
+        description
+          "Number of times that TTP was set to operational up.";
+      }
+      leaf in-service-clears {
+        type yang:counter32;
+        description
+          "Number of times that TTP was taken out of service
+           (TE tunnel was released).";
+      }
+      leaf in-service-sets {
+        type yang:counter32;
+        description
+          "Number of times that TTP was put in service by a TE
+           tunnel (TE tunnel was set up).";
+      }
+    } // tunnel-termination-point
+
+    container local-link-connectivity {
+      description
+        "Containing TE LLCL (Local Link Connectivity List) level
+         statistics attributes.";
+      leaf creates {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was created.";
+        reference
+          "RFC6241. Section 7.2 for 'create' operation. ";
+      }
+      leaf deletes {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was deleted.";
+        reference
+          "RFC6241. Section 7.2 for 'delete' operation.";
+      }
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL  entry was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL  entry was enabled.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL  entry was modified.";
+      }
+    } // local-link-connectivity
+  } // statistics-per-ttp
 
   grouping te-link-augment {
-    description 
+    description
       "Augmentation for TE link.";
-    
+
     container te {
+      must "count(../nt:supporting-link)<=1" {
+        description
+          "For a link in a TE topology, there cannot be more
+           than 1 supporting link. If one or more link paths are
+           abstracted, the underlay is used.";
+      }
       presence "TE support.";
-      description 
+      description
         "Indicates TE support.";
 
       container config {
@@ -515,14 +739,20 @@
         uses te-link-config;
         uses te-link-state-derived;
       } // state
+      container statistics {
+        config false;
+        description
+          "Statistics data.";
+        uses statistics-per-link;
+      } // statistics
     } // te
   } // te-link-augment
-  
+
   grouping te-link-config {
     description
       "TE link configuration grouping.";
     choice bundle-stack-level {
-      description 
+      description
         "The TE link can be partitioned into bundled
          links, or component links.";
       case bundle {
@@ -579,7 +809,7 @@
               "Specify a component interface that is
                sufficient to unambiguously identify the
                appropriate resources";
-            
+
             leaf sequence {
               type uint32;
               description
@@ -601,7 +831,7 @@
         }
       }
     } // bundle-stack-level
-    
+
     leaf-list te-link-template {
       if-feature template;
       type leafref {
@@ -614,27 +844,27 @@
   } // te-link-config
 
   grouping te-link-config-attributes {
-    description 
+    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 
+        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 
+          "For an inter-domain link, specify the attributes of
            the remote end of link, to facilitate the signalling at
            local end.";
+        uses te-topology-ref;
         leaf remote-te-node-id {
           type te-types:te-node-id;
           description
             "Remote TE node identifier, used together with
-             remote-te-link-id to identify the remote link 
+             remote-te-link-id to identify the remote link
              termination point in a different domain.";
         }
         leaf remote-te-link-tp-id {
@@ -666,7 +896,7 @@
       }
       container underlay {
         if-feature te-topology-hierarchy;
-        presence 
+        presence
           "Indicates the underlay exists for this link.";
         description "Attributes of the te-link underlay.";
         reference
@@ -681,8 +911,7 @@
         description
           "The administrative state of the link.";
       }
-      
-      uses performance-metric-throttle-container;
+
       uses te-link-info-attributes;
     } // te-link-attributes
   } // te-link-config-attributes
@@ -691,9 +920,7 @@
     description
       "Advertised TE connectivity attributes.";
     leaf max-link-bandwidth {
-      type decimal64 {
-        fraction-digits 2;
-      }
+      type te-bandwidth;
       description
         "Maximum bandwidth that can be seen on this link in this
          direction. Units in bytes per second.";
@@ -703,9 +930,7 @@
          RFC5305: IS-IS Extensions for Traffic Engineering.";
     }
     leaf max-resv-link-bandwidth {
-      type decimal64 {
-        fraction-digits 2;
-      }
+      type te-bandwidth;
       description
         "Maximum amount of bandwidth that can be reserved in this
          direction in this link. Units in bytes per second.";
@@ -731,9 +956,7 @@
         description "Priority.";
       }
       leaf bandwidth {
-        type decimal64 {
-          fraction-digits 2;
-        }
+        type te-bandwidth;
         description
           "Unreserved bandwidth for this level.";
       }
@@ -741,35 +964,16 @@
     leaf te-default-metric {
       type uint32;
       description
-        "Traffic Engineering Metric.";
+        "Traffic engineering metric.";
     }
-    container performance-metric {
-      if-feature te-performance-metric;
+    leaf te-delay-metric {
+      type uint32;
       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;
-      }
+        "Traffic engineering delay metric.";
     }
     container te-srlgs {
       description
-        "A list of SLRGs.";
+        "Containing a list of SLRGs.";
       leaf-list value {
         type te-types:srlg;
         description "SRLG value.";
@@ -778,6 +982,24 @@
            Generalized Multi-Protocol Label Switching (GMPLS).";
       }
     }
+    container te-nsrlgs {
+      if-feature nsrlg;
+      description
+        "Containing a list of NSRLGs (Not Sharing Risk Link
+         Groups).
+         When an abstract TE link is configured, this list specifies
+         the request that underlay TE paths need to be mutually
+         disjoint with other TE links in the same groups.";
+      leaf-list id {
+        type uint32;
+        description 
+          "NSRLG ID, uniquely configured within a topology.";
+        reference
+          "RFC4872: RSVP-TE Extensions in Support of End-to-End
+           Generalized Multi-Protocol Label Switching (GMPLS)
+           Recovery";
+      }
+    }
   } // te-link-connectivity-attributes
 
   grouping te-link-info-attributes {
@@ -794,7 +1016,7 @@
     leaf administrative-group {
       type te-types:admin-groups;
       description
-        "Administrative group or color of the link. 
+        "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).";
@@ -830,8 +1052,34 @@
     uses te-link-connectivity-attributes;
   } // te-link-info-attributes
 
+  grouping te-link-iscd-attributes {
+    description
+      "TE link ISCD (Interface Switching Capability Descriptor)
+       attributes.";
+    reference
+      "Sec 1.4, RFC4203: OSPF Extensions in Support of Generalized
+       Multi-Protocol Label Switching (GMPLS). Section 1.4.";
+    list max-lsp-bandwidth {
+      key "priority";
+      max-elements "8";
+      description
+        "Maximum LSP Bandwidth at priorities 0-7.";
+      leaf priority {
+        type uint8 {
+          range "0..7";
+        }
+        description "Priority.";
+      }
+      leaf bandwidth {
+        type te-bandwidth;
+        description
+          "Max LSP Bandwidth for this level";
+      }
+    }
+  } // te-link-iscd-attributes
+
   grouping te-link-state-derived {
-    description 
+    description
       "Link state attributes in a TE topology.";
     leaf oper-status {
       type te-types:te-oper-status;
@@ -840,24 +1088,24 @@
     }
     leaf is-transitional {
       type empty;
-      description 
-        "Present if the link is transitional, used as an 
-         alternative approach in lieu of inter-layer-lock-id 
+      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).";        
+         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
     }
-    uses information-source-attributes;
+    uses information-source-per-link-attributes;
     list information-source-entry {
       key "information-source";
       description
         "A list of information sources learned, including the one
          used.";
-      uses information-source-attributes;
+      uses information-source-per-link-attributes;
       uses te-link-info-attributes;
     }
     container recovery {
@@ -872,7 +1120,7 @@
         type te-types:te-recovery-status;
         description
           "Protection status.";
-      }      
+      }
     }
     container underlay {
       if-feature te-topology-hierarchy;
@@ -885,30 +1133,30 @@
     description "State attributes for te-link underlay.";
     leaf dynamic {
       type boolean;
-      description 
+      description
         "true if the underlay is dynamically created.";
     }
     leaf committed {
       type boolean;
-      description 
+      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 
+    container primary-path {
+      description
         "The service path on the underlay topology that
          supports this link.";
       uses te-topology-ref;
       list path-element {
         key "path-element-id";
-        description 
+        description
           "A list of path elements describing the service path.";
         leaf path-element-id {
           type uint32;
@@ -916,13 +1164,13 @@
         }
         uses te-path-element;
       }
-    } // underlay-primary-path
-    list underlay-backup-path {
+    } // primary-path
+    list backup-path {
       key "index";
-      description 
+      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 
+         not protected, the list contains zero elements. If the
          primary path is protected, the list contains one or more
          elements.";
       leaf index {
@@ -933,8 +1181,8 @@
       uses te-topology-ref;
       list path-element {
         key "path-element-id";
-        description 
-          "A list of path elements describing the backup service 
+        description
+          "A list of path elements describing the backup service
            path";
         leaf path-element-id {
           type uint32;
@@ -943,39 +1191,69 @@
         uses te-path-element;
       }
     } // underlay-backup-path
-    leaf underlay-protection-type {
+    leaf protection-type {
       type uint16;
       description
         "Underlay protection type desired for this link";
     }
-    container underlay-trail-src {
-      uses nt:tp-ref;
+    container tunnel-src {
+      uses te-tunnel-tp-ref;
       description
-        "Source TE link of the underlay trail.";
+        "Source tunnel termination point of the underlay
+         tunnel.";
     }
-    container underlay-trail-des {
-      uses nt:tp-ref;
+    container tunnel-des {
+      uses te-tunnel-tp-ref;
       description
-        "Destination TE link of the underlay trail.";
+        "Destination tunnel termination point of the underlay
+         tunnel.";
+    }
+    leaf tunnel-id {
+      type uint16;
+      description
+        "Tunnel identifier used in the SESSION that remains constant
+         over the life of the tunnel.
+         This attribute is used together with underlay tunnel-src
+         and underlay tunnel-src.
+         The detailed information of this tunnel can be retrieved
+         from the ietf-te model.";
+      reference "RFC3209";
+    }
+    leaf tunnel-sharing {
+      type boolean;
+      description
+        "'true' if the underlay tunnel can be shared with other
+         TE links;
+         'false' if the underlay tunnel is dedicated to this 
+         TE link.";
     }
   } // te-link-underlay-attributes
 
   grouping te-node-augment {
     description
       "Augmentation for TE node.";
-    
-    container te {
-      presence "TE support.";
-      description 
-        "Indicates TE support.";
 
-      leaf te-node-id {
-        type te-types:te-node-id;
-        mandatory true;
+    leaf te-node-id {
+      type te-types:te-node-id;
+      description
+        "The identifier of a node in the TE topology.
+         A node is specific to a topology to which it belongs.";
+    }
+
+    container te {
+      must "../te-node-id" {
         description
-          "The identifier of a node in the TE topology.
-           A node is specific to a topology to which it belongs.";
+          "te-node-id is mandatory.";
       }
+      must "count(../nw:supporting-node)<=1" {
+        description
+          "For a node in a TE topology, there cannot be more
+           than 1 supporting node. If multiple nodes are abstracted,
+           the underlay-topology is used.";
+      }
+      presence "TE support.";
+      description
+        "Indicates TE support.";
 
       container config {
         description
@@ -990,6 +1268,12 @@
         uses te-node-config;
         uses te-node-state-derived;
       } // state
+      container statistics {
+        config false;
+        description
+          "Statistics data.";
+        uses statistics-per-node;
+      } // statistics
 
       list tunnel-termination-point {
         key "tunnel-tp-id";
@@ -1004,17 +1288,55 @@
         container config {
           description
             "Configuration data.";
-          uses te-node-tunnel-termination-capability;
+          uses te-node-tunnel-termination-attributes;
         }
-
         container state {
           config false;
           description
             "Operational state data.";
 
-          uses te-node-tunnel-termination-capability;
+          uses te-node-tunnel-termination-attributes;
+          uses geolocation-container;
         } // state
+        container statistics {
+          config false;
+          description
+            "Statistics data.";
+          uses statistics-per-ttp;
+        } // statistics
         
+        // Relations to other tunnel termination points
+        list supporting-tunnel-termination-point {
+//          key "node-ref tunnel-tp-ref";
+          key "network-ref node-ref tunnel-tp-ref";
+          description
+            "Identifies the tunnel termination points, that this
+             tunnel termination point is depending on.";
+//          leaf node-ref {
+//            type leafref {
+//              path "../../../../nw:supporting-node/nw:node-ref";
+//              require-instance false;
+//            }
+//            description
+//              "This leaf identifies in which node the supporting
+//               tunnel termination point is present.";
+//          }
+          uses nw:node-ref;
+          leaf tunnel-tp-ref {
+            type leafref {
+              path "/nw:networks/nw:network"+
+                "[nw:network-id="+
+                "current()/../../../../nw:supporting-node/"+
+                "nw:network-ref]/"+
+                "nw:node[nw:node-id=current()/../node-ref]/te/"+
+                "tunnel-termination-point/tunnel-tp-id";
+              require-instance false;
+            }
+            description
+              "Reference to the underlay node, must be in a
+               different topology";
+          }
+        } // supporting-tunnel-termination-point
       } // tunnel-termination-point
     } // te
   } // te-node-augment
@@ -1037,7 +1359,6 @@
     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
@@ -1047,29 +1368,12 @@
       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 
+    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
@@ -1081,53 +1385,63 @@
 
   grouping te-node-connectivity-matrix {
     description "Connectivity matrix on a TE node.";
-    list connectivity-matrix {
-      key "id";
+    container connectivity-matrices {
       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;
+        "Containing connectivity matrix on a TE node.";
+      leaf number-of-entries {
+        type uint16;
         description
-          "true  - switching is allowed, 
-           false - switching is disallowed.";
+          "The number of connectivity matrix entries.
+           If this number is speficied in the configuration request,
+           the number is requested number of entries, which may not
+           all be listed in the list;
+           if this number is reported in the state data,
+           the number is the current number of operational entries.";
       }
-      uses connectivity-label-restriction-list;
-      uses te-link-connectivity-attributes;
-    }
+      uses connectivity-matrix-entry-attributes;
+      list connectivity-matrix {
+        key "id";
+        description
+          "Represents node's switching limitations, i.e. limitations
+           in interconnecting network TE links across the node.";
+        reference
+          "RFC7579: General Network Element Constraint Encoding
+           for GMPLS-Controlled Networks.";
+        leaf id {
+          type uint32;
+          description "Identifies the connectivity-matrix entry.";
+        }
+        container from {
+          leaf tp-ref {
+            type leafref {
+              path "../../../../../../../nt:termination-point/"+
+                "nt:tp-id";
+            }
+            description
+              "Relative reference to source termination point.";
+          }
+          description
+            "Reference to source NTP.";
+        }
+        container to {
+          leaf tp-ref {
+            type leafref {
+              path "../../../../../../../nt:termination-point/"+
+                "nt:tp-id";
+            }
+            description
+              "Relative reference to destination termination point.";
+          }
+          description
+            "Reference to destination NTP.";
+        }
+        uses connectivity-matrix-entry-attributes;
+      } // connectivity-matrix
+    } // connectivity-matrices
   } // te-node-connectivity-matrix
-    
+
   grouping te-node-connectivity-matrix-abs {
-    description 
+    description
       "Connectivity matrix on a TE node, using absolute
        paths to reference termination points.";
     list connectivity-matrix {
@@ -1144,18 +1458,18 @@
       }
       container from {
         uses nt:tp-ref;
-        description 
+        description
           "Reference to source NTP.";
       }
       container to {
         uses nt:tp-ref;
-        description 
+        description
           "Reference to destination NTP.";
       }
       leaf is-allowed {
         type boolean;
         description
-          "true  - switching is allowed, 
+          "true  - switching is allowed,
            false - switching is disallowed.";
       }
     }
@@ -1180,7 +1494,7 @@
     }
     leaf is-abstract {
       type empty;
-      description 
+      description
         "Present if the node is abstract, not present if the node
          is actual.";
     }
@@ -1194,13 +1508,13 @@
     }
     container underlay-topology {
       if-feature te-topology-hierarchy;
-      description 
-        "When an abstract node encapsulates a topology, 
+      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 {
@@ -1208,6 +1522,7 @@
       description
         "The current operational state of the node.";
     }
+    uses geolocation-container;
     leaf is-multi-access-dr {
       type empty;
       description
@@ -1219,13 +1534,13 @@
          RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
          Environments.";
     }
-    uses information-source-attributes;
+    uses information-source-per-node-attributes;
     list information-source-entry {
       key "information-source";
       description
         "A list of information sources learned, including the one
          used.";
-      uses information-source-attributes;
+      uses information-source-per-node-attributes;
       uses te-node-connectivity-matrix;
       uses te-node-info-attributes;
     }
@@ -1249,20 +1564,20 @@
          RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
          Environments.";
     }
-    uses information-source-attributes;
+    uses information-source-per-node-attributes;
     list information-source-entry {
       key "information-source";
       description
         "A list of information sources learned, including the one
          used.";
-      uses information-source-attributes;
+      uses information-source-per-node-attributes;
       uses te-node-connectivity-matrix-abs;
       uses te-node-info-attributes;
     }
   } // te-node-state-derived-notification
 
-  grouping te-node-tunnel-termination-capability {
-    description 
+  grouping te-node-tunnel-termination-attributes {
+    description
       "Termination capability of a tunnel termination point on a
        TE node.";
 
@@ -1289,7 +1604,7 @@
         "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).";        
+         for Multi-Layer and Multi-Region Networks (MLN/MRN).";
     }
     leaf protection-type {
       type identityref {
@@ -1300,53 +1615,46 @@
          is capable of.";
     }
 
-    list termination-capability {
-      key "link-tp";
+    container local-link-connectivities {
       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";
-        }
+        "Containing local link connectivity list for
+         a tunnel termination point on a TE node.";
+      leaf number-of-entries {
+        type uint16;
         description
-          "Link termination point.";
+          "The number of local link connectivity list entries.
+           If this number is speficied in the configuration request,
+           the number is requested number of entries, which may not
+           all be listed in the list;
+           if this number is reported in the state data,
+           the number is the current number of operational entries.";
       }
-
-      uses connectivity-label-restriction-list;
-
-      list max-lsp-bandwidth {
-        key "priority";
-        max-elements "8";
+      uses connectivity-matrix-entry-attributes;
+      list local-link-connectivity {
+        key "link-tp-ref";
         description
-          "Maximum LSP Bandwidth at priorities 0-7.";
+          "The termination capabilities between
+           tunnel-termination-point and link termination-point.
+           The capability information can be used to compute
+           the tunnel path.
+           The Interface Adjustment Capability Descriptors (IACD)
+           [RFC6001] on each link-tp can be derived from this
+           local-link-connectivity list.";
         reference
           "RFC6001: Generalized MPLS (GMPLS) Protocol Extensions
            for Multi-Layer and Multi-Region Networks (MLN/MRN).";
-        leaf priority {
-          type uint8 {
-            range "0..7";
-          }
-          description "Priority.";
-        }
-        leaf bandwidth {
-          type decimal64 {
-            fraction-digits 2;
+        leaf link-tp-ref {
+          type leafref {
+            path "../../../../../../nt:termination-point/nt:tp-id";
           }
           description
-            "Max LSP Bandwidth for this level.";
+            "Link termination point.";
         }
-      } // max-lsp-bandwidth
-    } // termination-capability
-  } // te-node-tunnel-termination-capability
+        
+        uses connectivity-matrix-entry-attributes;
+      } // local-link-connectivity
+    } // local-link-connectivities
+  } // te-node-tunnel-termination-attributes
 
   grouping te-path-element {
     description
@@ -1354,23 +1662,23 @@
        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.";
-      }
+    leaf te-tp-id {
+      type te-types:te-tp-id;
+      description
+        "An identifier to uniquely identify a TE termination
+         point.";
+    }
+
+    container te {
+      must "../te-tp-id";
+      presence "TE support.";
+      description
+        "Indicates TE support.";
 
       container config {
         description
@@ -1382,14 +1690,14 @@
         description
           "Operational state data.";
         uses te-termination-point-config;
+        uses geolocation-container;
       } // state
     } // te
   } // te-termination-point-augment
 
   grouping te-termination-point-config {
-    description 
+    description
       "TE termination point configuration grouping.";
-    uses sch:schedules;
     uses interface-switching-capability-list;
     leaf inter-layer-lock-id {
       type uint32;
@@ -1400,17 +1708,17 @@
         "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).";        
+         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 
+      description
         "Indicates TE support.";
 
       container templates {
@@ -1432,7 +1740,7 @@
           uses template-attributes;
           uses te-node-config-attributes-template;
         } // node-template
-        
+
         list link-template {
           if-feature template;
           key "name";
@@ -1454,32 +1762,30 @@
   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.";
-      }
+    leaf provider-id {
+      type te-types:te-global-id;
+      description
+        "An identifier to uniquely identify a provider.";
+    }
+    leaf client-id {
+      type te-types:te-global-id;
+      description
+        "An identifier to uniquely identify a client.";
+    }
+    leaf te-topology-id {
+      type te-types:te-topology-id;
+      description
+        "It is presumed that a datastore will contain many
+         topologies. To distinguish between topologies it is
+         vital to have UNIQUE topology identifiers.";
+    }
+
+    container te {
+      must "../provider-id and ../client-id and ../te-topology-id";
+      presence "TE support.";
+      description
+        "Indicates TE support.";
 
       container config {
         description
@@ -1491,14 +1797,14 @@
         description
           "Operational state data.";
         uses te-topology-config;
+        uses geolocation-container;
       } // state
     } // te
   } // te-topology-augment
 
   grouping te-topology-config {
-    description 
+    description
       "TE topology configuration grouping.";
-    uses sch:schedules;
     leaf preference {
       type uint8 {
         range "1..255";
@@ -1517,39 +1823,32 @@
         "RFC3272: Overview and Principles of Internet Traffic
          Engineering.";
     }
+    list nsrlg {
+      if-feature nsrlg;
+      key "id";
+      description
+        "List of NSRLGs (Not Sharing Risk Link Groups).";
+      reference
+        "RFC4872: RSVP-TE Extensions in Support of End-to-End
+         Generalized Multi-Protocol Label Switching (GMPLS)
+         Recovery";
+      leaf id {
+        type uint32;
+        description
+          "Identify the NSRLG entry.";
+      }
+      leaf disjointness {
+        type te-path-disjointness;
+        description
+          "The type of resource disjointness.";
+      }
+    } // nsrlg
   } // te-topology-config
 
   grouping te-topology-ref {
     description
       "References a TE topology.";
-    leaf 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 {
+    leaf network-ref {
       type leafref {
         path "/nw:networks/nw:network/nw:network-id";
         require-instance false;
@@ -1568,16 +1867,34 @@
         "Its presence identifies the TE topology type.";
     }
   } // te-topology-type
-  
+
+  grouping te-tunnel-tp-ref {
+    description
+      "References a tunnel termination point in a TE topology.";
+    leaf tunnel-tp-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"+
+          "network-ref]/nw:node[nw:node-id=current()/../node-ref]/"+
+          "te/tunnel-termination-point/tunnel-tp-id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to a tunnel termination point.
+         (This should not be used for relative references.
+         In such a case, a relative path should be used instead.)";
+    }
+    uses nw:node-ref;
+  } // te-tunnel-tp-ref
+
   grouping template-attributes {
-    description 
+    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 
+         templates. When two or more templates specify values for
          one configuration attribute, the value from the template
          with the highest priority is used.";
     }
@@ -1585,8 +1902,8 @@
       type enumeration {
         enum no-action {
           description
-            "When an attribute changes in this template, the 
-             configuration node referring to this template does 
+            "When an attribute changes in this template, the
+             configuration node referring to this template does
              not take any action.";
         }
         enum not-allowed {
@@ -1596,9 +1913,9 @@
         }
         enum cascade {
           description
-            "When an attribute changes in this template, the 
+            "When an attribute changes in this template, the
              configuration object referring to this template applies
-             the new attribute value to the corresponding 
+             the new attribute value to the corresponding
              configuration.";
         }
       }
@@ -1633,7 +1950,7 @@
       "Configuration parameters for TE topology.";
     uses te-topology-augment;
   }
-  
+
   augment "/nw:networks/nw:network/nw:node" {
     when "../nw:network-types/te-topology" {
       description
@@ -1669,12 +1986,22 @@
   }
 
   /*
-   * Operational state data nodes
-   */
-
-  /*
    * Notifications
    */
+  grouping te-node-config-attributes-notification {
+            description
+              "Configuration node attributes for template in a TE topology.";
+            container te-node-attributes {
+              description "Containing node attributes in a TE topology.";
+              leaf admin-status {
+                type te-types:te-admin-status;
+                description
+                  "The administrative state of the link.";
+              }
+              uses te-node-connectivity-matrix-abs;
+              uses te-node-info-attributes;
+            } // te-node-attributes
+  } // te-node-config-attributes-notification
 
   notification te-node-event {
     description "Notification event for TE node.";
@@ -1687,7 +2014,7 @@
     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 {
@@ -1704,4 +2031,5 @@
     description "Add state attributes to te-link underlay.";
     uses te-link-state-underlay-attributes;
   }
+
 }
diff --git a/apps/tenbi/yangmodel/src/main/yang/ietf-te-types.yang b/apps/tenbi/yangmodel/src/main/yang/ietf-te-types.yang
index 265e21e..2e76380 100644
--- a/apps/tenbi/yangmodel/src/main/yang/ietf-te-types.yang
+++ b/apps/tenbi/yangmodel/src/main/yang/ietf-te-types.yang
@@ -892,6 +892,28 @@
     }
     description "TE  Event type for notifications";
   } // te-topology-event-type
+
+
+  typedef te-tunnel-event-type {
+      type enumeration {
+        enum "add" {
+          value 0;
+          description
+            "A TE tunnel has been added.";
+        }
+        enum "remove" {
+          value 1;
+          description
+            "A TE tunnel has been removed.";
+        }
+        enum "update" {
+          value 2;
+          description
+            "A TE tunnel has been updated.";
+        }
+      }
+      description "TE  Event type for notifications";
+  } // te-tunnel-event-type
   
   typedef te-topology-id {
     type string {