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
想定したとおりのフローエントリができたでしょうか?