Update PCE for OTUC4, ODUC4 and 100GE MXPDR 44/96244/33
authorChristophe Betoule <christophe.betoule@orange.com>
Tue, 11 May 2021 08:45:19 +0000 (10:45 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 24 Jun 2021 14:47:47 +0000 (16:47 +0200)
- 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 <christophe.betoule@orange.com>
Co-authored-by: Gilles Thouenon <gilles.thouenon@orange.com>
Co-authored-by: Balagangadhar Bathula <bb4341@att.com>
Change-Id: Ibf7a9da47b6b9424e41205659fc996d2eddebaee

22 files changed:
common/src/main/java/org/opendaylight/transportpce/common/StringConstants.java
common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java
pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java
pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java
pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java
tests/sample_configs/honeynode-otntopo400G.json [new file with mode: 0644]
tests/sample_configs/honeynode-otntopo400GwithODUC4.json [new file with mode: 0644]
tests/sample_configs/honeynode-otntopo400GwithOTUC4.json [new file with mode: 0644]
tests/sample_configs/honeynode-topo400G.json
tests/sample_configs/pce_portmapping_121.json
tests/sample_configs/pce_portmapping_71.json
tests/transportpce_tests/7.1/test_pce_400G.py

index d5a7932f4f20253f74424a1e21295d28223d41fb..b1aa101d9dc02b709b2f21eebcf05cfe52b84be5 100644 (file)
@@ -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
index d9f72717157f3f4b24dfb2c55c04a5ba0e8e4bb2..4288421f44ecfaa6261dae2fd8239f50b41db164 100644 (file)
@@ -42,7 +42,7 @@ public final class GridConstant {
      * Map for associate service type with nb slots.
      */
     public static final Map<String, Integer> 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);
 
index 9e5fc4bcd6c7252ac1e442d9453f2e9b8320bb9e..c5967f278a1226b4831f340a6e09d0a8b78b8084 100644 (file)
@@ -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<Uint16> tribSlotList = (List<Uint16>) 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:
index 2b199309eb831afc3f5b6cac6f537ec994d4b8ac..918d1b6e20ee6104190130cc479b8caf52c3aa04 100644 (file)
@@ -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(
index 171af2f7c5bf8e69401263f5dccf2483daa3d7c5..3462effa240ce8ba4173e6a9a53281d761b9eb21 100644 (file)
@@ -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);
index c94b2e0aaefa936345119b3df4f7da1adb960c6e..5fad6c02c604b5c5ef767b6bf7c696ce1c9c357e 100644 (file)
@@ -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<Network> 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<Network> nwInstanceIdentifier) {
+        Network nw = null;
         try {
             Optional<Network> 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;
     }
index 0da2abcc58cbf0c3814e62f037b943581ea9c1b4..807b4baac5fb9afb1b14233cc8e30643d7e66ef8 100644 (file)
@@ -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;
index 38c220461ab7caf322061833777ab97764e82ad4..93c3587270244d1276966648f7312f064b174929 100644 (file)
@@ -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;
index 736539d9404ed7b3289b607f566d6d2db1f4573d..445e3f2e36a71045b8c8d5037e8aabb8459d2531 100644 (file)
@@ -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<Uint16> 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<Uint16> tsPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes()
                     .getTsPool();
index 6ea97283817cbb25c3d1b97977c8e8d174bb75c5..56dd1f14fce84a82a336677cfd420d3b81c40034 100644 (file)
@@ -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<LinkId, PceLink> map = Map.of(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1"), pceLink);
         pcePathDescription = new PcePathDescription(List.of(pceLink),
                 map, pceResult);
index 5ce1b63f7cc82b9c6d41f643bd0f49576ece4cf7..cc2f80d043d7438fa8de62ec0b81678255247a03 100644 (file)
@@ -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();
index 1b89575f88f1f3beb28f41916a7c000f19fec0c3..8eda89c462b6e6058dc172a2e5005e5702ebe140 100644 (file)
@@ -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);
     }
index 46c78cab7c0f3184c4ff423262ef164acc5c06c3..961814b303ec37702ba92d7c4ae5ee26b018ca9f 100644 (file)
@@ -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());
index dee898e3511d60fe95f25f496ace33ad5bcfdbe8..646fea65ec14ad2d028a2b49e020cbceb9bfecca 100644 (file)
@@ -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));
index 991a6cbc306fe693dd6308dfcf8c21ec37e312d1..0db3c50f7e55fefb9afbca5ad0f242fff10e5ce2 100644 (file)
@@ -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 (file)
index 0000000..c23fb1b
--- /dev/null
@@ -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 (file)
index 0000000..5d69ad0
--- /dev/null
@@ -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 (file)
index 0000000..74f345a
--- /dev/null
@@ -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
index 29b0e40c53b3022f65d4aef295981a0a841ee19c..854adea78d767b089d60a2a6dcc99d80fbb99f87 100644 (file)
     "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",
                     }
                 },
                 {
-                    "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",
                     }
                 },
                 {
-                    "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",
                     }
                 },
                 {
-                    "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",
                     }
                 },
                 {
-                    "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"
+                    }
                 }
             ]
         }
index a2e9c3bff546ce35875379abcccae3fdda907ad0..7e877b30fa7a2536d388f513f8110af78f9f723b 100644 (file)
         "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": []
         "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": []
         "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": []
         "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": []
         "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": []
index 7d0e4f7984fb71b069be595d31c5102b1817f277..377bde837913c091b85feaa7291e1fb52a1ba43a 100644 (file)
 {
     "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": [
                     {
                 ],
                 "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": [
                 ]
             },
             {
-                "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": [
                     {
                 ],
                 "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": [
index 189e9245bfc6362af9ddefa5b9b26439e20552ac..0a8ed732056f88dff2aa63c083691c0f9f524488 100644 (file)
@@ -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)