◆ 単純なブリッジの実装その2~複数ポート対応~【OpenFlow1.0をTremaの土管として使う】
前回作成した簡単なブリッジは2ポートのみにしか対応していませんでしたが、今回は3ポート以上にも対応するように修正しました。
■Trema のソースコード
class SimpleBridge2 < Controller def start @port_list = [ 1, 2, 3 ] # all port numbers end def switch_ready( datapath_id ) info "Switch[0x%016x] is up." % datapath_id send_flow_mod_add( datapath_id, :priority => 100 ) @port_list.each do | port | send_flow_mod_add( datapath_id, :match => Match.new( :in_port => port ), :actions => SendOutPort.new( OFPP_CONTROLLER ) ) end end def switch_disconnected( datapath_id ) info "Switch[0x%016x] is disconnected." % datapath_id end def packet_in( datapath_id, message ) return unless message.reason == Trema::PacketIn::OFPR_ACTION actions = [ ] @port_list.each do | port | if ( message.in_port != port ) actions.push( SendOutPort.new( port ) ) end end send_packet_out( datapath_id, :packet_in => message, :actions => actions ) end end
■解説
変更箇所を赤字にしています。
start
対象とするポート番号を持つ配列である @port_list には、上記コードでは例として1,2,3の3つのポート番号を指定しています。ここには3つでも4つでも対象のポート番号を指定できます。
packet_in
変数 actions は新規に追加した変数です。SendOutPort.new で生成した出力先ポート番号指定の配列です。パケットが入って来たポート(message.in_port) 以外の対象ポート番号すべてに出力するようにしています。
« ◆ 単純なブリッジの実装【OpenFlow1.0をTremaの土管として使う】 | トップページ | ◆ Trema 0.4.7インストール失敗とバージョン指定インストール »
「Tremaでネットワーク機器プログラミング」カテゴリの記事
- ◆単純なブリッジに仮想インターフェースを追加【OpenFlow1.0をTremaの土管として使う】(2014.08.02)
- ◆ 単純なブリッジの実装その4~Open vSwitch対策~【OpenFlow1.0をTremaの土管として使う】(2014.07.13)
- ◆ ポートベースVLANの作成【OpenFlow1.0をTremaの土管として使う】(2014.07.05)
- ◆ 単純なブリッジの実装その3~より完璧な土管化~【OpenFlow1.0をTremaの土管として使う】(2014.06.29)
- ◆ 単純なブリッジの実装その2~複数ポート対応~【OpenFlow1.0をTremaの土管として使う】(2013.11.02)
この記事へのコメントは終了しました。
« ◆ 単純なブリッジの実装【OpenFlow1.0をTremaの土管として使う】 | トップページ | ◆ Trema 0.4.7インストール失敗とバージョン指定インストール »
コメント