Introduce the 100GE_S service type in PCE 98/97798/4
authorGilles Thouenon <gilles.thouenon@orange.com>
Tue, 7 Sep 2021 12:24:47 +0000 (14:24 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Tue, 16 Nov 2021 17:36:19 +0000 (18:36 +0100)
This service-type allows path computation for a 100GE service terminated
on a 100G OTN switch.

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

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/PceLink.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java

index 3e6f154d77b729f27191353948298a030d9ff1cf..d0ae6968174cff6cc9470393fecd90b896e43d1d 100644 (file)
@@ -101,6 +101,7 @@ public class PcePathDescription {
                 atoZDirectionBldr.setAToZWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()));
                 break;
             case StringConstants.SERVICE_TYPE_100GE_M:
+            case StringConstants.SERVICE_TYPE_100GE_S:
             case StringConstants.SERVICE_TYPE_10GE:
             case StringConstants.SERVICE_TYPE_1GE:
             case StringConstants.SERVICE_TYPE_ODU4:
@@ -142,6 +143,7 @@ public class PcePathDescription {
                 ztoADirectionBldr.setZToAWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()));
                 break;
             case StringConstants.SERVICE_TYPE_100GE_M:
+            case StringConstants.SERVICE_TYPE_100GE_S:
             case StringConstants.SERVICE_TYPE_10GE:
             case StringConstants.SERVICE_TYPE_1GE:
             case StringConstants.SERVICE_TYPE_ODU4:
index 904f700fd271f40e4dac806fe4c4b1ed177bab68..a42b013541aa58ed437d37a2779cab4373e213c9 100644 (file)
@@ -140,6 +140,7 @@ public class PostAlgoPathValidator {
                 break;
             case StringConstants.SERVICE_TYPE_ODU4:
             case StringConstants.SERVICE_TYPE_ODUC4:
+            case StringConstants.SERVICE_TYPE_100GE_S:
                 pceResult.setRC(ResponseCodes.RESPONSE_OK);
                 LOG.info("In PostAlgoPathValidator: ODU4/ODUC4 path found {}", path);
                 break;
index 19774901d5f1bb78cbb7f769b2f834a2e813aeec..597be613e062fa6443e870a2459ec7bed6eabd78 100644 (file)
@@ -160,6 +160,7 @@ public class PceCalculation {
             case StringConstants.SERVICE_TYPE_ODU4:
             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();
@@ -184,6 +185,7 @@ public class PceCalculation {
                     .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).build();
                 break;
             case StringConstants.SERVICE_TYPE_100GE_M:
+            case StringConstants.SERVICE_TYPE_100GE_S:
             case StringConstants.SERVICE_TYPE_ODU4:
             case StringConstants.SERVICE_TYPE_ODUC4:
             case StringConstants.SERVICE_TYPE_10GE:
@@ -390,6 +392,7 @@ public class PceCalculation {
             case StringConstants.SERVICE_TYPE_ODU4:
             case StringConstants.SERVICE_TYPE_10GE:
             case StringConstants.SERVICE_TYPE_100GE_M:
+            case StringConstants.SERVICE_TYPE_100GE_S:
             case StringConstants.SERVICE_TYPE_ODUC4:
             case StringConstants.SERVICE_TYPE_1GE:
                 return processPceOtnLink(link, source, dest);
index 028849f3f48e4b91a011ffe2a5117b318c668c0f..92f496ada36785f5ede843a05bf5e7a529b2e9b9 100644 (file)
@@ -335,6 +335,7 @@ public class PceLink implements Serializable {
                 neededType = OtnLinkType.OTUC4;
                 break;
             case "ODU4":
+            case "100GEs":
                 if (this.usedBandwidth != 0L) {
                     return false;
                 }
index 7b9b5cb8cdfaf43ea4147d284a4c165e8e09bb08..9f7d85fde1ba39aa2dd19f37a1470d49874b858f 100644 (file)
@@ -136,6 +136,8 @@ public class PceOtnNode implements PceNode {
                     continue;
                 }
                 switch (this.otnServiceType) {
+                    case StringConstants.SERVICE_TYPE_100GE_S:
+                        // TODO verify the capability of network port to support ODU4 CTP interface creation
                     case StringConstants.SERVICE_TYPE_ODU4:
                     case StringConstants.SERVICE_TYPE_ODUC4:
                         if (!checkTpForOdtuTermination(ontTp1)) {
@@ -177,6 +179,7 @@ public class PceOtnNode implements PceNode {
             } else if (OpenroadmTpType.XPONDERCLIENT.equals(ocnTp1.getTpType())
                 && (StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
                     || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
+                    || StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
                     || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))) {
                 TerminationPoint1 ontTp1;
                 if (tp.augmentation(TerminationPoint1.class) != null) {
@@ -201,7 +204,10 @@ public class PceOtnNode implements PceNode {
                     || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))
                 && ((mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1))
                      || (mode.equals("intermediate") && checkSwPool(null, availableXpdrNWTps, 0, 2)))
-               )) {
+               )
+            || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
+                && (mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1)))
+            ) {
             this.valid = true;
         } else {
             this.valid = false;
@@ -264,7 +270,7 @@ public class PceOtnNode implements PceNode {
     }
 
     private boolean checkOdtuTTPforLoOduCreation(TerminationPoint1 ontTp1, int tsNb) {
-        if (ontTp1.getXpdrTpPortConnectionAttributes() != null
+        return (ontTp1.getXpdrTpPortConnectionAttributes() != null
             && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() != null
             && ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null
             && (ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values()
@@ -276,10 +282,7 @@ public class PceOtnNode implements PceNode {
                 .equals(ODTUCnTs.class))
             && !ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values()
                 .stream().findFirst().get().getTpnPool().isEmpty()
-            && (ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb)) {
-            return true;
-        }
-        return false;
+            && (ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb));
     }
 
     private boolean checkClientTp(TerminationPoint1 ontTp1) {
@@ -300,6 +303,7 @@ public class PceOtnNode implements PceNode {
                     break;
                 case StringConstants.SERVICE_TYPE_100GE_T:
                 case StringConstants.SERVICE_TYPE_100GE_M:
+                case StringConstants.SERVICE_TYPE_100GE_S:
                     if (sic.getIfCapType().equals(If100GEODU4.class)) {
                         return true;
                     }
@@ -315,11 +319,10 @@ public class PceOtnNode implements PceNode {
         if (!isValid()) {
             return;
         }
-        if (OpenroadmNodeType.SWITCH.equals(this.nodeType)) {
-            initXndrTps("intermediate");
-        }
         if (this.nodeId.getValue().equals(anodeId) || (this.nodeId.getValue().equals(znodeId))) {
             initXndrTps("AZ");
+        } else if (OpenroadmNodeType.SWITCH.equals(this.nodeType)) {
+            initXndrTps("intermediate");
         } else {
             LOG.info("validateAZxponder: XPONDER is ignored == {}", nodeId.getValue());
             valid = false;
@@ -460,13 +463,10 @@ public class PceOtnNode implements PceNode {
             return true;
         }
 
-        if ((pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_10GE)
-                || pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_1GE))
-                && (isAz(pceOtnNode) || isIntermediate(pceOtnNode))) {
-            return true;
-        }
-
-        return false;
+        return ((pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_10GE)
+                || pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_1GE)
+                || pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_100GE_S))
+                && (isAz(pceOtnNode) || isIntermediate(pceOtnNode)));
     }
 
     private boolean isIntermediate(PceOtnNode pceOtnNode) {