SDN經常使用控制器安裝部署之POX篇

pt-SDN經常使用控制器安裝部署之POX篇2014-10-28

POX是由NOX演變而來,其底層模塊由C++實現,上層應用能夠用C++或Python編寫,它的核心做用是提供快速開發網絡控制軟件原型的平臺。POX和OpenFlow交換機進行交互,能夠用於軟件定義網絡這個新興學科的基礎研究,好比探索和原型分佈、SDN調試、網絡虛擬化、控制器設計和編程模型。node

1 部署狀況

在本文中設備使用的都是基於Ubuntu12.04版本的Linux操做系統,在此係統的基礎上進行安裝獲取。IP地址爲192.168.5.203的設備做爲安裝POX的控制器,192.168.5.204安裝Open vSwitch(如下簡寫爲OvS),用於實驗安裝部署。python

2 POX的安裝

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正確啓動,且發現交換機設備:

pox-poxpy

如一臺安裝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下掛的設備相互通訊。

3 POX系統配置

本小節主要講POX的兩個配置,一是如何修改POX監聽端口,二是如何配置POX的可視化Web界面。

(1)修改監聽端口

POX的監聽端口默認是6633,修改監聽端口的方式有如下兩種:

1)臨時修改方法

每次啓動POX時指定監聽端口,如指定的端口爲6636,則在命令行後添加:

Shell

 

1

openflow.of_01 --port=6636

2)修改控制器的默認端口方法

修改/pox/openflow/of_01.py文件,如指定的端口爲6636,則將文件中全部的port=6633改成port=6636。

(2)配置Web界面端口

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-web gui

圖 POX的GUI界面

4 總結

啓動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

暫時不通,求指點

相關文章
相關標籤/搜索