Update port-mapping data for REGEN xpdr-type 02/102502/13
authorBalagangadhar Bathula <bb4341@att.com>
Thu, 29 Sep 2022 03:39:16 +0000 (23:39 -0400)
committerGilles Thouenon <gilles.thouenon@orange.com>
Sat, 4 Mar 2023 08:12:52 +0000 (09:12 +0100)
- For a REGEN/REGEN-UNI xpdr-node-type, update the
  port-mapping data with regen-profile information
- Enable the REGEN/REGEN-UNI xpdr-node-type to appear
  in the Open ROADM topology layer (network model)

JIRA: TRNSPRTPCE-690

Signed-off-by: Balagangadhar Bathula <bb4341@att.com>
Change-Id: If8363d9de22d2ab246347a9d5944cedc22a37fa1

common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java

index 0b3d24903f0fbaaa3ae17fac7488ba8daf2bebde..45ea9981f4af960a5162be0d1b3e00bedac3a06d 100644 (file)
@@ -50,6 +50,7 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.regen.profiles.grp.RegenProfilesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcp;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpKey;
@@ -1049,12 +1050,24 @@ public class PortMappingVersion710 {
         if (supIntfCapaList != null) {
             Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability>
                     supportedIntf = new HashSet<>();
+            Set<String> regenProfiles = new HashSet<>();
             SupportedInterfaceCapability sic1 = null;
             for (SupportedInterfaceCapability sic : supIntfCapaList) {
                 supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()));
+                LOG.debug("This the xpdr-type {}", xpdrNodeType.getName());
+                // Here we use both types of Regen (bi/uni). Though initial support is only for bi-directional regen
+                if (xpdrNodeType == XpdrNodeTypes.Regen || xpdrNodeType == XpdrNodeTypes.RegenUni) {
+                    if (sic.getOtsigroupCapabilityProfileName().isEmpty()) {
+                        LOG.error("Otsigroup-capability-profile-name is not found for regen port {}",
+                                port.getPortName());
+                    }
+                    LOG.info("Regen-profiles {}", sic.getOtsigroupCapabilityProfileName());
+                    regenProfiles.addAll(sic.getOtsigroupCapabilityProfileName());
+                }
                 sic1 = sic;
             }
-            mpBldr.setSupportedInterfaceCapability(supportedIntf);
+            mpBldr.setRegenProfiles(new RegenProfilesBuilder().setRegenProfile(regenProfiles).build())
+                    .setSupportedInterfaceCapability(supportedIntf);
             if (port.getPortQual() == PortQual.SwitchClient
                 && !sic1.getOtnCapability().getMpdrClientRestriction().isEmpty()) {
                 // Here we assume all the supported-interfaces has the support same rates, and the
index 95a61e0c27b5c4f2e15764bc3d47f9d8c027db62..c47acc9d9d5afc664b7fd9f5d69cd72d6517cd67 100644 (file)
@@ -133,6 +133,11 @@ public final class OpenRoadmOtnTopology {
                 case Switch:
                     nodes.add(createSwitch(node));
                     break;
+                case Regen:
+                case RegenUni:
+                    // TODO: Need to revisit this method
+                    nodes.add(createRegen(node));
+                    break;
                 default:
                     LOG.error("unknown otn node type {}", node.getNodeType().getName());
                     return null;
@@ -571,6 +576,38 @@ public final class OpenRoadmOtnTopology {
             .build();
     }
 
+    // TODO: This is same as createTpdr. After Open ROADM network models are updated,
+    //    we will revisit this method to include regen based data.
+    private static Node createRegen(OtnTopoNode node) {
+        Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
+        createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, false);
+        createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true);
+        // return ietfNode
+        return new NodeBuilder()
+                .setNodeId(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
+                .withKey(new NodeKey(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
+                .setSupportingNode(createSupportingNodes(node))
+                .addAugmentation(
+                        new Node1Builder()
+                                .setXpdrAttributes(
+                                        new XpdrAttributesBuilder()
+                                                .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
+                                                .build())
+                                .build())
+                .addAugmentation(
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                                .setNodeType(OpenroadmNodeType.TPDR)
+                                .setOperationalState(State.InService)
+                                .setAdministrativeState(AdminStates.InService)
+                                .build())
+                .addAugmentation(
+                        new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                                .Node1Builder()
+                                .setTerminationPoint(tpMap)
+                                .build())
+                .build();
+    }
+
     private static Node createMuxpdr(OtnTopoNode node) {
 
         // prepare otn-topology node augmentation
index bc09c9856b30350a2aad1be4f0b36dede7aaa61f..112fce17162bd3b948d4f0abf794cd1fad53d6d6 100644 (file)
@@ -177,6 +177,13 @@ public final class OpenRoadmTopology {
                         isOtn = true;
                         xpdrType = mapping.getXpdrType().getName();
                         break;
+                    // Both regen and regen-uni are added here, though initial support is
+                    // only for regen xpdr-type
+                    case Regen:
+                    case RegenUni:
+                        isOtn = false;
+                        xpdrType = mapping.getXpdrType().getName();
+                        break;
                     default :
                         LOG.warn("cannot create xpdr node {} in openroadm-topology: type {} not supported",
                              mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXpdrType().getName());