stats are being sent; now handle them
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowController.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowController.java
index 6b2ca9c..b7e98c3 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowController.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowController.java
@@ -78,6 +78,20 @@
public void removePacketListener(PacketListener listener);
/**
+ * Register a listener for OF msg events.
+ *
+ * @param listener the listener to notify
+ */
+ public void addEventListener(OpenFlowEventListener listener);
+
+ /**
+ * Unregister a listener.
+ *
+ * @param listener the listener to unregister
+ */
+ public void removeEventListener(OpenFlowEventListener listener);
+
+ /**
* Send a message to a particular switch.
* @param dpid the switch to send to.
* @param msg the message to send
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java
new file mode 100644
index 0000000..3fbacc7
--- /dev/null
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java
@@ -0,0 +1,17 @@
+package org.onlab.onos.openflow.controller;
+
+import org.projectfloodlight.openflow.protocol.OFMessage;
+
+
+/**
+ * Notifies providers about openflow msg events.
+ */
+public interface OpenFlowEventListener {
+
+ /**
+ * Handles the message event.
+ *
+ * @param msg the message
+ */
+ public void handleMessage(Dpid dpid, OFMessage msg);
+}
diff --git a/openflow/api/src/test/java/org/onlab/onos/openflow/controller/OpenflowControllerAdapter.java b/openflow/api/src/test/java/org/onlab/onos/openflow/controller/OpenflowControllerAdapter.java
index 48484c3..7c6b9da 100644
--- a/openflow/api/src/test/java/org/onlab/onos/openflow/controller/OpenflowControllerAdapter.java
+++ b/openflow/api/src/test/java/org/onlab/onos/openflow/controller/OpenflowControllerAdapter.java
@@ -63,4 +63,16 @@
@Override
public void setRole(Dpid dpid, RoleState role) {
}
+
+ @Override
+ public void addEventListener(OpenFlowEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void removeEventListener(OpenFlowEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OpenFlowControllerImpl.java b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OpenFlowControllerImpl.java
index 32bfcde..d74c497 100644
--- a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -3,8 +3,6 @@
import static org.onlab.util.Tools.namedThreads;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
@@ -16,10 +14,10 @@
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Service;
-import org.onlab.onos.of.controller.OpenFlowEventListener;
import org.onlab.onos.openflow.controller.DefaultOpenFlowPacketContext;
import org.onlab.onos.openflow.controller.Dpid;
import org.onlab.onos.openflow.controller.OpenFlowController;
+import org.onlab.onos.openflow.controller.OpenFlowEventListener;
import org.onlab.onos.openflow.controller.OpenFlowPacketContext;
import org.onlab.onos.openflow.controller.OpenFlowSwitch;
import org.onlab.onos.openflow.controller.OpenFlowSwitchListener;
@@ -29,13 +27,12 @@
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFPacketIn;
import org.projectfloodlight.openflow.protocol.OFPortStatus;
-import org.projectfloodlight.openflow.protocol.OFType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
@Component(immediate = true)
@Service
@@ -45,7 +42,7 @@
LoggerFactory.getLogger(OpenFlowControllerImpl.class);
private final ExecutorService executor = Executors.newFixedThreadPool(16,
- namedThreads("of-event-dispatch-%d"));
+ namedThreads("of-event-%d"));
protected ConcurrentHashMap<Dpid, OpenFlowSwitch> connectedSwitches =
@@ -61,7 +58,7 @@
protected Multimap<Integer, PacketListener> ofPacketListener =
ArrayListMultimap.create();
- protected Map<OFType, List<OpenFlowEventListener>> ofEventListener = Maps.newHashMap();
+ protected Set<OpenFlowEventListener> ofEventListener = Sets.newHashSet();
private final Controller ctrl = new Controller();
@@ -128,6 +125,16 @@
}
@Override
+ public void addEventListener(OpenFlowEventListener listener) {
+ ofEventListener.add(listener);
+ }
+
+ @Override
+ public void removeEventListener(OpenFlowEventListener listener) {
+ ofEventListener.remove(listener);
+ }
+
+ @Override
public void write(Dpid dpid, OFMessage msg) {
this.getSwitch(dpid).sendMsg(msg);
}
@@ -320,14 +327,11 @@
@Override
public void run() {
- List<OpenFlowEventListener> listeners =
- ofEventListener.get(OFType.FLOW_REMOVED);
- for (OpenFlowEventListener listener : listeners) {
+ for (OpenFlowEventListener listener : ofEventListener) {
listener.handleMessage(dpid, msg);
}
}
}
-
}