这一节主要讲讲这个环境下的流表操作。
一、如何操作流表:
此环境下,或者说,在使用了OpenvSwitch作为DataPath的环境下,OpenvSwitch提供了工具dpctl以及vsctl可以用来直接与DataPath进行交互,向DataPath中读取或者写入流表。但是这种方式忽略了controller,所以,这里我们引入Floodlight的static flow pusher机制。
简单来说,Floodlight将自己的API通过Rest Api的形式向外暴露,关于Rest Api,简单来讲,就是讲程序的API封装成为通用的http GET/PUT的形式,这样的话无需关注程序实现细节,通过发送http请求即可完成API操作。
所以,我们可以通过Floodlight的Restful api来向Floodlight请求各种信息,包括交换机状态,能力,拓扑等等,而static flow pusher这套机制则是通过Restful api来进行流表的操作,包括添加,删除流表等等。
需要注意:通过Floodlight的Restful api返回的信息是以json格式封装的;Floodlight中的配置、系统、流表信息是存于内存中的(通过Rest api可以知道),以后Floodlight可能会将这个信息放于独立的数据库而不是内存中。
二、流表试验:
1)Restful api形式:
由(三)中所述,启动环境,这里Floodlight需要指定配置文件,取消forwarding模块的载入。此时进入mininet后pingall是ping不通的。
我们先通过Floodlight的Restful api来加入流表项:
sudo curl -d ‘{“switch”: “00:00:00:00:00:00:00:01″, “name”:”flow-mod-1″, “cookie”:”0″, “priority”:”32768″, “ingress-port”:”1″,”active”:”true”, “actions”:”output=2″}’ http://<controller_ip>:8080/wm/staticflowentrypusher/json
sudo curl -d ‘{“switch”: “00:00:00:00:00:00:00:01″, “name”:”flow-mod-2″, “cookie”:”0″, “priority”:”32768″, “ingress-port”:”2″,”active”:”true”, “actions”:”output=1″}’ http://<controller_ip>:8080/wm/staticflowentrypusher/json
这里注意两点:一是每个流表项的名字不能一样,二是以上的流表项可以看出,是基于port的匹配。
我们再通过Floodlight的Restful api来读取流表,以下两个都可以:
sudo curl http://192.168.1.100:8080/wm/core/switch/1/flow/json
sudo curl http://192.168.1.100:8080/wm/staticflowentrypusher/list/all/json
不通之处在于,一个通过core,一个通过static flow pusher来获取流表项,当然,内容不会有太大差别,返回结果:
OK,此时mininet中执行pingall,发现host间能相互ping通,也可以进WEB UI,看看效果。
最后,删除掉流表项,以下一个是删除全部,一个是删除某一项:
sudo curl http://192.168.1.208:8080/wm/staticflowentrypusher /clear/<dpid>/json
sudo curl -X DELETE -d ‘{“name”:”flow-mod-1″}’ http://<controller_ip>:8080/wm/staticflowentrypusher/json
最后,在mininet中再执行pingall,hots间不能通。
2)DataPath工具形式
所谓DataPath工具,就是在DataPath开发的时候,作为控制DataPath的一套工具。实际上在OpenFlow环境中控制DataPath是应该由controller来实现的。但为了调试等方便还是会提供直接控制DataPath的工具。举例来说,controller与DataPath交互默认是6633端口,而OpenvSwitch提供的dpctl等工具与OpenvSwitch交互的端口是6634.
比较常用的有:
dpctl show tcp:<datapath-ip>:6634 #显示基本信息
dpctl dump-flows tcp:<datapath-ip>:6634 #显示流表
dpctl add-flow tcp:127.0.0.1:6634 in_port=2,idle_timeout=360, actions=output:3 #添加流表
参考资料:
Restful Api:
http://developer.51cto.com/art/200908/141825.htm
http://kb.cnblogs.com/page/114905/
http://blog.csdn.net/excel_bat/article/details/7285241
Floodlight的static flow pusher机制以及REST api:
http://www.openflowhub.org/display/floodlightcontroller/Static+Flow+Pusher
http://www.openflowhub.org/display/floodlightcontroller/REST+API
json:
http://baike.baidu.com/view/136475.htm
相关链接: