【TremaでOpenFlowプログラミング】リピーターハブを5行で作る
OpenFlow フレームワーク Trema についてくるサンプルにすでにリピーターハブがあるし、ネットを検索すると実装例が見つかります。しかし、どうもそれらは冗長[※1]な気がして、短く簡潔に実装してみたくなりました。
以前、OpenWRT with OpenFlow 1.0 にてコマンドを実行してフローを追加しましたが、今回はそれの Trema 版です。以前と同様に、OpenFlow スイッチが FLOOD をサポートしていることを前提にしています。
■コード
class MultiRepeaterHub < Controller def switch_ready( datapath_id ) send_flow_mod_add( datapath_id, :actions => SendOutPort.new( OFPP_FLOOD ) ) end end
たった5行です。それでも、複数台の OpenFlow スイッチにも対応しています。
■仮想ネットワークでテスト
構成は2台のホストを2つの OpenFlow スイッチでつないだ構成でテストします。
host1(192.168.0.1) --- sw1 --- sw2 --- host2(192.168.0.2)
仮想ネットワークの定義:
vswitch( "sw1" ) { datapath_id "0x1" } vswitch( "sw2" ) { datapath_id "0x2" } vhost( "host1" ) { ip "192.168.0.1" } vhost( "host2" ) { ip "192.168.0.2" } link "sw1", "host1" link "sw1", "sw2" link "sw2", "host2"
テスト結果:
今回は、テストする前に、こちらの記事に該当するので回避策を実施しておきました。
$ trema dump_flow sw1 --- (1) NXST_FLOW reply (xid=0x4): cookie=0x1, duration=12.715s, table=0, n_packets=0, n_bytes=0, priority=65535 actions=FLOOD $ trema dump_flow sw2 --- (2) NXST_FLOW reply (xid=0x4): cookie=0x1, duration=15.822s, table=0, n_packets=0, n_bytes=0, priority=65535 actions=FLOOD $ trema show_stats host2 --- (3) Sent packets: Received packets: $ trema send_packets --source host1 --dest host2 --- (4) $ trema show_stats host2 --- (5) Sent packets: Received packets: ip_dst,tp_dst,ip_src,tp_src,n_pkts,n_octets 192.168.0.2,1,192.168.0.1,1,1,50
(1)(2) OpenFlow スイッチ sw1, sw2 にフローエントリが登録されていることを確認。
(3) パケットを飛ばす前はまだ host2 の統計情報は空であることを確認。
(4) host1 から host2 へパケットを送付。
(5) host2 の統計情報において、 192.168.0.1(host1)から送られたパケットを受信したことを確認。
※1
Trema(0.3.3) 付属のサンプルやネットで見つかるリピーターハブの実装は、なぜか packet_in を受けてからフローを追加しています。しかし、リピーターの役割を考えれば不要な処理です。任意のパケットを FLOOD の対象にして良いのですから、packet_in を待つ必要がありません。
« Lubuntu 12.10 で Trema の仮想ネットワーク機能を使うときはネットワークマネージャーを止めましょう | トップページ | Trema の仮想ネットワークの落とし穴。ARPなしで通信してしまう »
「TremaでOpenFlowプログラミング」カテゴリの記事
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ OpenFlow 1.0.0 メッセージと Trema API(Ruby) との対応表(2013.05.08)
- ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法(2013.03.16)
- 【TremaでOpenFlowプログラミング】マッチングルール早見表(2013.03.02)
- Trema の仮想ネットワーク機能には『OpenFlow実践入門』に書いてない強力な機能がありました。(2013.02.03)
この記事へのコメントは終了しました。
« Lubuntu 12.10 で Trema の仮想ネットワーク機能を使うときはネットワークマネージャーを止めましょう | トップページ | Trema の仮想ネットワークの落とし穴。ARPなしで通信してしまう »
コメント