OpenWRT with OpenFlow を trema と接続する(その1)

srchack さんの patch により、OpenWRT を OpenFlow スイッチとして動作させることができるようになりました。OpenWRT の OpenFlow 化については こちら をご参照いただくとして、ここでは trema に繋いでみる方法について簡単に紹介します。

OpenWRT 側の変更

trema とつなぐためには、OpenWRT 側にも一部修正が必要です。
/lib/openflow/ofprotocol.sh を編集し、ofprotocol の引数に以下のパラメータを追加してください。

--inactivity-probe=90

編集済み ofprotocol.sh については、こちら に置いてあります。変更を行ったのは、28 行目と 30 行目です。

trema の準備と起動

Ubuntu マシン上で動かす trema の準備をしましょう。以下のようにします。

$ sudo apt-get install git gcc make ruby ruby-dev rubygems irb file libpcap-dev libsqlite3-dev
$ git clone https://github.com/trema/trema.git
$ (cd trema/; ./build.rb)
$ (cd trema/; ./trema run ./src/examples/learning_switch/learning-switch.rb -d)

ここでは sample としてついてくる learning_switch というアプリケーションを trema 上で起動しています。この learning_switch は OpenFlow スイッチを一般の L2SW として動作させるアプリケーションです。

接続の確認

スイッチの Description を表示してみましょう。そのためのアプリケーションは、別のリポジトリにあるので、以下のようにしてください。

$ git clone https://github.com/trema/apps.git
$ (cd apps/show_description/; make)
$ TREMA_HOME=trema/ apps/show_description/show_desctiption
Manufacturer description: Stanford University
Hardware description: Reference Userspace Switch
Software description: 1.0.0
Serial number: None
Human readable description of datapath: OpenWrt pid=1909
Datapath ID: 0x2320477671
Port no: 1(0x1)(Port up)
  Hardware address: 10:6f:3f:07:d3:6f
  Port name: eth0.1
Port no: 2(0x2)(Port up)
  Hardware address: 10:6f:3f:07:d3:6f
  Port name: eth0.2
Port no: 3(0x3)(Port up)
  Hardware address: 10:6f:3f:07:d3:6f
  Port name: eth0.3
Port no: 4(0x4)(Port up)
  Hardware address: 10:6f:3f:07:d3:6f
  Port name: eth0.4
Port no: 65534(0xfffe:Local)(Port up)
  Hardware address: 00:23:20:47:76:71
  Port name: tap0

このコマンドは、前記 learning_switch を動作させた上で、実行してください。上記のように表示できたでしょうか?