package org.opendaylight.transportpce.pce.networkanalyzer;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import org.opendaylight.transportpce.common.service.ServiceTypes;
import org.opendaylight.transportpce.pce.PceComplianceCheck;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev210701.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mc.capabilities.McCapabilities;
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.Node1;
serviceFormatA = input.getServiceAEnd().getServiceFormat().getName();
serviceFormatZ = input.getServiceZEnd().getServiceFormat().getName();
serviceRate = input.getServiceAEnd().getServiceRate();
- serviceType = ServiceTypes.getServiceType(serviceFormatA, serviceRate,
- (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()).getNodeInfo().getNodeType())
- && input.getServiceAEnd().getTxDirection() != null
- && input.getServiceAEnd().getTxDirection().getPort() != null
- && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null)
- ? portMapping.getMapping(input.getServiceAEnd().getNodeId(),
+ serviceType = ServiceTypes.getServiceType(
+ serviceFormatA,
+ serviceRate,
+ NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()).getNodeInfo().getNodeType())
+ && checkAendInputTxPortName()
+ ? portMapping.getMapping(
+ input.getServiceAEnd().getNodeId(),
input.getServiceAEnd().getTxDirection().getPort().getPortName())
: null);
return true;
}
+ private boolean checkAendInputTxPortName() {
+ return checkAendInputTxPort()
+ && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null;
+ }
+
+ private boolean checkAendInputTxPortDeviceName() {
+ return checkAendInputTxPort()
+ && input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName() != null;
+ }
+
+ private boolean checkAendInputTxPort() {
+ return input.getServiceAEnd() != null
+ && input.getServiceAEnd().getTxDirection() != null
+ && input.getServiceAEnd().getTxDirection().getPort() != null;
+ }
+
+ private boolean checkZendInputTxPortDeviceName() {
+ return input.getServiceZEnd() != null
+ && input.getServiceZEnd().getTxDirection() != null
+ && input.getServiceZEnd().getTxDirection().getPort() != null
+ && input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName() != null;
+ }
+
private void getAZnodeId() {
- switch (serviceType) {
- case StringConstants.SERVICE_TYPE_ODU4:
- case StringConstants.SERVICE_TYPE_ODUC2:
- case StringConstants.SERVICE_TYPE_ODUC3:
- case StringConstants.SERVICE_TYPE_ODUC4:
- case StringConstants.SERVICE_TYPE_100GE_M:
- case StringConstants.SERVICE_TYPE_100GE_S:
- case StringConstants.SERVICE_TYPE_10GE:
- case StringConstants.SERVICE_TYPE_1GE:
- anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName();
- znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName();
- break;
- default:
- anodeId = input.getServiceAEnd().getNodeId();
- znodeId = input.getServiceZEnd().getNodeId();
- break;
- }
+ anodeId =
+ checkAendInputTxPortDeviceName()
+ ? input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName()
+ : input.getServiceAEnd().getNodeId();
+ znodeId =
+ checkZendInputTxPortDeviceName()
+ ? input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName()
+ : input.getServiceZEnd().getNodeId();
}
private boolean readMdSal() {
}
private void validateNode(Node node) {
- LOG.debug("validateNode: node {} ", node);
+ LOG.info("validateNode: node {} ", node);
// PceNode will be used in Graph algorithm
Node1 node1 = node.augmentation(Node1.class);
if (node1 == null) {
if (validateNodeConstraints(pceNode).equals(ConstraintTypes.HARD_EXCLUDE)) {
return;
}
- if (endPceNode(nodeType, pceNode.getNodeId(), pceNode) && this.aendPceNode == null
- && isAZendPceNode(this.serviceFormatA, pceNode, anodeId, "A")) {
- this.aendPceNode = pceNode;
- }
- if (endPceNode(nodeType, pceNode.getNodeId(), pceNode) && this.zendPceNode == null
- && isAZendPceNode(this.serviceFormatZ, pceNode, znodeId, "Z")) {
- this.zendPceNode = pceNode;
+
+ if (endPceNode(nodeType, pceNode.getNodeId(), pceNode)) {
+ if (this.aendPceNode == null && isAZendPceNode(this.serviceFormatA, pceNode, anodeId, "A")) {
+ // Added to ensure A-node has a addlink in the topology
+ List<Link> links = this.allLinks.stream()
+ .filter(x -> x.getSource().getSourceNode().getValue().contains(pceNode.getNodeId().getValue()))
+ .collect(Collectors.toList());
+ if (links.size() > 0) {
+ this.aendPceNode = pceNode;
+ }
+ }
+ if (this.zendPceNode == null && isAZendPceNode(this.serviceFormatZ, pceNode, znodeId, "Z")) {
+ // Added to ensure Z-node has a droplink in the topology
+ List<Link> links = this.allLinks.stream()
+ .filter(x -> x.getDestination().getDestNode().getValue().contains(pceNode.getNodeId().getValue()))
+ .collect(Collectors.toList());
+ if (links.size() > 0) {
+ this.zendPceNode = pceNode;
+ }
+ }
}
allPceNodes.put(pceNode.getNodeId(), pceNode);
return;
}
+ @SuppressWarnings("fallthrough")
+ @SuppressFBWarnings(
+ value = "SF_SWITCH_FALLTHROUGH",
+ justification = "intentional fallthrough")
private boolean isAZendPceNode(String serviceFormat, PceOpticalNode pceNode, String azNodeId, String azEndPoint) {
switch (serviceFormat) {
case "Ethernet":
if (pceNode.getSupNetworkNodeId().equals(azNodeId)) {
return true;
}
- return false;
+ //fallthrough
case "OTU":
- if ("A".equals(azEndPoint) && pceNode.getNodeId().getValue()
- .equals(this.input.getServiceAEnd().getRxDirection().getPort().getPortDeviceName())) {
- return true;
+ switch (azEndPoint) {
+ case "A":
+ return checkAendInputTxPortDeviceName()
+ && pceNode.getNodeId().getValue()
+ .equals(this.input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName());
+ case "Z":
+ return checkZendInputTxPortDeviceName()
+ && pceNode.getNodeId().getValue()
+ .equals(this.input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName());
+ default:
+ return false;
}
- if ("Z".equals(azEndPoint) && pceNode.getNodeId().getValue()
- .equals(this.input.getServiceZEnd().getRxDirection().getPort().getPortDeviceName())) {
- return true;
- }
- return false;
default:
LOG.debug("Unsupported service Format {} for node {}", serviceFormat, pceNode.getNodeId().getValue());
return false;
}
OpenroadmNodeType nodeType = node.augmentation(Node1.class).getNodeType();
-
- PceOtnNode pceOtnNode = new PceOtnNode(node, nodeType, node.getNodeId(), "otn", serviceType);
+ String clientPort = null;
+ if (node.getNodeId().getValue().equals(anodeId)
+ && this.aendPceNode == null
+ && input.getServiceAEnd() != null
+ && input.getServiceAEnd().getRxDirection() != null
+ && input.getServiceAEnd().getRxDirection().getPort() != null
+ && input.getServiceAEnd().getRxDirection().getPort().getPortName() != null) {
+ clientPort = input.getServiceAEnd().getRxDirection().getPort().getPortName();
+ } else if (node.getNodeId().getValue().equals(znodeId)
+ && this.zendPceNode == null
+ && input.getServiceZEnd() != null
+ && input.getServiceZEnd().getRxDirection() != null
+ && input.getServiceZEnd().getRxDirection().getPort() != null
+ && input.getServiceZEnd().getRxDirection().getPort().getPortName() != null) {
+ clientPort = input.getServiceZEnd().getRxDirection().getPort().getPortName();
+ }
+
+ PceOtnNode pceOtnNode = new PceOtnNode(node, nodeType, node.getNodeId(), "otn", serviceType, clientPort);
pceOtnNode.validateXponder(anodeId, znodeId);
if (!pceOtnNode.isValid()) {
String moduleName = params[params.length - 1];
for (McCapabilities mcCapabitility : mcCapabilities) {
if (mcCapabitility.getMcNodeName().contains("XPDR")
- && mcCapabitility.getSlotWidthGranularity() != null) {
+ && mcCapabitility.getSlotWidthGranularity() != null) {
return mcCapabitility.getSlotWidthGranularity().getValue();
}
if (mcCapabitility.getMcNodeName().contains(moduleName)
String moduleName = params[params.length - 1];
for (McCapabilities mcCapabitility : mcCapabilities) {
if (mcCapabitility.getMcNodeName().contains("XPDR")
- && mcCapabitility.getCenterFreqGranularity() != null) {
+ && mcCapabitility.getCenterFreqGranularity() != null) {
return mcCapabitility.getCenterFreqGranularity().getValue();
}
if (mcCapabitility.getMcNodeName().contains(moduleName)
- && mcCapabitility.getCenterFreqGranularity() != null) {
+ && mcCapabitility.getCenterFreqGranularity() != null) {
return mcCapabitility.getCenterFreqGranularity().getValue();
}
}