X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Ftopology%2FConvertORTopoToTapiTopo.java;h=6e9476adf3ec6aad3f4ce72e8d8bb4bc79837766;hb=652c9098f8d97e6f5a723a7c55929f9351bffb5b;hp=2dcbfc52b56f7c29e2731b3aeae9e2f47d1f9a3b;hpb=db87ba733190c2e59997e00e0fe9199c9c74234d;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java index 2dcbfc52b..6e9476adf 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java @@ -9,10 +9,8 @@ package org.opendaylight.transportpce.tapi.topology; import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -23,21 +21,9 @@ import java.util.stream.Collectors; import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.TapiLink; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection; @@ -49,37 +35,23 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU0; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE; -//import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROMS; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS; -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.FORWARDINGRULEMAYFORWARDACROSSGROUP; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.InterRuleGroup; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.InterRuleGroupKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey; 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.RiskParameterPac; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder; -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.node.rule.group.Rule; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristic; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristicBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link; @@ -91,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.tr import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder; -import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,18 +71,11 @@ import org.slf4j.LoggerFactory; public class ConvertORTopoToTapiTopo { private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiTopo.class); - private String ietfNodeId; - private OpenroadmNodeType ietfNodeType; - private AdminStates ietfNodeAdminState = null; - private State ietfNodeOperState = null; - private List oorClientPortList = null; - private List oorNetworkPortList = null; - private OduSwitchingPools oorOduSwitchingPool = null; private Uuid tapiTopoUuid; private Map tapiNodes; private Map tapiLinks; - private Map uuidMap; + private Map tapiSips; private final TapiLink tapiLink; @@ -119,77 +83,10 @@ public class ConvertORTopoToTapiTopo { this.tapiTopoUuid = tapiTopoUuid; this.tapiNodes = new HashMap<>(); this.tapiLinks = new HashMap<>(); - this.uuidMap = new HashMap<>(); + this.tapiSips = new HashMap<>(); this.tapiLink = tapiLink; } - public void convertNode(Node ietfNode, List networkPorts) { - this.ietfNodeId = ietfNode.getNodeId().getValue(); - if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) - == null) { - return; - } - this.ietfNodeType = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class).getNodeType(); - this.ietfNodeAdminState = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) - .getAdministrativeState(); - this.ietfNodeOperState = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) - .getOperationalState(); - this.oorNetworkPortList = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) - .getTerminationPoint().values().stream() - .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.XPONDERNETWORK.getIntValue() - && networkPorts.contains(tp.getTpId().getValue())) - .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) - .collect(Collectors.toList()); - if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) { - this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools() - .values().stream().findFirst().orElseThrow(); - this.oorClientPortList = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) - .getTerminationPoint().values().stream() - .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.XPONDERCLIENT.getIntValue()) - .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) - .collect(Collectors.toList()); - } else { - this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G(); - List tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream() - .flatMap(nbl -> nbl.getTpList().stream()) - .collect(Collectors.toList()); - this.oorClientPortList = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) - .getTerminationPoint().values().stream() - .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.XPONDERCLIENT.getIntValue() && tpList.contains(tp.getTpId())) - .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) - .collect(Collectors.toList()); - this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId())); - } - - // node creation [DSR/ODU] - LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId); - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, - TapiStringConstants.XPDR)).getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR), nodeUuid); - Name nameDsr = new NameBuilder().setValueName("dsr/odu node name") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); - Name namePhot = new NameBuilder().setValueName("otsi node name") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); - Name nameNodeType = new NameBuilder().setValueName("Node Type") - .setValue(this.ietfNodeType.getName()).build(); - Set dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU, - LayerProtocolName.DIGITALOTN,LayerProtocolName.PHOTONICMEDIA); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology - .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, namePhot.key(), namePhot,nameNodeType.key(), - nameNodeType), - dsrLayerProtocols); - tapiNodes.put(dsrNode.key(), dsrNode); - } - public void convertLinks(Map< org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network .LinkKey, @@ -251,8 +148,10 @@ public class ConvertORTopoToTapiTopo { LOG.info("abstraction of the ROADM infrastructure towards a photonic node"); Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA .getBytes(Charset.forName("UTF-8"))).toString()); - Name nodeName = new NameBuilder().setValueName("otsi node name").setValue(TapiStringConstants.RDM_INFRA) - .build(); + Name nodeName = + new NameBuilder().setValueName("otsi node name").setValue(TapiStringConstants.RDM_INFRA).build(); + Name nodeName2 = + new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA).build(); Name nameNodeType = new NameBuilder().setValueName("Node Type") .setValue(OpenroadmNodeType.ROADM.getName()).build(); Set nodeLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA); @@ -263,9 +162,14 @@ public class ConvertORTopoToTapiTopo { // nep creation for rdm infra abstraction node Map onepMap = createNepForRdmNode(photonicNepUuisMap.size()); // node rule group creation - Map nodeRuleGroupList - = createNodeRuleGroupForRdmNode(nodeUuid, onepMap.values()); - // Empty random creation of mandatory fields for avoiding errors.... + var tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid); + Map nodeRuleGroupMap + = tapiFactory.createAllNodeRuleGroupForRdmNode("T0ML", nodeUuid, null, onepMap.values()); + Map interRuleGroupMap + = tapiFactory.createInterRuleGroupForRdmNode("T0ML", nodeUuid, null, + nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList())); + + // Empty random creation of mandatory fields for avoiding errors.... CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() .setCostAlgorithm("Restricted Shortest Path - RSP") .setCostName("HOP_COUNT") @@ -288,13 +192,14 @@ public class ConvertORTopoToTapiTopo { // build RDM infra node abstraction org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node rdmNode = new NodeBuilder() .setUuid(nodeUuid) - .setName(Map.of(nodeName.key(), nodeName, nameNodeType.key(), nameNodeType)) + .setName(Map.of(nodeName.key(), nodeName, nodeName2.key(), nodeName2, nameNodeType.key(), nameNodeType)) .setLayerProtocolName(nodeLayerProtocols) .setAdministrativeState(AdministrativeState.UNLOCKED) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setOwnedNodeEdgePoint(onepMap) - .setNodeRuleGroup(nodeRuleGroupList) + .setNodeRuleGroup(nodeRuleGroupMap) + .setInterRuleGroup(interRuleGroupMap) .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) .setRiskParameterPac(riskParamPac) @@ -319,30 +224,6 @@ public class ConvertORTopoToTapiTopo { } } - private OduSwitchingPools createOduSwitchingPoolForTp100G() { - Map nblMap = new HashMap<>(); - int count = 1; - for (TerminationPoint tp : this.oorNetworkPortList) { - TpId tpid1 = tp.getTpId(); - TpId tpid2 = tp.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class) - .getAssociatedConnectionMapTp().iterator().next(); - Set tpList = new HashSet<>(); - tpList.add(tpid1); - tpList.add(tpid2); - NonBlockingList nbl = new NonBlockingListBuilder() - .setNblNumber(Uint16.valueOf(count)) - .setTpList(tpList) - .build(); - nblMap.put(nbl.key(), nbl); - count++; - } - return new OduSwitchingPoolsBuilder() - .setNonBlockingList(nblMap) - .setSwitchingPoolNumber(Uint16.valueOf(1)) - .build(); - } - private List pruneTapiPhotonicNodes() { List @@ -356,7 +237,7 @@ public class ConvertORTopoToTapiTopo { Map onepM = new HashMap<>(); for (Map.Entry entry : node.getOwnedNodeEdgePoint().entrySet()) { if (entry.getValue().getName().values().stream() - .filter(name -> name.getValueName().startsWith("eNodeEdgePoint")).count() > 0) { + .filter(name -> name.getValueName().equals("eNodeEdgePoint")).count() > 0) { onepM.put(entry.getKey(), entry.getValue()); } } @@ -384,190 +265,6 @@ public class ConvertORTopoToTapiTopo { return uuidNameMap; } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node - createTapiNode(Map nodeNames, Set layerProtocols) { - Uuid nodeUuid = null; - Map onepl = new HashMap<>(); - Map nodeRuleGroupList = new HashMap<>(); - Map ruleList = new HashMap<>(); - Set ruleTypes = new HashSet<>(); - ruleTypes.add(RuleType.FORWARDING); - Rule rule = new RuleBuilder() - .setLocalId("forward") - .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE) - .setRuleType(ruleTypes) - .build(); - ruleList.put(rule.key(), rule); - if (layerProtocols.contains(LayerProtocolName.DSR) - || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { - nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList); - } else { - LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next()) - .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue()); - } - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue(TapiStringConstants.COST_HOP_VALUE) - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) - .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) - .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) - .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) - .setTrafficPropertyName("FIXED_LATENCY") - .build(); - RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() - .setRiskCharacteristicName("risk characteristic") - .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) - .build(); - RiskParameterPac riskParamPac = new RiskParameterPacBuilder() - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .build(); - return new NodeBuilder() - .setUuid(nodeUuid) - .setName(nodeNames) - .setLayerProtocolName(layerProtocols) - .setAdministrativeState(this.tapiLink.setTapiAdminState(this.ietfNodeAdminState.getName())) - .setOperationalState(this.tapiLink.setTapiOperationalState(this.ietfNodeOperState.getName())) - .setLifecycleState(LifecycleState.INSTALLED) - .setOwnedNodeEdgePoint(onepl) - .setNodeRuleGroup(nodeRuleGroupList) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .setRiskParameterPac(riskParamPac) - .build(); - } - - private Uuid getNodeUuid4Dsr(Map onepl, - Map nodeRuleGroupList, Map ruleList) { - Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)); - // client nep creation on DSR/ODU node - for (int i = 0; i < oorClientPortList.size(); i++) { - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - oorClientPortList.get(i).getTpId().getValue()), nepUuid); - NameBuilder nameBldr = new NameBuilder().setValue(String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - oorClientPortList.get(i).getTpId().getValue())); - Name name; - if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) { - name = nameBldr.setValueName("100G-tpdr").build(); - } else { - name = nameBldr.setValueName("NodeEdgePoint_C").build(); - } - - OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name), - LayerProtocolName.ETH, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, - TapiStringConstants.DSR)); - onepl.put(onep.key(), onep); - } - // network nep creation on DSR/ODU node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid); - Name onedName = new NameBuilder() - .setValueName("iNodeEdgePoint_N") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, - TapiStringConstants.I_ODU)); - onepl.put(onep.key(), onep); - } - // eNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); - Name onedName = new NameBuilder() - .setValueName("eNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, - String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS)); - onepl.put(onep.key(), onep); - } - // create NodeRuleGroup - int count = 1; - for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) { - Map - nepList = new HashMap<>(); - for (TpId tp : nbl.getTpList()) { - if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - tp.getValue())) || this.uuidMap.containsKey(String.join( - "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) { - String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR - : TapiStringConstants.I_ODU; - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint - nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.XPDR))) - .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - qual, tp.getValue()))) - .build(); - nepList.put(nep.key(), nep); - } - } - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(("dsr node rule group " + count).getBytes(Charset.forName("UTF-8"))) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .build(); - nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup); - count++; - } - return nodeUuid; - } - - private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map nepNames, - LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, - boolean withSip, String keyword) { - String key = String.join("+", keyword, oorTp.getTpId().getValue()); - AdministrativeState adminState = (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null) - ? this.tapiLink.setTapiAdminState(oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() - .getName()) - : null; - OperationalState operState = (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null) - ? this.tapiLink.setTapiOperationalState(oorTp.augmentation(TerminationPoint1.class).getOperationalState() - .getName()) - : null; - OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder() - .setUuid(this.uuidMap.get(key)) - .setLayerProtocolName(nepProtocol) - .setName(nepNames) - .setSupportedCepLayerProtocolQualifierInstances(createSupportedCepLayerProtocolQualifier(oorTp, - nodeProtocol)) - .setDirection(Direction.BIDIRECTIONAL) - .setLinkPortRole(PortRole.SYMMETRIC) - .setAdministrativeState(adminState) - .setOperationalState(operState) - .setLifecycleState(LifecycleState.INSTALLED); - if (withSip) { - onepBldr.setMappedServiceInterfacePoint(createSIP(1, oorTp, keyword)); - } - return onepBldr.build(); - } - private Map createNepForRdmNode(int nbNep) { Map onepMap = new HashMap<>(); for (int i = 1; i <= nbNep; i++) { @@ -596,199 +293,6 @@ public class ConvertORTopoToTapiTopo { return onepMap; } - private Map createNodeRuleGroupForRdmNode(Uuid nodeUuid, - Collection onepl) { - Map - nepMap = new HashMap<>(); - for (OwnedNodeEdgePoint onep : onepl) { - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint - nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(nodeUuid) - .setNodeEdgePointUuid(onep.key().getUuid()) - .build(); - nepMap.put(nep.key(), nep); - } - Map nodeRuleGroupMap = new HashMap<>(); - Set ruleTypes = new HashSet<>(); - ruleTypes.add(RuleType.FORWARDING); - Map ruleList = new HashMap<>(); - Rule rule = new RuleBuilder() - .setLocalId("forward") - .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE) - .setRuleType(ruleTypes) - .build(); - ruleList.put(rule.key(), rule); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid(UUID.nameUUIDFromBytes(("rdm infra node rule group").getBytes(Charset.forName("UTF-8"))) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepMap) - .build(); - nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup); - return nodeRuleGroupMap; - } - - private Map createSIP(int nb, TerminationPoint tp, - String nodeId) { - Map msipl = new HashMap<>(); - for (int i = 0; i < nb; i++) { - //TODO : verify why i is not included to proceed Uuid - MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder() - .setServiceInterfacePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeId, - tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString())) - .build(); - msipl.put(msip.key(), msip); - } - return msipl; - } - - private List createSupportedCepLayerProtocolQualifier( - TerminationPoint tp, LayerProtocolName lpn) { - List sclpqiList = new ArrayList<>(); - org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 = - tp.augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class); - if (tp1 == null) { - return new ArrayList<>(sclpqiList); - } - if (tp1.getTpSupportedInterfaces() == null) { - LOG.warn("Tp supported interface doesnt exist on TP {}", tp.getTpId().getValue()); - return new ArrayList<>(sclpqiList); - } - Collection sicList = tp1.getTpSupportedInterfaces() - .getSupportedInterfaceCapability().values(); - for (SupportedInterfaceCapability sic : sicList) { - String ifCapType = sic.getIfCapType().toString().split("\\{")[0]; - switch (lpn.getName()) { - case "DSR": - switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file - case "If1GEODU0": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU0.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If10GEODU2e": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If10GEODU2": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU2.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If10GE": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If100GEODU4": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If100GE": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "IfOCHOTU4ODU4": - case "IfOCH": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - default: - LOG.error("IfCapability type not managed"); - break; - } - break; - //TODO: verify that in the new scope it makes sense to include ODU in the abstracted topology - case "ODU": - switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file - case "If1GEODU0": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU0.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If10GEODU2e": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If10GEODU2": - case "If10GE": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU2.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - case "If100GEODU4": - case "If100GE": - case "IfOCHOTU4ODU4": - case "IfOCH": - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - break; - default: - LOG.error("IfCapability type not managed"); - break; - } - break; - case "PHOTONIC_MEDIA": - if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) { - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - } - break; - default: - LOG.error("Layer Protocol Name is unknown"); - break; - } - } - return sclpqiList.stream().distinct().toList(); - } - private void createTapiOtsLinks(Map photonicNepUuisMap, Map rdmInfraNepUuisMap) { Iterator> it1 = photonicNepUuisMap.entrySet().iterator(); Iterator> it2 = rdmInfraNepUuisMap.entrySet().iterator(); @@ -829,6 +333,11 @@ public class ConvertORTopoToTapiTopo { } } + public void setTapiNodes(Map nodeMap) { + this.tapiNodes.putAll(nodeMap); + } + public Map getTapiNodes() { return tapiNodes; @@ -837,4 +346,12 @@ public class ConvertORTopoToTapiTopo { public Map getTapiLinks() { return tapiLinks; } -} \ No newline at end of file + + public Map getTapiSips() { + return tapiSips; + } + + public void setTapiSips(Map tapiSip) { + this.tapiSips.putAll(tapiSip); + } +}