はじめに
今回も,
オープンクラウドキャンパス
先に,
最近は雑誌などでOpenFlowが取り上げられる機会が増えています。OpenFlowへの注目も高まっており,
今回の開発で使用する構成
今回開発するNOXモジュールは,
開発するNOXモジュールの仕様
今回開発するNOXモジュールの仕様を以下に示します。OpenFlowらしく,
- OpenFlowコントローラがOpenFlowスイッチを検出したとき,
スイッチに接続されているサーバ1とサーバ2のMACアドレスを取得するため, スイッチからサーバに対してARP要求パケットを送信する - OpenFlowスイッチがサーバからARP応答パケットを受信した場合,
ARP応答パケットからサーバのMACアドレスを取得し, スイッチの物理ポートの先に接続されているサーバのMACアドレスを取得する - NOXが制御するOpenFlowスイッチは1台とする。2台以上検知した場合は,
エラーをコンソールに表示する。新しく検知されたスイッチは一切管理せず, 存在しないものとして扱う - OpenFlowスイッチは,
サーバからOpenFlowルータ宛のARP要求パケットを受信した場合, OpenFlowコントローラ内でARP応答パケットを生成し, サーバに返送する。OpenFlowルータ宛でない場合は, 受信したARP要求パケットを破棄する - IPv4パケットを受信したとき,
サーバ1とサーバ2のMACアドレスを取得できていない場合は受信したパケットを破棄する - IPv4パケットを受信し,
かつサーバ1とサーバ2のMACアドレスが既知の場合, OpenFlowコントローラ内でパケットがOpenFlowルータを通過したのと同じようにMACアドレスを書き換え, コントローラからスイッチ経由でパケットを送出する - ARPでもIPv4パケットでもない場合は,
パケットを破棄する
OpenFlowプロトコルとパケットアウトの関係
前回は,
パケットアウトを行う場合はOpenFlowスイッチに制御ルールを書き込まないため,
- ① サーバ1はサーバ2に対してPingパケットを送信する
- ② 未知のパケットを受信したOpenFlowSwitchは,
受信したパケットを自身のバッファに格納する。そして, PacketInメッセージをNOXに対して送信し, パケットの制御方法を問い合わせる - ③ NOXはPacketInイベントを発行し,
OpenFlowSwitchが新しいパケットを受信したことをNOXモジュールに通知する - ④ NOXモジュールは,
OpenFlowスイッチが受信したパケットを必要に応じて書き換える (OpenFlowスイッチが受信したパケットは, PacketInメッセージやPacketInイベントを通してNOXモジュールまで届けられる) - ⑤ NOXモジュールは,
書き換えたパケットを送信するようにNOXに対して指示する - ⑥ NOXは,
コントローラから送信されたパケットをサーバ2に送信するようにOpenFlowSwitchに対して指示する - ⑦ OpenFlowSwitchは,
コントローラから受信した書き換え済みのPingパケットをサーバ2に送信する