From e5480799d2f666999f2ae5cd7a874aa78d648a60 Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Fri, 17 Jan 2020 11:41:30 +0100 Subject: [PATCH] Portmapping-topologies code consolidation Refactor otn-topology code to avoid any access to OpenROADM device configuration during node creation. To that purpose: - review code related to all topology layers to use static methods - add new class OtnNode to help creation of different otn-nodes in otn-topology - change code to create otn node in otn-topology distinguishing tpdr, switch, mpdr - adapt openroadm-topology to make appear network tp of otn switch/mpdr nodes - remove from openroadm-topology tail-equipment-id for xpdr nodes - adapt pce code consequently - add tail-equipment-id with ROADM-SRG-PP info on tp of xpdr node when creating XPONDER-INPUT/OUTPUT links in openroadm-topology - adapt functional tests consequently to all these modifications - deactivate test 33 from end2end functional tests since the deletion of the "tail-equipment-id" from the topology is not fully implemented yet JIRA: TRNSPRTPCE-177 Signed-off-by: Gilles Thouenon Co-authored-by: Christophe Betoule Change-Id: I45bb0f06b0bae87af10164addbdedc3ab79dba36 --- .../common/mapping/PortMappingVersion221.java | 240 +-- .../networkmodel/NetworkModelProvider.java | 28 +- .../networkmodel/NetworkUtilsImpl.java | 14 +- .../transportpce/networkmodel/OrdLink.java | 7 +- .../networkmodel/R2RLinkDiscovery.java | 23 +- .../networkmodel/Rdm2XpdrLink.java | 96 +- .../networkmodel/dto/OtnTopoNode.java | 64 + .../service/NetworkModelServiceImpl.java | 172 +- .../networkmodel/util/ClliNetwork.java | 73 +- .../networkmodel/util/OpenRoadmFactory.java | 57 - .../networkmodel/util/OpenRoadmNetwork.java | 98 +- .../util/OpenRoadmOtnTopology.java | 427 +++++ .../util/OpenRoadmOtnTopology22.java | 407 ----- ...Topology22.java => OpenRoadmTopology.java} | 419 ++--- .../networkmodel/util/TpceNetwork.java | 96 + .../blueprint/networkmodel-blueprint.xml | 20 - .../pce/networkanalyzer/MapUtils.java | 12 +- .../pce/networkanalyzer/PceNode.java | 17 +- tests/sample_configs/NW-for-test-5-4.xml | 1582 +++++++++++------ tests/sample_configs/NW-simple-topology.xml | 1289 ++++++++------ .../gnpy/openroadmTopology.json | 527 ++---- tests/sample_configs/honeynode-topo.xml | 44 +- .../transportpce_tests/1.2.1/test_end2end.py | 11 +- .../transportpce_tests/1.2.1/test_topology.py | 73 +- .../transportpce_tests/2.2.1/test_end2end.py | 18 +- .../2.2.1/test_otn_topology.py | 30 +- .../2.2.1/test_portmapping.py | 18 +- .../test_renderer_service_path_nominal.py | 6 +- .../transportpce_tests/2.2.1/test_topology.py | 38 +- 29 files changed, 3194 insertions(+), 2712 deletions(-) create mode 100644 networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java delete mode 100644 networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmFactory.java create mode 100644 networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java delete mode 100644 networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology22.java rename networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/{OpenRoadmTopology22.java => OpenRoadmTopology.java} (59%) create mode 100644 networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TpceNetwork.java diff --git a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java index 5df5edc93..4dcea0ae6 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java @@ -42,8 +42,13 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo.OpenroadmVersion; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.SwitchingPoolLcp; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.SwitchingPoolLcpBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.switching.pool.lcp.NonBlockingList; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.switching.pool.lcp.NonBlockingListBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.Direction; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PortQual; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.CircuitPack; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.PortsKey; @@ -57,10 +62,12 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Degree; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.DegreeKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Info; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Xponder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.port.Interfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.xponder.XpdrPort; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.InterfaceType; @@ -101,7 +108,7 @@ public class PortMappingVersion221 { if (nodeInfo == null) { return false; } else { - postPortMapping(nodeId, nodeInfo, null, null); + postPortMapping(nodeId, nodeInfo, null, null, null); } } else { LOG.warn("Device info subtree is absent for {}", nodeId); @@ -136,7 +143,7 @@ public class PortMappingVersion221 { break; } - return postPortMapping(nodeId, nodeInfo, portMapList, null); + return postPortMapping(nodeId, nodeInfo, portMapList, null, null); } public boolean updateMapping(String nodeId, Mapping oldMapping) { @@ -202,7 +209,6 @@ public class PortMappingVersion221 { circuitPackList = deviceObject.get().getCircuitPacks(); circuitPackList.sort(Comparator.comparing(CircuitPack::getCircuitPackName)); } - String xpdrPreFix = "XPDR"; if (device.getXponder() == null) { LOG.warn("{} configuration does not contain a list of xponders", nodeId); for (CircuitPacks cp : circuitPackList) { @@ -224,7 +230,7 @@ public class PortMappingVersion221 { String lcp = "XPDR1-" + StringConstants.NETWORK_TOKEN + line; lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, - null)); + null, null)); line++; } else if (PortQual.XpdrNetwork.getIntValue() == port.getPortQual().getIntValue() && port.getPortDirection().getIntValue() != Direction.Bidirectional.getIntValue() @@ -249,9 +255,9 @@ public class PortMappingVersion221 { lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp1); lcpMap.put(cpOpt.get().getCircuitPackName() + '+' + port2.getPortName(), lcp2); mappingMap.put(lcp1, createXpdrMappingObject(nodeId, port, circuitPackName, - lcp1, lcp2, null, null)); + lcp1, lcp2, null, null, null)); mappingMap.put(lcp2, createXpdrMappingObject(nodeId, port2, cpOpt.get() - .getCircuitPackName(), lcp2, lcp1, null, null)); + .getCircuitPackName(), lcp2, lcp1, null, null, null)); } else { LOG.warn("mapping already exists for {} or {}", lcp1, lcp2); } @@ -273,7 +279,7 @@ public class PortMappingVersion221 { String lcp = "XPDR1-" + StringConstants.CLIENT_TOKEN + client; lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, - null)); + null, null)); client++; } else { LOG.warn("Error in the configuration of port {} of {} for {}", port.getPortName(), @@ -285,97 +291,84 @@ public class PortMappingVersion221 { } else { LOG.info("{} configuration contains a list of xponders", nodeId); for (Xponder xponder:deviceObject.get().getXponder()) { - xpdrPreFix += xponder.getXpdrNumber(); + line = 1; + client = 1; + Integer xponderNb = xponder.getXpdrNumber(); + XpdrNodeTypes xponderType = xponder.getXpdrType(); for (XpdrPort xpdrPort : xponder.getXpdrPort()) { - CircuitPacks cp = circuitPackList.stream().filter(x -> x.getCircuitPackName() - .equals(xpdrPort.getCircuitPackName())) - .collect(Collectors.toList()).get(0); - String circuitPackName = cp.getCircuitPackName(); - Boolean isExisting = false; - for (String keys : lcpMap.keySet()) { - LOG.info("Keys are {}", keys); - if (keys.contains(cp.getCircuitPackName() + "+" + xpdrPort.getPortName().toString())) { - isExisting = true; - break; - } - } - if (isExisting) { + String circuitPackName = xpdrPort.getCircuitPackName(); + String portName = xpdrPort.getPortName().toString(); + Ports port = device.getCircuitPacks().stream().filter(cp -> cp.getCircuitPackName() + .equals(circuitPackName)).findFirst().get().getPorts().stream().filter(p -> p.getPortName() + .equals(portName)).findFirst().get(); + if (port.getPortQual() == null) { + LOG.warn("PortQual was not found for port {} on circuit pack: {}", port.getPortName(), + circuitPackName); continue; } - List portList = cp.getPorts(); - portList.sort(Comparator.comparing(Ports::getPortName)); - for (Ports port : portList) { - if (port.getPortQual() == null) { - LOG.warn("PortQual was not found for port {} on circuit pack: {}", port.getPortName(), - circuitPackName); + if ((PortQual.XpdrNetwork.getIntValue() == port.getPortQual().getIntValue() + || PortQual.SwitchNetwork.getIntValue() == port.getPortQual().getIntValue()) + && port.getPortDirection().getIntValue() == Direction.Bidirectional.getIntValue()) { + String lcp = "XPDR" + xponderNb + "-" + StringConstants.NETWORK_TOKEN + line; + lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); + mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, + null, xponderType)); + line++; + } else if ((PortQual.XpdrNetwork.getIntValue() == port.getPortQual().getIntValue() + || PortQual.SwitchNetwork.getIntValue() == port.getPortQual().getIntValue()) + && port.getPortDirection().getIntValue() != Direction.Bidirectional.getIntValue() + && port.getPartnerPort() != null + && port.getPartnerPort().getCircuitPackName() != null + && port.getPartnerPort().getPortName() != null) { + if (lcpMap.containsKey(circuitPackName + '+' + port.getPortName())) { continue; } - if ((PortQual.XpdrNetwork.getIntValue() == port.getPortQual().getIntValue() - || PortQual.SwitchNetwork.getIntValue() == port.getPortQual().getIntValue()) - && port.getPortDirection().getIntValue() == Direction.Bidirectional.getIntValue()) { - String lcp = xpdrPreFix + "-" + StringConstants.NETWORK_TOKEN + line; - lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); - mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, - null)); - line++; - } else if (PortQual.XpdrNetwork.getIntValue() == port.getPortQual().getIntValue() - && port.getPortDirection().getIntValue() != Direction.Bidirectional.getIntValue() - && port.getPartnerPort() != null - && port.getPartnerPort().getCircuitPackName() != null - && port.getPartnerPort().getPortName() != null) { - if (lcpMap.containsKey(circuitPackName + '+' + port.getPortName())) { - continue; - } - String lcp1 = xpdrPreFix + "-" + StringConstants.NETWORK_TOKEN + line; - Optional cpOpt = circuitPackList.stream().filter(cP -> cP.getCircuitPackName() - .equals(port.getPartnerPort().getCircuitPackName())).findFirst(); - if (cpOpt.isPresent()) { - Optional poOpt = cpOpt.get().getPorts().stream().filter(p -> p.getPortName() - .equals(port.getPartnerPort().getPortName().toString())).findFirst(); - if (poOpt.isPresent()) { - Ports port2 = poOpt.get(); - if (checkPartnerPort(circuitPackName, port, port2)) { - String lcp2 = new StringBuilder(xpdrPreFix) - .append(StringConstants.NETWORK_TOKEN) - .append(line + 1) - .toString(); - if (!lcpMap.containsKey(lcp1) && !lcpMap.containsKey(lcp2)) { - lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp1); - lcpMap.put(cpOpt.get().getCircuitPackName() + '+' + port2.getPortName(), - lcp2); - mappingMap.put(lcp1, createXpdrMappingObject(nodeId, port, circuitPackName, - lcp1, lcp2, null, null)); - mappingMap.put(lcp2, createXpdrMappingObject(nodeId, port2, cpOpt.get() - .getCircuitPackName(), lcp2, lcp1, null, null)); - } else { - LOG.warn("mapping already exists for {} or {}", lcp1, lcp2); - } - line += 2; + String lcp1 = "XPDR" + xponderNb + "-" + StringConstants.NETWORK_TOKEN + line; + + Optional cpOpt = circuitPackList.stream().filter(cP -> cP.getCircuitPackName() + .equals(port.getPartnerPort().getCircuitPackName())).findFirst(); + if (cpOpt.isPresent()) { + Optional poOpt = cpOpt.get().getPorts().stream().filter(p -> p.getPortName().equals( + port.getPartnerPort().getPortName().toString())).findFirst(); + if (poOpt.isPresent()) { + Ports port2 = poOpt.get(); + if (checkPartnerPort(circuitPackName, port, port2)) { + String lcp2 = new StringBuilder("XPDR").append(xponderNb).append("-").append( + StringConstants.NETWORK_TOKEN).append(line + 1).toString(); + if (!lcpMap.containsKey(lcp1) && !lcpMap.containsKey(lcp2)) { + lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp1); + lcpMap.put(cpOpt.get().getCircuitPackName() + '+' + port2.getPortName(), lcp2); + mappingMap.put(lcp1, createXpdrMappingObject(nodeId, port, circuitPackName, + lcp1, lcp2, null, null, xponderType)); + mappingMap.put(lcp2, createXpdrMappingObject(nodeId, port2, cpOpt.get() + .getCircuitPackName(), lcp2, lcp1, null, null, xponderType)); } else { - LOG.error("port {} on {} is not a correct partner port of {} on {}", - port2.getPortName(), cpOpt.get().getCircuitPackName(), port.getPortName(), - circuitPackName); + LOG.warn("mapping already exists for {} or {}", lcp1, lcp2); } + line += 2; } else { - LOG.error("Error fetching port {} on {} for {}", - port.getPartnerPort().getPortName(), port.getPartnerPort().getCircuitPackName(), - nodeId); + LOG.error("port {} on {} is not a correct partner port of {} on {}", port2 + .getPortName(), cpOpt.get().getCircuitPackName(), port.getPortName(), + circuitPackName); } } else { - LOG.error("Error fetching circuit-pack {} for {}", + LOG.error("Error fetching port {} on {} for {}", port.getPartnerPort().getPortName(), port.getPartnerPort().getCircuitPackName(), nodeId); } - } else if (PortQual.XpdrClient.getIntValue() == port.getPortQual().getIntValue() - || PortQual.SwitchClient.getIntValue() == port.getPortQual().getIntValue()) { - String lcp = xpdrPreFix + "-" + StringConstants.CLIENT_TOKEN + client; - lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); - mappingMap.put(lcp, - createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, null)); - client++; } else { - LOG.warn("Error in the configuration of port {} of {} for {}", - port.getPortName(), circuitPackName, nodeId); + LOG.error("Error fetching circuit-pack {} for {}", port.getPartnerPort() + .getCircuitPackName(), nodeId); } + } else if (PortQual.XpdrClient.getIntValue() == port.getPortQual().getIntValue() + || PortQual.SwitchClient.getIntValue() == port.getPortQual().getIntValue()) { + String lcp = "XPDR" + xponderNb + "-" + StringConstants.CLIENT_TOKEN + client; + lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp); + mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, + null, null)); + client++; + } else { + LOG.warn("Error in the configuration of port {} of {} for {}", port.getPortName(), + circuitPackName, nodeId); } } } @@ -398,7 +391,7 @@ public class PortMappingVersion221 { if (slcp != null) { Mapping mapping = mappingMap.get(slcp); mappingMap.remove(slcp); - portMapList.add(createXpdrMappingObject(nodeId, null, null, null, null, mapping, dlcp)); + portMapList.add(createXpdrMappingObject(nodeId, null, null, null, null, mapping, dlcp, null)); } else { LOG.error("Error in connection-map analysis"); } @@ -406,10 +399,45 @@ public class PortMappingVersion221 { } else { LOG.warn("No connection-map inside device configuration"); } - if (!mappingMap.isEmpty()) { - for (Mapping m : mappingMap.values()) { - portMapList.add(m); + if (device.getOduSwitchingPools() != null) { + List oduSwithcingPools = device.getOduSwitchingPools(); + List switchingPoolList = new ArrayList<>(); + for (OduSwitchingPools odp : oduSwithcingPools) { + List nblList = new ArrayList<>(); + for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org + .openroadm.device.odu.switching.pools.NonBlockingList nbl : odp.getNonBlockingList()) { + List lcpList = new ArrayList<>(); + if (nbl.getPortList() != null) { + for (PortList item : nbl.getPortList()) { + String key = item.getCircuitPackName() + "+" + item.getPortName(); + if (lcpMap.containsKey(key)) { + lcpList.add(lcpMap.get(key)); + } else { + LOG.error("error : port {} of {} is not associated to a logical connection point", + item.getPortName(), item.getCircuitPackName()); + } + } + NonBlockingList nonBlockingList = new NonBlockingListBuilder() + .setNblNumber(nbl.getNblNumber()) + .setInterconnectBandwidth(nbl.getInterconnectBandwidth()) + .setInterconnectBandwidthUnit(nbl.getInterconnectBandwidthUnit()) + .setLcpList(lcpList) + .build(); + nblList.add(nonBlockingList); + } + } + SwitchingPoolLcp splBldr = new SwitchingPoolLcpBuilder() + .setSwitchingPoolNumber(odp.getSwitchingPoolNumber()) + .setSwitchingPoolType(odp.getSwitchingPoolType()) + .setNonBlockingList(nblList) + .build(); + switchingPoolList.add(splBldr); } + postPortMapping(nodeId, null, null, null, switchingPoolList); + } + + if (!mappingMap.isEmpty()) { + mappingMap.forEach((k,v) -> portMapList.add(v)); } return true; } @@ -546,8 +574,7 @@ public class PortMappingVersion221 { continue; } } else { - LOG.info("{} : port {} on {} is not roadm-external or has already been handled." - + " No logicalConnectionPoint assignment for this port.", + LOG.info("{} : port {} on {} is not roadm-external or has already been handled. No logicalConnectionPoint assignment for this port.", nodeId, port.getPortName(), circuitPackName); } } @@ -681,9 +708,8 @@ public class PortMappingVersion221 { } private boolean postPortMapping(String nodeId, NodeInfo nodeInfo, List portMapList, - List cp2DegreeList) { - NodesBuilder nodesBldr = new NodesBuilder(); - nodesBldr.withKey(new NodesKey(nodeId)).setNodeId(nodeId); + List cp2DegreeList, List splList) { + NodesBuilder nodesBldr = new NodesBuilder().withKey(new NodesKey(nodeId)).setNodeId(nodeId); if (nodeInfo != null) { nodesBldr.setNodeInfo(nodeInfo); } @@ -693,12 +719,13 @@ public class PortMappingVersion221 { if (cp2DegreeList != null) { nodesBldr.setCpToDegree(cp2DegreeList); } - + if (splList != null) { + nodesBldr.setSwitchingPoolLcp(splList); + } List nodesList = new ArrayList<>(); nodesList.add(nodesBldr.build()); - NetworkBuilder nwBldr = new NetworkBuilder(); - nwBldr.setNodes(nodesList); + NetworkBuilder nwBldr = new NetworkBuilder().setNodes(nodesList); final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); InstanceIdentifier nodesIID = InstanceIdentifier.builder(Network.class).build(); @@ -708,7 +735,6 @@ public class PortMappingVersion221 { try { commit.get(); return true; - } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to post {}", network, e); return false; @@ -761,16 +787,16 @@ public class PortMappingVersion221 { } private Mapping createXpdrMappingObject(String nodeId, Ports port, String circuitPackName, - String logicalConnectionPoint, String partnerLcp, Mapping mapping, String assoLcp) { + String logicalConnectionPoint, String partnerLcp, Mapping mapping, String connectionMapLcp, + XpdrNodeTypes xpdrNodeType) { MappingBuilder mpBldr; - if (mapping != null && assoLcp != null) { + if (mapping != null && connectionMapLcp != null) { // update existing mapping - mpBldr = new MappingBuilder(mapping); - mpBldr.setConnectionMapLcp(assoLcp); + mpBldr = new MappingBuilder(mapping).setConnectionMapLcp(connectionMapLcp); } else { // create a new mapping - mpBldr = new MappingBuilder(); - mpBldr.withKey(new MappingKey(logicalConnectionPoint)) + mpBldr = new MappingBuilder() + .withKey(new MappingKey(logicalConnectionPoint)) .setLogicalConnectionPoint(logicalConnectionPoint) .setSupportingCircuitPackName(circuitPackName) .setSupportingPort(port.getPortName()) @@ -778,6 +804,12 @@ public class PortMappingVersion221 { if (port.getPortQual() != null) { mpBldr.setPortQual(port.getPortQual().getName()); } + if (port.getSupportedInterfaceCapability() != null) { + mpBldr.setSupportedInterfaceCapability(port.getSupportedInterfaceCapability()); + } + if (xpdrNodeType != null) { + mpBldr.setXponderType(xpdrNodeType); + } if (partnerLcp != null) { mpBldr.setPartnerLcp(partnerLcp); } @@ -793,7 +825,7 @@ public class PortMappingVersion221 { Map interfaceList = getEthInterfaceList(nodeId); List cpToDegreeList = getCpToDegreeList(degrees, nodeId, interfaceList); LOG.info("Map looks like this {}", interfaceList); - postPortMapping(nodeId, null, null, cpToDegreeList); + postPortMapping(nodeId, null, null, cpToDegreeList, null); Map> connectionPortMap = getPerDegreePorts(nodeId, deviceInfo); for (Integer k : connectionPortMap.keySet()) { diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java index f6b5e7bad..669be1bec 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java @@ -12,10 +12,9 @@ import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; +import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.networkmodel.util.ClliNetwork; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmNetwork; +import org.opendaylight.transportpce.networkmodel.util.TpceNetwork; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -27,25 +26,22 @@ public class NetworkModelProvider { private static final Logger LOG = LoggerFactory.getLogger(NetworkModelProvider.class); - private NetworkTransactionService networkTransactionService; private final DataBroker dataBroker; private final RpcProviderService rpcProviderService; private final TransportpceNetworkutilsService networkutilsService; private final NetConfTopologyListener topologyListener; - private final OpenRoadmFactory openRoadmFactory; private ListenerRegistration dataTreeChangeListenerRegistration; private ObjectRegistration networkutilsServiceRpcRegistration; + private TpceNetwork tpceNetwork; - public NetworkModelProvider(NetworkTransactionService networkTransactionService, - final DataBroker dataBroker, final RpcProviderService rpcProviderService, - final TransportpceNetworkutilsService networkutilsService, final NetConfTopologyListener topologyListener, - OpenRoadmFactory openRoadmFactory) { - this.networkTransactionService = networkTransactionService; + public NetworkModelProvider(NetworkTransactionService networkTransactionService, final DataBroker dataBroker, + final RpcProviderService rpcProviderService, final TransportpceNetworkutilsService networkutilsService, + final NetConfTopologyListener topologyListener) { this.dataBroker = dataBroker; this.rpcProviderService = rpcProviderService; this.networkutilsService = networkutilsService; this.topologyListener = topologyListener; - this.openRoadmFactory = openRoadmFactory; + this.tpceNetwork = new TpceNetwork(networkTransactionService); } /** @@ -53,10 +49,10 @@ public class NetworkModelProvider { */ public void init() { LOG.info("NetworkModelProvider Session Initiated"); - ClliNetwork.createClliLayer(dataBroker); - OpenRoadmNetwork.createOpenRoadmNetworkLayer(dataBroker); - openRoadmFactory.createTopoLayerVersionControl(networkTransactionService); - openRoadmFactory.createOtnTopoLayerVersionControl(networkTransactionService); + tpceNetwork.createLayer(NetworkUtils.CLLI_NETWORK_ID); + tpceNetwork.createLayer(NetworkUtils.UNDERLAY_NETWORK_ID); + tpceNetwork.createLayer(NetworkUtils.OVERLAY_NETWORK_ID); + tpceNetwork.createLayer(NetworkUtils.OTN_NETWORK_ID); dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener); @@ -64,7 +60,6 @@ public class NetworkModelProvider { rpcProviderService.registerRpcImplementation(TransportpceNetworkutilsService.class, networkutilsService); } - /** * Method called when the blueprint container is destroyed. */ @@ -77,5 +72,4 @@ public class NetworkModelProvider { networkutilsServiceRpcRegistration.close(); } } - } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java index 32f9d18f2..d1fe74701 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java @@ -15,7 +15,6 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.binding.api.WriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutputBuilder; @@ -47,11 +46,9 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService { private static final Logger LOG = LoggerFactory.getLogger(NetworkUtilsImpl.class); private final DataBroker dataBroker; - private final OpenRoadmFactory openRoadmFactory; - public NetworkUtilsImpl(DataBroker dataBroker, OpenRoadmFactory openRoadmFactory) { + public NetworkUtilsImpl(DataBroker dataBroker) { this.dataBroker = dataBroker; - this.openRoadmFactory = openRoadmFactory; } @Override @@ -101,8 +98,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService { @Override public ListenableFuture> initRoadmNodes(InitRoadmNodesInput input) { - boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, - this.openRoadmFactory,this.dataBroker); + boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, this.dataBroker); if (createRdmLinks) { return RpcResultBuilder .success(new InitRoadmNodesOutputBuilder().setResult( @@ -117,8 +113,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService { public ListenableFuture> initXpdrRdmLinks(InitXpdrRdmLinksInput input) { // Assigns user provided input in init-network-view RPC to nodeId LOG.info("Xpdr to Roadm links rpc called"); - boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), - this.openRoadmFactory,this.dataBroker); + boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), this.dataBroker); if (createXpdrRdmLinks) { return RpcResultBuilder .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully")) @@ -130,8 +125,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService { @Override public ListenableFuture> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { - boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), - this.openRoadmFactory,this.dataBroker); + boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker); if (createRdmXpdrLinks) { return RpcResultBuilder .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully")) diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java index c44203cf3..779699124 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java @@ -14,7 +14,7 @@ import org.opendaylight.mdsal.binding.api.WriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; +import org.opendaylight.transportpce.networkmodel.util.TopologyUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder; @@ -39,8 +39,7 @@ final class OrdLink { /**Method to create OMS links if not discovered by LLDP. This is helpful to create test topologies using simulators**/ - public static boolean createRdm2RdmLinks(InitRoadmNodesInput input, - OpenRoadmFactory openRoadmFactory, DataBroker dataBroker) { + public static boolean createRdm2RdmLinks(InitRoadmNodesInput input, DataBroker dataBroker) { LinkId oppositeLinkId = LinkIdUtil.getRdm2RdmOppositeLinkId(input); @@ -59,7 +58,7 @@ final class OrdLink { String destTp = input.getTerminationPointZ(); //IETF link builder - LinkBuilder linkBuilder = openRoadmFactory.createLink(srcNode, destNode, srcTp, destTp); + LinkBuilder linkBuilder = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp); linkBuilder.addAugmentation(Link1.class,link1Builder.build()); linkBuilder.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java index 0cf4e4dce..9b7e572c1 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java @@ -24,7 +24,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; +import org.opendaylight.transportpce.networkmodel.util.TopologyUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.Network; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.Nodes; @@ -49,13 +49,11 @@ public class R2RLinkDiscovery { private final DataBroker dataBroker; private final NetworkTransactionService networkTransactionService; private final DeviceTransactionManager deviceTransactionManager; - private final OpenRoadmFactory openRoadmFactory; public R2RLinkDiscovery(final DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager, - OpenRoadmFactory openRoadmFactory, NetworkTransactionService networkTransactionService) { + NetworkTransactionService networkTransactionService) { this.dataBroker = dataBroker; this.deviceTransactionManager = deviceTransactionManager; - this.openRoadmFactory = openRoadmFactory; this.networkTransactionService = networkTransactionService; } @@ -225,7 +223,7 @@ public class R2RLinkDiscovery { r2rlinkBuilderAToZ.setRdmANode(nodeId.getValue()).setDegANum(srcDegId.shortValue()) .setTerminationPointA(srcTpTx).setRdmZNode(destNodeId.getValue()).setDegZNum(destDegId.shortValue()) .setTerminationPointZ(destTpRx); - if (!OrdLink.createRdm2RdmLinks(r2rlinkBuilderAToZ.build(), this.openRoadmFactory, this.dataBroker)) { + if (!OrdLink.createRdm2RdmLinks(r2rlinkBuilderAToZ.build(), this.dataBroker)) { LOG.error("OMS Link creation failed between node: {} and nodeId: {} in A->Z direction", nodeId.getValue(), destNodeId.getValue()); return false; @@ -236,11 +234,14 @@ public class R2RLinkDiscovery { + ", SrcTPId: {}, DestNodeId:{} , DestDegId: {}, DestTPId: {}", destNodeId, destDegId, destTpTx, nodeId.getValue(), srcDegId, srcTpRx); - InitRoadmNodesInputBuilder r2rlinkBuilderZToA = new InitRoadmNodesInputBuilder(); - r2rlinkBuilderZToA.setRdmANode(destNodeId.getValue()).setDegANum(destDegId.shortValue()) - .setTerminationPointA(destTpTx).setRdmZNode(nodeId.getValue()).setDegZNum(srcDegId.shortValue()) + InitRoadmNodesInputBuilder r2rlinkBuilderZToA = new InitRoadmNodesInputBuilder() + .setRdmANode(destNodeId.getValue()) + .setDegANum(destDegId.shortValue()) + .setTerminationPointA(destTpTx) + .setRdmZNode(nodeId.getValue()) + .setDegZNum(srcDegId.shortValue()) .setTerminationPointZ(srcTpRx); - if (!OrdLink.createRdm2RdmLinks(r2rlinkBuilderZToA.build(), this.openRoadmFactory, this.dataBroker)) { + if (!OrdLink.createRdm2RdmLinks(r2rlinkBuilderZToA.build(), this.dataBroker)) { LOG.error("OMS Link creation failed between node: {} and nodeId: {} in Z->A direction", destNodeId.getValue(), nodeId.getValue()); return false; @@ -293,10 +294,10 @@ public class R2RLinkDiscovery { destTpTx = "DEG" + destDegId + "-TTP-TX"; destTpRx = "DEG" + destDegId + "-TTP-RX"; } - return this.openRoadmFactory.deleteLink(nodeId.getValue() + "-" + srcDegId.toString(), + return TopologyUtils.deleteLink(nodeId.getValue() + "-" + srcDegId.toString(), destNodeId.getValue() + "-" + destDegId.toString(), srcTpTx.toString(), destTpRx.toString(),networkTransactionService) - && this.openRoadmFactory.deleteLink(destNodeId.getValue() + "-" + destDegId.toString(), + && TopologyUtils.deleteLink(destNodeId.getValue() + "-" + destDegId.toString(), nodeId.getValue() + "-" + srcDegId.toString(), destTpTx, srcTpRx, networkTransactionService); } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java index 9edfc0685..bdf46a6f3 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java @@ -10,27 +10,42 @@ package org.opendaylight.transportpce.networkmodel; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.FluentFuture; + +import java.util.Optional; import java.util.concurrent.ExecutionException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.binding.api.WriteTransaction; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; +import org.opendaylight.transportpce.networkmodel.util.TopologyUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.links.input.grouping.LinksInput; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,8 +55,7 @@ final class Rdm2XpdrLink { private static final Logger LOG = LoggerFactory.getLogger(Rdm2XpdrLink.class); - public static boolean createXpdrRdmLinks(LinksInput linksInput, OpenRoadmFactory openRoadmFactory, - DataBroker dataBroker) { + public static boolean createXpdrRdmLinks(LinksInput linksInput, DataBroker dataBroker) { String srcNode = new StringBuilder(linksInput.getXpdrNode()).append("-XPDR").append(linksInput.getXpdrNum()).toString(); String srcTp = new StringBuilder("XPDR").append(linksInput.getXpdrNum()).append("-NETWORK") @@ -49,9 +63,10 @@ final class Rdm2XpdrLink { String destNode = new StringBuilder(linksInput.getRdmNode()).append("-SRG").append(linksInput.getSrgNum()).toString(); String destTp = linksInput.getTerminationPointNum(); + // update tail-equipment-id for tp of link + TerminationPoint xpdrTp = getTpofNode(srcNode, srcTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, - openRoadmFactory).build(); + Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp).build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction(); @@ -63,16 +78,13 @@ final class Rdm2XpdrLink { commit.get(); LOG.info("Post successful"); return true; - } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to create Xponder to Roadm link in the Topo layer "); return false; - } } - public static boolean createRdmXpdrLinks(LinksInput linksInput, - OpenRoadmFactory openRoadmFactory, DataBroker dataBroker) { + public static boolean createRdmXpdrLinks(LinksInput linksInput, DataBroker dataBroker) { String srcNode = new StringBuilder(linksInput.getRdmNode()).append("-SRG").append(linksInput.getSrgNum()).toString(); String srcTp = linksInput.getTerminationPointNum(); @@ -80,9 +92,9 @@ final class Rdm2XpdrLink { new StringBuilder(linksInput.getXpdrNode()).append("-XPDR").append(linksInput.getXpdrNum()).toString(); String destTp = new StringBuilder("XPDR").append(linksInput.getXpdrNum()).append("-NETWORK") .append(linksInput.getNetworkNum()).toString(); + TerminationPoint xpdrTp = getTpofNode(destNode, destTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, - openRoadmFactory).build(); + Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp).build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); @@ -101,13 +113,39 @@ final class Rdm2XpdrLink { } private static NetworkBuilder createNetworkBuilder(String srcNode, String srcTp, String destNode, String destTp, - boolean isXponderInput, OpenRoadmFactory openRoadmFactory) { + boolean isXponderInput, TerminationPoint xpdrTp) { + //update tp of nodes + TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder(xpdrTp); + if (xpdrTpBldr.augmentation(TerminationPoint1.class) != null) { + LOG.warn("Rewritting tail-equipment-id {} on tp {} of node {}", xpdrTpBldr + .augmentation(TerminationPoint1.class).getXpdrNetworkAttributes().getTailEquipmentId(), srcTp, srcNode); + } + TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); + if (isXponderInput) { + tp1Bldr.setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() + .setTailEquipmentId(srcNode + "--" + srcTp).build()); + } else { + tp1Bldr.setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder() + .setTailEquipmentId(destNode + "--" + destTp).build()); + } + xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = + new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build(); + NodeBuilder nodeBldr = new NodeBuilder() + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class, node1); + if (isXponderInput) { + nodeBldr.setNodeId(new NodeId(destNode)); + } else { + nodeBldr.setNodeId(new NodeId(srcNode)); + } + Link1Builder lnk1bldr = new Link1Builder(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder lnk2bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() .setLinkType(isXponderInput ? OpenroadmLinkType.XPONDERINPUT : OpenroadmLinkType.XPONDEROUTPUT) .setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp)); - LinkBuilder linkBuilder = openRoadmFactory.createLink(srcNode, destNode, srcTp, destTp) + LinkBuilder linkBuilder = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp) .addAugmentation(Link1.class, lnk1bldr.build()) .addAugmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, @@ -116,14 +154,44 @@ final class Rdm2XpdrLink { LOG.info("Link id in the linkbldr {}", linkBuilder.getLinkId()); LOG.info("Link with oppo link {}", linkBuilder.augmentation(Link1.class)); Network1Builder nwBldr1 = new Network1Builder().setLink(ImmutableList.of(linkBuilder.build())); + NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID); NetworkBuilder nwBuilder = new NetworkBuilder() .setNetworkId(nwId) .withKey(new NetworkKey(nwId)) - .addAugmentation(Network1.class, nwBldr1.build()); + .addAugmentation(Network1.class, nwBldr1.build()) + .setNode(ImmutableList.of(nodeBldr.build())); return nwBuilder; } + private static TerminationPoint getTpofNode(String srcNode, String srcTp, DataBroker dataBroker) { + InstanceIdentifier iiTp = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(Node.class, new NodeKey(new NodeId(srcNode))) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class) + .child(TerminationPoint.class, new TerminationPointKey(new TpId(srcTp))) + .build(); + @NonNull + ReadTransaction readTransaction = dataBroker.newReadOnlyTransaction(); + @NonNull + FluentFuture> tpFf = readTransaction.read(LogicalDatastoreType.CONFIGURATION, iiTp); + TerminationPoint tp = null; + if (tpFf.isDone()) { + Optional tpOpt = null; + try { + tpOpt = tpFf.get(); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Impossible to get tp-id {} of node {} from {}", srcTp, srcNode, + NetworkUtils.OVERLAY_NETWORK_ID); + } + if (tpOpt.isPresent()) { + tp = tpOpt.get(); + } + } + return tp; + } + private Rdm2XpdrLink() { } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java new file mode 100644 index 000000000..5fcaff3fd --- /dev/null +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java @@ -0,0 +1,64 @@ +/* + * Copyright © 2020 Orange, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.transportpce.networkmodel.dto; + +import java.util.Map; + +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; + +public class OtnTopoNode { + private String nodeId; + private String clli; + private XpdrNodeTypes nodeType; + private int xpdrNb; + private Map xpdrNetConnectionMap; + private Map xpdrCliConnectionMap; + + public OtnTopoNode(String nodeid, String clli, int xpdrNb, XpdrNodeTypes xpdrNodeTypes, + Map xpdrNetConnectionMap, Map xpdrCliConnectionMap) { + super(); + this.nodeId = nodeid; + this.clli = clli; + this.nodeType = xpdrNodeTypes; + this.xpdrNb = xpdrNb; + this.xpdrNetConnectionMap = xpdrNetConnectionMap; + this.xpdrCliConnectionMap = xpdrCliConnectionMap; + } + + public String getNodeId() { + return nodeId; + } + + public XpdrNodeTypes getNodeType() { + return nodeType; + } + + public int getNbTpNetwork() { + return xpdrNetConnectionMap.size(); + } + + public int getNbTpClient() { + return xpdrCliConnectionMap.size(); + } + + public int getXpdrNb() { + return xpdrNb; + } + + public String getClli() { + return clli; + } + + public Map getXpdrNetConnectionMap() { + return xpdrNetConnectionMap; + } + + public Map getXpdrCliConnectionMap() { + return xpdrCliConnectionMap; + } +} diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java index 0b075e740..4f86bdf1f 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java @@ -15,15 +15,14 @@ import java.util.concurrent.TimeoutException; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; -import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery; import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; import org.opendaylight.transportpce.networkmodel.util.ClliNetwork; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; import org.opendaylight.transportpce.networkmodel.util.OpenRoadmNetwork; -import org.opendaylight.transportpce.networkmodel.util.OpenRoadmOtnTopology22; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmOtnTopology; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo.OpenroadmVersion; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes; @@ -48,20 +47,15 @@ public class NetworkModelServiceImpl implements NetworkModelService { private NetworkTransactionService networkTransactionService; private final R2RLinkDiscovery linkDiscovery; - private final DeviceTransactionManager deviceTransactionManager; - private final OpenRoadmFactory openRoadmFactory; private final PortMapping portMapping; private HashMap topologyShardMountedDevice; private HashMap otnTopologyShardMountedDevice; public NetworkModelServiceImpl(final NetworkTransactionService networkTransactionService, - final R2RLinkDiscovery linkDiscovery, DeviceTransactionManager deviceTransactionManager, - OpenRoadmFactory openRoadmFactory, PortMapping portMapping) { + final R2RLinkDiscovery linkDiscovery, PortMapping portMapping) { this.networkTransactionService = networkTransactionService; this.linkDiscovery = linkDiscovery; - this.deviceTransactionManager = deviceTransactionManager; - this.openRoadmFactory = openRoadmFactory; this.portMapping = portMapping; this.topologyShardMountedDevice = new HashMap(); this.otnTopologyShardMountedDevice = new HashMap(); @@ -87,7 +81,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { if (nodeInfo.getNodeType().getIntValue() == 1) { this.linkDiscovery.readLLDP(new NodeId(nodeId), openRoadmVersion); } - + // node creation in clli-network Node clliNode = ClliNetwork.createNode(nodeId, nodeInfo); InstanceIdentifier iiClliNode = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))) @@ -97,65 +91,73 @@ public class NetworkModelServiceImpl implements NetworkModelService { networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiClliNode, clliNode, CREATE_MISSING_PARENTS); - Node openRoadmNode = OpenRoadmNetwork.createNode(nodeId, nodeInfo); - InstanceIdentifier iiOpenRoadmNode = InstanceIdentifier.builder(Networks.class) + // node creation in openroadm-network + Node openroadmNetworkNode = OpenRoadmNetwork.createNode(nodeId, nodeInfo); + InstanceIdentifier iiopenroadmNetworkNode = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))) - .child(Node.class, openRoadmNode.key()) + .child(Node.class, openroadmNetworkNode.key()) .build(); LOG.info("creating node in {}", NetworkUtils.UNDERLAY_NETWORK_ID); - networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode, openRoadmNode, - CREATE_MISSING_PARENTS); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiopenroadmNetworkNode, + openroadmNetworkNode, CREATE_MISSING_PARENTS); - TopologyShard topologyShard = - openRoadmFactory.createTopologyShardVersionControl(portMapping.getNode(nodeId)); - - if (topologyShard == null) { - LOG.error("Unable to create topology shard for node {}!", nodeId); - return; - } - this.topologyShardMountedDevice.put(nodeId, topologyShard); - - for (Node openRoadmTopologyNode: topologyShard.getNodes()) { - LOG.info("creating node {} in {}", openRoadmTopologyNode.getNodeId().getValue(), - NetworkUtils.OVERLAY_NETWORK_ID); - InstanceIdentifier iiOpenRoadmTopologyNode = InstanceIdentifier.builder(Networks.class) - .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) - .child(Node.class, openRoadmTopologyNode.key()) - .build(); - networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode, - openRoadmTopologyNode, CREATE_MISSING_PARENTS); - } - for (Link openRoadmTopologyLink: topologyShard.getLinks()) { - LOG.info("creating link {} in {}", openRoadmTopologyLink.getLinkId().getValue(), - NetworkUtils.OVERLAY_NETWORK_ID); - InstanceIdentifier iiOpenRoadmTopologyLink = InstanceIdentifier.builder(Networks.class) - .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) - .augmentation(Network1.class) - .child(Link.class, openRoadmTopologyLink.key()) - .build(); - networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink, - openRoadmTopologyLink, CREATE_MISSING_PARENTS); - } - if (nodeInfo.getNodeType().equals(NodeTypes.Xpdr) && (nodeInfo.getOpenroadmVersion().getIntValue() != 1)) { - TopologyShard otnTopologyShard = new OpenRoadmOtnTopology22(this.networkTransactionService, - this.deviceTransactionManager).createTopologyShard(portMapping.getNode(nodeId)); - if (otnTopologyShard == null) { - LOG.error("Unable to create OTN topology shard for node {}!", nodeId); - return; + // nodes/links creation in openroadm-topology + TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(portMapping.getNode(nodeId)); + if (topologyShard != null) { + this.topologyShardMountedDevice.put(nodeId, topologyShard); + for (Node openRoadmTopologyNode: topologyShard.getNodes()) { + LOG.info("creating node {} in {}", openRoadmTopologyNode.getNodeId().getValue(), + NetworkUtils.OVERLAY_NETWORK_ID); + InstanceIdentifier iiOpenRoadmTopologyNode = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(Node.class, openRoadmTopologyNode.key()) + .build(); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode, + openRoadmTopologyNode, CREATE_MISSING_PARENTS); } - this.otnTopologyShardMountedDevice.put(nodeId, otnTopologyShard); + for (Link openRoadmTopologyLink: topologyShard.getLinks()) { + LOG.info("creating link {} in {}", openRoadmTopologyLink.getLinkId().getValue(), + NetworkUtils.OVERLAY_NETWORK_ID); + InstanceIdentifier iiOpenRoadmTopologyLink = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .augmentation(Network1.class) + .child(Link.class, openRoadmTopologyLink.key()) + .build(); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink, + openRoadmTopologyLink, CREATE_MISSING_PARENTS); + } + } else { + LOG.error("Unable to create openroadm-topology shard for node {}!", nodeId); + } - for (Node openRoadmOtnTopologyNode: otnTopologyShard.getNodes()) { - LOG.info("creating node {} in {}", openRoadmOtnTopologyNode.getNodeId().getValue(), - // NetworkUtils.OVERLAY_NETWORK_ID); - NetworkUtils.OTN_NETWORK_ID); - InstanceIdentifier iiOpenRoadmOtnTopologyNode = InstanceIdentifier.builder(Networks.class) - // .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + // nodes/links creation in otn-topology + if (nodeInfo.getNodeType().getIntValue() == 2 && (nodeInfo.getOpenroadmVersion().getIntValue() != 1)) { + TopologyShard otnTopologyShard = OpenRoadmOtnTopology.createTopologyShard(portMapping.getNode(nodeId)); + if (otnTopologyShard != null) { + this.otnTopologyShardMountedDevice.put(nodeId, otnTopologyShard); + for (Node otnTopologyNode: otnTopologyShard.getNodes()) { + LOG.info("creating otn node {} in {}", otnTopologyNode.getNodeId().getValue(), + NetworkUtils.OTN_NETWORK_ID); + InstanceIdentifier iiOtnTopologyNode = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) + .child(Node.class, otnTopologyNode.key()) + .build(); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOtnTopologyNode, + otnTopologyNode); + } + for (Link otnTopologyLink: otnTopologyShard.getLinks()) { + LOG.info("creating otn link {} in {}", otnTopologyLink.getLinkId().getValue(), + NetworkUtils.OVERLAY_NETWORK_ID); + InstanceIdentifier iiOtnTopologyLink = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) - .child(Node.class, openRoadmOtnTopologyNode.key()) + .augmentation(Network1.class) + .child(Link.class, otnTopologyLink.key()) .build(); - networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmOtnTopologyNode, - openRoadmOtnTopologyNode); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOtnTopologyLink, + otnTopologyLink, CREATE_MISSING_PARENTS); + } + } else { + LOG.error("Unable to create OTN topology shard for node {}!", nodeId); } } networkTransactionService.commit().get(); @@ -163,7 +165,6 @@ public class NetworkModelServiceImpl implements NetworkModelService { } catch (InterruptedException | ExecutionException e) { LOG.error("ERROR: ", e); } - } @Override @@ -186,26 +187,20 @@ public class NetworkModelServiceImpl implements NetworkModelService { @Override public void deleteOpenRoadmnode(String nodeId) { try { - @Nullable - OpenroadmVersion deviceVersion = this.portMapping.getNode(nodeId).getNodeInfo().getOpenroadmVersion(); - LOG.info("deleteOpenROADMnode: {} version {}", nodeId, deviceVersion.getName()); - this.portMapping.deleteMappingData(nodeId); - NodeKey nodeIdKey = new NodeKey(new NodeId(nodeId)); LOG.info("deleting node in {}", NetworkUtils.UNDERLAY_NETWORK_ID); - InstanceIdentifier iiOpenRoadmNode = InstanceIdentifier.builder(Networks.class) + InstanceIdentifier iiopenroadmNetworkNode = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))) .child(Node.class, nodeIdKey) .build(); - this.networkTransactionService.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode); + this.networkTransactionService.delete(LogicalDatastoreType.CONFIGURATION, iiopenroadmNetworkNode); TopologyShard topologyShard = this.topologyShardMountedDevice.get(nodeId); if (topologyShard != null) { - LOG.info("TopologyShard for node '{}' is present", nodeId); for (Node openRoadmTopologyNode: topologyShard .getNodes()) { LOG.info("deleting node {} in {}", openRoadmTopologyNode.getNodeId().getValue(), - NetworkUtils.OVERLAY_NETWORK_ID); + NetworkUtils.OVERLAY_NETWORK_ID); InstanceIdentifier iiOpenRoadmTopologyNode = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) .child(Node.class, openRoadmTopologyNode.key()) @@ -214,7 +209,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { } for (Link openRoadmTopologyLink: topologyShard.getLinks()) { LOG.info("deleting link {} in {}", openRoadmTopologyLink.getLinkId().getValue(), - NetworkUtils.OVERLAY_NETWORK_ID); + NetworkUtils.OVERLAY_NETWORK_ID); InstanceIdentifier iiOpenRoadmTopologyLink = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) .augmentation(Network1.class) @@ -225,6 +220,39 @@ public class NetworkModelServiceImpl implements NetworkModelService { } else { LOG.warn("TopologyShard for node '{}' is not present", nodeId); } + @Nullable + OpenroadmVersion deviceVersion = this.portMapping.getNode(nodeId).getNodeInfo().getOpenroadmVersion(); + @Nullable + NodeTypes nodeType = this.portMapping.getNode(nodeId).getNodeInfo().getNodeType(); + if (nodeType.getIntValue() == 2 && deviceVersion.getIntValue() != 1) { + TopologyShard otnTopologyShard = this.otnTopologyShardMountedDevice.get(nodeId); + LOG.info("suppression de otnTopologyShard = {}", otnTopologyShard.toString()); + if (otnTopologyShard != null) { + for (Node otnTopologyNode: otnTopologyShard .getNodes()) { + LOG.info("deleting node {} in {}", otnTopologyNode.getNodeId().getValue(), + NetworkUtils.OTN_NETWORK_ID); + InstanceIdentifier iiotnTopologyNode = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) + .child(Node.class, otnTopologyNode.key()) + .build(); + this.networkTransactionService.delete(LogicalDatastoreType.CONFIGURATION, iiotnTopologyNode); + } + for (Link otnTopologyLink: otnTopologyShard.getLinks()) { + LOG.info("deleting link {} in {}", otnTopologyLink.getLinkId().getValue(), + NetworkUtils.OTN_NETWORK_ID); + InstanceIdentifier iiotnTopologyLink = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) + .augmentation(Network1.class) + .child(Link.class, otnTopologyLink.key()) + .build(); + this.networkTransactionService.delete(LogicalDatastoreType.CONFIGURATION, iiotnTopologyLink); + } + } + } + + LOG.info("deleteOpenROADMnode: {} version {}", nodeId, deviceVersion.getName()); + this.portMapping.deleteMappingData(nodeId); + this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); LOG.info("all nodes and links deleted ! "); } catch (InterruptedException | ExecutionException | TimeoutException e) { diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/ClliNetwork.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/ClliNetwork.java index 248fb4581..7965d9c3b 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/ClliNetwork.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/ClliNetwork.java @@ -8,31 +8,13 @@ package org.opendaylight.transportpce.networkmodel.util; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import org.opendaylight.mdsal.binding.api.DataBroker; -import org.opendaylight.mdsal.binding.api.WriteTransaction; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo; -import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.NetworkTypes1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.networks.network.network.types.ClliNetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,26 +23,6 @@ public final class ClliNetwork { private static final Logger LOG = LoggerFactory.getLogger(ClliNetwork.class); private ClliNetwork() { - // utility class - } - - /** - * This public method creates the CLLI Layer and posts it to the controller. - * - * @param controllerdb controller Databroker - */ - public static void createClliLayer(DataBroker controllerdb) { - try { - Network clliNetwork = createNetwork(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))); - WriteTransaction wrtx = controllerdb.newWriteOnlyTransaction(); - wrtx.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), clliNetwork); - wrtx.commit().get(1, TimeUnit.SECONDS); - LOG.info("CLLI-Network created successfully."); - } catch (ExecutionException | TimeoutException | InterruptedException e) { - LOG.warn("Failed to create CLLI-Network", e); - } } /** @@ -72,40 +34,27 @@ public final class ClliNetwork { * @return node builder status */ public static Node createNode(String deviceId, NodeInfo nodeInfo) { - String clli = nodeInfo.getNodeClli(); /* * Create node in the CLLI layer of the network model * with nodeId equal to the clli attribute in the device * model's info subtree */ NodeBuilder nodeBldr = new NodeBuilder(); - NodeId nwNodeId = new NodeId(clli); - nodeBldr.setNodeId(nwNodeId); - nodeBldr.withKey(new NodeKey(nwNodeId)); /* * create clli node augmentation * defined in openroadm-clli-network.yang */ - Node1Builder clliAugmentationBldr = new Node1Builder(); - clliAugmentationBldr.setClli(clli); - nodeBldr.addAugmentation(Node1.class, clliAugmentationBldr.build()); - return nodeBldr.build(); - } - /** - * Create empty CLLI network. - */ - private static Network createNetwork() { - NetworkBuilder nwBuilder = new NetworkBuilder(); - NetworkId nwId = new NetworkId(NetworkUtils.CLLI_NETWORK_ID); - nwBuilder.setNetworkId(nwId); - nwBuilder.withKey(new NetworkKey(nwId)); - //set network type to clli - NetworkTypes1Builder clliNetworkTypesBldr = new NetworkTypes1Builder(); - clliNetworkTypesBldr.setClliNetwork(new ClliNetworkBuilder().build()); - NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder(); - nwTypeBuilder.addAugmentation(NetworkTypes1.class, clliNetworkTypesBldr.build()); - nwBuilder.setNetworkTypes(nwTypeBuilder.build()); - return nwBuilder.build(); + if (nodeInfo.getNodeClli() != null) { + nodeBldr.setNodeId(new NodeId(nodeInfo.getNodeClli())) + .withKey(new NodeKey(new NodeId(nodeInfo.getNodeClli()))); + Node1 clliAugmentation = new Node1Builder() + .setClli(nodeInfo.getNodeClli()) + .build(); + nodeBldr.addAugmentation(Node1.class, clliAugmentation); + } else { + LOG.warn("No CLLI configured in configuration of {}", deviceId); + } + return nodeBldr.build(); } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmFactory.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmFactory.java deleted file mode 100644 index da4cb0c26..000000000 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright © 2019 AT&T and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.transportpce.networkmodel.util; - -import org.opendaylight.transportpce.common.mapping.MappingUtils; -import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.Nodes; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class OpenRoadmFactory { - private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmFactory.class); - OpenRoadmTopology22 openRoadmTopology22; - OpenRoadmOtnTopology22 openRoadmOtnTopology22; - private final MappingUtils mappingUtils; - - public OpenRoadmFactory(MappingUtils mappingUtils, OpenRoadmTopology22 openRoadmTopology22, - OpenRoadmOtnTopology22 openRoadmOtnTopology22) { - this.mappingUtils = mappingUtils; - this.openRoadmTopology22 = openRoadmTopology22; - this.openRoadmOtnTopology22 = openRoadmOtnTopology22; - } - - public void createTopoLayerVersionControl(NetworkTransactionService networkTransactionService) { - openRoadmTopology22.createTopoLayer(); - } - - public void createOtnTopoLayerVersionControl(NetworkTransactionService networkTransactionService) { - openRoadmOtnTopology22.createTopoLayer(); - } - - public TopologyShard createTopologyShardVersionControl(Nodes mappingNode) { - return openRoadmTopology22.createTopologyShard(mappingNode); - } - - public TopologyShard createOtnTopologyShardVersionControl(Nodes mappingNode) { - return openRoadmOtnTopology22.createTopologyShard(mappingNode); - } - - public boolean deleteLink(String srcNode, String dstNode, String srcTp, String destTp, - NetworkTransactionService networkTransactionService) { - - return TopologyUtils.deleteLink(srcNode, dstNode, srcTp, destTp, networkTransactionService); - } - - public LinkBuilder createLink(String srcNode, String dstNode, String srcTp, String destTp) { - return TopologyUtils.createLink(srcNode,dstNode,srcTp,destTp); - - } -} diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetwork.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetwork.java index 5ce3167c3..d3ee6f00c 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetwork.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetwork.java @@ -9,35 +9,19 @@ package org.opendaylight.transportpce.networkmodel.util; import com.google.common.collect.ImmutableList; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import org.opendaylight.mdsal.binding.api.DataBroker; -import org.opendaylight.mdsal.binding.api.WriteTransaction; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.NodeInfo; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.Node1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,26 +34,6 @@ public final class OpenRoadmNetwork { // utility class } - /** - * This public method creates the OpenRoadmNetwork Layer and posts it to the - * controller. - * - * @param controllerdb controller databroker - */ - public static void createOpenRoadmNetworkLayer(DataBroker controllerdb) { - try { - Network openRoadmNetwork = createOpenRoadmNetwork(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))); - WriteTransaction wrtx = controllerdb.newWriteOnlyTransaction(); - wrtx.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmNetwork); - wrtx.commit().get(1, TimeUnit.SECONDS); - LOG.info("OpenRoadm-Network created successfully."); - } catch (ExecutionException | TimeoutException | InterruptedException e) { - LOG.warn("Failed to create OpenRoadm-Network", e); - } - } - /** * Create single node entry for OpenRoadmNetwork. * @@ -80,12 +44,8 @@ public final class OpenRoadmNetwork { */ public static Node createNode(String nodeId, NodeInfo nodeInfo) { - NodeBuilder nodeBldr = new NodeBuilder(); - NodeId nwNodeId = new NodeId(nodeId); - nodeBldr.setNodeId(nwNodeId); - nodeBldr.withKey(new NodeKey(nwNodeId)); - Node1Builder node1bldr = new Node1Builder(); - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder node2bldr = + Node1Builder node1Bldr = new Node1Builder(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder node2Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder(); /* @@ -93,10 +53,10 @@ public final class OpenRoadmNetwork { */ switch (nodeInfo.getNodeType().getIntValue()) { case 1: - node2bldr.setNodeType(OpenroadmNodeType.ROADM); + node2Bldr.setNodeType(OpenroadmNodeType.ROADM); break; case 2: - node2bldr.setNodeType(OpenroadmNodeType.XPONDER); + node2Bldr.setNodeType(OpenroadmNodeType.XPONDER); break; default: LOG.error("No correponsding type for the value: {}", nodeInfo.getNodeType().getName()); @@ -105,45 +65,31 @@ public final class OpenRoadmNetwork { // Sets IP, Model and Vendor information fetched from the deviceInfo if (nodeInfo.getNodeIpAddress() != null) { - node1bldr.setIp(nodeInfo.getNodeIpAddress()); + node1Bldr.setIp(nodeInfo.getNodeIpAddress()); } if (nodeInfo.getNodeModel() != null) { - node1bldr.setModel(nodeInfo.getNodeModel()); + node1Bldr.setModel(nodeInfo.getNodeModel()); } if (nodeInfo.getNodeVendor() != null) { - node1bldr.setVendor(nodeInfo.getNodeVendor()); + node1Bldr.setVendor(nodeInfo.getNodeVendor()); } // Sets the value of Network-ref and Node-ref as a part of the supporting node // attribute - SupportingNodeBuilder supportbldr = new SupportingNodeBuilder(); - supportbldr.withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), - new NodeId(nodeInfo.getNodeClli()))); - supportbldr.setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)); - supportbldr.setNodeRef(new NodeId(nodeInfo.getNodeClli())); - nodeBldr.setSupportingNode(ImmutableList.of(supportbldr.build())); - - // Augment to the main node builder - nodeBldr.addAugmentation(Node1.class, node1bldr.build()); - nodeBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, - node2bldr.build()); - return nodeBldr.build(); - } + SupportingNode supportingNode = new SupportingNodeBuilder() + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .setNodeRef(new NodeId(nodeInfo.getNodeClli())) + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), + new NodeId(nodeInfo.getNodeClli()))) + .build(); - /** - * Create empty OpenROADM network. - */ - private static Network createOpenRoadmNetwork() { - NetworkBuilder openrdmnwBuilder = new NetworkBuilder(); - NetworkId nwId = new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID); - openrdmnwBuilder.setNetworkId(nwId); - openrdmnwBuilder.withKey(new NetworkKey(nwId)); - // sets network type to OpenRoadmNetwork - NetworkTypes1Builder openRoadmNetworkTypesBldr = new NetworkTypes1Builder(); - openRoadmNetworkTypesBldr.setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build()); - NetworkTypesBuilder openrdmnwTypeBuilder = new NetworkTypesBuilder(); - openrdmnwTypeBuilder.addAugmentation(NetworkTypes1.class, openRoadmNetworkTypesBldr.build()); - openrdmnwBuilder.setNetworkTypes(openrdmnwTypeBuilder.build()); - return openrdmnwBuilder.build(); + return new NodeBuilder() + .setNodeId(new NodeId(nodeId)) + .withKey(new NodeKey(new NodeId(nodeId))) + .setSupportingNode(ImmutableList.of(supportingNode)) + .addAugmentation(Node1.class, node1Bldr.build()) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, + node2Bldr.build()) + .build(); } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java new file mode 100644 index 000000000..6e0a4f837 --- /dev/null +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java @@ -0,0 +1,427 @@ +/* + * Copyright © 2020 Orange. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.transportpce.networkmodel.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.networkmodel.dto.OtnTopoNode; +import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.Mapping; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPools; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU0; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU2e; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.OduRateIdentity; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.SwitchingPools; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.SwitchingPoolsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.TpBandwidthSharing; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.TpBandwidthSharingBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.XpdrAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.XpdrAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfaces; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfacesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If100GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If100GEODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If10GEODU2e; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.IfOCHOTU4ODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.SupportedIfCapability; +import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev181130.SwitchingPoolTypes; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPoint; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPointBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class OpenRoadmOtnTopology { + + private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmOtnTopology.class); + + private OpenRoadmOtnTopology() { + } + + public static TopologyShard createTopologyShard(Nodes mappingNode) { + List nodes = new ArrayList<>(); + List links = new ArrayList<>(); + Map xpdrMap = convertPortMappingToOtnNodeList(mappingNode); + for (OtnTopoNode node : xpdrMap.values()) { + switch (node.getNodeType()) { + case Tpdr: + nodes.add(createTpdr(node)); + break; + case Mpdr: + nodes.add(createMuxpdr(node)); + break; + case Switch: + nodes.add(createSwitch(node)); + break; + default: + LOG.error("unknown otn node type {}", node.getNodeType().getName()); + return null; + } + } + return new TopologyShard(nodes, links); + } + + private static Map convertPortMappingToOtnNodeList(Nodes mappingNode) { + List networkMappings = mappingNode.getMapping().stream().filter(k -> k.getLogicalConnectionPoint() + .contains("NETWORK")).collect(Collectors.toList()); + Map xpdrMap = new HashMap<>(); + for (Mapping mapping : networkMappings) { + Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); + if (!xpdrMap.containsKey(xpdrNb)) { + List xpdrNetMaps = mappingNode.getMapping().stream().filter(k -> k.getLogicalConnectionPoint() + .contains("XPDR" + xpdrNb + "-NETWORK")).collect(Collectors.toList()); + List xpdrClMaps = mappingNode.getMapping().stream().filter(k -> k.getLogicalConnectionPoint() + .contains("XPDR" + xpdrNb + "-CLIENT")).collect(Collectors.toList()); + OtnTopoNode otnNode = null; + if (mapping.getXponderType() != null) { + otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + } else { + otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + } + xpdrMap.put(xpdrNb, otnNode); + } + } + LOG.debug("there are {} xpdr to build", xpdrMap.size()); + xpdrMap.forEach((k, v) -> LOG.debug("xpdr {} = {} - {} - {} - {}", k, v.getNodeId(), v.getNodeType(), + v.getNbTpClient(), v.getNbTpNetwork())); + return xpdrMap; + } + + private static Map fillConnectionMapLcp(List mappingList) { + Map xpdrConnectionMap = new HashMap<>(); + for (Mapping map : mappingList) { + if (map.getConnectionMapLcp() != null) { + xpdrConnectionMap.put(map.getLogicalConnectionPoint(), map.getConnectionMapLcp()); + } else { + xpdrConnectionMap.put(map.getLogicalConnectionPoint(), null); + } + } + return xpdrConnectionMap; + } + + private static Node createTpdr(OtnTopoNode node) { + //create otn-topology node augmentation + XpdrAttributes xpdrAttr = new XpdrAttributesBuilder() + .setXpdrNumber(Integer.valueOf(node.getXpdrNb())) + .build(); + Node1 otnNodeAug = new Node1Builder() + .setXpdrAttributes(xpdrAttr) + .build(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNodeAug = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() + .setNodeType(OpenroadmNodeType.TPDR).build(); + //create ietf node augmentation to add TP list + List tpList = new ArrayList<>(); + // creation of tps + createTP(tpList, node, OpenroadmTpType.XPONDERCLIENT, If100GE.class, false); + createTP(tpList, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() + .setTerminationPoint(tpList) + .build(); + + //return ietfNode + return new NodeBuilder() + .setNodeId(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb())) + .withKey(new NodeKey(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb()))) + .setSupportingNode(createSupportingNodes(node)) + .addAugmentation(Node1.class, otnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, + ocnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class, ietfNodeAug) + .build(); + } + + private static Node createMuxpdr(OtnTopoNode node) { + //create otn-topology node augmentation + TpBandwidthSharing tpBwSh = new TpBandwidthSharingBuilder().build(); // to be completed + XpdrAttributes xpdrAttr = new XpdrAttributesBuilder() + .setXpdrNumber(Integer.valueOf(node.getXpdrNb())) + .build(); + + List nblList = new ArrayList<>(); + for (int i = 1; i <= node.getNbTpClient(); i++) { + List tpList = new ArrayList<>(); + TpId tpId = new TpId("XPDR" + node.getXpdrNb() + "-CLIENT" + i); + tpList.add(tpId); + tpId = new TpId("XPDR" + node.getXpdrNb() + "-NETWORK1"); + tpList.add(tpId); + NonBlockingList nbl = new NonBlockingListBuilder() + .setNblNumber(i) + .setTpList(tpList) + .setAvailableInterconnectBandwidth(Long.valueOf(node.getNbTpNetwork() * 10)) + .setInterconnectBandwidthUnit(Long.valueOf(1000000000)) + .build(); + nblList.add(nbl); + } + OduSwitchingPools oduSwitchPool = new OduSwitchingPoolsBuilder() + .setSwitchingPoolNumber(Integer.valueOf(1)) + .setSwitchingPoolType(SwitchingPoolTypes.NonBlocking) + .setNonBlockingList(nblList) + .build(); + List oduSwitchPoolList = new ArrayList<>(); + oduSwitchPoolList.add(oduSwitchPool); + SwitchingPools switchingPools = new SwitchingPoolsBuilder() + .setOduSwitchingPools(oduSwitchPoolList) + .build(); + Node1 otnNodeAug = new Node1Builder() + .setTpBandwidthSharing(tpBwSh) + .setXpdrAttributes(xpdrAttr) + .setSwitchingPools(switchingPools) + .build(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNodeAug = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() + .setNodeType(OpenroadmNodeType.MUXPDR).build(); + + //create ietf node augmentation to add TP list + List tpList = new ArrayList<>(); + // creation of tps + createTP(tpList, node, OpenroadmTpType.XPONDERCLIENT, If10GEODU2e.class, true); + createTP(tpList, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() + .setTerminationPoint(tpList) + .build(); + + //return ietfNode + return new NodeBuilder() + .setNodeId(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb())) + .withKey(new NodeKey(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb()))) + .setSupportingNode(createSupportingNodes(node)) + .addAugmentation(Node1.class, otnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, + ocnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class, ietfNodeAug) + .build(); + } + + private static Node createSwitch(OtnTopoNode node) { + List tpl = new ArrayList<>(); + TpId tpId = null; + for (int i = 1; i <= node.getNbTpClient(); i++) { + tpId = new TpId("XPDR" + node.getXpdrNb() + "-CLIENT" + i); + tpl.add(tpId); + } + for (int i = 1; i <= node.getNbTpNetwork(); i++) { + tpId = new TpId("XPDR" + node.getXpdrNb() + "-NETWORK" + i); + tpl.add(tpId); + } + List nblList = new ArrayList<>(); + NonBlockingList nbl = new NonBlockingListBuilder() + .setNblNumber(Integer.valueOf(1)) + .setTpList(tpl) + .build(); + nblList.add(nbl); + + OduSwitchingPools oduSwitchPool = new OduSwitchingPoolsBuilder() + .setSwitchingPoolNumber(Integer.valueOf(1)) + .setSwitchingPoolType(SwitchingPoolTypes.NonBlocking) + .setNonBlockingList(nblList) + .build(); + List oduSwitchPoolList = new ArrayList<>(); + oduSwitchPoolList.add(oduSwitchPool); + SwitchingPools switchingPools = new SwitchingPoolsBuilder() + .setOduSwitchingPools(oduSwitchPoolList) + .build(); + + //create otn-topology node augmentation + TpBandwidthSharing tpBwSh = new TpBandwidthSharingBuilder().build(); // to be completed + XpdrAttributes xpdrAttr = new XpdrAttributesBuilder() + .setXpdrNumber(Integer.valueOf(node.getXpdrNb())) + .build(); + + Node1 otnNodeAug = new Node1Builder() + .setTpBandwidthSharing(tpBwSh) + .setXpdrAttributes(xpdrAttr) + .setSwitchingPools(switchingPools) + .build(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNodeAug = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() + .setNodeType(OpenroadmNodeType.SWITCH).build(); + + //create ietf node augmentation to add TP list + List tpList = new ArrayList<>(); + // creation of tps + createTP(tpList, node, OpenroadmTpType.XPONDERCLIENT, If100GEODU4.class, true); + createTP(tpList, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() + .setTerminationPoint(tpList) + .build(); + + //return ietfNode + return new NodeBuilder() + .setNodeId(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb())) + .withKey(new NodeKey(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb()))) + .setSupportingNode(createSupportingNodes(node)) + .addAugmentation(Node1.class, otnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, + ocnNodeAug) + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class, ietfNodeAug) + .build(); + } + + private static void createTP(List tpList, OtnTopoNode node, OpenroadmTpType tpType, + Class ifCapType, boolean withRate) { + long nbTps = 0; + if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { + nbTps = node.getNbTpClient(); + } else if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { + nbTps = node.getNbTpNetwork(); + } else { + LOG.warn("Wrong tp-type {}, cannot create tp {}", tpType.getName()); + } + + for (int i = 1; i <= nbTps; i++) { + //openroadm-otn-topoology augmentation + SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder() + .setIfCapType(ifCapType) + .build(); + List supIfCapaList = new ArrayList<>(); + supIfCapaList.add(supIfCapa); + TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() + .setSupportedInterfaceCapability(supIfCapaList) + .build(); + + XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(); + if (withRate) { + xtpcaBldr.setRate(fixRate(ifCapType)); + } + TerminationPoint1 otnTp1 = new TerminationPoint1Builder() + .setTpSupportedInterfaces(tpSupIf) + .setXpdrTpPortConnectionAttributes(xtpcaBldr.build()) + .build(); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder tpceTp1Bldr = + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder(); + if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { + TpId tpId = new TpId("XPDR" + node.getXpdrNb() + "-NETWORK" + i); + if (node.getXpdrNetConnectionMap().get(tpId.getValue()) != null) { + tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrNetConnectionMap().get(tpId.getValue())); + } + SupportingTerminationPoint stp = new SupportingTerminationPointBuilder() + .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)) + .setNodeRef(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb())) + .setTpRef("XPDR" + node.getXpdrNb() + "-NETWORK" + i) + .build(); + List supportTpList = new ArrayList<>(); + supportTpList.add(stp); + tpList.add(buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, supportTpList)); + } else if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { + TpId tpId = new TpId("XPDR" + node.getXpdrNb() + "-CLIENT" + i); + if (node.getXpdrCliConnectionMap().get(tpId.getValue()) != null) { + tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrCliConnectionMap().get(tpId.getValue())); + } + tpList.add(buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null)); + } + } + } + + private static Class fixRate(Class ifCapaType) { + switch (ifCapaType.getSimpleName()) { + case "If100GEODU4": + case "IfOCHOTU4ODU4": + return ODU4.class; + case "If1GEODU0": + return ODU0.class; + case "If10GEODU2e": + return ODU2e.class; + default: + return null; + } + } + + private static List createSupportingNodes(OtnTopoNode node) { + SupportingNode suppNode1 = new SupportingNodeBuilder() + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .setNodeRef(new NodeId(node.getNodeId())) + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), + new NodeId(node.getNodeId()))) + .build(); + SupportingNode suppNode2 = new SupportingNodeBuilder() + .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)) + .setNodeRef(new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb())) + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID), + new NodeId(node.getNodeId() + "-XPDR" + node.getXpdrNb()))) + .build(); + SupportingNode suppNode3 = new SupportingNodeBuilder() + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .setNodeRef(new NodeId(node.getClli())) + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), + new NodeId(node.getClli()))) + .build(); + List suppNodeList = new ArrayList<>(); + suppNodeList.add(suppNode1); + suppNodeList.add(suppNode2); + suppNodeList.add(suppNode3); + return suppNodeList; + } + + private static TerminationPoint buildIetfTp(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1Builder tpceTp1Bldr, TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId, + List supportTpList) { + + TerminationPointBuilder ietfTpBldr = new TerminationPointBuilder(); + if (tpceTp1Bldr.getAssociatedConnectionMapPort() != null) { + ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1.class, tpceTp1Bldr.build()); + } + if (supportTpList != null) { + ietfTpBldr.setSupportingTerminationPoint(supportTpList); + } + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1 ocnTp = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1Builder().setTpType(tpType).build(); + + ietfTpBldr.setTpId(tpId) + .withKey(new TerminationPointKey(tpId)) + .addAugmentation(TerminationPoint1.class, otnTp1) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1.class, ocnTp); + return ietfTpBldr.build(); + } +} diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology22.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology22.java deleted file mode 100644 index 95017daff..000000000 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology22.java +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright © 2016 AT&T and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.transportpce.networkmodel.util; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.transportpce.common.NetworkUtils; -import org.opendaylight.transportpce.common.Timeouts; -import org.opendaylight.transportpce.common.device.DeviceTransactionManager; -import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.Mapping; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Xponder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.xponder.XpdrPort; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPools; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU0; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU2e; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.ODU4; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.TerminationPoint1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.SwitchingPoolsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev181130.SwitchingPoolTypes; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class OpenRoadmOtnTopology22 { - - private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology22.class); - - private NetworkTransactionService networkTransactionService; - private final DeviceTransactionManager deviceTransactionManager; - - public OpenRoadmOtnTopology22(NetworkTransactionService networkTransactionService, - DeviceTransactionManager deviceTransactionManager) { - this.networkTransactionService = networkTransactionService; - this.deviceTransactionManager = deviceTransactionManager; - } - - /** - * This public method creates the OTN OpenROADM Topology - * Layer and posts it to the controller. - */ - public void createTopoLayer() { - try { - Network openRoadmOtnTopology = createOpenRoadmOtnTopology(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))); - - this.networkTransactionService.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmOtnTopology); - this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); - LOG.info("OpenRoadm-OTN-Topology created successfully."); - } catch (ExecutionException | TimeoutException | InterruptedException e) { - LOG.warn("Failed to create OpenRoadm-OTN-Topology", e); - } - } - - /** - * Create empty OpenROADM topology. - */ - private Network createOpenRoadmOtnTopology() { - NetworkId nwId = new NetworkId(NetworkUtils.OTN_NETWORK_ID); - NetworkTypes1Builder topoNetworkTypesBldr = new NetworkTypes1Builder() - .setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build()); - NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder() - .addAugmentation(NetworkTypes1.class, topoNetworkTypesBldr.build()); - // Array to store nodes in the topolayer of a roadm/Xponder - Network1Builder nwBldr1 = new Network1Builder() - // adding expressLinks - .setLink(Collections.emptyList()); - NetworkBuilder nwBuilder = new NetworkBuilder() - .setNetworkId(nwId) - .withKey(new NetworkKey(nwId)) - .setNetworkTypes(nwTypeBuilder.build()) - .addAugmentation(Network1.class, nwBldr1.build()) - .setNode(Collections.emptyList()); - return nwBuilder.build(); - } - - public TopologyShard createTopologyShard(Nodes mappingNode) { - List nodes = new ArrayList<>(); - - LOG.info("Topology create request received for Node {}",mappingNode.getNodeId()); - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class); - // .child(Xponder.class,new XponderKey(2)); - Optional deviceOptional = deviceTransactionManager - .getDataFromDevice(mappingNode.getNodeId(),LogicalDatastoreType.OPERATIONAL, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - OrgOpenroadmDevice device; - List xponders; - if (deviceOptional.isPresent()) { - device = deviceOptional.get(); - xponders = device.getXponder(); - } else { - LOG.error("Unable to get xponder for the device {}", mappingNode.getNodeId()); - return null; - } - LOG.info("Xponder subtree is found and now calling create XPDR"); - if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { - // Check if node is XPONDER - LOG.info("creating xpdr node in openroadmotntopology for node {}", mappingNode.getNodeId()); - if (xponders != null) { - for (Xponder xponder: xponders) { - LOG.info("Calling create XPDR for xponder number {}",xponder.getXpdrNumber()); - NodeBuilder ietfNode = createXpdr(xponder,mappingNode); - nodes.add(ietfNode.build()); - } - } - LOG.info("Coming to return topology"); - return new TopologyShard(nodes, null); - } - LOG.error("Device node Type not managed yet"); - return null; - } - - private NodeBuilder createXpdr(Xponder xponder,Nodes mappingNode) { - // set node-id - String nodeIdtopo = new StringBuilder().append(mappingNode.getNodeId()).append("-XPDR" + xponder - .getXpdrNumber()).toString(); - LOG.info("Node is {}",nodeIdtopo); - - // Create ietf node setting supporting-node data - NodeBuilder ietfNodeBldr = createOtnTopoLayerNode(mappingNode.getNodeId()) - .setNodeId(new NodeId(nodeIdtopo)) - .withKey((new NodeKey(new NodeId(nodeIdtopo)))); - // Create openroadm-network-topo augmentation to set node type to Xponder - Node1Builder ontNode1Bldr = new Node1Builder() - .setNodeType(OpenroadmNodeType.XPONDER); - if (xponder.getXpdrType().equals(XpdrNodeTypes.Switch)) { - LOG.info("Xponder type is OTN switch and it is calling switching pool"); - SwitchingPoolsBuilder switchingPoolsBuilder = new SwitchingPoolsBuilder() - .setOduSwitchingPools(getSwitchingPools(mappingNode.getNodeId(), mappingNode)); - ontNode1Bldr.setSwitchingPools(switchingPoolsBuilder.build()); - LOG.info("Switching pool object is created {}", - switchingPoolsBuilder.build().getOduSwitchingPools().size()); - } - ietfNodeBldr.addAugmentation(Node1.class, ontNode1Bldr.build()); - - // Create tp-list - LOG.info("Now createing TP list"); - List tpList = new ArrayList<>(); - TerminationPointBuilder ietfTpBldr; - - for (XpdrPort xponderPort: xponder.getXpdrPort()) { - Mapping ma = mappingNode.getMapping().stream().filter(x -> x.getSupportingCircuitPackName() - .equals(xponderPort.getCircuitPackName()) && x.getSupportingPort() - .equals(xponderPort.getPortName())).collect(Collectors.toList()).get(0); - ietfTpBldr = createTpBldr(ma.getLogicalConnectionPoint()); - TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); - if (ma.getPortQual().equals("xpdr-network") || ma.getPortQual().equals("switch-network")) { - ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - XpdrTpPortConnectionAttributesBuilder xpdrTpBuilder = new XpdrTpPortConnectionAttributesBuilder(); - if (ma.getPortQual().equals("switch-network") && ma.getRate() != null) { - if (ma.getRate().equals("10G")) { - xpdrTpBuilder.setRate(ODU2e.class); - } - else if (ma.getRate().equals("1G")) { - xpdrTpBuilder.setRate(ODU0.class); - } - else if (ma.getRate().equals("100G")) { - xpdrTpBuilder.setRate(ODU4.class); - List tpSlots = new ArrayList(); - IntStream.range(1, 81).forEach(nbr -> tpSlots.add(nbr)); - xpdrTpBuilder.setTsPool(tpSlots); - } - } else { - LOG.warn("no rate in portmapping for lcp {} of {}", ma.getLogicalConnectionPoint(), - mappingNode.getNodeId()); - } - xpdrTpBuilder.setTailEquipmentId(ma.getConnectionMapLcp()); - ontTp1Bldr.setXpdrTpPortConnectionAttributes(xpdrTpBuilder.build()); - ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); - tpList.add(ietfTpBldr.build()); - } else if (ma.getPortQual().equals("xpdr-client") || ma.getPortQual().equals("switch-client")) { - ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); - XpdrTpPortConnectionAttributesBuilder xpdrTpBuilder = new XpdrTpPortConnectionAttributesBuilder(); - if (ma.getPortQual().equals("switch-client") && ma.getRate() != null) { - if (ma.getRate().equals("10G")) { - xpdrTpBuilder.setRate(ODU2e.class); - } - else if (ma.getRate().equals("1G")) { - xpdrTpBuilder.setRate(ODU0.class); - } - else if (ma.getRate().equals("100G")) { - xpdrTpBuilder.setRate(ODU4.class); - } - } else { - LOG.warn("no rate in portmapping for lcp {} of {}", ma.getLogicalConnectionPoint(), - mappingNode.getNodeId()); - } - xpdrTpBuilder.setTailEquipmentId(ma.getConnectionMapLcp()); - ontTp1Bldr.setXpdrTpPortConnectionAttributes(xpdrTpBuilder.build()); - ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); - tpList.add(ietfTpBldr.build()); - } - } - for (int i = 0;i < tpList.size();i++) { - LOG.info("Tps are {},{}",tpList.get(i).getTpId()); - } - // Create ietf node augmentation to support ietf tp-list - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder tpNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder(); - tpNode1.setTerminationPoint(tpList); - ietfNodeBldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - tpNode1.build()); - - /**Node1Builder ietfNode1 = new Node1Builder(); - ietfNodeBldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - ietfNode1.build());**/ - LOG.info("Now all TPS and network node is ready and calling return"); - return ietfNodeBldr; - } - - private NodeBuilder createOtnTopoLayerNode(String nodeId) { - // Sets the value of Network-ref and Node-ref as a part of the supporting node - // attribute - LOG.info("Settting up supporting node and interface"); - SupportingNodeBuilder supportbldr = new SupportingNodeBuilder() - .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId))) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .setNodeRef(new NodeId(nodeId)); - ArrayList supportlist = new ArrayList<>(); - supportlist.add(supportbldr.build()); - NodeBuilder nodebldr = new NodeBuilder() - .setSupportingNode(supportlist); - LOG.info("Returning node builder"); - return nodebldr; - } - - // This method returns a generic termination point builder for a given tpid - private TerminationPointBuilder createTpBldr(String tpId) { - return new TerminationPointBuilder() - .withKey(new TerminationPointKey(new TpId(tpId))) - .setTpId(new TpId(tpId)); - } - - private LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) { - //create source link - SourceBuilder ietfSrcLinkBldr = new SourceBuilder() - .setSourceNode(new NodeId(srcNode)) - .setSourceTp(srcTp); - //create destination link - DestinationBuilder ietfDestLinkBldr = new DestinationBuilder() - .setDestNode(new NodeId(destNode)) - .setDestTp(destTp); - - LinkBuilder ietfLinkBldr = new LinkBuilder() - .setSource(ietfSrcLinkBldr.build()) - .setDestination(ietfDestLinkBldr.build()) - .setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp)); - return ietfLinkBldr.withKey(new LinkKey(ietfLinkBldr.getLinkId())); - } - - private List getSwitchingPools(String nodeId,Nodes mappingNode) { - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class); - // .child(Xponder.class,new XponderKey(2)); - Optional deviceOptional = deviceTransactionManager.getDataFromDevice(nodeId, - LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); - OrgOpenroadmDevice device; - List oduSwitchingPools = new ArrayList<>(); - if (deviceOptional.isPresent()) { - device = deviceOptional.get(); - for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org - .openroadm.device.OduSwitchingPools odupool:device.getOduSwitchingPools()) { - OduSwitchingPoolsBuilder oduSwitchingPoolsBuilder = new OduSwitchingPoolsBuilder(); - List nonBlockingLists = new ArrayList<>(); - for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org - .openroadm.device.odu.switching.pools.NonBlockingList nbList: odupool.getNonBlockingList()) { - NonBlockingListBuilder nonBlockingListBuilder = new NonBlockingListBuilder() - .setNblNumber(nbList.getNblNumber()) - .setAvailableInterconnectBandwidth(nbList.getInterconnectBandwidth()) - .setInterconnectBandwidthUnit(nbList.getInterconnectBandwidth()); - List tpList = new ArrayList<>(); - if (nbList.getPortList() != null) { - for (PortList portList:nbList.getPortList()) { - LOG.info("Inside switching pool now collecting ports {},{},{}", portList.getPortName(), - portList.getCircuitPackName(), nbList.getNblNumber()); - Mapping mapping = mappingNode.getMapping().stream() - .filter(x -> x.getSupportingCircuitPackName().equals(portList.getCircuitPackName()) - && x.getSupportingPort().equals(portList.getPortName())) - .collect(Collectors.toList()).get(0); - LOG.info("Mapping TP is coming is {}",mapping); - tpList.add(new TpId(mapping.getLogicalConnectionPoint())); - } - nonBlockingListBuilder.setTpList(tpList); - nonBlockingLists.add(nonBlockingListBuilder.build()); - } else { - LOG.warn("no portList for non-blocking-list {} of {}", nbList.getNblNumber(), nodeId); - } - } - oduSwitchingPoolsBuilder.setNonBlockingList(nonBlockingLists) - .setSwitchingPoolNumber(odupool.getSwitchingPoolNumber()) - .setSwitchingPoolType(SwitchingPoolTypes.forValue(odupool.getSwitchingPoolType().getIntValue())); - oduSwitchingPools.add(oduSwitchingPoolsBuilder.build()); - } - return oduSwitchingPools; - } else { - LOG.error("Unable to get xponder for the device {}", nodeId); - return null; - } - } - - // This method returns the linkBuilder object for given source and destination - public static boolean deleteLink(String srcNode, String dstNode, String srcTp, String destTp, - NetworkTransactionService networkTransactionService) { - LOG.info("deleting link for {}-{}", srcNode, dstNode); - LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp); - if (deleteLinkLinkId(linkId, networkTransactionService)) { - LOG.debug("Link Id {} updated to have admin state down"); - return true; - } else { - LOG.debug("Link Id not found for Source {} and Dest {}", srcNode, dstNode); - return false; - } - } - - // This method returns the linkBuilder object for given source and destination - public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) { - LOG.info("deleting link for LinkId: {}", linkId); - try { - InstanceIdentifierBuilder linkIID = InstanceIdentifier.builder(Networks.class).child(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))).augmentation(Network1.class) - .child(Link.class, new LinkKey(linkId)); - java.util.Optional link = - networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,linkIID.build()).get(); - if (link.isPresent()) { - Link1Builder link1Builder = new Link1Builder().setAdministrativeState(State.OutOfService); - LinkBuilder linkBuilder = new LinkBuilder(link.get()) - .removeAugmentation(Link1.class) - .addAugmentation(Link1.class,link1Builder.build()); - networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(), - linkBuilder.build()); - networkTransactionService.commit().get(1, TimeUnit.SECONDS); - return true; - } else { - LOG.error("No link found for given LinkId: {}", linkId); - return false; - } - } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOG.error(e.getMessage(), e); - return false; - } - } -} diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java similarity index 59% rename from networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java rename to networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java index f0ca0bd1b..621125fb9 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java @@ -9,7 +9,6 @@ package org.opendaylight.transportpce.networkmodel.util; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -27,22 +26,18 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengths; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributes; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributes; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrClientAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; @@ -50,9 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; @@ -61,7 +54,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; @@ -76,57 +68,14 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdenti import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class OpenRoadmTopology22 { +public final class OpenRoadmTopology { - private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology22.class); + private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology.class); - private NetworkTransactionService networkTransactionService; - - public OpenRoadmTopology22(NetworkTransactionService networkTransactionService) { - this.networkTransactionService = networkTransactionService; + private OpenRoadmTopology() { } - /** - * This public method creates the OpenROADM Topology - * Layer and posts it to the controller. - */ - public void createTopoLayer() { - try { - Network openRoadmTopology = createOpenRoadmTopology(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, - new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); - - this.networkTransactionService.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmTopology); - this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); - LOG.info("OpenRoadm-Topology created successfully."); - } catch (ExecutionException | TimeoutException | InterruptedException e) { - LOG.warn("Failed to create OpenRoadm-Topology", e); - } - } - - /** - * Create empty OpenROADM topology. - */ - private Network createOpenRoadmTopology() { - NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID); - NetworkTypes1Builder topoNetworkTypesBldr = new NetworkTypes1Builder() - .setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build()); - NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder() - .addAugmentation(NetworkTypes1.class, topoNetworkTypesBldr.build()); - // Array to store nodes in the topolayer of a roadm/Xponder - Network1Builder nwBldr1 = new Network1Builder() - .setLink(Collections.emptyList()); - NetworkBuilder nwBuilder = new NetworkBuilder() - .setNetworkId(nwId) - .withKey(new NetworkKey(nwId)) - .setNetworkTypes(nwTypeBuilder.build()) - // adding expressLinks - .addAugmentation(Network1.class, nwBldr1.build()) - .setNode(Collections.emptyList()); - return nwBuilder.build(); - } - - public TopologyShard createTopologyShard(Nodes mappingNode) { + public static TopologyShard createTopologyShard(Nodes mappingNode) { int numOfDegrees; int numOfSrgs; List nodes = new ArrayList<>(); @@ -162,12 +111,14 @@ public class OpenRoadmTopology22 { } // create degree nodes for (String k : mapDeg.keySet()) { - NodeBuilder ietfNode = createDegree(k, mapDeg.get(k), mappingNode.getNodeId()); + NodeBuilder ietfNode = createDegree(k, mapDeg.get(k), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli()); nodes.add(ietfNode.build()); } // create srg nodes for (String k : mapSrg.keySet()) { - NodeBuilder ietfNode = createSrg(k, mapSrg.get(k), mappingNode.getNodeId()); + NodeBuilder ietfNode = createSrg(k, mapSrg.get(k), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli()); nodes.add(ietfNode.build()); } @@ -179,89 +130,124 @@ public class OpenRoadmTopology22 { LOG.info("created nodes/links: {}/{}", nodes.size(), links.size()); return new TopologyShard(nodes, links); } else if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { - // Check if node is XPONDER - LOG.info("creating xpdr node in openroadmtopology for node {}", mappingNode.getNodeId()); - NodeBuilder ietfNode = createXpdr(mappingNode); - nodes.add(ietfNode.build()); - return new TopologyShard(nodes, links); + // Check if node is Xpdr is a Transponder + List networkMappings = mappingNode.getMapping().stream().filter(k -> k.getLogicalConnectionPoint() + .contains("NETWORK")).collect(Collectors.toList()); + List tpdrList = new ArrayList<>(); + for (Mapping mapping : networkMappings) { + List extractedMappings = null; + Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); + if (!tpdrList.contains(xpdrNb)) { + tpdrList.add(xpdrNb); + extractedMappings = mappingNode.getMapping().stream().filter(lcp -> lcp + .getLogicalConnectionPoint().contains("XPDR" + xpdrNb)).collect(Collectors.toList()); + NodeBuilder ietfNode; + if (mapping.getXponderType() == null + || XpdrNodeTypes.Tpdr.getIntValue() == mapping.getXponderType().getIntValue()) { + LOG.info("creating xpdr node {} of type Tpdr in openroadm-topology", + mappingNode.getNodeId() + "-XPDR" + xpdrNb); + ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + extractedMappings, false); + nodes.add(ietfNode.build()); + } else if (XpdrNodeTypes.Mpdr.getIntValue() == mapping.getXponderType().getIntValue() + || XpdrNodeTypes.Switch.getIntValue() == mapping.getXponderType().getIntValue()) { + LOG.info("creating xpdr node {} of type {} in openroadm-topology", + mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName()); + ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, + extractedMappings, true); + nodes.add(ietfNode.build()); + } + } + } + if (nodes.isEmpty()) { + return null; + } else { + return new TopologyShard(nodes, links); + } } LOG.error("Device node Type not managed yet"); return null; } - private NodeBuilder createXpdr(Nodes mappingNode) { - // set node-id - String nodeIdtopo = new StringBuilder().append(mappingNode.getNodeId()).append("-XPDR1").toString(); + private static NodeBuilder createXpdr(String nodeId, String clli, Integer xpdrNb, List mappings, + boolean isOtn) { // Create openroadm-network-topo augmentation to set node type to Xponder - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .Node1Builder ocnNode1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .Node1Builder().setNodeType(OpenroadmNodeType.XPONDER); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNode1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() + .setNodeType(OpenroadmNodeType.XPONDER).build(); // Create ietf node setting supporting-node data - NodeBuilder ietfNodeBldr = createTopoLayerNode(mappingNode.getNodeId()) - .setNodeId(new NodeId(nodeIdtopo)) - .withKey((new NodeKey(new NodeId(nodeIdtopo)))) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .Node1.class, ocnNode1Bldr.build()); + NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli); + // set node-id + String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR").append(xpdrNb).toString(); + ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo)) + .withKey((new NodeKey(new NodeId(nodeIdtopo)))) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .Node1.class, ocnNode1); // Create tp-list List tpList = new ArrayList<>(); TerminationPointBuilder ietfTpBldr; - for (Mapping m : mappingNode.getMapping()) { - ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); - // Add openroadm-network-topology tp augmentations - TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common - .network.rev181130.TerminationPoint1Builder(); - if (m.getPortQual().equals("xpdr-network")) { - XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder() - .setTailEquipmentId(m.getConnectionMapLcp()); - ontTp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build()); - ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder tpceTp1Bldr = - new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder() - .setAssociatedConnectionMapPort(m.getConnectionMapLcp()); - ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, ocnTp1Bldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 - .TerminationPoint1.class, tpceTp1Bldr.build()); - tpList.add(ietfTpBldr.build()); - } else if (m.getPortQual().equals("xpdr-client")) { - XpdrClientAttributesBuilder xpdrNwAttrBldr = new XpdrClientAttributesBuilder() - .setTailEquipmentId(m.getConnectionMapLcp()); - ontTp1Bldr.setXpdrClientAttributes(xpdrNwAttrBldr.build()); - ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); - org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder tpceTp1Bldr = - new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1Builder() - .setAssociatedConnectionMapPort(m.getConnectionMapLcp()); - ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .TerminationPoint1.class, ocnTp1Bldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 - .TerminationPoint1.class, tpceTp1Bldr.build()); - tpList.add(ietfTpBldr.build()); + for (Mapping m : mappings) { + if (!isOtn) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-network-topology tp augmentations + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm + .common.network.rev181130.TerminationPoint1Builder(); + if (m.getPortQual().equals("xpdr-network")) { + ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1 tpceTp1 = + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1Builder().setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); + ietfTpBldr + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network + .rev181130.TerminationPoint1.class, ocnTp1Bldr.build()) + .addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1.class, tpceTp1); + tpList.add(ietfTpBldr.build()); + } else if (m.getPortQual().equals("xpdr-client")) { + ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1 tpceTp1 = + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1Builder().setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); + ietfTpBldr + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1.class, ocnTp1Bldr.build()) + .addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1.class, tpceTp1); + tpList.add(ietfTpBldr.build()); + } + } else { + if (m.getPortQual().equals("xpdr-network") || m.getPortQual().equals("switch-network")) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm + .common.network.rev181130.TerminationPoint1Builder().setTpType(OpenroadmTpType.XPONDERNETWORK); + ietfTpBldr + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network + .rev181130.TerminationPoint1.class, ocnTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); + } } } - // Create ietf node augmentation to support ietf tp-list org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() - .setTerminationPoint(tpList); + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder() + .setTerminationPoint(tpList); ietfNodeBldr.addAugmentation( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, ietfNode1.build()); return ietfNodeBldr; } - private NodeBuilder createDegree(String degNb, List degListMap, String nodeId) { + private static NodeBuilder createDegree(String degNb, List degListMap, String nodeId, String clli) { // Create tp-list List tpList = new ArrayList<>(); TerminationPointBuilder ietfTpBldr; for (Mapping m : degListMap) { ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); - // Add openroadm-network-topology tp augmentations + // Add openroadm-common-network tp type augmentations org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common .network.rev181130.TerminationPoint1Builder(); @@ -283,52 +269,48 @@ public class OpenRoadmTopology22 { tpList.add(ietfTpBldr.build()); } // Add CTP to tp-list - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder ocnTp1Bldr = + ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX"); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder() - .setTpType(OpenroadmTpType.DEGREETXRXCTP); - ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX").addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm - .common.network.rev181130.TerminationPoint1.class, ocnTp1Bldr.build()); + .setTpType(OpenroadmTpType.DEGREETXRXCTP).build(); + ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1.class, ocnTp1); tpList.add(ietfTpBldr.build()); - + // set degree-attributes + DegreeAttributes degAtt = new DegreeAttributesBuilder() + .setDegreeNumber(Integer.valueOf(degNb.split("DEG")[1])) + .setAvailableWavelengths(create96AvalWaveDegree()).build(); // Create ietf node augmentation to support ietf tp-list org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() - .setTerminationPoint(tpList); - + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder() + .setTerminationPoint(tpList); // set node-id String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString(); - // set degree-attributes - DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder() - .setDegreeNumber(new Integer(degNb.split("DEG")[1])) - .setAvailableWavelengths(create96AvalWaveDegree()); - // Create openroadm-network-topo augmentation to set node type to DEGREE - Node1Builder ontNode1Bldr = new Node1Builder() - .setDegreeAttributes(degAttBldr.build()); - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder ocnNode1Bldr = + Node1 ontNode1 = new Node1Builder().setDegreeAttributes(degAtt).build(); + // Create openroadm-common-network augmentation to set node type to DEGREE + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNode1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() - .setNodeType(OpenroadmNodeType.DEGREE); - + .setNodeType(OpenroadmNodeType.DEGREE).build(); // Create ietf node setting supporting-node data - NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId) + return createTopoLayerNode(nodeId, clli) .setNodeId(new NodeId(nodeIdtopo)) .withKey((new NodeKey(new NodeId(nodeIdtopo)))) - .addAugmentation(Node1.class, ontNode1Bldr.build()) + .addAugmentation(Node1.class, ontNode1) .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .Node1.class, ocnNode1Bldr.build()) - .addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - ietfNode1.build()); - return ietfNodeBldr; + .Node1.class, ocnNode1) + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1.class, + ietfNode1.build()); } - private NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId) { + private static NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId, String clli) { // Create tp-list List tpList = new ArrayList<>(); TerminationPointBuilder ietfTpBldr; for (Mapping m : srgListMap) { ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); - // Add openroadm-network-topology tp augmentations + // Add openroadm-common-network tp type augmentations org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common .network.rev181130.TerminationPoint1Builder(); @@ -350,81 +332,76 @@ public class OpenRoadmTopology22 { tpList.add(ietfTpBldr.build()); } // Add CP to tp-list - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder ocnTp1Bldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder() - .setTpType(OpenroadmTpType.SRGTXRXCP); - ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX").addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm - .common.network.rev181130.TerminationPoint1.class, ocnTp1Bldr.build()); + ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX"); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network + .rev181130.TerminationPoint1Builder().setTpType(OpenroadmTpType.SRGTXRXCP).build(); + ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1.class, ocnTp1); tpList.add(ietfTpBldr.build()); - + // Create openroadm-common-network augmentation to set node type to SRG + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 ocnNode1 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() + .setNodeType(OpenroadmNodeType.SRG).build(); + // set srg-attributes + SrgAttributes srgAttr = new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()).build(); + Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build(); // Create ietf node augmentation to support ietf tp-list org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() - .setTerminationPoint(tpList); - - // set node-id - String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString(); - // set srg-attributes - SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()); - // Create openroadm-network-topo augmentation to set node type to DEGREE - Node1Builder ontNode1Bldr = new Node1Builder() - .setSrgAttributes(srgAttrBldr.build()); - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder ocnNode1Bldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder() - .setNodeType(OpenroadmNodeType.SRG); - + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder() + .setTerminationPoint(tpList); // Create ietf node setting supporting-node data - NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId) + String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString(); + return createTopoLayerNode(nodeId, clli) .setNodeId(new NodeId(nodeIdtopo)) .withKey((new NodeKey(new NodeId(nodeIdtopo)))) - .addAugmentation(Node1.class, ontNode1Bldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class, - ocnNode1Bldr.build()) - .addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, - ietfNode1.build()); - return ietfNodeBldr; + .addAugmentation(Node1.class, ontNode1) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .Node1.class, ocnNode1) + .addAugmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class, ietfNode1.build()); } - private NodeBuilder createTopoLayerNode(String nodeId) { + private static NodeBuilder createTopoLayerNode(String nodeId, String clli) { // Sets the value of Network-ref and Node-ref as a part of the supporting node // attribute - SupportingNodeBuilder supportbldr = new SupportingNodeBuilder() - .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId))) - .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) - .setNodeRef(new NodeId(nodeId)); + SupportingNodeBuilder support1bldr = new SupportingNodeBuilder() + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId))) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .setNodeRef(new NodeId(nodeId)); + SupportingNodeBuilder support2bldr = new SupportingNodeBuilder() + .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), new NodeId(clli))) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .setNodeRef(new NodeId(clli)); ArrayList supportlist = new ArrayList<>(); - supportlist.add(supportbldr.build()); - NodeBuilder nodebldr = new NodeBuilder().setSupportingNode(supportlist); - return nodebldr; + supportlist.add(support1bldr.build()); + supportlist.add(support2bldr.build()); + return new NodeBuilder().setSupportingNode(supportlist); } // This method returns a generic termination point builder for a given tpid - private TerminationPointBuilder createTpBldr(String tpId) { + private static TerminationPointBuilder createTpBldr(String tpId) { TpId tp = new TpId(tpId); - TerminationPointKey tpKey = new TerminationPointKey(tp); - TerminationPointBuilder tpBldr = new TerminationPointBuilder().withKey(tpKey).setTpId(tp); - return tpBldr; + return new TerminationPointBuilder().withKey(new TerminationPointKey(tp)).setTpId(tp); } - private LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) { + private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) { //create source link SourceBuilder ietfSrcLinkBldr = new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp); //create destination link - DestinationBuilder ietfDestLinkBldr = new DestinationBuilder() - .setDestNode(new NodeId(destNode)) - .setDestTp(destTp); - LinkBuilder ietfLinkBldr = new LinkBuilder() - .setSource(ietfSrcLinkBldr.build()) - .setDestination(ietfDestLinkBldr.build()) - .setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp)); - ietfLinkBldr.withKey(new LinkKey(ietfLinkBldr.getLinkId())); - return ietfLinkBldr; + DestinationBuilder ietfDestLinkBldr = new DestinationBuilder().setDestNode(new NodeId(destNode)) + .setDestTp(destTp); + LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp); + return new LinkBuilder() + .setSource(ietfSrcLinkBldr.build()) + .setDestination(ietfDestLinkBldr.build()) + .setLinkId(linkId) + .withKey(new LinkKey(linkId)); } - private List createNewLinks(List nodes) { + private static List createNewLinks(List nodes) { List links = new ArrayList<>(); String srcNode; String destNode; @@ -448,10 +425,6 @@ public class OpenRoadmTopology22 { .network.rev181130.Node1.class).getNodeType().getIntValue(); int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common .network.rev181130.Node1.class).getNodeType().getIntValue(); - //The previous 2 lines generate warnings. - //Casting (nodes.get(i or j).augmentation(Node1.class)) to - //(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1) - //breaks the portmapping if (srcNodeType == 11 && destNodeType == 11) { ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); } else if (srcNodeType == 11 && destNodeType == 12) { @@ -476,9 +449,7 @@ public class OpenRoadmTopology22 { LinkBuilder ietfAzLinkBldr = createLink(srcNode, destNode, srcTp, destTp); LinkBuilder ietfZaLinkBldr = createLink(destNode, srcNode, destTp, srcTp); ocnAzLinkBldr.setOppositeLink(ietfZaLinkBldr.getLinkId()); - ietfAzLinkBldr.addAugmentation(Link1.class, ocnAzLinkBldr.build()) - .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 - .Link1.class, ocnAzLinkBldr.build()); + ietfAzLinkBldr.addAugmentation(Link1.class, ocnAzLinkBldr.build()); ocnZaLinkBldr.setOppositeLink(ietfAzLinkBldr.getLinkId()); ietfZaLinkBldr.addAugmentation(Link1.class, ocnZaLinkBldr.build()); links.add(ietfAzLinkBldr.build()); @@ -513,12 +484,14 @@ public class OpenRoadmTopology22 { networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,linkIID.build()).get(); if (link.isPresent()) { LinkBuilder linkBuilder = new LinkBuilder(link.get()); - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 - .Link1Builder link1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology - .rev181130.Link1Builder(linkBuilder.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm - .network.topology.rev181130.Link1.class)).setAdministrativeState(State.OutOfService); - linkBuilder.removeAugmentation(Link1.class).addAugmentation(org.opendaylight.yang.gen.v1.http.org - .openroadm.network.topology.rev181130.Link1.class,link1Builder.build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder link1Builder = + new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder( + linkBuilder.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 + .Link1.class)) + .setAdministrativeState(State.OutOfService); + linkBuilder.removeAugmentation(Link1.class) + .addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 + .Link1.class,link1Builder.build()); networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(), linkBuilder.build()); networkTransactionService.commit().get(1, TimeUnit.SECONDS); @@ -535,38 +508,34 @@ public class OpenRoadmTopology22 { } } - private List create96AvalWaveDegree() { + private static List create96AvalWaveDegree() { List waveList = new ArrayList<>(); for (int i = 1; i < 97; i++) { AvailableWavelengthsBuilder avalBldr = new AvailableWavelengthsBuilder() - .setIndex((long) i) - .withKey(new AvailableWavelengthsKey((long) i)); + .setIndex((long) i) + .withKey(new AvailableWavelengthsKey((long) i)); waveList.add(avalBldr.build()); } return waveList; } - private List create96AvalWaveSrg() { List waveList = - new ArrayList<>(); + .AvailableWavelengths> waveList = new ArrayList<>(); for (int i = 1; i < 97; i++) { org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes - .AvailableWavelengthsBuilder avalBldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes - .AvailableWavelengthsBuilder() - .setIndex((long) i) - .withKey( - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes - .AvailableWavelengthsKey((long) i)); + .AvailableWavelengthsBuilder avalBldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.srg + .rev181130.srg.node.attributes.AvailableWavelengthsBuilder() + .setIndex((long) i) + .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes + .AvailableWavelengthsKey((long) i)); waveList.add(avalBldr.build()); } - return waveList; } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TpceNetwork.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TpceNetwork.java new file mode 100644 index 000000000..c6a9ab3f8 --- /dev/null +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TpceNetwork.java @@ -0,0 +1,96 @@ +/* + * Copyright © 2020 ORANGE. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.transportpce.networkmodel.util; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.NetworkTypes1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.NetworkTypes1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.networks.network.network.types.ClliNetworkBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypes; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; +import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TpceNetwork { + + private static final Logger LOG = LoggerFactory.getLogger(TpceNetwork.class); + + private NetworkTransactionService networkTransactionService; + + public TpceNetwork(NetworkTransactionService networkTransactionService) { + this.networkTransactionService = networkTransactionService; + } + + /** + * This public method creates the adequate openroadm layer and posts it to the controller. + * + * @param networkId defines the network layer + */ + public void createLayer(String networkId) { + try { + Network network = createNetwork(networkId); + InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, + new NetworkKey(new NetworkId(networkId))); + networkTransactionService.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network); + this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); + LOG.info("{} network layer created successfully.", networkId); + } catch (ExecutionException | TimeoutException | InterruptedException e) { + LOG.error("Failed to create {} network layer", networkId, e); + } + } + + + /** + * Create empty CLLI network. + */ + private static Network createNetwork(String networkId) { + NetworkTypesBuilder networkTypesBldr = new NetworkTypesBuilder(); + switch (networkId) { + case NetworkUtils.CLLI_NETWORK_ID: + Augmentation ordClli = new NetworkTypes1Builder() + .setClliNetwork(new ClliNetworkBuilder().build()) + .build(); + networkTypesBldr.addAugmentation(NetworkTypes1.class, ordClli); + break; + case NetworkUtils.UNDERLAY_NETWORK_ID: + case NetworkUtils.OVERLAY_NETWORK_ID: + case NetworkUtils.OTN_NETWORK_ID: + Augmentation ordTopology = new org.opendaylight.yang.gen.v1.http.org.openroadm.common + .network.rev181130.NetworkTypes1Builder() + .setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build()) + .build(); + networkTypesBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network + .rev181130.NetworkTypes1.class, ordTopology); + break; + default: + LOG.error("Unknown network type"); + break; + } + return new NetworkBuilder() + .setNetworkId(new NetworkId(networkId)) + .withKey(new NetworkKey(new NetworkId(networkId))) + .setNetworkTypes(networkTypesBldr.build()) + .build(); + } +} diff --git a/networkmodel/src/main/resources/OSGI-INF/blueprint/networkmodel-blueprint.xml b/networkmodel/src/main/resources/OSGI-INF/blueprint/networkmodel-blueprint.xml index de182178d..2d1097941 100644 --- a/networkmodel/src/main/resources/OSGI-INF/blueprint/networkmodel-blueprint.xml +++ b/networkmodel/src/main/resources/OSGI-INF/blueprint/networkmodel-blueprint.xml @@ -13,26 +13,9 @@ - - - - - - - - - - - - - - - - - @@ -43,7 +26,6 @@ - @@ -54,13 +36,11 @@ - - diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java index de9f0e724..e6b9e3a4c 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java @@ -10,7 +10,7 @@ package org.opendaylight.transportpce.pce.networkanalyzer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; - +import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; @@ -18,6 +18,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attri import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.Span; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; import org.slf4j.Logger; @@ -92,8 +93,13 @@ public final class MapUtils { } public static String getSupNode(Node node) { - // TODO: supporting IDs exist as a List. this code takes just the first element - return node.getSupportingNode().get(0).getNodeRef().getValue(); + List supNodes = node.getSupportingNode(); + for (SupportingNode snode : supNodes) { + if (NetworkUtils.UNDERLAY_NETWORK_ID.equals(snode.getNetworkRef().getValue())) { + return snode.getNodeRef().getValue(); + } + } + return null; } public static OpenroadmLinkType calcType(Link link) { diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java index c06654416..c869f1675 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java @@ -208,14 +208,17 @@ public class PceNode { .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 .TerminationPoint1.class); if (cntp1.getTpType() == OpenroadmTpType.XPONDERNETWORK) { - if (nttp1.getXpdrNetworkAttributes().getWavelength() != null) { + if (nttp1 != null && nttp1.getXpdrNetworkAttributes().getWavelength() != null) { this.usedXpndrNWTps.add(tp.getTpId().getValue()); - LOG.debug("initXndrTps: XPONDER tp = {} is used", tp.getTpId().getValue()); + LOG.info("initXndrTps: XPONDER tp = {} is used", tp.getTpId().getValue()); } else { this.valid = true; } // find Client of this network TP - String client = nttp1.getXpdrNetworkAttributes().getTailEquipmentId(); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123.TerminationPoint1 tpceTp1 = + tp.augmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200123 + .TerminationPoint1.class); + String client = tpceTp1.getAssociatedConnectionMapPort(); if ((client.equals("")) || (client == null)) { LOG.error("initXndrTps: XPONDER {} NW TP doesn't have defined Client {}", this.toString(), tp .getTpId().getValue()); @@ -276,14 +279,14 @@ public class PceNode { } private String getSupNodeId(Node inputNode) { - String tempSupId = ""; // TODO: supporting IDs exist as a List. this code takes just the // first element - tempSupId = MapUtils.getSupNode(inputNode); - if (tempSupId.equals("")) { + if (MapUtils.getSupNode(inputNode) != null) { + return MapUtils.getSupNode(inputNode); + } else { LOG.error("getSupNodeId: Empty Supporting node for node: [{}]. Node is ignored", inputNode.getNodeId()); + return ""; } - return tempSupId; } public void validateAZxponder(String anodeId, String znodeId) { diff --git a/tests/sample_configs/NW-for-test-5-4.xml b/tests/sample_configs/NW-for-test-5-4.xml index 67d90913e..e79275c45 100644 --- a/tests/sample_configs/NW-for-test-5-4.xml +++ b/tests/sample_configs/NW-for-test-5-4.xml @@ -18,7 +18,8 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -37,7 +38,8 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -56,9 +58,11 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-SRG1 SRG - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 1 2 @@ -83,32 +87,49 @@ SRG1-PP4-TX XPONDER-1-1 - Transport-underlayXPONDER-1-1 + openroadm-networkXPONDER-1-1 + clli-networkORANGE1 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-1-2-DEG1 DEGREE @@ -128,7 +149,8 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -147,7 +169,8 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -166,9 +189,11 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-SRG1 SRG - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 1 2 @@ -193,32 +218,49 @@ SRG1-PP4-TX XPONDER-1-2 - Transport-underlayXPONDER-1-2 + openroadm-networkXPONDER-1-2 + clli-networkORANGE1 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-1-3-DEG1 DEGREE @@ -238,7 +280,8 @@ 9 10 - Transport-underlayOpenROADM-1-3 + openroadm-networkOpenROADM-1-3 + clli-networkclli13 OpenROADM-1-3-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -257,7 +300,8 @@ 9 10 - Transport-underlayOpenROADM-1-3 + openroadm-networkOpenROADM-1-3 + clli-networkclli13 OpenROADM-1-3-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -276,9 +320,11 @@ 9 10 - Transport-underlayOpenROADM-1-3 + openroadm-networkOpenROADM-1-3 + clli-networkclli13 OpenROADM-1-3-SRG1 SRG - Transport-underlayOpenROADM-1-3 + openroadm-networkOpenROADM-1-3 + clli-networkclli13 1 2 @@ -303,32 +349,49 @@ SRG1-PP4-TX XPONDER-1-3 - Transport-underlayXPONDER-1-3 + openroadm-networkXPONDER-1-3 + clli-networkORANGE1 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-1-4-DEG1 DEGREE @@ -348,7 +411,8 @@ 9 10 - Transport-underlayOpenROADM-1-4 + openroadm-networkOpenROADM-1-4 + clli-networkclli14 OpenROADM-1-4-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -367,7 +431,8 @@ 9 10 - Transport-underlayOpenROADM-1-4 + openroadm-networkOpenROADM-1-4 + clli-networkclli14 OpenROADM-1-4-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -386,9 +451,11 @@ 9 10 - Transport-underlayOpenROADM-1-4 + openroadm-networkOpenROADM-1-4 + clli-networkclli14 OpenROADM-1-4-SRG1 SRG - Transport-underlayOpenROADM-1-4 + openroadm-networkOpenROADM-1-4 + clli-networkclli14 1 2 @@ -413,32 +480,49 @@ SRG1-PP4-TX XPONDER-1-4 - Transport-underlayXPONDER-1-4 + openroadm-networkXPONDER-1-4 + clli-networkORANGE1 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-2-1-DEG1 DEGREE @@ -452,7 +536,8 @@ 4 5 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -465,7 +550,8 @@ 4 5 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -478,9 +564,11 @@ 4 5 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-SRG1 SRG - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 2 3 @@ -499,32 +587,49 @@ SRG1-PP4-TX XPONDER-2-1 - Transport-underlayXPONDER-2-1 + openroadm-networkXPONDER-2-1 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-2-2-DEG1 DEGREE @@ -538,7 +643,8 @@ 4 5 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -551,7 +657,8 @@ 4 5 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -564,9 +671,11 @@ 4 5 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-SRG1 SRG - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 2 3 @@ -585,32 +694,49 @@ SRG1-PP4-TX XPONDER-2-2 - Transport-underlayXPONDER-2-2 + openroadm-networkXPONDER-2-2 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-2-3-DEG1 DEGREE @@ -624,7 +750,8 @@ 4 5 - Transport-underlayOpenROADM-2-3 + openroadm-networkOpenROADM-2-3 + clli-networkclli23 OpenROADM-2-3-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -637,7 +764,8 @@ 4 5 - Transport-underlayOpenROADM-2-3 + openroadm-networkOpenROADM-2-3 + clli-networkclli23 OpenROADM-2-3-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -650,9 +778,11 @@ 4 5 - Transport-underlayOpenROADM-2-3 + openroadm-networkOpenROADM-2-3 + clli-networkclli23 OpenROADM-2-3-SRG1 SRG - Transport-underlayOpenROADM-2-3 + openroadm-networkOpenROADM-2-3 + clli-networkclli23 2 3 @@ -671,32 +801,49 @@ SRG1-PP4-TX XPONDER-2-3 - Transport-underlayXPONDER-2-3 + openroadm-networkXPONDER-2-3 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-2-4-DEG1 DEGREE @@ -710,7 +857,8 @@ 4 5 - Transport-underlayOpenROADM-2-4 + openroadm-networkOpenROADM-2-4 + clli-networkclli24 OpenROADM-2-4-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -723,7 +871,8 @@ 4 5 - Transport-underlayOpenROADM-2-4 + openroadm-networkOpenROADM-2-4 + clli-networkclli24 OpenROADM-2-4-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -736,9 +885,11 @@ 4 5 - Transport-underlayOpenROADM-2-4 + openroadm-networkOpenROADM-2-4 + clli-networkclli24 OpenROADM-2-4-SRG1 SRG - Transport-underlayOpenROADM-2-4 + openroadm-networkOpenROADM-2-4 + clli-networkclli24 2 3 @@ -757,32 +908,49 @@ SRG1-PP4-TX XPONDER-2-4 - Transport-underlayXPONDER-2-4 + openroadm-networkXPONDER-2-4 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-3-1-DEG1 DEGREE @@ -800,7 +968,8 @@ 11 12 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -817,7 +986,8 @@ 11 12 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -834,9 +1004,11 @@ 11 12 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-SRG1 SRG - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 5 6 @@ -859,32 +1031,49 @@ SRG1-PP4-TX XPONDER-3-1 - Transport-underlayXPONDER-3-1 + openroadm-networkXPONDER-3-1 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-3-2-DEG1 DEGREE @@ -902,7 +1091,8 @@ 11 12 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -919,7 +1109,8 @@ 11 12 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -936,9 +1127,11 @@ 11 12 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-SRG1 SRG - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 5 6 @@ -961,32 +1154,49 @@ SRG1-PP4-TX XPONDER-3-2 - Transport-underlayXPONDER-3-2 + openroadm-networkXPONDER-3-2 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-3-3-DEG1 DEGREE @@ -1004,7 +1214,8 @@ 11 12 - Transport-underlayOpenROADM-3-3 + openroadm-networkOpenROADM-3-3 + clli-networkclli33 OpenROADM-3-3-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1021,7 +1232,8 @@ 11 12 - Transport-underlayOpenROADM-3-3 + openroadm-networkOpenROADM-3-3 + clli-networkclli33 OpenROADM-3-3-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1038,9 +1250,11 @@ 11 12 - Transport-underlayOpenROADM-3-3 + openroadm-networkOpenROADM-3-3 + clli-networkclli33 OpenROADM-3-3-SRG1 SRG - Transport-underlayOpenROADM-3-3 + openroadm-networkOpenROADM-3-3 + clli-networkclli33 5 6 @@ -1063,32 +1277,49 @@ SRG1-PP4-TX XPONDER-3-3 - Transport-underlayXPONDER-3-3 + openroadm-networkXPONDER-3-3 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-3-4-DEG1 DEGREE @@ -1106,7 +1337,8 @@ 11 12 - Transport-underlayOpenROADM-3-4 + openroadm-networkOpenROADM-3-4 + clli-networkclli34 OpenROADM-3-4-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1123,7 +1355,8 @@ 11 12 - Transport-underlayOpenROADM-3-4 + openroadm-networkOpenROADM-3-4 + clli-networkclli34 OpenROADM-3-4-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1140,9 +1373,11 @@ 11 12 - Transport-underlayOpenROADM-3-4 + openroadm-networkOpenROADM-3-4 + clli-networkclli34 OpenROADM-3-4-SRG1 SRG - Transport-underlayOpenROADM-3-4 + openroadm-networkOpenROADM-3-4 + clli-networkclli34 5 6 @@ -1165,32 +1400,49 @@ SRG1-PP4-TX XPONDER-3-4 - Transport-underlayXPONDER-3-4 + openroadm-networkXPONDER-3-4 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-4-1-DEG1 DEGREE @@ -1207,7 +1459,8 @@ 12 13 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1223,7 +1476,8 @@ 12 13 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1239,9 +1493,11 @@ 12 13 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-SRG1 SRG - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 7 8 @@ -1263,32 +1519,49 @@ SRG1-PP4-TX XPONDER-4-1 - Transport-underlayXPONDER-4-1 + openroadm-networkXPONDER-4-1 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-4-2-DEG1 DEGREE @@ -1305,7 +1578,8 @@ 12 13 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1321,7 +1595,8 @@ 12 13 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1337,9 +1612,11 @@ 12 13 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-SRG1 SRG - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 7 8 @@ -1361,32 +1638,49 @@ SRG1-PP4-TX XPONDER-4-2 - Transport-underlayXPONDER-4-2 + openroadm-networkXPONDER-4-2 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-4-3-DEG1 DEGREE @@ -1403,7 +1697,8 @@ 12 13 - Transport-underlayOpenROADM-4-3 + openroadm-networkOpenROADM-4-3 + clli-networkclli43 OpenROADM-4-3-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1419,7 +1714,8 @@ 12 13 - Transport-underlayOpenROADM-4-3 + openroadm-networkOpenROADM-4-3 + clli-networkclli43 OpenROADM-4-3-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1435,9 +1731,11 @@ 12 13 - Transport-underlayOpenROADM-4-3 + openroadm-networkOpenROADM-4-3 + clli-networkclli43 OpenROADM-4-3-SRG1 SRG - Transport-underlayOpenROADM-4-3 + openroadm-networkOpenROADM-4-3 + clli-networkclli43 7 8 @@ -1459,32 +1757,49 @@ SRG1-PP4-TX XPONDER-4-3 - Transport-underlayXPONDER-4-3 + openroadm-networkXPONDER-4-3 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-4-4-DEG1 DEGREE @@ -1501,7 +1816,8 @@ 12 13 - Transport-underlayOpenROADM-4-4 + openroadm-networkOpenROADM-4-4 + clli-networkclli44 OpenROADM-4-4-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1517,7 +1833,8 @@ 12 13 - Transport-underlayOpenROADM-4-4 + openroadm-networkOpenROADM-4-4 + clli-networkclli44 OpenROADM-4-4-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1533,9 +1850,11 @@ 12 13 - Transport-underlayOpenROADM-4-4 + openroadm-networkOpenROADM-4-4 + clli-networkclli44 OpenROADM-4-4-SRG1 SRG - Transport-underlayOpenROADM-4-4 + openroadm-networkOpenROADM-4-4 + clli-networkclli44 7 8 @@ -1557,32 +1876,49 @@ SRG1-PP4-TX XPONDER-4-4 - Transport-underlayXPONDER-4-4 + openroadm-networkXPONDER-4-4 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-5-1-DEG1 DEGREE @@ -1598,7 +1934,8 @@ 13 14 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1613,7 +1950,8 @@ 13 14 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1628,9 +1966,11 @@ 13 14 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-SRG1 SRG - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 9 10 @@ -1651,32 +1991,49 @@ SRG1-PP4-TX XPONDER-5-1 - Transport-underlayXPONDER-5-1 + openroadm-networkXPONDER-5-1 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-5-2-DEG1 DEGREE @@ -1692,7 +2049,8 @@ 13 14 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1707,7 +2065,8 @@ 13 14 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1722,9 +2081,11 @@ 13 14 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-SRG1 SRG - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 9 10 @@ -1745,32 +2106,49 @@ SRG1-PP4-TX XPONDER-5-2 - Transport-underlayXPONDER-5-2 + openroadm-networkXPONDER-5-2 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-5-3-DEG1 DEGREE @@ -1786,7 +2164,8 @@ 13 14 - Transport-underlayOpenROADM-5-3 + openroadm-networkOpenROADM-5-3 + clli-networkclli53 OpenROADM-5-3-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1801,7 +2180,8 @@ 13 14 - Transport-underlayOpenROADM-5-3 + openroadm-networkOpenROADM-5-3 + clli-networkclli53 OpenROADM-5-3-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1816,9 +2196,11 @@ 13 14 - Transport-underlayOpenROADM-5-3 + openroadm-networkOpenROADM-5-3 + clli-networkclli53 OpenROADM-5-3-SRG1 SRG - Transport-underlayOpenROADM-5-3 + openroadm-networkOpenROADM-5-3 + clli-networkclli53 9 10 @@ -1839,32 +2221,49 @@ SRG1-PP4-TX XPONDER-5-3 - Transport-underlayXPONDER-5-3 + openroadm-networkXPONDER-5-3 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-5-4-DEG1 DEGREE @@ -1880,7 +2279,8 @@ 13 14 - Transport-underlayOpenROADM-5-4 + openroadm-networkOpenROADM-5-4 + clli-networkclli54 OpenROADM-5-4-DEG2 DEGREE DEG2-CTP-TX DEGREE-TX-CTP @@ -1895,7 +2295,8 @@ 13 14 - Transport-underlayOpenROADM-5-4 + openroadm-networkOpenROADM-5-4 + clli-networkclli54 OpenROADM-5-4-DEG3 DEGREE DEG3-CTP-TX DEGREE-TX-CTP @@ -1910,9 +2311,11 @@ 13 14 - Transport-underlayOpenROADM-5-4 + openroadm-networkOpenROADM-5-4 + clli-networkclli54 OpenROADM-5-4-SRG1 SRG - Transport-underlayOpenROADM-5-4 + openroadm-networkOpenROADM-5-4 + clli-networkclli54 9 10 @@ -1933,32 +2336,49 @@ SRG1-PP4-TX XPONDER-5-4 - Transport-underlayXPONDER-5-4 + openroadm-networkXPONDER-5-4 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + OpenROADM-1-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-1-DEG2-DEG2-CTP-RX OpenROADM-1-1-DEG1DEG1-CTP-TX OpenROADM-1-1-DEG2DEG2-CTP-RX @@ -5064,4 +5484,4 @@ - + \ No newline at end of file diff --git a/tests/sample_configs/NW-simple-topology.xml b/tests/sample_configs/NW-simple-topology.xml index cb2297a7f..90be88eca 100644 --- a/tests/sample_configs/NW-simple-topology.xml +++ b/tests/sample_configs/NW-simple-topology.xml @@ -22,7 +22,8 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-DEG2 DEGREE DEG2-CTP-TX @@ -45,7 +46,8 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-DEG3 DEGREE DEG3-CTP-TX @@ -68,9 +70,11 @@ 9 10 - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 OpenROADM-1-1-SRG1 SRG - Transport-underlayOpenROADM-1-1 + openroadm-networkOpenROADM-1-1 + clli-networkclli11 1 2 @@ -108,59 +112,92 @@ SRG1-PP5-TX SRG-TX-PP - XPONDER-1-1 - Transport-underlayXPONDER-1-1 + + XPONDER-1-1 + + Transport-underlay + XPONDER-1-1 + + + clli-network + ORANGE1 + XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-1-2-DEG1 DEGREE @@ -184,7 +221,8 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-DEG2 DEGREE DEG2-CTP-TX @@ -207,7 +245,8 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-DEG3 DEGREE DEG3-CTP-TX @@ -230,9 +269,11 @@ 9 10 - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 OpenROADM-1-2-SRG1 SRG - Transport-underlayOpenROADM-1-2 + openroadm-networkOpenROADM-1-2 + clli-networkclli12 1 2 @@ -271,59 +312,84 @@ SRG-TX-PP XPONDER-1-2 - Transport-underlayXPONDER-1-2 + openroadm-networkXPONDER-1-2 + clli-networkORANGE1 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-2-1-DEG1 DEGREE @@ -347,7 +413,8 @@ 11 12 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-DEG2 DEGREE DEG2-CTP-TX @@ -370,7 +437,8 @@ 11 12 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-DEG3 DEGREE DEG3-CTP-TX @@ -393,9 +461,11 @@ 11 12 - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 OpenROADM-2-1-SRG1 SRG - Transport-underlayOpenROADM-2-1 + openroadm-networkOpenROADM-2-1 + clli-networkclli21 3 4 @@ -434,58 +504,84 @@ SRG-TX-PP XPONDER-2-1 - Transport-underlayXPONDER-2-1 + openroadm-networkXPONDER-2-1 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-2-2-DEG1 DEGREE @@ -509,7 +605,8 @@ 11 12 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-DEG2 DEGREE DEG2-CTP-TX @@ -532,7 +629,8 @@ 11 12 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-DEG3 DEGREE DEG3-CTP-TX @@ -555,9 +653,11 @@ 11 12 - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 OpenROADM-2-2-SRG1 SRG - Transport-underlayOpenROADM-2-2 + openroadm-networkOpenROADM-2-2 + clli-networkclli22 3 4 @@ -596,58 +696,84 @@ SRG-TX-PP XPONDER-2-2 - Transport-underlayXPONDER-2-2 + openroadm-networkXPONDER-2-2 + clli-networkORANGE2 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-3-1-DEG1 DEGREE @@ -671,7 +797,8 @@ 13 14 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-DEG2 DEGREE DEG2-CTP-TX @@ -694,7 +821,8 @@ 13 14 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-DEG3 DEGREE DEG3-CTP-TX @@ -717,9 +845,11 @@ 13 14 - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 OpenROADM-3-1-SRG1 SRG - Transport-underlayOpenROADM-3-1 + openroadm-networkOpenROADM-3-1 + clli-networkclli31 5 6 @@ -758,58 +888,84 @@ SRG-TX-PP XPONDER-3-1 - Transport-underlayXPONDER-3-1 + openroadm-networkXPONDER-3-1 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-3-2-DEG1 DEGREE @@ -833,7 +989,8 @@ 13 14 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-DEG2 DEGREE DEG2-CTP-TX @@ -856,7 +1013,8 @@ 13 14 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-DEG3 DEGREE DEG3-CTP-TX @@ -879,9 +1037,11 @@ 13 14 - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 OpenROADM-3-2-SRG1 SRG - Transport-underlayOpenROADM-3-2 + openroadm-networkOpenROADM-3-2 + clli-networkclli32 5 6 @@ -920,58 +1080,84 @@ SRG-TX-PP XPONDER-3-2 - Transport-underlayXPONDER-3-2 + openroadm-networkXPONDER-3-2 + clli-networkORANGE3 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-4-1-DEG1 DEGREE @@ -995,7 +1181,8 @@ 15 16 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-DEG2 DEGREE DEG2-CTP-TX @@ -1018,7 +1205,8 @@ 15 16 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-DEG3 DEGREE DEG3-CTP-TX @@ -1041,9 +1229,11 @@ 15 16 - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 OpenROADM-4-1-SRG1 SRG - Transport-underlayOpenROADM-4-1 + openroadm-networkOpenROADM-4-1 + clli-networkclli41 7 8 @@ -1082,58 +1272,84 @@ SRG-TX-PP XPONDER-4-1 - Transport-underlayXPONDER-4-1 + openroadm-networkXPONDER-4-1 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-4-2-DEG1 DEGREE @@ -1157,7 +1373,8 @@ 15 16 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-DEG2 DEGREE DEG2-CTP-TX @@ -1180,7 +1397,8 @@ 15 16 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-DEG3 DEGREE DEG3-CTP-TX @@ -1203,9 +1421,11 @@ 15 16 - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 OpenROADM-4-2-SRG1 SRG - Transport-underlayOpenROADM-4-2 + openroadm-networkOpenROADM-4-2 + clli-networkclli42 7 8 @@ -1244,58 +1464,84 @@ SRG-TX-PP XPONDER-4-2 - Transport-underlayXPONDER-4-2 + openroadm-networkXPONDER-4-2 + clli-networkORANGE4 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-5-1-DEG1 DEGREE @@ -1319,7 +1565,8 @@ 17 18 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-DEG2 DEGREE DEG2-CTP-TX @@ -1342,7 +1589,8 @@ 17 18 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-DEG3 DEGREE DEG3-CTP-TX @@ -1365,9 +1613,11 @@ 17 18 - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 OpenROADM-5-1-SRG1 SRG - Transport-underlayOpenROADM-5-1 + openroadm-networkOpenROADM-5-1 + clli-networkclli51 9 10 @@ -1406,58 +1656,84 @@ SRG-TX-PP XPONDER-5-1 - Transport-underlayXPONDER-5-1 + openroadm-networkXPONDER-5-1 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK - - Client-1 - XPDR-NW1-RX - XPDR-NW1-TX XPONDER-NETWORK - - Client-1 - XPDR-NW1-TX - Client-1 XPONDER-CLIENT - XPDR-NW1 - XPDR-NW2-RX XPONDER-NETWORK - - Client-2 - XPDR-NW2-RX - XPDR-NW2-TX XPONDER-NETWORK - - Client-2 - XPDR-NW2-TX - Client-2 XPONDER-CLIENT - XPDR-NW2 - XPDR-NW3-RX XPONDER-NETWORK - - Client-3 - XPDR-NW3-RX - XPDR-NW3-TX XPONDER-NETWORK - - Client-3 - XPDR-NW3-TX - Client-3 XPONDER-CLIENT - XPDR-NW3 - XPDR-NW4-RX XPONDER-NETWORK - - Client-4 - XPDR-NW4-RX - XPDR-NW4-TX XPONDER-NETWORK - - Client-4 - XPDR-NW4-TX - Client-4 XPONDER-CLIENT - XPDR-NW4 - XPDR-NW5-RX XPONDER-NETWORK - - Client-5 - XPDR-NW5-RX - XPDR-NW5-TX XPONDER-NETWORK - - Client-5 - XPDR-NW5-TX - Client-5 XPONDER-CLIENT - XPDR-NW5 + + XPDR-NW1-RX + XPONDER-NETWORK + Client-1 + + + XPDR-NW1-TX + XPONDER-NETWORK + Client-1 + + + Client-1 + XPONDER-CLIENT + XPDR-NW1 + + + XPDR-NW2-RX + XPONDER-NETWORK + Client-2 + + + XPDR-NW2-TX + XPONDER-NETWORK + Client-2 + + + Client-2 + XPONDER-CLIENT + XPDR-NW2 + + + XPDR-NW3-RX + XPONDER-NETWORK + Client-3 + + + XPDR-NW3-TX + XPONDER-NETWORK + Client-3 + + + Client-3 + XPONDER-CLIENT + XPDR-NW3 + + + XPDR-NW4-RX + XPONDER-NETWORK + Client-4 + + + XPDR-NW4-TX + XPONDER-NETWORK + Client-4 + + + Client-4 + XPONDER-CLIENT + XPDR-NW4 + + + XPDR-NW5-RX + XPONDER-NETWORK + Client-5 + + + XPDR-NW5-TX + XPONDER-NETWORK + Client-5 + + + Client-5 + XPONDER-CLIENT + XPDR-NW5 + OpenROADM-5-2-DEG1 DEGREE @@ -1481,7 +1757,8 @@ 17 18 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-DEG2 DEGREE DEG2-CTP-TX @@ -1504,7 +1781,8 @@ 17 18 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-DEG3 DEGREE DEG3-CTP-TX @@ -1527,9 +1805,11 @@ 17 18 - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 OpenROADM-5-2-SRG1 SRG - Transport-underlayOpenROADM-5-2 + openroadm-networkOpenROADM-5-2 + clli-networkclli52 9 10 @@ -1568,9 +1848,10 @@ SRG-TX-PP XPONDER-5-2 - Transport-underlayXPONDER-5-2 + openroadm-networkXPONDER-5-2 + clli-networkORANGE5 XPONDER - XPDR-NW1-RX XPONDER-NETWORK + XPDR-NW1-RX XPONDER-NETWORK Client-1 XPDR-NW1-RX @@ -3251,4 +3532,4 @@ - + \ No newline at end of file diff --git a/tests/sample_configs/gnpy/openroadmTopology.json b/tests/sample_configs/gnpy/openroadmTopology.json index 93fab7da3..14035e6e0 100644 --- a/tests/sample_configs/gnpy/openroadmTopology.json +++ b/tests/sample_configs/gnpy/openroadmTopology.json @@ -2682,137 +2682,72 @@ "ietf-network-topology:termination-point": [ { "tp-id": "XPDR-NW1-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW1-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "Client-4", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-5", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-1", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-2", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-3", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" } ], @@ -2829,137 +2764,72 @@ "ietf-network-topology:termination-point": [ { "tp-id": "XPDR-NW1-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW1-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "Client-4", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-5", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-1", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-2", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-3", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" } ], @@ -2976,137 +2846,72 @@ "ietf-network-topology:termination-point": [ { "tp-id": "XPDR-NW1-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW1-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "Client-4", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-5", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-1", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-2", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-3", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" } ], @@ -3123,137 +2928,72 @@ "ietf-network-topology:termination-point": [ { "tp-id": "XPDR-NW1-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW1-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "Client-4", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-5", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-1", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-2", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-3", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" } ], @@ -3270,137 +3010,72 @@ "ietf-network-topology:termination-point": [ { "tp-id": "XPDR-NW1-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW1-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-1" - } + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-RX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-RX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW2-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-2" - } + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW5-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-5" - } + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW3-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-3" - } + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "XPDR-NW4-TX", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4-TX" - }, - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "Client-4" - } + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" }, { "tp-id": "Client-4", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW4" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-5", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW5" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-1", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW1" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-2", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW2" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" }, { "tp-id": "Client-3", - "org-openroadm-network-topology:xpdr-client-attributes": { - "tail-equipment-id": "XPDR-NW3" - }, "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" } ], @@ -3416,4 +3091,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/tests/sample_configs/honeynode-topo.xml b/tests/sample_configs/honeynode-topo.xml index 8798b8b96..2a616bbb7 100644 --- a/tests/sample_configs/honeynode-topo.xml +++ b/tests/sample_configs/honeynode-topo.xml @@ -1624,36 +1624,22 @@ XPDR1-NETWORK2 XPONDER-NETWORK - - XPDR1-NETWORK1 - - - XPDR1-CLIENT2 - + XPDR1-CLIENT2 XPDR1-CLIENT2 XPONDER-CLIENT - - XPDR1-NETWORK2 - + XPDR1-NETWORK2 XPDR1-CLIENT1 XPONDER-CLIENT - - XPDR1-NETWORK1 - + XPDR1-NETWORK1 XPDR1-NETWORK1 XPONDER-NETWORK - - XPDR1-NETWORK1 - - - XPDR1-CLIENT1 - + XPDR1-CLIENT1 openroadm-network @@ -1973,36 +1959,22 @@ XPDR1-NETWORK2 XPONDER-NETWORK - - XPDR1-NETWORK1 - - - XPDR1-CLIENT2 - + XPDR1-CLIENT2 XPDR1-CLIENT2 XPONDER-CLIENT - - XPDR1-NETWORK2 - + XPDR1-NETWORK2 XPDR1-CLIENT1 XPONDER-CLIENT - - XPDR1-NETWORK1 - + XPDR1-NETWORK1 XPDR1-NETWORK1 XPONDER-NETWORK - - XPDR1-NETWORK1 - - - XPDR1-CLIENT1 - + XPDR1-CLIENT1 openroadm-network diff --git a/tests/transportpce_tests/1.2.1/test_end2end.py b/tests/transportpce_tests/1.2.1/test_end2end.py index 4c4465530..4727ae3b0 100644 --- a/tests/transportpce_tests/1.2.1/test_end2end.py +++ b/tests/transportpce_tests/1.2.1/test_end2end.py @@ -490,9 +490,9 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertEqual({u'frequency': 196.1, u'width': 40}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength']) if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) if ele['tp-id'] == 'XPDR1-NETWORK2': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-network-attributes', dict.keys(ele)) time.sleep(3) def test_16_check_topo_ROADMA_SRG1(self): @@ -784,7 +784,7 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertEqual({u'frequency': 196.05, u'width': 40}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength']) if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) time.sleep(10) def test_26_check_topo_ROADMA_SRG1(self): @@ -1031,6 +1031,7 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device'])) time.sleep(2) + @unittest.skip("Skip this test until tail-equipment-id deletion is finished.") def test_33_check_topo_XPDRA(self): url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/XPDRA01-XPDR1" .format(self.restconf_baseurl)) @@ -1042,10 +1043,10 @@ class TransportPCEFulltesting(unittest.TestCase): for ele in liste_tp: if ((ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-CLIENT') and (ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3')): - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) elif ((ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-NETWORK') and (ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT3')): - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-network-attributes', dict.keys(ele)) time.sleep(10) def test_34_check_topo_ROADMA_SRG1(self): diff --git a/tests/transportpce_tests/1.2.1/test_topology.py b/tests/transportpce_tests/1.2.1/test_topology.py index e87f078bb..5e8aed0af 100644 --- a/tests/transportpce_tests/1.2.1/test_topology.py +++ b/tests/transportpce_tests/1.2.1/test_topology.py @@ -87,7 +87,7 @@ class TransportPCETopologyTesting(unittest.TestCase): cls.honeynode_process4.wait() def setUp(self): - time.sleep(30) + time.sleep(5) #END_IGNORE_XTESTING @@ -197,6 +197,10 @@ class TransportPCETopologyTesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) elif(nodeId=='ROADMA01-SRG3'): #Test related to SRG1 @@ -206,6 +210,10 @@ class TransportPCETopologyTesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) elif(nodeId=='ROADMA01-DEG1'): #Test related to DEG1 @@ -215,6 +223,10 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) listNode.remove(nodeId) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + res['network'][0]['node'][i]['supporting-node']) elif(nodeId=='ROADMA01-DEG2'): #Test related to DEG2 self.assertEqual(nodeType,'DEGREE') @@ -222,6 +234,10 @@ class TransportPCETopologyTesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) else: self.assertFalse(True) @@ -299,6 +315,8 @@ class TransportPCETopologyTesting(unittest.TestCase): if(nodeId=='XPDRA01-XPDR1'): self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType,'XPONDER') nbTps=len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 @@ -365,7 +383,7 @@ class TransportPCETopologyTesting(unittest.TestCase): #Connect the tail XPDRA to ROADMA and vice versa def test_10_connect_tail_xpdr_rdm(self): - #Connect the tail: XPDRA to ROADMA + #Connect the tail: XPDRA to ROADMA url = ("{}/operations/transportpce-networkutils:init-xpdr-rdm-links" .format(self.restconf_baseurl)) data = {"networkutils:input": { @@ -384,29 +402,27 @@ class TransportPCETopologyTesting(unittest.TestCase): "POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.ok) - time.sleep(10) def test_11_connect_tail_rdm_xpdr(self): - #Connect the tail: ROADMA to XPDRA - url = ("{}/operations/transportpce-networkutils:init-rdm-xpdr-links" - .format(self.restconf_baseurl)) - data = {"networkutils:input": { - "networkutils:links-input": { - "networkutils:xpdr-node": "XPDRA01", - "networkutils:xpdr-num": "1", - "networkutils:network-num": "1", - "networkutils:rdm-node": "ROADMA01", - "networkutils:srg-num": "1", - "networkutils:termination-point-num": "SRG1-PP1-TXRX" - } + #Connect the tail: ROADMA to XPDRA + url = ("{}/operations/transportpce-networkutils:init-rdm-xpdr-links" + .format(self.restconf_baseurl)) + data = {"networkutils:input": { + "networkutils:links-input": { + "networkutils:xpdr-node": "XPDRA01", + "networkutils:xpdr-num": "1", + "networkutils:network-num": "1", + "networkutils:rdm-node": "ROADMA01", + "networkutils:srg-num": "1", + "networkutils:termination-point-num": "SRG1-PP1-TXRX" } - } - headers = {'content-type': 'application/json'} - response = requests.request( - "POST", url, data=json.dumps(data), headers=headers, - auth=('admin', 'admin')) - self.assertEqual(response.status_code, requests.codes.ok) - time.sleep(10) + } + } + headers = {'content-type': 'application/json'} + response = requests.request( + "POST", url, data=json.dumps(data), headers=headers, + auth=('admin', 'admin')) + self.assertEqual(response.status_code, requests.codes.ok) def test_12_getLinks_OpenRoadmTopology(self): url = ("{}/config/ietf-network:networks/network/openroadm-topology" @@ -475,7 +491,7 @@ class TransportPCETopologyTesting(unittest.TestCase): "PUT", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.created) - time.sleep(30) + time.sleep(20) def test_14_omsAttributes_ROADMA_ROADMC(self): # Config ROADMA-ROADMC oms-attributes @@ -789,7 +805,7 @@ class TransportPCETopologyTesting(unittest.TestCase): "PUT", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.created) - time.sleep(30) + time.sleep(20) def test_22_omsAttributes_ROADMA_ROADMB(self): # Config ROADMA-ROADMB oms-attributes @@ -896,7 +912,6 @@ class TransportPCETopologyTesting(unittest.TestCase): else: self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeC') listNode.remove(nodeId) - self.assertEqual(len(listNode),0) def test_27_verifyDegree(self): @@ -960,7 +975,6 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(oppLink_type, 'XPONDER-OUTPUT') elif link_type=='XPONDER-OUTPUT': self.assertEqual(oppLink_type, 'XPONDER-INPUT') - time.sleep(5) def test_29_getLinkOmsAttributesOpenRoadmTopology(self): url = ("{}/config/ietf-network:networks/network/openroadm-topology" @@ -1057,9 +1071,12 @@ class TransportPCETopologyTesting(unittest.TestCase): if (tpid == 'XPDR1-CLIENT1'): self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT') + if (tpid == 'XPDR1-NETWORK1'): + self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK') self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-network-topology:xpdr-client-attributes']['tail-equipment-id'], - 'XPDR1-NETWORK1') + ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'], + 'ROADMA01-SRG1--SRG1-PP1-TXRX') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) diff --git a/tests/transportpce_tests/2.2.1/test_end2end.py b/tests/transportpce_tests/2.2.1/test_end2end.py index 10d66d0de..a0e5de635 100644 --- a/tests/transportpce_tests/2.2.1/test_end2end.py +++ b/tests/transportpce_tests/2.2.1/test_end2end.py @@ -214,7 +214,6 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertIn('Roadm Xponder links created successfully', res["output"]["result"]) time.sleep(2) - def test_07_connect_xprdC_N1_to_roadmC_PP1(self): url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl) data = { @@ -238,7 +237,6 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"]) time.sleep(2) - def test_08_connect_roadmC_PP1_to_xpdrC_N1(self): url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl) data = { @@ -308,7 +306,6 @@ class TransportPCEFulltesting(unittest.TestCase): auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.created) - #test service-create for Eth service from xpdr to xpdr def test_11_create_eth_service1(self): url = ("{}/operations/org-openroadm-service:service-create" @@ -491,9 +488,9 @@ class TransportPCEFulltesting(unittest.TestCase): u'width': 40}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength']) if ele['tp-id'] == 'XPDR1-CLIENT2' or ele['tp-id'] == 'XPDR1-CLIENT1': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) if ele['tp-id'] == 'XPDR1-NETWORK2': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-network-attributes', dict.keys(ele)) time.sleep(3) def test_16_check_topo_ROADMA_SRG1(self): @@ -789,7 +786,7 @@ class TransportPCEFulltesting(unittest.TestCase): u'width': 40}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength']) if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT2': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) time.sleep(10) def test_26_check_topo_ROADMA_SRG1(self): @@ -820,7 +817,6 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele)) time.sleep(10) - def test_27_check_topo_ROADMA_DEG2(self): url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2" .format(self.restconf_baseurl)) @@ -1042,6 +1038,7 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device'])) time.sleep(2) + @unittest.skip("Skip this test until tail-equipment-id deletion is finished.") def test_33_check_topo_XPDRA(self): url1 = ("{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1" .format(self.restconf_baseurl)) @@ -1052,9 +1049,9 @@ class TransportPCEFulltesting(unittest.TestCase): liste_tp = res['node'][0]['ietf-network-topology:termination-point'] for ele in liste_tp: if ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-CLIENT': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) elif ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-NETWORK': - self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes'])) + self.assertNotIn('org-openroadm-network-topology:xpdr-network-attributes', dict.keys(ele)) time.sleep(10) def test_34_check_topo_ROADMA_SRG1(self): @@ -1091,7 +1088,6 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertNotIn('org-openroadm-network-topology:tx-ttp-attributes', dict.keys(ele)) time.sleep(10) - # test service-create for Optical Channel (OC) service from srg-pp to srg-pp def test_36_create_oc_service1(self): url = ("{}/operations/org-openroadm-service:service-create" @@ -1411,7 +1407,6 @@ class TransportPCEFulltesting(unittest.TestCase): self.test_27_check_topo_ROADMA_DEG2() time.sleep(3) - def test_44_delete_oc_service1(self): url = ("{}/operations/org-openroadm-service:service-delete" .format(self.restconf_baseurl)) @@ -1546,7 +1541,6 @@ class TransportPCEFulltesting(unittest.TestCase): print ("oc service deletion\n") self.test_44_delete_oc_service1() - def test_51_disconnect_XPDRA(self): url = ("{}/config/network-topology:" "network-topology/topology/topology-netconf/node/XPDR-A1" diff --git a/tests/transportpce_tests/2.2.1/test_otn_topology.py b/tests/transportpce_tests/2.2.1/test_otn_topology.py index 6a7489634..bdeacdd80 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_topology.py +++ b/tests/transportpce_tests/2.2.1/test_otn_topology.py @@ -138,40 +138,44 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nbNode, 2) listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2'] for i in range(0, nbNode): - nodeType = res['network'][0]['node'][i]['org-openroadm-network-topology:node-type'] + nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'SPDR-SA1-XPDR1'): + if (nodeId == 'SPDR-SA1-XPDR1'): self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType, 'XPONDER') nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-network-topology:tp-type'] + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if (tpType == 'XPONDER-CLIENT'): client += 1 elif (tpType == 'XPONDER-NETWORK'): network += 1 - self.assertTrue(client == 4) + self.assertTrue(client == 0) self.assertTrue(network == 1) listNode.remove(nodeId) - if(nodeId == 'SPDR-SA1-XPDR2'): + elif (nodeId == 'SPDR-SA1-XPDR2'): self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType, 'XPONDER') nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-network-topology:tp-type'] + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if (tpType == 'XPONDER-CLIENT'): client += 1 elif (tpType == 'XPONDER-NETWORK'): network += 1 - self.assertTrue(client == 4) + self.assertTrue(client == 0) self.assertTrue(network == 4) listNode.remove(nodeId) else: @@ -202,18 +206,20 @@ class TransportPCEtesting(unittest.TestCase): for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] if(nodeId == 'SPDR-SA1-XPDR1'): - nodeType = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:node-type'] + nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] self.assertEqual(nodeType, 'MUXPDR') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR1'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 1) nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-type'] + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if (tpType == 'XPONDER-CLIENT'): client += 1 @@ -240,18 +246,20 @@ class TransportPCEtesting(unittest.TestCase): self.assertIn('XPDR1-CLIENT1', nbl['tp-list']) self.assertNotIn('XPDR1-CLIENT2', nbl['tp-list']) elif(nodeId == 'SPDR-SA1-XPDR2'): - nodeType = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:node-type'] + nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] self.assertEqual(nodeType, 'SWITCH') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR2'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 2) nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-type'] + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if (tpType == 'XPONDER-CLIENT'): client += 1 diff --git a/tests/transportpce_tests/2.2.1/test_portmapping.py b/tests/transportpce_tests/2.2.1/test_portmapping.py index b5a4e4738..df4e0f2b9 100644 --- a/tests/transportpce_tests/2.2.1/test_portmapping.py +++ b/tests/transportpce_tests/2.2.1/test_portmapping.py @@ -236,7 +236,8 @@ class TransportPCEPortMappingTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn( - {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', + {'supported-interface-capability': ['org-openroadm-port-types:if-OCH'], + 'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', 'logical-connection-point': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-network', 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-CLIENT1'}, res['mapping']) @@ -251,7 +252,8 @@ class TransportPCEPortMappingTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn( - {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/2-PLUG-NET', + {'supported-interface-capability': ['org-openroadm-port-types:if-OCH'], + 'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/2-PLUG-NET', 'logical-connection-point': 'XPDR1-NETWORK2', 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-CLIENT2', 'port-qual': 'xpdr-network'}, res['mapping']) @@ -266,7 +268,8 @@ class TransportPCEPortMappingTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn( - {'supporting-port': 'C1', + {'supported-interface-capability': ['org-openroadm-port-types:if-100GE'], + 'supporting-port': 'C1', 'supporting-circuit-pack-name': '1/0/1-PLUG-CLIENT', 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client'}, @@ -282,10 +285,11 @@ class TransportPCEPortMappingTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn( - {'supporting-port': 'C1', - 'supporting-circuit-pack-name': '1/0/2-PLUG-CLIENT', - 'logical-connection-point': 'XPDR1-CLIENT2', 'port-direction': 'bidirectional', - 'connection-map-lcp': 'XPDR1-NETWORK2', 'port-qual': 'xpdr-client'}, + {'supported-interface-capability': ['org-openroadm-port-types:if-100GE'], + 'supporting-port': 'C1', + 'supporting-circuit-pack-name': '1/0/2-PLUG-CLIENT', + 'logical-connection-point': 'XPDR1-CLIENT2', 'port-direction': 'bidirectional', + 'connection-map-lcp': 'XPDR1-NETWORK2', 'port-qual': 'xpdr-client'}, res['mapping']) def test_15_xpdr_device_disconnected(self): diff --git a/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py b/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py index 436e769db..c145ff7ca 100644 --- a/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py +++ b/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py @@ -137,12 +137,14 @@ class TransportPCERendererTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn( - {'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', + {'supported-interface-capability': ['org-openroadm-port-types:if-OCH'], + 'supporting-port': '1', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', 'logical-connection-point': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-network', 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-CLIENT1'}, res['nodes'][0]['mapping']) self.assertIn( - {'supporting-port': 'C1', + {'supported-interface-capability': ['org-openroadm-port-types:if-100GE'], + 'supporting-port': 'C1', 'supporting-circuit-pack-name': '1/0/1-PLUG-CLIENT', 'logical-connection-point': 'XPDR1-CLIENT1', 'port-direction': 'bidirectional', 'connection-map-lcp': 'XPDR1-NETWORK1', 'port-qual': 'xpdr-client'}, diff --git a/tests/transportpce_tests/2.2.1/test_topology.py b/tests/transportpce_tests/2.2.1/test_topology.py index b5ae52b2b..ac0838cff 100644 --- a/tests/transportpce_tests/2.2.1/test_topology.py +++ b/tests/transportpce_tests/2.2.1/test_topology.py @@ -86,7 +86,7 @@ class TransportPCEtesting(unittest.TestCase): def setUp(self): - time.sleep(30) + time.sleep(5) #END_IGNORE_XTESTING @@ -202,6 +202,10 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) elif(nodeId=='ROADM-A1-SRG3'): #Test related to SRG1 @@ -211,6 +215,10 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) elif(nodeId=='ROADM-A1-DEG1'): #Test related to DEG1 @@ -219,6 +227,10 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) elif(nodeId=='ROADM-A1-DEG2'): #Test related to DEG2 @@ -227,6 +239,10 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) else: self.assertFalse(True) @@ -304,6 +320,8 @@ class TransportPCEtesting(unittest.TestCase): if(nodeId=='XPDR-A1-XPDR1'): self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType,'XPONDER') nbTps=len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 @@ -392,7 +410,6 @@ class TransportPCEtesting(unittest.TestCase): "POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.ok) - time.sleep(10) def test_11_connect_tail_rdm_xpdr(self): #Connect the tail: ROADMA to XPDRA @@ -407,14 +424,13 @@ class TransportPCEtesting(unittest.TestCase): "networkutils:srg-num": "1", "networkutils:termination-point-num": "SRG1-PP1-TXRX" } - } + } } headers = {'content-type': 'application/json'} response = requests.request( "POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.ok) - time.sleep(10) def test_12_getLinks_OpenRoadmTopology(self): url = ("{}/config/ietf-network:networks/network/openroadm-topology" @@ -483,7 +499,7 @@ class TransportPCEtesting(unittest.TestCase): "PUT", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.created) - time.sleep(30) + time.sleep(20) def test_14_getClliNetwork(self): url = ("{}/config/ietf-network:networks/network/clli-network" @@ -504,7 +520,6 @@ class TransportPCEtesting(unittest.TestCase): else: self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeC') listNode.remove(nodeId) - self.assertEqual(len(listNode),0) def test_15_getOpenRoadmNetwork(self): @@ -727,7 +742,7 @@ class TransportPCEtesting(unittest.TestCase): "PUT", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin')) self.assertEqual(response.status_code, requests.codes.created) - time.sleep(30) + time.sleep(20) def test_19_getClliNetwork(self): url = ("{}/config/ietf-network:networks/network/clli-network" @@ -750,7 +765,6 @@ class TransportPCEtesting(unittest.TestCase): else: self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'],'NodeC') listNode.remove(nodeId) - self.assertEqual(len(listNode),0) def test_20_verifyDegree(self): @@ -814,7 +828,6 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(oppLink_type, 'XPONDER-OUTPUT') elif link_type=='XPONDER-OUTPUT': self.assertEqual(oppLink_type, 'XPONDER-INPUT') - time.sleep(5) def test_22_disconnect_ROADMB(self): #Delete in the topology-netconf @@ -940,9 +953,12 @@ class TransportPCEtesting(unittest.TestCase): if (tpid == 'XPDR1-CLIENT1'): self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT') + if (tpid == 'XPDR1-NETWORK1'): + self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK') self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-network-topology:xpdr-client-attributes']['tail-equipment-id'], - 'XPDR1-NETWORK1') + ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'], + 'ROADM-A1-SRG1--SRG1-PP1-TXRX') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) -- 2.36.6