Add OTN device and ports
Change-Id: I18f3376d1466077e95d7324a27a660302f0123b3
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index 346ddb7..59c2df0 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -54,6 +54,7 @@
import org.onosproject.net.MastershipRole;
import org.onosproject.net.OchSignal;
import org.onosproject.net.OduSignalType;
+import org.onosproject.net.OtuSignalType;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.SparseAnnotations;
@@ -67,6 +68,7 @@
import org.onosproject.net.device.OchPortDescription;
import org.onosproject.net.device.OduCltPortDescription;
import org.onosproject.net.device.OmsPortDescription;
+import org.onosproject.net.device.OtuPortDescription;
import org.onosproject.net.device.PortDescription;
import org.onosproject.net.device.PortStatistics;
import org.onosproject.net.provider.AbstractProvider;
@@ -492,13 +494,15 @@
*/
private List<PortDescription> buildPortDescriptions(OpenFlowSwitch sw) {
final List<PortDescription> portDescs = new ArrayList<>(sw.getPorts().size());
- if (!(Device.Type.ROADM.equals(sw.deviceType()))) {
+ if (!((Device.Type.ROADM.equals(sw.deviceType())) ||
+ (Device.Type.OTN.equals(sw.deviceType())))) {
sw.getPorts().forEach(port -> portDescs.add(buildPortDescription(port)));
}
OpenFlowOpticalSwitch opsw;
switch (sw.deviceType()) {
case ROADM:
+ case OTN:
opsw = (OpenFlowOpticalSwitch) sw;
List<OFPortDesc> ports = opsw.getPorts();
LOG.debug("SW ID {} , ETH- ODU CLT Ports {}", opsw.getId(), ports);
@@ -578,6 +582,24 @@
return buildPortDescription(ptype, (OFExpPort) port);
}
+ private boolean matchingOtuPortSignalTypes(OFPortOpticalTransportSignalType sigType,
+ OduSignalType oduSignalType) {
+ switch (sigType) {
+ case OTU2:
+ if (oduSignalType == OduSignalType.ODU2) {
+ return true;
+ }
+ break;
+ case OTU4:
+ if (oduSignalType == OduSignalType.ODU4) {
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+ }
/**
* Build a portDescription from a given a port description describing some
* Optical port.
@@ -622,8 +644,25 @@
break;
case OTU2:
case OTU4:
- LOG.error("Signal tpye OTU2/4 not supported yet ", port.toString());
- break;
+ entry = firstProp.getFeatures().get(0).getValue().get(0);
+ layerClass = entry.getLayerClass();
+ if (!OFPortOpticalTransportLayerClass.ODU.equals(layerClass)) {
+ LOG.error("Unsupported layer Class {} ", layerClass);
+ return null;
+ }
+
+ // convert to ONOS OduSignalType
+ OduSignalType oduSignalTypeOtuPort = OpenFlowDeviceValueMapper.
+ lookupOduSignalType((byte) entry.getSignalType());
+ if (!matchingOtuPortSignalTypes(sigType, oduSignalTypeOtuPort)) {
+ LOG.error("Wrong oduSignalType {} for OTU Port sigType {} ", oduSignalTypeOtuPort, sigType);
+ return null;
+ }
+ OtuSignalType otuSignalType =
+ ((sigType == OFPortOpticalTransportSignalType.OTU2) ? OtuSignalType.OTU2 :
+ OtuSignalType.OTU4);
+ portDes = new OtuPortDescription(portNo, enabled, otuSignalType, annotations);
+ break;
default:
break;
}