POX是由NOX演变而来,其底层模块由C++实现,上层应用能够用C++或Python编写,它的核心做用是提供快速开发网络控制软件原型的平台。POX和OpenFlow交换机进行交互,能够用于软件定义网络这个新兴学科的基础研究,好比探索和原型分布、SDN调试、网络虚拟化、控制器设计和编程模型。node
在本文中设备使用的都是基于Ubuntu12.04版本的Linux操做系统,在此系统的基础上进行安装获取。IP地址为192.168.5.203的设备做为安装POX的控制器,192.168.5.204安装Open vSwitch(如下简写为OvS),用于实验安装部署。python
POX基于Python2.7的环境运行,官方版本的POX能够运行在Windows、Mac OS、以及Linux操做系统中。POX源码已在github发布,可将POX的源码下载到本地机器进行安装使用,具体操做命令以下:git
在192.168.5.203上直接下载pox源码:github
Shellweb
1ajax |
git clone http://github.com/noxrepo/pox编程 |
在192.168.5.204的Open vSwitch发起消息主动链接控制器:ubuntu
Shell浏览器
1网络 |
ovs-controller tcp:192.168.5.203:6633 --detach |
在192.168.5.203上获取源码后,直接启动POX控制器的命令以下:
Shell
1 2 |
cd pox/ ./pox.py openflow.of_01 forwarding.l2_learning |
pox.py是程序的入口,须要openflow.of_01库解释后面的参数,forwarding.l2_learning为POX提供的组件。POX默认开启6633端口监听,控制器启动后会有POX>输入提示。
如下结果显示POX正确启动,且发现交换机设备:
如一台安装OvS机器下挂的主机设备不能通讯,但若是OvS被一个POX控制,那么这些主机就能相互通讯。
在192.168.5.204上查看链接已启动的POX的OvS状态:
Shell
1 2 3 4 5 6 7 8 |
root@ubuntu204:~# ovs-vsctl show c1f1ec21-92d6-418d-9d82-34fc82a586a4 Bridge "br0" Controller "tcp:192.168.5.203:6633" is_connected: true Port "br0" Interface "br0" type: internal |
“true”结果表示OvS正确链接到IP地址为192.168.5.203的POX控制器,POX管控OvS下挂的设备相互通讯。
本小节主要讲POX的两个配置,一是如何修改POX监听端口,二是如何配置POX的可视化Web界面。
POX的监听端口默认是6633,修改监听端口的方式有如下两种:
1)临时修改方法
每次启动POX时指定监听端口,如指定的端口为6636,则在命令行后添加:
Shell
1 |
openflow.of_01 --port=6636 |
2)修改控制器的默认端口方法
修改/pox/openflow/of_01.py文件,如指定的端口为6636,则将文件中全部的port=6633改成port=6636。
POX支持GUI,经过POXDesk等工具实现,本小节介绍如何配置POX的GUI。具体操做以下:
1)获取POXDesk
进入POX主目录下面的ext目录:
Shell
1 2 |
cd ./pox/ext git clone https://github.com/MurphyMc/poxdesk |
2)获取qooxdoo
下载qooxdoo代码压缩包,而后把解压后文件夹名字改为qx
Shell
1 2 3 4 |
cd poxdesk wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip unzip qooxdoo-2.0.2-sdk.zip mv qooxdoo-2.0.2-sdk qx |
3)初始化poxdesk
进入poxdesk目录,执行命令./generate.py,而后再进入POX主目录
Shell
1 2 3 |
cd poxdesk ./generate.py cd ../../.. |
4)启动POX
Shell
1 |
./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk |
5)访问Web
用浏览器访问http://pox-ip:8000/poxdesk,默认端口8000,POX的Web访问界面以下图所示。
图 POX的GUI界面
启动POX时,须要运行pox.py 或debug-pox.py。前者是在通常的状况下运行POX,后者主要用于调试POX控制器,所以若是要在POX中作开发,一般会选用debug-pox.py来启动POX。POS启动命令中的可选参数主要包括verbose、no-cli、no-openflow,具体描述信息及其余参数能够借助命令./pox.py --help查看。
五、实例在python脚本中启动POX
我把pox安装在$HOME/prg/mypython/mininet
cd $HOME/prg/mypython/mininet
~/prg/mypython/mininet$ vi ./mymininet2.py
#!/usr/bin/python #coding=utf-8 from mininet.net import Mininet from mininet.node import Controller from mininet.topo import SingleSwitchTopo from mininet.log import setLogLevel import os class POXBridge( Controller ): "Custom Controller class to invoke POX forwarding.l2_learning" def start ( self ): "Start POX learning switch" self.pox = '%s/pox/pox.py' % os.getcwd()#POX安装在$HOME/prg/mypython/mininet self.cmd( self.pox, 'forwarding.l2_learning &' ) #self.cmd( self.pox, 'forwarding.hub &' ) def stop ( self ): "Stop POX" self.cmd( 'kill %' + self.pox ) controllers = { 'poxbridge': POXBridge } if __name__ == '__main__': setLogLevel( 'info' ) net = Mininet( topo=SingleSwitchTopo( 2), controller=POXBridge ) net.start() net.pingAll() h1, h2 = net.get( 'h1', 'h2' ) #net.iperf((h1, h2)) result1=h1.cmd('ping -c 5 10.0.0.2') print result1 result2=h2.cmd('ping -c 5 10.0.0.1') print result2 net.stop()
运行
~/prg/mypython/mininet$ chmod a+x mymininet2.py ~/prg/mypython/mininet$ sudo ./mymininet2.py *** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: s1 *** Adding links: (h1, s1) (h2, s1) *** Configuring hosts h1 h2 *** Starting controller c0 *** Starting 1 switches s1 ... *** Ping: testing ping reachability h1 -> X h2 -> X *** Results: 100% dropped (0/2 received) PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. From 10.0.0.1 icmp_seq=1 Destination Host Unreachable From 10.0.0.1 icmp_seq=2 Destination Host Unreachable --- 10.0.0.2 ping statistics --- 5 packets transmitted, 0 received, +2 errors, 100% packet loss, time 4092ms pipe 4 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. From 10.0.0.2 icmp_seq=1 Destination Host Unreachable From 10.0.0.2 icmp_seq=2 Destination Host Unreachable --- 10.0.0.1 ping statistics --- 5 packets transmitted, 0 received, +2 errors, 100% packet loss, time 4077ms pipe 4 *** Stopping 1 controllers c0 *** Stopping 2 links .. *** Stopping 1 switches s1 *** Stopping 2 hosts h1 h2 *** Done
暂时不通,求指点