Tremaでの Open vSwitch


               Trema開発チーム
              鈴木一哉 (@countone)
                   2012/4/7




Page 1
Agenda

▐ Tremaとは
▐ ネットワークエミュレーション
         機能概要
         使用例
         仮想スイッチ
         仮想ホスト
         仮想リンク
▐ まとめ
▐ おまけ : kernel-mode 版openvswitchとtremaを接続してみる




 Page 2
Trema 概要

▐ Trema : C/Ruby でコントローラ開発をするためのフレームワーク
      開発が容易 : 洗練された API, テストのためのネットワークエミュ
       レータ
      多くのサンプルアプリ
      GPLv2




 Page 3
ネットワークエミュレーション機能概要

▐ 試験用の OpenFlow ネットワークを、開発マシン内に構築する機
  能
     仮想スイッチ : openvswitch (userspace) を使用
     仮想ホスト : phost (trema original) を使用
     仮想リンク : Linux の Virtual ethernet device を使用




Page 4
使用例

▐ ./trema run ./mycontroller.rb –c ./network.conf


             network.conf
   vswitch("sw1") {                             routing switch
     datapath_id "0x1"
   }                                                trema

   vswitch("sw2") {
     datapath_id "0x2"
   }                                     host1 sw1      sw2      host2
   vhost ("host1")
   vhost ("host2")

   link "host1", "sw1"
   link "sw1", "sw2"                       開発マシン内で動作
   link "sw2", "host2"

 Page 5
仮想リンクの設定

▐ 仮想リンク
     Linux の Virtual ethernet device を使用

▐ trema 上から仮想リンクを設定するコード
     https://raw.github.com/trema/trema/develop/ruby/trema/link.rb

     sudo ip link add name trema0-0 type veth peer name trema0-1




Page 6
仮想スイッチの起動

▐ 仮想スイッチ
     Userspace で動作する test-openflowd (ver 1.2.2) を使用


▐ trema から openvswitch を起動するコード
     https://raw.github.com/trema/trema/develop/ruby/trema/open-
      vswitch.rb

     sudo ./test-openflowd netdev@ofs0 tcp:127.0.0.1:6633 
      --ports=trema0-0,trema1-0 --datapath-id=0000000000000001 
      --unixctl=/tmp/ofs0.ctl &




Page 7
仮想ホストの起動

▐ 仮想ホスト
     Userspace で動作する仮想ホストデーモン phost (Trema 同梱) を使用

▐ Trema から phost を起動するコード
     https://raw.github.com/trema/trema/develop/ruby/trema/phost.rb

     sudo ./phost –i trema0-0 –D &




Page 8
まとめ

▐ Tremaのネットワークエミュレーション機能
     開発したコントローラを「すぐ動かしてみる」ための機能です
     仮想スイッチとしてuserspaceで動作するopenvswitchを使用していま
      す。

▐ ネットワークエミュレーション機能のTrema内部での実現方法に
  ついて紹介しました。




Page 9
おまけ : kernel-mode 版openvswitchとtremaを接続してみる


                          routing switch
                               trema

                                        Secure Channel


                     link0-1           link1-0
           ofs0                                    ofs1
           link0-0                               link1-1



                     link2-1           link2-0
                               ofs2

 Page 10
openvswitchのインストール

▐ ./configure --with-linux=/lib/modules/`uname -r`/build
▐ make
▐ make install


▐ insmod datapath/linux/openvswitch.ko

▐ mkdir -p /usr/local/etc/openvswitch
▐ ovsdb-tool create /usr/local/etc/openvswitch/conf.db
  vswitchd/vswitch.ovsschema




 Page 11
仮想リンクの設定

▐ ip link add name link0-1 type veth peer name link1-0
▐ ip link add name link1-1 type veth peer name link2-0
▐ ip link add name link2-1 type veth peer name link0-0

▐   ifconfig link0-0 up
▐   ifconfig link0-1 up
▐   ifconfig link1-0 up
▐   ifconfig link1-1 up
▐   ifconfig link2-0 up
▐   ifconfig link2-1 up




 Page 12
openvswitchの起動

▐ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock 
  --remote=db:Open_vSwitch,manager_options 
  --pidfile --detach
▐ ovs-vsctl --no-wait init
▐ ovs-vswitchd --pidfile --detach




 Page 13
openvswitchの設定

▐   ovs-vsctl add-br ofs0
▐   ovs-vsctl add-port ofs0 link0-0
▐   ovs-vsctl add-port ofs0 link0-1
▐   ovs-vsctl set-controller ofs0 tcp:127.0.0.1:6633
▐   ovs-vsctl set bridge ofs0 other-config:datapath-
    id=0000000000000010



▐ ofs1, ofs2 についても同様に設定




 Page 14
openvswitchの状態確認

▐ ovs-vsctl list-br
   ofs0
▐ ovs-vsctl list-ports ofs0
   link0-0
link0-1
▐ ovs-vsctl get-controller ofs0
   tcp:127.0.0.1:6633
▐ ovs-vsctl get bridge ofs0 other-config
   {datapath-id="0000000000000010"}




 Page 15
trema routing switchの起動

▐   gitclone https://github.com/trema/trema.git
▐   ./trema/build.rb
▐   gitclone https://github.com/trema/apps.git
▐   (cd apps/topology/; make)
▐   (cd apps/routing_switch/; make)
▐   ./trema/trema run -c ./apps/routing_switch/routing_switch_null.conf
    -d




 Page 16
Description の取得

▐ (cd apps/show_description/; make)
▐ TREMA_HOME=./trema ./apps/show_description/show_description

Manufacturer description: Nicira Networks, Inc.
Hardware description: Open vSwitch
Software description: 1.4.0
Serial number: None
Human readable description of datapath: None
Datapath ID: 0x10
Port no: 2(0x2)(Port up)
  Hardware address: e6:26:c9:98:52:eb
  Port name: link0-0
...




 Page 17
Topology の検出

▐ TREMA_HOME=./trema ./apps/topology/show_topology
vswitch {
datapath_id "0x11"
}

vswitch {
datapath_id "0x10"
}

vswitch {
datapath_id "0x12"
}

link "0x11", "0x10"
link "0x12", "0x11"
link "0x12", "0x10"

 Page 18

Trema での Open vSwitch

  • 1.
    Tremaでの Open vSwitch Trema開発チーム 鈴木一哉 (@countone) 2012/4/7 Page 1
  • 2.
    Agenda ▐ Tremaとは ▐ ネットワークエミュレーション  機能概要  使用例  仮想スイッチ  仮想ホスト  仮想リンク ▐ まとめ ▐ おまけ : kernel-mode 版openvswitchとtremaを接続してみる Page 2
  • 3.
    Trema 概要 ▐ Trema: C/Ruby でコントローラ開発をするためのフレームワーク  開発が容易 : 洗練された API, テストのためのネットワークエミュ レータ  多くのサンプルアプリ  GPLv2 Page 3
  • 4.
    ネットワークエミュレーション機能概要 ▐ 試験用の OpenFlowネットワークを、開発マシン内に構築する機 能  仮想スイッチ : openvswitch (userspace) を使用  仮想ホスト : phost (trema original) を使用  仮想リンク : Linux の Virtual ethernet device を使用 Page 4
  • 5.
    使用例 ▐ ./trema run./mycontroller.rb –c ./network.conf network.conf vswitch("sw1") { routing switch datapath_id "0x1" } trema vswitch("sw2") { datapath_id "0x2" } host1 sw1 sw2 host2 vhost ("host1") vhost ("host2") link "host1", "sw1" link "sw1", "sw2" 開発マシン内で動作 link "sw2", "host2" Page 5
  • 6.
    仮想リンクの設定 ▐ 仮想リンク  Linux の Virtual ethernet device を使用 ▐ trema 上から仮想リンクを設定するコード  https://raw.github.com/trema/trema/develop/ruby/trema/link.rb  sudo ip link add name trema0-0 type veth peer name trema0-1 Page 6
  • 7.
    仮想スイッチの起動 ▐ 仮想スイッチ  Userspace で動作する test-openflowd (ver 1.2.2) を使用 ▐ trema から openvswitch を起動するコード  https://raw.github.com/trema/trema/develop/ruby/trema/open- vswitch.rb  sudo ./test-openflowd netdev@ofs0 tcp:127.0.0.1:6633 --ports=trema0-0,trema1-0 --datapath-id=0000000000000001 --unixctl=/tmp/ofs0.ctl & Page 7
  • 8.
    仮想ホストの起動 ▐ 仮想ホスト  Userspace で動作する仮想ホストデーモン phost (Trema 同梱) を使用 ▐ Trema から phost を起動するコード  https://raw.github.com/trema/trema/develop/ruby/trema/phost.rb  sudo ./phost –i trema0-0 –D & Page 8
  • 9.
    まとめ ▐ Tremaのネットワークエミュレーション機能  開発したコントローラを「すぐ動かしてみる」ための機能です  仮想スイッチとしてuserspaceで動作するopenvswitchを使用していま す。 ▐ ネットワークエミュレーション機能のTrema内部での実現方法に ついて紹介しました。 Page 9
  • 10.
    おまけ : kernel-mode版openvswitchとtremaを接続してみる routing switch trema Secure Channel link0-1 link1-0 ofs0 ofs1 link0-0 link1-1 link2-1 link2-0 ofs2 Page 10
  • 11.
    openvswitchのインストール ▐ ./configure --with-linux=/lib/modules/`uname-r`/build ▐ make ▐ make install ▐ insmod datapath/linux/openvswitch.ko ▐ mkdir -p /usr/local/etc/openvswitch ▐ ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema Page 11
  • 12.
    仮想リンクの設定 ▐ ip linkadd name link0-1 type veth peer name link1-0 ▐ ip link add name link1-1 type veth peer name link2-0 ▐ ip link add name link2-1 type veth peer name link0-0 ▐ ifconfig link0-0 up ▐ ifconfig link0-1 up ▐ ifconfig link1-0 up ▐ ifconfig link1-1 up ▐ ifconfig link2-0 up ▐ ifconfig link2-1 up Page 12
  • 13.
    openvswitchの起動 ▐ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach ▐ ovs-vsctl --no-wait init ▐ ovs-vswitchd --pidfile --detach Page 13
  • 14.
    openvswitchの設定 ▐ ovs-vsctl add-br ofs0 ▐ ovs-vsctl add-port ofs0 link0-0 ▐ ovs-vsctl add-port ofs0 link0-1 ▐ ovs-vsctl set-controller ofs0 tcp:127.0.0.1:6633 ▐ ovs-vsctl set bridge ofs0 other-config:datapath- id=0000000000000010 ▐ ofs1, ofs2 についても同様に設定 Page 14
  • 15.
    openvswitchの状態確認 ▐ ovs-vsctl list-br ofs0 ▐ ovs-vsctl list-ports ofs0 link0-0 link0-1 ▐ ovs-vsctl get-controller ofs0 tcp:127.0.0.1:6633 ▐ ovs-vsctl get bridge ofs0 other-config {datapath-id="0000000000000010"} Page 15
  • 16.
    trema routing switchの起動 ▐ gitclone https://github.com/trema/trema.git ▐ ./trema/build.rb ▐ gitclone https://github.com/trema/apps.git ▐ (cd apps/topology/; make) ▐ (cd apps/routing_switch/; make) ▐ ./trema/trema run -c ./apps/routing_switch/routing_switch_null.conf -d Page 16
  • 17.
    Description の取得 ▐ (cdapps/show_description/; make) ▐ TREMA_HOME=./trema ./apps/show_description/show_description Manufacturer description: Nicira Networks, Inc. Hardware description: Open vSwitch Software description: 1.4.0 Serial number: None Human readable description of datapath: None Datapath ID: 0x10 Port no: 2(0x2)(Port up) Hardware address: e6:26:c9:98:52:eb Port name: link0-0 ... Page 17
  • 18.
    Topology の検出 ▐ TREMA_HOME=./trema./apps/topology/show_topology vswitch { datapath_id "0x11" } vswitch { datapath_id "0x10" } vswitch { datapath_id "0x12" } link "0x11", "0x10" link "0x12", "0x11" link "0x12", "0x10" Page 18