2015年5月19日 星期二

[OVS] 使用Raspberrypi 實作 Open Flow Switch

  • 事前準備:
    • Autoconf version 2.63
    • Automake version 1.10
    • libtool version 2.4
    • perl version 5.10.1
    • python 2.x for x >=4
    #apt-get install autoconf automake libtool uuid
    #ln -s /usr/bin/uuid  /usr/bin/uuidgen

  • 準備Kernel Source :
    • 先確認Kernel版本,並下載 Source code
    #apt-get install linux-source-3.18

    • 編譯Modules
    #ln -s /usr/src/linux-source-3.18  /lib/modules/3.6.18+/build
    #cd /lib/modules/3.6.18+/build
    #make mrproper
    #gzip -dc /proc/config.gz  >  .config
    #make  modules_prepare
  • 安裝OVS:
  • #git clone https://github.com/openvswitch/ovs
    #cd ovs
    #./boot.sh
    #./configure --with-linux=/lib/modules/`uname -r`/build  --prefix=/usr
    #make
    #make install
    #make modules_install
    #modprobe openvswitch
    #cp debian/openvswitch-testcontroller.init /etc/init.d/openvswitch-testcontroller
    #cp debian/openvswitch-switch.init /etc/init.d/openvswitch-switch
    #ln -s /etc/init.d/openvswitch-switch /etc/rc2.d/S20openvswitch-switch
    #ln -s /etc/init.d/openvswitch-switch /etc/rc0.d/K80openvswitch-switch
  • 建構OVS
  • 圖一 : 架構圖
    • 網卡定義 (外接兩張USB網卡)
      eth0:用於設定Controllereth1:Switch Port 1eth2:Switch Port 2
    • 設定OVS
      • 建立 bridge
        #ovs-vsctl  add-br ovs-br0  
      • 加入 Port 到 bridge
        #ovs-vsctl  add-port ovs-br0 eth1
        #ovs-vsctl  add-port ovs-br0 eth2
      • 設定 OVS 支援 Open Flow 13
        #ovs-vsctl  set bridge ovs-br0   protocols=OpenFlow13
      • 設定 Controller IP
        #ovs-vsctl  set-controller ovs-br0   tcp:127.0.0.1:6633
      • 設定 Fail Mode (standalone|secure)
        #ovs-vsctl  set-fail-mode ovs-br0 standalone


        設定Standalone:表示連線至controller失敗時,而OVS則會執行ovs-vswitchd,成為一個普通的Switch功能

        設定Secure:表示連線至controller失敗時,而OVS則會停止所有的封包運行
      • 顯示ovs狀態
        #ovs-vsctl show
      • 顯示open flow
        #ovs-ofctl dump-flows br0 -O openflow13

Note :

如果啟動發生:unix:/usr/local/var/run/openvswitch/db.sock: database connection failed (no such file or directory)。解決方法如下:

#!/bin/bash 
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
                     --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
                     --private-key=db:Open_vSwitch,SSL,private_key \
                     --certificate=db:Open_vSwitch,SSL,certificate \
                     --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
                     --pidfile --detach
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
Reference :
[1] openvswitch
[2] Build Kernel Modules
[3] 如何將Linux打造成OpenFlow Switch:Openvswitch
[4] Openvswitch + OpenFlow: Let’s get started

4 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. OVS沒有連上Controller的可能性非常多,例如1. Controller的Port 6633啟動使否成功。2.Controller的那台主機Firewall是否把擋掉OVS的連線。3. OVS的設定是否符合Controller等等奇怪的原因。

      一般連不上,我會先確認以下幾個項目
      1. 確認Controller的Port有正確啟動(程式有啟動,不代表就是正常運作)
      2. 從OVS那台主機ping Controller的主機確認可以ping(確認OVS與Controller彼此是互通的)
      3. 從OVS那台使用telnet嘗試連到Controller 6633是否會成功(確認從OVS與Controller可連上)
      4. 以上則是基本的確認Controller與OVS中間的通道是透通的,若以上都沒問題,那就可以檢查OVS與Controller之間的設定是否正確。

      希望以上可以幫助您。

      刪除
    2. 作者已經移除這則留言。

      刪除
  2. 不好意思 請問您
    ln -s /usr/src/linux-source-3.18 /lib/modules/3.6.18+/build
    我執行完後
    出現沒有/lib/modules/3.6.18+/build 此一檔案或目錄 該如何處理

    回覆刪除