« Lubuntu 12.10 で Trema の仮想ネットワーク機能を使うときはネットワークマネージャーを止めましょう | トップページ | Trema の仮想ネットワークの落とし穴。ARPなしで通信してしまう »

2013年1月29日 (火)

【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プログラミング】リピーターハブを5行で作る:

« Lubuntu 12.10 で Trema の仮想ネットワーク機能を使うときはネットワークマネージャーを止めましょう | トップページ | Trema の仮想ネットワークの落とし穴。ARPなしで通信してしまう »

最近のトラックバック

無料ブログはココログ