Refactor the logic on collecting OpenFlow message statistics
Change-Id: I34c209c0ca90cb094ed5f82c96a8a43d3519b807
diff --git a/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java b/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java
index 02465f1..9dd27a0 100644
--- a/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java
+++ b/providers/openflow/device/src/test/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProviderTest.java
@@ -38,6 +38,7 @@
import org.onosproject.openflow.controller.Dpid;
import org.onosproject.openflow.controller.OpenFlowController;
import org.onosproject.openflow.controller.OpenFlowEventListener;
+import org.onosproject.openflow.controller.OpenFlowMessageListener;
import org.onosproject.openflow.controller.OpenFlowSwitch;
import org.onosproject.openflow.controller.OpenFlowSwitchListener;
import org.onosproject.openflow.controller.PacketListener;
@@ -275,10 +276,6 @@
}
@Override
- public void monitorAllEvents(boolean monitor) {
- }
-
- @Override
public void addListener(OpenFlowSwitchListener listener) {
this.listener = listener;
}
@@ -289,6 +286,16 @@
}
@Override
+ public void addMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
+ public void removeMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
public void addPacketListener(int priority, PacketListener listener) {
}
@@ -416,14 +423,6 @@
return "1.2.3.4:1";
}
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
- }
-
}
}
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 0fc3287..ff08f72 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
@@ -41,6 +41,7 @@
import org.onosproject.openflow.controller.Dpid;
import org.onosproject.openflow.controller.OpenFlowController;
import org.onosproject.openflow.controller.OpenFlowEventListener;
+import org.onosproject.openflow.controller.OpenFlowMessageListener;
import org.onosproject.openflow.controller.OpenFlowSwitch;
import org.onosproject.openflow.controller.OpenFlowSwitchListener;
import org.onosproject.openflow.controller.PacketListener;
@@ -225,6 +226,16 @@
}
@Override
+ public void addMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
+ public void removeMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
public void addPacketListener(int priority, PacketListener listener) {
}
@@ -288,11 +299,6 @@
public OpenFlowSwitch getEqualSwitch(Dpid dpid) {
return null;
}
-
- @Override
- public void monitorAllEvents(boolean monitor) {
- }
-
}
private class TestGroupProviderRegistry implements GroupProviderRegistry {
@@ -411,14 +417,5 @@
public String channelId() {
return null;
}
-
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
- }
-
}
}
\ No newline at end of file
diff --git a/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java b/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
index 42bed2d..a2e21dc 100644
--- a/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
+++ b/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
@@ -32,7 +32,7 @@
import org.onosproject.net.provider.ProviderId;
import org.onosproject.openflow.controller.Dpid;
import org.onosproject.openflow.controller.OpenFlowController;
-import org.onosproject.openflow.controller.OpenFlowEventListener;
+import org.onosproject.openflow.controller.OpenFlowMessageListener;
import org.onosproject.openflow.controller.OpenFlowSwitch;
import org.onosproject.openflow.controller.OpenFlowSwitchListener;
import org.onosproject.openflow.controller.RoleState;
@@ -42,6 +42,7 @@
import org.slf4j.Logger;
import java.util.HashMap;
+import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -71,11 +72,8 @@
private final InternalDeviceProvider listener = new InternalDeviceProvider();
- private final InternalIncomingMessageProvider inMsgListener =
- new InternalIncomingMessageProvider();
-
- private final InternalOutgoingMessageProvider outMsgListener =
- new InternalOutgoingMessageProvider();
+ private final InternalControlMessageListener messageListener =
+ new InternalControlMessageListener();
private HashMap<Dpid, OpenFlowControlMessageAggregator> aggregators = Maps.newHashMap();
private SharedScheduledExecutorService executor;
@@ -98,12 +96,8 @@
// listens all OpenFlow device related events
controller.addListener(listener);
- // listens all OpenFlow incoming message events
- controller.addEventListener(inMsgListener);
- controller.monitorAllEvents(true);
-
- // listens all OpenFlow outgoing message events
- controller.getSwitches().forEach(sw -> sw.addEventListener(outMsgListener));
+ // listens all OpenFlow control message
+ controller.addMessageListener(messageListener);
executor = SharedScheduledExecutors.getSingleThreadExecutor();
@@ -117,12 +111,8 @@
providerRegistry.unregister(this);
providerService = null;
- // stops listening all OpenFlow incoming message events
- controller.monitorAllEvents(false);
- controller.removeEventListener(inMsgListener);
-
- // stops listening all OpenFlow outgoing message events
- controller.getSwitches().forEach(sw -> sw.removeEventListener(outMsgListener));
+ // stops listening all OpenFlow control message events
+ controller.removeMessageListener(messageListener);
log.info("Stopped");
}
@@ -149,12 +139,6 @@
return;
}
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw != null) {
- // start to monitor the outgoing control messages
- sw.addEventListener(outMsgListener);
- }
-
DeviceId deviceId = deviceId(uri(dpid));
OpenFlowControlMessageAggregator ofcma =
new OpenFlowControlMessageAggregator(metricsService,
@@ -171,12 +155,6 @@
return;
}
- OpenFlowSwitch sw = controller.getSwitch(dpid);
- if (sw != null) {
- // stop monitoring the outgoing control messages
- sw.removeEventListener(outMsgListener);
- }
-
// removes the aggregator when switch is removed
// this also stops the aggregator from running
OpenFlowControlMessageAggregator aggregator = aggregators.remove(dpid);
@@ -200,12 +178,12 @@
}
/**
- * A listener for incoming OpenFlow messages.
+ * A listener for all OpenFlow control messages.
*/
- private class InternalIncomingMessageProvider implements OpenFlowEventListener {
+ private class InternalControlMessageListener implements OpenFlowMessageListener {
@Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
+ public void handleIncomingMessage(Dpid dpid, OFMessage msg) {
if (msg.getType() == OFType.PACKET_IN ||
msg.getType() == OFType.FLOW_MOD ||
msg.getType() == OFType.STATS_REPLY) {
@@ -215,19 +193,19 @@
});
}
}
- }
-
- /**
- * A listener for outgoing OpenFlow messages.
- */
- private class InternalOutgoingMessageProvider implements OpenFlowEventListener {
@Override
- public void handleMessage(Dpid dpid, OFMessage msg) {
- aggregators.computeIfPresent(dpid, (k, v) -> {
- v.increment(msg);
- return v;
- });
+ public void handleOutgoingMessage(Dpid dpid, List<OFMessage> msgs) {
+ for (OFMessage msg : msgs) {
+ if (msg.getType() == OFType.PACKET_OUT ||
+ msg.getType() == OFType.FLOW_MOD ||
+ msg.getType() == OFType.STATS_REQUEST) {
+ aggregators.computeIfPresent(dpid, (k, v) -> {
+ v.increment(msg);
+ return v;
+ });
+ }
+ }
}
}
}
diff --git a/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java b/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
index ebc8cc7..1b4fe93 100644
--- a/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
+++ b/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
@@ -40,6 +40,7 @@
import org.onosproject.openflow.controller.Dpid;
import org.onosproject.openflow.controller.OpenFlowController;
import org.onosproject.openflow.controller.OpenFlowEventListener;
+import org.onosproject.openflow.controller.OpenFlowMessageListener;
import org.onosproject.openflow.controller.OpenFlowPacketContext;
import org.onosproject.openflow.controller.OpenFlowSwitch;
import org.onosproject.openflow.controller.OpenFlowSwitchListener;
@@ -287,10 +288,6 @@
}
@Override
- public void monitorAllEvents(boolean monitor) {
- }
-
- @Override
public void addListener(OpenFlowSwitchListener listener) {
}
@@ -299,6 +296,16 @@
}
@Override
+ public void addMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
+ public void removeMessageListener(OpenFlowMessageListener listener) {
+
+ }
+
+ @Override
public void addPacketListener(int priority, PacketListener listener) {
pktListener = listener;
}
@@ -428,16 +435,6 @@
public String channelId() {
return "1.2.3.4:1";
}
-
- @Override
- public void addEventListener(OpenFlowEventListener listener) {
- }
-
- @Override
- public void removeEventListener(OpenFlowEventListener listener) {
- }
-
-
}
}