本节主要是关于Floodlight的深入学习。
在开始以前,请确定已经熟悉了前两节的内容,本文将会略过一些基本的命令和操作。
PS,开始之前我看了一下networkstatic.net上的关于OpenFlow的内容,发现作者的实验思路和我的类似,呵呵,只是平台不一样,这里我也会提到一些不同的地方,对比学习以后,可能收获会更大。
首先补充一下DataPath的概念,OpenFlow就是控制和数据转发分离,而控制端,就叫做Controller Path,比如floodlight等;负责转发数据的数据转发端,就叫做DataPath,也就是支持OpenFlow的硬件或者软件交换机Switch。
Floodlight进阶学习:
具体的了解Floodlight,可以先参考http://opennetsummit.org/talks/ONS2012/sherwood-mon-floodlight.pdf
这里详细列举几点:
1)模块化,可以根据需要加载相应的模块。目前含有的主要模块:
net.floodlightcontroller.core.FloodlightProvider
net.floodlightcontroller.storage.memory.MemoryStorageSource
net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl
net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager
net.floodlightcontroller.topology.TopologyManager
net.floodlightcontroller.forwarding.Forwarding
net.floodlightcontroller.flowcache.FlowReconcileManager
net.floodlightcontroller.core.OFMessageFilterManager
net.floodlightcontroller.staticflowentry.StaticFlowEntryPusher
net.floodlightcontroller.perfmon.PktInProcessingTime
net.floodlightcontroller.ui.web.StaticWebRoutable
net.floodlightcontroller.hub.Hub
net.floodlightcontroller.jython.JythonDebugInterface
这些信息在Floodlight启动时可以看到。那么,Floodlight的工作流程是这样的:
FloodlightProvider作为核心模块,负责将收到的OF Packet转换为一个个事件,而其他模块向FloodlightProvider进行注册,注册后成为一个service,然后就可以处理相应的事件。
各个主要模块的作用如下图:
2)模块化进阶
熟悉NOX的就知道,NOX只是作为一个平台,各种基于OF的功能都是在NOX上作为一个APP实现。那么,Floodlight的模块化结构,也支持这种使用方式,也就是说,你可以选择Floodlight启动时候所加载的模块,也可以加入你自己定义的功能的模块。Floodlight的功能,是取决于你的。那么如何操作,如下:
启动Floodlight的时候通过–cf参数可以指定模块的配置(也就是让Floodlight装载哪些模块)
默认的有一份配置文件,在src/main/resources/floodlightdefault.properties,可以看看它的内容,对于配置文件的优先级,有以下规则:
- The file specified by using the -cf option
- The config/floodlight.properties file if it exists
- The floodlightdefault.properties file built into the jar (under src/main/resources)
那么,我们在前面以
sudo java -jar floodlight.jar
启动Floodlight实际上是用的整合Floodlight程序内的配置规则。
让我们来做个实验:在前面的实验中,mininet默认创建的拓扑(sudo mn)实际上执行pingall是能够互相Ping通的,这是因为Floodlight在启动的时候载入了net.floodlightcontroller.forwarding.Forwarding这个模块,这个是一个二层交换机的模块,我们去掉他,在配置文件中去掉这一项,然后再Floodlight目录下执行ant,从新整合。(当然也可以使用–cf指定配置文件)。
随后启动Floodlight,启动mininet,创建默认拓扑,此时执行pingall发现host间就无法相互ping通了。此时怎么办呢,别着急,慢慢来。下一节会讲。这个环境先放在这里。
3)OpenStack支持
这个请参考相应文档。
http://floodlight.openflowhub.org/quantum-and-openstack/
https://github.com/floodlight/quantum-restproxy
4)Static flow pusher以及python API
将会在下一节中讲到。
最后,以一张图进行一个总结,部分未涉及的内容下部分中讲。
相关链接: