stats are being sent; now handle them
diff --git a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
index 9a85d69..9a5a9dd 100644
--- a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -2,6 +2,8 @@
import static org.slf4j.LoggerFactory.getLogger;
+import java.util.Map;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -17,9 +19,9 @@
import org.onlab.onos.net.provider.AbstractProvider;
import org.onlab.onos.net.provider.ProviderId;
import org.onlab.onos.net.topology.TopologyService;
-import org.onlab.onos.of.controller.OpenFlowEventListener;
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.OpenFlowSwitch;
import org.onlab.onos.openflow.controller.OpenFlowSwitchListener;
import org.projectfloodlight.openflow.protocol.OFFlowRemoved;
@@ -27,6 +29,8 @@
import org.projectfloodlight.openflow.protocol.OFPortStatus;
import org.slf4j.Logger;
+import com.google.common.collect.Maps;
+
/**
* Provider which uses an OpenFlow controller to detect network
* end-station hosts.
@@ -47,6 +51,8 @@
private FlowRuleProviderService providerService;
+ private final InternalFlowProvider listener = new InternalFlowProvider();
+
/**
* Creates an OpenFlow host provider.
*/
@@ -57,6 +63,8 @@
@Activate
public void activate() {
providerService = providerRegistry.register(this);
+ controller.addListener(listener);
+ controller.addEventListener(listener);
log.info("Started");
}
@@ -99,16 +107,18 @@
private class InternalFlowProvider
implements OpenFlowSwitchListener, OpenFlowEventListener {
+ private final Map<Dpid, FlowStatsCollector> collectors = Maps.newHashMap();
@Override
public void switchAdded(Dpid dpid) {
-
-
+ FlowStatsCollector fsc = new FlowStatsCollector(controller.getSwitch(dpid), 1);
+ fsc.start();
+ collectors.put(dpid, fsc);
}
@Override
public void switchRemoved(Dpid dpid) {
-
+ collectors.remove(dpid).stop();
}
@@ -121,11 +131,13 @@
public void handleMessage(Dpid dpid, OFMessage msg) {
switch (msg.getType()) {
case FLOW_REMOVED:
+ //TODO: make this better
OFFlowRemoved removed = (OFFlowRemoved) msg;
FlowRule fr = new DefaultFlowRule(DeviceId.deviceId(Dpid.uri(dpid)), null, null);
providerService.flowRemoved(fr);
break;
case STATS_REPLY:
+ break;
case BARRIER_REPLY:
case ERROR:
default: