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.