X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Futil%2FOpenRoadmTopology22.java;h=b38e1d9e207968e2c8805bc3afe30bf8f96f8b4a;hb=eefabe33a2ffa0323ee8394d7e0f2f5497bb7d44;hp=ecba7552228a8558919cda4bf3f8ee23129d9be3;hpb=1f9f09e6578a5500de469f9bdb4e05ae0970c711;p=transportpce.git diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java index ecba75522..b38e1d9e2 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java @@ -10,73 +10,68 @@ package org.opendaylight.transportpce.networkmodel.util; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; import java.util.List; -import java.util.Optional; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; -import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.networkmodel.dto.NodeData; import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev190702.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev190702.network.nodes.Mapping; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.State; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengths; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes.AvailableWavelengthsKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.PortsKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacksKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.degree.ConnectionPorts; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Degree; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.DegreeKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Info; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.NetworkTypes1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.NetworkTypes1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.network.types.OpenroadmTopologyBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrClientAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.termination.point.XpdrNetworkAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NetworkTypesBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.Node; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNode; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.node.SupportingNodeKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1Builder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.TpId; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPoint; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node.TerminationPointKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengths; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrClientAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; +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.NetworkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder; +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.rev180226.networks.network.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder; +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.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; +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.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.slf4j.Logger; @@ -85,9 +80,6 @@ import org.slf4j.LoggerFactory; public class OpenRoadmTopology22 { private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology22.class); - private static final int DEFAULT_PORT_DIRECTION = -1; - private static final int MAX_DEGREE = 20; - private static final int MAX_SRG = 20; private NetworkTransactionService networkTransactionService; private final DeviceTransactionManager deviceTransactionManager; @@ -105,11 +97,11 @@ public class OpenRoadmTopology22 { public void createTopoLayer() { try { Network openRoadmTopology = createOpenRoadmTopology(); - InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Network.class, + InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); this.networkTransactionService.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmTopology); - this.networkTransactionService.submit().get(1, TimeUnit.SECONDS); + this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); LOG.info("OpenRoadm-Topology created successfully."); } catch (ExecutionException | TimeoutException | InterruptedException e) { LOG.warn("Failed to create OpenRoadm-Topology", e); @@ -125,7 +117,7 @@ public class OpenRoadmTopology22 { nwBuilder.setNetworkId(nwId); nwBuilder.withKey(new NetworkKey(nwId)); NetworkTypes1Builder topoNetworkTypesBldr = new NetworkTypes1Builder(); - topoNetworkTypesBldr.setOpenroadmTopology(new OpenroadmTopologyBuilder().build()); + topoNetworkTypesBldr.setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build()); NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder(); nwTypeBuilder.addAugmentation(NetworkTypes1.class, topoNetworkTypesBldr.build()); nwBuilder.setNetworkTypes(nwTypeBuilder.build()); @@ -138,452 +130,241 @@ public class OpenRoadmTopology22 { return nwBuilder.build(); } - public TopologyShard createTopologyShard(String nodeId) { + public TopologyShard createTopologyShard(Nodes mappingNode) { int numOfDegrees; int numOfSrgs; - int portDirectionEnum = DEFAULT_PORT_DIRECTION; - - InstanceIdentifier infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class); - java.util.Optional deviceInfoOpt = - deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, infoIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - Info deviceInfo; - if (deviceInfoOpt.isPresent()) { - deviceInfo = deviceInfoOpt.get(); - } else { - LOG.error("Unable to get device info for device {}!", nodeId); - return null; - } List nodes = new ArrayList<>(); - // Check if node is ROADM - if (NodeTypes.Rdm.getName().equals(deviceInfo.getNodeType().getName())) { - - /* - * Adding Degree Node Get Degree Number -> x then get connection ports then find the port directions - * to decide whether TX/RX/TXRX Get value for max degree from info subtree, required for iteration - * if not present assume to be 20 (temporary) - */ - - Integer maxDegree; - if (deviceInfo.getMaxDegrees() != null) { - maxDegree = deviceInfo.getMaxDegrees(); - } else { - maxDegree = MAX_DEGREE; - } + List links = new ArrayList<>(); - // Starting with degree Number = 1 - Integer degreeCounter = 1; - - while (degreeCounter <= maxDegree) { - LOG.info("creating degree node {}/{}", degreeCounter, maxDegree); - NodeData nodeData = createDegreeNode(nodeId, degreeCounter); - if (nodeData != null) { - NodeBuilder tempNode = nodeData.getNodeBuilder(); - portDirectionEnum = nodeData.getPortDirectionEnum(); - nodes.add(tempNode.build()); - degreeCounter++; - } - // null returned if Degree number= degreeCounter not present in the device - else { - break; + // Check if node is ROADM + if (NodeTypes.Rdm.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { + LOG.info("creating rdm node in openroadmtopology for node {}", mappingNode.getNodeId()); + // transform flat mapping list to per degree and per srg mapping lists + Map> mapDeg = new HashMap(); + Map> mapSrg = new HashMap(); + List mappingList = mappingNode.getMapping(); + mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint)); + + List nodeShardList = new ArrayList(); + for (Mapping mapping : mappingList) { + String str = mapping.getLogicalConnectionPoint().split("-")[0]; + if (!nodeShardList.contains(str)) { + nodeShardList.add(str); } } - numOfDegrees = degreeCounter - 1; - - Integer maxSrg; - if (deviceInfo.getMaxSrgs() != null) { - maxSrg = deviceInfo.getMaxSrgs(); - } else { - maxSrg = MAX_SRG; - } - - // Starting with degree Number = 1 - Integer srgCounter = 1; - - while (srgCounter <= maxSrg) { - LOG.info("creating SRG node {}/{}", srgCounter, maxSrg); - NodeBuilder tempNode = createSrgNode(nodeId, srgCounter, portDirectionEnum); - - if (tempNode != null) { - nodes.add(tempNode.build()); - srgCounter++; + for (String str : nodeShardList) { + List interList = new ArrayList(); + interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint().contains(str)) + .collect(Collectors.toList()); + if (str.contains("DEG")) { + mapDeg.put(str, interList); + } else if (str.contains("SRG")) { + mapSrg.put(str, interList); } else { - // null returned if Degree number= degreeCounter not present in the device - break; + LOG.error("unknown element"); } } - numOfSrgs = srgCounter - 1; + // create degree nodes + for (String k : mapDeg.keySet()) { + NodeBuilder ietfNode = createDegree(k, mapDeg.get(k), mappingNode.getNodeId()); + nodes.add(ietfNode.build()); + } + // create srg nodes + for (String k : mapSrg.keySet()) { + NodeBuilder ietfNode = createSrg(k, mapSrg.get(k), mappingNode.getNodeId()); + nodes.add(ietfNode.build()); + } + numOfDegrees = mapDeg.size(); + numOfSrgs = mapSrg.size(); LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs); - List links = new ArrayList<>(); - links.addAll(createExpressLinks(nodeId, numOfDegrees, portDirectionEnum)); - links.addAll(createAddDropLinks(nodeId, numOfDegrees, numOfSrgs, portDirectionEnum)); + links.addAll(createNewLinks(nodes)); LOG.info("created nodes/links: {}/{}", nodes.size(), links.size()); return new TopologyShard(nodes, links); - } else if (NodeTypes.Xpdr.getName().equals(deviceInfo.getNodeType().getName())) { + } else if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { // Check if node is XPONDER - Integer clientport = getNoOfClientPorts(nodeId); - List links = new ArrayList<>(); - Integer clientCounter = 1; - Integer lineCounter = 1; - while (clientCounter <= clientport) { - NodeBuilder tempNode = createXpdr(clientCounter, lineCounter, nodeId); - if (tempNode == null) { - break; - } - nodes.add(tempNode.build()); - clientCounter++; - lineCounter++; - LOG.info("Entered this loop"); - } + LOG.info("creating xpdr node in openroadmtopology for node {}", mappingNode.getNodeId()); + NodeBuilder ietfNode = createXpdr(mappingNode); + nodes.add(ietfNode.build()); return new TopologyShard(nodes, links); } LOG.error("Device node Type not managed yet"); return null; } - /** - * This private method gets the list of circuit packs on a xponder. For each circuit pack on a - * Xponder, it does a get on circuit-pack subtree with circuit-pack-name as key in order to get the - * list of ports. It then iterates over the list of ports to get ports with port-qual as - * xpdr-network/xpdr-client. The line and client ports are saved as: - * - *

- * 1. LINEn - * - *

- * 2. CLNTn - */ - private int getNoOfClientPorts(String deviceId) { - // Creating for Xponder Line and Client Ports - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class); - Optional deviceObject = - deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.CONFIGURATION, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - // Variable to keep track of number of client ports - int client = 1; - if (deviceObject.isPresent()) { - for (CircuitPacks cp : deviceObject.get().getCircuitPacks()) { - if (cp.getPorts() != null) { - for (Ports port : cp.getPorts()) { - if (port.getPortQual() != null) { - if (port.getPortQual().getIntValue() == 4) { - client++; - } - } - } - } + private NodeBuilder createXpdr(Nodes mappingNode) { + // Create ietf node setting supporting-node data + NodeBuilder ietfNodeBldr = createTopoLayerNode(mappingNode.getNodeId()); + // set node-id + String nodeIdtopo = new StringBuilder().append(mappingNode.getNodeId()).append("-XPDR1").toString(); + ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo)); + ietfNodeBldr.withKey((new NodeKey(new NodeId(nodeIdtopo)))); + // Create openroadm-network-topo augmentation to set node type to Xponder + Node1Builder ontNode1Bldr = new Node1Builder(); + ontNode1Bldr.setNodeType(OpenroadmNodeType.XPONDER); + ietfNodeBldr.addAugmentation(Node1.class, ontNode1Bldr.build()); + + // Create tp-list + List tpList = new ArrayList<>(); + TerminationPointBuilder ietfTpBldr; + for (Mapping m : mappingNode.getMapping()) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-network-topology tp augmentations + TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); + if (m.getPortQual().equals("xpdr-network")) { + ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); + XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder(); + xpdrNwAttrBldr.setTailEquipmentId(m.getAssociatedLcp()); + ontTp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build()); + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625 + .TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce + .topology.rev190625.TerminationPoint1Builder(); + tpceTp1Bldr.setAssociatedConnectionMapPort(m.getAssociatedLcp()); + ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625 + .TerminationPoint1.class, tpceTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); + } else if (m.getPortQual().equals("xpdr-client")) { + ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); + XpdrClientAttributesBuilder xpdrNwAttrBldr = new XpdrClientAttributesBuilder(); + xpdrNwAttrBldr.setTailEquipmentId(m.getAssociatedLcp()); + ontTp1Bldr.setXpdrClientAttributes(xpdrNwAttrBldr.build()); + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625 + .TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce + .topology.rev190625.TerminationPoint1Builder(); + tpceTp1Bldr.setAssociatedConnectionMapPort(m.getAssociatedLcp()); + ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625 + .TerminationPoint1.class, tpceTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); } - } else { - return 0; } - return client; - } - - private NodeBuilder createXpdr(Integer clientCounter, Integer lineCounter, String nodeId) { - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - // Create augmentation node to inorder to add degree - Node1Builder node1bldr = new Node1Builder(); - TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); - TerminationPointBuilder tempTpBldr; - // set node type to Xponder - node1bldr.setNodeType(OpenroadmNodeType.XPONDER); - List tpList = new ArrayList<>(); - String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR1").toString(); - // Ad degree node specific augmentation - nodebldr.setNodeId(new NodeId(nodeIdtopo)); - nodebldr.withKey((new NodeKey(new NodeId(nodeIdtopo)))); - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - while (clientCounter != 0) { - // Create CLNT-TX termination - tempTpBldr = createTpBldr("XPDR1-CLIENT" + clientCounter); - tp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); - XpdrClientAttributesBuilder xpdrClntBldr = new XpdrClientAttributesBuilder(); - xpdrClntBldr.setTailEquipmentId("XPDR1-NETWORK" + clientCounter); - tp1Bldr.setXpdrClientAttributes(xpdrClntBldr.build()); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - clientCounter--; } - while (lineCounter != 0) { - // Create LINE-TX termination - tempTpBldr = (createTpBldr("XPDR1-NETWORK" + lineCounter)); - tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); - XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder(); - xpdrNwAttrBldr.setTailEquipmentId("XPDR1-CLIENT" + lineCounter); - tp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build()); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - lineCounter--; } - LOG.info("printing tpList {}",tpList); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608 - .Node1Builder tpNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.topology.rev150608.Node1Builder(); - tpNode1.setTerminationPoint(tpList); - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - LOG.info("The nodebldr {}",nodebldr); - return nodebldr; + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder(); + ietfNode1.setTerminationPoint(tpList); + ietfNodeBldr.addAugmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, + ietfNode1.build()); + return ietfNodeBldr; } - - private NodeData createDegreeNode(String nodeId, int degreeCounter) { - // Create augmentation node to inorder to add degree - Node1Builder node1bldr = new Node1Builder(); - // set node type to degree - node1bldr.setNodeType(OpenroadmNodeType.DEGREE); - - // Get connection ports on degree number = degreeCounter in order to get port - // direction - List degreeConPorts = getDegreePorts(nodeId, degreeCounter); - if (degreeConPorts == null || degreeConPorts.isEmpty()) { - return null; - } - + private NodeBuilder createDegree(String degNb, List degListMap, String nodeId) { + // Create ietf node setting supporting-node data + NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId); + // set node-id + String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString(); + ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo)); + ietfNodeBldr.withKey((new NodeKey(new NodeId(nodeIdtopo)))); + // Create openroadm-network-topo augmentation to set node type to DEGREE + Node1Builder ontNode1Bldr = new Node1Builder(); + ontNode1Bldr.setNodeType(OpenroadmNodeType.DEGREE); + // set degree-attributes DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder(); - degAttBldr.setDegreeNumber(degreeCounter); + degAttBldr.setDegreeNumber(new Integer(degNb.split("DEG")[1])); degAttBldr.setAvailableWavelengths(create96AvalWaveDegree()); - node1bldr.setDegreeAttributes(degAttBldr.build()); - - String nodeIdtopo = new StringBuilder(nodeId).append("-DEG").append(degreeCounter).toString(); - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - nodebldr.setNodeId(new NodeId(nodeIdtopo)); - // Ad degree node specific augmentation - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - // Get Port direction - int portDirectionEnum = getPortDirection(nodeId, degreeConPorts.get(0).getCircuitPackName(), - degreeConPorts.get(0).getPortName().toString()); - - /* - * if bi-directional then create 2 tp's : - * - * --> TTP-TXRX --> CTP-TXRX - * - * if uni-directional : - * - * --> TTP-TX - * --> TTP-RX - * --> CTP-TX - * --> CTP-RX - */ - TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); - TerminationPointBuilder tempTpBldr; + ontNode1Bldr.setDegreeAttributes(degAttBldr.build()); + ietfNodeBldr.addAugmentation(Node1.class, ontNode1Bldr.build()); + // Create tp-list List tpList = new ArrayList<>(); - if (portDirectionEnum == 1 || portDirectionEnum == 2) { - // ports are uni Directional on a degree, therefore 4 termination points - // Create TTP-TX termination - - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-TX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create TTP-RX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-RX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP); - - tempTpBldr.addAugmentation(TerminationPoint1.class,tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-TX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-TX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class,tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-RX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-RX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREERXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class,tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - } else if (portDirectionEnum == 3) { - // Ports are bi directional therefore 2 termination points - // Create TTP-TXRX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-TTP-TXRX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP); - tempTpBldr.addAugmentation(TerminationPoint1.class,tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create CTP-TXRX termination - tp1Bldr = new TerminationPoint1Builder(); - tempTpBldr = createTpBldr("DEG" + degreeCounter + "-CTP-TXRX"); - tp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXCTP); - tempTpBldr.addAugmentation(TerminationPoint1.class,tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - + TerminationPointBuilder ietfTpBldr; + for (Mapping m : degListMap) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-network-topology tp augmentations + TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); + switch (m.getPortDirection()) { + case "bidirectional": + ontTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP); + break; + case "tx": + ontTp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP); + break; + case "rx": + ontTp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP); + break; + default: + LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); + } + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); } - - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 - = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology - .rev150608.Node1Builder(); - - tpNode1.setTerminationPoint(tpList); - - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - return new NodeData(nodebldr, portDirectionEnum); + // Add CTP to tp-list + ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX"); + TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); + ontTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXCTP); + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); + + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder(); + ietfNode1.setTerminationPoint(tpList); + ietfNodeBldr.addAugmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, + ietfNode1.build()); + return ietfNodeBldr; } - - private NodeBuilder createSrgNode(String nodeId, int srgCounter, int portDirectionEnum) { - // Create augmentation node to in order to add srg - Node1Builder node1bldr = new Node1Builder(); - // set node type to SRG - node1bldr.setNodeType(OpenroadmNodeType.SRG); - - node1bldr.setNodeType(OpenroadmNodeType.SRG); - + private NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId) { + // Create ietf node setting supporting-node data + NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId); + // set node-id + String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString(); + ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo)); + ietfNodeBldr.withKey((new NodeKey(new NodeId(nodeIdtopo)))); + // Create openroadm-network-topo augmentation to set node type to DEGREE + Node1Builder ontNode1Bldr = new Node1Builder(); + ontNode1Bldr.setNodeType(OpenroadmNodeType.SRG); + // set srg-attributes SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder(); srgAttrBldr.setAvailableWavelengths(create96AvalWaveSrg()); - node1bldr.setSrgAttributes(srgAttrBldr.build()); - // Create a generic Topo Layer node - NodeBuilder nodebldr = createTopoLayerNode(nodeId); - nodebldr.addAugmentation(Node1.class, node1bldr.build()); - - - // Get connection ports on degree number = degreeCounter in order to get port - // direction - int maxPpPorts = getMaxPp(nodeId, srgCounter); - if (maxPpPorts == -1) { - return null; - } - + ontNode1Bldr.setSrgAttributes(srgAttrBldr.build()); + ietfNodeBldr.addAugmentation(Node1.class, ontNode1Bldr.build()); - String nodeIdtopo = new StringBuilder().append(nodeId).append("-SRG").append(srgCounter).toString(); - nodebldr.setNodeId(new NodeId(nodeIdtopo)); + // Create tp-list List tpList = new ArrayList<>(); - - TerminationPoint1Builder tp1Bldr; - TerminationPointBuilder tempTpBldr; - - for (int i = 1; i <= maxPpPorts; i++) { - if (portDirectionEnum == 1 || portDirectionEnum == 2) { - if (i >= maxPpPorts / 2) { + TerminationPointBuilder ietfTpBldr; + for (Mapping m : srgListMap) { + ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); + // Add openroadm-network-topology tp augmentations + TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); + switch (m.getPortDirection()) { + case "bidirectional": + ontTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP); break; - } - // ports are uni Directional on a degree, therefore 4 termination points - // Create PP-TX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - // Create PP-RX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-RX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGRXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - - } else if (portDirectionEnum == 3) { - // Ports are bi directional therefore 2 termination points - // Create PP-TXRX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TXRX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - } - } - - switch (portDirectionEnum) { - case 1: // ports are uni Directional on a degree - case 2: - // Create CP-TX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - // Create CP-RX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-RX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGRXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - break; - case 3: - // Ports are bi directional therefore 2 termination points - // Create CP-TXRX termination - tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX"); - tp1Bldr = new TerminationPoint1Builder(); - tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP); - tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); - tpList.add(tempTpBldr.build()); - break; - default: - LOG.error("No correponsding direction to the value: {}", portDirectionEnum); - break; - } - - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder(); - - tpNode1.setTerminationPoint(tpList); - - nodebldr.addAugmentation( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class, - tpNode1.build()); - - return nodebldr; - } - - /* - * This method will return the TTP ports in the device for a given degree number to be used by the - * node to create TTP and CTP termination point on the device - */ - private List getDegreePorts(String deviceId, Integer degreeCounter) { - List degreeConPorts = new ArrayList<>(); - LOG.info("Getting Connection ports for Degree Number {}", degreeCounter); - InstanceIdentifier deviceIID = - InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Degree.class, new DegreeKey(degreeCounter)); - - Optional ordmDegreeObject = - deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.CONFIGURATION, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - - if (ordmDegreeObject.isPresent()) { - degreeConPorts.addAll(new ArrayList<>(ordmDegreeObject.get().getConnectionPorts())); - } else { - LOG.info("Device has {} degree", (degreeCounter - 1)); - return Collections.emptyList(); - } - return degreeConPorts; - } - - private int getMaxPp(String deviceId, Integer srgCounter) { - int maxPpPorts; - LOG.info("Getting max pp ports for Srg Number {}", srgCounter); - InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter)); - Optional ordmSrgObject = - deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, deviceIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (ordmSrgObject.isPresent()) { - if (ordmSrgObject.get().getMaxAddDropPorts() != null) { - maxPpPorts = ordmSrgObject.get().getMaxAddDropPorts(); - } else { - LOG.info("Max add drop ports absent"); - return -1; + case "tx": + ontTp1Bldr.setTpType(OpenroadmTpType.SRGTXPP); + break; + case "rx": + ontTp1Bldr.setTpType(OpenroadmTpType.SRGRXPP); + break; + default: + LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); } - } else { - LOG.info("SRG absent"); - return -1; + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); } - return maxPpPorts; + // Add CP to tp-list + ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX"); + TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder(); + ontTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP); + ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build()); + tpList.add(ietfTpBldr.build()); + + // Create ietf node augmentation to support ietf tp-list + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.Node1Builder(); + ietfNode1.setTerminationPoint(tpList); + ietfNodeBldr.addAugmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class, + ietfNode1.build()); + return ietfNodeBldr; } private NodeBuilder createTopoLayerNode(String nodeId) { @@ -600,30 +381,6 @@ public class OpenRoadmTopology22 { return nodebldr; } - // Return 0 for null/error values - // Return 1 for tx - // Return 2 for rx - // Return 3 for bi-directional - - private int getPortDirection(String deviceId, String circuitPackName, String portName) { - InstanceIdentifier portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName)) - .child(Ports.class, new PortsKey(portName)); - LOG.info("Fetching Port Direction for port {} at circuit pack {}", portName, circuitPackName); - Optional portObject = - deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, portIID, - Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (portObject.isPresent()) { - Ports port = portObject.get(); - if (port.getPortDirection() != null) { - return port.getPortDirection().getIntValue(); - } else { - LOG.warn("Port direction value missing for {} {}", circuitPackName, port.getPortName()); - return 0; - } - } - return 0; - } // This method returns a generic termination point builder for a given tpid private TerminationPointBuilder createTpBldr(String tpId) { @@ -635,148 +392,79 @@ public class OpenRoadmTopology22 { return tpBldr; } - - - - - private List createExpressLinks(String nodeId, int numOfDegrees, int portDirectionEnum) { - LOG.info("creating express links {} {} {}", nodeId, numOfDegrees, portDirectionEnum); - List links = new ArrayList<>(); - - String srcNode; - String destNode; - - String srcTp; - String destTp; - - // ports are uni-directional - if (portDirectionEnum == 1 || portDirectionEnum == 2) { - LOG.info("creating uni-directional express links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = i + 1; j <= numOfDegrees; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-DEG" + j; - - // AtoZ direction - srcTp = "DEG" + i + "-CTP-TX"; - destTp = "DEG" + j + "-CTP-RX"; - - LinkBuilder expLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp); - - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(expLinkBldr.build()); - - // ZtoA direction - srcTp = "DEG" + i + "-CTP-RX"; - destTp = "DEG" + j + "-CTP-TX"; - - expLinkBldr = TopologyUtils.createLink(destNode, srcNode, destTp, srcTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - - links.add(expLinkBldr.build()); - - } - } - } - - // ports are bi-directional - if (portDirectionEnum == 3) { - LOG.info("creating bi-directional express links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = i + 1; j <= numOfDegrees; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-DEG" + j; - - // AtoZ direction - srcTp = "DEG" + i + "-CTP-TXRX"; - destTp = "DEG" + j + "-CTP-TXRX"; - - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); - LinkBuilder expLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(expLinkBldr.build()); - - // ZtoA direction - expLinkBldr = TopologyUtils.createLink(destNode, srcNode, destTp, srcTp); - expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(expLinkBldr.build()); - } - } - } - return links; + private LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) { + LinkBuilder ietfLinkBldr = new LinkBuilder(); + //create source link + SourceBuilder ietfSrcLinkBldr = new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp); + //create destination link + DestinationBuilder ietfDestLinkBldr = new DestinationBuilder().setDestNode(new NodeId(destNode)) + .setDestTp(destTp); + ietfLinkBldr.setSource(ietfSrcLinkBldr.build()) + .setDestination(ietfDestLinkBldr.build()) + .setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp)) + .withKey(new LinkKey(ietfLinkBldr.getLinkId())); + return ietfLinkBldr; } - private List createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) { - LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum); + private List createNewLinks(List nodes) { List links = new ArrayList<>(); - String srcNode; String destNode; - String srcTp; String destTp; - - // ports are uni-directional - if (portDirectionEnum == 1 || portDirectionEnum == 2) { - LOG.info("creating uni-directional add-drop links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = 1; j <= numOfSrgs; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-SRG" + j; - - // drop links - srcTp = "DEG" + i + "-CTP-TX"; - destTp = "SRG" + j + "-CP-RX"; - - LinkBuilder addDropLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp); - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - - // add links direction - srcTp = "DEG" + i + "-CTP-RX"; - destTp = "SRG" + j + "-CP-TX"; - - addDropLinkBldr = TopologyUtils.createLink(destNode, srcNode, destTp, srcTp); - lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - + for (int i = 0; i < nodes.size() - 1; i++) { + for (int j = i + 1; j < nodes.size(); j++) { + srcNode = nodes.get(i).getNodeId().getValue(); + destNode = nodes.get(j).getNodeId().getValue(); + // A to Z direction + srcTp = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf + .network.topology.rev180226.Node1.class).getTerminationPoint().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get().getTpId().getValue(); + destTp = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf + .network.topology.rev180226.Node1.class).getTerminationPoint().stream() + .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) + .findFirst().get().getTpId().getValue(); + LinkBuilder ietfAzLinkBldr = createLink(srcNode, destNode, srcTp, destTp); + Link1Builder ontAzLinkBldr = new Link1Builder(); + int srcNodeType = nodes.get(i).augmentation(Node1.class).getNodeType().getIntValue(); + int destNodeType = nodes.get(j).augmentation(Node1.class).getNodeType().getIntValue(); + if (srcNodeType == 11 && destNodeType == 11) { + ontAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); + } else if (srcNodeType == 11 && destNodeType == 12) { + ontAzLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK); + } else if (srcNodeType == 12 && destNodeType == 11) { + ontAzLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK); + } else { + continue; } - } - } - // ports are bi-directional - if (portDirectionEnum == 3) { - LOG.info("creating bi-directional add-drop links"); - for (int i = 1; i <= numOfDegrees; i++) { - for (int j = 1; j <= numOfSrgs; j++) { - - srcNode = nodeId + "-DEG" + i; - destNode = nodeId + "-SRG" + j; - - // drop links - srcTp = "DEG" + i + "-CTP-TXRX"; - destTp = "SRG" + j + "-CP-TXRX"; - - LinkBuilder addDropLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp); - Link1Builder lnk1Bldr = new Link1Builder(); - lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); - - // add link - addDropLinkBldr = TopologyUtils.createLink(destNode, srcNode, destTp, srcTp); - lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK); - addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build()); - links.add(addDropLinkBldr.build()); + // Z to A direction + LinkBuilder ietfZaLinkBldr = createLink(destNode, srcNode, destTp, srcTp); + Link1Builder ontZaLinkBldr = new Link1Builder(); + if (srcNodeType == 11 && destNodeType == 11) { + ontZaLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); + } else if (destNodeType == 11 && srcNodeType == 12) { + ontZaLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK); + } else if (destNodeType == 12 && srcNodeType == 11) { + ontZaLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK); + } else { + continue; } + // set opposite link augmentations + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder ocnAzLinkBldr = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() + .setOppositeLink(ietfZaLinkBldr.getLinkId()); + ietfAzLinkBldr.addAugmentation(Link1.class, ontAzLinkBldr.build()); + ietfAzLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .Link1.class, ocnAzLinkBldr.build()); + ietfZaLinkBldr.addAugmentation(Link1.class, ontZaLinkBldr.build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder ocnZaLinkBldr = + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder() + .setOppositeLink(ietfAzLinkBldr.getLinkId()); + ietfZaLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .Link1.class, ocnZaLinkBldr.build()); + links.add(ietfAzLinkBldr.build()); + links.add(ietfZaLinkBldr.build()); } } return links; @@ -800,7 +488,7 @@ public class OpenRoadmTopology22 { public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) { LOG.info("deleting link for LinkId: {}", linkId); try { - InstanceIdentifierBuilder linkIID = InstanceIdentifier.builder(Network.class, + InstanceIdentifierBuilder linkIID = InstanceIdentifier.builder(Networks.class).child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class) .child(Link.class, new LinkKey(linkId)); com.google.common.base.Optional link = @@ -808,13 +496,13 @@ public class OpenRoadmTopology22 { if (link.isPresent()) { LinkBuilder linkBuilder = new LinkBuilder(link.get()); Link1Builder link1Builder = new Link1Builder(linkBuilder.augmentation(org.opendaylight - .yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1.class)); + .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1.class)); link1Builder.setAdministrativeState(State.OutOfService); linkBuilder.removeAugmentation(Link1.class); linkBuilder.addAugmentation(Link1.class,link1Builder.build()); networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(), linkBuilder.build()); - networkTransactionService.submit().get(1, TimeUnit.SECONDS); + networkTransactionService.commit().get(1, TimeUnit.SECONDS); return true; } else { LOG.error("No link found for given LinkId: {}", @@ -841,21 +529,21 @@ public class OpenRoadmTopology22 { return waveList; } - private List create96AvalWaveSrg() { - List waveList = new ArrayList<>(); for (int i = 1; i < 97; i++) { - org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes + org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes .AvailableWavelengthsBuilder avalBldr = - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node + new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node .attributes.AvailableWavelengthsBuilder(); avalBldr.setIndex((long) i); avalBldr.withKey( - new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node + new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node .attributes.AvailableWavelengthsKey( (long) i)); waveList.add(avalBldr.build());