Improving the converter utility for YANG to TE Subsystem and vice versa.
Change-Id: I6d82f2dfb09932768121a27f7601690fb6942344
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 fc4f9de..3bc16a6 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
@@ -33,6 +33,7 @@
import org.onosproject.tetopology.management.api.link.ExternalLink;
import org.onosproject.tetopology.management.api.link.LinkBandwidth;
import org.onosproject.tetopology.management.api.link.NetworkLink;
+import org.onosproject.tetopology.management.api.link.NetworkLinkEventSubject;
import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
import org.onosproject.tetopology.management.api.link.PathElement;
import org.onosproject.tetopology.management.api.link.TeLink;
@@ -107,7 +108,6 @@
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;
@@ -251,20 +251,20 @@
// attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
// }
- UnderlayBuilder builder = DefaultUnderlay.builder();
- if (teLink.primaryPath() != null) {
-
- // TODO: what is underlayProtectionType in tePath?
- // builder = builder.underlayProtectionType(tePath.protectionType());
-
- builder = te2YangConfigUnderlayPrimaryPath(builder, teLink);
- }
-
- if (teLink.backupPaths() != null) {
- builder = te2YangConfigUnderlayBackupPaths(builder, teLink);
- }
-
- attrBuilder = attrBuilder.underlay(builder.build());
+// UnderlayBuilder builder = DefaultUnderlay.builder();
+// if (teLink.primaryPath() != null) {
+//
+// // TODO: what is underlayProtectionType in tePath?
+// // builder = builder.underlayProtectionType(tePath.protectionType());
+//
+// builder = te2YangConfigUnderlayPrimaryPath(builder, teLink);
+// }
+//
+// if (teLink.backupPaths() != null) {
+// builder = te2YangConfigUnderlayBackupPaths(builder, teLink);
+// }
+//
+// attrBuilder = attrBuilder.underlay(builder.build());
ConfigBuilder yangConfigBuilder = DefaultConfig.builder()
.teLinkAttributes(attrBuilder.build());
@@ -297,10 +297,10 @@
.linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
.tunnelProtectionType()));
}
- // FIXME: maxBandwidth stuff are array[] in TE but not in yang...
-// if (teLink.maxLinkBandwidth() != null) {
-// attrBuilder = attrBuilder.maxLinkBandwidth(teLink.maxLinkBandwidth());
-// }
+ 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]));
+ }
// if (teLink.maxResvLinkBandwidth() != null) {
// attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
// }
@@ -434,7 +434,7 @@
private static UnderlayBuilder te2YangConfigUnderlayPrimaryPath(
UnderlayBuilder yangBuilder,
- TeLink teLink) {
+ TeLink teLink, TeTopologyService teTopologyService) {
org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath();
@@ -458,14 +458,14 @@
.providerIdRef(teLink.underlayTeTopologyId().providerId())
.teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
- // TODO: get networkRefId from service
-// pathBuilder = pathBuilder.networkIdRef(networkIdRef);
+ pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
return yangBuilder.underlayPrimaryPath(pathBuilder.build());
}
private static UnderlayBuilder te2YangConfigUnderlayBackupPaths(UnderlayBuilder yangBuilder,
- TeLink teLink) {
+ TeLink teLink,
+ TeTopologyService teTopologyService) {
List<UnderlayBackupPath> tePaths = teLink.backupPaths();
for (UnderlayBackupPath tePath : tePaths) {
@@ -475,8 +475,8 @@
pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
.providerIdRef(teLink.underlayTeTopologyId().providerId())
.teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
- // TODO: find networkIdRef from the service
-// pathBuilder = pathBuilder.networkIdRef(networkIdRef);
+
+ pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
for (PathElement backupPathElementTe : tePath.pathElements()) {
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
@@ -505,24 +505,35 @@
Network yangNetwork,
Networks yangNetworks) {
TeNodeId teNodeId = findTeNodeId(yangNetwork,
- yangLink.source().sourceNode(),
- yangLink.source().sourceTp());
- long teNodeIdLong = Ip4Address.valueOf(teNodeId.dottedQuad().string()).toInt();
+ yangLink.source().sourceNode());
+ long teNodeIdLong = -1;
+ if (teNodeId != null && teNodeId.dottedQuad() != null) {
+ teNodeIdLong = Ip4Address.valueOf(teNodeId.dottedQuad().string())
+ .toInt();
+ }
TeLinkTpKey teLinkKey = new TeLinkTpKey(teNodeIdLong,
findTeTpId(yangNetwork,
yangLink.source().sourceNode(),
yangLink.source().sourceTp()));
- TeNodeId teNodeIdDest = findTeNodeId(yangNetwork,
- yangLink.destination().destNode(),
- yangLink.destination().destTp());
- long teNodeIdDestLong = Ip4Address.valueOf(teNodeIdDest.dottedQuad().string()).toInt();
+ TeNodeId teNodeIdDest = null;
+ if (yangLink.destination() != null) {
+ teNodeIdDest = findTeNodeId(yangNetwork,
+ yangLink.destination().destNode());
+ }
+ long teNodeIdDestLong = -1;
+ if (teNodeIdDest != null && teNodeIdDest.dottedQuad() != null) {
+ teNodeIdDestLong = Ip4Address.valueOf(teNodeIdDest.dottedQuad().string()).toInt();
+ }
- TeLinkTpKey peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong,
- findTeTpId(yangNetwork,
- yangLink.destination().destNode(),
- yangLink.destination().destTp()));
+ TeLinkTpKey peerTeLinkKey = null;
+ if (yangLink.destination() != null) {
+ peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong,
+ findTeTpId(yangNetwork,
+ yangLink.destination().destNode(),
+ yangLink.destination().destTp()));
+ }
TeLinkTpGlobalKey supportTeLinkId = findSupportTeLinkId(yangNetworks, yangLink);
@@ -551,9 +562,13 @@
TeTopologyKey underlayTopologyId = null;
CommonLinkData teData = null;
- underlayTopologyId = new TeTopologyKey((long) yangLinkAtrr.underlay().underlayPrimaryPath().providerIdRef(),
- (long) yangLinkAtrr.underlay().underlayPrimaryPath().clientIdRef(),
- (long) yangLinkAtrr.underlay().underlayPrimaryPath().teTopologyIdRef());
+ 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());
+ }
if (yangLinkAtrr.adminStatus() != null) {
adminStatus = EnumConverter.yang2TeSubsystemAdminStatus(yangLinkAtrr.adminStatus());
@@ -564,12 +579,18 @@
flags.set(TeLink.BIT_ABSTRACT);
}
- ExternalLink externalLink = new ExternalLink(null, yangLinkAtrr.externalDomain().plugId());
+ ExternalLink externalLink = null;
+ if (yangLinkAtrr != null && yangLinkAtrr.externalDomain() != null) {
+ externalLink = new ExternalLink(null, yangLinkAtrr.externalDomain().plugId());
+ }
UnderlayPath underlayPath = null;
underlayPath = yang2TeSubsystemUnderlayPath(yangLinkAtrr, teNodeIdLong,
teNodeIdDestLong);
- Long adminGroup = Long.valueOf(yangLinkAtrr.administrativeGroup().toString());
+ Long adminGroup = null;
+ if (yangLinkAtrr != null && yangLinkAtrr.administrativeGroup() != null) {
+ adminGroup = Long.valueOf(yangLinkAtrr.administrativeGroup().toString());
+ }
List<Long> interLayerLocks = null; // FIXME: how to find interLayerLocks?
List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth();
@@ -581,7 +602,9 @@
}
float[] maxBandwidth = new float[1];
- maxBandwidth[0] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+ if (yangLinkAtrr.maxLinkBandwidth() != null) {
+ maxBandwidth[0] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+ }
float[] maxAvailLspBandwidth = null; // FIXME: how to find this?
float[] minAvailLspBandwidth = null; // FIXME: how to find this?
@@ -592,12 +615,18 @@
minAvailLspBandwidth,
null); // FIXME: how to find odu resource?
List<Long> srlgs = Lists.newArrayList();
- for (Srlg srlg : yangLinkAtrr.teSrlgs().value()) {
- srlgs.add(srlg.uint32());
+ if (yangLinkAtrr.teSrlgs() != null
+ && yangLinkAtrr.teSrlgs().value() != null
+ && !yangLinkAtrr.teSrlgs().value().isEmpty()) {
+ for (Srlg srlg : yangLinkAtrr.teSrlgs().value()) {
+ srlgs.add(srlg.uint32());
+ }
}
TePathAttributes teAttributes =
new TePathAttributes(yangLinkAtrr.teDefaultMetric(),
- yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay(),
+ yangLinkAtrr.performanceMetric() == null ? null :
+ (yangLinkAtrr.performanceMetric().measurement() == null ? null :
+ yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()),
srlgs);
teData = new CommonLinkData(adminStatus,
opStatus,
@@ -621,54 +650,64 @@
Link yangLink) {
Network teNetworkFound = null;
LinkId teLinkIdFound = null;
- for (Network ynetItem : yangNetworks.network()) {
- if (ynetItem.networkId().equals(yangLink.supportingLink().get(0).networkRef())) {
- teNetworkFound = ynetItem;
- teLinkIdFound = yangLink.supportingLink().get(0).linkRef();
- break;
- }
- }
- Link teLinkFound = null;
- if (teNetworkFound.yangAugmentedInfo(AugmentedNdNetwork.class) != null) {
- AugmentedNdNetwork augmentLink =
- (AugmentedNdNetwork) teNetworkFound.yangAugmentedInfo(AugmentedNdNetwork.class);
- for (Link link : augmentLink.link()) {
- if (link.linkId().equals(teLinkIdFound)) {
- teLinkFound = link;
- break;
+ TeLinkTpGlobalKey supportTeLinkId = null;
+
+ if (yangLink != null && yangLink.supportingLink() != null && !yangLink.supportingLink().isEmpty()) {
+ if (yangNetworks.network() != null && !yangNetworks.network().isEmpty()) {
+ for (Network ynetItem : yangNetworks.network()) {
+ if (ynetItem.networkId() != null) {
+ if (ynetItem.networkId().equals(yangLink.supportingLink().get(0).networkRef())) {
+ teNetworkFound = ynetItem;
+ teLinkIdFound = yangLink.supportingLink().get(0).linkRef();
+ break;
+ }
+ }
}
}
- }
+ Link teLinkFound = null;
+ if (teNetworkFound.yangAugmentedInfo(AugmentedNdNetwork.class) != null) {
+ AugmentedNdNetwork augmentLink =
+ (AugmentedNdNetwork) teNetworkFound.yangAugmentedInfo(AugmentedNdNetwork.class);
+ for (Link link : augmentLink.link()) {
+ if (link.linkId().equals(teLinkIdFound)) {
+ teLinkFound = link;
+ break;
+ }
+ }
+ }
- TeNodeId teSupportNodeId = findTeNodeId(teNetworkFound,
+ TeNodeId teSupportNodeId = findTeNodeId(teNetworkFound,
+ teLinkFound.source().sourceNode());
+ long tenIdLong = -1;
+ if (teSupportNodeId != null) {
+ tenIdLong = Ip4Address.valueOf(teSupportNodeId.dottedQuad().string()).toInt();
+ }
+ long teSupportLinkTpId = findTeTpId(teNetworkFound,
teLinkFound.source().sourceNode(),
teLinkFound.source().sourceTp());
- long tenIdLong = Ip4Address.valueOf(teSupportNodeId.dottedQuad().string()).toInt();
- long teSupportLinkTpId = findTeTpId(teNetworkFound,
- teLinkFound.source().sourceNode(),
- teLinkFound.source().sourceTp());
- org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null;
- if (teNetworkFound.yangAugmentedInfo(AugmentedNwNetwork.class) != null) {
- AugmentedNwNetwork augmentTeIds =
- (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());
+ org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null;
+ if (teNetworkFound.yangAugmentedInfo(AugmentedNwNetwork.class) != null) {
+ AugmentedNwNetwork augmentTeIds =
+ (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());
+ }
+
+ supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
+ teTopologyId.clientId(),
+ Long.valueOf(teTopologyId
+ .topologyId()),
+ tenIdLong, teSupportLinkTpId);
}
- TeLinkTpGlobalKey supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
- teTopologyId.clientId(),
- Long.valueOf(teTopologyId
- .topologyId()),
- tenIdLong, teSupportLinkTpId);
-
return supportTeLinkId;
}
- private static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId, TpId yangTpId) {
+ private static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId) {
TeNodeId teNodeId = null;
for (Node node : yangNetwork.node()) {
if (node.nodeId().equals(yangNodeId)) {
@@ -863,24 +902,26 @@
List<UnderlayBackupPath> underlayBackupPathsList = null;
TeTunnelId teTunnelId = new TeTunnelId(srcTeNodeId, dstTeNodeId, 0); // FIXME: how to find teTunnelId?
- if (yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
+ if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
underlayPrimaryPath =
yang2TeSubsystemUnderlayPrimaryPath(yangLinkAtrr.underlay().underlayPrimaryPath(), srcTeNodeId);
}
- if (yangLinkAtrr.underlay().underlayBackupPath() != null) {
+ if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayBackupPath() != null) {
underlayBackupPathsList =
yang2TeSubsystemUnderlayBackupPaths(yangLinkAtrr.underlay().underlayBackupPath(), srcTeNodeId);
}
- org.onosproject.tetopology.management.api.link.UnderlayPath 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?
- teTunnelId);
+ org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null;
+ if (yangLinkAtrr.underlay() != null) {
+ 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?
+ teTunnelId);
+ }
return teUnderlay;
}
@@ -894,30 +935,34 @@
* @return YANG Object converted from linkData
*/
public static TeLinkEvent teNetworkLink2yangTeLinkEvent(TeTopologyEventTypeEnum eventType,
- NetworkLink linkData) {
+ NetworkLinkEventSubject linkData) {
TeLinkEvent.TeLinkEventBuilder builder = new DefaultTeLinkEvent.TeLinkEventBuilder();
TeTopologyEventType yangEventType = new TeTopologyEventType(eventType);
builder.eventType(yangEventType);
- LinkId linkId = LinkId.fromString(linkData.linkId().toString());
+ NetworkId newtorkId = NetworkId.fromString(linkData.key().networkId().toString());
+ builder.networkRef(newtorkId);
+ LinkId linkId = LinkId.fromString(linkData.key().linkId().toString());
builder.linkRef(linkId);
- TeLinkAttributes teLinkAttributes = teLink2YangConfig(linkData.teLink()).teLinkAttributes();
+ NetworkLink link = linkData.networkLink();
+ TeLinkAttributes teLinkAttributes = link == null ? null
+ : teLink2YangConfig(link.teLink()).teLinkAttributes();
builder.teLinkAttributes(teLinkAttributes);
return builder.build();
}
public static NetworkLinkKey yangLinkEvent2NetworkLinkKey(TeLinkEvent yangLinkEvent) {
- //TODO: Implementation will be submitted as a separate review
- NetworkId networkRef = (NetworkId) (yangLinkEvent.networkRef());
- LinkId linkRef = (LinkId) (yangLinkEvent.linkRef());
+ NetworkId networkRef = NetworkId.fromString(yangLinkEvent.networkRef().toString());
+ LinkId linkRef = LinkId.fromString(yangLinkEvent.linkRef().toString());
KeyId networkId = KeyId.keyId(networkRef.uri().toString());
KeyId linkId = KeyId.keyId(linkRef.uri().toString());
NetworkLinkKey networkLinkKey = new NetworkLinkKey(networkId, linkId);
return networkLinkKey;
+
}
public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent,