C 言語で Match を書く (その1)

今回は、C 言語で Match を書いてみましょう。

送信元 IP アドレス 192.168.1.0/24、宛先 IP アドレス 192.168.2.0/24 とマッチさせる Flow_mod を設定するコントローラは、以下のようになります。

ポイントは二点です。

  • 宛先 IP アドレスをマッチ条件に用いる場合には、dl_type = 0x0800 もマッチ条件として用いる必要があります(詳しくはここ)。
  • 以前説明したように、今回のケースでは wildcard は 11,0010,0000,1000,1110,1111b = 0x3208ef である必要があります。nw_src, nw_dst の mask は 24 ビットなので、wildcard として扱うのは下位 8 ビットとなり、それぞれ 001000b = 8 を設定しています。

build した後、network.conf を使って、起動してみましょう。

$ ./trema run ./matchtest -c ./network.conf -d
$ ./trema dump_flows 0x1
NXST_FLOW reply (xid=0x4):
 cookie=0x1, duration=3.536s, table=0, n_packets=0, n_bytes=0, priority=65535,ip,nw_src=192.168.1.0/24,nw_dst=192.168.2.0/24 actions=drop

想定したとおりのフローエントリができたでしょうか?