Fix for ADVA ols with TAPI
Change-Id: I91d0002dc67697d394f6a97ed7f97089054f4837
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/tapi/TapiDeviceHelper.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/tapi/TapiDeviceHelper.java
index d4e9c06..dee318c 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/tapi/TapiDeviceHelper.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/tapi/TapiDeviceHelper.java
@@ -17,17 +17,31 @@
*/
package org.onosproject.drivers.odtn.tapi;
+import com.fasterxml.jackson.databind.JsonNode;
import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.slf4j.Logger;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.stream.IntStream;
+
+import static org.slf4j.LoggerFactory.getLogger;
/**
* Tapi 2.1 OLS device related helpers.
*/
public final class TapiDeviceHelper {
+ private static final Logger log = getLogger(TapiDeviceHelper.class);
+
public static final String SERVICE_INTERFACE_POINT = "service-interface-point";
+ public static final String CONTEXT = "tapi-common:context";
public static final String UUID = "uuid";
public static final String MEDIA_CHANNEL_SERVICE_INTERFACE_POINT_SPEC =
- "media-channel-service-interface-point-spec";
+ "tapi-photonic-media:media-channel-service-interface-point-spec";
public static final String MC_POOL = "mc-pool";
public static final String LAYER_PROTOCOL_NAME = "layer-protocol-name";
public static final String PHOTONIC_MEDIA = "PHOTONIC_MEDIA";
@@ -38,7 +52,6 @@
public static final String ADJUSTMENT_GRANULARITY = "adjustment-granularity";
public static final String UPPER_FREQUENCY = "upper-frequency";
public static final String LOWER_FREQUENCY = "lower-frequency";
- public static final String AVAILABLE_SPECTRUM = "available-spectrum";
public static final long BASE_FREQUENCY = 193100000; //Working in Mhz
public static final String TAPI_CONNECTIVITY_CONNECTIVITY_SERVICE = "tapi-connectivity:connectivity-service";
public static final String END_POINT = "end-point";
@@ -50,6 +63,8 @@
public static final String TAPI_PHOTONIC_MEDIA_PHOTONIC_LAYER_QUALIFIER_NMC =
"tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC";
public static final String SERVICE_INTERFACE_POINT_UUID = "service-interface-point-uuid";
+ public static final String AVAILABLE_SPECTRUM = "available-spectrum";
+ protected static final String SUPPORTABLE_SPECTRUM = "supportable-spectrum";
private TapiDeviceHelper(){}
@@ -105,4 +120,57 @@
public static long toMbpsFromHz(long speed) {
return speed / 1000000;
}
+
+ /**
+ * If SIP info match our criteria, SIP component shall includes mc-pool information which must be obtained in order
+ * to complete the OchSignal info. with the TAPI SIP information included in spectrum-supported, spectrum-available
+ * and spectrum-occupied tapi objects.
+ *
+ * @param mcPool the MC_POOL json node
+ * @return the set of OCH signals given the port's information
+ **/
+ protected static Set<OchSignal> getOchSignal(JsonNode mcPool) {
+
+ Set<OchSignal> lambdas = new LinkedHashSet<>();
+ long availableUpperFrec = 0;
+ long availableLowerFrec = 0;
+ String availableAdjustmentGranularity = "";
+ String availableGridType = "";
+ JsonNode availableSpectrum = mcPool.get(AVAILABLE_SPECTRUM);
+
+ if (availableSpectrum == null) {
+ availableSpectrum = mcPool.get(SUPPORTABLE_SPECTRUM);
+ }
+
+ Iterator<JsonNode> iterAvailable = availableSpectrum.iterator();
+ while (iterAvailable.hasNext()) {
+ JsonNode availableSpec = iterAvailable.next();
+ availableUpperFrec = availableSpec.get(UPPER_FREQUENCY).asLong();
+ availableLowerFrec = availableSpec.get(LOWER_FREQUENCY).asLong();
+ log.info("availableUpperFrec {}, availableLowerFrec {}", availableUpperFrec,
+ availableLowerFrec);
+ availableAdjustmentGranularity = availableSpec.get(FREQUENCY_CONSTRAINT)
+ .get(ADJUSTMENT_GRANULARITY).textValue();
+ availableGridType = availableSpec.get(FREQUENCY_CONSTRAINT).get(GRID_TYPE).textValue();
+
+ int slotGranularity;
+ ChannelSpacing chSpacing = getChannelSpacing(availableAdjustmentGranularity);
+ double spacingFrequency = chSpacing.frequency().asGHz();
+ int lambdaCount = (int) ((availableUpperFrec - availableLowerFrec) / spacingFrequency);
+ GridType gridType = GridType.valueOf(availableGridType);
+ if (gridType == GridType.DWDM) {
+ slotGranularity = getSlotGranularity(chSpacing);
+ int finalSlotGranularity = slotGranularity;
+ IntStream.range(0, lambdaCount).forEach(x -> lambdas.add(new OchSignal(GridType.DWDM, chSpacing,
+ x - (lambdaCount / 2), finalSlotGranularity)));
+ } else if (gridType == GridType.CWDM) {
+ log.warn("GridType CWDM. Not implemented");
+ } else if (gridType == GridType.FLEX) {
+ log.warn("GridType FLEX. Not implemented");
+ } else {
+ log.warn("Unknown GridType");
+ }
+ }
+ return lambdas;
+ }
}