Adapt PCE to compute a 100GE path on OTN Switch 02/97802/6
authorGilles Thouenon <gilles.thouenon@orange.com>
Mon, 13 Sep 2021 11:05:32 +0000 (13:05 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Thu, 18 Nov 2021 07:42:01 +0000 (07:42 +0000)
Fixes some issues in PCE when an OTN switch is used as an intermediate
switch.

JIRA: TRNSPRTPCE-499
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Ica1468195c0e193d80dc38bd8f5dadebae0d8769

pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java

index d0ae6968174cff6cc9470393fecd90b896e43d1d..e483796f180310aa595ae03b7dcab8b0a0d7e4d9 100644 (file)
@@ -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"));
                 }
index a42b013541aa58ed437d37a2779cab4373e213c9..479fb5bd7de5442ebc4933d81f7f49006552cb64 100644 (file)
@@ -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:
index 597be613e062fa6443e870a2459ec7bed6eabd78..f01e14c46af53d945e5e96cc5e1e13334563e0f4 100644 (file)
@@ -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);
index 9f7d85fde1ba39aa2dd19f37a1470d49874b858f..db41be4b8b001a27ac5b55858a3e42e6225cf200 100644 (file)
@@ -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<NonBlockingList> nblList = new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()