X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2FR2RTapiLinkDiscovery.java;h=186097cf7f7a80e3279e9819948af8a613ad4fbe;hp=becd14a4c07d1b9363125e0d5ce41a8bbc3a8382;hb=02120b6f30aece5acfa0fba69419c6b65f0f1659;hpb=9a56bf61db2ac2307f282f54eda53732630a664c diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java index becd14a4c..186097cf7 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java @@ -7,14 +7,11 @@ */ package org.opendaylight.transportpce.tapi; -import java.nio.charset.Charset; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -24,6 +21,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.transportpce.tapi.utils.TapiLink; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.Network; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.cp.to.degree.CpToDegree; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; @@ -36,46 +34,11 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.NbrList; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfName; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; -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.CapacityUnit; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection; 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.Uuid; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder; -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.topology.rev181210.Context1; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ProtectionType; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RestorationPolicy; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.ResilienceTypeBuilder; -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.OwnedNodeEdgePointKey; -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.LinkBuilder; 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.Node; -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.topology.context.Topology; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey; -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.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanism; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanismBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,12 +48,13 @@ public class R2RTapiLinkDiscovery { private final NetworkTransactionService networkTransactionService; private final DeviceTransactionManager deviceTransactionManager; - private static final String PHTNC_MEDIA = "PHOTONIC_MEDIA"; + private final TapiLink tapiLink; public R2RTapiLinkDiscovery(NetworkTransactionService networkTransactionService, - DeviceTransactionManager deviceTransactionManager) { + DeviceTransactionManager deviceTransactionManager, TapiLink tapiLink) { this.networkTransactionService = networkTransactionService; this.deviceTransactionManager = deviceTransactionManager; + this.tapiLink = tapiLink; } public Map readLLDP(NodeId nodeId, int nodeVersion, Uuid tapiTopoUuid) { @@ -259,112 +223,16 @@ public class R2RTapiLinkDiscovery { // Create OMS Tapi Link LOG.info("Tapi R2R Link Found a neighbor SrcNodeId: {} , SrcDegId: {} , SrcTPId: {}, DestNodeId:{} , " + "DestDegId: {}, DestTPId: {}", nodeId.getValue(), srcDegId, srcTpTx, destNodeId, destDegId, destTpRx); - Link omsLink = createTapiLink(nodeId.getValue(), srcTpTx, destNodeId.getValue(), destTpRx, tapiTopoUuid); + Link omsLink = this.tapiLink.createTapiLink(nodeId.getValue(), srcTpTx, destNodeId.getValue(), destTpTx, + TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), + this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), + List.of(LayerProtocolName.PHOTONICMEDIA), List.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); LOG.info("Tapi R2R Link OMS link created = {}", omsLink); return omsLink; } - private Link createTapiLink(String sourceNode, String sourceTp, String destNode, String destTp, Uuid tapiTopoUuid) { - Map nepList = new HashMap<>(); - Uuid sourceUuidNode = new Uuid(UUID.nameUUIDFromBytes((String.join("+", sourceNode, - PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString()); - Uuid sourceUuidTp = new Uuid(UUID.nameUUIDFromBytes((String.join("+", sourceNode, PHTNC_MEDIA, sourceTp)) - .getBytes(Charset.forName("UTF-8"))).toString()); - Uuid destUuidNode = new Uuid(UUID.nameUUIDFromBytes((String.join("+", destNode, - PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString()); - Uuid destUuidTp = new Uuid(UUID.nameUUIDFromBytes((String.join("+", destNode, PHTNC_MEDIA, destTp)) - .getBytes(Charset.forName("UTF-8"))).toString()); - NodeEdgePoint sourceNep = new NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(sourceUuidNode) - .setNodeEdgePointUuid(sourceUuidTp) - .build(); - nepList.put(sourceNep.key(), sourceNep); - NodeEdgePoint destNep = new NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(destUuidNode) - .setNodeEdgePointUuid(destUuidTp) - .build(); - nepList.put(destNep.key(), destNep); - OperationalState sourceOperState = getOperState(tapiTopoUuid, sourceUuidTp, sourceUuidNode); - OperationalState destOperState = getOperState(tapiTopoUuid, destUuidTp, destUuidNode); - if (sourceOperState == null || destOperState == null) { - LOG.error("No link can be created, as the operational state was not found in the TAPI topology"); - return null; - } - AdministrativeState sourceAdminState = getAdminState(tapiTopoUuid, sourceUuidTp, sourceUuidNode); - AdministrativeState destAdminState = getAdminState(tapiTopoUuid, destUuidTp, destUuidNode); - if (sourceAdminState == null || destAdminState == null) { - LOG.error("No link can be created, as the administrative state was not found in the TAPI topology"); - return null; - } - OperationalState operState = (OperationalState.ENABLED.equals(sourceOperState) - && OperationalState.ENABLED.equals(destOperState)) - ? OperationalState.ENABLED : OperationalState.DISABLED; - AdministrativeState adminState = (AdministrativeState.UNLOCKED.equals(sourceAdminState) - && AdministrativeState.UNLOCKED.equals(destAdminState)) - ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED; - String linkNameValue = String.join("-", sourceNode, sourceTp.split("-")[0], sourceTp) - + "to" + String.join("-", destNode, destTp.split("-")[0], destTp); - Name linkName = new NameBuilder().setValueName("OMS link name") - .setValue(linkNameValue) - .build(); - 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(); - ValidationMechanism validationMechanism = new ValidationMechanismBuilder() - .setValidationMechanism("validation mechanism") - .setValidationRobustness("validation robustness") - .setLayerProtocolAdjacencyValidated("layer protocol adjacency") - .build(); - return new LinkBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(linkNameValue.getBytes(Charset.forName("UTF-8"))) - .toString())) - .setName(Map.of(linkName.key(), linkName)) - .setLayerProtocolName(List.of(LayerProtocolName.PHOTONICMEDIA)) - .setTransitionedLayerProtocolName(new ArrayList<>()) - .setNodeEdgePoint(nepList) - .setDirection(ForwardingDirection.BIDIRECTIONAL) - .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTON) - .setRestorationPolicy(RestorationPolicy.NA) - .build()) - .setAdministrativeState(adminState) - .setOperationalState(operState) - .setLifecycleState(LifecycleState.INSTALLED) - .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize( - new TotalSizeBuilder().setUnit(CapacityUnit.GBPS) - .setValue(Uint64.valueOf(100)).build()).build()) - .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize( - new TotalSizeBuilder().setUnit(CapacityUnit.MBPS) - .setValue(Uint64.valueOf(100)).build()) - .build()) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .setErrorCharacteristic("error") - .setLossCharacteristic("loss") - .setRepeatDeliveryCharacteristic("repeat delivery") - .setDeliveryOrderCharacteristic("delivery order") - .setUnavailableTimeCharacteristic("unavailable time") - .setServerIntegrityProcessCharacteristic("server integrity process") - .setValidationMechanism(Map.of(validationMechanism.key(), validationMechanism)) - .build(); - } - private Integer getDegFromInterface(NodeId nodeId, String interfaceName) { InstanceIdentifier nodesIID = InstanceIdentifier.builder(Network.class) .child(Nodes.class, new NodesKey(nodeId.getValue())).build(); @@ -419,44 +287,4 @@ public class R2RTapiLinkDiscovery { } return Direction.NotApplicable; } - - private OperationalState getOperState(Uuid tapiTopoUuid, Uuid nepUuid, Uuid nodeUuid) { - InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) - .augmentation(Context1.class).child(TopologyContext.class) - .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) - .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) - .build(); - try { - Optional optionalOnep = this.networkTransactionService.read( - LogicalDatastoreType.OPERATIONAL, onepIID).get(); - if (!optionalOnep.isPresent()) { - LOG.error("No NEP {} object present in datastore", nepUuid); - return null; - } - return optionalOnep.get().getOperationalState(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Failed getting Mapping data from portMapping",e); - return null; - } - } - - private AdministrativeState getAdminState(Uuid tapiTopoUuid, Uuid nepUuid, Uuid nodeUuid) { - InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) - .augmentation(Context1.class).child(TopologyContext.class) - .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) - .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) - .build(); - try { - Optional optionalOnep = this.networkTransactionService.read( - LogicalDatastoreType.OPERATIONAL, onepIID).get(); - if (!optionalOnep.isPresent()) { - LOG.error("No NEP {} object present in datastore", nepUuid); - return null; - } - return optionalOnep.get().getAdministrativeState(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Failed getting Mapping data from portMapping",e); - return null; - } - } }