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/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
index 16ea08a..fc2fdee 100644
--- a/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
+++ b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.tenbi.topology.impl;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -38,19 +40,17 @@
         .rev20151208.IetfNetworkTopologyOpParam;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
         .rev20151208.IetfNetworkTopologyService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyOpParam;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyService;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .IetfTeTopologyEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .IetfTeTopologyEventListener;
 import org.onosproject.yms.ymsm.YmsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * The IETF TE Topology NBI Manager implementation.
  */
@@ -137,7 +137,7 @@
         // processSubtreeFiltering() filters the entire data tree based on the
         // user's query and returns the filtered data.
         IetfNetwork result = ietfNetwork.processSubtreeFiltering(
-                (IetfNetworkOpParam) newNetwork,
+                newNetwork,
                 false);
         log.debug("result is: {}", result);
         return result;
@@ -195,7 +195,8 @@
     private class InternalTeTopologyListener implements TeTopologyListener {
         @Override
         public void event(TeTopologyEvent event) {
-            IetfTeTopologyEvent yangEvent = NetworkConverter.teTopoEvent2YangIetfTeTopoEvent(event);
+            IetfTeTopologyEvent yangEvent = NetworkConverter
+                    .teTopoEvent2YangIetfTeTopoEvent(event);
             post(yangEvent);
         }
     }
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
index 1234f7c..6a9cb94 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
@@ -18,7 +18,6 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.tetopology.management.api.TeConstants.MAX_PRIORITY;
 
-import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.BitSet;
 import java.util.List;
@@ -84,51 +83,51 @@
                .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink
                .SupportingLinkBuilder;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.node.AugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.AugmentedNwNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.DefaultTeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.AugmentedNwNetwork;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.link.AugmentedNtLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.link.DefaultAugmentedNtLink;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.AugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState.StateBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.TeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.TeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.UnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.underlayprimarypath.DefaultPathElement;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.node.AugmentedNwNode;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultState.StateBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.TeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.TeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultBackupPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultBackupPath.BackupPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultPrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultPrimaryPath.PrimaryPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.PrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.primarypath.DefaultPathElement;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeOperStatus;
@@ -223,13 +222,11 @@
             }
             if (teLink.externalLink().externalLinkKey() != null) {
                 edBuilder = edBuilder
-                        .remoteTeLinkTpId(TeTpId.fromString(
-                                                                String.valueOf(teLink
+                        .remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink
                                                                         .externalLink()
                                                                         .externalLinkKey()
                                                                         .teLinkTpId())))
-                        .remoteTeNodeId(TeNodeId.fromString(
-                                                                String.valueOf(teLink
+                        .remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink
                                                                         .externalLink()
                                                                         .externalLinkKey()
                                                                         .teNodeId())));
@@ -241,7 +238,8 @@
             for (short i = 0; i < teLink.availBandwidth().length; i++) {
                 UnreservedBandwidthBuilder urBuilder =
                         DefaultUnreservedBandwidth.builder()
-                                                  .bandwidth(BigDecimal.valueOf(teLink.availBandwidth()[i]))
+                                .bandwidth(TeBandwidth.fromString(String
+                                        .valueOf(teLink.availBandwidth()[i])))
                                                   .priority(i);
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
@@ -249,7 +247,8 @@
 
         if (teLink.maxBandwidth() != null) {
             // maxBandwidth is an array of float[], but in yang is just a big decimal
-            attrBuilder = attrBuilder.maxLinkBandwidth(BigDecimal.valueOf(teLink.maxBandwidth()[0]));
+            attrBuilder = attrBuilder.maxLinkBandwidth(TeBandwidth
+                    .fromString(String.valueOf(teLink.maxBandwidth()[0])));
         }
         // FIXME: how to retrieve maxResvLinkBandwidth from teLink
 //        if (teLink.maxResvLinkBandwidth() != null) {
@@ -308,7 +307,8 @@
         }
         if (teLink.maxBandwidth() != null) {
             // maxBandwidth is an array of float[], but in yang is just a big decimal
-            attrBuilder = attrBuilder.maxLinkBandwidth(BigDecimal.valueOf(teLink.maxBandwidth()[0]));
+            attrBuilder = attrBuilder.maxLinkBandwidth(TeBandwidth
+                    .fromString(String.valueOf(teLink.maxBandwidth()[0])));
         }
 //        if (teLink.maxResvLinkBandwidth() != null) {
 //            attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
@@ -346,7 +346,9 @@
             short i = 0;
             for (float f : teLink.availBandwidth()) {
                 UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth
-                        .builder().bandwidth(BigDecimal.valueOf(f)).priority(i);
+                        .builder()
+                        .bandwidth(TeBandwidth.fromString(String.valueOf(f)))
+                        .priority(i);
                 i++;
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
@@ -363,9 +365,8 @@
             InformationSourceState.InformationSourceStateBuilder issBuilder = DefaultInformationSourceState.builder();
 
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
-            topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId())
-                                             .providerIdRef(teLink.sourceTeLinkId().providerId())
-                                             .teTopologyIdRef(teLink.sourceTeLinkId().topologyId());
+            // TODO: pass teTopologyService and retrieve linkRef and NetworkRef from there
+
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -373,7 +374,7 @@
         // Once stateDerived underlay is available in yang and core TE Topology
         // object model, set the value properly
         // stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
-        // .rev20160708.ietftetopology.telinkstatederived.Underlay
+        // .rev20170110.ietftetopology.telinkstatederived.Underlay
         //yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay);
 
         return yangStateBuilder.build();
@@ -383,7 +384,7 @@
      * Link object conversion from TE Topology subsystem to YANG.
      *
      * @param teSubsNetworkLink TE subsystem link object
-     * @param teTopologyService teTopology core service
+     * @param teTopologyService TE Topology Service object
      * @return YANG link object
      */
     public static Link teSubsystem2YangLink(
@@ -447,12 +448,11 @@
 
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath();
 
-        UnderlayPrimaryPathBuilder pathBuilder =
-                                       DefaultUnderlayPrimaryPath.builder();
+        PrimaryPathBuilder pathBuilder = DefaultPrimaryPath.builder();
         if (tePath.pathElements() != null) {
             for (PathElement pathElementTe : tePath.pathElements()) {
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement
+                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.primarypath.PathElement
                    .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
 
                 pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId());
@@ -469,13 +469,10 @@
             }
         }
 
-        pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                                 .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                                 .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
+        pathBuilder = pathBuilder.networkRef(teTopologyService
+                .networkId(teLink.underlayTeTopologyId()));
 
-        pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
-
-        return yangBuilder.underlayPrimaryPath(pathBuilder.build());
+        return yangBuilder.primaryPath(pathBuilder.build());
     }
 
     private static UnderlayBuilder te2YangConfigUnderlayBackupPaths(UnderlayBuilder yangBuilder,
@@ -484,21 +481,19 @@
         List<UnderlayBackupPath> tePaths = teLink.backupPaths();
 
         for (UnderlayBackupPath tePath : tePaths) {
-            UnderlayBackupPathBuilder pathBuilder = DefaultUnderlayBackupPath
+            BackupPathBuilder pathBuilder = DefaultBackupPath
                     .builder();
             pathBuilder = pathBuilder.index(tePath.index());
-            pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                                     .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                                     .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
 
-            pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
+            pathBuilder = pathBuilder.networkRef(teTopologyService
+                    .networkId(teLink.underlayTeTopologyId()));
 
             for (PathElement backupPathElementTe : tePath.pathElements()) {
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement
+                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.backuppath.PathElement
                 .PathElementBuilder elementBuilder =
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement
+                                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.backuppath.DefaultPathElement
                         .builder();
 
                 elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId());
@@ -511,11 +506,9 @@
                     elementBuilder = elementBuilder.type(unmBuilder.build());
                 }
 
-                pathBuilder = pathBuilder
-                        .addToPathElement(elementBuilder.build());
+                pathBuilder = pathBuilder.addToPathElement(elementBuilder.build());
             }
-            yangBuilder = yangBuilder
-                    .addToUnderlayBackupPath(pathBuilder.build());
+            yangBuilder = yangBuilder.addToBackupPath(pathBuilder.build());
         }
 
         return yangBuilder;
@@ -563,33 +556,47 @@
             opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState.operStatus());
         }
 
+        TeTopologyKey underlayTopologyId = null;
+        if (yangLinkAttr != null && yangLinkAttr.underlay() != null && yangLinkAttr.underlay().primaryPath() != null) {
+            underlayTopologyId = findTopologyId(yangNetworks, yangLinkAttr.underlay().primaryPath().networkRef());
+        }
 
-        TeLink teLink = yangLinkAttr2TeLinkAttributes(yangLinkAttr, opStatus, teNodeIdLong, teNodeIdDestLong, teLinkKey,
-                                                      peerTeLinkKey, supportTeLinkId);
+        TeLink teLink = yangLinkAttr2TeLinkAttributes(yangLinkAttr, opStatus,
+                                                      teNodeIdLong,
+                                                      teNodeIdDestLong,
+                                                      teLinkKey,
+                                                      peerTeLinkKey,
+                                                      supportTeLinkId,
+                                                      underlayTopologyId);
 
         return teLink;
     }
 
+    /**
+     * Finds the TE TopologyKey from yangNetworks and a networkRef.
+     *
+     * @param yangNetworks YANG networks object
+     * @param networkRef YANG network reference
+     * @return TeTopologyKey the TE TopologyKey
+     */
+    public static TeTopologyKey findTopologyId(Networks yangNetworks, Object networkRef) {
+        // TODO: add implementation
+        return null;
+    }
+
     private static TeLink yangLinkAttr2TeLinkAttributes(TeLinkAttributes yangLinkAtrr,
                                                         org.onosproject.tetopology.management.api.TeStatus opStatus,
                                                         long teNodeIdLong,
                                                         long teNodeIdDestLong,
                                                         TeLinkTpKey teLinkKey,
                                                         TeLinkTpKey peerTeLinkKey,
-                                                        TeLinkTpGlobalKey supportTeLinkId) {
+                                                        TeLinkTpGlobalKey supportTeLinkId,
+                                                        TeTopologyKey underlayTopologyId) {
         org.onosproject.tetopology.management.api.TeStatus adminStatus = null;
 
         TeLinkTpGlobalKey sourceTeLinkId = null; // from yang to core, we can ignore sourceTeLinkId
-        TeTopologyKey underlayTopologyId = null;
-        CommonLinkData teData = null;
 
-        if (yangLinkAtrr != null && yangLinkAtrr.underlay() != null &&
-                yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
-            underlayTopologyId = new
-                    TeTopologyKey((long) yangLinkAtrr.underlay().underlayPrimaryPath().providerIdRef(),
-                                  (long) yangLinkAtrr.underlay().underlayPrimaryPath().clientIdRef(),
-                                  (long) yangLinkAtrr.underlay().underlayPrimaryPath().teTopologyIdRef());
-        }
+        CommonLinkData teData = null;
 
         if (yangLinkAtrr.adminStatus() != null) {
             adminStatus = EnumConverter.yang2TeSubsystemAdminStatus(yangLinkAtrr.adminStatus());
@@ -617,14 +624,14 @@
         List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth();
         float[] availBandwidth = new float[MAX_PRIORITY + 1];
         for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) {
-            availBandwidth[urbw.priority()] = urbw.bandwidth().floatValue();
+            availBandwidth[urbw.priority()] = Float.valueOf(urbw.bandwidth().string());
         }
 
         float[] maxBandwidth = new float[MAX_PRIORITY + 1];
         if (yangLinkAtrr.maxLinkBandwidth() != null) {
             // Core TE has an array, but YANG is an integer
             for (short p = 0; p <= MAX_PRIORITY; p++) {
-                maxBandwidth[p] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+                maxBandwidth[p] = Float.valueOf(yangLinkAtrr.maxLinkBandwidth().string());
             }
         }
 
@@ -645,10 +652,7 @@
             }
         }
         TePathAttributes teAttributes =
-                new TePathAttributes(yangLinkAtrr.teDefaultMetric(),
-                                     yangLinkAtrr.performanceMetric() == null ? null :
-                                           (yangLinkAtrr.performanceMetric().measurement() == null ? null :
-                                               yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()),
+                new TePathAttributes(yangLinkAtrr.teDefaultMetric(), yangLinkAtrr.teDelayMetric(),
                                      srlgs);
         teData = new CommonLinkData(adminStatus,
                                     opStatus,
@@ -714,9 +718,9 @@
                         (AugmentedNwNetwork) teNetworkFound.yangAugmentedInfo(AugmentedNwNetwork.class);
                 teTopologyId =
                         new org.onosproject.tetopology.management.api.TeTopologyId(
-                                augmentTeIds.te().clientId().uint32(),
-                                augmentTeIds.te().providerId().uint32(),
-                                augmentTeIds.te().teTopologyId().string());
+                                augmentTeIds.clientId().uint32(),
+                                augmentTeIds.providerId().uint32(),
+                                augmentTeIds.teTopologyId().string());
             }
 
             supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
@@ -729,7 +733,14 @@
         return supportTeLinkId;
     }
 
-    private static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId) {
+    /**
+     * Finds TeNodeId from a yangNetwork and yangNodeId.
+     *
+     * @param yangNetwork YANG network object
+     * @param yangNodeId YANG node Id
+     * @return teNodeId teNodeId
+     */
+    public static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId) {
         TeNodeId teNodeId = null;
         for (Node node : yangNetwork.node()) {
             if (node.nodeId().equals(yangNodeId)) {
@@ -737,10 +748,9 @@
                         && !node.yangAugmentedInfoMap().isEmpty()) {
                     AugmentedNwNode yangNodeAugment = (AugmentedNwNode) node
                             .yangAugmentedInfo(AugmentedNwNode.class);
-                    if (yangNodeAugment != null && yangNodeAugment.te() != null
-                            && yangNodeAugment.te().teNodeId() != null) {
-                        Te yangNodeAugTe = yangNodeAugment.te();
-                        teNodeId = yangNodeAugTe.teNodeId();
+                    if (yangNodeAugment != null
+                            && yangNodeAugment.teNodeId() != null) {
+                        teNodeId = yangNodeAugment.teNodeId();
                     }
                 }
             }
@@ -768,8 +778,8 @@
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) yangTpnode
                                                     .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
-                                    if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
-                                        teTpId = Long.valueOf(yangTpAugment.te().teTpId().toString());
+                                    if (yangTpAugment.teTpId() != null) {
+                                        teTpId = Long.valueOf(yangTpAugment.teTpId().toString());
                                     }
                                 }
                             }
@@ -853,13 +863,13 @@
     }
 
     private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath
-                    yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath,
+                    yang2TeSubsystemUnderlayPrimaryPath(PrimaryPath yangpath,
                                                         long teNodeId) {
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null;
 
         List<PathElement> pathElementList = Lists.newArrayList();
-        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-                .telinkunderlayattributes.underlayprimarypath.
+        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+                .telinkunderlayattributes.primarypath.
                 PathElement pathElementYang : yangpath.pathElement()) {
 
             long nodeId = 0;
@@ -885,20 +895,20 @@
     private static List<UnderlayBackupPath>
        yang2TeSubsystemUnderlayBackupPaths(
                 List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                    rev20160708.ietftetopology.telinkunderlayattributes.
-                    UnderlayBackupPath> yangpaths,
+                                                        rev20170110.ietftetopology.telinkunderlayattributes.
+                    BackupPath> yangpaths,
                 long teNodeId) {
 
         List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList();
-        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                 .ietftetopology.telinkunderlayattributes.
-                UnderlayBackupPath yangConfig : yangpaths) {
+                BackupPath yangConfig : yangpaths) {
             UnderlayBackupPath ubp = null;
             List<PathElement> backupPathElementList = Lists.newArrayList();
             long nodeId = 0;
             ElementType type = null;
-            for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-                    .telinkunderlayattributes.underlaybackuppath.
+            for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+                    .telinkunderlayattributes.backuppath.
                     PathElement backupYang : yangConfig.pathElement()) {
                 // TODO: check more types
                 if (backupYang.type() instanceof UnnumberedLink) {
@@ -935,14 +945,14 @@
         List<UnderlayBackupPath> underlayBackupPathsList = null;
         TeTunnelId teTunnelId = new TeTunnelId(srcTeNodeId, dstTeNodeId, 0); // FIXME: how to find teTunnelId?
 
-        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
+        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().primaryPath() != null) {
             underlayPrimaryPath =
-                    yang2TeSubsystemUnderlayPrimaryPath(yangLinkAtrr.underlay().underlayPrimaryPath(), srcTeNodeId);
+                    yang2TeSubsystemUnderlayPrimaryPath(yangLinkAtrr.underlay().primaryPath(), srcTeNodeId);
         }
 
-        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayBackupPath() != null) {
+        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().backupPath() != null) {
             underlayBackupPathsList =
-                    yang2TeSubsystemUnderlayBackupPaths(yangLinkAtrr.underlay().underlayBackupPath(), srcTeNodeId);
+                    yang2TeSubsystemUnderlayBackupPaths(yangLinkAtrr.underlay().backupPath(), srcTeNodeId);
         }
 
         org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null;
@@ -950,9 +960,9 @@
             teUnderlay = new org.onosproject.tetopology.management.api.link.
                         UnderlayPath(underlayPrimaryPath,
                                      underlayBackupPathsList,
-                                     TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()),
-                                     (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct?
-                                     (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct?
+                                     TunnelProtectionType.of(yangLinkAtrr.underlay().protectionType()),
+                                     (Long) yangLinkAtrr.underlay().tunnelSrc().tunnelTpRef(), // null safe?
+                                     (Long) yangLinkAtrr.underlay().tunnelDes().tunnelTpRef(), // null safe?
                                      teTunnelId);
         }
 
@@ -1011,6 +1021,7 @@
         NetworkLinkKey networkLinkKey = new NetworkLinkKey(networkId, linkId);
 
         return networkLinkKey;
+
     }
 
     /**
@@ -1022,6 +1033,7 @@
      */
     public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent,
                                                         TeTopologyService teTopologyService) {
+
         KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId();
 
         org.onosproject.tetopology.management.api.
@@ -1052,7 +1064,8 @@
         org.onosproject.tetopology.management.api.
         TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState);
 
-        TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus);
+        TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent,
+                                                              teLink, opStatus, teTopologyService);
 
 
         NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, sourceTp, destTp, supportingLinkIds,
@@ -1062,23 +1075,26 @@
     }
 
     private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, TeLink oldTeLink, TeStatus
-            opStatus) {
+                                                         opStatus, TeTopologyService teTopologyService) {
 
         TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes();
 
         TeLinkTpKey teLinkKey = oldTeLink.teLinkKey();
 
-
-        //long teNodeIdDest = oldTeLink.peerTeLinkKey().teNodeId();
-        //long teNodeIdSrc = oldTeLink.teLinkKey().teNodeId();
         long teNodeIdDest = 0;
         long teNodeIdSrc = 0;
 
         TeLinkTpGlobalKey supportTeLinkId = oldTeLink.supportingTeLinkId();
         TeLinkTpKey peerTeLinkKey = oldTeLink.peerTeLinkKey();
 
+        TeTopologyKey underlayTopologyId = null;
+        // TODO: add code to retrieve underlayTopologyId
+
         TeLink updatedTeLink = yangLinkAttr2TeLinkAttributes(yangTeLinkAttrs, opStatus, teNodeIdSrc, teNodeIdDest,
-                                                             teLinkKey, peerTeLinkKey, supportTeLinkId);
+                                                             teLinkKey,
+                                                             peerTeLinkKey,
+                                                             supportTeLinkId,
+                                                             underlayTopologyId);
 
         return updatedTeLink;
     }
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
index a5a057f..631cbc8 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
@@ -63,26 +63,28 @@
         .networks.network.DefaultAugmentedNdNetwork.AugmentedNdNetworkBuilder;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
         .networks.network.augmentedndnetwork.Link;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .IetfTeTopologyEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.IetfTeTopologyEventSubject;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.IetfTeTopologyEventSubject;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks
         .network.AugmentedNwNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks
         .network.DefaultAugmentedNwNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks
         .network.networktypes.AugmentedNwNetworkTypes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks
         .network.networktypes.DefaultAugmentedNwNetworkTypes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .tetopologyaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .tetopologyaugment.Te;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tetopologyaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tetopologyaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .tetopologytype.DefaultTeTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
         .tetopologytype.TeTopology;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeGlobalId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
@@ -222,9 +224,9 @@
     /**
      * Networks object conversion from YANG to TE Topology subsystem.
      *
-     * @param yangNetworks Networks YANG object
+     * @param yangNetworks      Networks YANG object
      * @param yangNetworkStates NetworkStates YANG object
-     * @param deviceId The identifier of RESTCONF server device
+     * @param deviceId the device Id
      * @return teSubsystem TE Topology subsystem networks object
      */
     public static org.onosproject.tetopology.management.api.Networks yang2TeSubsystemNetworks(
@@ -310,17 +312,29 @@
     }
 
     private static NetworkBuilder te2YangTopologyIds(NetworkBuilder builder,
-                                                     org.onosproject.tetopology.management.api.TeTopologyId
-                                                             teTopologyId) {
+                                                     org.onosproject.tetopology.management.api
+                                                             .TeTopologyId teTopologyId,
+                                                     TeTopologyService teTopologyService,
+                                                     KeyId networkKeyId) {
+
+        //teBuilder. //OPTIMIZATIONCRITERION for Config/State
         Te.TeBuilder teBuilder = DefaultTe.builder();
-        teBuilder.clientId(new TeGlobalId(teTopologyId.clientId()));
-        teBuilder.providerId(new TeGlobalId(teTopologyId.providerId()));
-        if (teTopologyId.topologyId() != null) {
-            teBuilder.teTopologyId(new TeTopologyId(teTopologyId.topologyId()));
-        }
+        Config.ConfigBuilder configBuilder = DefaultConfig.builder();
+        org.onosproject.tetopology.management.api.Network nt = teTopologyService.network(networkKeyId);
+        TeTopologyKey teTopoKey = new TeTopologyKey(nt.teTopologyId().providerId(),
+                                                    nt.teTopologyId().clientId(),
+                                                    Long.valueOf(nt.teTopologyId().topologyId()));
+        // TODO: add code to set configBuilder.optimizationCriterion
+
+        teBuilder = teBuilder.config(configBuilder.build());
 
         AugmentedNwNetwork.AugmentedNwNetworkBuilder nwAugment = DefaultAugmentedNwNetwork
                 .builder();
+        nwAugment.clientId(new TeGlobalId(teTopologyId.clientId()));
+        nwAugment.providerId(new TeGlobalId(teTopologyId.providerId()));
+        if (teTopologyId.topologyId() != null) {
+            nwAugment.teTopologyId(new TeTopologyId(teTopologyId.topologyId()));
+        }
         nwAugment.te(teBuilder.build());
         builder.addYangAugmentedInfo(nwAugment.build(),
                                      AugmentedNwNetwork.class);
@@ -375,7 +389,9 @@
 
         // TE Topology IDs
         if (teSubsystem.teTopologyId() != null) {
-            builder = te2YangTopologyIds(builder, teSubsystem.teTopologyId());
+            builder = te2YangTopologyIds(builder, teSubsystem.teTopologyId(),
+                                         teTopologyService,
+                                         teSubsystem.networkId());
         }
 
         return builder.build();
@@ -451,7 +467,7 @@
             for (Node node : yangNetwork.node()) {
                 // Convert the Yang Node to a TE node.
                 teNodes.put(KeyId.keyId(node.nodeId().uri().string()),
-                            NodeConverter.yang2TeSubsystemNode(node, yangNetwork));
+                            NodeConverter.yang2TeSubsystemNode(node, yangNetwork, yangNetworks));
             }
         }
 
@@ -473,9 +489,9 @@
                     (AugmentedNwNetwork) yangNetwork.yangAugmentedInfo(AugmentedNwNetwork.class);
             teTopologyId =
                     new org.onosproject.tetopology.management.api.TeTopologyId(
-                            augmentTeIds.te().providerId().uint32(),
-                            augmentTeIds.te().clientId().uint32(),
-                            augmentTeIds.te().teTopologyId().string());
+                            augmentTeIds.providerId().uint32(),
+                            augmentTeIds.clientId().uint32(),
+                            augmentTeIds.teTopologyId().string());
         }
 
         if (yangNetworkState != null) {
@@ -543,7 +559,8 @@
         if (yangEventType == IetfTeTopologyEvent.Type.TE_LINK_EVENT) {
             NetworkLinkEventSubject eventData = (NetworkLinkEventSubject) event.subject();
             TeTopologyEventTypeEnum linkEventType = teTopoEventType2YangTeTopoEventType(event.type());
-            TeLinkEvent yangLinkEvent = LinkConverter.teNetworkLink2yangTeLinkEvent(linkEventType, eventData);
+            TeLinkEvent yangLinkEvent = LinkConverter
+                    .teNetworkLink2yangTeLinkEvent(linkEventType, eventData);
             eventSubject.teLinkEvent(yangLinkEvent);
             yangEvent = new IetfTeTopologyEvent(IetfTeTopologyEvent.Type.TE_LINK_EVENT, eventSubject);
         } else if (yangEventType == IetfTeTopologyEvent.Type.TE_NODE_EVENT) {
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
index 1557d7d..436a9d0 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.tetopology.management.api.EncodingType;
@@ -30,10 +31,7 @@
 import org.onosproject.tetopology.management.api.TeTopologyKey;
 import org.onosproject.tetopology.management.api.TeTopologyService;
 import org.onosproject.tetopology.management.api.link.ElementType;
-import org.onosproject.tetopology.management.api.link.NetworkLink;
-import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
 import org.onosproject.tetopology.management.api.link.TeLinkId;
-import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey;
 import org.onosproject.tetopology.management.api.link.TePathAttributes;
 import org.onosproject.tetopology.management.api.link.UnderlayAbstractPath;
 import org.onosproject.tetopology.management.api.node.CommonNodeData;
@@ -49,6 +47,7 @@
 import org.onosproject.tetopology.management.api.node.TerminationPoint;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ietfinettypes.DomainName;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
@@ -59,47 +58,48 @@
                .ietfnetwork.networks.network.node.DefaultSupportingNode;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
                .ietfnetwork.networks.network.node.SupportingNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.TpId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
                .ietfnetworktopology.networks.network.node.AugmentedNdNode;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
                .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.DefaultTeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.AugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.DefaultAugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.TunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultTo;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.UnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.DefaultTerminationCapability;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.TerminationCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.Te;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.TunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.TeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.ConnectivityMatrices;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrices;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrices.ConnectivityMatricesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.DefaultConnectivityMatrix;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.connectivitymatrix.DefaultFrom;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.connectivitymatrix.DefaultTo;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeinfoattributes.UnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodetunnelterminationattributes.DefaultLocalLinkConnectivities;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodetunnelterminationattributes.LocalLinkConnectivities;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeAdminStatus;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad;
 
@@ -176,6 +176,7 @@
                     te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder,
                                               Map<Long, ConnectivityMatrix> connectivityMatrices) {
         ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder();
+        ConnectivityMatricesBuilder yangConnectivityMatricesBuilder = DefaultConnectivityMatrices.builder();
         for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
             connectivityMatrices.entrySet()) {
             connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
@@ -190,23 +191,21 @@
                                                   // one item in constrainingElements list
                           .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
                                          .build());
-            teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
-                    .addToConnectivityMatrix(connectivityMatrixConfigBuilder
-                            .build());
+            // TODO: add more attributes to connectivityMatrixConfigBuilder--
+
+            yangConnectivityMatricesBuilder = yangConnectivityMatricesBuilder
+                    .addToConnectivityMatrix(connectivityMatrixConfigBuilder.build());
         }
+        teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
+                .connectivityMatrices(yangConnectivityMatricesBuilder.build());
         return teNodeAttributesConfigBuilder;
     }
 
     private static UnderlayTopology teNode2YangUnderlay(TeTopologyKey underlayTopology,
                                                         TeTopologyService teTopologyService) {
-        UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology
-                .builder()
-                .teTopologyIdRef(TeTopologyId
-                        .fromString(String.valueOf(underlayTopology.topologyId())))
-                .clientIdRef(underlayTopology.clientId())
-                .providerIdRef(underlayTopology.providerId());
+        UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology.builder();
 
-        underlayBuilder = underlayBuilder.networkIdRef(teTopologyService.networkId(underlayTopology));
+        underlayBuilder = underlayBuilder.networkRef(teTopologyService.networkId(underlayTopology));
 
         return underlayBuilder.build();
     }
@@ -264,12 +263,12 @@
             InformationSourceState.InformationSourceStateBuilder issBuilder = DefaultInformationSourceState.builder();
 
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
-            topologyBuilder =
-                    topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId())
-                                   .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId())
-                                   // is this correct? Why not sourceTeNodeId().teTopologyKey()?
-                                   .teTopologyIdRef(teSubsystemTeNode
-                                                    .sourceTeNodeId().topologyId());
+            topologyBuilder = topologyBuilder.nodeRef(teTopologyService
+                    .nodeKey(teSubsystemTeNode.sourceTeNodeId()).nodeId())
+                    .networkRef(teTopologyService
+                            .nodeKey(teSubsystemTeNode.sourceTeNodeId())
+                            .networkId());
+
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -319,13 +318,13 @@
         TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
                 DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue()));
 
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder =
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder =
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder();
 
         // Assuming teTunnelTp only has one interLayerLock
@@ -334,46 +333,22 @@
             ttpStateBuilder  = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
         }
 
-        TerminationCapability.TerminationCapabilityBuilder
-                            tcapConfigBuilder = DefaultTerminationCapability.builder();
-        // TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder.
+        // TODO: retrieve teTunnelTp.switchingLayer() and set it to  ttpConfigBuilder and ttpStateBuilder
+        // TODO: retrieve more attributes from teTunnelTp and assign to ttpConfigBuilder and ttpStateBuilder
         // For which ones we can do the conversion?
-        // FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList()
+
+        LocalLinkConnectivities.LocalLinkConnectivitiesBuilder
+            localLinkConnectivitiesBuilder = DefaultLocalLinkConnectivities.builder();
         if (teTunnelTp.localLinkConnectivityList() != null && !teTunnelTp.localLinkConnectivityList().isEmpty()) {
-            for (LocalLinkConnectivity llcn : teTunnelTp.localLinkConnectivityList()) {
-                TeLinkId telinkId = (TeLinkId) llcn.constrainingElements().get(0);
-                TeLinkTpGlobalKey globalKey = new TeLinkTpGlobalKey(teNodeKey, telinkId.value());
-                NetworkLinkKey netLinkKey = teTopologyService.linkKey(globalKey);
-                NetworkLink networkLink = teTopologyService
-                        .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
-                tcapConfigBuilder = tcapConfigBuilder
-                        .linkTp(TpId.fromString(networkLink.source().tpId()
-                                .toString()));
-                // convert teLinkId to networkLinkKey
-                ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
-            }
+            // TODO: add more attributes to localLinkConnectivitiesBuilder (add connectivity matrices.--
 
-            // TODO: retrieve teTunnelTp.switchingLayer() and set it to  ttpConfigBuilder
-
-            TerminationCapability.TerminationCapabilityBuilder tcapStateBuilder =
-                    DefaultTerminationCapability.builder();
-            // TODO: retrieve more attributes from teTunnelTp and assign to tcapStateBuilder
-            // For which ones we can do the conversion?
-            for (LocalLinkConnectivity llcn : teTunnelTp.localLinkConnectivityList()) {
-                TeLinkId telinkId = (TeLinkId) llcn.constrainingElements().get(0);
-                TeLinkTpGlobalKey globalKey = new TeLinkTpGlobalKey(teNodeKey, telinkId.value());
-                NetworkLinkKey netLinkKey = teTopologyService.linkKey(globalKey);
-                NetworkLink networkLink = teTopologyService
-                        .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
-                tcapStateBuilder = tcapStateBuilder
-                        .linkTp(TpId.fromString(networkLink.source().tpId()
-                                .toString()));
-                ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
-            }
+            ttpConfigBuilder = ttpConfigBuilder.localLinkConnectivities(localLinkConnectivitiesBuilder.build());
+            ttpStateBuilder = ttpStateBuilder.localLinkConnectivities(localLinkConnectivitiesBuilder.build());
         }
 
         tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
                                          .state(ttpStateBuilder.build());
+        // TODO: add supporting ttp.--
 
         return tunnelTpBuilder.build();
     }
@@ -431,8 +406,9 @@
 
             TeBuilder yangTeBuilder = DefaultTe.builder();
 
-            yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad
-                    .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId())
+            nodeAugmentBuilder = nodeAugmentBuilder
+                    .teNodeId(TeNodeId.of(DottedQuad.of(Ip4Address
+                            .valueOf((int) teSubsystemTeNode.teNodeId())
                             .toString())));
 
             // Set configuration data
@@ -462,10 +438,12 @@
      *
      * @param yangNode Node in YANG model
      * @param yangNetwork YANG network
+     * @param yangNetworks YANG networks
      * @return TE subsystem node
      */
     public static org.onosproject.tetopology.management.api.node.NetworkNode
-                    yang2TeSubsystemNode(Node yangNode, Network yangNetwork) {
+            yang2TeSubsystemNode(Node yangNode, Network yangNetwork,
+                                 Networks yangNetworks) {
         checkNotNull(yangNode, E_NULL_YANG_NODE);
 
         org.onosproject.tetopology.management.api.node.DefaultNetworkNode node;
@@ -493,10 +471,12 @@
 
             AugmentedNwNode yangNodeAugment = (AugmentedNwNode) yangNode
                     .yangAugmentedInfo(AugmentedNwNode.class);
-            if (yangNodeAugment != null && yangNodeAugment.te() != null && yangNodeAugment.te().teNodeId() != null) {
+            if (yangNodeAugment != null && yangNodeAugment.te() != null && yangNodeAugment.teNodeId() != null) {
+                TeNodeId teNodeId = yangNodeAugment.teNodeId();
                 Te yangNodeAugTe = yangNodeAugment.te();
-                teNode = yang2TeSubsystemNodeAugment(yangNodeAugTe,
+                teNode = yang2TeSubsystemNodeAugment(yangNodeAugTe, teNodeId,
                                                      yangNetwork,
+                                                     yangNetworks,
                                                      yangNode,
                                                      tps);
             }
@@ -511,21 +491,21 @@
     private static Map<Long, ConnectivityMatrix>
                     yang2TeSubsystemNodeConnectivityMatrix(String networkId,
                                                            String nodeId,
-                                                           List<org.onosproject.yang.gen.v1.urn.ietf
-                                                           .params.xml.ns.yang.ietf.te.topology.rev20160708
-                                                           .ietftetopology.tenodeconnectivitymatrix.
-                                                           ConnectivityMatrix> yangMatrix) {
+                                                           ConnectivityMatrices yangMatrices) {
 
         Map<Long, ConnectivityMatrix> teCmList = Maps.newHashMap();
 
-
+        List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+            .tenodeconnectivitymatrix.connectivitymatrices.ConnectivityMatrix>
+                yangMatrix = yangMatrices.connectivityMatrix();
         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
-                .topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.
+                .topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.
                 ConnectivityMatrix cmYang : yangMatrix) {
 
             ElementType from = new TeLinkId(Long.valueOf(((String) cmYang.from().tpRef()))); // is this correct?
 
             UnderlayAbstractPath underlayPath = null; // ignore
+            // TODO: add pathElements and underlayPath.--
 
             List<ElementType> mergingList = Lists.newArrayList(); // empty merging list for now
 
@@ -543,9 +523,7 @@
             }
             TePathAttributes teAttributes = new
                     TePathAttributes(cmYang.teDefaultMetric(),
-                                     cmYang.performanceMetric() == null ? null :
-                                         (cmYang.performanceMetric().measurement() == null ? null :
-                                             cmYang.performanceMetric().measurement().unidirectionalDelay()),
+                                     cmYang.teDelayMetric(),
                                      srlgs);
             ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(),
                                                                from,
@@ -561,16 +539,16 @@
         return teCmList;
     }
 
-    private static TeTopologyKey yang2TeSubsystemNodeUnderlayTopology(UnderlayTopology ut) {
-        TeTopologyKey tetopokey = new TeTopologyKey((Long) ut.providerIdRef(),
-                                                    (Long) ut.clientIdRef(),
-                                                    Long.valueOf((String) ut.teTopologyIdRef()));
+    private static TeTopologyKey yang2TeSubsystemNodeUnderlayTopology(UnderlayTopology ut, Networks yangNetworks) {
+        TeTopologyKey tetopokey = LinkConverter.findTopologyId(yangNetworks,
+                                                               ut.networkRef());
         return tetopokey;
     }
 
     // TODO: retrieve the details of tunnel termiantion points from yang to te
     private static Map<Long, org.onosproject.tetopology.management.api.node.
-                      TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
+                      TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode,
+                                                                  Networks yangNetworks) {
         Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps
                 .newHashMap();
         for (TunnelTerminationPoint ttpYang : ttps) {
@@ -588,30 +566,28 @@
             // FIXME: once new yang model is used, we can make llc
             ElementType elt = null;
             List<ElementType> eltList = Lists.newArrayList();
-
-            if (ttpYang.config() != null
-                    && ttpYang.config().terminationCapability() != null
-                    && !ttpYang.config().terminationCapability().isEmpty()) {
-                for (TerminationCapability tercap : ttpYang.config()
-                        .terminationCapability()) {
-
-                    if (yangNode.yangAugmentedInfoMap() != null
-                            && !yangNode.yangAugmentedInfoMap().isEmpty()) {
-
+            if (ttpYang.config() != null &&
+                    ttpYang.config().localLinkConnectivities() != null &&
+                    CollectionUtils.isNotEmpty(ttpYang.config().localLinkConnectivities().localLinkConnectivity())) {
+                for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                        .ietftetopology.tenodetunnelterminationattributes.locallinkconnectivities
+                        .LocalLinkConnectivity yangLlc : ttpYang.config()
+                                                            .localLinkConnectivities().localLinkConnectivity()) {
+                    if (MapUtils.isNotEmpty(yangNode.yangAugmentedInfoMap())) {
                         AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
                                 .yangAugmentedInfo(AugmentedNdNode.class);
                         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml
                                 .ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
                                 .networks.network.node.augmentedndnode
                                 .TerminationPoint tpItem : yangTpNodeAugment.terminationPoint()) {
-                            if (tpItem.tpId().uri().string().equals(tercap.linkTp().toString())) {
+                            if (tpItem.tpId().uri().string().equals(yangLlc.linkTpRef().toString())) {
                                 if (tpItem.yangAugmentedInfoMap() != null
                                         && !tpItem.yangAugmentedInfoMap().isEmpty()) {
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) tpItem
                                             .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
-                                    if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
-                                        elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString()));
+                                    if (yangTpAugment.teTpId() != null) {
+                                        elt = new TeLinkId(Long.valueOf(yangTpAugment.teTpId().toString()));
                                         break;
                                     }
                                 }
@@ -622,6 +598,7 @@
 //                    tercap.linkTp().toString() //tpId -> tp -> te-tp-id (long)
                 }
             }
+
             TePathAttributes teAttributes = null; // how to find these
                                                   // attributes from ttpYang?
             UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang?
@@ -633,6 +610,8 @@
 
             float[] availAdaptBandwidth = null; // how to find availableBandwidth?
 
+            // TODO: add supportTtp and pass it below instead of null.--
+
             org.onosproject.tetopology.management.api.node.
                 TunnelTerminationPoint ttpTe = new
                 org.onosproject.tetopology.management.api.node.
@@ -652,17 +631,18 @@
     }
 
     private static TeNode yang2TeSubsystemNodeAugment(Te yangNodeAugTe,
+                                                      TeNodeId teNodeId,
                                                       Network yangNetwork,
+                                                      Networks yangNetworks,
                                                       Node yangNode,
                                                       Map<KeyId, TerminationPoint> teTps) {
 
 
         NodeId yangNodeId = yangNode.nodeId();
-        List<SupportingNode> yangSupportNodes = yangNode.supportingNode();
 
         NetworkId yangNetworkId = yangNetwork.networkId();
 
-        long teNodeId = Ip4Address.valueOf(yangNodeAugTe.teNodeId().dottedQuad().string()).toInt();
+        long teNodeIdLong = Ip4Address.valueOf(teNodeId.dottedQuad().string()).toInt();
 
         TeTopologyKey underlayTopologyIdId = null;
 
@@ -716,7 +696,7 @@
                 if (teNodeAttr.underlayTopology() != null) {
 
                     underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr
-                            .underlayTopology());
+                            .underlayTopology(), yangNetworks);
                 }
                 BitSet flags = new BitSet();
                 if (teNodeAttr.isAbstract()) {
@@ -728,20 +708,23 @@
                                             EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
                                             flags);
 
-                if (teNodeAttr.connectivityMatrix() != null) {
+//                if (teNodeAttr.connectivityMatrix() != null) {
+                if (teNodeAttr.connectivityMatrices() != null) {
                     connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(),
                                                                     yangNodeId.uri().toString(),
-                                                                    teNodeAttr.connectivityMatrix());
+                                                                    teNodeAttr.connectivityMatrices());
                 }
 
             }
         }
 
         if (yangNodeAugTe.tunnelTerminationPoint() != null) {
-            ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint(), yangNode);
+            ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint(),
+                                       yangNode,
+                                       yangNetworks);
         }
 
-        TeNode teNode = new DefaultTeNode(teNodeId,
+        TeNode teNode = new DefaultTeNode(teNodeIdLong,
                                           underlayTopologyIdId,
                                           supportTeNodeId,
                                           sourceTeNodeId,
@@ -790,7 +773,7 @@
 
         NetworkNode node = eventData.neworkNode();
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes teNodeAttributes = node == null ? null
                                                                  : teNode2YangTeNodeAttributes(node.teNode());
         builder.teNodeAttributes(teNodeAttributes);
@@ -799,23 +782,23 @@
     }
 
     private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.
-            ietf.te.topology.rev20160708.ietftetopology.
+            ietf.te.topology.rev20170110.ietftetopology.
             tenodeconfigattributesnotification.
             TeNodeAttributes teNode2YangTeNodeAttributes(TeNode teNode) {
 
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes.TeNodeAttributesBuilder attrBuilder =
                 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                        rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                         DefaultTeNodeAttributes.builder();
 
         if (teNode.connectivityMatrices() != null) {
 
-            org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+            org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
             .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix
             .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.
-            params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs.
+                            params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrixabs.
             DefaultConnectivityMatrix.builder();
             for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
                 teNode.connectivityMatrices().entrySet()) {
@@ -823,13 +806,13 @@
                         .id(teCmEntry.getKey())
                         .isAllowed(!teCmEntry.getValue().flags()
                                    .get(ConnectivityMatrix.BIT_DISALLOWED))
-                        .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                               .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom
                               .FromBuilder() // TODO: for now, assuming that there is
                                                             // only one 'from', and mergingList is empty
                               .tpRef(teCmEntry.getValue().from())
                                              .build())
-                        .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                             .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix
                             .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
                                                       // one item in constrainingElements list
@@ -842,19 +825,12 @@
         }
 
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes teNodeAttributes = attrBuilder.build();
 
         return teNodeAttributes;
     }
 
-    /**
-     * Retrieves the TE network node key from a YANG network node notification
-     * event.
-     *
-     * @param yangNodeEvent YANG network node notification event
-     * @return TE network node key
-     */
     public static NetworkNodeKey yangNodeEvent2NetworkNodeKey(TeNodeEvent yangNodeEvent) {
         NetworkId networkRef = NetworkId.fromString(yangNodeEvent.networkRef().toString());
         NodeId nodeRef = NodeId.fromString(yangNodeEvent.nodeRef().toString());
@@ -919,7 +895,7 @@
         TeStatus opStatus = oldTeNode.opStatus();
         BitSet flags = oldTeNode.flags();
 
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
                 .tenodeconfigattributesnotification
                 .TeNodeAttributes yangTeNodeAttrs = yangNodeEvent.teNodeAttributes();
 
@@ -935,14 +911,14 @@
             }
 
             List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.
-                    ietf.te.topology.rev20160708.ietftetopology
+                    ietf.te.topology.rev20170110.ietftetopology
                     .tenodeconnectivitymatrixabs.ConnectivityMatrix> yangConnMatrices = yangTeNodeAttrs
                     .connectivityMatrix();
             if (yangConnMatrices != null) {
                 for (org.onosproject.yang.gen.v1.
                         urn.ietf.params.xml.ns.yang.
                         ietf.te.topology
-                        .rev20160708.ietftetopology
+                        .rev20170110.ietftetopology
                         .tenodeconnectivitymatrixabs
                         .ConnectivityMatrix yangConnMatrix : yangConnMatrices) {
                     Long cmId = new Long(yangConnMatrix.id());
@@ -967,7 +943,7 @@
     private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1.
                                                                          urn.ietf.params.xml.ns.yang.
                                                                          ietf.te.topology
-                                                                         .rev20160708.ietftetopology
+            .rev20170110.ietftetopology
                                                                          .tenodeconnectivitymatrixabs
                                                                          .ConnectivityMatrix yangConnMatrix,
                                                                  ConnectivityMatrix oldTeConnMatrix) {
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/TerminationPointConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/TerminationPointConverter.java
index 56bbad2..7569c5c 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/TerminationPointConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/TerminationPointConverter.java
@@ -35,20 +35,20 @@
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
                .ietfnetworktopology.networks.network.node.augmentedndnode.terminationpoint
                        .SupportingTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.interfaceswitchingcapabilitylist.DefaultInterfaceSwitchingCapability;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.interfaceswitchingcapabilitylist.InterfaceSwitchingCapability;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.interfaceswitchingcapabilitylist.interfaceswitchingcapability.DefaultMaxLspBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.interfaceswitchingcapabilitylist.interfaceswitchingcapability.MaxLspBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.interfaceswitchingcapabilitylist.DefaultInterfaceSwitchingCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.interfaceswitchingcapabilitylist.InterfaceSwitchingCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.terminationpoint.DefaultAugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.teterminationpointaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkiscdattributes.DefaultMaxLspBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkiscdattributes.MaxLspBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.teterminationpointaugment.te.State;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTpId;
 
 import com.google.common.collect.Lists;
@@ -98,11 +98,9 @@
         if (teSubsystem.teTpId() != null) {
             AugmentedNtTerminationPoint.AugmentedNtTerminationPointBuilder
                     tpAugmentBuilder = DefaultAugmentedNtTerminationPoint.builder();
-
+            tpAugmentBuilder.teTpId(TeTpId.fromString((String.valueOf(teSubsystem.teTpId()))));
             TeBuilder yangTeBuilder = DefaultTe.builder();
 
-            yangTeBuilder = yangTeBuilder.teTpId(TeTpId.fromString((String.valueOf(teSubsystem.teTpId()))));
-
 //            Config yConfig = teSubsystem2YangTeAugConfig(teSubsystem);
 //            yangTeBuilder = yangTeBuilder.config(yConfig);
 //
@@ -177,8 +175,8 @@
         if (yangTp.yangAugmentedInfoMap() != null && !yangTp.yangAugmentedInfoMap().isEmpty()) {
             AugmentedNtTerminationPoint yangTpAugment =
                     (AugmentedNtTerminationPoint) yangTp.yangAugmentedInfo(AugmentedNtTerminationPoint.class);
-            if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
-                teTpId = KeyId.keyId(yangTpAugment.te().teTpId().toString());
+            if (yangTpAugment.teTpId() != null) {
+                teTpId = KeyId.keyId(yangTpAugment.teTpId().toString());
             }
         }
 
@@ -186,7 +184,6 @@
                 .DefaultTerminationPoint(KeyId.keyId(yangTp.tpId().uri().string()),
                                          spTps,
                                          teTpId == null ? null : Long.valueOf(teTpId.toString()));
-
         return tp;
     }
 
diff --git a/apps/tenbi/yangmodel/pom.xml b/apps/tenbi/yangmodel/pom.xml
index 3ead791..83102f2 100644
--- a/apps/tenbi/yangmodel/pom.xml
+++ b/apps/tenbi/yangmodel/pom.xml
@@ -33,12 +33,12 @@
         <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onos-yang-maven-plugin</artifactId>
-            <version>1.10</version>
+            <version>1.11</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onos-yang-datamodel</artifactId>
-            <version>1.10</version>
+            <version>1.11</version>
         </dependency>
     </dependencies>
 
@@ -47,7 +47,7 @@
            <plugin>
                 <groupId>org.onosproject</groupId>
                 <artifactId>onos-yang-maven-plugin</artifactId>
-                <version>1.10</version>
+                <version>1.11</version>
                 <executions>
                     <execution>
                         <goals>
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 {
diff --git a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
index 54d797d..c87811c 100644
--- a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
+++ b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
@@ -15,7 +15,24 @@
  */
 package org.onosproject.provider.te.topology;
 
-import com.google.common.base.Preconditions;
+import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UPDATED;
+import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
+import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_LINK_NOTIFICATION;
+import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_NODE_NOTIFICATION;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -53,13 +70,11 @@
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-        .IetfTeTopologyEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
-        .tetopologyeventtype.TeTopologyEventTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.IetfTeTopologyEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
 import org.onosproject.yms.ych.YangCodecHandler;
 import org.onosproject.yms.ych.YangProtocolEncodingFormat;
 import org.onosproject.yms.ych.YangResourceIdentifierType;
@@ -67,23 +82,7 @@
 import org.onosproject.yms.ymsm.YmsService;
 import org.slf4j.Logger;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
-import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UPDATED;
-import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
-import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_LINK_NOTIFICATION;
-import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_NODE_NOTIFICATION;
-import static org.slf4j.LoggerFactory.getLogger;
+import com.google.common.base.Preconditions;
 
 /**
  * Provider for IETF TE Topology that use RESTCONF as means of communication.