基于 Open vSwitch 的 OpenFlow 实践(5)

反过来从端口 p1 发送数据包,由于 p1 现在是带有 VLAN tag 101 的 Access 类型的端口,所以数据包进入端口 p1 之后,会被 OVS 添加 VLAN tag 101 并发送到端口 p0

1

2

3

4

5

6

7

8

9

10

11

12

 

$ ovs-appctl ofproto/trace ovs-switch in_port=101,dl_dst=66:4e:cc:ae:4d:20,

dl_src=46:54:8a:95:dd:f8 -generate

Flow: metadata=0,in_port=101,vlan_tci=0x0000,dl_src=46:54:8a:95:dd:f8,

dl_dst=66:4e:cc:ae:4d:20,dl_type=0x0000

Rule: table=0 cookie=0 priority=0

OpenFlow actions=NORMAL

forwarding to learned port

 

Final flow: unchanged

Relevant fields: skb_priority=0,in_port=101,vlan_tci=0x0000,dl_src=46:54:8a:95:dd:f8,

dl_dst=66:4e:cc:ae:4d:20,dl_type=0x0000,nw_frag=no

Datapath actions: push_vlan(vid=101,pcp=0),2

 

其他 OpenFlow 常用的操作

查看交换机中的所有 Table

1

 

ovs-ofctl dump-tables ovs-switch

 

查看交换机中的所有流表项

1

 

ovs−ofctl dump−flows ovs-switch

 

删除编号为 100 的端口上的所有流表项

1

 

ovs-ofctl del-flows ovs-switch "in_port=100"

 

查看交换机上的端口信息

1

 

ovs-ofctl show ovs-switch

 

通过 Floodlight 管理 OVS

一方面,OpenFlow 控制器可以通过 OpenFlow 协议连接到任何支持 OpenFlow 的交换机,控制器通过和交换机交换流表规则来控制数据流向。另一方面, OpenFlow 控制器向用户提供的界面或者接口,用户可以通过界面对网络架构进行动态的修改,修改交换机的流表规则等等。Floodlight 是一个基于 Apache 协议,使用 Java 开发的企业级 OpenFlow 控制器。我们在下面的例子中演示如何安装 Floodlight,并连接管理 OVS 的过程。

Floodlight 的安装过程非常简单,在另外一台机器上, 下载 Floodlight 源码并编译

1

2

3

4

 

$ git clone git://github.com/floodlight/floodlight.git

$ cd floodlight/

$ ant

$ java -jar target/floodlight.jar

 

运行 Floodlight

1

 

$ java -jar floodlight.jar

 

在安装了 OVS 交换机的节点上,配置 OVS 交换机 ovs-switch,使用 Floodlight 作为控制器。默认情况下,Floodlight 在端口 6633 上进行监听,我们使用 ovs-vsctl 命令配置 OVS 交换机使用 TCP 协议连接到 Floodlight(IP 地址为 9.181.137.182,端口号 6633)。对于一个 OVS 交换机来说,可以同时配置一个或者多个控制器

$ ovs-vsctl set-controller ovs-switch tcp:9.181.137.182:6633

当 OVS 交换机连接到 Floodlight 控制器后,理论上所有的流表规则应该交给控制器来建立。由于 OVS 交换机和控制器之间是通过网络通讯来传递数据的,所以网络连接失败会影响到 Flow 的建立。针对这种情况,OVS 提供了两种处理模式:

standlone: 默认模式。如果 OVS 交换机超过三次无法正常连接到 OpenFlow 控制器,OVS 交换机自己会负责建立流表。在这种模式下,OVS 和常见的 L2 交换机相似。与此同时,OVS 也会继续尝试连接控制器,一旦网络连接恢复,OVS 会再次切换到使用控制器进行流表管理。

secure: 在 secure 模式下,如果 OVS 无法正常连接到 OpenFlow 控制器,OVS 会不停的尝试与控制器重新建立连接,而不会自己负责建立流表。

设置 OVS 的连接模式为 secure 模式

1

 

$ ovs-vsctl set Bridge ovs-switch fail-mode=secure

 

查看 OVS 的状态,“is_connected:true”代表 OVS 已经成功连接到了 Floodlight

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

$ ovs-vsctl show

30282710-d401-4187-8e13-52388f693df7

    Bridge ovs-switch

        Controller "tcp:9.181.137.182:6633"

            is_connected: true

        Port ovs-switch

            Interface ovs-switch

                type: internal

        Port "p0"

            Interface "p0"

                type: internal

        Port "p1"

            tag: 101

            Interface "p1"

                type: internal

        Port "p2"

            Interface "p2"

                type: internal

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13742.html