Send group desc without group stats capability
Change-Id: Ie061f03cabeec3d241cab2e5514aaa97c774bab8
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
index 5433a4d..4a5c872 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
@@ -19,6 +19,7 @@
import org.onlab.util.Timer;
import org.onosproject.openflow.controller.OpenFlowSwitch;
import org.onosproject.openflow.controller.RoleState;
+import org.projectfloodlight.openflow.protocol.OFCapabilities;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsRequest;
import org.projectfloodlight.openflow.protocol.OFGroupStatsRequest;
import org.projectfloodlight.openflow.types.OFGroup;
@@ -59,7 +60,7 @@
public void run(Timeout timeout) throws Exception {
log.trace("Collecting stats for {}", sw.getStringId());
- sendGroupStatisticRequest();
+ sendGroupStatisticRequests();
if (!this.stopTimer) {
log.trace("Scheduling stats collection in {} seconds for {}",
@@ -69,7 +70,23 @@
}
}
- private void sendGroupStatisticRequest() {
+ private void sendGroupDescStatisticRequest(long xid) {
+ OFGroupDescStatsRequest descStatsRequest =
+ sw.factory().buildGroupDescStatsRequest()
+ .setXid(xid)
+ .build();
+ sw.sendMsg(descStatsRequest);
+ }
+
+ private void sendGroupStatisticRequest(long xid) {
+ OFGroupStatsRequest statsRequest = sw.factory().buildGroupStatsRequest()
+ .setGroup(OFGroup.ALL)
+ .setXid(xid)
+ .build();
+ sw.sendMsg(statsRequest);
+ }
+
+ private void sendGroupStatisticRequests() {
if (log.isTraceEnabled()) {
log.trace("sendGroupStatistics {}:{}", sw.getStringId(), sw.getRole());
}
@@ -79,19 +96,15 @@
if (!sw.isConnected()) {
return;
}
- long statsXid = OpenFlowGroupProvider.getXidAndAdd(2);
- OFGroupStatsRequest statsRequest = sw.factory().buildGroupStatsRequest()
- .setGroup(OFGroup.ALL)
- .setXid(statsXid)
- .build();
- sw.sendMsg(statsRequest);
- long descXid = statsXid + 1;
- OFGroupDescStatsRequest descStatsRequest =
- sw.factory().buildGroupDescStatsRequest()
- .setXid(descXid)
- .build();
- sw.sendMsg(descStatsRequest);
+ if (sw.features().getCapabilities().contains(OFCapabilities.GROUP_STATS)) {
+ long xid = OpenFlowGroupProvider.getXidAndAdd(2);
+ sendGroupDescStatisticRequest(xid);
+ sendGroupStatisticRequest(xid + 1);
+ } else {
+ long xid = OpenFlowGroupProvider.getXidAndAdd(1);
+ sendGroupDescStatisticRequest(xid);
+ }
}
public void adjustRate(int pollInterval) {
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 0f55b41..b536fda 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
@@ -65,7 +65,6 @@
import org.onosproject.openflow.controller.RoleState;
import org.osgi.service.component.ComponentContext;
import org.projectfloodlight.openflow.protocol.OFBucketCounter;
-import org.projectfloodlight.openflow.protocol.OFCapabilities;
import org.projectfloodlight.openflow.protocol.OFErrorMsg;
import org.projectfloodlight.openflow.protocol.OFErrorType;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
@@ -413,7 +412,7 @@
if (sw == null) {
return;
}
- if (isGroupSupported(sw) && sw.features().getCapabilities().contains(OFCapabilities.GROUP_STATS)) {
+ if (isGroupSupported(sw)) {
GroupStatsCollector gsc = new GroupStatsCollector(sw, groupPollInterval);
stopCollectorIfNeeded(collectors.put(dpid, gsc));
gsc.start();