在floodlight控制器中统计进入packed-in数量的代码:
package edu.wzu.steve.trafficanalyser;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;
import net.floodlightcontroller.counter.CounterValue;
import net.floodlightcontroller.counter.ICounter;
import org.restlet.resource.Get;
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.counter.ICounterStoreService;
import org.openflow.protocol.OFMessage;
import org.openflow.protocol.OFType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TrafficAnalyser extends ServerResource implements IOFMessageListener, IFloodlightModule{
protected ICounterStoreService counterStore;
protected IFloodlightProviderService floodlightProvider;
protected static Logger logger;
@Override
public String getName() {
// TODO Auto-generated method stub
return TrafficAnalyser.class.getSimpleName();
}
@Override
public boolean isCallbackOrderingPrereq(OFType type, String name) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isCallbackOrderingPostreq(OFType type, String name) {
// TODO Auto-generated method stub
return false;
}
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
// TODO Auto-generated method stub
Collection<Class<? extends IFloodlightService>> l =
new ArrayList<Class<? extends IFloodlightService>>();
l.add(IFloodlightProviderService.class);
return l;
}
@Override
public void init(FloodlightModuleContext context)
throws FloodlightModuleException {
this.floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
this.counterStore = context.getServiceImpl(ICounterStoreService.class);
logger = LoggerFactory.getLogger(TrafficAnalyser.class);
}
@Override
public void startUp(FloodlightModuleContext context) {
floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
}
@Get("json")
public Map<String, Object> retrieve(){
String counterTitle =
(String) getRequestAttributes().get("counterTitle");
Map<String, Object> model = new HashMap<String,Object>();
CounterValue v;
if (counterTitle.equalsIgnoreCase("all")) {
Map<String, ICounter> counters = this.counterStore.getAll();
if (counters != null) {
Iterator<Map.Entry<String, ICounter>> it =
counters.entrySet().iterator();
while (it.hasNext()) {
Entry<String, ICounter> entry = it.next();
String counterName = entry.getKey();
v = entry.getValue().getCounterValue();
if (CounterValue.CounterType.LONG == v.getType()) {
model.put(counterName, v.getLong());
} else if (v.getType() == CounterValue.CounterType.DOUBLE) {
model.put(counterName, v.getDouble());
}
}
}
} else {
ICounter counter = this.counterStore.getCounter(counterTitle);
if (counter != null) {
v = counter.getCounterValue();
} else {
v = new CounterValue(CounterValue.CounterType.LONG);
}
if (CounterValue.CounterType.LONG == v.getType()) {
model.put(counterTitle, v.getLong());
} else if (v.getType() == CounterValue.CounterType.DOUBLE) {
model.put(counterTitle, v.getDouble());
}
}
return model;
}
protected void doInit() throws ResourceException {
super.doInit();
counterStore =
(ICounterStoreService)getContext().getAttributes().
get(ICounterStoreService.class.getCanonicalName());
}
@Override
public net.floodlightcontroller.core.IListener.Command receive(IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
System.out.println(retrieve().toString());
return Command.CONTINUE;
}
}
这代码没有报错,可是,控制器只能连接到ovs,在mininet中用hosts去pingall的时候就会一下连接,一下断开,无法ping通。
于是就简化了一下代码,去掉觉得有bug的代码,抛出的异常是没有实例化;
代码如下:
package edu.wzu.steve.trafficanalyser;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;
import net.floodlightcontroller.counter.CounterValue;
import net.floodlightcontroller.counter.ICounter;
import org.restlet.resource.Get;
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.counter.ICounterStoreService;
import org.openflow.protocol.OFMessage;
import org.openflow.protocol.OFType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TrafficAnalyser extends ServerResource implements IOFMessageListener, IFloodlightModule{
protected ICounterStoreService counterStore;
protected IFloodlightProviderService floodlightProvider;
protected static Logger logger;
@Override
public String getName() {
// TODO Auto-generated method stub
return TrafficAnalyser.class.getSimpleName();
}
@Override
public boolean isCallbackOrderingPrereq(OFType type, String name) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isCallbackOrderingPostreq(OFType type, String name) {
// TODO Auto-generated method stub
return false;
}
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
// TODO Auto-generated method stub
Collection<Class<? extends IFloodlightService>> l =
new ArrayList<Class<? extends IFloodlightService>>();
l.add(IFloodlightProviderService.class);
return l;
}
@Override
public void init(FloodlightModuleContext context)
throws FloodlightModuleException {
this.floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
this.counterStore = context.getServiceImpl(ICounterStoreService.class);
logger = LoggerFactory.getLogger(TrafficAnalyser.class);
}
@Override
public void startUp(FloodlightModuleContext context) {
floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
}
@Get("json")
public Map<String, Object> retrieve(){
Map<String, Object> model = new HashMap<String,Object>();
CounterValue v;
Map<String, ICounter> counters = this.counterStore.getAll();
if (counters != null) {
Iterator<Map.Entry<String, ICounter>> it =
counters.entrySet().iterator();
while (it.hasNext()) {
Entry<String, ICounter> entry = it.next();
String counterName = entry.getKey();
v = entry.getValue().getCounterValue();
if (CounterValue.CounterType.LONG == v.getType()) {
model.put(counterName, v.getLong());
} else if (v.getType() == CounterValue.CounterType.DOUBLE) {
model.put(counterName, v.getDouble());
}
}
}
return model;
}
protected void doInit() throws ResourceException {
super.doInit();
counterStore =
(ICounterStoreService)getContext().getAttributes().
get(ICounterStoreService.class.getCanonicalName());
}
@Override
public net.floodlightcontroller.core.IListener.Command receive(IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
System.out.println(retrieve().toString());
return Command.CONTINUE;
}
}
用
sudo mn --topo single,3 --mac --switch ovsk --controller=remote,ip=10.0.2.15,port=6633
建立hosts去pingall
eclipse中控制台出来的信息截图如上,完整信息如下:
00:58:01.133 INFO [n.f.c.m.FloodlightModuleLoader:main] Loading default modules
00:58:01.846 INFO [n.f.c.i.Controller:main] Controller role set to MASTER
00:58:01.869 INFO [n.f.c.i.Controller:main] Flush switches on reconnect -- Disabled
00:58:02.968 ERROR [o.s.s.i.c.DelegatingCCProvider:main] Failed to initialize provider org.sdnplatform.sync.internal.config.SyncStoreCCProvider
org.sdnplatform.sync.error.PersistException: Could not initialize persistent storage
at org.sdnplatform.sync.internal.store.JavaDBStorageEngine.<init>(JavaDBStorageEngine.java:106) ~[bin/:na]
at org.sdnplatform.sync.internal.StoreRegistry.register(StoreRegistry.java:116) ~[bin/:na]
at org.sdnplatform.sync.internal.SyncManager.registerPersistentStore(SyncManager.java:184) [bin/:na]
at org.sdnplatform.sync.internal.config.SyncStoreCCProvider.init(SyncStoreCCProvider.java:85) ~[bin/:na]
at org.sdnplatform.sync.internal.config.DelegatingCCProvider.init(DelegatingCCProvider.java:37) ~[bin/:na]
at org.sdnplatform.sync.internal.SyncManager.init(SyncManager.java:489) [bin/:na]
at net.floodlightcontroller.core.module.FloodlightModuleLoader.initModules(FloodlightModuleLoader.java:436) [bin/:na]
at net.floodlightcontroller.core.module.FloodlightModuleLoader.loadModulesFromList(FloodlightModuleLoader.java:353) [bin/:na]
at net.floodlightcontroller.core.module.FloodlightModuleLoader.loadModulesFromList(FloodlightModuleLoader.java:362) [bin/:na]
at net.floodlightcontroller.core.module.FloodlightModuleLoader.loadModulesFromConfig(FloodlightModuleLoader.java:200) [bin/:na]
at net.floodlightcontroller.core.Main.main(Main.java:55) [bin/:na]
Caused by: java.sql.SQLException: DDL is not permitted for a read-only connection, user or database.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.sdnplatform.sync.internal.store.JavaDBStorageEngine.initTable(JavaDBStorageEngine.java:379) ~[bin/:na]
at org.sdnplatform.sync.internal.store.JavaDBStorageEngine.<init>(JavaDBStorageEngine.java:104) ~[bin/:na]
... 10 common frames omitted
Caused by: org.apache.derby.impl.jdbc.EmbedSQLException: DDL is not permitted for a read-only connection, user or database.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ~[derby-10.9.1.0.jar:na]
... 21 common frames omitted
Caused by: org.apache.derby.iapi.error.StandardException: DDL is not permitted for a read-only connection, user or database.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.conn.GenericAuthorizer.authorize(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.execute.GenericResultSetFactory.getDDLResultSet(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.execute.ConstantActionActivation.execute(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.GenericActivationHolder.execute(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source) ~[derby-10.9.1.0.jar:na]
at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source) ~[derby-10.9.1.0.jar:na]
... 15 common frames omitted
00:58:03.244 INFO [n.f.l.i.LinkDiscoveryManager:main] Setting autoportfast feature to OFF
00:58:03.431 INFO [o.s.s.i.c.FallbackCCProvider:main] Cluster not yet configured; using fallback local configuration
00:58:03.436 INFO [o.s.s.i.SyncManager:main] [32767] Updating sync configuration ClusterConfig [allNodes={32767=Node [hostname=localhost, port=6642, nodeId=32767, domainId=32767]}, authScheme=CHALLENGE_RESPONSE, keyStorePath=/etc/floodlight/auth_credentials.jceks, keyStorePassword is unset]
00:58:03.660 INFO [o.s.s.i.r.RPCService:main] Listening for internal floodlight RPC on localhost/127.0.0.1:6642
00:58:04.128 INFO [n.f.c.i.Controller:main] Listening for switch connections on 0.0.0.0/0.0.0.0:6633
00:58:09.232 INFO [n.f.c.i.OFChannelHandler:New I/O server worker #2-1] New switch connection from /10.0.2.15:59701
00:58:09.495 INFO [n.f.c.i.OFChannelHandler:New I/O server worker #2-1] Switch OFSwitchBase [/10.0.2.15:59701 DPID[00:00:00:00:00:00:00:01]] bound to class class net.floodlightcontroller.core.internal.OFSwitchImpl, writeThrottle=false, description Switch Desc - Vendor: Nicira, Inc. Model: Open vSwitch Make: None Version: 2.1.0 S/N: None
00:58:09.509 INFO [n.f.c.OFSwitchBase:New I/O server worker #2-1] Clearing all flows on switch OFSwitchBase [/10.0.2.15:59701 DPID[00:00:00:00:00:00:00:01]]
00:58:09.519 WARN [n.f.c.i.C.s.notification:main] Switch 00:00:00:00:00:00:00:01 connected.
{StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=0, controller__OFPacketIn=0, 00:00:00:00:00:00:00:01__OFPacketIn=0, controller__OFPacketIn__L3_ARP=0, StorageQuery__controller_forwardingconfig=1, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=0, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=0}
{controller__OFPacketIn=1, 00:00:00:00:00:00:00:01__OFPacketIn=1, controller__OFPacketIn__L3_ARP=1, controller__OFPacketOut=0, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=0, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=1, StorageQuery=6, StorageQuery__controller_topologyconfig=1, StorageQuery__controller_firewallrules=1, 00:00:00:00:00:00:00:01__OFFlowMod=0, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=1, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=0, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=1}
{controller__OFPacketIn__L4_ICMP=0, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=0, controller__OFPacketIn=2, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=0, 00:00:00:00:00:00:00:01__OFPacketIn=2, controller__OFPacketIn__unicast=0, controller__OFPacketIn__L3_ARP=2, controller__OFPacketOut=1, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=1, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=2, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=1, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=2, controller__OFPacketIn__L3_IPv4=0, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=1, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=0, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=2}
{controller__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=1, controller__OFPacketIn=3, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=1, 00:00:00:00:00:00:00:01__OFPacketIn=3, controller__OFPacketIn__unicast=1, controller__OFPacketIn__L3_ARP=2, controller__OFPacketOut=2, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=2, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=2, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=2, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=2, controller__OFPacketIn__L3_IPv4=1, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=2, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=2}
{controller__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=1, controller__OFPacketIn=4, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=1, 00:00:00:00:00:00:00:01__OFPacketIn=4, controller__OFPacketIn__unicast=1, controller__OFPacketIn__L3_ARP=3, controller__OFPacketOut=2, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=2, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=3, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=2, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=3, controller__OFPacketIn__L3_IPv4=1, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=2, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=3}
{controller__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=1, controller__OFPacketIn=5, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=1, 00:00:00:00:00:00:00:01__OFPacketIn=5, controller__OFPacketIn__unicast=1, controller__OFPacketIn__L3_ARP=4, controller__OFPacketOut=3, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=3, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=4, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=3, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=4, controller__OFPacketIn__L3_IPv4=1, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=3, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=4}
{controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=6, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, 00:00:00:00:00:00:00:01__OFPacketIn=6, controller__OFPacketIn__unicast=2, controller__OFPacketIn__L3_ARP=4, controller__OFPacketOut=4, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=4, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=4, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=4, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=4, controller__OFPacketIn__L3_IPv4=2, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=4, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=4}
{controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=7, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, 00:00:00:00:00:00:00:01__OFPacketIn=7, controller__OFPacketIn__unicast=2, controller__OFPacketIn__L3_ARP=5, controller__OFPacketOut=4, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=4, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=5, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=4, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=5, controller__OFPacketIn__L3_IPv4=2, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=4, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=5}
{controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=8, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, 00:00:00:00:00:00:00:01__OFPacketIn=8, controller__OFPacketIn__unicast=2, controller__OFPacketIn__L3_ARP=6, controller__OFPacketOut=5, StorageQuery__controller_forwardingconfig=1, 00:00:00:00:00:00:00:01__OFPacketOut=5, 00:00:00:00:00:00:00:01__OFPacketIn__broadcast=6, StorageQuery=6, StorageQuery__controller_firewallrules=1, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=5, StorageQuery__controller_staticflowtableentry=1, controller__OFPacketIn__broadcast=6, controller__OFPacketIn__L3_IPv4=2, StorageQuery__controller_switchconfig=1, StorageQuery__controller_link=1, controller__OFFlowMod=5, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=6}
00:58:11.966 INFO [n.f.j.JythonServer:debugserver-main] Starting DebugServer on :6655
把流量数目统计完了接下去就是流量种类分析了。