OpenFlow化したWHR-G301Nの無線ポートをOpenFlowポートに

搭載されている無線インタフェースを制御ポートに使ってみることは、少し前に成功していました。他のことに手を付けていてしばらく放置していましたが、今日は無線インタフェースをOpenFlowポートにできないかなー、と挑戦。

設定

まず前回の作業途中に、無線アクセスポイントとして動作させたときの設定ファイルを復活させました。ここにセキュリティをかけた上で、他のデバイスが繋がることまでは確認しています。次は、OpenFlowの設定。

root@OpenWrt:/# vi /etc/config/openflow
    config 'ofswitch'
    option 'dp' 'dp0'
    option 'ofports' 'eth0.1 eth0.2 eth0.3 eth0.4 wlan0'
    option 'ofctl' 'tcp:192.168.1.10:6633'
    option 'mode' 'outofband'

ofportsの最後にwlan0を足しただけです。

挙動確認

再起動して、コントローラ側で待ち構えます。前回使ったpoxを捨てずに取ってあったので、それを使用しました。Helloによる接続確立後、Features Requestを飛ばしてくれるようで、好都合です。

Features Replyの中身を見ると…


元々4ポートだったものが、あっさり5ポートに!
ためしに無線アクセスポイント(wlan0)にiPhoneで接続してみると、Packet Inが飛んできました。

ARPやらICMPv6やらMDNSやら、色々届いていますね。v6も動いていたのか…。ARPが上がってくるということは、無事接続して生のトラフィックが拾えているので、最低限の目標はこれで達成です。

しかし、ちょっと気になるところはあります。最初の3つは、無線APの認証関係のパケットで、OpenFlowとして拾っては欲しくないパケットのように見えます。2〜3個目、EAPOLのシーケンスのおそらく一部で、iPhone→無線AP方向のものが上がってきています。その後接続できているということは、ハードウェアで折り返し応答していて、無事認証シーケンスが完了しているのでしょう。まさか認証なしで接続できちゃってはいないよな…
まあ家庭内で使うならば、この手のパケットは捨てるようにフローエントリを入れておけば済むので、深刻に悩むようなものではないですね。とりあえず、無線経由で飛んで来たものをOpenFlow部分で捕捉できそうなことは確認できました。

まだコントローラ側をいじり始めていないので、無線ポートにPacket Outを出したらどうなるのかは未試験です。マルチキャストで飛ぶのかな?