X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Ftopology%2FConvertORTopoToTapiFullTopo.java;h=023b229dc168b39666bb6bdc51efafb371619bd3;hb=652c9098f8d97e6f5a723a7c55929f9351bffb5b;hp=0961fc58b15f033bb53ed81d09f19e6c836062b6;hpb=21d35937b8a2d9f6930985485a1b54eb7bec9a91;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java index 0961fc58b..023b229dc 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java @@ -9,86 +9,61 @@ package org.opendaylight.transportpce.tapi.topology; import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.TapiLink; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1; +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.rev201211.xpdr.odu.switching.pools.OduSwitchingPools; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1; +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.otn.network.topology.rev230526.Node1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; 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.rev181210.AdministrativeState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LAYERPROTOCOLQUALIFIER; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationDirection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE100GigE; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE10GigELAN; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPEGigE; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU0; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2E; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU4; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROMS; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROTSi; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ForwardingRule; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RuleType; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroup; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.Rule; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.RuleBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.RuleKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristic; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristicBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristic; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristicBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristic; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristicBuilder; -import org.opendaylight.yangtools.yang.common.Uint16; +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.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole; +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.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.PHOTONICLAYERQUALIFIERMC; +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.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.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.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.RiskParameterPacBuilder; +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.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; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeBuilder; +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.transfer.cost.pac.CostCharacteristic; +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.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,173 +73,86 @@ public class ConvertORTopoToTapiFullTopo { private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiFullTopo.class); private String ietfNodeId; private OpenroadmNodeType ietfNodeType; - private AdminStates ietfNodeAdminState; - private State ietfNodeOperState; - private List oorClientPortList; - private List oorNetworkPortList; - private OduSwitchingPools oorOduSwitchingPool; private Uuid tapiTopoUuid; - private Map + private Map tapiNodes; private Map tapiLinks; private Map tapiSips; - private Map uuidMap; private final TapiLink tapiLink; + private static String topologicalMode; public ConvertORTopoToTapiFullTopo(Uuid tapiTopoUuid, TapiLink tapiLink) { 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.rev211210.Node1.class) - == null) { - return; - } - this.ietfNodeType = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class).getNodeType(); - this.ietfNodeAdminState = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class) - .getAdministrativeState(); - this.ietfNodeOperState = ietfNode.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.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().get(); - 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())); + if (topologicalMode == null) { + ConvertORTopoToTapiFullTopo.topologicalMode = "Full"; } - - // 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.DSR)).getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR), nodeUuid); - Name nameDsrNode = new NameBuilder().setValueName("dsr/odu node name").setValue( - String.join("+", this.ietfNodeId, TapiStringConstants.DSR)).build(); - Name nameNodeType = new NameBuilder().setValueName("Node Type") - .setValue(this.ietfNodeType.getName()).build(); - List dsrLayerProtocols = Arrays.asList(LayerProtocolName.DSR, LayerProtocolName.ODU); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology - .Node dsrNode = createTapiNode(Map.of(nameDsrNode.key(), nameDsrNode, nameNodeType.key(), nameNodeType), - dsrLayerProtocols); - LOG.info("DSR Node {} should have {} NEPs and {} SIPs", this.ietfNodeId, - this.oorClientPortList.size() + 2 * this.oorNetworkPortList.size(), - this.oorClientPortList.size() + this.oorNetworkPortList.size()); - LOG.info("DSR Node {} has {} NEPs and {} SIPs", this.ietfNodeId, - dsrNode.getOwnedNodeEdgePoint().values().size(), dsrNode.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count()); - tapiNodes.put(dsrNode.key(), dsrNode); - - // node creation [otsi] - LOG.info("creation of an OTSi node for {}", this.ietfNodeId); - nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)) - .getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI), nodeUuid); - Name nameOtsiNode = new NameBuilder().setValueName("otsi node name").setValue( - String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)).build(); - List otsiLayerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology - .Node otsiNode = createTapiNode(Map.of(nameOtsiNode.key(), nameOtsiNode, nameNodeType.key(), nameNodeType), - otsiLayerProtocols); - LOG.info("OTSi Node {} should have {} NEPs and {} SIPs", this.ietfNodeId, 3 * this.oorNetworkPortList.size(), - this.oorNetworkPortList.size()); - LOG.info("OTSi Node {} has {} NEPs and {} SIPs", this.ietfNodeId, - otsiNode.getOwnedNodeEdgePoint().values().size(), otsiNode.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count()); - tapiNodes.put(otsiNode.key(), otsiNode); - - // transitional link cration between network nep of DSR/ODU node and iNep of otsi node - LOG.info("creation of transitional links between DSR/ODU and OTSi nodes"); - createTapiTransitionalLinks(); } - public void convertRdmToRdmLinks(List rdmTordmLinkList) { + public void convertRdmToRdmLinks( + List rdmTordmLinkList) { List linksToNotConvert = new ArrayList<>(); LOG.info("creation of {} roadm to roadm links", rdmTordmLinkList.size() / 2); - for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network - .Link link : rdmTordmLinkList) { + for (var link : rdmTordmLinkList) { if (!linksToNotConvert.contains(link.getLinkId().getValue())) { - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev180226.networks.network.Link oppositeLink = rdmTordmLinkList.stream() + var oppositeLink = rdmTordmLinkList.stream() .filter(l -> l.getLinkId().equals(link.augmentation(Link1.class).getOppositeLink())) .findAny().orElse(null); - AdminStates oppLnkAdmState = null; State oppLnkOpState = null; if (oppositeLink != null) { oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState(); oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState(); } - String adminState = - link.augmentation(Link1.class).getAdministrativeState() == null - || oppLnkAdmState == null - ? null - : this.tapiLink.setTapiAdminState( - link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName(); - String operState = - link.augmentation(Link1.class).getOperationalState() == null - || oppLnkOpState == null - ? null - : this.tapiLink.setTapiOperationalState( - link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(); - Link tapLink = this.tapiLink.createTapiLink(String.join("-", + Link tapLink = this.tapiLink.createTapiLink( + String.join("-", link.getSource().getSourceNode().getValue().split("-")[0], link.getSource().getSourceNode().getValue().split("-")[1]), - link.getSource().getSourceTp().getValue(), String.join("-", + link.getSource().getSourceTp().getValue(), + String.join("-", link.getDestination().getDestNode().getValue().split("-")[0], link.getDestination().getDestNode().getValue().split("-")[1]), link.getDestination().getDestTp().getValue(), TapiStringConstants.OMS_RDM_RDM_LINK, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.PHTNC_MEDIA, adminState, operState, List.of(LayerProtocolName.PHOTONICMEDIA), - List.of(LayerProtocolName.PHOTONICMEDIA.getName()), this.tapiTopoUuid); - linksToNotConvert.add(link - .augmentation(Link1.class) - .getOppositeLink().getValue()); + TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, + //adminState, + link.augmentation(Link1.class).getAdministrativeState() == null || oppLnkAdmState == null + ? null + : this.tapiLink.setTapiAdminState( + link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName(), + //operState, + link.augmentation(Link1.class).getOperationalState() == null || oppLnkOpState == null + ? null + : this.tapiLink.setTapiOperationalState( + link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(), + Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), + this.tapiTopoUuid); + linksToNotConvert.add(link.augmentation(Link1.class).getOppositeLink().getValue()); tapiLinks.put(tapLink.key(), tapLink); } } } - public void convertRoadmNode(Node roadm, Network openroadmTopo) { + public void convertRoadmNode(Node roadm, Network openroadmTopo, String topoMode) { + setTopologicalMode(topoMode); + if (topoMode.equals("Full")) { + convertRoadmNodeFull(roadm, openroadmTopo); + } else { + convertRoadmNodeAbstracted(openroadmTopo); + } + } + + private void convertRoadmNodeFull(Node roadm, Network openroadmTopo) { this.ietfNodeId = roadm.getNodeId().getValue(); this.ietfNodeType = roadm.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class).getNodeType(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) + .getNodeType(); Map oneplist = new HashMap<>(); // 1. Get degree and srg nodes to map TPs into NEPs if (openroadmTopo.getNode() == null) { @@ -275,24 +163,24 @@ public class ConvertORTopoToTapiFullTopo { int numSips = 0; List nodeList = new ArrayList(openroadmTopo.getNode().values()); for (Node node:nodeList) { - if (node.getSupportingNode().values().stream().noneMatch(sp -> sp.getNodeRef().getValue() - .equals(this.ietfNodeId))) { - LOG.warn("Abstracted node {} is not part of {}", - node.getNodeId().getValue(), this.ietfNodeId); + if (node.getSupportingNode().values().stream() + .noneMatch(sp -> sp.getNodeRef().getValue().equals(this.ietfNodeId))) { + LOG.debug("Abstracted node {} is not part of {}", node.getNodeId().getValue(), this.ietfNodeId); continue; } if (node.augmentation(Node1.class) == null - && node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev180226.Node1.class) == null) { + && node.augmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class) == null) { LOG.warn("Abstracted node {} doesnt have type of node or is not disaggregated", node.getNodeId().getValue()); continue; } - OpenroadmNodeType nodeType = node.augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev211210.Node1.class).getNodeType(); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = - node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev180226.Node1.class); + OpenroadmNodeType nodeType = node.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) + .getNodeType(); + var node1 = node.augmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class); LOG.info("TPs of node: {}", node1.getTerminationPoint().values()); switch (nodeType.getIntValue()) { case 11: @@ -300,160 +188,170 @@ public class ConvertORTopoToTapiFullTopo { // Get only external TPs of the degree List degPortList = node1.getTerminationPoint().values().stream() .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.DEGREETXRXTTP.getIntValue() + == OpenroadmTpType.DEGREETXRXTTP.getIntValue() || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.DEGREERXTTP.getIntValue() + == OpenroadmTpType.DEGREERXTTP.getIntValue() || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.DEGREETXTTP.getIntValue()) + == OpenroadmTpType.DEGREETXTTP.getIntValue()) .collect(Collectors.toList()); // Convert TP List in NEPs and put it in onepl - LOG.info("Degree port List: {}", degPortList); + LOG.info("Degree port List: {}", degPortList.toString()); // TODO: deg port could be sip. e.g. MDONS - oneplist.putAll(populateNepsForRdmNode(degPortList, false)); - // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), degPortList, false)); - numNeps += degPortList.size() * 3; + oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), degPortList, false, + TapiStringConstants.PHTNC_MEDIA_OTS)); + oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), degPortList, false, + TapiStringConstants.PHTNC_MEDIA_OMS)); + numNeps += degPortList.size() * 2; break; case 12: LOG.info("SRG node"); // Get only external TPs of the srg List srgPortList = node1.getTerminationPoint().values().stream() .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.SRGTXRXPP.getIntValue() + == OpenroadmTpType.SRGTXRXPP.getIntValue() || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.SRGRXPP.getIntValue() + == OpenroadmTpType.SRGRXPP.getIntValue() || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.SRGTXPP.getIntValue()) + == OpenroadmTpType.SRGTXPP.getIntValue()) .collect(Collectors.toList()); // Convert TP List in NEPs and put it in onepl LOG.info("Srg port List: {}", srgPortList); - oneplist.putAll(populateNepsForRdmNode(srgPortList, true)); - // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), srgPortList, true)); - numNeps += srgPortList.size() * 3; + oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), srgPortList, true, + TapiStringConstants.PHTNC_MEDIA_OTS)); + numNeps += srgPortList.size(); numSips += srgPortList.size(); break; default: - LOG.error("Node {} tyoe not supported", nodeType.getName()); + LOG.error("Node {} type not supported", nodeType.getName()); } } // create tapi Node // UUID - LOG.info("Creation of PHOTONIC node for {}", roadm.getNodeId().getValue()); - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", roadm.getNodeId().getValue(), - TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString()); + String nodeIdPhMed = String.join("+", roadm.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA); + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeIdPhMed.getBytes(Charset.forName("UTF-8"))).toString()); + LOG.info("Creation of PHOTONIC node for {}, of Uuid {}", roadm.getNodeId().getValue(), nodeUuid); // Names - Name nodeNames = new NameBuilder().setValueName("roadm node name") - .setValue(String.join("+", roadm.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA)).build(); - Name nameNodeType = new NameBuilder().setValueName("Node Type") - .setValue(this.ietfNodeType.getName()).build(); + Name nodeNames = new NameBuilder().setValueName("roadm node name").setValue(nodeIdPhMed).build(); + Name nameNodeType = new NameBuilder().setValueName("Node Type").setValue(this.ietfNodeType.getName()).build(); // Protocol Layer - List layerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA); + Set layerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA); // Build tapi node - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology - .Node roadmNode = createRoadmTapiNode(nodeUuid, - Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType), layerProtocols, oneplist); + LOG.debug("CONVERTTOFULL SRG OTSNode of retrieved OnepMap {} ", + oneplist.entrySet().stream().filter(e -> e.getValue() + .getSupportedCepLayerProtocolQualifierInstances() + .contains(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setNumberOfCepInstances(Uint64.valueOf(1)) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) + .build())) + .collect(Collectors.toList()).toString()); + //org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node + var roadmNode = createRoadmTapiNode(nodeUuid, + Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType), layerProtocols, oneplist, "Full"); // TODO add states corresponding to device config LOG.info("ROADM node {} should have {} NEPs and {} SIPs", roadm.getNodeId().getValue(), numNeps, numSips); - LOG.info("ROADM node {} has {} NEPs and {} SIPs", roadm.getNodeId().getValue(), - roadmNode.getOwnedNodeEdgePoint().values().size(), - roadmNode.getOwnedNodeEdgePoint().values().stream() + LOG.info("ROADM node {} has {} NEPs and {} SIPs", + roadm.getNodeId().getValue(), + roadmNode.nonnullOwnedNodeEdgePoint().values().size(), + roadmNode.nonnullOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count()); - tapiNodes.put(roadmNode.key(), roadmNode); } - private OduSwitchingPools createOduSwitchingPoolForTp100G() { - Map nblMap = new HashMap<>(); - int count = 1; - for (TerminationPoint tp : this.oorNetworkPortList) { - TpId tpid1 = tp.getTpId(); - TpId tpid2 = new TpId(tp.augmentation( - org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class) - .getAssociatedConnectionMapPort()); - List tpList = new ArrayList<>(); - tpList.add(tpid1); - tpList.add(tpid2); - NonBlockingList nbl = new NonBlockingListBuilder() - .setNblNumber(Uint16.valueOf(count)) - .setTpList(tpList) - .build(); - nblMap.put(nbl.key(), nbl); - count++; + private void convertRoadmNodeAbstracted(Network openroadmTopo) { + Map oneMap = new HashMap<>(); + // 1. Get degree and srg nodes to map TPs into NEPs + if (openroadmTopo.getNode() == null) { + LOG.warn("Openroadm-topology is null."); + return; } - return new OduSwitchingPoolsBuilder() - .setNonBlockingList(nblMap) - .setSwitchingPoolNumber(Uint16.valueOf(1)) - .build(); + int numNeps = 0; + int numSips = 0; + List nodeList = new ArrayList(openroadmTopo.getNode().values()); + for (Node node:nodeList) { + var node1 = node.augmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class); + if (node.augmentation(Node1.class) == null && node1 == null) { + LOG.warn("Abstracted node {} doesnt have type of node or is not disaggregated", + node.getNodeId().getValue()); + continue; + } + OpenroadmNodeType nodeType = node.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) + .getNodeType(); + if (nodeType.getIntValue() != 11) { + // Only consider ROADMS SRG Nodes + continue; + } + LOG.debug("Handling SRG node in Topology abstraction {}", node.getNodeId().toString()); + // Get only external TPs of the srg + List srgPortList = node1.getTerminationPoint().values().stream() + .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() + == OpenroadmTpType.SRGTXRXPP.getIntValue() + || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() + == OpenroadmTpType.SRGRXPP.getIntValue() + || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() + == OpenroadmTpType.SRGTXPP.getIntValue()) + .collect(Collectors.toList()); + // Convert TP List in NEPs and put it in onepl + LOG.debug("Srg port List: {}", srgPortList); + oneMap.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), srgPortList, true, + TapiStringConstants.PHTNC_MEDIA_OTS)); + numNeps += srgPortList.size(); + numSips += srgPortList.size(); + } + // create a unique ROADM tapi Node + 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("roadm node name").setValue(TapiStringConstants.RDM_INFRA).build(); + Name nameNodeType = + new NameBuilder().setValueName("Node Type").setValue(OpenroadmNodeType.ROADM.getName()).build(); + + // Protocol Layer + Set layerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA); + // Build tapi node + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node roadmNode = + createRoadmTapiNode(nodeUuid, Map.of(nodeName.key(), nodeName, nameNodeType.key(), nameNodeType), + layerProtocols, oneMap, "Abstracted"); + // TODO add states corresponding to device config + LOG.info("ROADM node {} should have {} NEPs and {} SIPs", TapiStringConstants.RDM_INFRA, numNeps, numSips); + LOG.info("ROADM node {} has {} NEPs and {} SIPs", TapiStringConstants.RDM_INFRA, + roadmNode.nonnullOwnedNodeEdgePoint().values().size(), + roadmNode.nonnullOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count()); + + tapiNodes.put(roadmNode.key(), roadmNode); } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node - createTapiNode(Map nodeNames, List layerProtocols) { - Uuid nodeUuid = null; - Map onepl = new HashMap<>(); - Map nodeRuleGroupList = new HashMap<>(); - Map ruleList = new HashMap<>(); - Rule rule = new RuleBuilder() - .setLocalId("forward") - .setForwardingRule(ForwardingRule.MAYFORWARDACROSSGROUP) - .setRuleType(RuleType.FORWARDING) - .build(); - ruleList.put(rule.key(), rule); - if (layerProtocols.contains(LayerProtocolName.DSR)) { - nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList); - } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { - nodeUuid = getNodeUuid4Photonic(onepl, nodeRuleGroupList, ruleList); - } else { - LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next()) - .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue()); - } + private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node + createRoadmTapiNode(Uuid nodeUuid, Map nameMap, Set layerProtocols, + Map onepMap, String topoMode) { // Empty random creation of mandatory fields for avoiding errors.... CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() .setCostAlgorithm("Restricted Shortest Path - RSP") .setCostName("HOP_COUNT") - .setCostValue("12345678") + .setCostValue(TapiStringConstants.COST_HOP_VALUE) .build(); LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic("12345678") - .setQueingLatencyCharacteristic("12345678") - .setJitterCharacteristic("12345678") - .setWanderCharacteristic("12345678") + .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) + .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) + .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) + .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) .setTrafficPropertyName("FIXED_LATENCY") .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)) - .setErrorCharacteristic("error") - .setLossCharacteristic("loss") - .setRepeatDeliveryCharacteristic("repeat delivery") - .setDeliveryOrderCharacteristic("delivery order") - .setUnavailableTimeCharacteristic("unavailable time") - .setServerIntegrityProcessCharacteristic("server integrity process") + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) .build(); - } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node - createRoadmTapiNode(Uuid nodeUuid, Map nameMap, List layerProtocols, - Map oneplist) { - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue("12345678") - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic("12345678") - .setQueingLatencyCharacteristic("12345678") - .setJitterCharacteristic("12345678") - .setWanderCharacteristic("12345678") - .setTrafficPropertyName("FIXED_LATENCY") - .build(); + var tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid); + String choosenMode = topoMode.equals("Full") ? "Full" : "Abstracted"; + Map nodeRuleGroupMap = + tapiFactory.createAllNodeRuleGroupForRdmNode(choosenMode, nodeUuid, this.ietfNodeId, onepMap.values()); + Map interRuleGroupMap = + tapiFactory.createInterRuleGroupForRdmNode(choosenMode, nodeUuid, this.ietfNodeId, + nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList())); return new NodeBuilder() .setUuid(nodeUuid) .setName(nameMap) @@ -461,10 +359,15 @@ public class ConvertORTopoToTapiFullTopo { .setAdministrativeState(AdministrativeState.UNLOCKED) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) - .setOwnedNodeEdgePoint(oneplist) - .setNodeRuleGroup(createNodeRuleGroupForRdmNode(nodeUuid, oneplist.values())) + .setOwnedNodeEdgePoint(onepMap) + .setNodeRuleGroup(nodeRuleGroupMap) + .setInterRuleGroup(interRuleGroupMap) .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) + .setRiskParameterPac( + new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build()) .setErrorCharacteristic("error") .setLossCharacteristic("loss") .setRepeatDeliveryCharacteristic("repeat delivery") @@ -474,632 +377,152 @@ public class ConvertORTopoToTapiFullTopo { .build(); } - private Uuid getNodeUuid4Photonic(Map onepl, - Map nodeRuleGroupList, - Map ruleList) { - Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)); - // iNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1); - Name onedName = new NameBuilder() - .setValueName("iNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - 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.I_OTSI)); - onepl.put(onep.key(), onep); - } - // eNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); - Name onedName = new NameBuilder() - .setValueName("eNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false, - String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI)); - onepl.put(onep.key(), onep); - } - // Photonic Media Nep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3); - Name onedName = new NameBuilder() - .setValueName("PhotMedNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false, - String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA)); - onepl.put(onep.key(), onep); - } - // create NodeRuleGroup - int count = 1; - LOG.info("OTSi switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values()); - for (TerminationPoint tp : this.oorNetworkPortList) { - Map - nepList = new HashMap<>(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group - .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - tp.getTpId().getValue()))) - .build(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group - .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - tp.getTpId().getValue()))) - .build(); - nepList.put(inep.key(), inep); - nepList.put(enep.key(), enep); - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue("12345678") - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic("12345678") - .setQueingLatencyCharacteristic("12345678") - .setJitterCharacteristic("12345678") - .setWanderCharacteristic("12345678") - .setTrafficPropertyName("FIXED_LATENCY") - .build(); - RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() - .setRiskCharacteristicName("risk characteristic") - .setRiskIdentifierList(List.of("risk identifier1", "risk identifier2")) - .build(); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(Charset.forName("UTF-8"))) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .build(); - nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup); - count++; - } - return nodeUuid; - } - - private Uuid getNodeUuid4Dsr(Map onepl, - Map nodeRuleGroupList, Map ruleList) { - Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.DSR)); - // client nep creation on DSR node - for (int i = 0; i < oorClientPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - oorClientPortList.get(i).getTpId().getValue())); - 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.DSR, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, - TapiStringConstants.DSR)); - onepl.put(onep.key(), onep); - } - // network nep creation on I_ODU node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, - oorNetworkPortList.get(i).getTpId().getValue())); - 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); - } - // network nep creation on E_ODU node - for (int i = 0; i < oorClientPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, - oorClientPortList.get(i).getTpId().getValue())); - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, - oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, - oorClientPortList.get(i).getTpId().getValue()), nepUuid); - Name onedName = new NameBuilder() - .setValueName("eNodeEdgePoint_N") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, - oorClientPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.ODU, LayerProtocolName.DSR, false, String.join("+", this.ietfNodeId, - TapiStringConstants.E_ODU)); - onepl.put(onep.key(), onep); - } - // create NodeRuleGroup - int count = 1; - LOG.info("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values()); - for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) { - Map - nepList = new HashMap<>(); - LOG.info("UUidMap={}", this.uuidMap.keySet()); - LOG.info("TP list = {}", nbl.getTpList()); - for (TpId tp : nbl.getTpList()) { - LOG.info("TP={}", tp.getValue()); - LOG.info("UuidKey={}", String.join("+", this.ietfNodeId, - TapiStringConstants.E_ODU, tp.getValue())); - if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, - TapiStringConstants.E_ODU, tp.getValue())) - && this.uuidMap.containsKey(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR, tp.getValue()))) { - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint - nep1 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR))) - .setNodeEdgePointUuid(this.uuidMap.get(String.join( - "+", this.ietfNodeId, TapiStringConstants.DSR, tp.getValue()))) - .build(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint - nep2 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR))) - .setNodeEdgePointUuid(this.uuidMap.get(String.join( - "+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue()))) - .build(); - nepList.put(nep1.key(), nep1); - nepList.put(nep2.key(), nep2); - } - } - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue("12345678") - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic("12345678") - .setQueingLatencyCharacteristic("12345678") - .setJitterCharacteristic("12345678") - .setWanderCharacteristic("12345678") - .setTrafficPropertyName("FIXED_LATENCY") - .build(); - RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() - .setRiskCharacteristicName("risk characteristic") - .setRiskIdentifierList(List.of("risk identifier1", "risk identifier2")) - .build(); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid(UUID.nameUUIDFromBytes(("dsr node rule group " + count) - .getBytes(Charset.forName("UTF-8"))).toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .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()); - OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder() - .setUuid(this.uuidMap.get(key)) - .setLayerProtocolName(nepProtocol) - .setName(nepNames); - if (withSip) { - onepBldr.setMappedServiceInterfacePoint(createMSIP(1, nepProtocol, oorTp, keyword)); - } - AdministrativeState adminState = null; - OperationalState operState = null; - if (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null) { - adminState = this.tapiLink.setTapiAdminState(oorTp.augmentation(TerminationPoint1.class) - .getAdministrativeState().getName()); - } - if (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null) { - operState = this.tapiLink.setTapiOperationalState(oorTp.augmentation(TerminationPoint1.class) - .getOperationalState().getName()); - } - onepBldr.setSupportedCepLayerProtocolQualifier(createSupportedLayerProtocolQualifier(oorTp, nepProtocol)) - .setLinkPortDirection(PortDirection.BIDIRECTIONAL) - .setLinkPortRole(PortRole.SYMMETRIC) - .setAdministrativeState(adminState) - .setOperationalState(operState) - .setLifecycleState(LifecycleState.INSTALLED) - .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) - .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL); - return onepBldr.build(); - } - - private Map populateNepsForRdmNode(List tpList, - boolean withSip) { - // create neps for MC and OTSiMC and Photonic Media + public Map populateNepsForRdmNode(String nodeId, + List tpList, boolean withSip, String nepPhotonicSublayer) { + // create neps for MC and and Photonic Media OTS/OMS Map onepMap = new HashMap<>(); for (TerminationPoint tp:tpList) { // Admin and oper state common for all tps - AdminStates admin = tp.augmentation(TerminationPoint1.class).getAdministrativeState(); - State oper = tp.augmentation(TerminationPoint1.class).getOperationalState(); + OpenroadmTpType tpType = tp.augmentation(TerminationPoint1.class).getTpType(); // PHOTONIC MEDIA nep - LOG.info("PHOTO NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, + LOG.debug("PHOTO NEP = {}", String.join("+", this.ietfNodeId, nepPhotonicSublayer, tp.getTpId().getValue())); + SupportedCepLayerProtocolQualifierInstancesBuilder sclpqiBd = + new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setNumberOfCepInstances(Uint64.valueOf(1)); + switch (nepPhotonicSublayer) { + case TapiStringConstants.PHTNC_MEDIA_OMS: + sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE); + break; + case TapiStringConstants.PHTNC_MEDIA_OTS: + sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE); + break; + case TapiStringConstants.MC: + sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE); + break; + case TapiStringConstants.OTSI_MC: + sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE); + break; + default: + break; + } + //List sclpqiList = new ArrayList<>(List.of(sclpqiBd.build())); + OwnedNodeEdgePointBuilder onepBd = new OwnedNodeEdgePointBuilder(); + if (!nepPhotonicSublayer.equals(TapiStringConstants.MC) + && !nepPhotonicSublayer.equals(TapiStringConstants.OTSI_MC)) { + ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid); + Map usedFreqMap = new HashMap<>(); + Map availableFreqMap = new HashMap<>(); + switch (tpType) { + // Whatever is the TP and its type we consider that it is handled in a bidirectional way : + // same wavelength(s) used in both direction. + case SRGRXPP: + case SRGTXPP: + case SRGTXRXPP: + usedFreqMap = tapiFactory.getPPUsedWavelength(tp); + if (usedFreqMap == null || usedFreqMap.isEmpty()) { + availableFreqMap.put(GridConstant.START_EDGE_FREQUENCY * 1E09, + GridConstant.START_EDGE_FREQUENCY * 1E09 + + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06); + } else { + LOG.debug("EnteringLOOPcreateOTSiMC & MC with usedFreqMap non empty {} NEP {} for Node {}", + usedFreqMap.toString(), String.join("+", this.ietfNodeId, nepPhotonicSublayer, + tp.getTpId().getValue()), nodeId); + onepMap.putAll(populateNepsForRdmNode(nodeId, new ArrayList<>(List.of(tp)), + true, TapiStringConstants.MC)); + onepMap.putAll(populateNepsForRdmNode(nodeId, new ArrayList<>(List.of(tp)), + true, TapiStringConstants.OTSI_MC)); + } + break; + case DEGREERXTTP: + case DEGREETXTTP: + case DEGREETXRXTTP: + usedFreqMap = tapiFactory.getTTPUsedFreqMap(tp); + availableFreqMap = tapiFactory.getTTPAvailableFreqMap(tp); + break; + default: + break; + } + LOG.debug("calling add Photonic NEP spec for Roadm"); + onepBd = tapiFactory.addPhotSpecToRoadmOnep(nodeId, usedFreqMap, availableFreqMap, onepBd, + nepPhotonicSublayer); + } + AdminStates admin = tp.augmentation(TerminationPoint1.class).getAdministrativeState(); + State oper = tp.augmentation(TerminationPoint1.class).getOperationalState(); Name nepName = new NameBuilder() - .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - tp.getTpId().getValue())) + .setValueName(nepPhotonicSublayer + "NodeEdgePoint") + .setValue(String.join("+", this.ietfNodeId, nepPhotonicSublayer, tp.getTpId().getValue())) .build(); - - OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder() + OwnedNodeEdgePoint onep = onepBd .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, - TapiStringConstants.PHTNC_MEDIA, tp.getTpId().getValue())) - .getBytes(Charset.forName("UTF-8"))).toString())) + nepPhotonicSublayer, tp.getTpId().getValue())) + .getBytes(Charset.forName("UTF-8"))).toString())) .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) .setName(Map.of(nepName.key(), nepName)) - .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class)) - .setLinkPortDirection(PortDirection.BIDIRECTIONAL) + .setSupportedCepLayerProtocolQualifierInstances( + new ArrayList<>(List.of( + new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier( + TapiStringConstants.PHTNC_MEDIA_OMS.equals(nepPhotonicSublayer) + ? PHOTONICLAYERQUALIFIEROMS.VALUE + : PHOTONICLAYERQUALIFIEROTS.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()))) + .setDirection(Direction.BIDIRECTIONAL) .setLinkPortRole(PortRole.SYMMETRIC) .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName())) .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName())) .setLifecycleState(LifecycleState.INSTALLED) - .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) - .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL) .build(); onepMap.put(onep.key(), onep); - - // MC nep - LOG.info("MC NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.MC, - tp.getTpId().getValue())); - Name nepName1 = new NameBuilder() - .setValueName(TapiStringConstants.MC + "NodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.MC, tp.getTpId().getValue())) - .build(); - OwnedNodeEdgePointBuilder onepBldr1 = new OwnedNodeEdgePointBuilder() - .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, - TapiStringConstants.MC, tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString())) - .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) - .setName(Map.of(nepName1.key(), nepName1)) - .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class)) - .setLinkPortDirection(PortDirection.BIDIRECTIONAL) - .setLinkPortRole(PortRole.SYMMETRIC) - .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName())) - .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName())) - .setLifecycleState(LifecycleState.INSTALLED) - .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) - .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL); - if (withSip) { - onepBldr1.setMappedServiceInterfacePoint(createMSIP(1, LayerProtocolName.PHOTONICMEDIA, - tp, String.join("+", this.ietfNodeId, TapiStringConstants.MC))); - } - OwnedNodeEdgePoint onep1 = onepBldr1.build(); - onepMap.put(onep1.key(), onep1); - - // OTSiMC nep - LOG.info("OTSi NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, - tp.getTpId().getValue())); - Name nepName2 = new NameBuilder() - .setValueName(TapiStringConstants.OTSI_MC + "NodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, - tp.getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep2 = new OwnedNodeEdgePointBuilder() - .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, - TapiStringConstants.OTSI_MC, tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString())) - .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) - .setName(Map.of(nepName2.key(), nepName2)) - .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class)) - .setLinkPortDirection(PortDirection.BIDIRECTIONAL) - .setLinkPortRole(PortRole.SYMMETRIC) - .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName())) - .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName())) - .setLifecycleState(LifecycleState.INSTALLED) - .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) - .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL) - .build(); - onepMap.put(onep2.key(), onep2); } 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.rev181210.node.rule.group.NodeEdgePoint - nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group - .NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(nodeUuid) - .setNodeEdgePointUuid(onep.key().getUuid()) - .build(); - nepMap.put(nep.key(), nep); - } - Map nodeRuleGroupMap = new HashMap<>(); - Map ruleList = new HashMap<>(); - Rule rule = new RuleBuilder() - .setLocalId("forward") - .setForwardingRule(ForwardingRule.MAYFORWARDACROSSGROUP) - .setRuleType(RuleType.FORWARDING) - .build(); - ruleList.put(rule.key(), rule); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid(UUID.nameUUIDFromBytes((this.ietfNodeId + " node rule group") - .getBytes(Charset.forName("UTF-8"))).toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepMap) - .build(); - nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup); - return nodeRuleGroupMap; - } - - private Map createMSIP(int nb, - LayerProtocolName layerProtocol, - TerminationPoint tp, - String nodeid) { - // add them to SIP context - Map msipl = new HashMap<>(); - for (int i = 0; i < nb; i++) { - LOG.info("SIP = {}", String.join("+", "SIP", nodeid, tp.getTpId().getValue())); - Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeid, - tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); - MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder() - .setServiceInterfacePointUuid(sipUuid).build(); - ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tp, nodeid); - this.tapiSips.put(sip.key(), sip); - msipl.put(msip.key(), msip); - } - return msipl; - } - - private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, TerminationPoint tp, - String nodeid) { - // TODO: what value should be set in total capacity and available capacity?? - // LOG.info("SIP name = {}", String.join("+", nodeid, tp.getTpId().getValue())); - Name sipName = new NameBuilder() - .setValueName("SIP name") - .setValue(String.join("+", nodeid, tp.getTpId().getValue())) - .build(); - AdministrativeState adminState = null; - OperationalState operState = null; - if (tp.augmentation(TerminationPoint1.class).getAdministrativeState() != null) { - adminState = this.tapiLink.setTapiAdminState(tp.augmentation(TerminationPoint1.class) - .getAdministrativeState().getName()); - } - if (tp.augmentation(TerminationPoint1.class).getOperationalState() != null) { - operState = this.tapiLink.setTapiOperationalState(tp.augmentation(TerminationPoint1.class) - .getOperationalState().getName()); - } - return new ServiceInterfacePointBuilder() - .setUuid(sipUuid) - .setName(Map.of(sipName.key(), sipName)) - .setLayerProtocolName(layerProtocol) - .setAdministrativeState(adminState) - .setOperationalState(operState) - .setLifecycleState(LifecycleState.INSTALLED) - .setAvailableCapacity(new AvailableCapacityBuilder().build()) - .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().build()) - .setSupportedLayerProtocolQualifier(createSupportedLayerProtocolQualifier(tp, layerProtocol)) - .build(); - } - - private List> createSupportedLayerProtocolQualifier(TerminationPoint tp, - LayerProtocolName lpn) { - Set> sclpqSet = new HashSet<>(); - List sicList; - org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1 tp1 = - tp.augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.otn.network.topology.rev211210.TerminationPoint1.class); - if (tp1 == null) { - return new ArrayList<>(sclpqSet); - } - if (tp1.getTpSupportedInterfaces() == null) { - LOG.warn("Tp supported interface doesnt exist on TP {}", tp.getTpId().getValue()); - return new ArrayList<>(sclpqSet); - } - sicList = new ArrayList<>(tp1.getTpSupportedInterfaces().getSupportedInterfaceCapability().values()); - for (SupportedInterfaceCapability sic : sicList) { - switch (lpn.getName()) { - case "DSR": - switch (sic.getIfCapType().getSimpleName()) { - // 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": - sclpqSet.add(ODUTYPEODU0.class); - sclpqSet.add(DIGITALSIGNALTYPEGigE.class); - break; - case "If10GEODU2e": - sclpqSet.add(ODUTYPEODU2E.class); - sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.class); - break; - case "If10GEODU2": - sclpqSet.add(ODUTYPEODU2.class); - sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.class); - break; - case "If10GE": - sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.class); - break; - case "If100GEODU4": - sclpqSet.add(DIGITALSIGNALTYPE100GigE.class); - sclpqSet.add(ODUTYPEODU4.class); - break; - case "If100GE": - sclpqSet.add(DIGITALSIGNALTYPE100GigE.class); - break; - case "IfOCHOTU4ODU4": - case "IfOCH": - sclpqSet.add(ODUTYPEODU4.class); - break; - default: - LOG.error("IfCapability type not managed"); - break; - } - break; - case "ODU": - switch (sic.getIfCapType().getSimpleName()) { - // 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": - sclpqSet.add(ODUTYPEODU0.class); - break; - case "If10GEODU2e": - sclpqSet.add(ODUTYPEODU2E.class); - break; - case "If10GEODU2": - case "If10GE": - sclpqSet.add(ODUTYPEODU2.class); - break; - case "If100GEODU4": - case "If100GE": - case "IfOCHOTU4ODU4": - case "IfOCH": - sclpqSet.add(ODUTYPEODU4.class); - break; - default: - LOG.error("IfCapability type not managed"); - break; - } - break; - case "PHOTONIC_MEDIA": - if (sic.getIfCapType().getSimpleName().equals("IfOCHOTU4ODU4") - || sic.getIfCapType().getSimpleName().equals("IfOCH")) { - sclpqSet.add(PHOTONICLAYERQUALIFIEROTSi.class); - sclpqSet.add(PHOTONICLAYERQUALIFIEROMS.class); - } - break; - default: - LOG.error("Layer Protocol Name is unknown"); - break; - } - } - return new ArrayList<>(sclpqSet); - } - - private void createTapiTransitionalLinks() { - for (TerminationPoint tp : this.oorNetworkPortList) { - Link transiLink = tapiLink.createTapiLink(this.ietfNodeId, tp.getTpId().getValue(), this.ietfNodeId, - tp.getTpId().getValue(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR, - TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI, - "inService", "inService", Arrays.asList(LayerProtocolName.ODU, - LayerProtocolName.PHOTONICMEDIA), - Arrays.asList(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()), - this.tapiTopoUuid); - this.tapiLinks.put(transiLink.key(), transiLink); - } - } - - public void convertXpdrToRdmLinks(List xpdrRdmLinkList) { + public void convertXpdrToRdmLinks( + List xpdrRdmLinkList) { List linksToNotConvert = new ArrayList<>(); LOG.info("creation of {} xpdr to roadm links", xpdrRdmLinkList.size() / 2); - // LOG.info("Link list = {}", xpdrRdmLinkList.toString()); - for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev180226.networks.network.Link link:xpdrRdmLinkList) { + LOG.debug("Link list = {}", xpdrRdmLinkList); + for (var link:xpdrRdmLinkList) { if (!linksToNotConvert.contains(link.getLinkId().getValue())) { - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev180226.networks.network.Link oppositeLink = xpdrRdmLinkList.stream() + var oppositeLink = xpdrRdmLinkList.stream() .filter(l -> l.getLinkId().equals(link.augmentation(Link1.class).getOppositeLink())).findAny() .orElse(null); - AdminStates oppLnkAdmState = null; State oppLnkOpState = null; if (oppositeLink != null) { oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState(); oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState(); } - String adminState = - link.augmentation(Link1.class).getAdministrativeState() == null - || oppLnkAdmState == null - ? null - : this.tapiLink.setTapiAdminState( - link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName(); - String operState = - link.augmentation(Link1.class).getOperationalState() == null - || oppLnkOpState == null - ? null - : this.tapiLink.setTapiOperationalState( - link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(); - - String sourceNode = (link.getSource().getSourceNode().getValue().contains("ROADM")) - ? getIdBasedOnModelVersion(link.getSource().getSourceNode().getValue()) - : link.getSource().getSourceNode().getValue(); - String sourceTp = link.getSource().getSourceTp().getValue(); - String sourceNodeQual = sourceNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA - : TapiStringConstants.OTSI; - String destNode = (link.getDestination().getDestNode().getValue().contains("ROADM")) - ? getIdBasedOnModelVersion(link.getDestination().getDestNode().getValue()) - : link.getDestination().getDestNode().getValue(); - String destTp = link.getDestination().getDestTp().getValue(); - String destNodeQual = destNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA - : TapiStringConstants.OTSI; - Link tapLink = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp, - TapiStringConstants.OMS_XPDR_RDM_LINK, sourceNodeQual, destNodeQual, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, adminState, - operState, List.of(LayerProtocolName.PHOTONICMEDIA), - List.of(LayerProtocolName.PHOTONICMEDIA.getName()), this.tapiTopoUuid); + String sourceNode = + link.getSource().getSourceNode().getValue().contains("ROADM") + ? getIdBasedOnModelVersion(link.getSource().getSourceNode().getValue()) + : link.getSource().getSourceNode().getValue(); + String destNode = + link.getDestination().getDestNode().getValue().contains("ROADM") + ? getIdBasedOnModelVersion(link.getDestination().getDestNode().getValue()) + : link.getDestination().getDestNode().getValue(); + Link tapLink = this.tapiLink.createTapiLink( + sourceNode, link.getSource().getSourceTp().getValue(), + destNode, link.getDestination().getDestTp().getValue(), + TapiStringConstants.OMS_XPDR_RDM_LINK, + sourceNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA : TapiStringConstants.XPDR, + destNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA : TapiStringConstants.XPDR, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, + //adminState, + link.augmentation(Link1.class).getAdministrativeState() == null || oppLnkAdmState == null + ? null + : this.tapiLink.setTapiAdminState( + link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName(), + //operState, + link.augmentation(Link1.class).getOperationalState() == null || oppLnkOpState == null + ? null + : this.tapiLink.setTapiOperationalState( + link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(), + Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), + this.tapiTopoUuid); linksToNotConvert.add(link.augmentation(Link1.class).getOppositeLink().getValue()); this.tapiLinks.put(tapLink.key(), tapLink); } @@ -1116,7 +539,12 @@ public class ConvertORTopoToTapiFullTopo { } } - public Map + public void setTapiNodes(Map nodeMap) { + this.tapiNodes.putAll(nodeMap); + } + + public Map getTapiNodes() { return tapiNodes; } @@ -1125,7 +553,19 @@ public class ConvertORTopoToTapiFullTopo { return tapiLinks; } + public void setTapiSips(Map tapiSip) { + this.tapiSips.putAll(tapiSip); + } + public Map getTapiSips() { return tapiSips; } + + public static void setTopologicalMode(String topoMode) { + ConvertORTopoToTapiFullTopo.topologicalMode = topoMode; + } + + public String getTopologicalMode() { + return topologicalMode; + } }