import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
import org.opendaylight.transportpce.common.mapping.PortMapping;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.pce.PceComplianceCheck;
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.pce.rev210701.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mc.capabilities.McCapabilities;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1;
}
private boolean parseInput() {
- if (input.getServiceAEnd().getServiceFormat() == null || input.getServiceZEnd().getServiceFormat() == null
- || input.getServiceAEnd().getServiceRate() == null) {
+ if (!PceComplianceCheck.checkString(input.getServiceAEnd().getServiceFormat().getName())
+ || !PceComplianceCheck.checkString(input.getServiceZEnd().getServiceFormat().getName())
+ || !PceComplianceCheck.checkString(input.getServiceAEnd().getServiceRate().toString())) {
LOG.error("Service Format and Service Rate are required for a path calculation");
return false;
}
LOG.info("parseInput: A and Z :[{}] and [{}]", anodeId, znodeId);
setServiceType();
+ getAZnodeId();
+
+ returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava());
+ returnStructure.setServiceFormat(input.getServiceAEnd().getServiceFormat());
+ return true;
+ }
+
+ private void getAZnodeId() {
if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)
|| StringConstants.SERVICE_TYPE_ODUC4.equals(serviceType)
|| StringConstants.SERVICE_TYPE_100GE_M.equals(serviceType)
anodeId = input.getServiceAEnd().getNodeId();
znodeId = input.getServiceZEnd().getNodeId();
}
-
- returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava());
- returnStructure.setServiceFormat(input.getServiceAEnd().getServiceFormat());
- return true;
}
private void setServiceType() {
LOG.info("Device node id {} for {}", deviceNodeId, node);
PceOpticalNode pceNode = new PceOpticalNode(deviceNodeId, this.serviceType, portMapping, node, nodeType,
- mappingUtils.getOpenRoadmVersion(deviceNodeId), getSlotWidthGranularity(deviceNodeId, node.getNodeId()));
+ mappingUtils.getOpenRoadmVersion(deviceNodeId), getSlotWidthGranularity(deviceNodeId, node.getNodeId()),
+ getCentralFreqGranularity(deviceNodeId, node.getNodeId()));
pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
pceNode.initFrequenciesBitSet();
// 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];
+ // DEGx or SRGx or XPDRx
+ String moduleName = params[params.length - 1];
for (McCapabilities mcCapabitility : mcCapabilities) {
- if (mcCapabitility.getMcNodeName().contains(rdmModuleName)
+ if (mcCapabitility.getMcNodeName().contains("XPDR")
+ && mcCapabitility.getSlotWidthGranularity() != null) {
+ return mcCapabitility.getSlotWidthGranularity().getValue();
+ }
+ if (mcCapabitility.getMcNodeName().contains(moduleName)
&& mcCapabitility.getSlotWidthGranularity() != null) {
return mcCapabitility.getSlotWidthGranularity().getValue();
}
}
return GridConstant.SLOT_WIDTH_50;
}
+
+ /**
+ * Get mc capability central-width granularity for device.
+ * @param deviceNodeId String
+ * @param nodeId NodeId
+ * @return center-freq granularity
+ */
+ private BigDecimal getCentralFreqGranularity(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 or XPDRx
+ String moduleName = params[params.length - 1];
+ for (McCapabilities mcCapabitility : mcCapabilities) {
+ if (mcCapabitility.getMcNodeName().contains("XPDR")
+ && mcCapabitility.getCenterFreqGranularity() != null) {
+ return mcCapabitility.getCenterFreqGranularity().getValue();
+ }
+ if (mcCapabitility.getMcNodeName().contains(moduleName)
+ && mcCapabitility.getCenterFreqGranularity() != null) {
+ return mcCapabitility.getCenterFreqGranularity().getValue();
+ }
+ }
+ return GridConstant.SLOT_WIDTH_50;
+ }
}