From: Gilles Thouenon Date: Mon, 13 Sep 2021 11:05:32 +0000 (+0200) Subject: Adapt PCE to compute a 100GE path on OTN Switch X-Git-Tag: 5.0.0~176 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=306721cf8ac13f8226e83e3ad4b0f29f38218313;ds=sidebyside Adapt PCE to compute a 100GE path on OTN Switch Fixes some issues in PCE when an OTN switch is used as an intermediate switch. JIRA: TRNSPRTPCE-499 Signed-off-by: Gilles Thouenon Change-Id: Ica1468195c0e193d80dc38bd8f5dadebae0d8769 --- diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java index d0ae69681..e483796f1 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java @@ -106,18 +106,19 @@ public class PcePathDescription { case StringConstants.SERVICE_TYPE_1GE: case StringConstants.SERVICE_TYPE_ODU4: case StringConstants.SERVICE_TYPE_ODUC4: - if (rc.getResultTribPortTribSlot().get(0) != null && rc.getResultTribPortTribSlot().get(1) != null) { + if (rc.getResultTribPortTribSlot() != null && rc.getResultTribPortTribSlot().get(0) != null + && rc.getResultTribPortTribSlot().get(1) != null) { atoZDirectionBldr.setAToZWavelengthNumber(Uint32.valueOf(0)) .setMinTribSlot(rc.getResultTribPortTribSlot().get(0)) .setMaxTribSlot(rc.getResultTribPortTribSlot().get(1)); } else { - LOG.error("Trib port and trib slot number should be present"); + LOG.warn("Trib port and trib slot number should be present"); atoZDirectionBldr.setMinTribSlot(new OpucnTribSlotDef("0.0")) .setMaxTribSlot(new OpucnTribSlotDef("0.0")); } break; default: - LOG.warn("unknown service type : unable to set Min/Max frequencies"); + LOG.warn("unknown service type : unable to set Min/Max frequencies or trib-port/trib-slot"); break; } return atoZDirectionBldr; @@ -147,12 +148,13 @@ public class PcePathDescription { case StringConstants.SERVICE_TYPE_10GE: case StringConstants.SERVICE_TYPE_1GE: case StringConstants.SERVICE_TYPE_ODU4: - if (rc.getResultTribPortTribSlot().get(0) != null && rc.getResultTribPortTribSlot().get(1) != null) { + if (rc.getResultTribPortTribSlot() != null && rc.getResultTribPortTribSlot().get(0) != null + && rc.getResultTribPortTribSlot().get(1) != null) { ztoADirectionBldr.setZToAWavelengthNumber(Uint32.valueOf(0)) .setMinTribSlot(rc.getResultTribPortTribSlot().get(0)) .setMaxTribSlot(rc.getResultTribPortTribSlot().get(1)); } else { - LOG.error("Trib port and trib slot number should be present"); + LOG.warn("Trib port and trib slot number should be present"); ztoADirectionBldr.setMinTribSlot(new OpucnTribSlotDef("0.0")) .setMaxTribSlot(new OpucnTribSlotDef("0.0")); } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java index a42b01354..479fb5bd7 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java @@ -142,6 +142,7 @@ public class PostAlgoPathValidator { case StringConstants.SERVICE_TYPE_ODUC4: case StringConstants.SERVICE_TYPE_100GE_S: pceResult.setRC(ResponseCodes.RESPONSE_OK); + pceResult.setServiceType(serviceType); LOG.info("In PostAlgoPathValidator: ODU4/ODUC4 path found {}", path); break; default: diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index 597be613e..f01e14c46 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -660,10 +660,12 @@ public class PceCalculation { switch (pceOtnLink.getlinkType()) { case OTNLINK: + if (source.getXpdrClient(pceOtnLink.getSourceTP().getValue()) != null) { + pceOtnLink.setClient(source.getXpdrClient(pceOtnLink.getSourceTP().getValue())); + } if (dest.getXpdrClient(pceOtnLink.getDestTP().getValue()) != null) { pceOtnLink.setClient(dest.getXpdrClient(pceOtnLink.getDestTP().getValue())); } - allPceLinks.put(linkId, pceOtnLink); source.addOutgoingLink(pceOtnLink); LOG.info("validateLink: OTN-LINK added to allPceLinks {}", pceOtnLink); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java index 9f7d85fde..db41be4b8 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java @@ -207,6 +207,8 @@ public class PceOtnNode implements PceNode { ) || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType) && (mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1))) + || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType) + && (mode.equals("intermediate") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 0, 2))) ) { this.valid = true; } else { @@ -237,7 +239,7 @@ public class PceOtnNode implements PceNode { } } - if (clientTps == null && netwTps != null && nbClient == 0 && nbNetw == 2) { + if (netwTps != null && nbClient == 0 && nbNetw == 2) { netwTps.sort(Comparator.comparing(TpId::getValue)); @Nullable List nblList = new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()