From feb80c05128f6292a0c9735db4e7e542fbac1999 Mon Sep 17 00:00:00 2001 From: Christophe Betoule Date: Tue, 11 May 2021 10:45:19 +0200 Subject: [PATCH] Update PCE for OTUC4, ODUC4 and 100GE MXPDR - update StringConstants with new service types for 400G MXPDR - update optical PCE to manage these new service types - refactor PceCalculation to optimize service-type affectation - create 100GE_T and 100GE_M to differentiate respectively 100GE TPDR from 100GE MXPDR client port - update tribslot to 20 for 100GE MXPDR client port - update UT consequently - update PCE func tests JIRA: TRNSPRTPCE-463 TRNSPRTPCE-453 Signed-off-by: Christophe Betoule Co-authored-by: Gilles Thouenon Co-authored-by: Balagangadhar Bathula Change-Id: Ibf7a9da47b6b9424e41205659fc996d2eddebaee --- .../transportpce/common/StringConstants.java | 5 +- .../common/fixedflex/GridConstant.java | 2 +- .../transportpce/pce/PcePathDescription.java | 9 +- .../transportpce/pce/graph/PceGraph.java | 3 +- .../pce/graph/PostAlgoPathValidator.java | 9 +- .../pce/networkanalyzer/PceCalculation.java | 439 ++--- .../pce/networkanalyzer/PceLink.java | 12 +- .../pce/networkanalyzer/PceOpticalNode.java | 4 +- .../pce/networkanalyzer/PceOtnNode.java | 56 +- .../pce/PcePathDescriptionTests.java | 2 +- .../pce/PceSendingPceRPCsTest.java | 20 +- .../transportpce/pce/graph/PceGraphTest.java | 2 +- .../networkanalyzer/PceCalculationTest.java | 60 +- .../pce/networkanalyzer/PceOtnNodeTest.java | 6 +- .../transportpce/pce/utils/PceTestData.java | 5 +- .../sample_configs/honeynode-otntopo400G.json | 354 +++++ .../honeynode-otntopo400GwithODUC4.json | 620 ++++++++ .../honeynode-otntopo400GwithOTUC4.json | 392 +++++ tests/sample_configs/honeynode-topo400G.json | 1416 ++++++++--------- tests/sample_configs/pce_portmapping_121.json | 35 +- tests/sample_configs/pce_portmapping_71.json | 420 +++-- tests/transportpce_tests/7.1/test_pce_400G.py | 148 +- 22 files changed, 2915 insertions(+), 1104 deletions(-) create mode 100644 tests/sample_configs/honeynode-otntopo400G.json create mode 100644 tests/sample_configs/honeynode-otntopo400GwithODUC4.json create mode 100644 tests/sample_configs/honeynode-otntopo400GwithOTUC4.json diff --git a/common/src/main/java/org/opendaylight/transportpce/common/StringConstants.java b/common/src/main/java/org/opendaylight/transportpce/common/StringConstants.java index d5a7932f4..b1aa101d9 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/StringConstants.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/StringConstants.java @@ -25,9 +25,11 @@ public final class StringConstants { public static final String PP_TOKEN = "PP"; - public static final String SERVICE_TYPE_100GE = "100GE"; + public static final String SERVICE_TYPE_100GE_T = "100GEt"; + public static final String SERVICE_TYPE_100GE_M = "100GEm"; public static final String SERVICE_TYPE_OTU4 = "OTU4"; + public static final String SERVICE_TYPE_OTUC4 = "OTUC4"; public static final String SERVICE_TYPE_400GE = "400GE"; @@ -36,6 +38,7 @@ public final class StringConstants { public static final String SERVICE_TYPE_1GE = "1GE"; public static final String SERVICE_TYPE_ODU4 = "ODU4"; + public static final String SERVICE_TYPE_ODUC4 = "ODUC4"; private StringConstants() { // hiding the default constructor diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java index d9f727171..4288421f4 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java @@ -42,7 +42,7 @@ public final class GridConstant { * Map for associate service type with nb slots. */ public static final Map SPECTRAL_WIDTH_SLOT_NUMBER_MAP = Map.of( - StringConstants.SERVICE_TYPE_100GE, NB_SLOTS_100G, + StringConstants.SERVICE_TYPE_100GE_T, NB_SLOTS_100G, StringConstants.SERVICE_TYPE_400GE, NB_SLOTS_400G, StringConstants.SERVICE_TYPE_OTU4, NB_SLOTS_100G); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java index 9e5fc4bcd..c5967f278 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java @@ -93,15 +93,18 @@ public class PcePathDescription { .setAToZ(atozMap); switch (rc.getServiceType()) { case StringConstants.SERVICE_TYPE_400GE: - case StringConstants.SERVICE_TYPE_100GE: + case StringConstants.SERVICE_TYPE_OTUC4: + case StringConstants.SERVICE_TYPE_100GE_T: case StringConstants.SERVICE_TYPE_OTU4: atoZDirectionBldr.setAToZMaxFrequency(new FrequencyTHz(rc.getMaxFreq())); atoZDirectionBldr.setAToZMinFrequency(new FrequencyTHz(rc.getMinFreq())); atoZDirectionBldr.setAToZWavelengthNumber(Uint32.valueOf(rc.getResultWavelength())); break; + case StringConstants.SERVICE_TYPE_100GE_M: case StringConstants.SERVICE_TYPE_10GE: case StringConstants.SERVICE_TYPE_1GE: case StringConstants.SERVICE_TYPE_ODU4: + case StringConstants.SERVICE_TYPE_ODUC4: if (rc.getResultTribSlot() != null && rc.getResultTribPort() != null) { @SuppressWarnings("unchecked") List tribSlotList = (List) rc.getResultTribSlot().values().toArray()[0]; @@ -132,12 +135,14 @@ public class PcePathDescription { .setZToA(ztoaMap); switch (rc.getServiceType()) { case StringConstants.SERVICE_TYPE_400GE: - case StringConstants.SERVICE_TYPE_100GE: + case StringConstants.SERVICE_TYPE_OTUC4: + case StringConstants.SERVICE_TYPE_100GE_T: case StringConstants.SERVICE_TYPE_OTU4: ztoADirectionBldr.setZToAMaxFrequency(new FrequencyTHz(rc.getMaxFreq())); ztoADirectionBldr.setZToAMinFrequency(new FrequencyTHz(rc.getMinFreq())); ztoADirectionBldr.setZToAWavelengthNumber(Uint32.valueOf(rc.getResultWavelength())); break; + case StringConstants.SERVICE_TYPE_100GE_M: case StringConstants.SERVICE_TYPE_10GE: case StringConstants.SERVICE_TYPE_1GE: case StringConstants.SERVICE_TYPE_ODU4: diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java index 2b199309e..918d1b6e2 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java @@ -110,7 +110,8 @@ public class PceGraph { shortestPathAtoZ = new ArrayList<>(pathAtoZ); switch (serviceType) { - case StringConstants.SERVICE_TYPE_100GE: + case StringConstants.SERVICE_TYPE_100GE_T: + case StringConstants.SERVICE_TYPE_OTUC4: case StringConstants.SERVICE_TYPE_400GE: case StringConstants.SERVICE_TYPE_OTU4: LOG.info( diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java index 171af2f7c..3462effa2 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java @@ -59,11 +59,12 @@ public class PostAlgoPathValidator { SpectrumAssignment spectrumAssignment = null; //variable to deal with 1GE (Nb=1) and 10GE (Nb=10) cases switch (serviceType) { + case StringConstants.SERVICE_TYPE_OTUC4: case StringConstants.SERVICE_TYPE_400GE: spectralWidthSlotNumber = GridConstant.SPECTRAL_WIDTH_SLOT_NUMBER_MAP .getOrDefault(serviceType, GridConstant.NB_SLOTS_400G); //fallthrough - case StringConstants.SERVICE_TYPE_100GE: + case StringConstants.SERVICE_TYPE_100GE_T: case StringConstants.SERVICE_TYPE_OTU4: spectrumAssignment = getSpectrumAssignment(path, allPceNodes, spectralWidthSlotNumber); @@ -113,8 +114,9 @@ public class PostAlgoPathValidator { pceResult.setRC(ResponseCodes.RESPONSE_OK); pceResult.setLocalCause(PceResult.LocalCause.NONE); break; + case StringConstants.SERVICE_TYPE_100GE_M: case StringConstants.SERVICE_TYPE_10GE: - tribSlotNb = 8; + tribSlotNb = StringConstants.SERVICE_TYPE_10GE.equals(serviceType) ? 8 : 20; //fallthrough case StringConstants.SERVICE_TYPE_1GE: pceResult.setRC(ResponseCodes.RESPONSE_FAILED); @@ -132,8 +134,9 @@ public class PostAlgoPathValidator { } break; case StringConstants.SERVICE_TYPE_ODU4: + case StringConstants.SERVICE_TYPE_ODUC4: pceResult.setRC(ResponseCodes.RESPONSE_OK); - LOG.info("In PostAlgoPathValidator: ODU4 path found {}", path); + LOG.info("In PostAlgoPathValidator: ODU4/ODUC4 path found {}", path); break; default: pceResult.setRC(ResponseCodes.RESPONSE_FAILED); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index c94b2e0aa..5fad6c02c 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -29,10 +29,13 @@ import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mc.capabilities.McCapabilities; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; @@ -134,45 +137,11 @@ public class PceCalculation { serviceRate = input.getServiceAEnd().getServiceRate().toJava(); LOG.info("parseInput: A and Z :[{}] and [{}]", anodeId, znodeId); - if (!(serviceFormatA.equals(serviceFormatZ))) { - LOG.info("parseInput: different service format for A and Z not handled, will use service format from Aend"); - } else if (serviceRate == 100L) { - switch (serviceFormatA) { - case "Ethernet": - case "OC": - serviceType = StringConstants.SERVICE_TYPE_100GE; - break; - case "OTU": - serviceType = StringConstants.SERVICE_TYPE_OTU4; - break; - case "ODU": - serviceType = StringConstants.SERVICE_TYPE_ODU4; - break; - default: - LOG.debug("parseInput: unsupported service type: Format {} Rate 100L", serviceFormatA); - break; - } - //switch(serviceRate) may seem a better option at first glance. - //But switching on Long or long is not directly possible in Java. - //And casting to int bumps the limit here. - //Passing by ENUM or String are possible alternatives. - //Maybe HashMap and similar options should also be considered here. - } else if ("Ethernet".equals(serviceFormatA)) { - //only rate 100L is currently supported except in Ethernet - if (serviceRate == 400L) { - serviceType = StringConstants.SERVICE_TYPE_400GE; - } else if (serviceRate == 10L) { - serviceType = StringConstants.SERVICE_TYPE_10GE; - } else if (serviceRate == 1L) { - serviceType = StringConstants.SERVICE_TYPE_1GE; - } else { - LOG.debug("parseInput: unsupported service type: Format Ethernet Rate {}", serviceRate); - } - } else { - LOG.debug("parseInput: unsupported service type: Format {} Rate {}", - serviceFormatA, serviceRate); - } + + setServiceType(); if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType) + || StringConstants.SERVICE_TYPE_ODUC4.equals(serviceType) + || StringConstants.SERVICE_TYPE_100GE_M.equals(serviceType) || StringConstants.SERVICE_TYPE_10GE.equals(serviceType) || StringConstants.SERVICE_TYPE_1GE.equals(serviceType)) { anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName(); @@ -187,30 +156,138 @@ public class PceCalculation { return true; } + private void setServiceType() { + if ("Ethernet".equals(serviceFormatA)) { + switch (serviceRate.intValue()) { + case 1: + serviceType = StringConstants.SERVICE_TYPE_1GE; + break; + case 10: + serviceType = StringConstants.SERVICE_TYPE_10GE; + break; + case 100: + serviceType = StringConstants.SERVICE_TYPE_100GE_T; + if (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()) + .getNodeInfo().getNodeType())) { + if (input.getServiceAEnd().getTxDirection() != null + && input.getServiceAEnd().getTxDirection().getPort() != null + && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null) { + String lcp = input.getServiceAEnd().getTxDirection().getPort().getPortName(); + if (portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp) != null) { + Mapping mapping = portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp); + if (PortQual.SwitchClient.getName().equals(mapping.getPortQual())) { + serviceType = StringConstants.SERVICE_TYPE_100GE_M; + } + } + } + } + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_400GE; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("OC".equals(serviceFormatA) && Long.valueOf(100L).equals(serviceRate)) { + serviceType = StringConstants.SERVICE_TYPE_100GE_T; + } + if ("OTU".equals(serviceFormatA)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_OTU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_OTUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("ODU".equals(serviceFormatA)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_ODU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_ODUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + } + private boolean readMdSal() { InstanceIdentifier nwInstanceIdentifier = null; - Network nw = null; - if (("OC".equals(serviceFormatA)) || ("OTU".equals(serviceFormatA)) - || ("Ethernet".equals(serviceFormatA) && ((serviceRate == 100L) || (serviceRate == 400L)))) { - LOG.info("readMdSal: network {}", NetworkUtils.OVERLAY_NETWORK_ID); - nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class) - .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).build(); - } else if ("ODU".equals(serviceFormatA) - || ("Ethernet".equals(serviceFormatA) && ((serviceRate == 10L) || (serviceRate == 1L)))) { - LOG.info("readMdSal: network {}", NetworkUtils.OTN_NETWORK_ID); - nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class) - .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))).build(); + switch (serviceType) { + case StringConstants.SERVICE_TYPE_100GE_T: + case StringConstants.SERVICE_TYPE_400GE: + case StringConstants.SERVICE_TYPE_OTU4: + case StringConstants.SERVICE_TYPE_OTUC4: + LOG.info("readMdSal: network {}", NetworkUtils.OVERLAY_NETWORK_ID); + nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).build(); + break; + case StringConstants.SERVICE_TYPE_100GE_M: + case StringConstants.SERVICE_TYPE_ODU4: + case StringConstants.SERVICE_TYPE_ODUC4: + case StringConstants.SERVICE_TYPE_10GE: + case StringConstants.SERVICE_TYPE_1GE: + LOG.info("readMdSal: network {}", NetworkUtils.OTN_NETWORK_ID); + nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))).build(); + break; + default: + LOG.warn("readMdSal: unknown service-type for service-rate {} and service-format {}", serviceRate, + serviceFormatA); + break; + } + + if (readTopology(nwInstanceIdentifier) != null) { + allNodes = readTopology(nwInstanceIdentifier).nonnullNode().values().stream().sorted((n1, n2) + -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue())).collect(Collectors.toList()); + Network1 nw1 = readTopology(nwInstanceIdentifier).augmentation(Network1.class); + if (nw1 != null) { + allLinks = nw1.nonnullLink().values().stream().sorted((l1, l2) + -> l1.getSource().getSourceTp().toString().compareTo(l2.getSource().getSourceTp().toString())) + .collect(Collectors.toList()); + } else { + LOG.warn("no otn links in otn-topology"); + } + if (allNodes == null || allNodes.isEmpty()) { + LOG.error("readMdSal: no nodes "); + return false; + } + LOG.info("readMdSal: network nodes: {} nodes added", allNodes.size()); + LOG.debug("readMdSal: network nodes: {} nodes added", allNodes); + + if (allLinks == null || allLinks.isEmpty()) { + LOG.error("readMdSal: no links "); + return false; + } + LOG.info("readMdSal: network links: {} links added", allLinks.size()); + LOG.debug("readMdSal: network links: {} links added", allLinks); + + return true; } else { - LOG.info("readMdSal: service-rate {} / service-format not handled {}", serviceRate, serviceFormatA); + LOG.error("readMdSal: network is null: {}", nwInstanceIdentifier); return false; } + } + private Network readTopology(InstanceIdentifier nwInstanceIdentifier) { + Network nw = null; try { Optional nwOptional = networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, nwInstanceIdentifier).get(); if (nwOptional.isPresent()) { nw = nwOptional.get(); LOG.debug("readMdSal: network nodes: nwOptional.isPresent = true {}", nw); + networkTransactionService.close(); } } catch (InterruptedException | ExecutionException e) { LOG.error("readMdSal: Error reading topology {}", nwInstanceIdentifier); @@ -219,46 +296,17 @@ public class PceCalculation { throw new RuntimeException( "readMdSal: Error reading from operational store, topology : " + nwInstanceIdentifier + " :" + e); } - networkTransactionService.close(); - - if (nw == null) { - LOG.error("readMdSal: network is null: {}", nwInstanceIdentifier); - return false; - } - allNodes = nw.nonnullNode().values().stream().sorted((n1, n2) - -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue())).collect(Collectors.toList()); - Network1 nw1 = nw.augmentation(Network1.class); - if (nw1 != null) { - allLinks = nw1.nonnullLink().values().stream().sorted((l1, l2) - -> l1.getSource().getSourceTp().toString().compareTo(l2.getSource().getSourceTp().toString())) - .collect(Collectors.toList()); - } else { - LOG.warn("no otn links in otn-topology"); - } - if (allNodes == null || allNodes.isEmpty()) { - LOG.error("readMdSal: no nodes "); - return false; - } - LOG.info("readMdSal: network nodes: {} nodes added", allNodes.size()); - LOG.debug("readMdSal: network nodes: {} nodes added", allNodes); - - if (allLinks == null || allLinks.isEmpty()) { - LOG.error("readMdSal: no links "); - return false; - } - LOG.info("readMdSal: network links: {} links added", allLinks.size()); - LOG.debug("readMdSal: network links: {} links added", allLinks); - - return true; + return nw; } private boolean analyzeNw() { LOG.debug("analyzeNw: allNodes size {}, allLinks size {}", allNodes.size(), allLinks.size()); - if (StringConstants.SERVICE_TYPE_100GE.equals(serviceType) + if (StringConstants.SERVICE_TYPE_100GE_T.equals(serviceType) || StringConstants.SERVICE_TYPE_OTU4.equals(serviceType) - || StringConstants.SERVICE_TYPE_400GE.equals(serviceType)) { + || StringConstants.SERVICE_TYPE_400GE.equals(serviceType) + || StringConstants.SERVICE_TYPE_OTUC4.equals(serviceType)) { // 100GE service and OTU4 service are handled at the openroadm-topology layer for (Node node : allNodes) { validateNode(node); @@ -380,117 +428,22 @@ public class PceCalculation { return false; } - if (StringConstants.SERVICE_TYPE_100GE.equals(serviceType) - || StringConstants.SERVICE_TYPE_OTU4.equals(serviceType) - || StringConstants.SERVICE_TYPE_400GE.equals(serviceType)) { - // 100GE or 400GE or OTU4 services are handled at WDM Layer - PceLink pcelink = new PceLink(link, source, dest); - if (!pcelink.isValid()) { - dropOppositeLink(link); - LOG.error(" validateLink: Link is ignored due errors in network data or in opposite link"); - return false; - } - LinkId linkId = pcelink.getLinkId(); - if (validateLinkConstraints(pcelink).equals(ConstraintTypes.HARD_EXCLUDE)) { - dropOppositeLink(link); - LOG.debug("validateLink: constraints : link is ignored == {}", linkId.getValue()); - return false; - } - switch (pcelink.getlinkType()) { - case ROADMTOROADM: - case EXPRESSLINK: - allPceLinks.put(linkId, pcelink); - source.addOutgoingLink(pcelink); - LOG.debug("validateLink: {}-LINK added to allPceLinks {}", - pcelink.getlinkType(), pcelink); - break; - case ADDLINK: - pcelink.setClient(source.getRdmSrgClient(pcelink.getSourceTP().toString())); - addLinks.add(pcelink); - LOG.debug("validateLink: ADD-LINK saved {}", pcelink); - break; - case DROPLINK: - pcelink.setClient(dest.getRdmSrgClient(pcelink.getDestTP().toString())); - dropLinks.add(pcelink); - LOG.debug("validateLink: DROP-LINK saved {}", pcelink); - break; - case XPONDERINPUT: - // store separately all SRG links directly - azSrgs.add(sourceId); - // connected to A/Z - if (!dest.checkTP(pcelink.getDestTP().toString())) { - LOG.debug( - "validateLink: XPONDER-INPUT is rejected as NW port is busy - {} ", pcelink); - return false; - } - if (dest.getXpdrClient(pcelink.getDestTP().toString()) != null) { - pcelink.setClient(dest.getXpdrClient(pcelink.getDestTP().toString())); - } - allPceLinks.put(linkId, pcelink); - source.addOutgoingLink(pcelink); - LOG.debug("validateLink: XPONDER-INPUT link added to allPceLinks {}", pcelink); - break; - // does it mean XPONDER==>>SRG ? - case XPONDEROUTPUT: - // store separately all SRG links directly - azSrgs.add(destId); - // connected to A/Z - if (!source.checkTP(pcelink.getSourceTP().toString())) { - LOG.debug( - "validateLink: XPONDER-OUTPUT is rejected as NW port is busy - {} ", pcelink); - return false; - } - if (source.getXpdrClient(pcelink.getSourceTP().toString()) != null) { - pcelink.setClient(source.getXpdrClient(pcelink.getSourceTP().toString())); - } - allPceLinks.put(linkId, pcelink); - source.addOutgoingLink(pcelink); - LOG.debug("validateLink: XPONDER-OUTPUT link added to allPceLinks {}", pcelink); - break; - default: - LOG.warn("validateLink: link type is not supported {}", pcelink); - } - return true; - - } else if ((StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)) - || (StringConstants.SERVICE_TYPE_10GE.equals(serviceType)) - || (StringConstants.SERVICE_TYPE_1GE.equals(serviceType))) { - // ODU4, 1GE and 10GE services relying on ODU2, ODU2e or ODU0 services are handled at OTN layer - PceLink pceOtnLink = new PceLink(link, source, dest); - - if (!pceOtnLink.isOtnValid(link, serviceType)) { - dropOppositeLink(link); - LOG.error(" validateLink: Link is ignored due errors in network data or in opposite link"); - return false; - } - - LinkId linkId = pceOtnLink.getLinkId(); - if (validateLinkConstraints(pceOtnLink).equals(ConstraintTypes.HARD_EXCLUDE)) { - dropOppositeLink(link); - LOG.debug("validateLink: constraints : link is ignored == {}", linkId.getValue()); + switch (serviceType) { + case StringConstants.SERVICE_TYPE_100GE_T: + case StringConstants.SERVICE_TYPE_OTU4: + case StringConstants.SERVICE_TYPE_OTUC4: + case StringConstants.SERVICE_TYPE_400GE: + return processPceLink(link, sourceId, destId, source, dest); + case StringConstants.SERVICE_TYPE_ODU4: + case StringConstants.SERVICE_TYPE_10GE: + case StringConstants.SERVICE_TYPE_100GE_M: + case StringConstants.SERVICE_TYPE_ODUC4: + case StringConstants.SERVICE_TYPE_1GE: + return processPceOtnLink(link, source, dest); + default: + LOG.error(" validateLink: Unmanaged service type {}", serviceType); return false; - } - - switch (pceOtnLink.getlinkType()) { - case OTNLINK: - if (dest.getXpdrClient(pceOtnLink.getDestTP().toString()) != null) { - pceOtnLink.setClient(dest.getXpdrClient(pceOtnLink.getDestTP().toString())); - } - - allPceLinks.put(linkId, pceOtnLink); - source.addOutgoingLink(pceOtnLink); - LOG.info("validateLink: OTN-LINK added to allPceLinks {}", pceOtnLink); - break; - default: - LOG.warn("validateLink: link type is not supported {}", pceOtnLink); - } - return true; - - } else { - LOG.error(" validateLink: Unmanaged service type {}", serviceType); - return false; } - } private void validateNode(Node node) { @@ -662,6 +615,108 @@ public class PceCalculation { return true; } + private boolean processPceLink(Link link, NodeId sourceId, NodeId destId, PceNode source, PceNode dest) { + PceLink pcelink = new PceLink(link, source, dest); + if (!pcelink.isValid()) { + dropOppositeLink(link); + LOG.error(" validateLink: Link is ignored due errors in network data or in opposite link"); + return false; + } + LinkId linkId = pcelink.getLinkId(); + if (validateLinkConstraints(pcelink).equals(ConstraintTypes.HARD_EXCLUDE)) { + dropOppositeLink(link); + LOG.debug("validateLink: constraints : link is ignored == {}", linkId.getValue()); + return false; + } + switch (pcelink.getlinkType()) { + case ROADMTOROADM: + case EXPRESSLINK: + allPceLinks.put(linkId, pcelink); + source.addOutgoingLink(pcelink); + LOG.debug("validateLink: {}-LINK added to allPceLinks {}", + pcelink.getlinkType(), pcelink); + break; + case ADDLINK: + pcelink.setClient(source.getRdmSrgClient(pcelink.getSourceTP().toString())); + addLinks.add(pcelink); + LOG.debug("validateLink: ADD-LINK saved {}", pcelink); + break; + case DROPLINK: + pcelink.setClient(dest.getRdmSrgClient(pcelink.getDestTP().toString())); + dropLinks.add(pcelink); + LOG.debug("validateLink: DROP-LINK saved {}", pcelink); + break; + case XPONDERINPUT: + // store separately all SRG links directly + azSrgs.add(sourceId); + // connected to A/Z + if (!dest.checkTP(pcelink.getDestTP().toString())) { + LOG.debug( + "validateLink: XPONDER-INPUT is rejected as NW port is busy - {} ", pcelink); + return false; + } + if (dest.getXpdrClient(pcelink.getDestTP().toString()) != null) { + pcelink.setClient(dest.getXpdrClient(pcelink.getDestTP().toString())); + } + allPceLinks.put(linkId, pcelink); + source.addOutgoingLink(pcelink); + LOG.debug("validateLink: XPONDER-INPUT link added to allPceLinks {}", pcelink); + break; + // does it mean XPONDER==>>SRG ? + case XPONDEROUTPUT: + // store separately all SRG links directly + azSrgs.add(destId); + // connected to A/Z + if (!source.checkTP(pcelink.getSourceTP().toString())) { + LOG.debug( + "validateLink: XPONDER-OUTPUT is rejected as NW port is busy - {} ", pcelink); + return false; + } + if (source.getXpdrClient(pcelink.getSourceTP().toString()) != null) { + pcelink.setClient(source.getXpdrClient(pcelink.getSourceTP().toString())); + } + allPceLinks.put(linkId, pcelink); + source.addOutgoingLink(pcelink); + LOG.debug("validateLink: XPONDER-OUTPUT link added to allPceLinks {}", pcelink); + break; + default: + LOG.warn("validateLink: link type is not supported {}", pcelink); + } + return true; + } + + private boolean processPceOtnLink(Link link, PceNode source, PceNode dest) { + PceLink pceOtnLink = new PceLink(link, source, dest); + + if (!pceOtnLink.isOtnValid(link, serviceType)) { + dropOppositeLink(link); + LOG.error(" validateLink: Link is ignored due errors in network data or in opposite link"); + return false; + } + + LinkId linkId = pceOtnLink.getLinkId(); + if (validateLinkConstraints(pceOtnLink).equals(ConstraintTypes.HARD_EXCLUDE)) { + dropOppositeLink(link); + LOG.debug("validateLink: constraints : link is ignored == {}", linkId.getValue()); + return false; + } + + switch (pceOtnLink.getlinkType()) { + case OTNLINK: + if (dest.getXpdrClient(pceOtnLink.getDestTP().toString()) != null) { + pceOtnLink.setClient(dest.getXpdrClient(pceOtnLink.getDestTP().toString())); + } + + allPceLinks.put(linkId, pceOtnLink); + source.addOutgoingLink(pceOtnLink); + LOG.info("validateLink: OTN-LINK added to allPceLinks {}", pceOtnLink); + break; + default: + LOG.warn("validateLink: link type is not supported {}", pceOtnLink); + } + return true; + } + public PceNode getaendPceNode() { return aendPceNode; } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java index 0da2abcc5..807b4baac 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java @@ -329,7 +329,13 @@ public class PceLink implements Serializable { long neededBW; OtnLinkType neededType = null; switch (serviceType) { - + case "ODUC4": + if (this.usedBandwidth != 0L) { + return false; + } + neededBW = 400000L; + neededType = OtnLinkType.OTUC4; + break; case "ODU4": if (this.usedBandwidth != 0L) { return false; @@ -347,6 +353,10 @@ public class PceLink implements Serializable { case "ODU1": neededBW = 2500L; break; + case "100GEm": + neededBW = 100000L; + neededType = OtnLinkType.ODUC4; + break; case "10GE": neededBW = 10000L; neededType = OtnLinkType.ODTU4; diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java index 38c220461..93c358727 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java @@ -29,7 +29,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH; -import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOTUCnODUCn; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOtsiOtsigroup; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; 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; @@ -173,7 +173,7 @@ public class PceOpticalNode implements PceNode { } switch (this.serviceType) { case "400GE": - if (mapping.getSupportedInterfaceCapability().contains(IfOTUCnODUCn.class)) { + if (mapping.getSupportedInterfaceCapability().contains(IfOtsiOtsigroup.class)) { return true; } else { return false; diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java index 736539d94..445e3f2e3 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java @@ -27,6 +27,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODTU4TsAllocated; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODTUCnTs; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.SwitchingPools; @@ -34,6 +35,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2e; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GEODU0; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU4ODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOtsiOtsigroup; 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.topology.rev180226.TpId; @@ -127,7 +129,8 @@ public class PceOtnNode implements PceNode { .TerminationPoint1.class); //TODO many nested if-structures below, this needs to be reworked if (OpenroadmTpType.XPONDERNETWORK.equals(ocnTp1.getTpType()) - && StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)) { + && (StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType) + || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType))) { TerminationPoint1 ontTp1; if (tp.augmentation(TerminationPoint1.class) != null) { ontTp1 = tp.augmentation(TerminationPoint1.class); @@ -142,7 +145,8 @@ public class PceOtnNode implements PceNode { node.getNodeId().getValue()); } } else if (OpenroadmTpType.XPONDERNETWORK.equals(ocnTp1.getTpType()) - && (this.otnServiceType.equals(StringConstants.SERVICE_TYPE_10GE) + && (StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType) + || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType) || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))) { TerminationPoint1 ontTp1; if (tp.augmentation(TerminationPoint1.class) != null) { @@ -150,10 +154,12 @@ public class PceOtnNode implements PceNode { } else { continue; } - if (StringConstants.SERVICE_TYPE_10GE.equals(otnServiceType) - && checkOdtuTTPforLoOduCreation(ontTp1, 10) - || StringConstants.SERVICE_TYPE_1GE.equals(otnServiceType) - && checkOdtuTTPforLoOduCreation(ontTp1, 1)) { + if ((StringConstants.SERVICE_TYPE_10GE.equals(otnServiceType) + && checkOdtuTTPforLoOduCreation(ontTp1, 10)) + || (StringConstants.SERVICE_TYPE_1GE.equals(otnServiceType) + && checkOdtuTTPforLoOduCreation(ontTp1, 1)) + || (StringConstants.SERVICE_TYPE_100GE_M.equals(otnServiceType) + && checkOdtuTTPforLoOduCreation(ontTp1, 20))) { LOG.info("TP {} of XPONDER {} is validated", tp.getTpId(), node.getNodeId().getValue()); this.availableXpdrNWTps.add(tp.getTpId()); } else { @@ -163,6 +169,9 @@ public class PceOtnNode implements PceNode { } else if (StringConstants.SERVICE_TYPE_1GE.equals(otnServiceType)) { LOG.error("TP {} of {} does not allow ODU0 termination creation", tp.getTpId().getValue(), node.getNodeId().getValue()); + } else if (StringConstants.SERVICE_TYPE_100GE_M.equals(otnServiceType)) { + LOG.error("TP {} of {} does not allow ODU4 termination creation", tp.getTpId().getValue(), + node.getNodeId().getValue()); } else { LOG.error("TP {} of {} does not allow any termination creation", tp.getTpId().getValue(), node.getNodeId().getValue()); @@ -170,7 +179,8 @@ public class PceOtnNode implements PceNode { } } else if (OpenroadmTpType.XPONDERCLIENT.equals(ocnTp1.getTpType()) && (StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType) - || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))) { + || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType) + || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))) { TerminationPoint1 ontTp1; if (tp.augmentation(TerminationPoint1.class) != null) { ontTp1 = tp.augmentation(TerminationPoint1.class); @@ -187,8 +197,10 @@ public class PceOtnNode implements PceNode { } } - if ((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType) && mode.equals("AZ")) + if (((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType) + || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType)) && mode.equals("AZ")) || ((StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType) + || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType) || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType)) && ((mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1)) || (mode.equals("intermediate") && checkSwPool(null, availableXpdrNWTps, 0, 2))) @@ -244,9 +256,10 @@ public class PceOtnNode implements PceNode { private boolean checkTpForOdtuTermination(TerminationPoint1 ontTp1) { for (SupportedInterfaceCapability sic : ontTp1.getTpSupportedInterfaces().getSupportedInterfaceCapability() .values()) { - LOG.debug("in checkTpForOduTermination - sic = {}", sic.getIfCapType()); - if (sic.getIfCapType().equals(IfOCHOTU4ODU4.class) - && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() == null) { + LOG.info("in checkTpForOduTermination - sic = {}", sic.getIfCapType()); + if ((sic.getIfCapType().equals(IfOCHOTU4ODU4.class) || sic.getIfCapType().equals(IfOtsiOtsigroup.class)) + && (ontTp1.getXpdrTpPortConnectionAttributes() == null + || ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() == null)) { return true; } } @@ -257,9 +270,13 @@ public class PceOtnNode implements PceNode { if (ontTp1.getXpdrTpPortConnectionAttributes() != null && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() != null && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null - && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() + && (ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() .stream().findFirst().get().getOdtuType() .equals(ODTU4TsAllocated.class) + || + ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() + .stream().findFirst().get().getOdtuType() + .equals(ODTUCnTs.class)) && !ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values() .stream().findFirst().get().getTpnPool().isEmpty() && (ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb)) { @@ -284,7 +301,8 @@ public class PceOtnNode implements PceNode { return true; } break; - case StringConstants.SERVICE_TYPE_100GE: + case StringConstants.SERVICE_TYPE_100GE_T: + case StringConstants.SERVICE_TYPE_100GE_M: if (sic.getIfCapType().equals(If100GEODU4.class)) { return true; } @@ -370,9 +388,12 @@ public class PceOtnNode implements PceNode { .collect(Collectors.toList()); for (TerminationPoint tp : networkTpList) { - if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null - && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() - .values().stream().findFirst().get().getOdtuType().equals(ODTU4TsAllocated.class)) { + if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() != null + && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null + && (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() + .values().stream().findFirst().get().getOdtuType().equals(ODTU4TsAllocated.class) + || tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() + .values().stream().findFirst().get().getOdtuType().equals(ODTUCnTs.class))) { @Nullable List tpnPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() .getOdtuTpnPool().values().stream().findFirst().get().getTpnPool(); @@ -394,7 +415,8 @@ public class PceOtnNode implements PceNode { .collect(Collectors.toList()); for (TerminationPoint tp : networkTpList) { - if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getTsPool() != null) { + if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() != null + && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getTsPool() != null) { @Nullable List tsPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() .getTsPool(); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java index 6ea972838..56dd1f14f 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java @@ -71,7 +71,7 @@ public class PcePathDescriptionTests extends AbstractTest { pceResult = new PceResult(); pceResult.setRC("200"); pceResult.setRate(Long.valueOf(1)); - pceResult.setServiceType(StringConstants.SERVICE_TYPE_100GE); + pceResult.setServiceType(StringConstants.SERVICE_TYPE_100GE_T); Map map = Map.of(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1"), pceLink); pcePathDescription = new PcePathDescription(List.of(pceLink), map, pceResult); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java index 5ce1b63f7..cc2f80d04 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java @@ -8,6 +8,9 @@ package org.opendaylight.transportpce.pce; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -25,6 +28,14 @@ import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl; import org.opendaylight.transportpce.pce.utils.PceTestData; import org.opendaylight.transportpce.pce.utils.PceTestUtils; import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; @RunWith(MockitoJUnitRunner.class) @@ -32,6 +43,7 @@ public class PceSendingPceRPCsTest extends AbstractTest { private PceSendingPceRPCs pceSendingPceRPCs; private NetworkTransactionImpl networkTransaction; + private Mapping mapping; @Mock private YangParserFactory yangParserFactory; @Mock @@ -52,6 +64,12 @@ public class PceSendingPceRPCsTest extends AbstractTest { "mylogin", "mypassword", getDataStoreContextUtil().getBindingDOMCodecServices()); pceSendingPceRPCs = new PceSendingPceRPCs(PceTestData.getPCE_test1_request_54(), networkTransaction, gnpyConsumer, portMapping); + mapping = new MappingBuilder().setLogicalConnectionPoint("logicalConnectionPoint").setPortQual("xpdr-client") + .build(); + NodeInfo info = new NodeInfoBuilder().setNodeType(NodeTypes.Xpdr).build(); + Nodes node = new NodesBuilder().withKey(new NodesKey("node")).setNodeId("node").setNodeInfo(info).build(); + when(portMapping.getMapping(anyString(), anyString())).thenReturn(mapping); + when(portMapping.getNode(anyString())).thenReturn(node); } @Test @@ -66,7 +84,7 @@ public class PceSendingPceRPCsTest extends AbstractTest { pceSendingPceRPCs = new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"), networkTransaction, gnpyConsumer, portMapping); - + when(portMapping.getMapping(anyString(), anyString())).thenReturn(mapping); pceSendingPceRPCs.pathComputation(); Assert.assertTrue(gnpyConsumer.isAvailable()); jerseyServer.tearDown(); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java index 1b89575f8..8eda89c46 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java @@ -111,7 +111,7 @@ public class PceGraphTest { pceGraph = new PceGraph(pceOpticalNode, pceOpticalNode2, allPceNodes, pceHardConstraints, null, rc, - StringConstants.SERVICE_TYPE_100GE); + StringConstants.SERVICE_TYPE_100GE_T); Assert.assertEquals(pceGraph.calcPath(), false); } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java index 46c78cab7..961814b30 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java @@ -7,11 +7,18 @@ */ package org.opendaylight.transportpce.pce.networkanalyzer; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + import java.util.concurrent.ExecutionException; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.transportpce.common.StringConstants; +import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.RequestProcessor; import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc; @@ -20,12 +27,26 @@ import org.opendaylight.transportpce.pce.utils.PceTestUtils; import org.opendaylight.transportpce.pce.utils.TransactionUtils; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput; - +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; +//import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; + +@RunWith(MockitoJUnitRunner.StrictStubs.class) public class PceCalculationTest extends AbstractTest { private PceCalculation pceCalculation; private PceConstraintsCalc pceConstraintsCalc; private PceResult pceResult = new PceResult(); + private Mapping mapping; + + @Mock + private PortMapping portMapping; // setup object @Before @@ -33,24 +54,27 @@ public class PceCalculationTest extends AbstractTest { pceResult.setRC("200"); PceTestUtils.writeNetworkIntoDataStore(this.getDataBroker(), this.getDataStoreContextUtil(), TransactionUtils.getNetworkForSpanLoss()); - pceConstraintsCalc = new PceConstraintsCalc(PceTestData.getPCERequest(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()))); - - pceCalculation = new PceCalculation( - PceTestData.getPCERequest(), - new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())), - pceConstraintsCalc.getPceHardConstraints(), - pceConstraintsCalc.getPceSoftConstraints(), - pceResult, - null); + mapping = new MappingBuilder().setLogicalConnectionPoint("logicalConnectionPoint").setPortQual("xpdr-client") + .build(); + NodeInfo info = new NodeInfoBuilder().setNodeType(NodeTypes.Xpdr).build(); + Nodes node = new NodesBuilder().withKey(new NodesKey("node")).setNodeId("node").setNodeInfo(info).build(); + when(portMapping.getMapping(anyString(), anyString())).thenReturn(mapping); + when(portMapping.getNode(anyString())).thenReturn(node); } @Test public void testPceCalculationValues() { - + pceCalculation = new PceCalculation( + PceTestData.getPCERequest(), + new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())), + pceConstraintsCalc.getPceHardConstraints(), + pceConstraintsCalc.getPceSoftConstraints(), + pceResult, + portMapping); pceCalculation.retrievePceNetwork(); - Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE, pceCalculation.getServiceType()); + Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE_T, pceCalculation.getServiceType()); Assert.assertNotNull(pceCalculation.getReturnStructure()); Assert.assertNull(pceCalculation.getaendPceNode()); @@ -59,15 +83,14 @@ public class PceCalculationTest extends AbstractTest { @Test public void testPceCalculationValues2() { - pceCalculation = new PceCalculation( PceTestData.getPathComputationRequestInputWithCoRoutingOrGeneral(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())), pceConstraintsCalc.getPceHardConstraints(), pceConstraintsCalc.getPceSoftConstraints(), - pceResult, null); + pceResult, portMapping); pceCalculation.retrievePceNetwork(); - Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE, pceCalculation.getServiceType()); + Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE_T, pceCalculation.getServiceType()); Assert.assertNotNull(pceCalculation.getReturnStructure()); Assert.assertNull(pceCalculation.getaendPceNode()); @@ -76,20 +99,17 @@ public class PceCalculationTest extends AbstractTest { @Test public void testPceCalculationValues42() { - PathComputationRequestInput input = PceTestData.getPathComputationRequestInputWithCoRoutingOrGeneral2(); pceConstraintsCalc = new PceConstraintsCalc(input, new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()))); - pceCalculation = new PceCalculation( PceTestData.getPCE_test3_request_54(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())), pceConstraintsCalc.getPceHardConstraints(), pceConstraintsCalc.getPceSoftConstraints(), - pceResult, null); - + pceResult, portMapping); pceCalculation.retrievePceNetwork(); -// Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE, pceCalculation.getServiceType()); + Assert.assertEquals(StringConstants.SERVICE_TYPE_100GE_T, pceCalculation.getServiceType()); Assert.assertNotNull(pceCalculation.getReturnStructure()); Assert.assertNull(pceCalculation.getaendPceNode()); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java index dee898e35..646fea65e 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java @@ -144,7 +144,7 @@ public class PceOtnNodeTest extends AbstractTest { @Test public void testIsPceOtnNodeValidNode() { pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.DEGREE, - new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE); + new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE_M); pceOtnNode.initXndrTps("AZ"); pceOtnNode.checkAvailableTribPort(); pceOtnNode.checkAvailableTribSlot(); @@ -157,7 +157,7 @@ public class PceOtnNodeTest extends AbstractTest { @Test public void testIsPceOtnNodeValidNodeTypeNull() { pceOtnNode = new PceOtnNode(node, null, - new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE); + new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE_M); pceOtnNode.initXndrTps("AZ"); pceOtnNode.checkAvailableTribPort(); pceOtnNode.checkAvailableTribSlot(); @@ -167,7 +167,7 @@ public class PceOtnNodeTest extends AbstractTest { @Test public void testIsPceOtnNodeValidNodeTypeDeg() { pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.DEGREE, - new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE); + new NodeId("optical"), ServiceFormat.OMS.getName(), StringConstants.SERVICE_TYPE_100GE_M); pceOtnNode.initXndrTps("AZ"); Assert.assertFalse("not valid node , its type isn't one of MUXPDR or SWITCH or TPDR" , pceOtnNode.isPceOtnNodeValid(pceOtnNode)); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java index 991a6cbc3..0db3c50f7 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java @@ -571,12 +571,15 @@ public final class PceTestData { ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder() .setRequestId("request 1") .build(); + ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceRate(Uint32.valueOf(0)) + .setServiceRate(Uint32.valueOf(100)) + .setServiceFormat(ServiceFormat.Ethernet) .setNodeId("XPONDER-1-2") .build(); ServiceZEnd serviceZEnd = new ServiceZEndBuilder() .setServiceRate(Uint32.valueOf(0)) + .setServiceFormat(ServiceFormat.Ethernet) .setNodeId("XPONDER-3-2") .build(); PathComputationRequestInput input = new PathComputationRequestInputBuilder() diff --git a/tests/sample_configs/honeynode-otntopo400G.json b/tests/sample_configs/honeynode-otntopo400G.json new file mode 100644 index 000000000..c23fb1b00 --- /dev/null +++ b/tests/sample_configs/honeynode-otntopo400G.json @@ -0,0 +1,354 @@ +{ + "network": [ + { + "network-id": "otn-topology", + "network-types": { + "org-openroadm-common-network:openroadm-common-network": {} + }, + "node": [ + { + "node-id": "XPDR-A2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-A2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/sample_configs/honeynode-otntopo400GwithODUC4.json b/tests/sample_configs/honeynode-otntopo400GwithODUC4.json new file mode 100644 index 000000000..5d69ad00f --- /dev/null +++ b/tests/sample_configs/honeynode-otntopo400GwithODUC4.json @@ -0,0 +1,620 @@ +{ + "network": [ + { + "network-id": "otn-topology", + "network-types": { + "org-openroadm-common-network:openroadm-common-network": {} + }, + "node": [ + { + "node-id": "XPDR-A2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-A2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODUCn", + "ts-pool": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 15, + 16, + 13, + 14, + 19, + 20, + 17, + 18, + 11, + 12, + 31, + 32, + 29, + 30, + 35, + 36, + 33, + 34, + 23, + 24, + 21, + 22, + 27, + 28, + 25, + 26, + 47, + 48, + 45, + 46, + 51, + 52, + 49, + 50, + 39, + 40, + 37, + 38, + 43, + 44, + 41, + 42, + 63, + 64, + 61, + 62, + 67, + 68, + 65, + 66, + 55, + 56, + 53, + 54, + 59, + 60, + 57, + 58, + 79, + 80, + 77, + 78, + 71, + 72, + 69, + 70, + 75, + 76, + 73, + 74 + ], + "odtu-tpn-pool": [ + { + "odtu-type": "org-openroadm-otn-common-types:ODTUCn.ts", + "tpn-pool": [ + 1, + 3, + 2, + 4 + ] + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODUCn", + "ts-pool": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 15, + 16, + 13, + 14, + 19, + 20, + 17, + 18, + 11, + 12, + 31, + 32, + 29, + 30, + 35, + 36, + 33, + 34, + 23, + 24, + 21, + 22, + 27, + 28, + 25, + 26, + 47, + 48, + 45, + 46, + 51, + 52, + 49, + 50, + 39, + 40, + 37, + 38, + 43, + 44, + 41, + 42, + 63, + 64, + 61, + 62, + 67, + 68, + 65, + 66, + 55, + 56, + 53, + 54, + 59, + 60, + 57, + 58, + 79, + 80, + 77, + 78, + 71, + 72, + 69, + 70, + 75, + 76, + 73, + 74 + ], + "odtu-tpn-pool": [ + { + "odtu-type": "org-openroadm-otn-common-types:ODTUCn.ts", + "tpn-pool": [ + 1, + 3, + 2, + 4 + ] + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-A2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-C2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "0", + "org-openroadm-otn-network-topology:used-bandwidth": "400000", + "org-openroadm-common-network:link-type": "OTN-LINK", + "transportpce-topology:otn-link-type": "OTUC4", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1" + }, + { + "link-id": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-C2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-A2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "0", + "org-openroadm-otn-network-topology:used-bandwidth": "400000", + "org-openroadm-common-network:link-type": "OTN-LINK", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "transportpce-topology:otn-link-type": "OTUC4", + "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1" + }, + { + "link-id": "ODUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-A2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-C2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "400000", + "org-openroadm-otn-network-topology:used-bandwidth": "0", + "org-openroadm-common-network:link-type": "OTN-LINK", + "transportpce-topology:otn-link-type": "ODUC4", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:opposite-link": "ODUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1" + }, + { + "link-id": "ODUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-C2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-A2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "400000", + "org-openroadm-otn-network-topology:used-bandwidth": "0", + "org-openroadm-common-network:link-type": "OTN-LINK", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "transportpce-topology:otn-link-type": "ODUC4", + "org-openroadm-common-network:opposite-link": "ODUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1" + } + ] + } + ] +} diff --git a/tests/sample_configs/honeynode-otntopo400GwithOTUC4.json b/tests/sample_configs/honeynode-otntopo400GwithOTUC4.json new file mode 100644 index 000000000..74f345a35 --- /dev/null +++ b/tests/sample_configs/honeynode-otntopo400GwithOTUC4.json @@ -0,0 +1,392 @@ +{ + "network": [ + { + "network-id": "otn-topology", + "network-types": { + "org-openroadm-common-network:openroadm-common-network": {} + }, + "node": [ + { + "node-id": "XPDR-A2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR1", + "org-openroadm-common-network:node-type": "TPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-400GE" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1", + "tp-ref": "XPDR1-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR1" + } + ] + }, + { + "node-id": "XPDR-A2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-A2-XPDR2" + } + ] + }, + { + "node-id": "XPDR-C2-XPDR2", + "org-openroadm-common-network:node-type": "MUXPDR", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 2 + }, + "org-openroadm-otn-network-topology:switching-pools": { + "odu-switching-pools": [ + { + "switching-pool-number": 1, + "switching-pool-type": "non-blocking", + "non-blocking-list": [ + { + "nbl-number": 1, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT1" + ], + "available-interconnect-bandwidth": 10 + }, + { + "nbl-number": 2, + "interconnect-bandwidth-unit": 1000000000, + "tp-list": [ + "XPDR2-CLIENT2", + "XPDR2-NETWORK1" + ], + "available-interconnect-bandwidth": 10 + } + ] + } + ] + }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2", + "tp-ref": "XPDR2-NETWORK1" + } + ], + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-otsi-otsigroup" + } + ] + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR2-CLIENT1", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "XPDR2-CLIENT2", + "org-openroadm-otn-network-topology:tp-supported-interfaces": { + "supported-interface-capability": [ + { + "if-cap-type": "org-openroadm-port-types:if-OCH-OTU4-ODU4" + }, + { + "if-cap-type": "org-openroadm-port-types:if-100GE-ODU4" + } + ] + }, + "org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes": { + "rate": "org-openroadm-otn-common-types:ODU4" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "openroadm-topology", + "node-ref": "XPDR-C2-XPDR2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-A2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-C2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "400000", + "org-openroadm-otn-network-topology:used-bandwidth": "0", + "org-openroadm-common-network:link-type": "OTN-LINK", + "transportpce-topology:otn-link-type": "OTUC4", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1" + }, + { + "link-id": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1", + "source": { + "source-node": "XPDR-C2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "destination": { + "dest-node": "XPDR-A2-XPDR2", + "dest-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-otn-network-topology:available-bandwidth": "400000", + "org-openroadm-otn-network-topology:used-bandwidth": "0", + "org-openroadm-common-network:link-type": "OTN-LINK", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "transportpce-topology:otn-link-type": "OTUC4", + "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1" + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/sample_configs/honeynode-topo400G.json b/tests/sample_configs/honeynode-topo400G.json index 29b0e40c5..854adea78 100644 --- a/tests/sample_configs/honeynode-topo400G.json +++ b/tests/sample_configs/honeynode-topo400G.json @@ -2,288 +2,596 @@ "network": [ { "network-id": "openroadm-topology", - "ietf-network-topology:link": [ - { - "link-id": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP4-TXRX", - "source": { - "source-node": "XPDR-C2-XPDR1", - "source-tp": "XPDR1-NETWORK1" - }, - "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP4-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1", - "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "SRG1-PP4-TXRX", - "dest-node": "ROADM-C1-SRG1" - } - }, + "network-types": { + "org-openroadm-common-network:openroadm-common-network": {} + }, + "node": [ { - "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", - "source": { - "source-node": "ROADM-A1-DEG2", - "source-tp": "DEG2-TTP-TXRX" - }, - "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "node-id": "ROADM-A1-SRG3", + "org-openroadm-common-network:node-type": "SRG", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "DEG1-TTP-TXRX", - "dest-node": "ROADM-C1-DEG1" - }, - "org-openroadm-network-topology:OMS-attributes": { - "span": { - "auto-spanloss": true, - "spanloss-current": 12, - "engineered-spanloss": 12.2, - "spanloss-base": 11.4, - "link-concatenation": [ - { - "SRLG-Id": 0, - "fiber-type": "smf", - "pmd": 0.5, - "SRLG-length": 100000 - } - ] + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG3-PP3-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG3-PP2-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG3-CP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" + }, + { + "tp-id": "SRG3-PP1-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG3-PP4-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" } - } - }, - { - "link-id": "XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX", - "source": { - "source-node": "XPDR-C1-XPDR1", - "source-tp": "XPDR1-NETWORK1" + ], + "org-openroadm-network-topology:srg-attributes": { + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] }, - "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1", - "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "SRG1-PP1-TXRX", - "dest-node": "ROADM-C1-SRG1" - } + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-A1" + } + ] }, { - "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", - "source": { - "source-node": "ROADM-C1-DEG1", - "source-tp": "DEG1-CTP-TXRX" - }, - "org-openroadm-common-network:link-type": "DROP-LINK", + "node-id": "XPDR-A2-XPDR1", + "org-openroadm-common-network:node-type": "XPONDER", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "SRG1-CP-TXRX", - "dest-node": "ROADM-C1-SRG1" - } + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT", + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1" + }, + { + "tp-id": "XPDR1-NETWORK1", + "org-openroadm-network-topology:xpdr-network-attributes": { + "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP1-TXRX" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + } + ] }, { - "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", - "source": { - "source-node": "ROADM-A1-SRG3", - "source-tp": "SRG3-CP-TXRX" - }, - "org-openroadm-common-network:link-type": "ADD-LINK", + "node-id": "XPDR-C2-XPDR1", + "org-openroadm-common-network:node-type": "XPONDER", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "DEG1-CTP-TXRX", - "dest-node": "ROADM-A1-DEG1" - } + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR1-CLIENT1", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT", + "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1" + }, + { + "tp-id": "XPDR1-NETWORK1", + "org-openroadm-network-topology:xpdr-network-attributes": { + "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP1-TXRX" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK", + "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + } + ] }, { - "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", - "source": { - "source-node": "ROADM-A1-SRG3", - "source-tp": "SRG3-CP-TXRX" - }, - "org-openroadm-common-network:link-type": "ADD-LINK", + "node-id": "XPDR-A2-XPDR2", + "org-openroadm-common-network:node-type": "XPONDER", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "DEG2-CTP-TXRX", - "dest-node": "ROADM-A1-DEG2" - } + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "org-openroadm-network-topology:xpdr-network-attributes": { + "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP2-TXRX" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-A2" + } + ] }, { - "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", - "source": { - "source-node": "ROADM-A1-DEG1", - "source-tp": "DEG1-CTP-TXRX" - }, - "org-openroadm-common-network:link-type": "DROP-LINK", + "node-id": "XPDR-C2-XPDR2", + "org-openroadm-common-network:node-type": "XPONDER", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "SRG3-CP-TXRX", - "dest-node": "ROADM-A1-SRG3" - } + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR2-NETWORK1", + "org-openroadm-network-topology:xpdr-network-attributes": { + "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP2-TXRX" + }, + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + } + ], + "supporting-node": [ + { + "network-ref": "openroadm-network", + "node-ref": "XPDR-C2" + }, + { + "network-ref": "clli-network", + "node-ref": "NodeC" + } + ] }, { - "link-id": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1", - "source": { - "source-node": "ROADM-A1-SRG1", - "source-tp": "SRG1-PP1-TXRX" - }, - "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "node-id": "ROADM-C1-SRG1", + "org-openroadm-common-network:node-type": "SRG", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "XPDR1-NETWORK1", - "dest-node": "XPDR-A1-XPDR1" - } - }, + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-PP4-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP1-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP2-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP3-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-CP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] + }, + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-C1" + } + ] + }, { - "link-id": "ROADM-A1-SRG1-SRG1-PP4-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1", - "source": { - "source-node": "ROADM-A1-SRG1", - "source-tp": "SRG1-PP4-TXRX" + "node-id": "ROADM-A1-SRG1", + "org-openroadm-common-network:node-type": "SRG", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-PP4-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP1-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP2-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-PP3-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" + }, + { + "tp-id": "SRG1-CP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] }, - "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-A1" + } + ] + }, + { + "node-id": "ROADM-A1-DEG1", + "org-openroadm-common-network:node-type": "DEGREE", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP4-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "XPDR1-NETWORK1", - "dest-node": "XPDR-A2-XPDR1" - } + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" + }, + { + "tp-id": "DEG1-TTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number": 1, + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] + }, + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-A1" + } + ] }, { - "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", - "source": { - "source-node": "ROADM-C1-DEG1", - "source-tp": "DEG1-TTP-TXRX" + "node-id": "ROADM-A1-DEG2", + "org-openroadm-common-network:node-type": "DEGREE", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-TTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" + }, + { + "tp-id": "DEG2-CTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number": 2, + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] }, - "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeA" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-A1" + } + ] + }, + { + "node-id": "ROADM-C1-DEG1", + "org-openroadm-common-network:node-type": "DEGREE", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "DEG2-TTP-TXRX", - "dest-node": "ROADM-A1-DEG2" + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" + }, + { + "tp-id": "DEG1-TTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number": 1, + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] }, - "org-openroadm-network-topology:OMS-attributes": { - "span": { - "auto-spanloss": true, - "spanloss-current": 12, - "engineered-spanloss": 12.2, - "spanloss-base": 11.4, - "link-concatenation": [ - { - "SRLG-Id": 0, - "fiber-type": "smf", - "pmd": 0.5, - "SRLG-length": 100000 - } - ] + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-C1" } - } + ] }, { - "link-id": "ROADM-C1-SRG1-SRG1-PP4-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1", + "node-id": "ROADM-C1-DEG2", + "org-openroadm-common-network:node-type": "DEGREE", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-TTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" + }, + { + "tp-id": "DEG2-CTP-TXRX", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:administrative-state": "inService", + "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number": 2, + "avail-freq-maps": [ + { + "map-name": "cband", + "freq-map-granularity": 6.25, + "start-edge-freq": 191.325, + "effective-bits": 768, + "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" + } + ] + }, + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "NodeC" + }, + { + "network-ref": "openroadm-network", + "node-ref": "ROADM-C1" + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "ROADM-A1-SRG1-SRG1-PP2-TXRXtoXPDR-A2-XPDR2-XPDR2-NETWORK1", "source": { - "source-node": "ROADM-C1-SRG1", - "source-tp": "SRG1-PP4-TXRX" + "source-node": "ROADM-A1-SRG1", + "source-tp": "SRG1-PP2-TXRX" }, "org-openroadm-common-network:link-type": "XPONDER-INPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP4-TXRX", + "org-openroadm-common-network:opposite-link": "XPDR-A2-XPDR2-XPDR2-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "XPDR1-NETWORK1", - "dest-node": "XPDR-C2-XPDR1" + "dest-tp": "XPDR2-NETWORK1", + "dest-node": "XPDR-A2-XPDR2" } }, { - "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", + "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR2-XPDR2-NETWORK1", "source": { - "source-node": "ROADM-C1-DEG2", - "source-tp": "DEG2-CTP-TXRX" + "source-node": "ROADM-C1-SRG1", + "source-tp": "SRG1-PP2-TXRX" }, - "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "org-openroadm-common-network:link-type": "XPONDER-INPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "XPDR-C2-XPDR2-XPDR2-NETWORK1toROADM-C1-SRG1-SRG1-PP2-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "DEG1-CTP-TXRX", - "dest-node": "ROADM-C1-DEG1" + "dest-tp": "XPDR2-NETWORK1", + "dest-node": "XPDR-C2-XPDR2" } }, { - "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", + "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", "source": { - "source-node": "ROADM-C1-DEG2", - "source-tp": "DEG2-CTP-TXRX" + "source-node": "ROADM-A1-DEG2", + "source-tp": "DEG2-TTP-TXRX" }, - "org-openroadm-common-network:link-type": "DROP-LINK", + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "SRG1-CP-TXRX", - "dest-node": "ROADM-C1-SRG1" + "dest-tp": "DEG1-TTP-TXRX", + "dest-node": "ROADM-C1-DEG1" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "auto-spanloss": true, + "spanloss-current": 12, + "engineered-spanloss": 12.2, + "spanloss-base": 11.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "fiber-type": "smf", + "pmd": 0.5, + "SRLG-length": 100000 + } + ] + } } }, { - "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP4-TXRX", + "link-id": "XPDR-A2-XPDR2-XPDR2-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX", "source": { - "source-node": "XPDR-A2-XPDR1", - "source-tp": "XPDR1-NETWORK1" + "source-node": "XPDR-A2-XPDR2", + "source-tp": "XPDR2-NETWORK1" }, "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP4-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP2-TXRXtoXPDR-A2-XPDR2-XPDR2-NETWORK1", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "SRG1-PP4-TXRX", + "dest-tp": "SRG1-PP2-TXRX", "dest-node": "ROADM-A1-SRG1" } }, { - "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", "source": { - "source-node": "ROADM-A1-DEG2", - "source-tp": "DEG2-CTP-TXRX" + "source-node": "ROADM-C1-DEG1", + "source-tp": "DEG1-CTP-TXRX" }, "org-openroadm-common-network:link-type": "DROP-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "SRG1-CP-TXRX", - "dest-node": "ROADM-A1-SRG1" + "dest-node": "ROADM-C1-SRG1" } }, { - "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1", "source": { - "source-node": "ROADM-C1-DEG1", - "source-tp": "DEG1-CTP-TXRX" + "source-node": "ROADM-C1-SRG1", + "source-tp": "SRG1-PP1-TXRX" }, - "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "org-openroadm-common-network:link-type": "XPONDER-INPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "DEG2-CTP-TXRX", - "dest-node": "ROADM-C1-DEG2" + "dest-tp": "XPDR1-NETWORK1", + "dest-node": "XPDR-C2-XPDR1" } }, { - "link-id": "XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX", + "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX", "source": { - "source-node": "XPDR-A1-XPDR1", + "source-node": "XPDR-A2-XPDR1", "source-tp": "XPDR1-NETWORK1" }, "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "SRG1-PP1-TXRX", @@ -291,29 +599,14 @@ } }, { - "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", - "source": { - "source-node": "ROADM-A1-DEG2", - "source-tp": "DEG2-CTP-TXRX" - }, - "org-openroadm-common-network:link-type": "EXPRESS-LINK", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", - "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "DEG1-CTP-TXRX", - "dest-node": "ROADM-A1-DEG1" - } - }, - { - "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", "source": { - "source-node": "ROADM-A1-SRG1", - "source-tp": "SRG1-CP-TXRX" + "source-node": "ROADM-A1-SRG3", + "source-tp": "SRG3-CP-TXRX" }, "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "DEG1-CTP-TXRX", @@ -321,44 +614,29 @@ } }, { - "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1", + "link-id": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1", "source": { - "source-node": "ROADM-C1-SRG1", + "source-node": "ROADM-A1-SRG1", "source-tp": "SRG1-PP1-TXRX" }, "org-openroadm-common-network:link-type": "XPONDER-INPUT", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX", + "org-openroadm-common-network:opposite-link": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "XPDR1-NETWORK1", - "dest-node": "XPDR-C1-XPDR1" - } - }, - { - "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", - "source": { - "source-node": "ROADM-A1-DEG2", - "source-tp": "DEG2-CTP-TXRX" - }, - "org-openroadm-common-network:link-type": "DROP-LINK", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", - "org-openroadm-common-network:administrative-state": "inService", - "destination": { - "dest-tp": "SRG3-CP-TXRX", - "dest-node": "ROADM-A1-SRG3" + "dest-node": "XPDR-A2-XPDR1" } }, { - "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", "source": { - "source-node": "ROADM-A1-SRG1", - "source-tp": "SRG1-CP-TXRX" + "source-node": "ROADM-A1-SRG3", + "source-tp": "SRG3-CP-TXRX" }, "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "DEG2-CTP-TXRX", @@ -366,44 +644,60 @@ } }, { - "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", "source": { - "source-node": "ROADM-C1-SRG1", - "source-tp": "SRG1-CP-TXRX" + "source-node": "ROADM-A1-DEG1", + "source-tp": "DEG1-CTP-TXRX" }, - "org-openroadm-common-network:link-type": "ADD-LINK", + "org-openroadm-common-network:link-type": "DROP-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "DEG2-CTP-TXRX", - "dest-node": "ROADM-C1-DEG2" + "dest-tp": "SRG3-CP-TXRX", + "dest-node": "ROADM-A1-SRG3" } }, { - "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", "source": { - "source-node": "ROADM-A1-DEG1", - "source-tp": "DEG1-CTP-TXRX" + "source-node": "ROADM-C1-DEG1", + "source-tp": "DEG1-TTP-TXRX" }, - "org-openroadm-common-network:link-type": "DROP-LINK", + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "SRG1-CP-TXRX", - "dest-node": "ROADM-A1-SRG1" + "dest-tp": "DEG2-TTP-TXRX", + "dest-node": "ROADM-A1-DEG2" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "auto-spanloss": true, + "spanloss-current": 12, + "engineered-spanloss": 12.2, + "spanloss-base": 11.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "fiber-type": "smf", + "pmd": 0.5, + "SRLG-length": 100000 + } + ] + } } }, { - "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", + "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", "source": { - "source-node": "ROADM-C1-SRG1", - "source-tp": "SRG1-CP-TXRX" + "source-node": "ROADM-C1-DEG2", + "source-tp": "DEG2-CTP-TXRX" }, - "org-openroadm-common-network:link-type": "ADD-LINK", + "org-openroadm-common-network:link-type": "EXPRESS-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { "dest-tp": "DEG1-CTP-TXRX", @@ -411,537 +705,199 @@ } }, { - "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", "source": { - "source-node": "ROADM-A1-DEG1", - "source-tp": "DEG1-CTP-TXRX" + "source-node": "ROADM-C1-DEG2", + "source-tp": "DEG2-CTP-TXRX" }, - "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "org-openroadm-common-network:link-type": "DROP-LINK", "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", "destination": { - "dest-tp": "DEG2-CTP-TXRX", - "dest-node": "ROADM-A1-DEG2" + "dest-tp": "SRG1-CP-TXRX", + "dest-node": "ROADM-C1-SRG1" } - } - ], - "network-types": { - "org-openroadm-common-network:openroadm-common-network": {} - }, - "node": [ + }, { - "node-id": "ROADM-A1-SRG3", - "org-openroadm-common-network:node-type": "SRG", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:srg-attributes": { - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "SRG3-PP3-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG3-PP2-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG3-CP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" - }, - { - "tp-id": "SRG3-PP1-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG3-PP4-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeA" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-A1" - } - ] + "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "source": { + "source-node": "ROADM-A1-DEG2", + "source-tp": "DEG2-CTP-TXRX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "org-openroadm-common-network:administrative-state": "inService", + "destination": { + "dest-tp": "SRG1-CP-TXRX", + "dest-node": "ROADM-A1-SRG1" + } }, { - "node-id": "XPDR-A2-XPDR1", - "org-openroadm-common-network:node-type": "XPONDER", + "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "source": { + "source-node": "ROADM-C1-DEG1", + "source-tp": "DEG1-CTP-TXRX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "ietf-network-topology:termination-point": [ - { - "tp-id": "XPDR1-CLIENT1", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-NETWORK1", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP4-TXRX" - }, - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeA" - }, - { - "network-ref": "openroadm-network", - "node-ref": "XPDR-A2" - } - ] + "destination": { + "dest-tp": "DEG2-CTP-TXRX", + "dest-node": "ROADM-C1-DEG2" + } }, { - "node-id": "XPDR-C2-XPDR1", - "org-openroadm-common-network:node-type": "XPONDER", + "link-id": "XPDR-C2-XPDR2-XPDR2-NETWORK1toROADM-C1-SRG1-SRG1-PP2-TXRX", + "source": { + "source-node": "XPDR-C2-XPDR2", + "source-tp": "XPDR2-NETWORK1" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR2-XPDR2-NETWORK1", "org-openroadm-common-network:administrative-state": "inService", - "ietf-network-topology:termination-point": [ - { - "tp-id": "XPDR1-CLIENT1", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-NETWORK1", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP4-TXRX" - }, - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - } - ], - "supporting-node": [ - { - "network-ref": "openroadm-network", - "node-ref": "XPDR-C2" - }, - { - "network-ref": "clli-network", - "node-ref": "NodeC" - } - ] + "destination": { + "dest-tp": "SRG1-PP2-TXRX", + "dest-node": "ROADM-C1-SRG1" + } }, { - "node-id": "XPDR-C1-XPDR1", - "org-openroadm-common-network:node-type": "XPONDER", + "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "source": { + "source-node": "ROADM-A1-DEG2", + "source-tp": "DEG2-CTP-TXRX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "ietf-network-topology:termination-point": [ - { - "tp-id": "XPDR1-CLIENT1", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-CLIENT2", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK2", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-NETWORK2", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT2", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - }, - { - "tp-id": "XPDR1-NETWORK1", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP1-TXRX" - }, - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeC" - }, - { - "network-ref": "openroadm-network", - "node-ref": "XPDR-C1" - } - ] + "destination": { + "dest-tp": "DEG1-CTP-TXRX", + "dest-node": "ROADM-A1-DEG1" + } }, { - "node-id": "ROADM-C1-SRG1", - "org-openroadm-common-network:node-type": "SRG", + "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "source": { + "source-node": "ROADM-A1-SRG1", + "source-tp": "SRG1-CP-TXRX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:srg-attributes": { - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "SRG1-PP4-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP1-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP2-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP3-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-CP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeC" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-C1" - } - ] + "destination": { + "dest-tp": "DEG1-CTP-TXRX", + "dest-node": "ROADM-A1-DEG1" + } }, { - "node-id": "ROADM-A1-SRG1", - "org-openroadm-common-network:node-type": "SRG", + "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX", + "source": { + "source-node": "ROADM-A1-DEG2", + "source-tp": "DEG2-CTP-TXRX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:srg-attributes": { - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "SRG1-PP4-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP1-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP2-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-PP3-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-PP" - }, - { - "tp-id": "SRG1-CP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "SRG-TXRX-CP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeA" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-A1" - } - ] + "destination": { + "dest-tp": "SRG3-CP-TXRX", + "dest-node": "ROADM-A1-SRG3" + } }, { - "node-id": "ROADM-A1-DEG1", - "org-openroadm-common-network:node-type": "DEGREE", + "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "source": { + "source-node": "ROADM-A1-SRG1", + "source-tp": "SRG1-CP-TXRX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:degree-attributes": { - "degree-number": 1, - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "DEG1-CTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" - }, - { - "tp-id": "DEG1-TTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeA" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-A1" - } - ] + "destination": { + "dest-tp": "DEG2-CTP-TXRX", + "dest-node": "ROADM-A1-DEG2" + } }, { - "node-id": "ROADM-A1-DEG2", - "org-openroadm-common-network:node-type": "DEGREE", + "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX", + "source": { + "source-node": "ROADM-C1-SRG1", + "source-tp": "SRG1-CP-TXRX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:degree-attributes": { - "degree-number": 2, - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "DEG2-TTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" - }, - { - "tp-id": "DEG2-CTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeA" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-A1" - } - ] + "destination": { + "dest-tp": "DEG2-CTP-TXRX", + "dest-node": "ROADM-C1-DEG2" + } }, { - "node-id": "XPDR-A1-XPDR1", - "org-openroadm-common-network:node-type": "XPONDER", + "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX", + "source": { + "source-node": "ROADM-A1-DEG1", + "source-tp": "DEG1-CTP-TXRX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "ietf-network-topology:termination-point": [ - { - "tp-id": "XPDR1-CLIENT1", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-CLIENT2", - "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK2", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" - }, - { - "tp-id": "XPDR1-NETWORK2", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT2", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - }, - { - "tp-id": "XPDR1-NETWORK1", - "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1", - "org-openroadm-network-topology:xpdr-network-attributes": { - "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP1-TXRX" - }, - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" - } - ], - "supporting-node": [ - { - "network-ref": "openroadm-network", - "node-ref": "XPDR-A1" - }, - { - "network-ref": "clli-network", - "node-ref": "NodeA" - } - ] + "destination": { + "dest-tp": "SRG1-CP-TXRX", + "dest-node": "ROADM-A1-SRG1" + } }, { - "node-id": "ROADM-C1-DEG1", - "org-openroadm-common-network:node-type": "DEGREE", + "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX", + "source": { + "source-node": "ROADM-C1-SRG1", + "source-tp": "SRG1-CP-TXRX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:degree-attributes": { - "degree-number": 1, - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] - }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "DEG1-CTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" - }, - { - "tp-id": "DEG1-TTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeC" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-C1" - } - ] + "destination": { + "dest-tp": "DEG1-CTP-TXRX", + "dest-node": "ROADM-C1-DEG1" + } }, { - "node-id": "ROADM-C1-DEG2", - "org-openroadm-common-network:node-type": "DEGREE", + "link-id": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX", + "source": { + "source-node": "XPDR-C2-XPDR1", + "source-tp": "XPDR1-NETWORK1" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1", "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-network-topology:degree-attributes": { - "degree-number": 2, - "avail-freq-maps": [ - { - "map-name": "cband", - "freq-map-granularity": 6.25, - "start-edge-freq": 191.325, - "effective-bits": 768, - "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" - } - ] + "destination": { + "dest-tp": "SRG1-PP1-TXRX", + "dest-node": "ROADM-C1-SRG1" + } + }, + { + "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX", + "source": { + "source-node": "ROADM-A1-DEG1", + "source-tp": "DEG1-CTP-TXRX" }, - "ietf-network-topology:termination-point": [ - { - "tp-id": "DEG2-TTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP" - }, - { - "tp-id": "DEG2-CTP-TXRX", - "org-openroadm-common-network:operational-state": "inService", - "org-openroadm-common-network:administrative-state": "inService", - "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP" - } - ], - "supporting-node": [ - { - "network-ref": "clli-network", - "node-ref": "NodeC" - }, - { - "network-ref": "openroadm-network", - "node-ref": "ROADM-C1" - } - ] + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "org-openroadm-common-network:operational-state": "inService", + "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX", + "org-openroadm-common-network:administrative-state": "inService", + "destination": { + "dest-tp": "DEG2-CTP-TXRX", + "dest-node": "ROADM-A1-DEG2" + } } ] } diff --git a/tests/sample_configs/pce_portmapping_121.json b/tests/sample_configs/pce_portmapping_121.json index a2e9c3bff..7e877b30f 100644 --- a/tests/sample_configs/pce_portmapping_121.json +++ b/tests/sample_configs/pce_portmapping_121.json @@ -55,7 +55,12 @@ "node-model": "model1", "node-ip-address": "1.2.3.4" }, - "mapping": [], + "mapping": [ + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-qual": "xpdr-client" + } + ], "mc-capabilities": [], "cp-to-degree": [], "switching-pool-lcp": [] @@ -175,7 +180,12 @@ "node-model": "model1", "node-ip-address": "1.2.3.4" }, - "mapping": [], + "mapping": [ + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-qual": "xpdr-client" + } + ], "mc-capabilities": [], "cp-to-degree": [], "switching-pool-lcp": [] @@ -295,7 +305,12 @@ "node-model": "model1", "node-ip-address": "1.2.3.4" }, - "mapping": [], + "mapping": [ + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-qual": "xpdr-client" + } + ], "mc-capabilities": [], "cp-to-degree": [], "switching-pool-lcp": [] @@ -610,7 +625,12 @@ "node-model": "model1", "node-ip-address": "1.2.3.4" }, - "mapping": [], + "mapping": [ + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-qual": "xpdr-client" + } + ], "mc-capabilities": [], "cp-to-degree": [], "switching-pool-lcp": [] @@ -655,7 +675,12 @@ "node-model": "model1", "node-ip-address": "1.2.3.4" }, - "mapping": [], + "mapping": [ + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-qual": "xpdr-client" + } + ], "mc-capabilities": [], "cp-to-degree": [], "switching-pool-lcp": [] diff --git a/tests/sample_configs/pce_portmapping_71.json b/tests/sample_configs/pce_portmapping_71.json index 7d0e4f798..377bde837 100644 --- a/tests/sample_configs/pce_portmapping_71.json +++ b/tests/sample_configs/pce_portmapping_71.json @@ -1,15 +1,138 @@ { "network": { "nodes": [ + { + "node-id": "XPDR-A2", + "node-info": { + "node-clli": "NodeA", + "node-vendor": "vendorA", + "openroadm-version": "7.1", + "node-ip-address": "1.2.3.4", + "node-type": "xpdr", + "node-model": "model" + }, + "switching-pool-lcp": [ + { + "switching-pool-number": 1, + "switching-pool-type": "blocking", + "non-blocking-list": [ + { + "nbl-number": 2, + "lcp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT2" + ], + "interconnect-bandwidth": 0 + }, + { + "nbl-number": 1, + "lcp-list": [ + "XPDR2-CLIENT1", + "XPDR2-NETWORK1" + ], + "interconnect-bandwidth": 0 + } + ] + } + ], + "mapping": [ + { + "logical-connection-point": "XPDR2-CLIENT1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/1/1-PLUG-CLIENT", + "mpdr-restrictions": { + "min-trib-slot": "1.1", + "max-trib-slot": "1.20" + }, + "supported-interface-capability": [ + "org-openroadm-port-types:if-100GE-ODU4", + "org-openroadm-port-types:if-OCH-OTU4-ODU4" + ], + "port-oper-state": "InService", + "port-direction": "bidirectional", + "lcp-hash-val": "AK+Cna4EclRH", + "supporting-port": "C1", + "port-qual": "switch-client" + }, + { + "logical-connection-point": "XPDR1-NETWORK1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/1/2-PLUG-NET", + "supported-interface-capability": [ + "org-openroadm-port-types:if-otsi-otsigroup" + ], + "port-oper-state": "InService", + "connection-map-lcp": "XPDR1-CLIENT1", + "port-direction": "bidirectional", + "xponder-type": "tpdr", + "lcp-hash-val": "AIGiVAQ4gDil", + "supporting-port": "L1", + "port-qual": "xpdr-network" + }, + { + "logical-connection-point": "XPDR2-CLIENT2", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/1/2-PLUG-CLIENT", + "mpdr-restrictions": { + "min-trib-slot": "2.1", + "max-trib-slot": "2.20" + }, + "supported-interface-capability": [ + "org-openroadm-port-types:if-100GE-ODU4", + "org-openroadm-port-types:if-OCH-OTU4-ODU4" + ], + "port-oper-state": "InService", + "port-direction": "bidirectional", + "lcp-hash-val": "AK+Cna4EclRE", + "supporting-port": "C1", + "port-qual": "switch-client" + }, + { + "logical-connection-point": "XPDR1-CLIENT1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/1/1-PLUG-CLIENT", + "supported-interface-capability": [ + "org-openroadm-port-types:if-400GE" + ], + "port-oper-state": "InService", + "connection-map-lcp": "XPDR1-NETWORK1", + "port-direction": "bidirectional", + "lcp-hash-val": "AODABTVSOHH0", + "supporting-port": "C1", + "port-qual": "xpdr-client" + }, + { + "logical-connection-point": "XPDR2-NETWORK1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/2-PLUG-NET", + "supported-interface-capability": [ + "org-openroadm-port-types:if-otsi-otsigroup" + ], + "port-oper-state": "InService", + "port-direction": "bidirectional", + "xponder-type": "mpdr", + "lcp-hash-val": "LY9PxYJqUbw=", + "supporting-port": "L1", + "port-qual": "switch-network" + } + ], + "mc-capabilities": [ + { + "mc-node-name": "XPDR-mcprofile", + "center-freq-granularity": 3.125, + "slot-width-granularity": 6.25 + } + ] + }, { "node-id": "ROADM-C1", "node-info": { - "node-type": "rdm", - "node-model": "model2", - "node-ip-address": "127.0.0.13", "node-clli": "NodeC", + "node-vendor": "vendorA", "openroadm-version": "2.2.1", - "node-vendor": "vendorA" + "node-ip-address": "127.0.0.13", + "node-type": "rdm", + "node-model": "model2" }, "cp-to-degree": [ { @@ -35,42 +158,54 @@ ], "mapping": [ { - "logical-connection-point": "SRG1-PP3-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG1-PP2-TXRX", "port-direction": "bidirectional", - "supporting-port": "C3" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C2", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG1-PP1-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG1-PP4-TXRX", "port-direction": "bidirectional", - "supporting-port": "C1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C4", + "port-oper-state": "InService" }, { - "logical-connection-point": "DEG1-TTP-TXRX", - "supporting-oms": "OMS-DEG1-TTP-TXRX", - "supporting-circuit-pack-name": "1/0", - "supporting-ots": "OTS-DEG1-TTP-TXRX", + "logical-connection-point": "DEG2-TTP-TXRX", "port-direction": "bidirectional", - "supporting-port": "L1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "2/0", + "supporting-port": "L1", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG1-PP2-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG1-PP3-TXRX", "port-direction": "bidirectional", - "supporting-port": "C2" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C3", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG1-PP4-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "DEG1-TTP-TXRX", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/0", + "supporting-ots": "OTS-DEG1-TTP-TXRX", + "port-oper-state": "InService", "port-direction": "bidirectional", - "supporting-port": "C4" + "supporting-port": "L1", + "supporting-oms": "OMS-DEG1-TTP-TXRX" }, { - "logical-connection-point": "DEG2-TTP-TXRX", - "supporting-circuit-pack-name": "2/0", + "logical-connection-point": "SRG1-PP1-TXRX", "port-direction": "bidirectional", - "supporting-port": "L1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C1", + "port-oper-state": "InService" } ], "mc-capabilities": [ @@ -92,90 +227,137 @@ ] }, { - "node-id": "XPDR-A2", + "node-id": "XPDR-C2", + "node-info": { + "node-clli": "NodeC", + "node-vendor": "vendorA", + "openroadm-version": "7.1", + "node-ip-address": "1.2.3.4", + "node-type": "xpdr", + "node-model": "model" + }, + "switching-pool-lcp": [ + { + "switching-pool-number": 1, + "switching-pool-type": "blocking", + "non-blocking-list": [ + { + "nbl-number": 2, + "lcp-list": [ + "XPDR2-NETWORK1", + "XPDR2-CLIENT2" + ], + "interconnect-bandwidth": 0 + }, + { + "nbl-number": 1, + "lcp-list": [ + "XPDR2-CLIENT1", + "XPDR2-NETWORK1" + ], + "interconnect-bandwidth": 0 + } + ] + } + ], "mapping": [ + { + "logical-connection-point": "XPDR2-CLIENT1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/1/1-PLUG-CLIENT", + "mpdr-restrictions": { + "min-trib-slot": "1.1", + "max-trib-slot": "1.20" + }, + "supported-interface-capability": [ + "org-openroadm-port-types:if-100GE-ODU4", + "org-openroadm-port-types:if-OCH-OTU4-ODU4" + ], + "port-oper-state": "InService", + "port-direction": "bidirectional", + "lcp-hash-val": "AP2/mp+mI1y5", + "supporting-port": "C1", + "port-qual": "switch-client" + }, { "logical-connection-point": "XPDR1-NETWORK1", - "supporting-circuit-pack-name": "1/0/1-PLUG-NET", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/1/2-PLUG-NET", "supported-interface-capability": [ - "org-openroadm-port-types:if-OTUCn-ODUCn" + "org-openroadm-port-types:if-otsi-otsigroup" ], - "lcp-hash-val": "AIGiVAQ4gDil", + "port-oper-state": "InService", + "connection-map-lcp": "XPDR1-CLIENT1", "port-direction": "bidirectional", "xponder-type": "tpdr", + "lcp-hash-val": "ZbICgmaBrJM=", "supporting-port": "L1", - "port-qual": "xpdr-network", - "connection-map-lcp": "XPDR1-CLIENT1" + "port-qual": "xpdr-network" }, { - "logical-connection-point": "XPDR1-CLIENT1", - "supporting-circuit-pack-name": "1/0/1-PLUG-CLIENT", + "logical-connection-point": "XPDR2-CLIENT2", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/1/2-PLUG-CLIENT", + "mpdr-restrictions": { + "min-trib-slot": "2.1", + "max-trib-slot": "2.20" + }, "supported-interface-capability": [ - "org-openroadm-port-types:if-400GE" + "org-openroadm-port-types:if-100GE-ODU4", + "org-openroadm-port-types:if-OCH-OTU4-ODU4" ], - "lcp-hash-val": "AODABTVSOHH0", + "port-oper-state": "InService", "port-direction": "bidirectional", + "lcp-hash-val": "AP2/mp+mI1y6", "supporting-port": "C1", - "port-qual": "xpdr-client", - "connection-map-lcp": "XPDR1-NETWORK1" - } - ], - "node-info": { - "node-type": "xpdr", - "node-model": "model2", - "node-ip-address": "1.2.3.4", - "node-clli": "NodeA", - "openroadm-version": "7.1", - "node-vendor": "vendorA" - } - }, - { - "node-id": "XPDR-C2", - "mapping": [ + "port-qual": "switch-client" + }, { - "logical-connection-point": "XPDR1-NETWORK1", - "supporting-circuit-pack-name": "1/0/1-PLUG-NET", + "logical-connection-point": "XPDR1-CLIENT1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/1/1-PLUG-CLIENT", "supported-interface-capability": [ - "org-openroadm-port-types:if-OTUCn-ODUCn" + "org-openroadm-port-types:if-400GE" ], - "lcp-hash-val": "ZbICgmaBrJM=", + "port-oper-state": "InService", + "connection-map-lcp": "XPDR1-NETWORK1", "port-direction": "bidirectional", - "xponder-type": "tpdr", - "supporting-port": "L1", - "port-qual": "xpdr-network", - "connection-map-lcp": "XPDR1-CLIENT1" + "lcp-hash-val": "M5cViLS5z3o=", + "supporting-port": "C1", + "port-qual": "xpdr-client" }, { - "logical-connection-point": "XPDR1-CLIENT1", - "supporting-circuit-pack-name": "1/0/1-PLUG-CLIENT", + "logical-connection-point": "XPDR2-NETWORK1", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/2/2-PLUG-NET", "supported-interface-capability": [ - "org-openroadm-port-types:if-400GE" + "org-openroadm-port-types:if-otsi-otsigroup" ], - "lcp-hash-val": "M5cViLS5z3o=", + "port-oper-state": "InService", "port-direction": "bidirectional", - "supporting-port": "C1", - "port-qual": "xpdr-client", - "connection-map-lcp": "XPDR1-NETWORK1" + "xponder-type": "mpdr", + "lcp-hash-val": "Nmbu2MNHvc4=", + "supporting-port": "L1", + "port-qual": "switch-network" } ], - "node-info": { - "node-type": "xpdr", - "node-model": "model2", - "node-ip-address": "1.2.3.4", - "node-clli": "NodeC", - "openroadm-version": "7.1", - "node-vendor": "vendorA" - } + "mc-capabilities": [ + { + "mc-node-name": "XPDR-mcprofile", + "center-freq-granularity": 3.125, + "slot-width-granularity": 6.25 + } + ] }, { "node-id": "ROADM-A1", "node-info": { - "node-type": "rdm", - "node-model": "model2", - "node-ip-address": "127.0.0.11", "node-clli": "NodeA", + "node-vendor": "vendorA", "openroadm-version": "2.2.1", - "node-vendor": "vendorA" + "node-ip-address": "127.0.0.11", + "node-type": "rdm", + "node-model": "model2" }, "cp-to-degree": [ { @@ -201,66 +383,86 @@ ], "mapping": [ { - "logical-connection-point": "SRG1-PP3-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG3-PP1-TXRX", "port-direction": "bidirectional", - "supporting-port": "C3" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "5/0", + "supporting-port": "C1", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG3-PP2-TXRX", - "supporting-circuit-pack-name": "5/0", + "logical-connection-point": "SRG1-PP2-TXRX", "port-direction": "bidirectional", - "supporting-port": "C2" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C2", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG1-PP1-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG3-PP4-TXRX", "port-direction": "bidirectional", - "supporting-port": "C1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "5/0", + "supporting-port": "C4", + "port-oper-state": "InService" }, { - "logical-connection-point": "DEG1-TTP-TXRX", - "supporting-circuit-pack-name": "1/0", + "logical-connection-point": "SRG1-PP4-TXRX", "port-direction": "bidirectional", - "supporting-port": "L1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C4", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG3-PP1-TXRX", - "supporting-circuit-pack-name": "5/0", + "logical-connection-point": "SRG3-PP3-TXRX", "port-direction": "bidirectional", - "supporting-port": "C1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "5/0", + "supporting-port": "C3", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG1-PP2-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "DEG2-TTP-TXRX", + "port-admin-state": "InService", + "supporting-circuit-pack-name": "2/0", + "supporting-ots": "OTS-DEG2-TTP-TXRX", + "port-oper-state": "InService", "port-direction": "bidirectional", - "supporting-port": "C2" + "supporting-port": "L1", + "supporting-oms": "OMS-DEG2-TTP-TXRX" }, { - "logical-connection-point": "SRG1-PP4-TXRX", - "supporting-circuit-pack-name": "3/0", + "logical-connection-point": "SRG1-PP3-TXRX", "port-direction": "bidirectional", - "supporting-port": "C4" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C3", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG3-PP4-TXRX", - "supporting-circuit-pack-name": "5/0", + "logical-connection-point": "SRG3-PP2-TXRX", "port-direction": "bidirectional", - "supporting-port": "C4" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "5/0", + "supporting-port": "C2", + "port-oper-state": "InService" }, { - "logical-connection-point": "SRG3-PP3-TXRX", - "supporting-circuit-pack-name": "5/0", + "logical-connection-point": "DEG1-TTP-TXRX", "port-direction": "bidirectional", - "supporting-port": "C3" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "1/0", + "supporting-port": "L1", + "port-oper-state": "InService" }, { - "logical-connection-point": "DEG2-TTP-TXRX", - "supporting-oms": "OMS-DEG2-TTP-TXRX", - "supporting-circuit-pack-name": "2/0", - "supporting-ots": "OTS-DEG2-TTP-TXRX", + "logical-connection-point": "SRG1-PP1-TXRX", "port-direction": "bidirectional", - "supporting-port": "L1" + "port-admin-state": "InService", + "supporting-circuit-pack-name": "3/0", + "supporting-port": "C1", + "port-oper-state": "InService" } ], "mc-capabilities": [ diff --git a/tests/transportpce_tests/7.1/test_pce_400G.py b/tests/transportpce_tests/7.1/test_pce_400G.py index 189e9245b..0a8ed7320 100644 --- a/tests/transportpce_tests/7.1/test_pce_400G.py +++ b/tests/transportpce_tests/7.1/test_pce_400G.py @@ -33,7 +33,22 @@ class TransportPCE400Gtesting(unittest.TestCase): TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "sample_configs", "honeynode-topo400G.json") with open(TOPO_BI_DIR_FILE, 'r') as topo_bi_dir: - cls.simple_topo_bi_dir_data = topo_bi_dir.read() + cls.topo_bi_dir_data = topo_bi_dir.read() + + OTN_TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), + "..", "..", "sample_configs", "honeynode-otntopo400G.json") + with open(OTN_TOPO_BI_DIR_FILE, 'r') as otn_topo_bi_dir: + cls.otn_topo_bi_dir_data = otn_topo_bi_dir.read() + + OTUC4_OTN_TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), + "..", "..", "sample_configs", "honeynode-otntopo400GwithOTUC4.json") + with open(OTUC4_OTN_TOPO_BI_DIR_FILE, 'r') as otuc4_otn_topo_bi_dir: + cls.otuc4_otn_topo_bi_dir_data = otuc4_otn_topo_bi_dir.read() + + ODUC4_OTN_TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), + "..", "..", "sample_configs", "honeynode-otntopo400GwithODUC4.json") + with open(ODUC4_OTN_TOPO_BI_DIR_FILE, 'r') as oduc4_otn_topo_bi_dir: + cls.oduc4_otn_topo_bi_dir_data = oduc4_otn_topo_bi_dir.read() PORT_MAPPING_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "sample_configs", "pce_portmapping_71.json") @@ -71,14 +86,14 @@ class TransportPCE400Gtesting(unittest.TestCase): self.assertIn(response.status_code, (requests.codes.ok, requests.codes.created)) time.sleep(2) - # Load simple bidirectional topology - def test_02_load_simple_topology_bi(self): - response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_ORDM_TOPO, self.simple_topo_bi_dir_data) + # Load openroadm topology + def test_02_load_openroadm_topology_bi(self): + response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_ORDM_TOPO, self.topo_bi_dir_data) self.assertEqual(response.status_code, requests.codes.ok) time.sleep(2) # Path Computation success - def test_03_path_computation_xpdr_bi(self): + def test_03_path_computation_400G_xpdr_bi(self): response = test_utils.path_computation_request("request-1", "service-1", {"node-id": "XPDR-A2", "service-rate": "400", "service-format": "Ethernet", "clli": "nodeA"}, @@ -112,18 +127,125 @@ class TransportPCE400Gtesting(unittest.TestCase): ['zToA-direction']['modulation-format']) time.sleep(5) - # Test deleted complex topology - def test_04_test_topology_complex_deleted(self): - response = test_utils.get_ordm_topo_request("node/XPONDER-3-2") - self.assertEqual(response.status_code, requests.codes.conflict) - time.sleep(1) + # Load otn topology + def test_04_load_otn_topology_bi(self): + response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_OTN_TOPO, self.otn_topo_bi_dir_data) + self.assertEqual(response.status_code, requests.codes.ok) + time.sleep(2) + + # Path Computation success + def test_05_path_computation_OTUC4_xpdr_bi(self): + response = test_utils.path_computation_request("request-1", "service-OTUC4", + {"service-rate": "400", "clli": "NodeA", + "service-format": "OTU", "node-id": "XPDR-A2", + "rx-direction": {"port": {"port-device-name": "XPDR-A2-XPDR2"}} + }, + {"service-rate": "400", "clli": "NodeC", + "service-format": "OTU", "node-id": "XPDR-C2", + "rx-direction": {"port": {"port-device-name": "XPDR-C2-XPDR2"}} + }) + self.assertEqual(response.status_code, requests.codes.ok) + res = response.json() + self.assertIn('Path is calculated', + res['output']['configuration-response-common']['response-message']) + + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['aToZ-wavelength-number']) + self.assertEqual(400, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['rate']) + self.assertEqual(196.0375, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['aToZ-min-frequency']) + self.assertEqual(196.12500, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['aToZ-max-frequency']) + self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description'] + ['aToZ-direction']['modulation-format']) + + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['zToA-direction']['zToA-wavelength-number']) + self.assertEqual(400, res['output']['response-parameters']['path-description'] + ['zToA-direction']['rate']) + self.assertEqual(196.0375, res['output']['response-parameters']['path-description'] + ['zToA-direction']['zToA-min-frequency']) + self.assertEqual(196.12500, res['output']['response-parameters']['path-description'] + ['zToA-direction']['zToA-max-frequency']) + self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description'] + ['zToA-direction']['modulation-format']) + time.sleep(5) + + # Load otn topology with OTUC4 links + def test_06_load_otuc4_otn_topology_bi(self): + response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_OTN_TOPO, self.otuc4_otn_topo_bi_dir_data) + self.assertEqual(response.status_code, requests.codes.ok) + time.sleep(2) + + # Path Computation success + def test_07_path_computation_ODUC4_xpdr_bi(self): + response = test_utils.path_computation_request("request-1", "service-ODUC4", + {"service-rate": "400", "clli": "NodeA", "service-format": "ODU", + "node-id": "XPDR-A2-XPDR2", + "tx-direction": {"port": {"port-device-name": "XPDR-A2-XPDR2"}} + }, + {"service-rate": "400", "clli": "NodeC", "service-format": "ODU", + "node-id": "XPDR-C2-XPDR2", + "tx-direction": {"port": {"port-device-name": "XPDR-C2-XPDR2"}} + }) + self.assertEqual(response.status_code, requests.codes.ok) + res = response.json() + self.assertIn('Path is calculated', + res['output']['configuration-response-common']['response-message']) + + self.assertEqual(400, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['rate']) + self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description'] + ['aToZ-direction']['modulation-format']) + + self.assertEqual(400, res['output']['response-parameters']['path-description'] + ['zToA-direction']['rate']) + self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description'] + ['zToA-direction']['modulation-format']) + time.sleep(5) - # Delete portmapping - def test_05_delete_port_mapping(self): - response = test_utils.delete_request(test_utils.URL_FULL_PORTMAPPING) + # Load otn topology with OTUC4 links + def test_08_load_oduc4_otn_topology_bi(self): + response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_OTN_TOPO, self.oduc4_otn_topo_bi_dir_data) self.assertEqual(response.status_code, requests.codes.ok) time.sleep(2) + # Path Computation success + def test_09_path_computation_100G_xpdr_bi(self): + response = test_utils.path_computation_request("request-1", "service-100GE", + {"service-rate": "100", "clli": "NodeA", "service-format": "Ethernet", + "node-id": "XPDR-A2", + "tx-direction": {"port": {"port-device-name": "XPDR-A2-XPDR2", + "port-name": "XPDR2-CLIENT1"}}}, + {"service-rate": "100", "clli": "NodeC", "service-format": "Ethernet", + "node-id": "XPDR-C2", + "tx-direction": {"port": {"port-device-name": "XPDR-C2-XPDR2", + "port-name": "XPDR2-CLIENT1"}}}) + + self.assertEqual(response.status_code, requests.codes.ok) + res = response.json() + self.assertIn('Path is calculated', + res['output']['configuration-response-common']['response-message']) + + self.assertEqual(100, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['rate']) + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['trib-port-number']) + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['aToZ-direction']['trib-slot-number']) + self.assertEqual('dp-qpsk', res['output']['response-parameters']['path-description'] + ['aToZ-direction']['modulation-format']) + + self.assertEqual(100, res['output']['response-parameters']['path-description'] + ['zToA-direction']['rate']) + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['zToA-direction']['trib-port-number']) + self.assertEqual(1, res['output']['response-parameters']['path-description'] + ['zToA-direction']['trib-slot-number']) + self.assertEqual('dp-qpsk', res['output']['response-parameters']['path-description'] + ['zToA-direction']['modulation-format']) + time.sleep(5) if __name__ == "__main__": unittest.main(verbosity=2) -- 2.36.6