ONOS-3503 Remove OchPort out of core.
- Implementation of a Behavior OpticalDevice has the knowledge of
translating annotations into optical specific port.
- OpticalDeviceServiceView checks if the Device is a OpticalDevice
and translate all the Ports to optical specific port before returning.
- This commit contains feedbacks, issues, and fixes by Michele Santuari.
- Note: 3 more Port types to go (OduClt, Oms, Otu)
Change-Id: I4cbda8bc1922fbdd4dac8de8d02294bad74b8058
diff --git a/drivers/default/src/main/java/org/onosproject/driver/query/DefaultTributarySlotQuery.java b/drivers/default/src/main/java/org/onosproject/driver/query/DefaultTributarySlotQuery.java
index c547bbd..4129fd5 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/query/DefaultTributarySlotQuery.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/query/DefaultTributarySlotQuery.java
@@ -16,7 +16,6 @@
package org.onosproject.driver.query;
import org.onlab.util.GuavaCollectors;
-import org.onosproject.net.OchPort;
import org.onosproject.net.OduSignalType;
import org.onosproject.net.OtuPort;
import org.onosproject.net.OtuSignalType;
@@ -25,10 +24,13 @@
import org.onosproject.net.TributarySlot;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.optical.OchPort;
import org.onosproject.net.behaviour.TributarySlotQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.onosproject.net.optical.device.OpticalDeviceServiceView.opticalView;
+
import java.util.Collections;
import java.util.Set;
import java.util.stream.IntStream;
@@ -61,12 +63,12 @@
@Override
public Set<TributarySlot> queryTributarySlots(PortNumber port) {
// currently return all slots by default.
- DeviceService deviceService = this.handler().get(DeviceService.class);
+ DeviceService deviceService = opticalView(this.handler().get(DeviceService.class));
Port p = deviceService.getPort(this.data().deviceId(), port);
switch (p.type()) {
case OCH:
- return queryOchTributarySlots((OchPort) p);
+ return queryOchTributarySlots(p);
case OTU:
return queryOtuTributarySlots((OtuPort) p);
default:
@@ -74,8 +76,21 @@
}
}
- private Set<TributarySlot> queryOchTributarySlots(OchPort ochPort) {
- OduSignalType signalType = ochPort.signalType();
+ private Set<TributarySlot> queryOchTributarySlots(Port ochPort) {
+ OduSignalType signalType = null;
+ if (ochPort instanceof org.onosproject.net.OchPort) {
+ // remove once deprecation of old OchPort model is done
+ signalType = ((org.onosproject.net.OchPort) ochPort).signalType();
+ }
+ if (ochPort instanceof OchPort) {
+ signalType = ((OchPort) ochPort).signalType();
+ }
+
+ if (signalType == null) {
+ log.warn("{} was not an OchPort", ochPort);
+ return Collections.emptySet();
+ }
+
switch (signalType) {
case ODU2:
return ENTIRE_ODU2_TRIBUTARY_SLOTS;
diff --git a/drivers/default/src/main/resources/onos-drivers.xml b/drivers/default/src/main/resources/onos-drivers.xml
index 1503a16..a8e72ca 100644
--- a/drivers/default/src/main/resources/onos-drivers.xml
+++ b/drivers/default/src/main/resources/onos-drivers.xml
@@ -61,6 +61,8 @@
impl="org.onosproject.driver.handshaker.OfOpticalSwitchImplLinc13"/>
<behaviour api="org.onosproject.net.behaviour.LambdaQuery"
impl="org.onosproject.driver.query.LincOELambdaQuery"/>
+ <behaviour api="org.onosproject.net.optical.OpticalDevice"
+ impl="org.onosproject.net.optical.device.DefaultOpticalDevice"/>
</driver>
<driver name="ofdpa" extends="default"
manufacturer="Broadcom Corp." hwVersion="OF-DPA.*" swVersion="OF-DPA.*">
@@ -165,6 +167,8 @@
impl="org.onosproject.driver.query.DefaultTributarySlotQuery" />
<behaviour api="org.onosproject.net.behaviour.LambdaQuery"
impl="org.onosproject.driver.query.OFOpticalSwitch13LambdaQuery"/>
+ <behaviour api="org.onosproject.net.optical.OpticalDevice"
+ impl="org.onosproject.net.optical.device.DefaultOpticalDevice"/>
</driver>
<driver name="aos" extends="ofdpa"
manufacturer="Accton" hwVersion=".*" swVersion="1.*">
@@ -179,6 +183,8 @@
swVersion="of-agent">
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.OplinkRoadmHandshaker"/>
+ <behaviour api="org.onosproject.net.optical.OpticalDevice"
+ impl="org.onosproject.net.optical.device.DefaultOpticalDevice"/>
</driver>
<driver name="hp" extends="default"
manufacturer="HP" hwVersion="Switch 3500yl-48G" swVersion="K.16.01.0004">