[[labs.beatcraft.com]] ~
[[OpenFlow]]

#contents

* OpenFlow/Open vSwitch_bc10 [#gad4da34]
OpenvSwitch を bc10 に導入する手順と [[OpenFlow/Open vSwitch_x86>http://labs.beatcraft.com/ja/index.php?OpenFlow%2FOpenvSwitch_x86]] で行った ~
動作確認と同様の動作確認手順について記載します。 ~
~
OpenFlow Controller は [[OpenFlow/Open vSwitch_x86]] と同様mininetを~
導入したx86 Linux を使用します。 ~

#ref(SwithEnv_bc10.png,,80%) ~

* Open vSwitch_bc10 の構成 [#s2f44661]
bc10 のビルド環境、SD イメージのベースは [[bc10-router/arago-project]] で作成した ~
VMware image(Ubuntu 10.04 64bit版) を使用します。 ~
ビルド環境構築手順は [[bc10-router/arago-project]] を参照してください。~
~
また arago-project 全体のビルドおよびリビルドは数時間かかるため、~
Cross Compile にてパッケージの追加、更新を行います。~
~
bc10 のハードウェア構成は以下のとおりです。 ~
- bc10 本体(SD,ACアダプタ)    x1個 ~
- USB 4ポート AC パワードハブ  x1個 ~
- USB 有線 LAN (LUA3-U2-ATX)   x3個 ~

** OpenvSwitch のダウンロード [#t1bf3530]
Ubuntu 上で OpenvSwitch (1.9.0)をダウンロードします。 ~

 $ cd ~
 $ wget http://openvswitch.org/releases/openvswitch-1.9.0.tar.gz
 $ tar xvfz openvswitch-1.9.0.tar.gz

** kernel update [#h64ef27d]
[[bc10-router/kernel updateの kernel.org>http://labs.beatcraft.com/ja/index.php?bc10-router%2Fkernel%20update#g43092fb]]に記載しているものと~
同様の手順で kernel のバージョンを3.7.2に更新します。~
~
また OpenvSwitch の README、INSTALL.txt に記載のある kernel option を追加します。~
添付ファイル #ref(bc10-openflow.config) は .config を変更したファイルです。 ~
添付ファイル &ref(bc10-openflow.config); は .config を変更したファイルです。 ~
bc10-openflow.config を HOME ディレクトリに配置する前提で記載しています。~

 $ cd ~
 $ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.7.2.tar.bz2
 $ tar xvfj linux-3.7.2.tar.bz2

ti-sdk-beagleboard-05.05.01.00 への PATH が無い場合は PATH を追加します。 ~

 $ export PATH={HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH

bc10-openflow.config を linux-3.7.2/.config へコピーし oldconfig を実行します。 ~

 $ cp bc10-openflow.config linux-3.7.2/.config
 $ cd linux-3.7.2/
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- oldconfig

menuconfig を実行して、openvswitch-1.9.0/INSTALL.txt に記載のある項目に ~
チェックが入っていることを確認します。 ~

 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- menuconfig
 
 -*- Networking support  --->
        Networking options  --->
             <M> 802.1d Ethernet Bridging
             ...
             [*] QoS and/or fair queueing  --->
                 <*>   Hierarchical Token Bucket (HTB)
                 <*>   Hierarchical Fair Service Curve (HFSC)
             ...
             <M> Open vSwitch
 ...
 Device Drivers  --->
        [*] Network device support  --->
             <*>     Universal TUN/TAP device driver support 

確認完了後、ビルドを実行します。 ~

 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- uImage

注: uImage作成時に以下のようなエラーが表示された場合はuboot-mkimageを ~
インストールし再度実行してください。 ~

 "mkimage" command not found - U-Boot images will not be built

 $ sudo apt-get install uboot-mkimage

ビルド完了後 kernel module を起動イメージ上へ配置にするために ~
仮インストールします。 ~

 $ mkdir tmp_install
 $ make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- modules_install INSTALL_MOD_PATH=./tmp_install

** OpenvSwitch のビルド [#mb8b1971]
展開した OpenvSwitch の configure を実行します。 ~
注:configureコマンドが長いため下記改行を含めていますが、実行時は1行で実行してください。~

 $ cd ~/openvswitch-1.9.0
 $ ./configure --target=arm-arago-linux-gnueabi --host=arm-arago-linux-gnueabi --build=i686-linux \
 --with-linux=/home/beat/linux-3.7.2 --with-linux-source=/home/beat/linux-3.7.2 \
 SSL_CFLAGS="-I/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/include" \ 
 SSL_LIBS="-L/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/lib -lssl -lcrypto -ldl"

ビルドを実行すると定義の重複によるエラーが起こるためdatapath/linux/compat/include/linux/types.hを ~
以下のように編集しビルドを実行します。~

 $ vi datapath/linux/compat/include/linux/types.h 
 
       #include_next <linux/types.h>
 +     /*
       #ifndef HAVE_CSUM_TYPES
       typedef __u16 __bitwise __sum16;
       typedef __u32 __bitwise __wsum;
       #endif
 +     */
       #ifndef HAVE_BOOL_TYPE 

注:makeコマンドが長いため下記改行を含めていますが、実行時は1行で実行してください。~

 $ make -C /home/beat/openvswitch-1.9.0 \
 SSL_CFLAGS="-I/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/include" \ 
 SSL_LIBS="-L/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/lib -lssl -lcrypto -ldl" 
 CROSS_COMPILE="arm-arago-linux-gnueabi-" ARCH="arm" KCC="arm-arago-linux-gnueabi-" GCC="arm-arago-linux-gnueabi-gcc"

仮インストール用ディレクトリを作成し、インストールします。 ~
注:make installコマンドが長いため下記改行を含めていますが、実行時は1行で実行してください。~

 $ mkdir tmp_install
 $ make -C /home/beat/openvswitch-1.9.0 
 SSL_CFLAGS="-I/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/include" \
 SSL_LIBS="-L/home/beat/oe/arago-tmp/sysroots/armv7a-arago-linux-gnueabi/usr/lib -lssl -lcrypto -ldl" \
 CROSS_COMPILE="arm-arago-linux-gnueabi-" ARCH="arm" KCC="arm-arago-linux-gnueabi-" GCC="arm-arago-linux-gnueabi-gcc" \
 DESTDIR=/home/beat/openvswitch-1.9.0/tmp_install install


*** SD への配置 [#c9bd51af]

kernelは linux-3.7.2/arch/arm/boot/uImage と linux-3.7.2/tmp_install/lib/ 以下のファイルを ~
openvswitchはopenvswitch-1.9.0/tmp_install/usr以下を~
[[bc10-router/arago-project>http://labs.beatcraft.com/ja/index.php?bc10-router%2Farago-project]] で作成した bc10-router 起動イメージにコピーして使用します。 ~
起動用SDカードは fat パーティションが /media/FAT に、ext3 パーティションが /media/EXT3 に mount されているものとします。~

 $ sudo -s
 # cd ~/linux-3.7.2
 # cp arch/arm/boot/uImage /media/FAT/uImage
 # cd tmp_install
 # cp -a lib/ /media/EXT3/
 # cd ~/openvswitch-1.9.0/tmp_install
 # cp -a usr /media/EXT3/

* OpenFlow Switchの起動 [#je32bb5b]
bc10 上で OpenvSwitch を使用し OpenFlow Switchを設定、起動します。~
~
注:前回起動時に Open vSwitch のブリッジデバイスを作成し削除せずに終了させた場合、~
そのブリッジデバイスは作成されたままになります。 ~
~
更新したkernel 3.7.2 で起動していることを確認します。 ~

 # uname -a
 Linux beagleboard 3.7.2 #2 Tue Apr 30 12:34:35 JST 2013 armv7l unknown

openvswitch.ko を insmod します。~

 # insmod /lib/modules/3.7.2/kernel/net/openvswitch/openvswitch.ko

初回起動時のみ conf.db を作成します。 ~

 # ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema

サーバを起動しOpenFlow スイッチを起動します。 ~
注:ovsdb-serverコマンドが長いため改行を含めていますが、実行時は1行で実行してください。~

 # ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
 --remote=db:Open_vSwitch,manager_options --private-key=db:SSL,private_key \
 --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,ca_cert --pidfile --detach
 # ovs-vsctl --no-wait init
 # ovs-vswitchd --pidfile --detach

ブリッジデバイスbr0を作成し、eht1、eth2をbr0に含めます。 ~

 # ovs-vsctl add-br br0
 # ovs-vsctl add-port br0 eth1
 # ovs-vsctl add-port br0 eth2
 # ifconfig eth1 up
 # ifconfig eth2 up
 # ifconfig br0 up

ブリッジデバイスにOpenFlow Controllerの設定を追加します。 ~

ここではコントローラはtcp接続でアドレスは192.168.1.10、ポートは6633、~
スイッチはtcp 6634ポートを設定します。~

 # ovs-vsctl set-controller br0 tcp:192.168.1.10:6633 ptcp:6634

fail-modeをsecureに設定し、無設定時のhost間の通信を遮断します。  ~

 # ovs-vsctl set-fail-mode br0 secure

上記までの設定が反映されているか確認します。~

 # ovs-vsctl show
 d64d185f-43f9-48db-9e27-fecd0e10d54b
      Bridge "br0"
          Controller "ptcp:6634"
          Controller "tcp:192.168.1.10:6633"
          fail_mode: secure
          Port "br0"
              Interface "br0"
                  type: internal
          Port "eth1"
              Interface "eth1"
          Port "eth2"
              Interface "eth2"
            
* OpenFlow Switch の動作確認 [#l39532eb]
[[OpenFlow/Open vSwitch_x86>http://labs.beatcraft.com/ja/index.php?OpenFlow%2FOpenvSwitch_x86]]と同様に、OpenFlow Switchの動作確認を行います。 ~

** OpenFlow Tutorial 1 [#o3c799c4]
[[OpenFlow/OpenFlow Turorial 1>http://labs.beatcraft.com/ja/index.php?OpenFlow%2FOpenFlow%20Tutorial%201]]で行った動作確認と同様の手順でOpenFlow Switchの動作確認を行います。 ~
~
PC(Controller)からdpctlコマンドでスイッチの状態を確認します。 ~
port1,2にeth1,eth2が割り当てられていることが解ります。 ~

 $ dpctl show tcp:192.168.1.1:6634
 features_reply (xid=0x7b67dfa0): ver:0x1, dpid:d0b6a5b34
 n_tables:255, n_buffers:256
 features: capabilities:0xc7, actions:0xfff
   1(eth1): addr:00:0d:0b:6a:5b:34, config: 0, state:0
       current:    1GB-FD AUTO_NEG
       advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG AUTO_PAUSE
       supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG
   2(eth2): addr:4c:e6:76:55:44:cd, config: 0, state:0
       current:    100MB-FD AUTO_NEG
       advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
       supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
   LOCAL(br0): addr:00:0d:0b:6a:5b:34, config: 0, state:0
 get_config_reply (xid=0xdb4bcad5): miss_send_len=0

またスイッチ上にフローテーブルが存在しないことを確認します。 ~

 $ dpctl dump-flows tcp:192.168.1.1:6634
 stats_reply (xid=0xa654d2d0): flags=none type=1(flow)

Host1、Host2間でpingを実行しそれぞれのホストへ到達しないことを確認します。 ~

 $ ping -c3 192.168.11.1
 PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
 From 192.168.11.10 icmp_seq=1 Destination Host Unreachable
 From 192.168.11.10 icmp_seq=2 Destination Host Unreachable
 From 192.168.11.10 icmp_seq=3 Destination Host Unreachable
 
 --- 192.168.11.1 ping statistics ---
 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2016ms

PC(Controller)からport1,2間のパケットを通すフローテーブルを追加します。 ~

 $ dpctl add-flow tcp:192.168.1.1:6634 in_port=1,actions=output:2
 $ dpctl add-flow tcp:192.168.1.1:6634 in_port=2,actions=output:1 

フローテーブルが追加されていることを確認します。 ~

 $ dpctl dump-flows tcp:192.168.1.1:6634
 stats_reply (xid=0x8504cde8): flags=none type=1(flow)
    cookie=0, duration_sec=10s, duration_nsec=941000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=60,hard_timeout=0,in_port=1,actions=output:2
    cookie=0, duration_sec=1s, duration_nsec=943000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=60,hard_timeout=0,in_port=2,actions=output:1

フローテーブル追加後Host1、Host2間でpingを実行しそれぞれのホストへ到達することを確認します。 ~

 $ ping -c3 192.168.11.1
 PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
 64 bytes from 192.168.11.1: icmp_req=1 ttl=64 time=4.17 ms
 64 bytes from 192.168.11.1: icmp_req=2 ttl=64 time=1.25 ms
 64 bytes from 192.168.11.1: icmp_req=3 ttl=64 time=1.33 ms
 
 --- 192.168.11.1 ping statistics ---
 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
 rtt min/avg/max/mdev = 1.256/2.256/4.177/1.358 ms

** OpenFlow Tutorial 2 [#r1779a91]
[[OpenFlow/OpenFlow Turorial 2>http://labs.beatcraft.com/ja/index.php?OpenFlow%2FOpenFlow%20Tutorial%202]]で行った動作確認と同様の手順でOpenFlow Switchの動作確認を行います。 ~
~
PC(Controller)上の別ターミナルでcontrollerコマンドを実行します。 ~

 $ controller ptcp:

またフローテーブルが存在しないことを確認します。 ~

 $ dpctl dump-flows tcp:192.168.1.1:6634
 stats_reply (xid=0xf2eadd2c): flags=none type=1(flow) 

Host1、Host2間でpingを実行しそれぞれのホストへ到達することを確認します。 ~

 $ ping -c3 192.168.11.1
 PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
 64 bytes from 192.168.11.1: icmp_req=1 ttl=64 time=4.64 ms
 64 bytes from 192.168.11.1: icmp_req=2 ttl=64 time=3.10 ms
 64 bytes from 192.168.11.1: icmp_req=3 ttl=64 time=1.33 ms
 
 --- 192.168.11.1 ping statistics ---
 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
 rtt min/avg/max/mdev = 1.331/3.026/4.642/1.353 ms

またPC(Controller)上からbc10(Switch)のフローテーブルが増加していることを確認します。 ~

 $ dpctl dump-flows tcp:192.168.1.1:6634
 stats_reply (xid=0xb5e0898d): flags=none type=1(flow)
    cookie=0, duration_sec=11s, duration_nsec=308000000s, table_id=0, priority=65535, n_packets=2, n_bytes=196, idle_timeout=60,hard_timeout=0,icmp,in_port=2,dl_vlan=0xffff,dl_src=00:23:8b:56:f9:ed,dl_dst=00:0f:b0:f7:28:07,nw_src=192.168.11.10,nw_dst=192.168.11.1,nw_tos=0x00,icmp_type=8,icmp_code=0,actions=output:1
    cookie=0, duration_sec=12s, duration_nsec=308000000s, table_id=0, priority=65535, n_packets=3, n_bytes=294, idle_timeout=60,hard_timeout=0,icmp,in_port=1,dl_vlan=0xffff,dl_src=00:0f:b0:f7:28:07,dl_dst=00:23:8b:56:f9:ed,nw_src=192.168.11.1,nw_dst=192.168.11.10,nw_tos=0x00,icmp_type=0,icmp_code=0,actions=output:2
   cookie=0, duration_sec=7s, duration_nsec=301000000s, table_id=0, priority=65535, n_packets=1, n_bytes=60, idle_timeout=60,hard_timeout=0,arp,in_port=1,dl_vlan=0xffff,dl_src=00:0f:b0:f7:28:07,dl_dst=00:23:8b:56:f9:ed,nw_src=192.168.11.1,nw_dst=192.168.11.10,nw_proto=1,actions=output:2
    cookie=0, duration_sec=7s, duration_nsec=297000000s, table_id=0, priority=65535, n_packets=1, n_bytes=60, idle_timeout=60,hard_timeout=0,arp,in_port=2,dl_vlan=0xffff,dl_src=00:23:8b:56:f9:ed,dl_dst=00:0f:b0:f7:28:07,nw_src=192.168.11.10,nw_dst=192.168.11.1,nw_proto=2,actions=output:1

以上でOpenFlow Tutorial1,2と同様の動作確認は完了です。 ~

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS