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 org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import java.util.stream.Collectors;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.transportpce.common.Timeouts;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.networkmodel.dto.NodeData;
+import org.opendaylight.transportpce.common.fixedflex.GridUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
-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.rev170206.circuit.pack.Ports;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.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.link.DestinationBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SourceBuilder;
-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.opendaylight.transportpce.portmapping.rev210315.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes;
+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.rev200529.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.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.NetworkKey;
+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.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.opendaylight.yangtools.yang.common.Uint16;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class OpenRoadmTopology {
+public final class OpenRoadmTopology {
private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology.class);
- private static final int DEFAULT_PORT_DIRECTION = -1;
- private static final int MAX_DEGREE = 20;
- private static final int MAX_SRG = 20;
- private final DataBroker dataBroker;
- private final DeviceTransactionManager deviceTransactionManager;
-
- public OpenRoadmTopology(DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager) {
- this.dataBroker = dataBroker;
- this.deviceTransactionManager = deviceTransactionManager;
- }
-
- /**
- * This public method creates the OpenROADM Topology Layer and posts it to
- * the controller.
- */
- public void createTopoLayer(DataBroker controllerdb) {
- try {
- Network openRoadmTopology = createOpenRoadmTopology();
- InstanceIdentifierBuilder<Network> nwIID = InstanceIdentifier.builder(Network.class,
- new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)));
- WriteTransaction wrtx = controllerdb.newWriteOnlyTransaction();
- wrtx.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmTopology);
- wrtx.submit().get(1, TimeUnit.SECONDS);
- LOG.info("OpenRoadm-Topology created successfully.");
- } catch (ExecutionException | TimeoutException | InterruptedException e) {
- LOG.warn("Failed to create OpenRoadm-Topology", e);
- }
- }
-
- /**
- * Create empty OpenROADM topology.
- */
- private Network createOpenRoadmTopology() {
- NetworkBuilder nwBuilder = new NetworkBuilder();
- NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID);
- nwBuilder.setNetworkId(nwId);
- nwBuilder.withKey(new NetworkKey(nwId));
- // set network type to Transport Underlay
- NetworkTypes1Builder topoNetworkTypesBldr = new NetworkTypes1Builder();
- topoNetworkTypesBldr.setOpenroadmTopology(new OpenroadmTopologyBuilder().build());
- NetworkTypesBuilder nwTypeBuilder = new NetworkTypesBuilder();
- nwTypeBuilder.addAugmentation(NetworkTypes1.class, topoNetworkTypesBldr.build());
- nwBuilder.setNetworkTypes(nwTypeBuilder.build());
- // Array to store nodes in the topolayer of a roadm/Xponder
- Network1Builder nwBldr1 = new Network1Builder();
- // adding expressLinks
- nwBldr1.setLink(Collections.emptyList());
- nwBuilder.addAugmentation(Network1.class, nwBldr1.build());
- nwBuilder.setNode(Collections.emptyList());
- return nwBuilder.build();
+ private OpenRoadmTopology() {
}
- public TopologyShard createTopologyShard(String nodeId) {
+ public static TopologyShard createTopologyShard(Nodes mappingNode) {
int numOfDegrees;
int numOfSrgs;
- int portDirectionEnum = DEFAULT_PORT_DIRECTION;
-
- InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
- java.util.Optional<Info> deviceInfoOpt = this.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<Node> nodes = new ArrayList<>();
+ List<Link> links = new ArrayList<>();
// Check if node is ROADM
- if (NodeTypes.Rdm.equals(deviceInfo.getNodeType())) {
-
- /*
- * 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;
+ 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<String, List<Mapping>> mapDeg = new HashMap<>();
+ Map<String, List<Mapping>> mapSrg = new HashMap<>();
+ List<Mapping> mappingList = new ArrayList<>(mappingNode.nonnullMapping().values());
+ mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint));
+
+ List<String> nodeShardList = new ArrayList<>();
+ for (Mapping mapping : mappingList) {
+ String str = mapping.getLogicalConnectionPoint().split("-")[0];
+ if (!nodeShardList.contains(str)) {
+ nodeShardList.add(str);
+ }
}
-
- // 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++;
+ for (String str : nodeShardList) {
+ List<Mapping> 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");
}
}
- numOfDegrees = degreeCounter - 1;
-
- Integer maxSrg;
- if (deviceInfo.getMaxSrgs() != null) {
- maxSrg = deviceInfo.getMaxSrgs();
- } else {
- maxSrg = MAX_SRG;
+ // create degree nodes
+ for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
+ NodeBuilder ietfNode = createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
+ mappingNode.getNodeInfo().getNodeClli());
+ nodes.add(ietfNode.build());
}
-
- // 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++;
- } else {
- // null returned if Degree number= degreeCounter not present in the device
- break;
- }
+ // create srg nodes
+ for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
+ NodeBuilder ietfNode = createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
+ mappingNode.getNodeInfo().getNodeClli());
+ nodes.add(ietfNode.build());
}
- numOfSrgs = srgCounter - 1;
+
+ numOfDegrees = mapDeg.size();
+ numOfSrgs = mapSrg.size();
LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs);
- List<Link> 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.equals(deviceInfo.getNodeType())) {
- // Check if node is XPONDER
- XponderPortNumber portNums = getNoOfPorts(nodeId);
- List<Link> links = new ArrayList<>();
- NodeBuilder tempNode = createXpdr(portNums.getNumOfClientPorts(), portNums.getNumOfLinePorts(), nodeId);
- nodes.add(tempNode.build());
- return new TopologyShard(nodes, links);
- }
-
- 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:
- *
- * <p>
- * 1. LINEn
- *
- * <p>
- * 2. CLNTn
- */
- private XponderPortNumber getNoOfPorts(String deviceId) {
-
- XponderPortNumber xponderPortNumber = new XponderPortNumber();
- // Creating for Xponder Line and Client Ports
- InstanceIdentifier<OrgOpenroadmDevice> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class);
- Optional<OrgOpenroadmDevice> deviceObject = this.deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-
- // Variable to keep track of number of client ports
- int client = 0;
- int line = 0;
- 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++;
- } else if (port.getPortQual().getIntValue() == 3) {
- line++;
- }
- }
+ } else if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) {
+ // Check if node is Xpdr is a Transponder
+ List<Mapping> networkMappings = mappingNode.nonnullMapping().values()
+ .stream().filter(k -> k.getLogicalConnectionPoint()
+ .contains("NETWORK")).collect(Collectors.toList());
+ List<Integer> tpdrList = new ArrayList<>();
+ for (Mapping mapping : networkMappings) {
+ List<Mapping> extractedMappings = null;
+ Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
+ if (!tpdrList.contains(xpdrNb)) {
+ tpdrList.add(xpdrNb);
+ extractedMappings = mappingNode.nonnullMapping().values().stream().filter(lcp -> lcp
+ .getLogicalConnectionPoint().contains("XPDR" + xpdrNb)).collect(Collectors.toList());
+ NodeBuilder ietfNode;
+ if (mapping.getXponderType() == null
+ || XpdrNodeTypes.Tpdr.getIntValue() == mapping.getXponderType().getIntValue()) {
+ LOG.info("creating xpdr node {} of type Tpdr in openroadm-topology",
+ mappingNode.getNodeId() + "-XPDR" + xpdrNb);
+ ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
+ extractedMappings, false);
+ nodes.add(ietfNode.build());
+ } else if (XpdrNodeTypes.Mpdr.getIntValue() == mapping.getXponderType().getIntValue()
+ || XpdrNodeTypes.Switch.getIntValue() == mapping.getXponderType().getIntValue()) {
+ LOG.info("creating xpdr node {} of type {} in openroadm-topology",
+ mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName());
+ ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
+ extractedMappings, true);
+ nodes.add(ietfNode.build());
}
}
}
- } else {
- return xponderPortNumber;
- }
- xponderPortNumber.setNumOfClientPorts(client);
- xponderPortNumber.setNumOfLinePorts(line);
- return xponderPortNumber;
- }
-
- 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<TerminationPoint> 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 terminationCannot get available Capabilitiesc
- 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;
- }
-
- 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<ConnectionPorts> degreeConPorts = getDegreePorts(nodeId, degreeCounter);
- if ((degreeConPorts == null) || degreeConPorts.isEmpty()) {
- return null;
- }
-
- DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder();
- degAttBldr.setDegreeNumber(degreeCounter);
- 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;
-
- List<TerminationPoint> 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());
-
+ if (nodes.isEmpty()) {
+ return null;
+ } else {
+ return new TopologyShard(nodes, links);
+ }
}
-
- 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);
+ LOG.error("Device node Type not managed yet");
+ return null;
}
- private NodeBuilder createSrgNode(String nodeId, int srgCounter, int portDirectionEnum) {
- // Create augmentation node to inorder to add degree
- Node1Builder node1bldr = new Node1Builder();
- // set node type to degree
- node1bldr.setNodeType(OpenroadmNodeType.SRG);
-
- node1bldr.setNodeType(OpenroadmNodeType.SRG);
-
- 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;
- }
-
- String nodeIdtopo = new StringBuilder().append(nodeId).append("-SRG").append(srgCounter).toString();
- nodebldr.setNodeId(new NodeId(nodeIdtopo));
- List<TerminationPoint> tpList = new ArrayList<>();
-
- TerminationPoint1Builder tp1Bldr;
- TerminationPointBuilder tempTpBldr;
-
- for (int i = 1; i <= maxPpPorts; i++) {
- if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) {
- if (i >= (maxPpPorts / 2)) {
- break;
+ private static NodeBuilder createXpdr(String nodeId, String clli, Integer xpdrNb, List<Mapping> mappings,
+ boolean isOtn) {
+ // Create openroadm-network-topo augmentation to set node type to Xponder
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 =
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.XPONDER)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build();
+ // Create ietf node setting supporting-node data
+ NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli);
+ // set node-id
+ String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR").append(xpdrNb).toString();
+ ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo))
+ .withKey((new NodeKey(new NodeId(nodeIdtopo))))
+ .addAugmentation(ocnNode1);
+
+ // Create tp-map
+ Map<TerminationPointKey, TerminationPoint> tpMap = new HashMap<>();
+ TerminationPointBuilder ietfTpBldr;
+ for (Mapping m : mappings) {
+ if (!isOtn) {
+ ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
+ // Add openroadm-network-topology tp augmentations
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
+ ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+ .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+ if (m.getPortQual().equals("xpdr-network")) {
+ ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
+ org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 =
+ new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder()
+ .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build();
+ ietfTpBldr
+ .addAugmentation(ocnTp1Bldr.build())
+ .addAugmentation(tpceTp1);
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
+ } else if (m.getPortQual().equals("xpdr-client")) {
+ ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
+ org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 =
+ new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder()
+ .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build();
+ ietfTpBldr
+ .addAugmentation(ocnTp1Bldr.build())
+ .addAugmentation(tpceTp1);
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
+ }
+ } else {
+ if (m.getPortQual().equals("xpdr-network") || m.getPortQual().equals("switch-network")) {
+ ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
+ ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ .setTpType(OpenroadmTpType.XPONDERNETWORK)
+ .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+ .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+ ietfTpBldr
+ .addAugmentation(ocnTp1Bldr.build());
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
}
- // 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
- // 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());
- break;
- case 2:
- // 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;
+ // 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().setTerminationPoint(tpMap);
+ ietfNodeBldr.addAugmentation(ietfNode1.build());
+ return ietfNodeBldr;
}
- /*
- * 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<ConnectionPorts> getDegreePorts(String deviceId, Integer degreeCounter) {
- List<ConnectionPorts> degreeConPorts = new ArrayList<>();
- LOG.info("Getting Connection ports for Degree Number {}", degreeCounter);
- InstanceIdentifier<Degree> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Degree.class,
- new DegreeKey(degreeCounter));
-
- Optional<Degree> ordmDegreeObject = this.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();
+ private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli) {
+ // Create tp-list
+ Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
+ TerminationPointBuilder ietfTpBldr;
+ for (Mapping m : degListMap) {
+ ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
+ // Add openroadm-common-network tp type augmentations
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
+ ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .TerminationPoint1Builder()
+ .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+ .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+
+ // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states
+ switch (m.getPortDirection()) {
+ case "bidirectional":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP);
+ break;
+ case "tx":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP);
+ break;
+ case "rx":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP);
+ break;
+ default:
+ LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
+ }
+ ietfTpBldr.addAugmentation(ocnTp1Bldr.build());
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
}
- return degreeConPorts;
+ // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states
+ ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX");
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 ocnTp1 =
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ .setTpType(OpenroadmTpType.DEGREETXRXCTP)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build();
+ ietfTpBldr.addAugmentation(ocnTp1);
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
+ // set degree-attributes
+ DegreeAttributes degAtt = new DegreeAttributesBuilder()
+ .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1]))
+ .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available())
+ .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().setTerminationPoint(tpMap);
+ // set node-id
+ String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString();
+ Node1 ontNode1 = new Node1Builder().setDegreeAttributes(degAtt).build();
+ // Create openroadm-common-network augmentation to set node type to DEGREE
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 =
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.DEGREE)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build();
+ // Create ietf node setting supporting-node data
+ return createTopoLayerNode(nodeId, clli)
+ .setNodeId(new NodeId(nodeIdtopo))
+ .withKey((new NodeKey(new NodeId(nodeIdtopo))))
+ .addAugmentation(ontNode1)
+ .addAugmentation(ocnNode1)
+ .addAugmentation(ietfNode1.build());
}
- private int getMaxPp(String deviceId, Integer srgCounter) {
- int maxPpPorts;
- LOG.info("Getting max pp ports for Srg Number {}", srgCounter);
- InstanceIdentifier<SharedRiskGroup> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter));
- Optional<SharedRiskGroup> ordmSrgObject = this.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;
+ private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli) {
+ // Create tp-list
+ Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
+ TerminationPointBuilder ietfTpBldr;
+ for (Mapping m : srgListMap) {
+ ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
+ // Add openroadm-common-network tp type augmentations
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+ .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+ // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states
+ switch (m.getPortDirection()) {
+ case "bidirectional":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP);
+ break;
+ case "tx":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXPP);
+ break;
+ case "rx":
+ ocnTp1Bldr.setTpType(OpenroadmTpType.SRGRXPP);
+ break;
+ default:
+ LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
}
- } else {
- LOG.info("SRG absent");
- return -1;
+ ietfTpBldr.addAugmentation(ocnTp1Bldr.build());
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
}
- return maxPpPorts;
+ // Add CP to tp-list + added states. TODO: same comment as before with the relation between states
+ ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX");
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1
+ .http.org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ .setTpType(OpenroadmTpType.SRGTXRXCP)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build();
+ ietfTpBldr.addAugmentation(ocnTp1);
+ TerminationPoint ietfTp = ietfTpBldr.build();
+ tpMap.put(ietfTp.key(),ietfTp);
+ // Create openroadm-common-network augmentation to set node type to SRG
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 =
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.SRG)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build();
+ // set srg-attributes
+ SrgAttributes srgAttr = new SrgAttributesBuilder()
+ .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()).build();
+ Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).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().setTerminationPoint(tpMap);
+ // Create ietf node setting supporting-node data
+ String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString();
+ return createTopoLayerNode(nodeId, clli)
+ .setNodeId(new NodeId(nodeIdtopo))
+ .withKey((new NodeKey(new NodeId(nodeIdtopo))))
+ .addAugmentation(ontNode1)
+ .addAugmentation(ocnNode1)
+ .addAugmentation(ietfNode1.build());
}
- private NodeBuilder createTopoLayerNode(String nodeId) {
+ private static NodeBuilder createTopoLayerNode(String nodeId, String clli) {
// Sets the value of Network-ref and Node-ref as a part of the supporting node
// attribute
- SupportingNodeBuilder supportbldr = new SupportingNodeBuilder();
- supportbldr.withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId)));
- supportbldr.setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID));
- supportbldr.setNodeRef(new NodeId(nodeId));
- ArrayList<SupportingNode> supportlist = new ArrayList<>();
- supportlist.add(supportbldr.build());
- NodeBuilder nodebldr = new NodeBuilder();
- nodebldr.setSupportingNode(supportlist);
- return nodebldr;
+ SupportingNodeBuilder support1bldr = new SupportingNodeBuilder()
+ .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId)))
+ .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
+ .setNodeRef(new NodeId(nodeId));
+ SupportingNodeBuilder support2bldr = new SupportingNodeBuilder()
+ .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), new NodeId(clli)))
+ .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
+ .setNodeRef(new NodeId(clli));
+ Map<SupportingNodeKey, SupportingNode> supportlist = new HashMap<>();
+ SupportingNode support1 = support1bldr.build();
+ supportlist.put(support1.key(),support1);
+ SupportingNode support2 = support2bldr.build();
+ supportlist.put(support2.key(),support2);
+ return new NodeBuilder().setSupportingNode(supportlist);
}
- // 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<Ports> 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<Ports> portObject = this.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) {
- TerminationPointBuilder tpBldr = new TerminationPointBuilder();
+ private static TerminationPointBuilder createTpBldr(String tpId) {
TpId tp = new TpId(tpId);
- TerminationPointKey tpKey = new TerminationPointKey(tp);
- tpBldr.withKey(tpKey);
- tpBldr.setTpId(tp);
- return tpBldr;
+ return new TerminationPointBuilder().withKey(new TerminationPointKey(tp)).setTpId(tp);
}
- // This method returns the linkBuilder object for given source and destination.
- public LinkBuilder createLink(String srcNode, String dstNode, String srcTp, String destTp) {
- LOG.info("creating link for {}-{}", srcNode, dstNode);
- // Create Destination for link
- DestinationBuilder dstNodeBldr = new DestinationBuilder();
- dstNodeBldr.setDestTp(destTp);
- dstNodeBldr.setDestNode(new NodeId(dstNode));
- // Create Source for the link
- SourceBuilder srcNodeBldr = new SourceBuilder();
- srcNodeBldr.setSourceNode(new NodeId(srcNode));
- srcNodeBldr.setSourceTp(srcTp);
- LinkBuilder lnkBldr = new LinkBuilder();
- // set link builder attribute
- lnkBldr.setDestination(dstNodeBldr.build());
- lnkBldr.setSource(srcNodeBldr.build());
- lnkBldr.setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp));
- lnkBldr.withKey(new LinkKey(lnkBldr.getLinkId()));
- org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk1Bldr =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
- LinkId oppositeLinkId = LinkIdUtil.getOppositeLinkId(srcNode, srcTp, dstNode, destTp);
- lnk1Bldr.setOppositeLink(oppositeLinkId);
- lnkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1.class,
- lnk1Bldr.build());
- return lnkBldr;
+ private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) {
+ //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);
+ LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp);
+ return new LinkBuilder()
+ .setSource(ietfSrcLinkBldr.build())
+ .setDestination(ietfDestLinkBldr.build())
+ .setLinkId(linkId)
+ .withKey(new LinkKey(linkId));
}
- private List<Link> createExpressLinks(String nodeId, int numOfDegrees, int portDirectionEnum) {
- LOG.info("creating express links {} {} {}", nodeId, numOfDegrees, portDirectionEnum);
+ private static List<Link> createNewLinks(List<Node> nodes) {
List<Link> 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 = 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 = 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 = createLink(srcNode, destNode, srcTp, destTp);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(expLinkBldr.build());
-
- // ZtoA direction
- expLinkBldr = createLink(destNode, srcNode, destTp, srcTp);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(expLinkBldr.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).nonnullTerminationPoint().values().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)
+ .nonnullTerminationPoint().values().stream()
+ .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
+ .findFirst().get().getTpId().getValue();
+ Link1Builder ocnAzLinkBldr = new Link1Builder();
+ int srcNodeType = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.Node1.class).getNodeType().getIntValue();
+ int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.Node1.class).getNodeType().getIntValue();
+ if (srcNodeType == 11 && destNodeType == 11) {
+ ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
+ } else if (srcNodeType == 11 && destNodeType == 12) {
+ ocnAzLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK);
+ } else if (srcNodeType == 12 && destNodeType == 11) {
+ ocnAzLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK);
+ } else {
+ continue;
}
- }
- }
- return links;
- }
-
- private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) {
- LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum);
- List<Link> 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 = 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 = createLink(destNode, srcNode, destTp, srcTp);
- lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
-
+ // Z to A direction
+ Link1Builder ocnZaLinkBldr = new Link1Builder();
+ if (srcNodeType == 11 && destNodeType == 11) {
+ ocnZaLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
+ } else if (destNodeType == 11 && srcNodeType == 12) {
+ ocnZaLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK);
+ } else if (destNodeType == 12 && srcNodeType == 11) {
+ ocnZaLinkBldr.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 = 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 = createLink(destNode, srcNode, destTp, srcTp);
- lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
+ // Add state to link. Based on the operational state of the TPs at the edge of the link.
+ // Similar to getting srcTp and destTp
+ State srcTpState = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+ .ietf.network.topology.rev180226.Node1.class).getTerminationPoint().values().stream()
+ .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
+ .findFirst().get().augmentation(org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.TerminationPoint1.class).getOperationalState();
+ State destTpState = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+ .ietf.network.topology.rev180226.Node1.class).getTerminationPoint().values().stream()
+ .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
+ .findFirst().get().augmentation(org.opendaylight.yang.gen.v1.http
+ .org.openroadm.common.network.rev200529.TerminationPoint1.class).getOperationalState();
+ if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) {
+ ocnAzLinkBldr.setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService);
+ ocnZaLinkBldr.setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService);
+ } else {
+ ocnAzLinkBldr.setAdministrativeState(AdminStates.OutOfService)
+ .setOperationalState(State.OutOfService);
+ ocnZaLinkBldr.setAdministrativeState(AdminStates.OutOfService)
+ .setOperationalState(State.OutOfService);
}
+ // set opposite link augmentations
+ LinkBuilder ietfAzLinkBldr = createLink(srcNode, destNode, srcTp, destTp);
+ LinkBuilder ietfZaLinkBldr = createLink(destNode, srcNode, destTp, srcTp);
+ ocnAzLinkBldr.setOppositeLink(ietfZaLinkBldr.getLinkId());
+ ietfAzLinkBldr.addAugmentation(ocnAzLinkBldr.build());
+ ocnZaLinkBldr.setOppositeLink(ietfAzLinkBldr.getLinkId());
+ ietfZaLinkBldr.addAugmentation(ocnZaLinkBldr.build());
+ links.add(ietfAzLinkBldr.build());
+ links.add(ietfZaLinkBldr.build());
}
}
return links;
}
- // This method returns the linkBuilder object for given source and destination.
- public boolean deleteLink(String srcNode, String dstNode, Integer srcDegId,
- Integer destDegId ,String srcTp, String destTp) {
+ // This method returns the linkBuilder object for given source and destination
+ public static boolean deleteLink(String srcNode, String dstNode, String srcTp, String destTp,
+ NetworkTransactionService networkTransactionService) {
LOG.info("deleting link for {}-{}", srcNode, dstNode);
- try {
- LinkId linkId = LinkIdUtil.buildLinkId(srcNode + "-DEG" + srcDegId,
- srcTp, dstNode + "-DEG" + destDegId, destTp);
- LOG.info("Link is for the link is {}", linkId.getValue());
- InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
- WriteTransaction wrtx = this.dataBroker.newWriteOnlyTransaction();
- wrtx.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build());
- LOG.info("Deleted");
- wrtx.submit().get(1, TimeUnit.SECONDS);
- LOG.info("Submitted");
- } catch (InterruptedException | ExecutionException | TimeoutException e) {
- LOG.error(e.getMessage(), e);
+ LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
+ if (deleteLinkLinkId(linkId, networkTransactionService)) {
+ LOG.debug("Link Id {} updated to have admin state down", linkId);
+ return true;
+ } else {
+ LOG.debug("Link Id not found for Source {} and Dest {}", srcNode, dstNode);
return false;
}
- return true;
}
- private List<AvailableWavelengths> create96AvalWaveDegree() {
- List<AvailableWavelengths> waveList = new ArrayList<>();
+ // This method returns the linkBuilder object for given source and destination
+ public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) {
+ LOG.info("deleting link for LinkId: {}", linkId.getValue());
+ try {
+ InstanceIdentifierBuilder<Link> 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));
+ java.util.Optional<Link> link =
+ networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,linkIID.build()).get();
+ if (link.isPresent()) {
+ LinkBuilder linkBuilder = new LinkBuilder(link.get());
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Link1Builder link1Builder =
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Link1Builder(
+ linkBuilder.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529
+ .Link1.class));
+ linkBuilder.removeAugmentation(Link1.class)
+ .addAugmentation(link1Builder.build());
+ networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(),
+ linkBuilder.build());
+ networkTransactionService.commit().get(1, TimeUnit.SECONDS);
+ return true;
+ } else {
+ LOG.error("No link found for given LinkId: {}",
+ linkId);
+ return false;
+ }
- for (int i = 1; i < 97; i++) {
- AvailableWavelengthsBuilder avalBldr = new AvailableWavelengthsBuilder();
- avalBldr.setIndex((long) i);
- avalBldr.withKey(new AvailableWavelengthsKey((long) i));
- waveList.add(avalBldr.build());
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ LOG.error("Error deleting link {}", linkId.getValue(), e);
+ return false;
}
-
- return waveList;
}
- private List<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes.AvailableWavelengths>
- create96AvalWaveSrg() {
-
- List<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes.AvailableWavelengths>
- waveList = new ArrayList<>();
-
- for (int i = 1; i < 97; i++) {
- org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsBuilder avalBldr =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsBuilder();
- avalBldr.setIndex((long) i);
- avalBldr.withKey(
- new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsKey((long) i));
- waveList.add(avalBldr.build());
- }
-
- return waveList;
+ /**
+ * Get a builder for instance identifier related to common network termination point.
+ * @param nodeId String
+ * @param tpId String
+ * @return InstanceIdentifierBuilder
+ */
+ public static InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .TerminationPoint1> createCommonNetworkTerminationPointIIDBuilder(String nodeId, String tpId) {
+ return InstanceIdentifier
+ .builder(Networks.class).child(Network.class, new NetworkKey(
+ new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network
+ .Node.class, new NodeKey(new NodeId(nodeId)))
+ .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1.class)
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks
+ .network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId)))
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .TerminationPoint1.class);
}
- private class XponderPortNumber {
- private int numOfLinePorts;
- private int numOfClientPorts;
-
- XponderPortNumber() {
- numOfClientPorts = 0;
- numOfLinePorts = 0;
- }
-
- public void setNumOfLinePorts(int numOfLinePorts) {
- this.numOfLinePorts = numOfLinePorts;
- }
-
- public void setNumOfClientPorts(int numOfClientPorts) {
- this.numOfClientPorts = numOfClientPorts;
- }
+ /**
+ * Get a builder for instance identifier related to network termination point.
+ * @param nodeId String
+ * @param tpId String
+ * @return InstanceIdentifierBuilder
+ */
+ public static InstanceIdentifierBuilder<TerminationPoint1> createNetworkTerminationPointIIDBuilder(String nodeId,
+ String tpId) {
+ return InstanceIdentifier
+ .builder(Networks.class).child(Network.class, new NetworkKey(
+ new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network
+ .Node.class, new NodeKey(new NodeId(nodeId)))
+ .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1.class)
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks
+ .network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId)))
+ .augmentation(TerminationPoint1.class);
+ }
- public int getNumOfClientPorts() {
- return numOfClientPorts;
- }
+ /**
+ * Get an instance identifier related to network node.
+ * @param nodeId String
+ * @return InstanceIdentifier
+ */
+ public static InstanceIdentifier<Node1> createNetworkNodeIID(String nodeId) {
+ return InstanceIdentifier
+ .builder(Networks.class).child(Network.class, new NetworkKey(
+ new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network
+ .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(Node1.class).build();
+ }
- public int getNumOfLinePorts() {
- return numOfLinePorts;
- }
+ /**
+ * Get an instance identifier related to common network node.
+ * @param nodeId String
+ * @return InstanceIdentifier
+ */
+ public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
+ .Node1> createCommonNetworkNodeIID(String nodeId) {
+ return InstanceIdentifier
+ .builder(Networks.class).child(Network.class, new NetworkKey(
+ new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network
+ .Node.class, new NodeKey(new NodeId(nodeId)))
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1.class)
+ .build();
}
}