一般OpenFlow controller有很多种了,有软件实现的,也有硬件实现的,大部分人是用floodlight来做control path的部分。我们这里用Pox来实现,Pox是基于python的。

Openvswitch安装就不说了。

增加一个tun设备(tap2层|tun3层)

yum -y install tunctl  
tunctl –t tap0 –u root  

增加网桥、添加端口tap0

# ovs-vsctl add-br ovsbr0
# ovs-vsctl add-port ovsbr0 tap0
# ovs-vsctl add-port ovsbr0 em1
# ifconfig tap0 promisc up
# ifconfig em1 promisc up

用qemu-kvm来安装虚机

# /usr/bin/qemu-kvm  -smp 2,cores=2 -net tap,ifname=tap0,script=no -net nic,model=rtl8139,macaddr=52:54:00:45:67:30 -m 2048M  ~/multiqueue/fedora.img

下面的命令启动了pox,并且使用了forwarding.l2_learning的插件,顾名思义,这个插件会从进来的流量包中自动建立网桥的流量交换表。

git clone https://github.com/noxrepo/pox  
./pox.py forwarding.l2_learning

使用指定的ip和端口:

#./pox.py  OpenFlow.of_01  --address=192.168.4.197 --port=6666  forwarding.l2_learning

由于Open vSwitch不支付混合的openflow模式,所以一些流量需要用缺省的逻辑来处理,另外的需要用OpenFlow Controller来处理,这种情况下,如果Open vSwitch丢失了跟OpenFlow Controller的联系,就会不知该如何处理包。我们可以设置如果失败,则自动回滚采用openvswitch的缺省策略处理包。

 # ovs-vsctl set-fail-mode ovs-switch standalone

如果设置成secure模式的,如果丢失了到pox的连接,ovs将不转发仁和包

 #ovs-vsctl set-fail-mode ovs-switch secure

将openvswitch连接到pox

# ovs-vsctl set-controller of-switch tcp:192.168.4.197:6666

查看流量交换表

# ovs-ofctl dump-flows of-switch
...
cookie=0x0, duration=14.604s, table=0, n_packets=61, n_bytes=7418, idle_timeout=10, hard_timeout=30,tcp, vlan_tci=0x0000, dl_src=78:2b:cb:4b:db:c5, dl_dst=00:21:9b:8e:36:62, nw_src=192.168.7.189, nw_dst=192.168.1.150, nw_tos=0, tp_src=22, tp_dst=60221  
actions=output:1  
...

上面结果显示了一堆field=value,最后是一个actions,这就是流量交换表的内容。

comments powered by Disqus