标签:sdn floodlight 开发
SDN 实践之floodlight控制器统计流量种类
@温州大学12网工蒋暕青、郑明社
在floodlight控制器统计流量的基础上接着把packed-in流量的种类也区分一下。counter这个类琢磨了一个月终于有些会用了。
下面贴代码:
分两个.java
1.
package edu.wzu.steve.trafficanalyser;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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 net.floodlightcontroller.packet.Ethernet;
import net.floodlightcontroller.packet.IPv4;
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{
public final static String BROADCAST = "broadcast";
public final static String MULTICAST = "multicast";
public final static String UNICAST = "unicast";
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 List<String> PacketInType(IOFSwitch sw, OFMessage m, Ethernet eth) {
int l3type = eth.getEtherType() & 0xffff;
String switchIdHex = sw.getStringId();
String etherType = String.format("%04x", eth.getEtherType());
String packetName = m.getType().toClass().getName();
packetName = packetName.substring(packetName.lastIndexOf(‘.‘)+1);
// L2 Type
String l2Type = null;
if (eth.isBroadcast()) {
l2Type = BROADCAST;
}
else if (eth.isMulticast()) {
l2Type = MULTICAST;
}
else {
l2Type = UNICAST;
}
// Use alias for L3 type
// Valid EtherType must be greater than or equal to 0x0600
// It is V1 Ethernet Frame if EtherType < 0x0600
if (l3type < 0x0600) {
etherType = "0599";
}
if (TypeAnalyser.l3TypeAliasMap != null &&
TypeAnalyser.l3TypeAliasMap.containsKey(etherType)) {
etherType = TypeAnalyser.l3TypeAliasMap.get(etherType);
}
else {
etherType = "L3_" + etherType;
}
// L4 counters
if (eth.getPayload() instanceof IPv4) {
// resolve protocol alias
IPv4 ipV4 = (IPv4)eth.getPayload();
String l4name = String.format("%02x", ipV4.getProtocol());
if (TypeAnalyser.l4TypeAliasMap != null &&
TypeAnalyser.l4TypeAliasMap.containsKey(l4name)) {
l4name = TypeAnalyser.l4TypeAliasMap.get(l4name);
}
else {
l4name = "L4_" + l4name;
}
List<String>list = new ArrayList<String>();
list.add(l2Type);
list.add(etherType);
list.add(l4name);
//使用Iterator迭代器遍历出集合的元素并打印
for(Iterator<String> i = list.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
return null;
}
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;
}
}
2.另一个
package edu.wzu.steve.trafficanalyser;
import java.util.HashMap;
import java.util.Map;
public class TypeAnalyser {
/**
* Class to contain some statically initialized data
* @author readams
*
*/
public static final Map<String,String> l3TypeAliasMap =
new HashMap<String, String>();
static {
l3TypeAliasMap.put("0599", "L3_V1Ether");
l3TypeAliasMap.put("0800", "L3_IPv4");
l3TypeAliasMap.put("0806", "L3_ARP");
l3TypeAliasMap.put("8035", "L3_RARP");
l3TypeAliasMap.put("809b", "L3_AppleTalk");
l3TypeAliasMap.put("80f3", "L3_AARP");
l3TypeAliasMap.put("8100", "L3_802_1Q");
l3TypeAliasMap.put("8137", "L3_Novell_IPX");
l3TypeAliasMap.put("8138", "L3_Novell");
l3TypeAliasMap.put("86dd", "L3_IPv6");
l3TypeAliasMap.put("8847", "L3_MPLS_uni");
l3TypeAliasMap.put("8848", "L3_MPLS_multi");
l3TypeAliasMap.put("8863", "L3_PPPoE_DS");
l3TypeAliasMap.put("8864", "L3_PPPoE_SS");
l3TypeAliasMap.put("886f", "L3_MSFT_NLB");
l3TypeAliasMap.put("8870", "L3_Jumbo");
l3TypeAliasMap.put("889a", "L3_HyperSCSI");
l3TypeAliasMap.put("88a2", "L3_ATA_Ethernet");
l3TypeAliasMap.put("88a4", "L3_EtherCAT");
l3TypeAliasMap.put("88a8", "L3_802_1ad");
l3TypeAliasMap.put("88ab", "L3_Ether_Powerlink");
l3TypeAliasMap.put("88cc", "L3_LLDP");
l3TypeAliasMap.put("88cd", "L3_SERCOS_III");
l3TypeAliasMap.put("88e5", "L3_802_1ae");
l3TypeAliasMap.put("88f7", "L3_IEEE_1588");
l3TypeAliasMap.put("8902", "L3_802_1ag_CFM");
l3TypeAliasMap.put("8906", "L3_FCoE");
l3TypeAliasMap.put("9000", "L3_Loop");
l3TypeAliasMap.put("9100", "L3_Q_in_Q");
l3TypeAliasMap.put("cafe", "L3_LLT");
}
protected static final Map<String,String> l4TypeAliasMap =
new HashMap<String, String>();
static {
l4TypeAliasMap.put("00", "L4_HOPOPT");
l4TypeAliasMap.put("01", "L4_ICMP");
l4TypeAliasMap.put("02", "L4_IGAP_IGMP_RGMP");
l4TypeAliasMap.put("03", "L4_GGP");
l4TypeAliasMap.put("04", "L4_IP");
l4TypeAliasMap.put("05", "L4_ST");
l4TypeAliasMap.put("06", "L4_TCP");
l4TypeAliasMap.put("07", "L4_UCL");
l4TypeAliasMap.put("08", "L4_EGP");
l4TypeAliasMap.put("09", "L4_IGRP");
l4TypeAliasMap.put("0a", "L4_BBN");
l4TypeAliasMap.put("0b", "L4_NVP");
l4TypeAliasMap.put("0c", "L4_PUP");
l4TypeAliasMap.put("0d", "L4_ARGUS");
l4TypeAliasMap.put("0e", "L4_EMCON");
l4TypeAliasMap.put("0f", "L4_XNET");
l4TypeAliasMap.put("10", "L4_Chaos");
l4TypeAliasMap.put("11", "L4_UDP");
l4TypeAliasMap.put("12", "L4_TMux");
l4TypeAliasMap.put("13", "L4_DCN");
l4TypeAliasMap.put("14", "L4_HMP");
l4TypeAliasMap.put("15", "L4_Packet_Radio");
l4TypeAliasMap.put("16", "L4_XEROX_NS_IDP");
l4TypeAliasMap.put("17", "L4_Trunk_1");
l4TypeAliasMap.put("18", "L4_Trunk_2");
l4TypeAliasMap.put("19", "L4_Leaf_1");
l4TypeAliasMap.put("1a", "L4_Leaf_2");
l4TypeAliasMap.put("1b", "L4_RDP");
l4TypeAliasMap.put("1c", "L4_IRTP");
l4TypeAliasMap.put("1d", "L4_ISO_TP4");
l4TypeAliasMap.put("1e", "L4_NETBLT");
l4TypeAliasMap.put("1f", "L4_MFE");
l4TypeAliasMap.put("20", "L4_MERIT");
l4TypeAliasMap.put("21", "L4_DCCP");
l4TypeAliasMap.put("22", "L4_Third_Party_Connect");
l4TypeAliasMap.put("23", "L4_IDPR");
l4TypeAliasMap.put("24", "L4_XTP");
l4TypeAliasMap.put("25", "L4_Datagram_Delivery");
l4TypeAliasMap.put("26", "L4_IDPR");
l4TypeAliasMap.put("27", "L4_TP");
l4TypeAliasMap.put("28", "L4_ILTP");
l4TypeAliasMap.put("29", "L4_IPv6_over_IPv4");
l4TypeAliasMap.put("2a", "L4_SDRP");
l4TypeAliasMap.put("2b", "L4_IPv6_RH");
l4TypeAliasMap.put("2c", "L4_IPv6_FH");
l4TypeAliasMap.put("2d", "L4_IDRP");
l4TypeAliasMap.put("2e", "L4_RSVP");
l4TypeAliasMap.put("2f", "L4_GRE");
l4TypeAliasMap.put("30", "L4_DSR");
l4TypeAliasMap.put("31", "L4_BNA");
l4TypeAliasMap.put("32", "L4_ESP");
l4TypeAliasMap.put("33", "L4_AH");
l4TypeAliasMap.put("34", "L4_I_NLSP");
l4TypeAliasMap.put("35", "L4_SWIPE");
l4TypeAliasMap.put("36", "L4_NARP");
l4TypeAliasMap.put("37", "L4_Minimal_Encapsulation");
l4TypeAliasMap.put("38", "L4_TLSP");
l4TypeAliasMap.put("39", "L4_SKIP");
l4TypeAliasMap.put("3a", "L4_ICMPv6");
l4TypeAliasMap.put("3b", "L4_IPv6_No_Next_Header");
l4TypeAliasMap.put("3c", "L4_IPv6_Destination_Options");
l4TypeAliasMap.put("3d", "L4_Any_host_IP");
l4TypeAliasMap.put("3e", "L4_CFTP");
l4TypeAliasMap.put("3f", "L4_Any_local");
l4TypeAliasMap.put("40", "L4_SATNET");
l4TypeAliasMap.put("41", "L4_Kryptolan");
l4TypeAliasMap.put("42", "L4_MIT_RVDP");
l4TypeAliasMap.put("43", "L4_Internet_Pluribus");
l4TypeAliasMap.put("44", "L4_Distributed_FS");
l4TypeAliasMap.put("45", "L4_SATNET");
l4TypeAliasMap.put("46", "L4_VISA");
l4TypeAliasMap.put("47", "L4_IP_Core");
l4TypeAliasMap.put("4a", "L4_Wang_Span");
l4TypeAliasMap.put("4b", "L4_Packet_Video");
l4TypeAliasMap.put("4c", "L4_Backroom_SATNET");
l4TypeAliasMap.put("4d", "L4_SUN_ND");
l4TypeAliasMap.put("4e", "L4_WIDEBAND_Monitoring");
l4TypeAliasMap.put("4f", "L4_WIDEBAND_EXPAK");
l4TypeAliasMap.put("50", "L4_ISO_IP");
l4TypeAliasMap.put("51", "L4_VMTP");
l4TypeAliasMap.put("52", "L4_SECURE_VMTP");
l4TypeAliasMap.put("53", "L4_VINES");
l4TypeAliasMap.put("54", "L4_TTP");
l4TypeAliasMap.put("55", "L4_NSFNET_IGP");
l4TypeAliasMap.put("56", "L4_Dissimilar_GP");
l4TypeAliasMap.put("57", "L4_TCF");
l4TypeAliasMap.put("58", "L4_EIGRP");
l4TypeAliasMap.put("59", "L4_OSPF");
l4TypeAliasMap.put("5a", "L4_Sprite_RPC");
l4TypeAliasMap.put("5b", "L4_Locus_ARP");
l4TypeAliasMap.put("5c", "L4_MTP");
l4TypeAliasMap.put("5d", "L4_AX");
l4TypeAliasMap.put("5e", "L4_IP_within_IP");
l4TypeAliasMap.put("5f", "L4_Mobile_ICP");
l4TypeAliasMap.put("61", "L4_EtherIP");
l4TypeAliasMap.put("62", "L4_Encapsulation_Header");
l4TypeAliasMap.put("64", "L4_GMTP");
l4TypeAliasMap.put("65", "L4_IFMP");
l4TypeAliasMap.put("66", "L4_PNNI");
l4TypeAliasMap.put("67", "L4_PIM");
l4TypeAliasMap.put("68", "L4_ARIS");
l4TypeAliasMap.put("69", "L4_SCPS");
l4TypeAliasMap.put("6a", "L4_QNX");
l4TypeAliasMap.put("6b", "L4_Active_Networks");
l4TypeAliasMap.put("6c", "L4_IPPCP");
l4TypeAliasMap.put("6d", "L4_SNP");
l4TypeAliasMap.put("6e", "L4_Compaq_Peer_Protocol");
l4TypeAliasMap.put("6f", "L4_IPX_in_IP");
l4TypeAliasMap.put("70", "L4_VRRP");
l4TypeAliasMap.put("71", "L4_PGM");
l4TypeAliasMap.put("72", "L4_0_hop");
l4TypeAliasMap.put("73", "L4_L2TP");
l4TypeAliasMap.put("74", "L4_DDX");
l4TypeAliasMap.put("75", "L4_IATP");
l4TypeAliasMap.put("76", "L4_ST");
l4TypeAliasMap.put("77", "L4_SRP");
l4TypeAliasMap.put("78", "L4_UTI");
l4TypeAliasMap.put("79", "L4_SMP");
l4TypeAliasMap.put("7a", "L4_SM");
l4TypeAliasMap.put("7b", "L4_PTP");
l4TypeAliasMap.put("7c", "L4_ISIS");
l4TypeAliasMap.put("7d", "L4_FIRE");
l4TypeAliasMap.put("7e", "L4_CRTP");
l4TypeAliasMap.put("7f", "L4_CRUDP");
l4TypeAliasMap.put("80", "L4_SSCOPMCE");
l4TypeAliasMap.put("81", "L4_IPLT");
l4TypeAliasMap.put("82", "L4_SPS");
l4TypeAliasMap.put("83", "L4_PIPE");
l4TypeAliasMap.put("84", "L4_SCTP");
l4TypeAliasMap.put("85", "L4_Fibre_Channel");
l4TypeAliasMap.put("86", "L4_RSVP_E2E_IGNORE");
l4TypeAliasMap.put("87", "L4_Mobility_Header");
l4TypeAliasMap.put("88", "L4_UDP_Lite");
l4TypeAliasMap.put("89", "L4_MPLS");
l4TypeAliasMap.put("8a", "L4_MANET");
l4TypeAliasMap.put("8b", "L4_HIP");
l4TypeAliasMap.put("8c", "L4_Shim6");
l4TypeAliasMap.put("8d", "L4_WESP");
l4TypeAliasMap.put("8e", "L4_ROHC");
}
}
这样运行是没有错的。
然后用mini net建立拓扑接着eclipse控制台里面就又有流量种类又有流量大小了。
具体的信息我贴出来一点:
里面是5条信息流
{00:00:00:00:00:00:00:01__OFPacketIn=31, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=1, controller__OFPacketIn__unicast=1, 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, 00:00:00:00:00:00:00:01__OFPacketIn__multicast=27, StorageQuery=7, StorageQuery__controller_firewallrules=1, StorageQuery__controller_staticflowtableentry=1, StorageQuery__controller_switchconfig=2, StorageQuery__controller_link=1, controller__OFFlowMod=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv6=27, controller__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=1, controller__OFPacketIn=31, controller__OFPacketIn__L3_ARP=3, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=2, controller__OFPacketIn__multicast=27, controller__OFPacketIn__broadcast=3, controller__OFPacketIn__L3_IPv4=1, controller__OFPacketIn__L3_IPv6=27, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=3}
{00:00:00:00:00:00:00:01__OFPacketIn=32, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=1, controller__OFPacketIn__unicast=1, 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, 00:00:00:00:00:00:00:01__OFPacketIn__multicast=27, StorageQuery=7, StorageQuery__controller_firewallrules=1, StorageQuery__controller_staticflowtableentry=1, StorageQuery__controller_switchconfig=2, StorageQuery__controller_link=1, controller__OFFlowMod=3, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv6=27, controller__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=1, controller__OFPacketIn=32, controller__OFPacketIn__L3_ARP=4, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=3, controller__OFPacketIn__multicast=27, controller__OFPacketIn__broadcast=4, controller__OFPacketIn__L3_IPv4=1, controller__OFPacketIn__L3_IPv6=27, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=1, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=4}
{00:00:00:00:00:00:00:01__OFPacketIn=33, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, controller__OFPacketIn__unicast=2, 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, 00:00:00:00:00:00:00:01__OFPacketIn__multicast=27, StorageQuery=7, StorageQuery__controller_firewallrules=1, StorageQuery__controller_staticflowtableentry=1, StorageQuery__controller_switchconfig=2, StorageQuery__controller_link=1, controller__OFFlowMod=4, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv6=27, controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=33, controller__OFPacketIn__L3_ARP=4, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=4, controller__OFPacketIn__multicast=27, controller__OFPacketIn__broadcast=4, controller__OFPacketIn__L3_IPv4=2, controller__OFPacketIn__L3_IPv6=27, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=4}
{00:00:00:00:00:00:00:01__OFPacketIn=34, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, controller__OFPacketIn__unicast=2, 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, 00:00:00:00:00:00:00:01__OFPacketIn__multicast=27, StorageQuery=7, StorageQuery__controller_firewallrules=1, StorageQuery__controller_staticflowtableentry=1, StorageQuery__controller_switchconfig=2, StorageQuery__controller_link=1, controller__OFFlowMod=4, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv6=27, controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=34, controller__OFPacketIn__L3_ARP=5, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=4, controller__OFPacketIn__multicast=27, controller__OFPacketIn__broadcast=5, controller__OFPacketIn__L3_IPv4=2, controller__OFPacketIn__L3_IPv6=27, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=5}
{00:00:00:00:00:00:00:01__OFPacketIn=35, 00:00:00:00:00:00:00:01__OFPacketIn__unicast=2, controller__OFPacketIn__unicast=2, 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, 00:00:00:00:00:00:00:01__OFPacketIn__multicast=27, StorageQuery=7, StorageQuery__controller_firewallrules=1, StorageQuery__controller_staticflowtableentry=1, StorageQuery__controller_switchconfig=2, StorageQuery__controller_link=1, controller__OFFlowMod=5, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv6=27, controller__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_IPv4=2, controller__OFPacketIn=35, controller__OFPacketIn__L3_ARP=6, StorageQuery__controller_topologyconfig=1, 00:00:00:00:00:00:00:01__OFFlowMod=5, controller__OFPacketIn__multicast=27, controller__OFPacketIn__broadcast=6, controller__OFPacketIn__L3_IPv4=2, controller__OFPacketIn__L3_IPv6=27, 00:00:00:00:00:00:00:01__OFPacketIn__L4_ICMP=2, 00:00:00:00:00:00:00:01__OFPacketIn__L3_ARP=6}
有志同道合的可以加群325923393
接下去就是做数据中心的qos了。
标签:sdn floodlight 开发
原文地址:http://blog.csdn.net/tomstrong_369/article/details/44827415