package org.opendaylight.transportpce.pce.networkanalyzer;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.common.NetworkUtils;
import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.common.StringConstants;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
import org.opendaylight.transportpce.common.mapping.MappingUtils;
import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.McCapabilities;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1;
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.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.networks.network.Link;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-//import org.opendaylight.yangtools.yang.common.Decimal64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
switch (serviceFormatA) {
case "Ethernet":
case "OC":
- serviceType = "100GE";
+ serviceType = StringConstants.SERVICE_TYPE_100GE;
break;
case "OTU":
- serviceType = "OTU4";
+ serviceType = StringConstants.SERVICE_TYPE_OTU4;
break;
case "ODU":
- serviceType = "ODU4";
+ serviceType = StringConstants.SERVICE_TYPE_ODU4;
break;
default:
LOG.debug("parseInput: unsupported service type: Format {} Rate 100L", serviceFormatA);
} else if ("Ethernet".equals(serviceFormatA)) {
//only rate 100L is currently supported except in Ethernet
if (serviceRate == 10L) {
- serviceType = "10GE";
+ serviceType = StringConstants.SERVICE_TYPE_10GE;
} else if (serviceRate == 1L) {
- serviceType = "1GE";
+ serviceType = StringConstants.SERVICE_TYPE_1GE;
} else {
LOG.debug("parseInput: unsupported service type: Format Ethernet Rate {}", serviceRate);
}
LOG.debug("parseInput: unsupported service type: Format {} Rate {}",
serviceFormatA, serviceRate);
}
- if ("ODU4".equals(serviceType) || "10GE".equals(serviceType) || "1GE".equals(serviceType)) {
+ if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)
+ || StringConstants.SERVICE_TYPE_10GE.equals(serviceType)
+ || StringConstants.SERVICE_TYPE_1GE.equals(serviceType)) {
anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName();
znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName();
} else {
LOG.debug("analyzeNw: allNodes size {}, allLinks size {}", allNodes.size(), allLinks.size());
- if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) {
+ if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType))
+ || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) {
// 100GE service and OTU4 service are handled at the openroadm-topology layer
for (Node node : allNodes) {
validateNode(node);
return false;
}
- if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) {
+ if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType))
+ || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) {
// 100GE or OTU4 services are handled at WDM Layer
PceLink pcelink = new PceLink(link, source, dest);
if (!pcelink.isValid()) {
}
return true;
- } else if (("ODU4".equals(serviceType)) || ("10GE".equals(serviceType)) || ("1GE".equals(serviceType))) {
+ } else if ((StringConstants.SERVICE_TYPE_ODU4.equals(serviceType))
+ || (StringConstants.SERVICE_TYPE_10GE.equals(serviceType))
+ || (StringConstants.SERVICE_TYPE_1GE.equals(serviceType))) {
// ODU4, 1GE and 10GE services relying on ODU2, ODU2e or ODU0 services are handled at OTN layer
PceLink pceOtnLink = new PceLink(link, source, dest);
deviceNodeId = node.getNodeId().getValue();
}
LOG.info("Device node id {} for {}", deviceNodeId, node);
- PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, mappingUtils.getOpenRoadmVersion(deviceNodeId));
+ PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, mappingUtils.getOpenRoadmVersion(deviceNodeId),
+ getSlotWidthGranularity(deviceNodeId, node.getNodeId()));
pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
- pceNode.initWLlist();
+ pceNode.initFrequenciesBitSet();
if (!pceNode.isValid()) {
LOG.warn(" validateNode: Node is ignored");
LOG.error("ValidateOtnNode: no node-type augmentation. Node {} is ignored", node.getNodeId().getValue());
return false;
}
-
-// if (mode == "AZ") {
-// pceOtnNode.validateAZxponder(anodeId, znodeId);
-// } else if (mode == "intermediate") {
-// pceOtnNode.validateIntermediateSwitch();
-// } else {
-// LOG.error("validateOtnNode: unproper mode passed to the method : {} not supported", mode);
-// return null;
-// }
}
private ConstraintTypes validateNodeConstraints(PceNode pcenode) {
}
if (!pceNode.isValid()) {
- LOG.error("validateNode : there are no availaible wavelengths in node {}", pceNode.getNodeId().getValue());
+ LOG.error("validateNode : there are no available frequencies in node {}", pceNode.getNodeId().getValue());
return false;
}
return true;
pceNode.getOutgoingLinks());
}));
}
+
+ /**
+ * Get mc capability slot width granularity for device.
+ * @param deviceNodeId String
+ * @param nodeId NodeId
+ * @return slot width granularity
+ */
+ private BigDecimal getSlotWidthGranularity(String deviceNodeId, NodeId nodeId) {
+ // nodeId: openroadm-topology level node
+ // deviceNodeId: openroadm-network level node
+ List<McCapabilities> mcCapabilities = mappingUtils.getMcCapabilitiesForNode(deviceNodeId);
+ String[] params = nodeId.getValue().split("-");
+ // DEGX or SRGX
+ String rdmModuleName = params[params.length - 1];
+ for (McCapabilities mcCapabitility : mcCapabilities) {
+ if (mcCapabitility.getMcNodeName().contains(rdmModuleName)
+ && mcCapabitility.getSlotWidthGranularity() != null) {
+ return mcCapabitility.getSlotWidthGranularity().getValue();
+ }
+ }
+ return GridConstant.SLOT_WIDTH_50;
+ }
}