SDN 实践之floodlight控制器统计流量种类.docx
《SDN 实践之floodlight控制器统计流量种类.docx》由会员分享,可在线阅读,更多相关《SDN 实践之floodlight控制器统计流量种类.docx(16页珍藏版)》请在冰豆网上搜索。
![SDN 实践之floodlight控制器统计流量种类.docx](https://file1.bdocx.com/fileroot1/2022-10/29/3d0e5343-e59e-47cd-ba5d-fe97e2769238/3d0e5343-e59e-47cd-ba5d-fe97e27692381.gif)
SDN实践之floodlight控制器统计流量种类
SDN实践之floodlight控制器统计流量种类
@温州大学12网工
在floodlight控制器统计流量的基础上接着把packed-in流量的种类也区分一下。
counter这个类琢磨了一个月终于有些会用了。
下面贴代码:
分两个.java
1.
packageedu.wzu.steve.trafficanalyser;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Map.Entry;
importorg.restlet.resource.ResourceException;
importorg.restlet.resource.ServerResource;
importnet.floodlightcontroller.counter.CounterValue;
importnet.floodlightcontroller.counter.ICounter;
importnet.floodlightcontroller.packet.Ethernet;
importnet.floodlightcontroller.packet.IPv4;
importorg.restlet.resource.Get;
importnet.floodlightcontroller.core.FloodlightContext;
importnet.floodlightcontroller.core.IFloodlightProviderService;
importnet.floodlightcontroller.core.IOFMessageListener;
importnet.floodlightcontroller.core.IOFSwitch;
importnet.floodlightcontroller.core.module.FloodlightModuleContext;
importnet.floodlightcontroller.core.module.FloodlightModuleException;
importnet.floodlightcontroller.core.module.IFloodlightModule;
importnet.floodlightcontroller.core.module.IFloodlightService;
importnet.floodlightcontroller.counter.ICounterStoreService;
importorg.openflow.protocol.OFMessage;
importorg.openflow.protocol.OFType;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
publicclassTrafficAnalyserextendsServerResourceimplementsIOFMessageListener,IFloodlightModule{
publicfinalstaticStringBROADCAST="broadcast";
publicfinalstaticStringMULTICAST="multicast";
publicfinalstaticStringUNICAST="unicast";
protectedICounterStoreServicecounterStore;
protectedIFloodlightProviderServicefloodlightProvider;
protectedstaticLoggerlogger;
@Override
publicStringgetName(){
//TODOAuto-generatedmethodstub
returnTrafficAnalyser.class.getSimpleName();
}
@Override
publicbooleanisCallbackOrderingPrereq(OFTypetype,Stringname){
//TODOAuto-generatedmethodstub
returnfalse;
}
@Override
publicbooleanisCallbackOrderingPostreq(OFTypetype,Stringname){
//TODOAuto-generatedmethodstub
returnfalse;
}
@Override
publicCollectionextendsIFloodlightService>>getModuleServices(){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicMapextendsIFloodlightService>,IFloodlightService>getServiceImpls(){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicCollectionextendsIFloodlightService>>getModuleDependencies(){
//TODOAuto-generatedmethodstub
CollectionextendsIFloodlightService>>l=
newArrayListextendsIFloodlightService>>();
l.add(IFloodlightProviderService.class);
returnl;
}
@Override
publicvoidinit(FloodlightModuleContextcontext)
throwsFloodlightModuleException{
this.floodlightProvider=context.getServiceImpl(IFloodlightProviderService.class);
this.counterStore=context.getServiceImpl(ICounterStoreService.class);
logger=LoggerFactory.getLogger(TrafficAnalyser.class);
}
@Override
publicvoidstartUp(FloodlightModuleContextcontext){
floodlightProvider.addOFMessageListener(OFType.PACKET_IN,this);
}
@Get("json")
publicMapretrieve(){
Mapmodel=newHashMap();
CounterValuev;
Mapcounters=this.counterStore.getAll();
if(counters!
=null){
Iterator>it=
counters.entrySet().iterator();
while(it.hasNext()){
Entryentry=it.next();
StringcounterName=entry.getKey();
v=entry.getValue().getCounterValue();
if(CounterValue.CounterType.LONG==v.getType()){
model.put(counterName,v.getLong());
}elseif(v.getType()==CounterValue.CounterType.DOUBLE){
model.put(counterName,v.getDouble());
}
}
}
returnmodel;
}
protectedListPacketInType(IOFSwitchsw,OFMessagem,Etherneteth){
intl3type=eth.getEtherType()&0xffff;
StringswitchIdHex=sw.getStringId();
StringetherType=String.format("%04x",eth.getEtherType());
StringpacketName=m.getType().toClass().getName();
packetName=packetName.substring(packetName.lastIndexOf('.')+1);
//L2Type
Stringl2Type=null;
if(eth.isBroadcast()){
l2Type=BROADCAST;
}
elseif(eth.isMulticast()){
l2Type=MULTICAST;
}
else{
l2Type=UNICAST;
}
//UsealiasforL3type
//ValidEtherTypemustbegreaterthanorequalto0x0600
//ItisV1EthernetFrameifEtherType<0x0600
if(l3type<0x0600){
etherType="0599";
}
if(TypeAnalyser.l3TypeAliasMap!
=null&&
TypeAnalyser.l3TypeAliasMap.containsKey(etherType)){
etherType=TypeAnalyser.l3TypeAliasMap.get(etherType);
}
else{
etherType="L3_"+etherType;
}
/