Openvswitch を OpenFlow スイッチとして使う

以前 userspace で動作する openvswitch について紹介しましたが、今回は kernel-mode で転送動作を行う openvswitch を OpenFlow スイッチとして動作させる方法をまとめてみました。
ソースは ここ にあるものを利用し、INSTALL.Linux を参考にインストールしてみます。

openvswitch の build とインストール

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

Kernel モジュールのロード

Kernel モジュールを、以下のコマンドでロードします。

$ insmod datapath/linux/openvswitch_mod.ko

lsmod コマンドを使い、ロードが成功しているかを確認してください。kernel を upgrade した場合、このカーネルモジュールも作り直す必要があります。ご注意ください。

ovsdb-server の起動と初期化

$ mkdir -p /usr/local/etc/openvswitch
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
$ 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 の起動と各種設定

$ ovs-vswitchd --pidfile --detach
$ ovs-vsctl add-br ofs0
$ ovs-vsctl add-port ofs0 trema0-0
$ ovs-vsctl add-port ofs0 trema1-0
$ ovs-vsctl set-controller ofs0 tcp:127.0.0.1:6633
$ ovs-vsctl set bridge ofs0 other-config:datapath-id=0000000000000001 

今回 OpenFlow スイッチとして動作させるインターフェイスに trema0-0, trema1-0 を指定しています。set-controller でコントローラ側の IP アドレス、ポート番号として、127.0.0.1:6633 を指定しています。このあたりはご自身の環境に合わせて変更してください。

設定の確認

以下のコマンドでそれぞれの設定が確認できます。

$ ovs-vsctl list-br
ofs0
$ ovs-vsctl list-ports ofs0
trema0-0
trema1-0
$ ovs-vsctl get-controller ofs0
tcp:127.0.0.1:6633
$ ovs-vsctl get bridge ofs0 other-config
{datapath-id="0000000000000001"}

以上の設定を行えば、コントローラとして動作させた Trema と接続できるはずです。以前に紹介した show_description コマンドなどで確認してみて下さい。