Manage ODU4 services over multiple OTU4 33/97833/17
authorGilles Thouenon <gilles.thouenon@orange.com>
Fri, 1 Oct 2021 13:47:11 +0000 (15:47 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Thu, 9 Dec 2021 09:30:27 +0000 (10:30 +0100)
- in pce module, remove the exclusive "AZ" mode to allow also the
"intermediate" mode
- in network module, modify signature of createOtnLinks, updateOtnLinks
and deleteOtnLinks mehtods to take into acount a list of supporting
links
- in renderer module, rationalize the OpenRoadmInterface creation,
taking into account data coming from portmapping
(supporting-interfaces), setting the sapi/dapi info comming from the
specific input container, updating the mapping once the interface has
been created...
- adapt UT and functional tests consequently (notably, disable test 82
in B100_end2end test suite - resolved in the change 97834)

JIRA: TRNSPRTPCE-541
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: I3e6b89ee22aa5c653e6740d6efffb00038910f26

36 files changed:
api/src/main/yang/service_path/transportpce-device-renderer@2021-10-04.yang [moved from api/src/main/yang/service_path/transportpce-device-renderer@2021-06-18.yang with 88% similarity]
common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java
common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java
lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/ServicePathInputData.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtnInterface221.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererService.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererService.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/DeviceRenderingRollbackTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/DeviceRenderingTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OtnDeviceRenderingTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImplTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/CreateOtsOmsDataUtils.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java
tests/transportpce_tests/2.2.1/test06_renderer_service_path_nominal.py
tests/transportpce_tests/2.2.1/test07_otn_renderer.py
tests/transportpce_tests/2.2.1/test08_otn_sh_renderer.py
tests/transportpce_tests/2.2.1/test11_otn_end2end.py
tests/transportpce_tests/2.2.1/test14_otn_switch_end2end.py
tests/transportpce_tests/hybrid/test02_B100G_end2end.py

similarity index 88%
rename from api/src/main/yang/service_path/transportpce-device-renderer@2021-06-18.yang
rename to api/src/main/yang/service_path/transportpce-device-renderer@2021-10-04.yang
index f489ddafaf6d08727ba3a5bf6a9cc0544c48279b..532bb16507f82d5ffefb76d78efd466be17956f2 100644 (file)
@@ -20,6 +20,10 @@ module transportpce-device-renderer {
      authors: Dhruv Bhardwaj ( db929a@att.com )
               Shweta Vachhani ( sv111y@att.com )";
 
+  revision 2021-10-04 {
+    description
+      "Add source and destinatin API info in service-path";
+  }
   revision 2021-06-18 {
     description
       "Replace service-type by service-format.
@@ -49,6 +53,21 @@ module transportpce-device-renderer {
     }
   }
 
+  grouping az-api-info {
+    container a-end-api-info {
+      leaf node-id {
+        type string;
+      }
+      uses org-transportpce-common-types:api-info;
+    }
+    container z-end-api-info {
+      leaf node-id {
+        type string;
+      }
+      uses org-transportpce-common-types:api-info;
+    }
+  }
+
   rpc service-path {
     input {
       leaf modulation-format {
@@ -57,6 +76,7 @@ module transportpce-device-renderer {
       leaf operation {
         type action;
       }
+      uses az-api-info;
       uses org-transportpce-common-types:optical-renderer-input;
     }
     output {
@@ -100,18 +120,7 @@ module transportpce-device-renderer {
       leaf operation {
         type action;
       }
-      container a-end-api-info {
-        leaf node-id {
-          type string;
-        }
-        uses org-transportpce-common-types:api-info;
-      }
-      container z-end-api-info {
-        leaf node-id {
-          type string;
-        }
-        uses org-transportpce-common-types:api-info;
-      }
+      uses az-api-info;
       uses org-transportpce-common-types:otn-renderer-input;
     }
     output {
index 0a51b1f4bedb6f7151efa22fb9f65f5fd3cc4849..b41f6ca63bf16d3d58c97a70e0114fdfe8a995f0 100644 (file)
@@ -13,7 +13,7 @@ import java.math.RoundingMode;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
index 6c60a7c3ec3382cec34078a0287e3ff2ba9613d2..261f46200380b6155fbad567d5c1353d82b0546c 100644 (file)
@@ -16,8 +16,8 @@ import java.util.Arrays;
 import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.ServiceRateConstant;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
index f6312146c818c62827745d23a262a6344de07f1c..4d0fc59e05d3b113e0ded85fc480769b87966954 100644 (file)
@@ -299,7 +299,7 @@ public final class TPCEUtils {
                     .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408
                     .$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004
                     .$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116
                     .$YangModuleInfoImpl.getInstance(),
index 879ed961e4c1a3eac8714000e5467506f2875562..349b45ec9635b40f7db706ac2375ad6e10f4ad5f 100644 (file)
@@ -64,34 +64,32 @@ public interface NetworkModelService {
     /**
      * create new otn link in otn-topology.
      *
-     * @param nodeA
-     *     OpenROADM node ID for link termination point A
-     * @param tpA
-     *     OpenROADM tp id on nodeA for link termination point A
-     * @param nodeZ
-     *     OpenROADM node ID for link termination point Z
-     * @param tpZ
-     *     OpenROADM tp id on nodeZ for link termination point Z
+     * @param notifLink
+     *     Expressed by the means of a link, specifies the
+     *     termination points of the otn link to create.
+     * @param suppLinks
+     *     list of link-id supported the service (used when more than one supported link)
      * @param linkType
      *     OtnLinkType, as OTU4, ODTU, etc
      */
-    void createOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType);
+    void createOtnLinks(
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
+        notifLink, List<String> suppLinks, OtnLinkType linkType);
 
     /**
      * delete otn links from otn-topology.
      *
-     * @param nodeA
-     *     OpenROADM node ID for link termination point A
-     * @param tpA
-     *     OpenROADM tp id on nodeA for link termination point A
-     * @param nodeZ
-     *     OpenROADM node ID for link termination point Z
-     * @param tpZ
-     *     OpenROADM tp id on nodeZ for link termination point Z
+     * @param notifLink
+     *     Expressed by the means of a link, specifies the
+     *     termination points of the otn link to create.
+     * @param suppLinks
+     *     list of link-id supported the service (used when more than one supported link)
      * @param linkType
      *     OtnLinkType, as OTU4, ODTU, etc
      */
-    void deleteOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType);
+    void deleteOtnLinks(
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
+        notifLink, List<String> suppLinks, OtnLinkType linkType);
 
     /**
      * Update otn links from otn-topology.
@@ -120,12 +118,10 @@ public interface NetworkModelService {
      * For services using directly a high-order odu, updates bandwidth parameters
      * of the direct parent otu link.
      *
-     * @param link
-     *     link containing termination points to be updated
      * @param supportedLinks
      *     list of link-id supported the service (used when more than one supported link)
      * @param isDeletion
      *     True indicates if the low-order otn service must be deleted
      */
-    void updateOtnLinks(Link link, List<String> supportedLinks, boolean isDeletion);
+    void updateOtnLinks(List<String> supportedLinks, boolean isDeletion);
 }
index 35ab8504f0d478450bdd1ca39908b1f3e54e6af7..ae68319318f94212b50ef12a85ecb87df43ca607 100644 (file)
@@ -391,30 +391,30 @@ public class NetworkModelServiceImpl implements NetworkModelService {
     }
 
     @Override
-    public void createOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType) {
+    public void createOtnLinks(
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
+        notifLink, List<String> suppLinks, OtnLinkType linkType) {
+
         TopologyShard otnTopologyShard;
         switch (linkType) {
             case OTU4:
             case OTUC4:
-                otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(nodeA, tpA, nodeZ, tpZ, linkType);
+                otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, null, null, linkType);
                 break;
             case ODTU4:
             case ODUC4:
                 List<LinkId> linkIdList = new ArrayList<>();
-                String prefix;
-                if (OtnLinkType.ODTU4.equals(linkType)) {
-                    prefix = OtnLinkType.OTU4.getName();
-                } else {
-                    prefix = OtnLinkType.OTUC4.getName();
+                if (suppLinks != null) {
+                    suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk)));
                 }
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(convertNetconfNodeIdToTopoNodeId(nodeA, tpA), tpA,
-                    convertNetconfNodeIdToTopoNodeId(nodeZ, tpZ), tpZ, prefix));
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(convertNetconfNodeIdToTopoNodeId(nodeZ, tpZ), tpZ,
-                    convertNetconfNodeIdToTopoNodeId(nodeA, tpA), tpA, prefix));
                 List<Link> supportedOtu4links = getOtnLinks(linkIdList);
-                List<TerminationPoint> tps = getOtnNodeTps(convertNetconfNodeIdToTopoNodeId(nodeA, tpA), tpA,
-                    convertNetconfNodeIdToTopoNodeId(nodeZ, tpZ), tpZ);
-                otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(supportedOtu4links, tps, linkType);
+                String nodeTopoA = convertNetconfNodeIdToTopoNodeId(notifLink.getATermination().getNodeId(),
+                    notifLink.getATermination().getTpId());
+                String nodeTopoZ = convertNetconfNodeIdToTopoNodeId(notifLink.getZTermination().getNodeId(),
+                    notifLink.getZTermination().getTpId());
+                List<TerminationPoint> tps = getOtnNodeTps(nodeTopoA, notifLink.getATermination().getTpId(), nodeTopoZ,
+                    notifLink.getZTermination().getTpId());
+                otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, supportedOtu4links, tps, linkType);
                 break;
             default:
                 LOG.error("unknown otn link type {}", linkType);
@@ -455,23 +455,24 @@ public class NetworkModelServiceImpl implements NetworkModelService {
     }
 
     @Override
-    public void deleteOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType) {
+    public void deleteOtnLinks(
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
+        notifLink, List<String> suppLinks, OtnLinkType linkType) {
+
         TopologyShard otnTopologyShard;
-        String nodeTopoA = new StringBuilder(nodeA).append("-").append(tpA.split("-")[0]).toString();
-        String nodeTopoZ = new StringBuilder(nodeZ).append("-").append(tpZ.split("-")[0]).toString();
+        String nodeTopoA = convertNetconfNodeIdToTopoNodeId(notifLink.getATermination().getNodeId(),
+            notifLink.getATermination().getTpId());
+        String nodeTopoZ = convertNetconfNodeIdToTopoNodeId(notifLink.getZTermination().getNodeId(),
+            notifLink.getZTermination().getTpId());
+        String tpA = notifLink.getATermination().getTpId();
+        String tpZ = notifLink.getZTermination().getTpId();
         List<Link> otuLinks;
         List<LinkId> linkIdList = new ArrayList<>();
-        String prefix;
         switch (linkType) {
             case OTU4:
             case OTUC4:
-                if (OtnLinkType.OTU4.equals(linkType)) {
-                    prefix = OtnLinkType.OTU4.getName();
-                } else {
-                    prefix = OtnLinkType.OTUC4.getName();
-                }
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix));
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix));
+                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName()));
+                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName()));
                 otuLinks = getOtnLinks(linkIdList);
                 if (checkLinks(otuLinks)) {
                     deleteLinks(otuLinks);
@@ -482,24 +483,18 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                 break;
             case ODTU4:
             case ODUC4:
-                String prefix2;
-                if (OtnLinkType.ODTU4.equals(linkType)) {
-                    prefix = OtnLinkType.ODTU4.getName();
-                    prefix2 = OtnLinkType.OTU4.getName();
-                } else {
-                    prefix = OtnLinkType.ODUC4.getName();
-                    prefix2 = OtnLinkType.OTUC4.getName();
-                }
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix));
-                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix));
+                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName()));
+                linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName()));
                 List<Link> oduLinks = getOtnLinks(linkIdList);
                 List<TerminationPoint> tps = getOtnNodeTps(nodeTopoA, tpA, nodeTopoZ, tpZ);
                 if (checkLinks(oduLinks) && checkTerminationPoints(tps)) {
                     deleteLinks(oduLinks);
                     linkIdList.clear();
-                    linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix2));
-                    linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix2));
+                    if (suppLinks != null) {
+                        suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk)));
+                    }
                     otuLinks = getOtnLinks(linkIdList);
+
                     otnTopologyShard = OpenRoadmOtnTopology.deleteOtnLinks(otuLinks, tps, linkType);
                 } else {
                     LOG.error("Error deleting ODU4 links");
@@ -510,6 +505,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                 LOG.error("unknown otn link type {}", linkType);
                 otnTopologyShard = new TopologyShard(null, null);
         }
+
         if (otnTopologyShard.getLinks() != null) {
             for (Link otnTopologyLink : otnTopologyShard.getLinks()) {
                 LOG.info("deleting and updating otn links {} in {}", otnTopologyLink.getLinkId().getValue(),
@@ -606,24 +602,10 @@ public class NetworkModelServiceImpl implements NetworkModelService {
     }
 
     @Override
-    public void updateOtnLinks(
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
-            notifLink, List<String> suppLinks, boolean isDeletion) {
-
+    public void updateOtnLinks(List<String> suppLinks, boolean isDeletion) {
         List<LinkId> linkIdList = new ArrayList<>();
-        if (notifLink != null) {
-            String nodeTopoA = convertNetconfNodeIdToTopoNodeId(notifLink.getATermination().getNodeId(),
-                notifLink.getATermination().getTpId());
-            String nodeTopoZ = convertNetconfNodeIdToTopoNodeId(notifLink.getZTermination().getNodeId(),
-                notifLink.getZTermination().getTpId());
-            linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, notifLink.getATermination().getTpId(),
-                nodeTopoZ, notifLink.getZTermination().getTpId(), OtnLinkType.OTU4.getName()));
-            linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, notifLink.getZTermination().getTpId(),
-                nodeTopoA, notifLink.getATermination().getTpId(), OtnLinkType.OTU4.getName()));
-        } else if (suppLinks != null) {
+        if (suppLinks != null) {
             suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk)));
-        } else {
-            LOG.error("Impossible to determine supported otn links without correct input data");
         }
         List<Link> supportedOtu4links = getOtnLinks(linkIdList);
 
index 2de3b4a6501e8da9b51b888d775343c542c8f864..fa02061f1d0de0215bc455d6b7ebabb2ac3a343d 100644 (file)
@@ -130,6 +130,47 @@ public final class OpenRoadmOtnTopology {
         return new TopologyShard(null, links);
     }
 
+    public static TopologyShard createOtnLinks(
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp
+                .Link notifLink,
+            OtnLinkType linkType) {
+
+        return new TopologyShard(null, initialiseOtnLinks(notifLink.getATermination().getNodeId(),
+            notifLink.getATermination().getTpId(), notifLink.getZTermination().getNodeId(),
+            notifLink.getZTermination().getTpId(), linkType));
+    }
+
+    public static TopologyShard createOtnLinks(
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp
+                .Link notifLink,
+            List<Link> supportedOtu4links,
+            List<TerminationPoint> supportedTPs,
+            OtnLinkType linkType) {
+
+        List<Link> links;
+        switch (linkType) {
+            case OTU4:
+            case OTUC4:
+                links = initialiseOtnLinks(
+                        notifLink.getATermination().getNodeId(), notifLink.getATermination().getTpId(),
+                        notifLink.getZTermination().getNodeId(), notifLink.getZTermination().getTpId(), linkType);
+                return new TopologyShard(null, links);
+            case ODTU4:
+            case ODUC4:
+                links = initialiseOtnLinks(
+                    notifLink.getATermination().getNodeId(), notifLink.getATermination().getTpId(),
+                    notifLink.getZTermination().getNodeId(), notifLink.getZTermination().getTpId(), linkType);
+                links.addAll(updateOtnLinkBwParameters(supportedOtu4links, linkType));
+                List<TerminationPoint> updatedTPs = new ArrayList<>();
+                for (TerminationPoint tp : supportedTPs) {
+                    updatedTPs.add(updateTp(tp, true, linkType));
+                }
+                return new TopologyShard(null, links, updatedTPs);
+            default:
+                return null;
+        }
+    }
+
     public static TopologyShard createOtnLinks(List<Link> suppOtuLinks, List<TerminationPoint> oldTps,
             OtnLinkType linkType) {
         List<Link> links = new ArrayList<>();
@@ -261,7 +302,7 @@ public final class OpenRoadmOtnTopology {
         for (TerminationPoint tp : oldTps) {
             tps.add(updateTp(tp, false, linkType));
         }
-        if (links.size() == 2 && tps.size() == 2) {
+        if (!links.isEmpty() && !tps.isEmpty()) {
             return new TopologyShard(null, links, tps);
         } else {
             return new TopologyShard(null, null, null);
@@ -332,6 +373,32 @@ public final class OpenRoadmOtnTopology {
         return updatedLinkBldr.build();
     }
 
+    private static List<Link> updateOtnLinkBwParameters(List<Link> supportedLinks, OtnLinkType linkType) {
+        LOG.debug("in updateOtnLinkBwParameters with supportedLinks = {}, linkType = {}", supportedLinks, linkType);
+        Uint32 usedBw;
+        switch (linkType) {
+            case ODTU4:
+                usedBw = Uint32.valueOf(100000);
+                break;
+            case ODUC4:
+                usedBw = Uint32.valueOf(400000);
+                break;
+            default:
+                usedBw = Uint32.valueOf(0);
+                break;
+        }
+        List<Link> updatedlinks = new ArrayList<>();
+        for (Link link : supportedLinks) {
+            LinkBuilder updatedLinkBldr = new LinkBuilder(link);
+            updatedLinkBldr.addAugmentation(new Link1Builder(link.augmentation(Link1.class))
+                .setAvailableBandwidth(Uint32.valueOf(0))
+                .setUsedBandwidth(usedBw)
+                .build());
+            updatedlinks.add(updatedLinkBldr.build());
+        }
+        return updatedlinks;
+    }
+
     private static TerminationPoint updateTp(TerminationPoint originalTp, boolean addingTsTpnPoolTermination,
             OtnLinkType linkType) {
         LOG.debug("in updateTp");
index db41be4b8b001a27ac5b55858a3e42e6225cf200..3dc362796a5560d58c12093b694d8974119730a2 100644 (file)
@@ -197,8 +197,8 @@ public class PceOtnNode implements PceNode {
             }
         }
 
-        if (((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)
-                || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType)) && mode.equals("AZ"))
+        if ((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)
+                || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType))
             || ((StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
                     || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
                     || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))
index 4f42fad65a76cdc5d2d99fc92df89d2352dd5b4a..d6ccdfb3189a600e5331b0007101e59906222814 100644 (file)
@@ -20,15 +20,15 @@ import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.common.mapping.PortMappingUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.Action;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.otn.service.path.input.AEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.otn.service.path.input.AEndApiInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.otn.service.path.input.ZEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.otn.service.path.input.ZEndApiInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
@@ -168,7 +168,9 @@ public final class ModelMappingUtils {
                         optionalModulationFormat.get())));
             }
         }
-        servicePathInputBuilder.setModulationFormat(atoZDirection.getModulationFormat());
+        servicePathInputBuilder.setModulationFormat(atoZDirection.getModulationFormat())
+            .setAEndApiInfo(createAendApiInfo(pathDescription, false))
+            .setZEndApiInfo(createZendApiInfo(pathDescription, false));
         return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists);
     }
 
@@ -219,7 +221,9 @@ public final class ModelMappingUtils {
                                 optionalModulationFormat.get())));
             }
         }
-        servicePathInputBuilder.setModulationFormat(ztoADirection.getModulationFormat());
+        servicePathInputBuilder.setModulationFormat(ztoADirection.getModulationFormat())
+            .setAEndApiInfo(createAendApiInfo(pathDescription, false))
+            .setZEndApiInfo(createZendApiInfo(pathDescription, false));
         return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists);
     }
 
@@ -251,8 +255,8 @@ public final class ModelMappingUtils {
             .setServiceFormat(serviceFormat)
             .setServiceRate(serviceRate)
             .setNodes(nodes)
-            .setAEndApiInfo(createAendApiInfo(pathDescription))
-            .setZEndApiInfo(createZendApiInfo(pathDescription));
+            .setAEndApiInfo(createAendApiInfo(pathDescription, true))
+            .setZEndApiInfo(createZendApiInfo(pathDescription, true));
 
         // set the trib-slots and trib-ports for the lower oder odu
         if (serviceRate.intValue() == 1 || (serviceRate.intValue() == 10)) {
@@ -422,13 +426,25 @@ public final class ModelMappingUtils {
         }
     }
 
-    private static AEndApiInfo createAendApiInfo(PathDescription pathDescription) {
-        String anodeId = extractAendFromPathDescription(pathDescription).get("nodeId");
-        String sapi = PortMappingUtils.fnv1size64(
-                String.join("-", anodeId, extractAendFromPathDescription(pathDescription).get("tpid")));
-        String dapi = PortMappingUtils.fnv1size64(
-                String.join("-", extractZendFromPathDescription(pathDescription).get("nodeId"),
-                    extractZendFromPathDescription(pathDescription).get("tpid")));
+    private static AEndApiInfo createAendApiInfo(PathDescription pathDescription, boolean isForOtn) {
+        String anodeId = null;
+        String sapi = null;
+        String dapi = null;
+        if (isForOtn) {
+            anodeId = extractAendFromPathDescriptionForOtn(pathDescription).get("nodeId");
+            sapi = PortMappingUtils.fnv1size64(
+                String.join("-", anodeId, extractAendFromPathDescriptionForOtn(pathDescription).get("tpid")));
+            dapi = PortMappingUtils.fnv1size64(
+                String.join("-", extractZendFromPathDescriptionForOtn(pathDescription).get("nodeId"),
+                    extractZendFromPathDescriptionForOtn(pathDescription).get("tpid")));
+        } else {
+            anodeId = extractAendFromPathDescriptionForOptical(pathDescription).get("nodeId");
+            sapi = PortMappingUtils.fnv1size64(
+                String.join("-", anodeId, extractAendFromPathDescriptionForOptical(pathDescription).get("tpid")));
+            dapi = PortMappingUtils.fnv1size64(
+                String.join("-", extractZendFromPathDescriptionForOptical(pathDescription).get("nodeId"),
+                    extractZendFromPathDescriptionForOptical(pathDescription).get("tpid")));
+        }
         return new AEndApiInfoBuilder()
             .setSapi(sapi)
             .setExpectedDapi(sapi)
@@ -438,13 +454,25 @@ public final class ModelMappingUtils {
             .build();
     }
 
-    private static ZEndApiInfo createZendApiInfo(PathDescription pathDescription) {
-        String znodeId = extractZendFromPathDescription(pathDescription).get("nodeId");
-        String sapi = PortMappingUtils.fnv1size64(
-                String.join("-", znodeId, extractZendFromPathDescription(pathDescription).get("tpid")));
-        String dapi = PortMappingUtils.fnv1size64(
-                String.join("-", extractAendFromPathDescription(pathDescription).get("nodeId"),
-                    extractAendFromPathDescription(pathDescription).get("tpid")));
+    private static ZEndApiInfo createZendApiInfo(PathDescription pathDescription, boolean isForOtn) {
+        String znodeId = null;
+        String sapi = null;
+        String dapi = null;
+        if (isForOtn) {
+            znodeId = extractZendFromPathDescriptionForOtn(pathDescription).get("nodeId");
+            sapi = PortMappingUtils.fnv1size64(
+                String.join("-", znodeId, extractZendFromPathDescriptionForOtn(pathDescription).get("tpid")));
+            dapi = PortMappingUtils.fnv1size64(
+                String.join("-", extractAendFromPathDescriptionForOtn(pathDescription).get("nodeId"),
+                    extractAendFromPathDescriptionForOtn(pathDescription).get("tpid")));
+        } else {
+            znodeId = extractZendFromPathDescriptionForOptical(pathDescription).get("nodeId");
+            sapi = PortMappingUtils.fnv1size64(
+                String.join("-", znodeId, extractZendFromPathDescriptionForOptical(pathDescription).get("tpid")));
+            dapi = PortMappingUtils.fnv1size64(
+                String.join("-", extractAendFromPathDescriptionForOptical(pathDescription).get("nodeId"),
+                    extractAendFromPathDescriptionForOptical(pathDescription).get("tpid")));
+        }
         return new ZEndApiInfoBuilder()
             .setSapi(sapi)
             .setExpectedDapi(sapi)
@@ -454,8 +482,9 @@ public final class ModelMappingUtils {
             .build();
     }
 
-    private static Map<String, String> extractAendFromPathDescription(PathDescription pathDescription) {
+    private static Map<String, String> extractAendFromPathDescriptionForOtn(PathDescription pathDescription) {
         List<AToZ> tpList = pathDescription.getAToZDirection().getAToZ().values().stream()
+            .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId())))
             .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface()
                 .getSimpleName()))
             .collect(Collectors.toList());
@@ -470,8 +499,9 @@ public final class ModelMappingUtils {
         return null;
     }
 
-    private static Map<String, String> extractZendFromPathDescription(PathDescription pathDescription) {
+    private static Map<String, String> extractZendFromPathDescriptionForOtn(PathDescription pathDescription) {
         List<ZToA> tpList = pathDescription.getZToADirection().getZToA().values().stream()
+            .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId())))
             .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface()
                 .getSimpleName()))
             .collect(Collectors.toList());
@@ -486,4 +516,37 @@ public final class ModelMappingUtils {
         return null;
     }
 
+    private static Map<String, String> extractAendFromPathDescriptionForOptical(PathDescription pathDescription) {
+        List<AToZ> tpList = pathDescription.getAToZDirection().getAToZ().values().stream()
+            .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId())))
+            .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface()
+                .getSimpleName()))
+            .collect(Collectors.toList());
+        for (AToZ atoZ : tpList) {
+            TerminationPoint tp = (TerminationPoint) atoZ.getResource().getResource();
+            if (!tp.getTpId().contains("CLIENT") && !tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) {
+//                String nodeId = tp.getTpNodeId();
+//                String lcp = tp.getTpId();
+                return Map.of("nodeId", tp.getTpNodeId(), "tpid", tp.getTpId());
+            }
+        }
+        return null;
+    }
+
+    private static Map<String, String> extractZendFromPathDescriptionForOptical(PathDescription pathDescription) {
+        List<ZToA> tpList = pathDescription.getZToADirection().getZToA().values().stream()
+            .sorted((az1, az2) -> Integer.compare(Integer.parseInt(az1.getId()), Integer.parseInt(az2.getId())))
+            .filter(az -> TERMINATION_POINT.equals(az.getResource().getResource().implementedInterface()
+                .getSimpleName()))
+            .collect(Collectors.toList());
+        for (ZToA ztoA : tpList) {
+            TerminationPoint tp = (TerminationPoint) ztoA.getResource().getResource();
+            if (!tp.getTpId().contains("CLIENT")  && !tp.getTpId().isEmpty() && !tp.getTpNodeId().isEmpty()) {
+//                String nodeId = tp.getTpNodeId();
+//                String lcp = tp.getTpId();
+                return Map.of("nodeId", tp.getTpNodeId(), "tpid", tp.getTpId());
+            }
+        }
+        return null;
+    }
 }
index 0fcdf8ed30d66b5cbef45467f33a5041e9d1d3f5..3bfacdc7373f0c956c14fb29ffad2a5e408453bc 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
 import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.TransportpceDeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.slf4j.Logger;
index 8c2bd6a3a944358685567c6804cf1a2466a24aed..fb43f7e9ef382d4ec7e8a3a3d00b7aec895c694f 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.transportpce.renderer;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
 
 public class ServicePathInputData {
 
index 47451e5df808237b17a81d0186168fc958fb383f..b23e85d5831fe0b909a6147c8180c7c0842a6832 100644 (file)
@@ -21,6 +21,8 @@ import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz;
@@ -55,13 +57,13 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfa
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUCTP;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTP;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTPCTP;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OTU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OduFunctionIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.PayloadTypeDef;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes.MonitoringMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.odu.container.OduBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.Opu;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.OpuBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.OtuAttributes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.otu.container.OtuBuilder;
@@ -86,8 +88,8 @@ public class OpenRoadmInterface221 {
 
     public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint)
         throws OpenRoadmInterfaceException {
-        Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
-        if (portMap == null) {
+        Mapping mapping = portMapping.getMapping(nodeId, logicalConnPoint);
+        if (mapping == null) {
             throw new OpenRoadmInterfaceException(
                 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
         }
@@ -97,7 +99,7 @@ public class OpenRoadmInterface221 {
             .setFec(EthAttributes.Fec.Off)
             .setSpeed(Uint32.valueOf(100000));
 
-        InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(portMap, EthernetCsmacd.class,
+        InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(mapping, EthernetCsmacd.class,
             logicalConnPoint + "-ETHERNET");
         // Create Interface1 type object required for adding as augmentation
         Interface1Builder ethIf1Builder = new Interface1Builder();
@@ -107,8 +109,8 @@ public class OpenRoadmInterface221 {
         openRoadmInterfaces.postInterface(nodeId, ethInterfaceBldr);
 
         // Post the equipment-state change on the device circuit-pack
-        openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
-
+        openRoadmInterfaces.postEquipmentState(nodeId, mapping.getSupportingCircuitPackName(), true);
+        this.portMapping.updateMapping(nodeId, mapping);
         return ethInterfaceBldr.getName();
     }
 
@@ -243,8 +245,8 @@ public class OpenRoadmInterface221 {
         return ochInterfaceBldr.getName();
     }
 
-    public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isNetworkPort,
-            String supportingInterface) throws OpenRoadmInterfaceException {
+    public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isCTP,
+            AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ, String payload) throws OpenRoadmInterfaceException {
         Mapping mapping = portMapping.getMapping(nodeId, logicalConnPoint);
         if (mapping == null) {
             throw new OpenRoadmInterfaceException(
@@ -252,36 +254,57 @@ public class OpenRoadmInterface221 {
         }
         InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.class,
             logicalConnPoint + "-ODU4");
-        if (supportingInterface != null) {
-            oduInterfaceBldr.setSupportingInterface(supportingInterface);
+        if (mapping.getSupportingOtu4() != null) {
+            oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOtu4());
+        }
+        if (mapping.getSupportingEthernet() != null) {
+            oduInterfaceBldr.setSupportingInterface(mapping.getSupportingEthernet());
         }
-
         // ODU interface specific data
         Class<? extends OduFunctionIdentity> oduFunction;
         MonitoringMode monitoringMode;
-        if (isNetworkPort) {
+        Opu opu = null;
+        if (isCTP) {
             oduFunction = ODUCTP.class;
             monitoringMode = MonitoringMode.Monitored;
         } else {
-            oduFunction = ODUTTPCTP.class;
+            oduFunction = ODUTTP.class;
             monitoringMode = MonitoringMode.Terminated;
+            opu = new OpuBuilder()
+                .setPayloadType(PayloadTypeDef.getDefaultInstance(payload))
+                .setExpPayloadType(PayloadTypeDef.getDefaultInstance(payload))
+                .build();
+        }
+        OduBuilder oduIfBuilder = new OduBuilder()
+                .setRate(ODU4.class)
+                .setOduFunction(oduFunction)
+                .setMonitoringMode(monitoringMode)
+                .setOpu(opu);
+        if (apiInfoA != null) {
+            oduIfBuilder.setTxSapi(apiInfoA.getSapi())
+                .setTxDapi(apiInfoA.getDapi())
+                .setExpectedSapi(apiInfoA.getExpectedSapi())
+                .setExpectedDapi(apiInfoA.getExpectedDapi());
+        }
+        if (apiInfoZ != null) {
+            oduIfBuilder.setTxSapi(apiInfoZ.getSapi())
+                .setTxDapi(apiInfoZ.getDapi())
+                .setExpectedSapi(apiInfoZ.getExpectedSapi())
+                .setExpectedDapi(apiInfoZ.getExpectedDapi());
         }
         // Create Interface1 type object required for adding as augmentation
         // TODO look at imports of different versions of class
         oduInterfaceBldr.addAugmentation(
             new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder()
-                .setOdu(new OduBuilder()
-                    .setRate(ODU4.class)
-                    .setOduFunction(oduFunction)
-                    .setMonitoringMode(monitoringMode)
-                    .setOpu(
-                        new OpuBuilder()
-                        .setPayloadType(PayloadTypeDef.getDefaultInstance("07"))
-                        .setExpPayloadType(PayloadTypeDef.getDefaultInstance("07")).build()).build())
+                .setOdu(oduIfBuilder.build())
                 .build());
 
         // Post interface on the device
         openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
+        if (!isCTP) {
+            LOG.info("{}-{} updating mapping with interface {}", nodeId, logicalConnPoint, oduInterfaceBldr.getName());
+            this.portMapping.updateMapping(nodeId, mapping);
+        }
         return oduInterfaceBldr.getName();
     }
 
@@ -361,23 +384,34 @@ public class OpenRoadmInterface221 {
         return oduInterfaceBldr.getName();
     }
 
-    public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface)
-        throws OpenRoadmInterfaceException {
-        Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
-        if (portMap == null) {
+    public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface,
+            AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ) throws OpenRoadmInterfaceException {
+
+        Mapping mapping = this.portMapping.getMapping(nodeId, logicalConnPoint);
+        if (mapping == null) {
             throw new OpenRoadmInterfaceException(
-                String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s",
-                    nodeId, logicalConnPoint));
+                String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
         }
-        // Create generic interface
-        InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOtu.class,
+        InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOtu.class,
             logicalConnPoint + "-OTU");
         otuInterfaceBldr.setSupportingInterface(supportOchInterface);
 
         // OTU interface specific data
-        OtuBuilder otuIfBuilder = new OtuBuilder();
-        otuIfBuilder.setFec(OtuAttributes.Fec.Scfec);
-        otuIfBuilder.setRate(OTU4.class);
+        OtuBuilder otuIfBuilder = new OtuBuilder()
+            .setFec(OtuAttributes.Fec.Scfec)
+            .setRate(OTU4.class);
+        if (apiInfoA != null) {
+            otuIfBuilder.setTxSapi(apiInfoA.getSapi())
+                .setTxDapi(apiInfoA.getDapi())
+                .setExpectedSapi(apiInfoA.getExpectedSapi())
+                .setExpectedDapi(apiInfoA.getExpectedDapi());
+        }
+        if (apiInfoZ != null) {
+            otuIfBuilder.setTxSapi(apiInfoZ.getSapi())
+                .setTxDapi(apiInfoZ.getDapi())
+                .setExpectedSapi(apiInfoZ.getExpectedSapi())
+                .setExpectedDapi(apiInfoZ.getExpectedDapi());
+        }
 
         // Create Interface1 type object required for adding as augmentation
         // TODO look at imports of different versions of class
@@ -387,54 +421,10 @@ public class OpenRoadmInterface221 {
 
         // Post interface on the device
         openRoadmInterfaces.postInterface(nodeId, otuInterfaceBldr);
+        this.portMapping.updateMapping(nodeId, mapping);
         return otuInterfaceBldr.getName();
     }
 
-    public String createOpenRoadmOtu4Interface(String anodeId, String alogicalConnPoint, String asupportOchInterface,
-                                               String znodeId, String zlogicalConnPoint)
-        throws OpenRoadmInterfaceException {
-        Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
-        Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
-        if (portMapA == null) {
-            throw new OpenRoadmInterfaceException(
-                    String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s ",
-                            anodeId, alogicalConnPoint));
-        }
-        // On the Zside
-        if (portMapZ == null) {
-            throw new OpenRoadmInterfaceException(
-                    String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s ",
-                            znodeId, zlogicalConnPoint));
-
-        }
-        // Create generic interface builder
-        InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOtu.class,
-                alogicalConnPoint + "-OTU");
-
-        // Set the supporting interface data
-        otuInterfaceBldr.setSupportingInterface(asupportOchInterface);
-
-        // OTU interface specific data
-        OtuBuilder otuIfBuilder = new OtuBuilder()
-                .setFec(OtuAttributes.Fec.Scfec)
-                .setRate(OTU4.class)
-                .setTxSapi(portMapA.getLcpHashVal())
-                .setTxDapi(portMapZ.getLcpHashVal())
-                // setting expected SAPI and DAPI values
-                .setExpectedDapi(portMapA.getLcpHashVal())
-                .setExpectedSapi(portMapZ.getLcpHashVal());
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder otuIf1Builder =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder();
-
-        otuInterfaceBldr.addAugmentation(otuIf1Builder.setOtu(otuIfBuilder.build()).build());
-
-        // Post interface on the device
-        openRoadmInterfaces.postInterface(anodeId, otuInterfaceBldr);
-        return otuInterfaceBldr.getName();
-
-    }
-
     public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotName) {
         return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName);
     }
@@ -572,11 +562,6 @@ public class OpenRoadmInterface221 {
 
         // Post interface on the device
         openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
-        try {
-            Thread.sleep(3000);
-        } catch (InterruptedException e) {
-            LOG.error("Error waiting post interface on device", e);
-        }
         this.portMapping.updateMapping(nodeId, portMap);
         return oduInterfaceBldr.getName();
     }
@@ -623,11 +608,6 @@ public class OpenRoadmInterface221 {
 
         // Post interface on the device
         openRoadmInterfaces.postInterface(anodeId, oduInterfaceBldr);
-        try {
-            Thread.sleep(3000);
-        } catch (InterruptedException e) {
-            LOG.error("Error waiting post interface on device", e);
-        }
         this.portMapping.updateMapping(anodeId, portMapA);
         return oduInterfaceBldr.getName();
     }
index 940afe904e0b5f5a70d182eb49a8eafa71eaca79..b62ee33fddc9e0e0d366bc2e4d8c4d19c802f005 100644 (file)
@@ -15,6 +15,8 @@ import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
 import org.opendaylight.transportpce.common.mapping.MappingUtils;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OpucnTribSlotDef;
 import org.slf4j.Logger;
@@ -171,20 +173,22 @@ public class OpenRoadmInterfaceFactory {
      *
      * @param nodeId                 node ID
      * @param logicalConnPoint       logical connection point
-     * @param isNetworkPort          to distinguish a CTP from a TTP
-     * @param supportingInterface supporting OTU4 or 100GE interface
+     * @param isCTP                  to distinguish with a TTP odu interface
+     * @param apiInfoA               sapi and dapi for A end of the service
+     * @param apiInfoZ               sapi and dapi for Z end of the service
+     * @param payload                payload type of the OPU container
      * @return Name of the interface if successful, otherwise return null.
      * @throws OpenRoadmInterfaceException OpenRoadm interface exception
      */
 
-    public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isNetworkPort,
-            String supportingInterface) throws OpenRoadmInterfaceException {
+    public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isCTP,
+            AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ, String payload) throws OpenRoadmInterfaceException {
         switch (mappingUtils.getOpenRoadmVersion(nodeId)) {
             case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
                 return openRoadmInterface121.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint);
             case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                return openRoadmInterface221.createOpenRoadmOdu4HOInterface(nodeId, logicalConnPoint, isNetworkPort,
-                    supportingInterface);
+                return openRoadmInterface221.createOpenRoadmOdu4HOInterface(nodeId, logicalConnPoint, isCTP,
+                    apiInfoA, apiInfoZ, payload);
             default:
                 return null;
         }
@@ -196,19 +200,20 @@ public class OpenRoadmInterfaceFactory {
      * @param nodeId              node ID
      * @param logicalConnPoint    logical connection point
      * @param supportOchInterface supporting OCH interface
-     * @return Name of the interface if successful, otherwise return null.
+     * @param apiInfoA            sapi and dapi for A end of the service
+     * @param apiInfoZ            sapi and dapi for Z end of the service
      * @throws OpenRoadmInterfaceException OpenRoadm interface exception
      */
 
-    public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface)
-            throws OpenRoadmInterfaceException {
+    public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface,
+            AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ) throws OpenRoadmInterfaceException {
         switch (mappingUtils.getOpenRoadmVersion(nodeId)) {
             case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
                 return openRoadmInterface121
                         .createOpenRoadmOtu4Interface(nodeId, logicalConnPoint, supportOchInterface);
             case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                return openRoadmInterface221
-                        .createOpenRoadmOtu4Interface(nodeId, logicalConnPoint, supportOchInterface);
+                return openRoadmInterface221.createOpenRoadmOtu4Interface(nodeId, logicalConnPoint, supportOchInterface,
+                    apiInfoA, apiInfoZ);
             case StringConstants.OPENROADM_DEVICE_VERSION_7_1:
                 return openRoadmInterface710.createOpenRoadmOtucnInterface(nodeId, logicalConnPoint,
                     supportOchInterface);
@@ -217,36 +222,6 @@ public class OpenRoadmInterfaceFactory {
         }
     }
 
-    /**
-     * This methods creates an OTU interface on the given termination point.
-     *
-     * @param anodeId node ID for A side
-     * @param alogicalConnPoint logical connection point for A side
-     * @param asupportOchInterface supporting OCH interface
-     * @param znodeId node ID for the Z side
-     * @param zlogicalConnPoint logical connection point for Z side
-     * @return Name of the interface if successful, otherwise return null.
-     *
-     * @throws OpenRoadmInterfaceException OpenRoadm interface exception
-     */
-
-    public String createOpenRoadmOtu4Interface(String anodeId, String alogicalConnPoint, String asupportOchInterface,
-            String znodeId, String zlogicalConnPoint)
-            throws OpenRoadmInterfaceException {
-        switch (mappingUtils.getOpenRoadmVersion(anodeId)) {
-            case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
-                return openRoadmInterface121.createOpenRoadmOtu4Interface(anodeId,
-                        alogicalConnPoint, asupportOchInterface);
-            case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                return openRoadmInterface221.createOpenRoadmOtu4Interface(anodeId, alogicalConnPoint,
-                        asupportOchInterface, znodeId, zlogicalConnPoint);
-            case StringConstants.OPENROADM_DEVICE_VERSION_7_1:
-                return openRoadmInterface710.createOpenRoadmOtucnInterface(anodeId, alogicalConnPoint,
-                    asupportOchInterface, znodeId, zlogicalConnPoint);
-            default:
-                return null;
-        }
-    }
 
     public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotNumber) {
         return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotNumber);
@@ -375,15 +350,15 @@ public class OpenRoadmInterfaceFactory {
     }
 
     public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint, String servicename,
-            String payLoad, boolean isNetworkPort, int tribPortNumber, int tribSlotIndex)
+            boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ)
             throws OpenRoadmInterfaceException {
         switch (mappingUtils.getOpenRoadmVersion(nodeId)) {
             case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
                 LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_1_2_1_MSG);
                 return null;
             case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                return openRoadmOtnInterface221.createOpenRoadmOdu2eInterface(
-                        nodeId, logicalConnPoint, servicename, payLoad, isNetworkPort, tribPortNumber, tribSlotIndex);
+                return openRoadmOtnInterface221.createOpenRoadmOdu2eInterface(nodeId, logicalConnPoint, servicename,
+                    isCTP, tribPortNumber, tribSlotIndex, apiInfoA, apiInfoZ);
             default:
                 return null;
         }
index ff3155b91db84e979f1ded7d0c2abdee78bcf865..53e4ad61e2cac58130e648849dadf6cfbec13954 100644 (file)
@@ -13,6 +13,8 @@ import java.util.stream.IntStream;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
@@ -27,10 +29,14 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev17121
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODU2e;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUCTP;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTPCTP;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OduFunctionIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.PayloadTypeDef;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes.MonitoringMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.odu.container.OduBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.Opu;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.OpuBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.parent.odu.allocation.ParentOduAllocation;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.parent.odu.allocation.ParentOduAllocationBuilder;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -40,6 +46,8 @@ import org.slf4j.LoggerFactory;
 
 public class OpenRoadmOtnInterface221 {
 
+    private static final String MAPPING_ERROR_EXCEPTION_MESSAGE =
+        "Unable to get mapping from PortMapping for node % and logical connection port %s";
     private final PortMapping portMapping;
     private final OpenRoadmInterfaces openRoadmInterfaces;
     private static final Logger LOG = LoggerFactory
@@ -125,57 +133,65 @@ public class OpenRoadmOtnInterface221 {
         return ethernetInterfaceName;
     }
 
-    public String createOpenRoadmOdu2eInterface(String nodeId,
-            String logicalConnPoint, String serviceName, String payLoad,
-            boolean isNetworkPort, int tribPortNumber, int tribSlotIndex)
+    public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint, String serviceName,
+            boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ)
             throws OpenRoadmInterfaceException {
-        Mapping portMap = this.portMapping.getMapping(nodeId, logicalConnPoint);
-        if (portMap == null) {
-            throwException(nodeId, logicalConnPoint);
-        }
-        String supportingInterface = null;
-
-        if (isNetworkPort) {
-            supportingInterface = portMap.getSupportingOdu4();
-        } else {
-            supportingInterface = logicalConnPoint + "-ETHERNET10G";
-        }
 
-        if (supportingInterface == null) {
+        Mapping mapping = this.portMapping.getMapping(nodeId, logicalConnPoint);
+        if (mapping == null) {
             throw new OpenRoadmInterfaceException(
-                    "Interface Creation failed because of missing supported "
-                    + "ODU4 on network end or Ethernet on client");
+                String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
+        }
+        InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.class,
+            logicalConnPoint + "-ODU2e-" + serviceName);
+        if (mapping.getSupportingOdu4() != null) {
+            oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOdu4());
+        }
+        if (mapping.getSupportingEthernet() != null) {
+            oduInterfaceBldr.setSupportingInterface(mapping.getSupportingEthernet());
         }
 
-        InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(
-                portMap, OtnOdu.class,
-                logicalConnPoint + "-ODU2e-" + serviceName)
-                        .setSupportingInterface(supportingInterface);
-
-        // ODU interface specific data
-        OduBuilder oduIfBuilder = new OduBuilder().setRate(ODU2e.class)
-                .setOduFunction(ODUTTPCTP.class)
-                .setMonitoringMode(OduAttributes.MonitoringMode.Terminated);
-        LOG.debug("Inside the ODU2e creation {} {} {}", isNetworkPort,
-                tribPortNumber, tribSlotIndex);
-        if (isNetworkPort) {
+        Class<? extends OduFunctionIdentity> oduFunction;
+        MonitoringMode monitoringMode;
+        Opu opu = null;
+        ParentOduAllocation parentOduAllocation = null;
+        if (isCTP) {
+            oduFunction = ODUCTP.class;
+            monitoringMode = MonitoringMode.Monitored;
             List<Uint16> tribSlots = new ArrayList<>();
             Uint16 newIdx = Uint16.valueOf(tribSlotIndex);
             tribSlots.add(newIdx);
             IntStream.range(tribSlotIndex, tribSlotIndex + 8)
                     .forEach(nbr -> tribSlots.add(Uint16.valueOf(nbr)));
-            ParentOduAllocationBuilder parentOduAllocationBuilder = new ParentOduAllocationBuilder()
+            parentOduAllocation = new ParentOduAllocationBuilder()
                     .setTribPortNumber(Uint16.valueOf(tribPortNumber))
-                    .setTribSlots(tribSlots);
-            oduIfBuilder.setOduFunction(ODUCTP.class)
-                    .setMonitoringMode(OduAttributes.MonitoringMode.Monitored)
-                    .setParentOduAllocation(parentOduAllocationBuilder.build());
+                    .setTribSlots(tribSlots)
+                    .build();
         } else {
-            // Set Opu attributes
-            OpuBuilder opuBldr = new OpuBuilder()
-                    .setPayloadType(new PayloadTypeDef(payLoad))
-                    .setExpPayloadType(new PayloadTypeDef(payLoad));
-            oduIfBuilder.setOpu(opuBldr.build());
+            oduFunction = ODUTTPCTP.class;
+            monitoringMode = MonitoringMode.Terminated;
+            opu = new OpuBuilder()
+                .setPayloadType(PayloadTypeDef.getDefaultInstance("03"))
+                .setExpPayloadType(PayloadTypeDef.getDefaultInstance("03"))
+                .build();
+        }
+        OduBuilder oduIfBuilder = new OduBuilder()
+            .setRate(ODU2e.class)
+            .setOduFunction(oduFunction)
+            .setMonitoringMode(monitoringMode)
+            .setOpu(opu)
+            .setParentOduAllocation(parentOduAllocation);
+        if (apiInfoA != null) {
+            oduIfBuilder.setTxSapi(apiInfoA.getSapi())
+                .setTxDapi(apiInfoA.getDapi())
+                .setExpectedSapi(apiInfoA.getExpectedSapi())
+                .setExpectedDapi(apiInfoA.getExpectedDapi());
+        }
+        if (apiInfoZ != null) {
+            oduIfBuilder.setTxSapi(apiInfoZ.getSapi())
+                .setTxDapi(apiInfoZ.getDapi())
+                .setExpectedSapi(apiInfoZ.getExpectedSapi())
+                .setExpectedDapi(apiInfoZ.getExpectedDapi());
         }
         // Create Interface1 type object required for adding as augmentation
         // TODO look at imports of different versions of class
@@ -186,7 +202,10 @@ public class OpenRoadmOtnInterface221 {
 
         // Post interface on the device
         this.openRoadmInterfaces.postOTNInterface(nodeId, oduInterfaceBldr);
-        LOG.info("returning the ODU2e inteface {}", oduInterfaceBldr.getName());
+        if (!isCTP) {
+            LOG.info("{}-{} updating mapping with interface {}", nodeId, logicalConnPoint, oduInterfaceBldr.getName());
+            this.portMapping.updateMapping(nodeId, mapping);
+        }
         return oduInterfaceBldr.getName();
     }
 
index ff44cc371462e2cff04d15f8f706d3bda3646de0..a242147bdcdfffe2e4cb4d15a8fa7addc3e097d6 100644 (file)
@@ -10,12 +10,12 @@ package org.opendaylight.transportpce.renderer.provisiondevice;
 
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
 
 
 public interface DeviceRendererService {
index e21c38ecb626fa1aaf680066b8042f1ac6b67916..ee9448162ae426bd7f0ecc719c018ce5cc9848d9 100644 (file)
@@ -49,18 +49,20 @@ import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.Servic
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.ServiceNodelist;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.NodelistBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.NodelistKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.renderer.rollback.output.FailedToRollback;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.renderer.rollback.output.FailedToRollbackBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.renderer.rollback.output.FailedToRollbackKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackKey;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.OpenroadmNodeVersion;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.Topology;
@@ -130,6 +132,14 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
             // take the index of the node
             int nodeIndex = nodes.indexOf(node);
             LOG.info("Starting provisioning for node : {}", nodeId);
+            AEndApiInfo apiInfoA = null;
+            ZEndApiInfo apiInfoZ = null;
+            if (input.getAEndApiInfo() != null && input.getAEndApiInfo().getNodeId().contains(nodeId)) {
+                apiInfoA = input.getAEndApiInfo();
+            }
+            if (input.getZEndApiInfo() != null && input.getZEndApiInfo().getNodeId().contains(nodeId)) {
+                apiInfoZ = input.getZEndApiInfo();
+            }
             List<String> createdEthInterfaces = new ArrayList<>();
             List<String> createdOtuInterfaces = new ArrayList<>();
             List<String> createdOduInterfaces = new ArrayList<>();
@@ -148,21 +158,14 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                         String supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface(
                                 nodeId, destTp, spectrumInformation);
                         createdOchInterfaces.add(supportingOchInterface);
-                        // Here we pass logical connection-point of z-end to set SAPI and DAPI
-                        Nodes tgtNode =
-                            nodeIndex + 1 == nodes.size()
-                                // For the end node, tgtNode becomes the first node in the list
-                                ? nodes.get(0)
-                                : nodes.get(nodeIndex + 1);
-                                // tgtNode srcTp is null in this last cond
                         String supportingOtuInterface = this.openRoadmInterfaceFactory.createOpenRoadmOtu4Interface(
-                                nodeId, destTp, supportingOchInterface, tgtNode.getNodeId(), tgtNode.getDestTp());
+                                nodeId, destTp, supportingOchInterface, apiInfoA, apiInfoZ);
                         createdOtuInterfaces.add(supportingOtuInterface);
                         if (srcTp == null) {
                             otnLinkTps.add(new LinkTpBuilder().setNodeId(nodeId).setTpId(destTp).build());
                         } else {
-                            createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOdu4Interface(nodeId,
-                                    destTp, supportingOtuInterface));
+                            createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
+                                    nodeId, destTp, false, apiInfoA, apiInfoZ, "07"));
                         }
                     }
                     if ((srcTp != null) && srcTp.contains(StringConstants.CLIENT_TOKEN)) {
@@ -181,7 +184,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                                 nodeId, srcTp, spectrumInformation);
                         createdOchInterfaces.add(supportingOchInterface);
                         String supportingOtuInterface = this.openRoadmInterfaceFactory.createOpenRoadmOtu4Interface(
-                                nodeId, srcTp, supportingOchInterface);
+                                nodeId, srcTp, supportingOchInterface, apiInfoA, apiInfoZ);
                         createdOtuInterfaces.add(supportingOtuInterface);
                         createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOdu4Interface(
                                 nodeId, srcTp, supportingOtuInterface));
index d022ee9dce6b215b54698a4f77657625a5cdb9ec..22749d9e0cda3ca80095dff85f9cc8ed5033b4ed 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.transportpce.renderer.provisiondevice;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
 
 public interface OtnDeviceRendererService {
     OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input, String serviceType);
index c6c409b77251a50c86571f059c746892ab0361a4..3d3e704910d0d569c2807f4eb90d455b8ffbf905 100644 (file)
@@ -20,7 +20,6 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.ForkJoinTask;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
@@ -28,9 +27,11 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OpucnTribSlotDef;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.link.tp.LinkTpBuilder;
@@ -90,7 +91,7 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                     }
                     break;
                 case StringConstants.SERVICE_TYPE_ODU4:
-                    createODU4TtpInterface(input, nodeInterfaces, otnLinkTps);
+                    createHighOrderInterfaces(input, nodeInterfaces, otnLinkTps);
                     break;
                 case StringConstants.SERVICE_TYPE_ODUC4:
                     createOduc4TtpInterface(input, nodeInterfaces, otnLinkTps);
@@ -186,24 +187,52 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                     break;
                 case StringConstants.SERVICE_TYPE_100GE_M:
                     connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU4");
+                    otnLinkTps.add(new LinkTpBuilder()
+                        .setNodeId(nodeId)
+                        .setTpId(networkTp)
+                        .build());
                     break;
                 case StringConstants.SERVICE_TYPE_ODU4:
-                    interfacesToDelete.add(networkTp + "-ODU4");
-                    if (node.getNetwork2Tp() != null) {
+                    if (node.getClientTp() == null && node.getNetwork2Tp() == null) {
+                        interfacesToDelete.add(networkTp + "-ODU4");
+                        otnLinkTps.add(new LinkTpBuilder()
+                            .setNodeId(nodeId)
+                            .setTpId(networkTp)
+                            .build());
+                    }
+                    if (node.getClientTp() == null && node.getNetwork2Tp() != null) {
+                        interfacesToDelete.add(networkTp + "-ODU4");
                         interfacesToDelete.add(node.getNetwork2Tp() + "-ODU4");
+                        connectionNumber = getConnectionNumber(null, node, networkTp, "ODU4");
                     }
                     break;
                 case StringConstants.SERVICE_TYPE_ODUC4:
-                    interfacesToDelete.add(networkTp + "-ODUC4");
-                    if (node.getNetwork2Tp() != null) {
+                    if (node.getClientTp() == null && node.getNetwork2Tp() == null) {
+                        interfacesToDelete.add(networkTp + "-ODUC4");
+                        otnLinkTps.add(new LinkTpBuilder()
+                            .setNodeId(nodeId)
+                            .setTpId(networkTp)
+                            .build());
+                    }
+                    if (node.getClientTp() == null && node.getNetwork2Tp() != null) {
+                        interfacesToDelete.add(networkTp + "-ODUC4");
                         interfacesToDelete.add(node.getNetwork2Tp() + "-ODUC4");
+                        connectionNumber = getConnectionNumber(null, node, networkTp, "ODUC4");
                     }
                     break;
                 case StringConstants.SERVICE_TYPE_10GE:
                     connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU2e");
+                    otnLinkTps.add(new LinkTpBuilder()
+                        .setNodeId(nodeId)
+                        .setTpId(networkTp)
+                        .build());
                     break;
                 case StringConstants.SERVICE_TYPE_1GE:
                     connectionNumber = getConnectionNumber(input.getServiceName(), node, networkTp, "ODU0");
+                    otnLinkTps.add(new LinkTpBuilder()
+                        .setNodeId(nodeId)
+                        .setTpId(networkTp)
+                        .build());
                     break;
                 default:
                     LOG.error("service-type {} not managed yet", serviceType);
@@ -238,16 +267,6 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                     results.add(result);
                 }
             }
-            List<String> interList =
-                    interfacesToDelete.stream().filter(ele -> ele.contains("NETWORK")).collect(Collectors.toList());
-            if (!interList.isEmpty()) {
-                for (String inter : interList) {
-                    otnLinkTps.add(new LinkTpBuilder()
-                            .setNodeId(nodeId)
-                            .setTpId(inter.split("-ODU")[0])
-                            .build());
-                }
-            }
         }));
         try {
             forkJoinTask.get();
@@ -297,6 +316,14 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
     private void createLowOrderInterfaces(OtnServicePathInput input, List<NodeInterface> nodeInterfaces,
             CopyOnWriteArrayList<LinkTp> linkTpList) throws OpenRoadmInterfaceException {
         for (Nodes node : input.getNodes()) {
+            AEndApiInfo apiInfoA = null;
+            ZEndApiInfo apiInfoZ = null;
+            if (input.getAEndApiInfo() != null && input.getAEndApiInfo().getNodeId().contains(node.getNodeId())) {
+                apiInfoA = input.getAEndApiInfo();
+            }
+            if (input.getZEndApiInfo() != null && input.getZEndApiInfo().getNodeId().contains(node.getNodeId())) {
+                apiInfoZ = input.getZEndApiInfo();
+            }
             // check if the node is mounted or not?
             List<String> createdEthInterfaces = new ArrayList<>();
             List<String> createdOduInterfaces = new ArrayList<>();
@@ -335,21 +362,22 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
                         createdOduInterfaces.add(
                             // suppporting interface?, payload ?
                             openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
-                                node.getClientTp(), input.getServiceName(), PT_03, false, input.getTribPortNumber(),
-                                input.getTribSlot()));
+                                node.getClientTp(), input.getServiceName(), false, input.getTribPortNumber(),
+                                input.getTribSlot(), apiInfoA, apiInfoZ));
                     }
                     createdOduInterfaces.add(
                         // supporting interface? payload ?
                         openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), node.getNetworkTp(),
-                            input.getServiceName(), PT_03, true, input.getTribPortNumber(), input.getTribSlot()));
+                            input.getServiceName(), true, input.getTribPortNumber(), input.getTribSlot(), apiInfoA,
+                            apiInfoZ));
                     linkTpList.add(
                         new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     if (node.getNetwork2Tp() != null) {
                         createdOduInterfaces.add(
                             // supporting interface? payload ?
                             openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
-                                node.getNetwork2Tp(), input.getServiceName(), PT_03, true, input.getTribPortNumber(),
-                                input.getTribSlot()));
+                                node.getNetwork2Tp(), input.getServiceName(), true, input.getTribPortNumber(),
+                                input.getTribSlot(), apiInfoA, apiInfoZ));
                         linkTpList.add(
                             new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
                     }
@@ -413,33 +441,44 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
 
     private void createHighOrderInterfaces(OtnServicePathInput input, List<NodeInterface> nodeInterfaces,
             CopyOnWriteArrayList<LinkTp> linkTpList) throws OpenRoadmInterfaceException {
-        for (Nodes node : input.getNodes()) {
+        for (Nodes node : input.nonnullNodes()) {
+            AEndApiInfo apiInfoA = null;
+            ZEndApiInfo apiInfoZ = null;
+            if (input.getAEndApiInfo() != null && input.getAEndApiInfo().getNodeId().contains(node.getNodeId())) {
+                apiInfoA = input.getAEndApiInfo();
+            }
+            if (input.getZEndApiInfo() != null && input.getZEndApiInfo().getNodeId().contains(node.getNodeId())) {
+                apiInfoZ = input.getZEndApiInfo();
+            }
             // check if the node is mounted or not?
             List<String> createdEthInterfaces = new ArrayList<>();
             List<String> createdOduInterfaces = new ArrayList<>();
             switch (input.getServiceRate().intValue()) {
                 case 100:
                     LOG.info("Input service is 100G");
-                    if (node.getClientTp() != null) {
-                        String supEthInter = openRoadmInterfaceFactory.createOpenRoadmEth100GInterface(
-                                node.getNodeId(), node.getClientTp());
-                        createdEthInterfaces.add(supEthInter);
+                    if (node.getClientTp() != null && node.getNetwork2Tp() == null) {
+                        createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth100GInterface(
+                            node.getNodeId(), node.getClientTp()));
+                        createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
+                                node.getNodeId(), node.getClientTp(), false, apiInfoA, apiInfoZ, "21"));
+                        // supporting interface? payload ?
                         createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
-                                node.getNodeId(), node.getClientTp(), false, supEthInter));
+                                node.getNodeId(), node.getNetworkTp(), true, null, null, "21"));
+                        linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getClientTp())
+                                .build());
                     }
-                    createdOduInterfaces.add(
+                    if (node.getClientTp() == null && node.getNetwork2Tp() == null) {
+                        createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
+                            node.getNodeId(), node.getNetworkTp(), false, apiInfoA, apiInfoZ, "21"));
+                        linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp())
+                            .build());
+                    }
+                    if (node.getClientTp() == null && node.getNetwork2Tp() != null) {
                         // supporting interface? payload ?
-                        openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(node.getNodeId(), node.getNetworkTp(),
-                                true, null));
-                    linkTpList.add(
-                        new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
-                    if (node.getNetwork2Tp() != null) {
-                        createdOduInterfaces.add(
-                            // supporting interface? payload ?
-                            openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(node.getNodeId(),
-                                node.getNetwork2Tp(), true, null));
-                        linkTpList.add(
-                            new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
+                        createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
+                            node.getNodeId(), node.getNetworkTp(), true, null, null, "21"));
+                        createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
+                                node.getNodeId(), node.getNetwork2Tp(), true, null, null, "21"));
                     }
                     break;
                 default:
@@ -449,7 +488,7 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
 
             // implement cross connect
             List<String> createdConnections = new ArrayList<>();
-            if (!createdOduInterfaces.isEmpty()) {
+            if (createdOduInterfaces.size() == 2) {
                 Optional<String> connectionNameOpt = postCrossConnect(createdOduInterfaces, node);
                 createdConnections.add(connectionNameOpt.get());
                 LOG.info("Created cross connects");
@@ -491,31 +530,4 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
             linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
         }
     }
-
-    private void createODU4TtpInterface(OtnServicePathInput input, List<NodeInterface> nodeInterfaces,
-        CopyOnWriteArrayList<LinkTp> linkTpList) throws OpenRoadmInterfaceException {
-        if (input.getNodes() == null) {
-            return;
-        }
-        LOG.info("Creation of ODU4 tp interface {}", input);
-        for (int i = 0; i < input.getNodes().size(); i++) {
-            Nodes node = input.getNodes().get(i);
-            String supportingOtuInterface = node.getNetworkTp() + "-OTU";
-
-            Nodes tgtNode =
-                i + 1 == input.getNodes().size()
-                // For the end node, tgtNode becomes the first node in the list
-                    ? input.getNodes().get(0)
-                    : input.getNodes().get(i + 1);
-
-            nodeInterfaces.add(new NodeInterfaceBuilder()
-                    .withKey(new NodeInterfaceKey(node.getNodeId()))
-                    .setNodeId(node.getNodeId())
-                    .setOduInterfaceId(List.of(
-                        openRoadmInterfaceFactory.createOpenRoadmOtnOdu4Interface(node.getNodeId(),
-                            node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp())))
-                    .build());
-            linkTpList.add(new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
-        }
-    }
 }
index c63e67086d56bbd112d6b19976ca4e4aabe66e9e..a9fd162b0d9c244417ea59362abfaab771403894 100644 (file)
@@ -21,6 +21,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
@@ -39,8 +40,8 @@ import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetu
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetupTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OtnDeviceRenderingTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.RollbackProcessor;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.Action;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
@@ -73,6 +74,7 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.olm.get.pm.input.ResourceIdentifierBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.Nodes;
+import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev210511.OtnLinkType;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -653,9 +655,21 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         List<LinkTp> otnLinkTerminationPoints = new ArrayList<>();
         renderingResults.forEach(rr -> otnLinkTerminationPoints.addAll(rr.getOtnLinkTps()));
         Link notifLink = createLinkForNotif(otnLinkTerminationPoints);
-        List<String> supportedLinks = (notifLink == null && !otnLinkTerminationPoints.isEmpty())
-            ? ModelMappingUtils.getLinksFromServicePathDescription(input.getPathDescription())
-            : null;
+        List<String> allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(input.getPathDescription());
+        List<String> supportedLinks = null;
+        switch (serviceType) {
+            case StringConstants.SERVICE_TYPE_ODU4:
+            case StringConstants.SERVICE_TYPE_100GE_S:
+                supportedLinks = allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
+                break;
+            case StringConstants.SERVICE_TYPE_ODUC4:
+                supportedLinks = allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
+                break;
+            default:
+                break;
+        }
 
         sendNotificationsWithPathDescription(ServicePathNotificationTypes.ServiceImplementationRequest,
             input.getServiceName(), RpcStatusEx.Successful, OPERATION_SUCCESSFUL, input.getPathDescription(),
@@ -691,9 +705,21 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         List<LinkTp> otnLinkTerminationPoints = new ArrayList<>();
         renderingResults.forEach(rr -> otnLinkTerminationPoints.addAll(rr.getOtnLinkTps()));
         Link notifLink = createLinkForNotif(otnLinkTerminationPoints);
-        List<String> supportedLinks = (notifLink == null && !otnLinkTerminationPoints.isEmpty())
-            ? ModelMappingUtils.getLinksFromServicePathDescription(pathDescription)
-            : null;
+        List<String> allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(pathDescription);
+        List<String> supportedLinks = null;
+        switch (serviceType) {
+            case StringConstants.SERVICE_TYPE_ODU4:
+            case StringConstants.SERVICE_TYPE_100GE_S:
+                supportedLinks = allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
+                break;
+            case StringConstants.SERVICE_TYPE_ODUC4:
+                supportedLinks = allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
+                break;
+            default:
+                break;
+        }
 
         sendNotificationsWithPathDescription(ServicePathNotificationTypes.ServiceDelete,
                 serviceName, RpcStatusEx.Successful, OPERATION_SUCCESSFUL, pathDescription, notifLink, supportedLinks,
index 8ee9959a1dac6f71c15fa72f7a1e9a1b35edd422..9a2e606395f56d6ad1ac62313963cf7853de8a31 100644 (file)
@@ -13,10 +13,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.renderer.rollback.output.FailedToRollback;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.node.interfaces.NodeInterface;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.node.interfaces.NodeInterfaceKey;
 import org.slf4j.Logger;
index a45ebe86524576a2b32b6fae4a163ff84d8c01a4..9a6895f5d925d66a151fcf60bbe3671c163907be 100644 (file)
@@ -14,7 +14,7 @@ import org.opendaylight.transportpce.renderer.ServicePathInputData;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRenderingResult;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.optical.renderer.nodes.Nodes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index 59296db118e5bbc4168991f5352bce0f5c05270d..ade66d62a5729451f26153aeafa449efb29d0a93 100644 (file)
@@ -12,8 +12,8 @@ import java.util.ArrayList;
 import java.util.concurrent.Callable;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRenderingResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index d9387cddab95d05832596314356ca84a20afa761..338bea968454fef98f40746dd1af7cad8a6f4ae7 100644 (file)
@@ -13,17 +13,17 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.service.ServiceTypes;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.OtnServicePathOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.TransportpceDeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
index 528e30daf61eb5f0ff2b7ca4ba82a76cd875169e..2740d637ff3fd940ad4d212b3c6a8407a4f05145 100644 (file)
@@ -101,8 +101,8 @@ public class OpenRoadMInterface221Test extends AbstractTest {
         String supportOchInterface = "supportOchInterface";
         Mockito.when(portMapping.getMapping(nodeId, logicalConnPoint))
                 .thenReturn(new MappingBuilder().setLogicalConnectionPoint(logicalConnPoint).build());
-        Assert.assertEquals(
-                openRoadMInterface221.createOpenRoadmOtu4Interface(nodeId, logicalConnPoint, supportOchInterface),
+        Assert.assertEquals(openRoadMInterface221.createOpenRoadmOtu4Interface(
+                    nodeId, logicalConnPoint, supportOchInterface, null, null),
                 logicalConnPoint + "-OTU");
 
     }
index c8878ebe7cd098ee66450ab87b3ec2bae9a04030..95eb79b8f0d4b9315e6a87384bb245b5fe5ed7d4 100644 (file)
@@ -49,8 +49,8 @@ import org.opendaylight.transportpce.renderer.utils.CreateOtsOmsDataUtils;
 import org.opendaylight.transportpce.renderer.utils.MountPointUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.Network;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.OpenroadmNodeVersion;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.network.Nodes;
@@ -94,12 +94,12 @@ public class DeviceRendererServiceImplCreateOtsOmsTest extends AbstractTest {
         this.portMappingVersion121 = new PortMappingVersion121(getDataBroker(), this.deviceTransactionManager);
         this.portMappingVersion710 = new PortMappingVersion710(getDataBroker(), deviceTransactionManager);
         this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(this.deviceTransactionManager);
+        this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(this.deviceTransactionManager);
         PortMapping portMapping =
             new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22,
                 this.portMappingVersion121);
         this.openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(this.deviceTransactionManager, portMapping,
             this.portMappingVersion22);
-        this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(this.deviceTransactionManager);
         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping,openRoadmInterfaces);
         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping,openRoadmInterfaces);
         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
index 7944ff872cebab77294abcb27503b77e65221a79..b452f15e25fd1cd02021d25ba2134086b590d499 100644 (file)
@@ -53,7 +53,7 @@ import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
 import org.opendaylight.transportpce.test.stub.MountPointStub;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
index 522c829b1f70a775427ddb8977f1f8013967c62a..6ec012f85d7d5db2241e68e655f3b4684914fe89 100644 (file)
@@ -16,11 +16,11 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.Action;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
 
 @Ignore
 public class DeviceRendererRPCImplTest extends AbstractTest {
index df7b45118c2b4c5001eeae24dd88932b1cbaafd4..6c03f4847bfd903f0fda072c82428057a670d479 100644 (file)
@@ -8,8 +8,8 @@
 
 package org.opendaylight.transportpce.renderer.utils;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.CreateOtsOmsInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInputBuilder;
 
 public final class CreateOtsOmsDataUtils {
 
index 6513f958e358b872030f11cadae02a9b6a4b5abe..db72f3bddb5327b33eb585e2865b03fbbb2a1a5c 100644 (file)
@@ -13,10 +13,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.ServicePathInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescription;
index 8f9b73a6e53eb1439ba1e149f4d89b1c3e5793c4..9b2e6cced0f32bf9dc73e04030ca8096ac8d82c2 100644 (file)
@@ -321,14 +321,10 @@ public class RendererListenerImpl implements TransportpceRendererListener {
                     StringConstants.SERVICE_TYPE_ODUC4, OtnLinkType.ODUC4);
                 if (isDeletion) {
                     LOG.info("updating otn-topology removing links");
-                    this.networkModelService.deleteOtnLinks(link.getATermination().getNodeId(),
-                        link.getATermination().getTpId(), link.getZTermination().getNodeId(),
-                        link.getZTermination().getTpId(), otnLinkTypeMap.get(serviceType));
+                    this.networkModelService.deleteOtnLinks(link, supportedLinkIds, otnLinkTypeMap.get(serviceType));
                 } else {
                     LOG.info("updating otn-topology adding links");
-                    this.networkModelService.createOtnLinks(link.getATermination().getNodeId(),
-                        link.getATermination().getTpId(), link.getZTermination().getNodeId(),
-                        link.getZTermination().getTpId(), otnLinkTypeMap.get(serviceType));
+                    this.networkModelService.createOtnLinks(link, supportedLinkIds, otnLinkTypeMap.get(serviceType));
                 }
                 break;
             case StringConstants.SERVICE_TYPE_1GE:
@@ -345,7 +341,7 @@ public class RendererListenerImpl implements TransportpceRendererListener {
                     tribPort, minTribSlot, maxTribSlot, isDeletion);
                 break;
             case StringConstants.SERVICE_TYPE_100GE_S:
-                this.networkModelService.updateOtnLinks(link, supportedLinkIds, isDeletion);
+                this.networkModelService.updateOtnLinks(supportedLinkIds, isDeletion);
                 break;
             default:
                 LOG.warn("service-type {} not managed yet", serviceType);
index 74c5e00fe423dc66d048bc1e9074227645568f68..8419ecda7caeca272e80b54a2581ac3bea75d576 100644 (file)
@@ -224,21 +224,19 @@ class TransportPCERendererTesting(unittest.TestCase):
                  }, **res['interface'][0]),
             res['interface'][0]
         )
-        input_dict_2 = {'tx-sapi': 'AMkDwQ7xTmRI',
-                        'expected-dapi': 'AMkDwQ7xTmRI',
-                        'rate': 'org-openroadm-otn-common-types:OTU4',
+        input_dict_2 = {'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'}
         self.assertDictEqual(input_dict_2,
                              res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
 
     def test_13_service_path_create_xpdr_check(self):
-        response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-ODU")
+        response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-ODU4")
         self.assertEqual(response.status_code, requests.codes.ok)
         res = response.json()
         # the 2 following statements replace self.assertDictContainsSubset deprecated in python 3.2
         self.assertDictEqual(
             dict({
-                 'name': 'XPDR1-NETWORK1-ODU',
+                 'name': 'XPDR1-NETWORK1-ODU4',
                  'administrative-state': 'inService',
                  'supporting-circuit-pack-name': '1/0/1-PLUG-NET',
                  'type': 'org-openroadm-interfaces:otnOdu',
index 5bb9200eee148332cd97598d160b512b7e840eba..7cf133da3c63522005fd82242e5a720ef8b46a0a 100644 (file)
@@ -110,6 +110,7 @@ class TransportPCEtesting(unittest.TestCase):
         response = test_utils.portmapping_request("SPDR-SA1/mapping/XPDR1-NETWORK1")
         self.assertEqual(response.status_code, requests.codes.ok)
         res = response.json()
+        self.NETWORK1_CHECK_DICT["supporting-otu4"] = "XPDR1-NETWORK1-OTU"
         self.assertIn(
             self.NETWORK1_CHECK_DICT,
             res['mapping'])
@@ -144,11 +145,7 @@ class TransportPCEtesting(unittest.TestCase):
                         'supporting-port': 'CP1-CFP0-P1'
                         }
 
-        input_dict_2 = {'tx-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'tx-sapi': 'Swfw02qXGyI=',
-                        'expected-dapi': 'Swfw02qXGyI=',
-                        'rate': 'org-openroadm-otn-common-types:OTU4',
+        input_dict_2 = {'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
 
@@ -189,11 +186,7 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOdu',
                         'supporting-port': 'CP1-CFP0-P1'}
         input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
-                        'rate': 'org-openroadm-otn-common-types:ODU4',
-                        'expected-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'tx-dapi': 'Swfw02qXGyI=',
-                        'tx-sapi': 'Swfw02qXGyI='}
+                        'rate': 'org-openroadm-otn-common-types:ODU4'}
 
         self.assertDictEqual(dict(res['interface'][0], **input_dict_1),
                              res['interface'][0])
index 18c4516287c2d39d57d8a44cd3f4f99b0a15aa96..87e459063bf348a1e12603979a015c23fb264e87 100644 (file)
@@ -207,10 +207,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP1-CFP0-P1'
                         }
-        input_dict_2 = {'tx-dapi': 'fuYZwEO660g=',
-                        'expected-sapi': 'fuYZwEO660g=',
-                        'tx-sapi': 'Swfw02qXGyI=',
-                        'expected-dapi': 'Swfw02qXGyI=',
+        input_dict_2 = {'tx-dapi': 'AMf1n5hK6Xkk',
+                        'expected-sapi': 'AMf1n5hK6Xkk',
+                        'tx-sapi': 'H/OelLynehI=',
+                        'expected-dapi': 'H/OelLynehI=',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -250,10 +250,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP1-CFP0-P1'
                         }
-        input_dict_2 = {'tx-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'tx-sapi': 'fuYZwEO660g=',
-                        'expected-dapi': 'fuYZwEO660g=',
+        input_dict_2 = {'tx-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'H/OelLynehI=',
+                        'tx-sapi': 'AMf1n5hK6Xkk',
+                        'expected-dapi': 'AMf1n5hK6Xkk',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -384,10 +384,10 @@ class TransportPCEtesting(unittest.TestCase):
         # SAPI/DAPI are added in the Otu4 renderer
         input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
                         'rate': 'org-openroadm-otn-common-types:ODU4',
-                        'expected-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'fuYZwEO660g=',
-                        'tx-dapi': 'fuYZwEO660g=',
-                        'tx-sapi': 'Swfw02qXGyI='}
+                        'expected-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'AMf1n5hK6Xkk',
+                        'tx-dapi': 'AMf1n5hK6Xkk',
+                        'tx-sapi': 'H/OelLynehI='}
 
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
@@ -412,10 +412,10 @@ class TransportPCEtesting(unittest.TestCase):
         # SAPI/DAPI are added in the Otu4 renderer
         input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
                         'rate': 'org-openroadm-otn-common-types:ODU4',
-                        'tx-sapi': 'fuYZwEO660g=',
-                        'tx-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'expected-dapi': 'fuYZwEO660g='
+                        'tx-sapi': 'AMf1n5hK6Xkk',
+                        'tx-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'H/OelLynehI=',
+                        'expected-dapi': 'AMf1n5hK6Xkk'
                         }
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
index f448ba331bdc95fdf3229a2d497200c93b509896..58b5ad40fff99940e6dbda9b5612a575888b6892 100644 (file)
@@ -302,8 +302,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP1-CFP0-P1'
                         }
-        input_dict_2 = {'tx-sapi': 'Swfw02qXGyI=',
-                        'expected-dapi': 'Swfw02qXGyI=',
+        input_dict_2 = {'tx-sapi': 'H/OelLynehI=',
+                        'expected-dapi': 'H/OelLynehI=',
+                        'tx-dapi': 'AMf1n5hK6Xkk',
+                        'expected-sapi': 'AMf1n5hK6Xkk',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -344,10 +346,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP1-CFP0-P1'
                         }
-        input_dict_2 = {'tx-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'tx-sapi': 'fuYZwEO660g=',
-                        'expected-dapi': 'fuYZwEO660g=',
+        input_dict_2 = {'tx-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'H/OelLynehI=',
+                        'tx-sapi': 'AMf1n5hK6Xkk',
+                        'expected-dapi': 'AMf1n5hK6Xkk',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -484,14 +486,17 @@ class TransportPCEtesting(unittest.TestCase):
                         'supporting-circuit-pack-name': 'CP1-CFP0',
                         'supporting-interface': 'XPDR1-NETWORK1-OTU',
                         'type': 'org-openroadm-interfaces:otnOdu',
-                        'supporting-port': 'CP1-CFP0-P1'}
+                        'supporting-port': 'CP1-CFP0-P1',
+                        'circuit-id': 'TBD',
+                        'description': 'TBD'}
         # SAPI/DAPI are added in the Otu4 renderer
         input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
                         'rate': 'org-openroadm-otn-common-types:ODU4',
-                        'expected-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'fuYZwEO660g=',
-                        'tx-dapi': 'fuYZwEO660g=',
-                        'tx-sapi': 'Swfw02qXGyI='}
+                        'monitoring-mode': 'terminated',
+                        'expected-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'AMf1n5hK6Xkk',
+                        'tx-dapi': 'AMf1n5hK6Xkk',
+                        'tx-sapi': 'H/OelLynehI='}
 
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
@@ -513,14 +518,17 @@ class TransportPCEtesting(unittest.TestCase):
                         'supporting-circuit-pack-name': 'CP1-CFP0',
                         'supporting-interface': 'XPDR1-NETWORK1-OTU',
                         'type': 'org-openroadm-interfaces:otnOdu',
-                        'supporting-port': 'CP1-CFP0-P1'}
+                        'supporting-port': 'CP1-CFP0-P1',
+                        'circuit-id': 'TBD',
+                        'description': 'TBD'}
         # SAPI/DAPI are added in the Otu4 renderer
         input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
                         'rate': 'org-openroadm-otn-common-types:ODU4',
-                        'tx-sapi': 'fuYZwEO660g=',
-                        'tx-dapi': 'Swfw02qXGyI=',
-                        'expected-sapi': 'Swfw02qXGyI=',
-                        'expected-dapi': 'fuYZwEO660g='
+                        'monitoring-mode': 'terminated',
+                        'tx-sapi': 'AMf1n5hK6Xkk',
+                        'tx-dapi': 'H/OelLynehI=',
+                        'expected-sapi': 'H/OelLynehI=',
+                        'expected-dapi': 'AMf1n5hK6Xkk'
                         }
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
index fad074f23ef6acc3d902191cd8b3c73b12b7bedc..b353cd810b4f11d44c3fd7b7a017e5200bd095da 100644 (file)
@@ -453,8 +453,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP5-CFP-P1'
                         }
-        input_dict_2 = {'tx-sapi': 'exT821pFtOc=',
-                        'expected-dapi': 'exT821pFtOc=',
+        input_dict_2 = {'tx-sapi': 'AOQxIv+6nCD+',
+                        'expected-dapi': 'AOQxIv+6nCD+',
+                        'tx-dapi': 'X+8cRNi+HbE=',
+                        'expected-sapi': 'X+8cRNi+HbE=',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -495,10 +497,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP5-CFP-P1'
                         }
-        input_dict_2 = {'tx-dapi': 'exT821pFtOc=',
-                        'expected-sapi': 'exT821pFtOc=',
-                        'tx-sapi': 'HPQZi9Cb3Aw=',
-                        'expected-dapi': 'HPQZi9Cb3Aw=',
+        input_dict_2 = {'tx-dapi': 'AOQxIv+6nCD+',
+                        'expected-sapi': 'AOQxIv+6nCD+',
+                        'tx-sapi': 'X+8cRNi+HbE=',
+                        'expected-dapi': 'X+8cRNi+HbE=',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -665,8 +667,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP6-CFP-P1'
                         }
-        input_dict_2 = {'tx-sapi': 'HPQZi9Cb3A8=',
-                        'expected-dapi': 'HPQZi9Cb3A8=',
+        input_dict_2 = {'tx-sapi': 'X+8cRNi+HbI=',
+                        'expected-dapi': 'X+8cRNi+HbI=',
+                        'tx-dapi': 'ALvne1QI5jo4',
+                        'expected-sapi': 'ALvne1QI5jo4',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -707,10 +711,10 @@ class TransportPCEtesting(unittest.TestCase):
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'CP5-CFP-P1'
                         }
-        input_dict_2 = {'tx-dapi': 'HPQZi9Cb3A8=',
-                        'expected-sapi': 'HPQZi9Cb3A8=',
-                        'tx-sapi': 'ALx70DYYfGTx',
-                        'expected-dapi': 'ALx70DYYfGTx',
+        input_dict_2 = {'tx-dapi': 'X+8cRNi+HbI=',
+                        'expected-sapi': 'X+8cRNi+HbI=',
+                        'tx-sapi': 'ALvne1QI5jo4',
+                        'expected-dapi': 'ALvne1QI5jo4',
                         'rate': 'org-openroadm-otn-common-types:OTU4',
                         'fec': 'scfec'
                         }
@@ -903,7 +907,11 @@ class TransportPCEtesting(unittest.TestCase):
         input_dict_2 = {
             'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
             'rate': 'org-openroadm-otn-common-types:ODU4',
-            'monitoring-mode': 'terminated'}
+            'monitoring-mode': 'terminated',
+            'expected-dapi': 'AItaZ6nmyaKJ',
+            'expected-sapi': 'AKFnJJaijWiz',
+            'tx-dapi': 'AKFnJJaijWiz',
+            'tx-sapi': 'AItaZ6nmyaKJ'}
 
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
@@ -911,7 +919,7 @@ class TransportPCEtesting(unittest.TestCase):
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
         self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
+            {'payload-type': '21', 'exp-payload-type': '21'},
             res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
     def test_50_check_interface_ODU4_NETWORK_spdra(self):
@@ -923,7 +931,9 @@ class TransportPCEtesting(unittest.TestCase):
                         'administrative-state': 'inService',
                         'supporting-circuit-pack-name': 'CP5-CFP',
                         'type': 'org-openroadm-interfaces:otnOdu',
-                        'supporting-port': 'CP5-CFP-P1'}
+                        'supporting-port': 'CP5-CFP-P1',
+                        'circuit-id': 'TBD',
+                        'description': 'TBD'}
         input_dict_2 = {
             'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
             'rate': 'org-openroadm-otn-common-types:ODU4',
@@ -934,9 +944,8 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual(dict(input_dict_2,
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
-        self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
-            res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+        self.assertNotIn('opu',
+                         dict.keys(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']))
 
     def test_51_check_ODU4_connection_spdra(self):
         response = test_utils.check_netconf_node_request(
@@ -985,11 +994,17 @@ class TransportPCEtesting(unittest.TestCase):
                         'supporting-circuit-pack-name': 'CP2-QSFP1',
                         'supporting-interface': 'XPDR2-CLIENT1-ETHERNET',
                         'type': 'org-openroadm-interfaces:otnOdu',
-                        'supporting-port': 'CP2-QSFP1-P1'}
+                        'supporting-port': 'CP2-QSFP1-P1',
+                        'circuit-id': 'TBD',
+                        'description': 'TBD'}
         input_dict_2 = {
-            'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
+            'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
             'rate': 'org-openroadm-otn-common-types:ODU4',
-            'monitoring-mode': 'terminated'}
+            'monitoring-mode': 'terminated',
+            'expected-dapi': 'AKFnJJaijWiz',
+            'expected-sapi': 'AItaZ6nmyaKJ',
+            'tx-dapi': 'AItaZ6nmyaKJ',
+            'tx-sapi': 'AKFnJJaijWiz'}
 
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
@@ -997,7 +1012,7 @@ class TransportPCEtesting(unittest.TestCase):
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
         self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
+            {'payload-type': '21', 'exp-payload-type': '21'},
             res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
     def test_54_check_interface_ODU4_NETWORK_spdrc(self):
@@ -1009,7 +1024,9 @@ class TransportPCEtesting(unittest.TestCase):
                         'administrative-state': 'inService',
                         'supporting-circuit-pack-name': 'CP5-CFP',
                         'type': 'org-openroadm-interfaces:otnOdu',
-                        'supporting-port': 'CP5-CFP-P1'}
+                        'supporting-port': 'CP5-CFP-P1',
+                        'circuit-id': 'TBD',
+                        'description': 'TBD'}
         input_dict_2 = {
             'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
             'rate': 'org-openroadm-otn-common-types:ODU4',
@@ -1020,9 +1037,8 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual(dict(input_dict_2,
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
-        self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
-            res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+        self.assertNotIn('opu',
+                         dict.keys(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']))
 
     def test_55_check_ODU4_connection_spdrc(self):
         response = test_utils.check_netconf_node_request(
@@ -1063,9 +1079,8 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual(dict(input_dict_2,
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
-        self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
-            res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+        self.assertNotIn('opu',
+                         dict.keys(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']))
 
     def test_57_check_interface_ODU4_NETWORK2_spdrb(self):
         response = test_utils.check_netconf_node_request(
@@ -1087,9 +1102,8 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual(dict(input_dict_2,
                                   **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
                              res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
-        self.assertDictEqual(
-            {'payload-type': '07', 'exp-payload-type': '07'},
-            res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+        self.assertNotIn('opu',
+                         dict.keys(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']))
 
     def test_58_check_ODU4_connection_spdrb(self):
         response = test_utils.check_netconf_node_request(
index 2d7232eb572c7418cb2eee937c4de7984e181808..85c308a13309adda148a416749dfb9fd07d95360 100644 (file)
@@ -1126,7 +1126,9 @@ class TransportPCEtesting(unittest.TestCase):
                       res["output"]["result"])
         time.sleep(2)
 
+
 # test service-create for 400GE service from xpdra2 to xpdrc2
+
     def test_72_create_400GE_service(self):
         self.cr_serv_sample_data["input"]["service-name"] = "service-400GE"
         self.cr_serv_sample_data["input"]["service-a-end"]["service-rate"] = "400"
@@ -1304,12 +1306,11 @@ class TransportPCEtesting(unittest.TestCase):
                         ['supporting-interface-list'][0]: 'XPDR1-NETWORK1-OTSI-GROUP',
                         'type': 'org-openroadm-interfaces:otnOtu',
                         'supporting-port': 'L1'}
-        input_dict_2 = {"tx-sapi": "AIGiVAQ4gDil", "rate": "org-openroadm-otn-common-types:OTUCn",
+        input_dict_2 = {"rate": "org-openroadm-otn-common-types:OTUCn",
                         "degthr-percentage": 100,
                         "tim-detect-mode": "Disabled",
                         "otucn-n-rate": 4,
-                        "degm-intervals": 2,
-                        "expected-dapi": "AIGiVAQ4gDil"}
+                        "degm-intervals": 2}
 
         self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
                              res['interface'][0])
@@ -1317,6 +1318,7 @@ class TransportPCEtesting(unittest.TestCase):
                                   **res['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
                              res['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
 
+    @unittest.skip("Temporary skipped waiting for the rest of the functionality in change 97834")
     def test_82_check_interface_ODUC4_xpdra2(self):
         response = test_utils.check_netconf_node_request(
             "XPDR-A2", "interface/XPDR1-NETWORK1-ODUC4")