Floodlight+Mininet搭建OpenFlow(四):流表操作

这一节主要讲讲这个环境下的流表操作。

一、如何操作流表:

此环境下,或者说,在使用了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来获取流表项,当然,内容不会有太大差别,返回结果:

Floodlight+Mininet搭建OpenFlow(四):流表操作_第1张图片

Floodlight+Mininet搭建OpenFlow(四):流表操作_第2张图片

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


相关链接:

  1. Floodlight+Mininet搭建OpenFlow(一):环境搭建 :http://blog.csdn.net/zwto1/article/details/23280201
  2. Floodlight+Mininet搭建OpenFlow(二):协议分析:http://blog.csdn.net/zwto1/article/details/23282579
  3.  Floodlight+Mininet搭建OpenFlow(三):Floodlight进阶:http://blog.csdn.net/zwto1/article/details/23432093
  4. Floodlight+Mininet搭建OpenFlow(五):复杂网络:http://blog.csdn.net/zwto1/article/details/23432431

你可能感兴趣的:(Floodlight+Mininet搭建OpenFlow(四):流表操作)