X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Fconnectivity%2FConnectivityUtils.java;h=c9f60f4b3d10ae58b1eff02fcd572d919b8bfba6;hb=db87ba733190c2e59997e00e0fe9199c9c74234d;hp=d0f7880415068e409b62648192b31ea24c501478;hpb=942384f299eecdf5163014ff7930b12ce26a2ca3;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java index d0f788041..c9f60f4b3 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java @@ -8,6 +8,7 @@ package org.opendaylight.transportpce.tapi.connectivity; import java.math.BigDecimal; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -91,6 +92,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection; @@ -103,9 +106,15 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.CapacityBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIERMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey; @@ -127,8 +136,8 @@ public final class ConnectivityUtils { private final ServiceDataStoreOperations serviceDataStoreOperations; private final TapiContext tapiContext; private Map sipMap; - private final Map connectionFullMap; // this variable is for complete connection objects private final NetworkTransactionService networkTransactionService; @@ -304,8 +313,9 @@ public final class ConnectivityUtils { // Connection creation Map connMap = createConnectionsFromService(serviceAEnd, serviceZEnd, pathDescription); - ConnectivityConstraint conConstr = new ConnectivityConstraintBuilder() - .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build(); + LOG.debug("connectionMap for service {} = {} ", name.toString(), connMap.toString()); + ConnectivityConstraint conConstr = + new ConnectivityConstraintBuilder().setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build(); // TODO: full connectivity service?? With constraints and the rest of fields... return new ConnectivityServiceBuilder() .setAdministrativeState(AdministrativeState.UNLOCKED) @@ -345,7 +355,7 @@ public final class ConnectivityUtils { private OpenroadmNodeType getOpenroadmType(String nodeName) { LOG.info("Node name = {}", nodeName); - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node tapiNode = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); @@ -503,7 +513,7 @@ public final class ConnectivityUtils { } if (openroadmNodeType.equals(OpenroadmNodeType.SWITCH)) { // TODO: We create both ODU and DSR because there is no ODU service creation for the switch - // - XC Connection OTSi betwwen iODU and eODU of xpdr + // - XC Connection OTSi between iODU and eODU of xpdr // - Top connection in the ODU layer, between xpdr eODU ports (?) connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist, xpdrNodelist)); @@ -519,6 +529,7 @@ public final class ConnectivityUtils { default: LOG.error("Service type format not supported"); } + LOG.debug("CONNSERVERMAP = {}", connectionServMap.toString()); return connectionServMap; } @@ -541,9 +552,10 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, netCep1); cepMapDsr.put(netCep1.key(), netCep1); } @@ -583,23 +595,24 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, - LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + ConnectionEndPoint clientCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.DSR); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, + clientCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR, - netCep2); + ConnectionEndPoint clientCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, + clientCep2); String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist); ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork); - cepMapDsr.put(netCep1.key(), netCep1); - cepMapOdu.put(netCep2.key(), netCep2); + cepMapDsr.put(clientCep1.key(), clientCep1); + cepMapOdu.put(clientCep2.key(), clientCep2); // Create x connection between I_ODU and E_ODU within xpdr org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork, + connection = createXCBetweenCeps(clientCep2, netCep3, spcXpdrClient, spcXpdrNetwork, TapiStringConstants.ODU, LayerProtocolName.ODU); this.connectionFullMap.put(connection.key(), connection); @@ -653,8 +666,8 @@ public final class ConnectivityUtils { String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, netCep1); cepMap.put(netCep1.key(), netCep1); @@ -680,59 +693,50 @@ public final class ConnectivityUtils { private Map createXpdrCepsAndConnectionsPht(List xpdrNetworkTplist, List xpdrNodelist) { - Map connServMap = new HashMap<>(); - Map cepMap = new HashMap<>(); + // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection - Map xcMap = new HashMap<>(); - + Map cepMap = new HashMap<>(); // create ceps and x connections within xpdr for (String xpdr:xpdrNodelist) { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); // There should be 1 network tp per xpdr - // TODO photonic media model should be updated to have the corresponding CEPs. I will just create - // 3 different MC CEPs giving different IDs to show that they are different - // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI, - netCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI, + // Just create 2 different CEPs (1 OTS + 1 OTSI_MC) + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, netCep1); + ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.OTSI_MC, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.OTSI_MC, TapiStringConstants.XPDR, netCep2); - ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, - netCep3); +// ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, +// TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); +// putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, +// netCep3); + cepMap.put(netCep1.key(), netCep1); cepMap.put(netCep2.key(), netCep2); - cepMap.put(netCep3.key(), netCep3); - - // Create x connection between I_OTSi and E_OTSi within xpdr - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - this.connectionFullMap.put(connection.key(), connection); +// cepMap.put(netCep3.key(), netCep3); - // Create X connection that will be added to the service object - LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); - xcMap.put(conn.key(), conn); } - // OTSi top connection between edge I_OTSI Xpdr + + // OTSi top connection between edge OTSI_MC Xpdr + Map xcMap = new HashMap<>(); String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(0))).findFirst().orElseThrow(); String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI, + connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm); this.connectionFullMap.put(connection.key(), connection); - // OTSi top connection that will be added to the service object + // OTSi top connection that will be added to the service object + Map connServMap = new HashMap<>(); Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); connServMap.put(conn.key(), conn); this.topConnXpdrXpdrPhtn = conn; @@ -762,8 +766,8 @@ public final class ConnectivityUtils { // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs // created in the topology creation // add CEPs to the topology to the corresponding ONEP - ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1); + ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS, adCep1); ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2); ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC); @@ -775,12 +779,15 @@ public final class ConnectivityUtils { String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG); - ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1); + ConnectionEndPoint degCep0 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS, degCep0); + ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS, degCep1); ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2); ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3); + cepMap.put(degCep0.key(), degCep0); cepMap.put(degCep1.key(), degCep1); cepMap.put(degCep2.key(), degCep2); cepMap.put(degCep3.key(), degCep3); @@ -811,12 +818,15 @@ public final class ConnectivityUtils { String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1); - ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1); + ConnectionEndPoint deg1Cep0 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS, deg1Cep0); + ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS, deg1Cep1); ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2); ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3); + cepMap.put(deg1Cep0.key(), deg1Cep0); cepMap.put(deg1Cep1.key(), deg1Cep1); cepMap.put(deg1Cep2.key(), deg1Cep2); cepMap.put(deg1Cep3.key(), deg1Cep3); @@ -825,12 +835,15 @@ public final class ConnectivityUtils { .orElseThrow(); LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2); - ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1); + ConnectionEndPoint deg2Cep0 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS, deg2Cep0); + ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS, deg2Cep1); ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2); ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3); + cepMap.put(deg2Cep0.key(), deg2Cep0); cepMap.put(deg2Cep1.key(), deg2Cep1); cepMap.put(deg2Cep2.key(), deg2Cep2); cepMap.put(deg2Cep3.key(), deg2Cep3); @@ -910,13 +923,10 @@ public final class ConnectivityUtils { org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep1 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep1.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep1.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep1.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep2 = @@ -929,13 +939,10 @@ public final class ConnectivityUtils { org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep2 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep2.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep2.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep2.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); Map ceps = new HashMap<>(); ceps.put(cepServ1.key(), cepServ1); @@ -1025,12 +1026,45 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - qualifier)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.PHTNC_MEDIA_OMS; + break; + case TapiStringConstants.PHTNC_MEDIA_OMS: + clientQualifier = TapiStringConstants.MC; + OwnedNodeEdgePoint onepMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], TapiStringConstants.MC, onepMC); + break; + case TapiStringConstants.MC: + clientQualifier = TapiStringConstants.OTSI_MC; + OwnedNodeEdgePoint onepOTSiMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], + TapiStringConstants.OTSI_MC, onepOTSiMC); + break; + default: + LOG.debug("not currently handling client NEP for OTSiMC CEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1041,13 +1075,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA); + if (!(TapiStringConstants.OTSI_MC.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1058,12 +1095,41 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - nodeLayer)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + String clientNodeLayer = TapiStringConstants.PHTNC_MEDIA; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.OTSI_MC; + break; + case TapiStringConstants.OTSI_MC: + clientQualifier = TapiStringConstants.E_ODU; + clientNodeLayer = TapiStringConstants.ODU; + break; + case TapiStringConstants.E_ODU: + clientQualifier = TapiStringConstants.DSR; + clientNodeLayer = TapiStringConstants.DSR; + break; + default : + LOG.debug("no client CEP for DSR NEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1074,13 +1140,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(cepProtocol); + if (!(TapiStringConstants.DSR.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1375,6 +1444,47 @@ public final class ConnectivityUtils { this.tapiContext.updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep); } + + private void putRdmNepInTopologyContext(String orNodeId, String orTpId, String qual, OwnedNodeEdgePoint onep) { + LOG.info("NEP id before Merge = {}", String.join("+", orNodeId, qual, orTpId)); + LOG.info("Node of NEP id before Merge = {}", String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)); + // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA) + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, qual, orTpId) + .getBytes(Charset.forName("UTF-8"))).toString()); + updateTopologyWithNep(topoUuid, nodeUuid, nepUuid, onep); + } + + public void updateTopologyWithNep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, OwnedNodeEdgePoint onep) { + // TODO: verify this is correct. Should we identify the context IID with the context UUID?? + InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) + .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class) + .child(Topology.class, new TopologyKey(topoUuid)) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class, + new NodeKey(nodeUuid)) + .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) + .build(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (optionalOnep.isPresent()) { + LOG.error("ONEP is already present in datastore"); + return; + } + // merge in datastore + this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, + onep); + this.networkTransactionService.commit().get(); + LOG.info("NEP {} added successfully.", onep.getName().toString()); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName().toString(), e); + } + } + public Map @@ -1397,11 +1507,11 @@ public final class ConnectivityUtils { ConnectionType connType = null; ServiceFormat serviceFormat = null; String nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); + TapiStringConstants.XPDR); String nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); - LOG.debug("Node a = {}", nodeAid); - LOG.debug("Node z = {}", nodeZid); + TapiStringConstants.XPDR); + LOG.info("NodeAid = {}", nodeAid); + LOG.info("NodeZid = {}", nodeZid); //switch (constraint.getServiceLayer().getIntValue()) { switch (input.getLayerProtocolName().getIntValue()) { case 0: @@ -1423,17 +1533,6 @@ public final class ConnectivityUtils { LOG.info("PHOTONIC"); connType = getConnectionTypePhtnc(endPointMap.values()); serviceFormat = getServiceFormatPhtnc(endPointMap.values()); - if (serviceFormat.equals(ServiceFormat.OC)) { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.PHTNC_MEDIA); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.PHTNC_MEDIA); - } else { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.OTSI); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.OTSI); - } LOG.debug("Node a photonic = {}", nodeAid); LOG.debug("Node z photonic = {}", nodeZid); break; @@ -1502,7 +1601,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1585,6 +1692,7 @@ public final class ConnectivityUtils { Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid(); // Todo -> need to find the NEP associated to that SIP Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeAid.getBytes(StandardCharsets.UTF_8)).toString()); + LOG.info("NodeA {} Uuid is {}", nodeAid, nodeUuid); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); if (node == null) { @@ -1607,7 +1715,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1705,7 +1821,7 @@ public final class ConnectivityUtils { private ConnectionEndPoint getAssociatediODUCep(String spcXpdrNetwork) { Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], - TapiStringConstants.DSR).getBytes(StandardCharsets.UTF_8))).toString()); + TapiStringConstants.XPDR).getBytes(StandardCharsets.UTF_8))).toString()); Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]).getBytes(StandardCharsets.UTF_8))) .toString()); @@ -1759,7 +1875,7 @@ public final class ConnectivityUtils { private OpenroadmNodeType getOpenRoadmNodeType(List xpdrNodelist) { List openroadmNodeTypeList = new ArrayList<>(); for (String xpdrNode:xpdrNodelist) { - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); InstanceIdentifier nodeIID = InstanceIdentifier.builder( @@ -1791,4 +1907,41 @@ public final class ConnectivityUtils { } return openroadmNodeTypeList.get(0); } + + private OwnedNodeEdgePoint createRoadmNep(String orNodeId, String tpId, + boolean withSip, OperationalState operState, AdministrativeState adminState, String nepPhotonicSublayer) { + + //TODO : complete implementation with SIP + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, nepPhotonicSublayer, + tpId)).getBytes(StandardCharsets.UTF_8)).toString()); + Name nepName = new NameBuilder() + .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") + .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId)) + .build(); + List sclpqiList = new ArrayList<>(); + if (TapiStringConstants.MC.equals(nepPhotonicSublayer)) { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } else { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } + OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder() + .setUuid(nepUuid) + .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) + .setName(Map.of(nepName.key(), nepName)) + .setSupportedCepLayerProtocolQualifierInstances(sclpqiList) + .setDirection(Direction.BIDIRECTIONAL) + .setLinkPortRole(PortRole.SYMMETRIC) + .setAdministrativeState(adminState).setOperationalState(operState) + .setLifecycleState(LifecycleState.INSTALLED) + .build(); + + return onep; + } + }