OpenFlow では Modify-Field アクションを使ってパケットのいろいろな部分を書き換えることができるのでした。今回はこのうち、パケットの送信元と宛先 MAC アドレスを書き換える方法を説明します。
MAC アドレス書き換えアクションを作る
MAC アドレスを書き換えるアクションは ActionSetDlSrc とActionSetDlDst です。それぞれの次のように簡単に作ることができます。
# 送信元 MAC アドレスを指定した値に書き換える ActionSetDlSrc.new( "00:1d:92:93:f4:25" ) # 宛先 MAC アドレスを指定した値に書き換える ActionSetDlDst.new( "52:54:00:a8:ad:8c" )
ここは普通にオブジェクトを作っているだけなので、特にひっかかる部分は無いでしょう。
Flow Mod でアクションを指定する
こうして作ったアクションは次のように Flow Mod の :actions オプションに指定します。なお複数のアクションを指定する場合、配列として指定します。
def packet_in datapath_id, message # .. send_flow_mod_add( datapath_id, :match => Match.new( :dl_src => message.macsa, :dl_dst => message.macda ), :actions => [ ActionSetDlDst.new( "00:1d:92:93:f4:25" ), ActionOutput.new( port_no ) ] )
Packet Out のアクションも、まったく同様に指定できます。
まとめ
ActionSetDlSrc と ActionSetDlDst でパケットの送信元・宛先 MAC アドレスを書き換える方法を説明しました。