OpenFlowJ-Loxigen简介
Floodlight v1.0及以上版本的依靠新的OpenFlowJ-Loxigen库。OpenFlowJ-Loxigen支持的OpenFlow版本由1.0到1.4。所有OpenFlow的概念和类型都可以通过OpenFlowJ-Loxigen来获得。OpenFlowJ-Loxigen支持更新,更优化地方式去创建OpenFlow消息,匹配域(Matches),动作集(Actions),流表更改(FlowMods)等等。本文主要分析OpenFlowJ-Loxigen库当中一些常用的类和构造方法。
OFFactory
几乎所有OpenFlow概念(OFObject,例如:Match, OFAction, OFMessage, etc.)可以被构造器构造,所有的构造器都通过OFFactory暴露。由于不同版本的OpenFlow协议存在差异性,所以每个OpenFlow协议版本对应一个特地的工厂类:
OFFactoryVer10
OFFactoryVer11
OFFactoryVer12
OFFactoryVer13
OFFactoryVer14(在floodlight中不被官方支持)
这些都实现了OFFactory接口,所以你可以简单地使用OFFactory接口,忽略存在不同版本的工厂类。
有很多种方法可以得到你想要的OFFactory实例。你可以从OpenFlowJ-Loxigen,通过指定OFVersion的枚举值来请求一个特定版本的OFFactory。
OFFactory my13Factory = OFFactories.getOFFactory(OFVersion.OF_13); //取得一个OpenFlow 1.3的工厂类
更加实用的是,你可以从IOFSwitch中取得工厂类。
IOFSwitch mySwitch = switchService.getSwitch(DatapathId.of("00:00:00:00:00:00:00:01"));
OFFactory myFactory = mySwitch.getOFFactory(); //取得与请求交换机版本相符的工厂类版本
也可以从由OFFactory生成的已存在对象中取得一个特定的OFFactory,所有从OFFactory构造的对象中得到的OFVersion和用OFFactory构造出来的相同。
OFVersion flowModVersion = myFlowMod.getVersion(); //假设myFlowMod已经被构造好
OFFactory myFactory