Improving the converter utility for YANG to TE Subsystem and vice versa.
Change-Id: I6d82f2dfb09932768121a27f7601690fb6942344
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 fcf24ea..16ea08a 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
@@ -107,6 +107,7 @@
ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
ymsService.unRegisterService(this, IetfTeTopologyService.class);
+ teTopologyService.removeListener(new InternalTeTopologyListener());
log.info("Stopped");
}
@@ -117,8 +118,14 @@
// Get the entire data tree from TE Subsystem core.
org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.networks();
+ // Build the sample networks for RESTCONF/YMS integration test
+// org.onosproject.tetopology.management.api.Networks teNetworks = new DefaultNetworks(DefaultBuilder
+// .sampleDomain1Networks());
+
// Convert the TE Subsystem core data into YANG Objects.
- Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
+ Networks networks = NetworkConverter
+ .teSubsystem2YangNetworks(teNetworks, OperationType.QUERY,
+ teTopologyService);
NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
@@ -132,6 +139,7 @@
IetfNetwork result = ietfNetwork.processSubtreeFiltering(
(IetfNetworkOpParam) newNetwork,
false);
+ log.debug("result is: {}", result);
return result;
}
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,
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 f87b0b1..e1e2e01 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
@@ -20,8 +20,12 @@
import org.onosproject.net.DeviceId;
import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.TeTopologyEvent;
+import org.onosproject.tetopology.management.api.TeTopologyKey;
+import org.onosproject.tetopology.management.api.TeTopologyService;
import org.onosproject.tetopology.management.api.link.NetworkLink;
+import org.onosproject.tetopology.management.api.link.NetworkLinkEventSubject;
import org.onosproject.tetopology.management.api.node.NetworkNode;
+import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject;
import org.onosproject.teyang.api.OperationType;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork.OnosYangOpType;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.DefaultNetworks;
@@ -150,12 +154,14 @@
* Networks object conversion from TE Topology subsystem to YANG.
*
* @param teSubsystem TE Topology subsystem networks object
- * @param operation operation type
+ * @param operation operation type
+ * @param teTopologyService teTopology core service
* @return Networks YANG object
*/
public static Networks teSubsystem2YangNetworks(
org.onosproject.tetopology.management.api.Networks teSubsystem,
- OperationType operation) {
+ OperationType operation,
+ TeTopologyService teTopologyService) {
checkNotNull(teSubsystem, E_NULL_TE_NETWORKS);
checkNotNull(teSubsystem.networks(), E_NULL_TE_NETWORK_LIST);
Networks.NetworksBuilder builder =
@@ -163,7 +169,8 @@
.yangNetworksOpType(toNetworksOperationType(operation));
List<Network> networks = Lists.newArrayList();
for (org.onosproject.tetopology.management.api.Network teNetwork : teSubsystem.networks()) {
- networks.add(teSubsystem2YangNetwork(teNetwork, operation));
+ networks.add(teSubsystem2YangNetwork(teNetwork, operation,
+ teTopologyService));
}
builder.network(networks);
return builder.build();
@@ -258,11 +265,15 @@
}
private static NetworkBuilder te2YangNodes(NetworkBuilder builder,
- Map<KeyId, NetworkNode> teNodes) {
+ Map<KeyId, NetworkNode> teNodes,
+ TeTopologyService teTopologyService,
+ TeTopologyKey teTopologyKey) {
List<Node> nodeList = Lists.newArrayList();
for (org.onosproject.tetopology.management.api.node.NetworkNode node : teNodes.values()) {
- nodeList.add(NodeConverter.teSubsystem2YangNode(node));
+ nodeList.add(NodeConverter.teSubsystem2YangNode(node,
+ teTopologyService,
+ teTopologyKey));
}
return builder.node(nodeList);
}
@@ -317,12 +328,14 @@
* Network object conversion from TE Topology subsystem to YANG.
*
* @param teSubsystem TE Topology subsystem network object
- * @param operation operation type
+ * @param operation operation type
+ * @param teTopologyService teTopology core service
* @return Network YANG object
*/
public static Network teSubsystem2YangNetwork(
org.onosproject.tetopology.management.api.Network teSubsystem,
- OperationType operation) {
+ OperationType operation,
+ TeTopologyService teTopologyService) {
checkNotNull(teSubsystem, E_NULL_TE_NETWORK);
checkNotNull(teSubsystem.networkId(), E_NULL_TE_NETWORKID);
@@ -340,7 +353,13 @@
// Nodes
if (teSubsystem.nodes() != null) {
- builder = te2YangNodes(builder, teSubsystem.nodes());
+ org.onosproject.tetopology.management.api.Network nt = teTopologyService.network(teSubsystem.networkId());
+ TeTopologyKey teTopoKey = new TeTopologyKey(nt.teTopologyId().providerId(),
+ nt.teTopologyId().clientId(),
+ Long.valueOf(nt.teTopologyId().topologyId()));
+ builder = te2YangNodes(builder, teSubsystem.nodes(),
+ teTopologyService,
+ teTopoKey);
}
// Network types
@@ -452,8 +471,8 @@
(AugmentedNwNetwork) yangNetwork.yangAugmentedInfo(AugmentedNwNetwork.class);
teTopologyId =
new org.onosproject.tetopology.management.api.TeTopologyId(
- augmentTeIds.te().clientId().uint32(),
augmentTeIds.te().providerId().uint32(),
+ augmentTeIds.te().clientId().uint32(),
augmentTeIds.te().teTopologyId().string());
}
@@ -517,13 +536,13 @@
IetfTeTopologyEvent.Type yangEventType = teTopoEventType2YangIetfTopoEventType(event.type());
if (yangEventType == IetfTeTopologyEvent.Type.TE_LINK_EVENT) {
- NetworkLink eventData = (NetworkLink) event.subject();
+ NetworkLinkEventSubject eventData = (NetworkLinkEventSubject) event.subject();
TeTopologyEventTypeEnum linkEventType = teTopoEventType2YangTeTopoEventType(event.type());
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) {
- NetworkNode eventData = (NetworkNode) event.subject();
+ NetworkNodeEventSubject eventData = (NetworkNodeEventSubject) event.subject();
TeTopologyEventTypeEnum nodeEventType = teTopoEventType2YangTeTopoEventType(event.type());
TeNodeEvent yangNodeEvent = NodeConverter.teNetworkNode2yangTeNodeEvent(nodeEventType, eventData);
eventSubject.teNodeEvent(yangNodeEvent);
@@ -571,7 +590,10 @@
returnType = TeTopologyEventTypeEnum.UPDATE;
break;
default:
- log.error("teTopoEventType2YangTeTopoEventType: unknown type: {}", type);
+ // log.warn("teTopoEventType2YangIetfTopoEventType: unsupported
+ // type: {}",
+ // type);
+ break;
}
return returnType;
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 4874af2..26255f8 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
@@ -17,11 +17,11 @@
import static com.google.common.base.Preconditions.checkNotNull;
-import java.nio.ByteBuffer;
import java.util.BitSet;
import java.util.List;
import java.util.Map;
+import org.apache.commons.collections.MapUtils;
import org.onlab.packet.Ip4Address;
import org.onosproject.tetopology.management.api.EncodingType;
import org.onosproject.tetopology.management.api.KeyId;
@@ -30,7 +30,10 @@
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;
@@ -39,6 +42,7 @@
import org.onosproject.tetopology.management.api.node.DefaultTeNode;
import org.onosproject.tetopology.management.api.node.LocalLinkConnectivity;
import org.onosproject.tetopology.management.api.node.NetworkNode;
+import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject;
import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
import org.onosproject.tetopology.management.api.node.TeNode;
import org.onosproject.tetopology.management.api.node.TeNodeKey;
@@ -55,8 +59,7 @@
.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.networks.network.AugmentedNdNetwork;
-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.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
@@ -71,6 +74,7 @@
.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.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;
@@ -97,6 +101,7 @@
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;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -123,9 +128,10 @@
* TE Node Config object conversion from TE Topology subsystem to YANG.
*
* @param teSubsystemTeNode TE node object
+ * @param teTopologyService teTopolog core service
* @return TE Node Config YANG object
*/
- private static Config teNode2YangConfig(TeNode teSubsystemTeNode) {
+ private static Config teNode2YangConfig(TeNode teSubsystemTeNode, TeTopologyService teTopologyService) {
checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
TeNodeAttributes.TeNodeAttributesBuilder teNodeAttributesConfigBuilder = DefaultTeNodeAttributes
@@ -147,7 +153,7 @@
if (teSubsystemTeNode.underlayTeTopologyId() != null) {
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
- .underlayTeTopologyId()));
+ .underlayTeTopologyId(), teTopologyService));
}
// TODO: should we ignore this from te to yang? as we've already set yang supportingNode
@@ -178,11 +184,11 @@
.get(ConnectivityMatrix.BIT_DISALLOWED))
.from(new DefaultFrom.FromBuilder() // TODO: for now, assuming that there is
// only one 'from', and mergingList is empty
- .tpRef(teCmEntry.getValue().from())
+ .tpRef(((TeLinkId) teCmEntry.getValue().from()).value())
.build())
.to(new DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
// one item in constrainingElements list
- .tpRef(teCmEntry.getValue().constrainingElements().get(0))
+ .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
.build());
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.addToConnectivityMatrix(connectivityMatrixConfigBuilder
@@ -191,15 +197,17 @@
return teNodeAttributesConfigBuilder;
}
- private static UnderlayTopology teNode2YangUnderlay(TeTopologyKey underlayTopology) {
+ 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());
- // TODO: find networkId from the service
-// .networkIdRef(networkIdRef)
+
+ underlayBuilder = underlayBuilder.networkIdRef(teTopologyService.networkId(underlayTopology));
+
return underlayBuilder.build();
}
@@ -207,9 +215,10 @@
* TE Node State object conversion from TE Topology subsystem to YANG.
*
* @param teSubsystemTeNode TE node object
+ * @param teTopologyService teTopology core service
* @return TE Node State YANG object
*/
- private static State teNode2YangState(TeNode teSubsystemTeNode) {
+ private static State teNode2YangState(TeNode teSubsystemTeNode, TeTopologyService teTopologyService) {
checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
TeNodeAttributes
@@ -231,7 +240,7 @@
if (teSubsystemTeNode.underlayTeTopologyId() != null) {
teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
.underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
- .underlayTeTopologyId()));
+ .underlayTeTopologyId(), teTopologyService));
}
if (teSubsystemTeNode.connectivityMatrices() != null) {
@@ -269,17 +278,25 @@
}
private static class ByteUtils {
- private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
public static byte[] longToBytes(long x) {
- buffer.putLong(0, x);
- return buffer.array();
+ long temp = x;
+ byte[] b = new byte[8];
+ for (int i = 0; i < b.length; i++) {
+ b[i] = new Long(temp & 0xff).byteValue();
+ temp = temp >> 8;
+ }
+ return b;
}
public static long bytesToLong(byte[] bytes) {
- buffer.put(bytes, 0, bytes.length);
- buffer.flip(); // need flip
- return buffer.getLong();
+ return ((long) bytes[7] & 255L) << 56
+ | ((long) bytes[6] & 255L) << 48
+ | ((long) bytes[5] & 255L) << 40
+ | ((long) bytes[4] & 255L) << 32
+ | ((long) bytes[3] & 255L) << 24
+ | ((long) bytes[2] & 255L) << 16
+ | ((long) bytes[1] & 255L) << 8 | (long) bytes[0] & 255L;
}
}
@@ -287,11 +304,16 @@
* TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG.
*
* @param teTunnelTp TE TunnelTerminationPoint object
+ * @param teTpId
+ * @param teTopologyService
+ * @param teNodeKey
* @return TunnelTerminationPoint YANG object
*/
private static TunnelTerminationPoint teSubsystem2YangTtp(
org.onosproject.tetopology.management.api.node
- .TunnelTerminationPoint teTunnelTp, Long teTpId) {
+ .TunnelTerminationPoint teTunnelTp, Long teTpId,
+ TeTopologyService teTopologyService,
+ TeNodeKey teNodeKey) {
checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP);
TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
@@ -317,13 +339,38 @@
// TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder.
// For which ones we can do the conversion?
// FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList()
- ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
+ 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());
+ }
- TerminationCapability.TerminationCapabilityBuilder tcapStateBuilder =
- DefaultTerminationCapability.builder();
- // TODO: retrieve more attributes from teTunnelTp and assign to tcapStateBuilder
- // For which ones we can do the conversion?
- ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
+ // 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());
+ }
+ }
tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
.state(ttpStateBuilder.build());
@@ -335,12 +382,17 @@
* Node object conversion from TE Topology subsystem to YANG.
*
* @param teSubsystem TE subsystem node
+ * @param teTopologyService teTopology core service
+ * @param teTopologyKey teTopologyKey
* @return YANG node
*/
- public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem) {
+ public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem,
+ TeTopologyService teTopologyService,
+ TeTopologyKey teTopologyKey) {
checkNotNull(teSubsystem, E_NULL_TE_SUBSYSTEM_NODE);
NodeId nodeId = NodeId.fromString(teSubsystem.nodeId().toString());
+
Node.NodeBuilder builder = DefaultNode.builder().nodeId(nodeId);
if (teSubsystem.supportingNodeIds() != null) {
@@ -379,20 +431,22 @@
TeBuilder yangTeBuilder = DefaultTe.builder();
- yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId
- .fromString(String.valueOf(teSubsystemTeNode.teNodeId())));
+ yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad
+ .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId())
+ .toString())));
// Set configuration data
// Set state data
- yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode))
- .state(teNode2YangState(teSubsystemTeNode));
+ yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode, teTopologyService))
+ .state(teNode2YangState(teSubsystemTeNode, teTopologyService));
if (teSubsystemTeNode.tunnelTerminationPoints() != null) {
for (Map.Entry<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> entry :
teSubsystemTeNode.tunnelTerminationPoints().entrySet()) {
yangTeBuilder = yangTeBuilder
.addToTunnelTerminationPoint(teSubsystem2YangTtp(entry
- .getValue(), entry.getKey()));
+ .getValue(), entry.getKey(), teTopologyService,
+ new TeNodeKey(teTopologyKey, teSubsystemTeNode.teNodeId())));
}
}
@@ -469,14 +523,14 @@
.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.
ConnectivityMatrix cmYang : yangMatrix) {
- ElementType from = new TeLinkId((long) cmYang.from().tpRef()); // is this correct?
+ ElementType from = new TeLinkId(Long.valueOf(((String) cmYang.from().tpRef()))); // is this correct?
UnderlayAbstractPath underlayPath = null; // ignore
List<ElementType> mergingList = Lists.newArrayList(); // empty merging list for now
List<ElementType> constrainingElements = Lists.newArrayList();
- ElementType to = new TeLinkId((long) cmYang.to().tpRef()); // is this correct?
+ ElementType to = new TeLinkId(Long.valueOf(((String) cmYang.to().tpRef()))); // is this correct?
constrainingElements.add(to);
BitSet flags = new BitSet(); // what are the flags in cmYang?
@@ -489,7 +543,9 @@
}
TePathAttributes teAttributes = new
TePathAttributes(cmYang.teDefaultMetric(),
- cmYang.performanceMetric().measurement().unidirectionalDelay(),
+ cmYang.performanceMetric() == null ? null :
+ (cmYang.performanceMetric().measurement() == null ? null :
+ cmYang.performanceMetric().measurement().unidirectionalDelay()),
srlgs);
ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(),
from,
@@ -508,13 +564,13 @@
private static TeTopologyKey yang2TeSubsystemNodeUnderlayTopology(UnderlayTopology ut) {
TeTopologyKey tetopokey = new TeTopologyKey((Long) ut.providerIdRef(),
(Long) ut.clientIdRef(),
- (Long) ut.teTopologyIdRef());
+ Long.valueOf((String) ut.teTopologyIdRef()));
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) {
+ TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps
.newHashMap();
for (TunnelTerminationPoint ttpYang : ttps) {
@@ -523,14 +579,57 @@
EncodingType encodingLayer = null; // TODO: find proper encoding type from ttpYang.config().encoding();
BitSet flags = new BitSet(); // how to set flags?
List<Long> interLayerLockList = Lists.newArrayList();
- interLayerLockList.add(ttpYang.config().interLayerLockId()); // interLayerLock in yang is not a list
+
+ if (ttpYang.config() != null) {
+ interLayerLockList.add(ttpYang.config().interLayerLockId()); // interLayerLock in yang is not a list
+ }
List<LocalLinkConnectivity> localLinkConnectivityList = Lists.newArrayList();
// FIXME: once new yang model is used, we can make llc
-// LocalLinkConnectivity llc = new LocalLinkConnectivity(constrainingElements,
-// flags,
-// teAttributes,
-// underlayPath)
+ 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()) {
+
+ 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.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()));
+ break;
+ }
+ }
+ }
+ }
+ }
+ eltList.add(elt);
+// 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?
+ LocalLinkConnectivity llc = new LocalLinkConnectivity(eltList,
+ flags,
+ teAttributes,
+ underlayPath);
+ localLinkConnectivityList.add(llc);
float[] availAdaptBandwidth = null; // how to find availableBandwidth?
@@ -554,7 +653,7 @@
private static TeNode yang2TeSubsystemNodeAugment(Te yangNodeAugTe,
Network yangNetwork,
Node yangNode,
- Map<KeyId, TerminationPoint> yangTps) {
+ Map<KeyId, TerminationPoint> teTps) {
NodeId yangNodeId = yangNode.nodeId();
@@ -580,12 +679,10 @@
List<Long> teTpIds = Lists.newArrayList();
// ********************************************** to find teLinkIds
- if (yangNetwork.yangAugmentedInfo(AugmentedNdNetwork.class) != null) {
- AugmentedNdNetwork augmentLink =
- (AugmentedNdNetwork) yangNetwork.yangAugmentedInfo(AugmentedNdNetwork.class);
- for (Link link : augmentLink.link()) {
- if (link.source().sourceNode().equals(yangNodeAugTe.teNodeId())) {
- teLinkIds.add(Long.valueOf(link.linkId().uri().string()));
+ if (MapUtils.isNotEmpty(teTps)) {
+ for (Map.Entry<KeyId, TerminationPoint> entry : teTps.entrySet()) {
+ if (entry.getValue().teTpId() != null) {
+ teTpIds.add(entry.getValue().teTpId());
}
}
}
@@ -622,7 +719,7 @@
flags.set(TeNode.BIT_ABSTRACT);
}
teData = new CommonNodeData(
- teNodeAttr.name().string(),
+ null, // teNodeAttr.name().string(),
EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()),
EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
flags);
@@ -637,7 +734,7 @@
}
if (yangNodeAugTe.tunnelTerminationPoint() != null) {
- ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint());
+ ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint(), yangNode);
}
TeNode teNode = new DefaultTeNode(teNodeId,
@@ -668,26 +765,30 @@
}
/**
- * Converts a TE Topology node event from the data format used in
- * the core to its corresponding YANG Object (YO) format.
+ * Converts a TE Topology node event from the data format used in the core
+ * to its corresponding YANG Object (YO) format.
*
* @param eventType Node event type
- * @param nodeData TE Topology node event data
+ * @param eventData TE Topology node event data
* @return YANG Object converted from nodeData
*/
public static TeNodeEvent teNetworkNode2yangTeNodeEvent(TeTopologyEventTypeEnum eventType,
- NetworkNode nodeData) {
+ NetworkNodeEventSubject eventData) {
TeNodeEvent.TeNodeEventBuilder builder = new DefaultTeNodeEvent.TeNodeEventBuilder();
TeTopologyEventType yangEventType = new TeTopologyEventType(eventType);
builder.eventType(yangEventType);
- NodeId nodeId = NodeId.fromString(nodeData.nodeId().toString());
+ NetworkId newtorkId = NetworkId.fromString(eventData.key().networkId().toString());
+ builder.networkRef(newtorkId);
+ NodeId nodeId = NodeId.fromString(eventData.key().nodeId().toString());
builder.nodeRef(nodeId);
+ NetworkNode node = eventData.neworkNode();
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
rev20160708.ietftetopology.tenodeconfigattributesnotification.
- TeNodeAttributes teNodeAttributes = teNode2YangTeNodeAttributes(nodeData.teNode());
+ TeNodeAttributes teNodeAttributes = node == null ? null
+ : teNode2YangTeNodeAttributes(node.teNode());
builder.teNodeAttributes(teNodeAttributes);
return builder.build();
@@ -744,10 +845,8 @@
}
public static NetworkNodeKey yangNodeEvent2NetworkNodeKey(TeNodeEvent yangNodeEvent) {
- //TODO: implementation to be submitted as separate review
-
- NetworkId networkRef = (NetworkId) (yangNodeEvent.networkRef());
- NodeId nodeRef = (NodeId) (yangNodeEvent.nodeRef());
+ NetworkId networkRef = NetworkId.fromString(yangNodeEvent.networkRef().toString());
+ NodeId nodeRef = NodeId.fromString(yangNodeEvent.nodeRef().toString());
KeyId networkId = KeyId.keyId(networkRef.uri().toString());
KeyId nodeId = KeyId.keyId(nodeRef.uri().toString());
@@ -756,10 +855,15 @@
return networkNodeKey;
}
+ /**
+ * Converts YangNode event to NetworkNode.
+ *
+ * @param yangNodeEvent yangNodeEvent
+ * @param teTopologyService teTopologyService
+ * @return NetworkNode
+ */
public static NetworkNode yangNodeEvent2NetworkNode(TeNodeEvent yangNodeEvent,
TeTopologyService teTopologyService) {
- //TODO: implementation to be submitted as separate review
-
KeyId networkNodeId = yangNodeEvent2NetworkNodeKey(yangNodeEvent).nodeId();
org.onosproject.tetopology.management.api.Network network = teTopologyService.network(
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 18ac803..56bbad2 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
@@ -78,6 +78,7 @@
checkNotNull(teSubsystem, E_NULL_TE_SUBSYSTEM_TP);
TpId tpId = TpId.fromString(teSubsystem.tpId().toString());
+// TpId tpId = TpId.fromString("0");
TerminationPoint.TerminationPointBuilder builder =
new DefaultTerminationPoint.TerminationPointBuilder().tpId(tpId);
@@ -102,11 +103,11 @@
yangTeBuilder = yangTeBuilder.teTpId(TeTpId.fromString((String.valueOf(teSubsystem.teTpId()))));
- Config yConfig = teSubsystem2YangTeAugConfig(teSubsystem);
- yangTeBuilder = yangTeBuilder.config(yConfig);
-
- State yState = teSubsystem2YangTeAugState(teSubsystem);
- yangTeBuilder = yangTeBuilder.state(yState);
+// Config yConfig = teSubsystem2YangTeAugConfig(teSubsystem);
+// yangTeBuilder = yangTeBuilder.config(yConfig);
+//
+// State yState = teSubsystem2YangTeAugState(teSubsystem);
+// yangTeBuilder = yangTeBuilder.state(yState);
tpAugmentBuilder = tpAugmentBuilder.te(yangTeBuilder.build());
builder.addYangAugmentedInfo(tpAugmentBuilder.build(), AugmentedNtTerminationPoint.class);
@@ -184,7 +185,8 @@
tp = new org.onosproject.tetopology.management.api.node
.DefaultTerminationPoint(KeyId.keyId(yangTp.tpId().uri().string()),
spTps,
- Long.valueOf(teTpId.toString()));
+ teTpId == null ? null : Long.valueOf(teTpId.toString()));
+
return tp;
}
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/DefaultTeLink.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/DefaultTeLink.java
index 72e713f..655ef43 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/DefaultTeLink.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/DefaultTeLink.java
@@ -167,7 +167,7 @@
}
@Override
- public long cost() {
+ public Long cost() {
if (teData == null || teData.teAttributes() == null) {
return TeConstants.NIL_LONG_VALUE;
}
@@ -175,7 +175,7 @@
}
@Override
- public long delay() {
+ public Long delay() {
if (teData == null || teData.teAttributes() == null) {
return TeConstants.NIL_LONG_VALUE;
}
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TeLink.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TeLink.java
index 81d93c4..6827202 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TeLink.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TeLink.java
@@ -165,14 +165,14 @@
*
* @return the cost
*/
- long cost();
+ Long cost();
/**
* Returns the link delay.
*
* @return the delay
*/
- long delay();
+ Long delay();
/**
* Returns the link SRLG values.
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TePathAttributes.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TePathAttributes.java
index e0760b3..9b3ecb8 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TePathAttributes.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/TePathAttributes.java
@@ -60,7 +60,7 @@
*
* @return the cost
*/
- public long cost() {
+ public Long cost() {
return cost;
}
@@ -69,7 +69,7 @@
*
* @return the delay
*/
- public long delay() {
+ public Long delay() {
return delay;
}