Junos OS 実行デバイス上の OpenFlow コントローラへの仮想スイッチ接続について
ジュニパーネットワークスJunosオペレーティングシステム(Junos OS)を実行するデバイスでは、各OpenFlow仮想スイッチはコントローラとの独立した接続を確立し、管理ポートのMACアドレスと内部で割り当てられた仮想スイッチIDで構成される一意のランタイムデータパスIDによって表されます。コントローラーと仮想スイッチは、管理プレーン上の TCP/IP 接続を使用して相互に接続します。したがって、コントローラによって管理される OpenFlow 対応デバイスは、管理ネットワークに接続され(たとえば、me0、fxp0、em0、em1 管理ポートを使用して接続)、コントローラの IP アドレスから到達可能である必要があります。
コントローラとの接続が確立されると、スイッチとコントローラは、送信者がサポートする OpenFlow プロトコルの最新バージョンを指定する Hello メッセージを交換します。スイッチが受信した最初のパケットがOFPT_HELLOメッセージでない場合、スイッチは接続を終了し、コントローラとの新しい接続を確立しようとします。さらに、コントローラとスイッチが、パーティの1つがサポートしていないOpenFlowプロトコルバージョンをネゴシエートすると、接続は終了し、OFPET_HELLO_FAILEDエラータイプとOFPHFC_INCOMPATIBLEコードを示すエラーメッセージが表示されます。
セッションは、スイッチとコントローラが正常に Hello メッセージを交換し、OpenFlow プロトコルのバージョンをネゴシエートしたときに確立されます。セッションの確立後、コントローラはスイッチでサポートされている機能を要求する機能リクエストメッセージをスイッチに送信します。スイッチは、仮想スイッチのデータパス ID フィールドのローカル MAC アドレスを含む機能応答メッセージで応答します。ローカル MAC アドレスが使用できない場合、スイッチは接続を終了します。
セッションの確立後、コントローラーと仮想スイッチは、キープアライブ メカニズムとしてエコー要求メッセージと応答メッセージを交換します。キープアライブタイマーは、仮想スイッチまたはコントローラがエコー応答またはパケットを受信するとリセットされます。エコー要求は、他のメッセージがない場合、アイドル状態の時間帯に 10 秒ごとに送信されます。スイッチがコントローラからエコー応答またはその他のメッセージを 120 秒間受信しない場合、接続は失われたと見なされ、スイッチは 10 秒間接続の再確立を試みます。接続を確立できない場合、スイッチは OpenFlow v1.3 仕様で定義されている緊急モードに入ります。緊急モードでは、スイッチは通常のフロー エントリーを削除し、30 秒後にハードウェアにインストールされているフロー エントリーをパージします。
セッションの確立後、受信者が間違った OpenFlow バージョンを指定する OpenFlow メッセージを受信した場合、受信者はOFPET_BAD_REQUESTタイプとOFPBRC_BAD_VERSIONコードを示すエラーメッセージで応答します。スイッチが TCP バッファ内の OpenFlow パケットのバージョンとタイプを処理できない場合、またはスイッチがコントローラへの OpenFlow メッセージの送信に失敗した場合、スイッチは接続を終了します。
仮想スイッチの設定を変更、削除、または非アクティブ化すると、コントローラへの接続にも影響します。既存の仮想スイッチ設定を変更すると、仮想スイッチはコントローラへの既存の接続を終了し、更新された設定情報を使用して新しいセッションを確立します。既存の仮想スイッチ構成を削除または非アクティブ化すると、仮想スイッチはコントローラーから自動的に切断されます。
要約すると、スイッチは次の状況でコントローラから切断されます。
スイッチがコントローラから受信する最初のパケットは、Hello メッセージではありません。
スイッチは、サポートされていない OpenFlow バージョンの hello メッセージを受信します。
ローカル MAC アドレスを機能応答メッセージに含めることはできません。
スイッチは、120秒間、コントローラからエコー応答またはその他のメッセージを受信しません。
既存の仮想スイッチ構成が削除または非アクティブ化されます。
既存の仮想スイッチの構成が変更されます。この場合、コントローラから切断された後、スイッチは新しい接続とセッションの確立を試みます。
スイッチは、TCP バッファ内の OpenFlow パケットのバージョンとタイプを処理できません。
スイッチはコントローラへの OpenFlow メッセージの送信に失敗し、コントローラはデッド TCP ソケット接続として扱われます。