一般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,这就是流量交换表的内容。