Get driver even with absent mfr,sw,hw in rest provider config
Change-Id: I29d2dc431401751903dfbb83eb026f0911a442d2
diff --git a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
index 9aa5c12..cd738cd 100644
--- a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
+++ b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
@@ -39,6 +39,7 @@
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
import org.onosproject.net.config.basics.SubjectFactories;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
@@ -109,7 +110,8 @@
protected static final String REST = "rest";
private static final String PROVIDER = "org.onosproject.provider.rest.device";
private static final String IPADDRESS = "ipaddress";
- private static final String ISNOTNULL = "Rest device is not null";
+ private static final String DEVICENULL = "Rest device is null";
+ private static final String DRIVERNULL = "Driver is null";
private static final String UNKNOWN = "unknown";
private static final int REST_TIMEOUT_SEC = 5;
private static final int EXECUTOR_THREAD_POOL_SIZE = 8;
@@ -238,7 +240,7 @@
@Override
public boolean isReachable(DeviceId deviceId) {
RestSBDevice restDevice = controller.getDevice(deviceId);
- return restDevice != null ? restDevice.isActive() : false;
+ return restDevice != null && restDevice.isActive();
}
private ScheduledFuture scheduleDevicePolling() {
@@ -268,9 +270,8 @@
private DeviceDescription getDesc(RestSBDevice restSBDev) {
DeviceId deviceId = restSBDev.deviceId();
- Driver driver = driverService.getDriver(restSBDev.manufacturer().get(),
- restSBDev.hwVersion().get(),
- restSBDev.swVersion().get());
+
+ Driver driver = getDriver(restSBDev);
if (restSBDev.isProxy()) {
if (driver != null && driver.hasBehaviour(DevicesDiscovery.class)) {
@@ -317,15 +318,13 @@
}
private void deviceAdded(RestSBDevice restSBDev) {
- checkNotNull(restSBDev, ISNOTNULL);
+ checkNotNull(restSBDev, DEVICENULL);
- Driver driver = driverService.getDriver(restSBDev.manufacturer().get(),
- restSBDev.hwVersion().get(),
- restSBDev.swVersion().get());
+ Driver driver = getDriver(restSBDev);
// Check if the server is controlling a single or multiple devices
if (restSBDev.isProxy()) {
- if (driver != null && driver.hasBehaviour(DevicesDiscovery.class)) {
+ if (driver.hasBehaviour(DevicesDiscovery.class)) {
DevicesDiscovery devicesDiscovery = devicesDiscovery(restSBDev, driver);
Set<DeviceId> deviceIds = devicesDiscovery.deviceIds();
restSBDev.setActive(true);
@@ -344,7 +343,7 @@
checkAndUpdateDevice(deviceId);
});
} else {
- log.warn("Driver not found for {}", restSBDev);
+ log.warn("Device is proxy but driver does not have proxy discovery behaviour {}", restSBDev);
}
} else {
DeviceId deviceId = restSBDev.deviceId();
@@ -370,6 +369,21 @@
}
}
+ private Driver getDriver(RestSBDevice restSBDev) {
+ String driverName = netCfgService.getConfig(restSBDev.deviceId(), BasicDeviceConfig.class).driver();
+
+ Driver driver = driverService.getDriver(driverName);
+
+ if (driver == null) {
+ driver = driverService.getDriver(restSBDev.manufacturer().get(),
+ restSBDev.hwVersion().get(),
+ restSBDev.swVersion().get());
+ }
+
+ checkNotNull(driver, DRIVERNULL);
+ return driver;
+ }
+
private DefaultDeviceDescription mergeAnn(DeviceId devId, DeviceDescription desc) {
return new DefaultDeviceDescription(
desc,
@@ -434,7 +448,7 @@
}
private void deviceRemoved(DeviceId deviceId) {
- checkNotNull(deviceId, ISNOTNULL);
+ checkNotNull(deviceId, DEVICENULL);
log.debug("Device removed called for {}", deviceId);
providerService.deviceDisconnected(deviceId);
controller.getProxiedDevices(deviceId).forEach(device -> {