Do not send table stats request if unsupported
Change-Id: Ia66447aad1eeb0a01577215e4c5985526dadd274
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitch.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitch.java
index a67a4e3..f3e32ab 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitch.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitch.java
@@ -17,6 +17,7 @@
import org.onosproject.net.Device;
import org.projectfloodlight.openflow.protocol.OFFactory;
+import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFMeterFeatures;
import org.projectfloodlight.openflow.protocol.OFPortDesc;
@@ -81,6 +82,14 @@
OFMeterFeatures getMeterFeatures();
/**
+ * Fetches the features of this switch.
+ * @return unmodifiable features
+ */
+ default OFFeaturesReply features() {
+ return null;
+ }
+
+ /**
* Provides the factory for this OF version.
* @return OF version specific factory.
*/
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
index 0ec8071..24a51b6 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
@@ -528,6 +528,11 @@
}
@Override
+ public OFFeaturesReply features() {
+ return this.features;
+ }
+
+ @Override
public String manufacturerDescription() {
return this.desc.getMfrDesc();
}
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
index 47c49bc..ef013b59 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -66,6 +66,7 @@
import org.osgi.service.component.ComponentContext;
import org.projectfloodlight.openflow.protocol.OFBadRequestCode;
import org.projectfloodlight.openflow.protocol.OFBarrierRequest;
+import org.projectfloodlight.openflow.protocol.OFCapabilities;
import org.projectfloodlight.openflow.protocol.OFErrorMsg;
import org.projectfloodlight.openflow.protocol.OFFlowLightweightStatsReply;
import org.projectfloodlight.openflow.protocol.OFFlowMod;
@@ -253,9 +254,11 @@
stopCollectorIfNeeded(simpleCollectors.put(new Dpid(sw.getId()), fsc));
fsc.start();
}
- TableStatisticsCollector tsc = new TableStatisticsCollector(timer, sw, flowPollFrequency);
- stopCollectorIfNeeded(tableStatsCollectors.put(new Dpid(sw.getId()), tsc));
- tsc.start();
+ if (sw.features().getCapabilities().contains(OFCapabilities.TABLE_STATS)) {
+ TableStatisticsCollector tsc = new TableStatisticsCollector(timer, sw, flowPollFrequency);
+ stopCollectorIfNeeded(tableStatsCollectors.put(new Dpid(sw.getId()), tsc));
+ tsc.start();
+ }
}
private void stopCollectorIfNeeded(SwitchDataCollector collector) {