Introduce driver property to suppress group feature
Change-Id: I7bf9857a7a71e3b4ef64aa7fd2c8777ff20dc95b
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
index df1bb6a..c60a58c 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
@@ -41,6 +41,7 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.driver.Driver;
import org.onosproject.net.driver.DriverService;
import org.onosproject.net.group.DefaultGroup;
import org.onosproject.net.group.Group;
@@ -366,13 +367,29 @@
private boolean isGroupSupported(OpenFlowSwitch sw) {
if (sw.factory().getVersion() == OFVersion.OF_10 ||
sw.factory().getVersion() == OFVersion.OF_11 ||
- sw.factory().getVersion() == OFVersion.OF_12) {
+ sw.factory().getVersion() == OFVersion.OF_12 ||
+ !isGroupCapable(sw)) {
return false;
}
return true;
}
+ /**
+ * Determine whether the given switch is group-capable.
+ *
+ * @param sw switch
+ * @return the boolean value of groupCapable property, or true if it is not configured.
+ */
+ private boolean isGroupCapable(OpenFlowSwitch sw) {
+ Driver driver = driverService.getDriver(DeviceId.deviceId(Dpid.uri(sw.getDpid())));
+ if (driver == null) {
+ return true;
+ }
+ String isGroupCapable = driver.getProperty(GROUP_CAPABLE);
+ return isGroupCapable == null || Boolean.parseBoolean(isGroupCapable);
+ }
+
private class InternalGroupProvider
implements OpenFlowSwitchListener, OpenFlowEventListener {
diff --git a/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java b/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
index 0b95f1d..9b87b22 100644
--- a/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
+++ b/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
@@ -24,6 +24,7 @@
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
+import org.onosproject.net.driver.DriverServiceAdapter;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.group.DefaultGroupBucket;
@@ -82,6 +83,7 @@
provider.controller = controller;
provider.providerRegistry = providerRegistry;
provider.cfgService = new ComponentConfigAdapter();
+ provider.driverService = new DriverServiceAdapter();
provider.activate(null);
}
@@ -435,4 +437,4 @@
return null;
}
}
-}
\ No newline at end of file
+}