(57)【要約】      （修正有）【課題】制御装置の障害を検出する際の通信負荷及び制御装置側の処理負担を抑制する装置、方法及びプログラムを提供する。【解決手段】スイッチ装置ＯＦＳ（Ｏｐｅｎ  Ｆｌｏｗ  Ｓｗｉｔｃｈ）２のメッセージ処理部３４は、判定部３４Ａと、監視部３４Ｂと、検出部３４Ｃとを有する。判定部は、自装置が第１のスイッチ装置であるか否かを判定する。監視部は、自装置が第１のスイッチ装置の場合に、複数のスイッチ装置を制御する制御装置との間でキープアライブを実行する。検出部は、キープアライブの監視結果に基づき制御装置の障害を検出し、障害を切替処理部３５に通知する。切替処理部の切替部３５Ａは制御装置を切替え、送信部３５Ｂは制御装置が制御するスイッチ装置に障害報告を通知する。受信部３５Ｃは、通信部３２を通じてデータプレーン５から他のスイッチからの障害通知を受信する。【選択図】図３
2016208181.tif 000002
【特許請求の範囲】
【請求項１】
第１のネットワーク上でデータの経路を切替える複数のスイッチ装置の内、自装置が第１のスイッチ装置であるか否かを判定する判定部と、
前記自装置が第１のスイッチ装置の場合に、前記第１のネットワークと異なる第２のネットワークを通じて前記複数のスイッチ装置を制御する制御装置との間でキープアライブを実行する監視部と、
前記キープアライブの監視結果に基づき、前記制御装置の障害を検出する検出部と、
前記制御装置の障害を検出した場合に、前記第１のネットワークを通じて、前記制御装置が制御する前記スイッチ装置に障害報告を通知する通知部と
を有することを特徴とするスイッチ装置。
【請求項２】
前記制御装置の障害を検出した場合、又は、前記第１のネットワークを通じて前記障害報告を検出した場合に、前記第２のネットワークを通じて、前記制御装置を他の制御装置に切替える切替部
を有することを特徴とする請求項１に記載のスイッチ装置。
【請求項３】
前記判定部は、
前記複数のスイッチ装置の内、自装置が第２のスイッチ装置であるか否かを判定し、
前記監視部は、
前記自装置が前記第２のスイッチ装置であって、前記第１のネットワークを通じて前記第１のスイッチ装置からの前記障害報告を検出した場合に、前記制御装置との間で確認キープアライブを実行することを特徴とする請求項１に記載のスイッチ装置。
【請求項４】
前記判定部は、
前記複数のスイッチ装置の内、自装置が第２のスイッチ装置であるか否かを判定し、
前記監視部は、
前記自装置が前記第２のスイッチ装置であって、前記第１のネットワークを通じて前記第１のスイッチ装置からの依頼を検出した場合に、前記制御装置との間で確認キープアライブを実行し、
前記通知部は、
前記自装置が前記第２のスイッチ装置の場合に、前記第１のネットワークを通じて、前記確認キープアライブの結果を前記第１のスイッチ装置に通知することを特徴とする請求項１に記載のスイッチ装置。
【請求項５】
第１のネットワーク上でデータの経路を切替える複数のスイッチ装置を、前記第１のネットワークと異なる第２のネットワークを通じて制御する制御装置であって、  
自装置が制御するスイッチ装置を識別する識別情報を管理する記憶部と、
前記自装置が制御するスイッチ装置の内、前記第２のネットワークの物理トポロジ情報に基づき、前記第２のネットワークを通じてキープアライブを実行する第１のスイッチ装置を選出する選出部と、
前記選出部で選出した前記スイッチ装置に前記第１のスイッチ装置として動作するように指示する指示部と
を有することを特徴とする制御装置。
【請求項６】
第１のネットワーク上でデータの経路を切替える複数のスイッチ装置の内、自装置が第１のスイッチ装置であるか否かを判定し、
前記自装置が第１のスイッチ装置の場合に、前記第１のネットワークと異なる第２のネットワークを通じて前記複数のスイッチ装置を制御する制御装置との間でキープアライブを実行し、
前記キープアライブの監視結果に基づき、前記制御装置の障害を検出し、
前記制御装置の障害を検出した場合に、前記第１のネットワークを通じて、前記制御装置が制御する前記スイッチ装置に障害報告を通知する
処理を実行することを特徴とする障害検出方法。
【請求項７】
第１のネットワーク上でデータの経路を切替える複数のスイッチ装置の内、自装置が第１のスイッチ装置であるか否かを判定し、
前記自装置が第１のスイッチ装置の場合に、前記第１のネットワークと異なる第２のネットワークを通じて前記複数のスイッチ装置を制御する制御装置との間でキープアライブを実行し、
前記キープアライブの監視結果に基づき、前記制御装置の障害を検出し、
前記制御装置の障害を検出した場合に、前記第１のネットワークを通じて、前記制御装置が制御する前記スイッチ装置に障害報告を通知する
処理をコンピュータに実行させることを特徴とする障害検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチ装置、制御装置、障害検出方法及び障害検出プログラムに関する。
【背景技術】
【０００２】
近年、従来のＬ２スイッチやルータ等の既存のパケット転送やルーティング処理にとらわれない柔軟なパケット転送制御が可能な技術として、オープンフロー（Open Flow）が知られている。Open Flowでは、ＯＦＣ（Open Flow Controller）と、ＯＦＳ（Open Flow Switch）とを有し、ＯＦＣが複数のＯＦＳの経路制御や転送制御を一括管理する技術である。ＯＦＣは、制御対象のフローを識別するマッチ条件や、マッチ条件に合致したパケットに対して、例えば、転送、廃棄や、ヘッダ内のフィールドの書換え等の実行すべき処理を定義した情報を含むフローテーブルを各ＯＦＳに設定する。尚、フローテーブルは、ネットワークの運用管理者やユーザが自由に設計し、ＯＦＣからOpen Flowプロトコルを用いてＯＦＳへ動的かつプログラマブルに設定する。各ＯＦＳは、フローテーブルを参照し、受信パケットに対応した処理を実行することになる。
【０００３】
Open Flowでは、ＯＦＣの障害によるネットワーク障害を回避するため、例えば、プライマリＯＦＣ及びセカンダリＯＦＣでＯＦＣを冗長化している。例えば、プライマリＯＦＣは複数のＯＦＳを監視制御し、セカンダリＯＦＣは、プライマリＯＦＣの障害時に複数のＯＦＳを監視制御することになる。また、各ＯＦＳは、自装置を制御するＯＦＣとの間で定期的にキープアライブを実行してＯＦＣの障害を検出する。
【０００４】
各ＯＦＳは、キープアライブの監視結果に基づき、プライマリＯＦＣの障害を検出した場合、プライマリＯＦＣをセカンダリＯＦＣに切り替える。その結果、各ＯＦＳは、プライマリＯＦＣの障害を復旧できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１３５６１４号公報
【特許文献２】特開２０１１−１６０３６３号公報
【特許文献３】特開２０１１−２４４０９５号公報
【非特許文献】
【０００６】
【非特許文献１】“Open Flow  Switch  Specification  Version  1.4.0”，Oct.  14,  2013，OPEN  NETWORKING  FOUNDATION，https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.4.0.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００７】
各ＯＦＳは、制御プレーンを用いてプライマリＯＦＣとの間でキープアライブを実行する。しかしながら、ＯＦＣは、監視制御するＯＦＳの台数が増加するに連れてキープアライブの実行回数も増えるため、キープアライブに要する処理負担も大きくなる。しかも、キープアライブは、ＯＦＳとＯＦＣとの間の制御プレーン上のメッセージ通信で実現するため、ＯＦＳの台数が増加するに連れて、制御プレーン上を転送するメッセージが輻輳し、キープアライブに要する制御プレーン上の通信負荷も大きくなる。
【０００８】
一つの側面では、ＯＦＣを検出する際の制御プレーンの通信負荷及びＯＦＣ側の処理負担を抑制できるスイッチ装置、制御装置、障害検出方法及び障害検出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
一つの態様のスイッチ装置は、判定部と、監視部と、検出部と、通知部とを有する。判定部は、第１のネットワーク上でデータの経路を切替える複数のスイッチ装置の内、自装置が第１のスイッチ装置であるか否かを判定する。監視部は、前記自装置が第１のスイッチ装置の場合に、第１のネットワークと異なる第２のネットワークを通じて前記複数のスイッチ装置を制御する制御装置との間でキープアライブを実行する。検出部は、前記キープアライブの監視結果に基づき、前記制御装置の障害を検出する。通知部は、前記制御装置の障害を検出した場合に、前記第１のネットワークを通じて、前記制御装置が制御する前記スイッチ装置に障害報告を通知する。
【発明の効果】
【００１０】
一つの側面として、制御装置の障害を検出する際の第２のネットワークの通信負荷及び制御装置側の処理負担を抑制できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１の通信システムの一例を示す説明図である。
【図２】図２は、ＯＦＳのハードウェア構成の一例を示すブロック図である。
【図３】図３は、ＯＦＳの機能構成の一例を示すブロック図である。
【図４】図４は、ＯＦＣの機能構成の一例を示すブロック図である。
【図５】図５は、データトポロジ情報の一例を示す説明図である。
【図６】図６は、制御トポロジ情報の一例を示す説明図である。
【図７】図７は、実施例１の通信システムの障害検出時の動作の一例を示す説明図である。
【図８】図８は、第１の障害検出処理に関わる代表ＯＦＳの処理動作の一例を示すフローチャートである。
【図９】図９は、第１の障害検出処理に関わる通信システムのＯＦＣ及びＯＦＳの処理動作の一例を示すシーケンス図である。
【図１０】図１０は、実施例２のＯＦＳの機能構成の一例を示すブロック図である。
【図１１】図１１は、実施例２のＯＦＣの機能構成の一例を示すブロック図である。
【図１２】図１２は、選出処理に関わるプライマリＯＦＣの処理動作の一例を示すフローチャートである。
【図１３】図１３は、実施例２の通信システムの副代表ＯＦＳの確認キープアライブ失敗時の動作の一例を示す説明図である。
【図１４】図１４は、実施例２の通信システムの副代表ＯＦＳの確認キープアライブ成功時の動作の一例を示す説明図である。
【図１５】図１５は、第２の障害検出処理に関わる副代表ＯＦＳの処理動作の一例を示すフローチャートである。
【図１６】図１６は、実施例３の通信システムの副代表ＯＦＳの確認キープアライブ失敗時の動作の一例を示す説明図である。
【図１７】図１７は、実施例３の通信システムの副代表ＯＦＳの確認キープアライブ成功時の動作の一例を示す説明図である。
【図１８】図１８は、第３の障害検出処理に関わる代表ＯＦＳの処理動作の一例を示すフローチャートである。
【図１９】図１９は、第４の障害検出処理に関わる副代表ＯＦＳの処理動作の一例を示すフローチャートである。
【図２０】図２０は、確認応答処理に関わる代表ＯＦＳの処理動作の一例を示すフローチャートである。
【図２１】図２１は、障害検出プログラムを実行するコンピュータの一例を示す説明図である。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて、本願の開示するスイッチ装置、制御装置、障害検出方法及び障害検出プログラムの実施例を詳細に説明する。尚、本実施例により、開示技術が限定されるものではない。また、以下に示す実施例は、矛盾を起こさない範囲で適宜組み合わせても良い。
【実施例１】
【００１３】
図１は、実施例１の通信システム１の一例を示す説明図である。図１の通信システム１は、複数のＯＦＳ２と、複数のＯＦＣ３と、複数のＳＷ（Switch）４とを有する。複数のＯＦＳ２は、例えば、第１のＯＦＳ群１０Ａと、第２のＯＦＳ群１０Ｂとを有する。第１のＯＦＳ群１０Ａは、第１のＯＦＳ２Ａ〜第５のＯＦＳ２Ｅを有し、第２のＯＦＳ群１０Ｂは、第６のＯＦＳ２Ｆ〜第９のＯＦＳ２Ｉを有する。各ＯＦＳ２は、例えば、スイッチ装置に相当する。複数のＯＦＣ３は、第１のＯＦＣ３Ａと、第２のＯＦＣ３Ｂとを有する。第１のＯＦＣ３Ａは、第１のＯＦＳ群１０Ａ内の第１のＯＦＳ２Ａ〜第５のＯＦＳ２Ｅを監視制御する。また、第２のＯＦＣ３Ｂは、第２のＯＦＳ群１０Ｂ内の第６のＯＦＳ２Ｆ〜第９のＯＦＳ２Ｉを監視制御する。各ＯＦＣ３は、例えば、制御装置に相当する。各ＯＦＳ２Ａ〜２Ｉは、第１のネットワークであるデータプレーン５を用いて接続し、データプレーン５を用いてデータパケットを送受信する。
【００１４】
複数のＳＷ４は、例えば、Ｌ２スイッチ等であって、第１のＳＷ４Ａ〜第６のＳＷ４Ｆを有する。また、第１のＯＦＣ３Ａは、第１のＳＷ４Ａ〜第３のＳＷ４Ｃと制御プレーン６を用いて第１のＯＦＳ群１０Ａ内の第１のＯＦＳ２Ａ〜第５のＯＦＳ２Ｅと接続する。また、第２のＯＦＣ３Ｂは、第４のＳＷ４Ｄ〜第６のＳＷ４Ｆと制御プレーン６を用いて第２のＯＦＳ群１０Ｂ内の第６のＯＦＳ２Ｆ〜第９のＯＦＳ２Ｉと接続する。第１のＯＦＣ３Ａ及び第２のＯＦＣ３Ｂは、第２のネットワークである制御プレーン６を用いて第１のＯＦＳ群１０Ａ及び第２のＯＦＳ群１０Ｂとの間で制御メッセージを送受信する。
【００１５】
第１のＯＦＳ群１０Ａは、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａとし、第２のＯＦＣ３ＢをセカンダリＯＦＣ１２Ｂとし、第２のＯＦＳ群１０Ｂは、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａとし、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂとしている。プライマリＯＦＣ１２Ａは、正常時に使用するＯＦＣ３であって、セカンダリＯＦＣ１２Ｂは、プライマリＯＦＣ１２Ａの障害時に使用するＯＦＣ３である。第３のＯＦＳ２Ｃは、第１のＯＦＳ群１０Ａ内の代表ＯＦＳ１１とし、第７のＯＦＳ２Ｇは、第２のＯＦＳ群１０Ｂ内の代表ＯＦＳ１１としている。第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａとの間で制御プレーン６を用いてキープアライブを周期的に実行し、第１のＯＦＣ３Ａの障害を監視する。また、第７のＯＦＳ２Ｇは、第２のＯＦＣ３Ｂとの間で制御プレーン６を用いてキープアライブを周期的に実行し、第２のＯＦＣ３Ｂの障害を監視する。つまり、代表ＯＦＳ１１のみが、プライマリＯＦＣ１２Ａとの間でキープアライブを実行するため、プライマリＯＦＣ１２Ａ側のキープアライブに要する処理負担及び、制御プレーン６上でキープアライブを実行する際の通信負荷を抑制できる。
【００１６】
図２は、ＯＦＳ２のハードウェア構成の一例を示すブロック図である。尚、説明の便宜上、図２においてＯＦＳ２のハードウェア構成を例示したが、ＯＦＣ３のハードウェア構成についても同一の構成であるため、同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。図２に示すＯＦＳ２は、例えば、汎用サーバ等のコンピュータであって、入力装置２１と、出力装置２２と、補助記憶装置２３と、駆動装置２４と、ＮＷインタフェース（ＩＦ：Interface）２５と、主記憶装置２６と、プロセッサ２７と、バス２８とを有する。
【００１７】
入力装置２１は、例えば、キーボードやマウス等のポインティングデバイス等の入力インタフェースである。出力装置２２は、プロセッサ２７の処理の結果を出力する。例えば、スピーカ等の音声出力装置や表示装置等の出力インタフェースである。
【００１８】
補助記憶装置２３は、様々なプログラムや、各プログラムの実行に際してプロセッサ２７が使用するデータを格納する領域である。補助記憶装置２３は、例えば、ＥＰＲＯＭ（Erasable  Programmable  ROM）又はハードディスクドライブ（Hard  Disc  Drive）等の不揮発性のメモリである。補助記憶装置２３は、例えば、オペレーティングシステム（ＯＳ）や様々なアプリケーションプログラムを保持する。
【００１９】
駆動装置２４は、可搬記録媒体２４Ａに記録されるプログラムや各種データを読み出し、プロセッサ２７に出力する。可搬記録媒体２４Ａは、例えば、ＳＤカード、ｍｉｎｉＳＤカード、ｍｉｃｒｏＳＤカード、ＵＳＢ（Universal  Serial  Bus）フラッシュメモリ、ＣＤ（Compact  Disc）、ＤＶＤ(Digital  Versatile  Disc)又はフラッシュメモリカード等の記録媒体である。
【００２０】
ＮＷＩＦ２５は、例えば、データプレーン５や制御プレーン６等のＮＷとの情報の通信を司る通信インタフェースである。ＮＷＩＦ２５は、有線のＮＷや無線のＮＷと接続する通信インタフェースを含む。ＮＷＩＦ２５は、例えば、ＮＩＣ（Network  Interface  Card）及び無線ＬＡＮ（Local  Area  Network）カード等である。
【００２１】
主記憶装置２６は、補助記憶装置２３に格納されているプログラムをロードするプロセッサ２７の記憶領域や作業領域に相当する、例えば、ＲＡＭ（Random  Access  Memory）等の半導体メモリである。
【００２２】
プロセッサ２７は、ＯＦＳ２全体を制御する、例えば、ＣＰＵ（Central  Processing  Unit）である。プロセッサ２７は、補助記憶装置２３又は可搬記録媒体２４Ａに保持されたＯＳや様々なアプリケーションプログラムを主記憶装置２６にロードして実行することで、様々な処理を実行する。プロセッサ２７は、１個に限定されるものではなく、複数個であっても良い。
【００２３】
尚、ＮＷＩＦ２５を通じてデータを入力する場合、必ずしも入力装置２１を設けなくても良い。同様に、ＮＷＩＦ２５を通じてデータを出力する場合、例えば、ＯＦＣ３やＯＦＳ２において必ずしも出力装置２２を設けなくても良い。
【００２４】
図３は、ＯＦＳ２の機能構成の一例を示すブロック図である。図３に示すＯＦＳ２は、記憶部３１と、通信部３２と、データ処理部３３と、メッセージ処理部３４と、切替処理部３５と、振分部３６とを有する。記憶部３１は、例えば、補助記憶装置２３に相当し、フローテーブル３１Ａと、代表テーブル３１Ｂと、ＯＦＣテーブル３１Ｃとを有する。フローテーブル３１Ａは、制御対象のフローを識別するマッチ条件と、マッチ条件に合致したフローのパケットに対する、例えば、転送、廃棄や、ヘッダ内のフィールド書換等の実行すべき処理を定義する情報とを含むフロー情報を格納したテーブルである。フローテーブル３１Ａは、補助記憶装置２３に保持された静的な情報を読み込んで設定しても良いし、ＯＦＣ３からのFlow Modメッセージに基づいて動的に設定しても良い。
【００２５】
代表テーブル３１Ｂは、自装置が代表ＯＦＳ１１であるか否かを判定する代表識別子を管理している。尚、代表ＯＦＳは、例えば、第１のスイッチ装置である。代表テーブル３１Ｂは、自装置が代表ＯＦＳ１１の場合、代表識別子“１”を管理していると共に、自装置が代表ＯＦＳ１１でない場合、代表識別子“０”を管理している。尚、代表テーブル３１Ｂの内容は、例えば、事前設定、入力装置２１を通じた運用者の入力操作、若しくは、ＯＦＣ３からの選出指示で設定される。
【００２６】
ＯＦＣテーブル３１Ｃは、自装置を監視制御するプライマリＯＦＣ１２Ａ及びセカンダリＯＦＣ１２Ｂの識別子及びアドレス等の情報を管理している。
【００２７】
通信部３２は、例えば、ＮＷＩＦ２５に相当し、他のＯＦＳ２と接続するデータプレーン５を用いてデータパケットを送受信する。通信部３２は、ＯＦＣ３と接続する制御プレーン６を用いてOpen Flowメッセージを送受信する。
【００２８】
データ処理部３３は、例えば、プロセッサ２７の機能に相当し、フローテーブル３１Ａの内容を参照し、通信部３２を通じて受信したデータパケットを識別し、識別したデータパケットのアクションを実行する。データ処理部３３は、マッチ判定部３３Ａと、アクション実行部３３Ｂとを有する。マッチ判定部３３Ａは、フローテーブル３１Ａのフロー情報を参照し、データパケットがマッチ条件に合致しているか否かを判定する。更に、アクション実行部３３Ｂは、データパケットがマッチ条件に合致した場合に、データパケットに対して、マッチ条件に対応したアクションを実行する。
【００２９】
メッセージ処理部３４は、例えば、プロセッサ２７の機能に相当し、ＯＦＣ３からのフロー変更メッセージに基づき、フローテーブル３１Ａの内容を設定し、データ処理部３３からの通知に基づき、ＯＦＣ３に対してPacket-inメッセージの送信を実行する。メッセージ処理部３４は、判定部３４Ａと、監視部３４Ｂと、検出部３４Ｃとを有する。判定部３４Ａは、代表テーブル３１Ｂを参照し、自装置が代表ＯＦＳ１１であるか否かを判定する。監視部３４Ｂは、自装置が代表ＯＦＳ１１の場合に、プライマリＯＦＣ１２Ａとの間で短周期のキープアライブを実行する。尚、キープアライブは、プライマリＯＦＣ１２Ａとの間のEcho Requestメッセージ（以下、単にEcho Requestと称する）及びEcho Replyメッセージ（以下、単にEcho Replyと称する）の通信で実現する。
【００３０】
検出部３４Ｃは、プライマリＯＦＣ１２Ａに対して送信周期毎にキープアライブのEcho Requestを送信する。更に、検出部３４Ｃは、Echo Request送信後、受信待ちタイマを起動し、受信待ちタイマがタイムアップする前にプライマリＯＦＣ１２ＡからEcho Replyを受信した場合にプライマリＯＦＣ１２Ａの正常と判定する。また、検出部３４Ｃは、Echo Replyを受信する前に、受信待ちタイマがタイムアップした場合に失敗回数を＋１インクリメントする。そして、検出部３４Ｃは、失敗回数が所定回数に到達した場合に、プライマリＯＦＣ１２Ａの障害と判定し、そのＯＦＣ３の障害を切替処理部３５に通知する。
【００３１】
切替処理部３５は、例えば、プロセッサ２７の機能に相当し、切替部３５Ａと、送信部３５Ｂと、受信部３５Ｃとを有する。切替部３５Ａは、自装置が代表ＯＦＳ１１で、かつ、検出部３４ＣからプライマリＯＦＣ１２Ａの障害を検出した場合、ＯＦＣテーブル３１Ｃを参照し、ＯＦＣ３の切替動作を実行する。つまり、切替部３５Ａは、プライマリＯＦＣ１２ＡとセカンダリＯＦＣ１２Ｂとを切替え、すなわち自装置のＴＣＰ接続及びセキュアチャネルをセカンダリＯＦＣ１２Ｂに切替える。
【００３２】
送信部３５Ｂは、プライマリＯＦＣ１２Ａの障害を検出した場合、障害のＯＦＣ３の識別子を含む障害通知メッセージ（以下、単に障害通知と称する）を、通信部３２を通じて、データプレーン５上にフラッディング送信する。受信部３５Ｃは、通信部３２を通じて、データプレーン５を用いて他のＯＦＳ２からの障害通知を受信する。
【００３３】
また、切替部３５Ａは、自装置が代表ＯＦＳ１１でなく、しかも、代表ＯＦＳ１１又は他のＯＦＳ２から障害通知を受信した場合、障害通知内の障害ＯＦＣ３の識別子が自装置のプライマリＯＦＣ１２Ａの識別子であるか否かを判定する。切替部３５Ａは、障害通知内の障害ＯＦＣ３の識別子が自装置のプライマリＯＦＣ１２Ａの識別子の場合、プライマリＯＦＣ１２ＡとセカンダリＯＦＣ１２Ｂとを切替える。
【００３４】
振分部３６は、通信部３２を通じて受信したパケットのパケット種別を識別し、受信パケットがデータパケットの場合、受信パケットをデータ処理部３３に転送する。また、振分部３６は、受信パケットがOpen Flowメッセージの場合、受信パケットをメッセージ処理部３４に転送する。
【００３５】
図４は、ＯＦＣ３の機能構成の一例を示すブロック図である。図４に示すＯＦＣ３は、記憶部４１と、通信部４２と、メッセージ処理部４３と、接続処理部４４と、選出部４５と、指示部４６と、識別部４７とを有する。記憶部４１は、例えば、補助記憶装置２３に相当し、フローテーブル４１Ａと、トポロジ情報テーブル４１Ｂと、制御対象ＯＦＳテーブル４１Ｃとを有する。
【００３６】
フローテーブル４１Ａは、フロー情報を格納したテーブルである。トポロジ情報テーブル４１Ｂは、データプレーン５上の接続トポロジであるデータトポロジ情報及び、制御プレーン６上の接続トポロジである制御トポロジ情報等のトポロジ情報を管理するテーブルである。尚、トポロジ情報は、事前設定、入力装置２１を通じた運用者の入力操作、若しくは、例えばＬＬＤＰ(Link  Layer  Discovery  Protocol)等を用いてトポロジを探索して設定しても良い。
【００３７】
図５は、データトポロジ情報の一例を示す説明図である。図５に示すデータトポロジ情報５１は、ＯＦＳ２間のデータプレーン５上の接続トポロジを管理し、接続元５１Ａ及び接続先５１Ｂの経路毎に経路コスト５１Ｃを対応付けて管理している。
【００３８】
図６は、制御トポロジ情報の一例を示す説明図である。図６に示す制御トポロジ情報５２は、例えば、ＯＦＳ２とＯＦＣ３との間、ＯＦＳ２とＳＷ４との間、ＯＦＣ３とＳＷ４との間の制御トポロジ上の接続トポロジを管理し、接続元５２Ａ及び接続先５２Ｂの経路毎に経路コスト５２Ｃを対応付けて管理している。
【００３９】
制御対象ＯＦＳテーブル４１Ｃは、自装置が監視制御する制御対象のＯＦＳ２を識別する識別子やアドレス等の情報を管理するテーブルである。更に、制御対象ＯＦＳテーブル４１Ｃには、制御対象のＯＦＳ２の識別子及びアドレスの他に、制御対象のＯＦＳ２毎に代表ＯＦＳ１１の有無も対応付けて管理している。通信部４２は、例えば、ＮＷＩＦ２５に相当し、制御プレーン６と接続し、ＯＦＳ２との間で交換するメッセージを送受信する。
【００４０】
メッセージ処理部４３は、通信部４２を通じてＯＦＳ２からのPacket-in等のOpen Flowメッセージを受信すると共に、ＯＦＳ２に対してFlow ModやPacket-out等のOpen Flowメッセージを送信する。メッセージ処理部４３は、受信したOpen Flowメッセージに対応する処理を実行する。更に、メッセージ処理部４３は、応答処理部４３Ａを有する。応答処理部４３Ａは、例えば、代表ＯＦＳ１１からのEcho Requestを受信した場合に、通信部４２を通じてEcho Replyを代表ＯＦＳ１１に返信する。
【００４１】
接続処理部４４は、ＯＦＳ２からの要求を受け付け、制御対象ＯＦＳ２の識別情報を確認し、ＯＦＳ２との間でセキュアチャネルを確立する。
【００４２】
選出部４５は、制御対象ＯＦＳテーブル４１Ｃから代表ＯＦＳ１１を選出する処理部である。選出部４５は、制御対象ＯＦＳテーブル４１Ｃからデータトポロジ情報及び制御トポロジ情報等のトポロジ情報に基づき、代表ＯＦＳ１１を選出し、選出した代表ＯＦＳ１１の識別子及びアドレスを制御対象ＯＦＳテーブル４１Ｃに記憶する。例えば、選出部４５は、制御トポロジ情報に基づき、プライマリＯＦＣ１２Ａとの制御プレーン６上の経路コストが最小のＯＦＳ２を代表ＯＦＳ１１に選出する。更に、指示部４６は、選出部４５で選出したＯＦＳ２に対して代表ＯＦＳ１１の動作移行を指示する。
【００４３】
識別部４７は、通信部４２を通じて受信したメッセージを識別し、識別結果に基づき、受信メッセージがＯＦＳ２からのOpen Flowメッセージの場合、受信メッセージをメッセージ処理部４３に転送する。また、識別部４７は、受信メッセージがＴＣＰ接続やセキュアチャネル確立要求に関するメッセージの場合、受信メッセージを接続処理部４４に転送する。
【００４４】
次に実施例１の通信システム１の動作について説明する。図７は、実施例１の通信システム１の障害検出時の動作の一例を示す説明図である。尚、説明の便宜上、第１のＯＦＳ２Ａ〜第５のＯＦＳ２Ｅの第１のＯＦＳ群１０Ａは、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａとし、第２のＯＦＣ３ＢをセカンダリＯＦＣ１２Ｂとする。また、第６のＯＦＳ２Ｆ〜第９のＯＦＳ２Ｉの第２のＯＦＳ群１０Ｂは、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａとし、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂとする。更に、第１のＯＦＣ３Ａは、第３のＯＦＳ２Ｃを代表ＯＦＳ１１、第２のＯＦＣ３Ｂは第７のＯＦＳ２Ｇを代表ＯＦＳ１１とする。
【００４５】
第３のＯＦＳ２Ｃは、代表ＯＦＳ１１であるため、制御プレーン６上の第１のＳＷ４Ａ及び第３のＳＷ４Ｃを経由して第１のＯＦＣ３Ａとの間でキープアライブを実行する（ステップＳ１１）。第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａとのキープアライブの結果に基づき、第１のＯＦＣ３Ａの障害を検出する（ステップＳ１２）。第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａの障害を検出した場合、隣接する各ＯＦＳ２にデータプレーン５を用いて第１のＯＦＣ３Ａの障害を示す障害通知をフラッディング送信する（ステップＳ１３）。そして、第３のＯＦＳ２Ｃは、制御プレーン６を用いて第１のＯＦＣ３Ａから第２のＯＦＣ３ＢにプライマリＯＦＣ１２Ａを切替える（ステップＳ１４）。
【００４６】
更に、第２のＯＦＳ２Ｂは、第３のＯＦＳ２Ｃからの障害通知を受信した場合、ＯＦＣテーブル３１Ｃを参照する。そして、第２のＯＦＳ２Ｂは、障害通知内の第１のＯＦＣ３Ａが自装置のプライマリＯＦＣ１２Ａであるため、データプレーン５を用いて、隣接する各ＯＦＳ２に障害通知をフラッディング送信する（ステップＳ１５）。尚、第１のＯＦＳ２Ａ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅも同様に、ＯＦＣテーブル３１Ｃを参照し、障害通知内の障害ＯＦＣ３が自装置のプライマリＯＦＣ１２Ａであると判定する。従って、第１のＯＦＳ２Ａ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、データプレーン５を用いて隣接する各ＯＦＳ２に障害通知をフラッディング送信する（ステップＳ１６）。各ＯＦＳ２は、障害通知内の第１のＯＦＣ３Ａが自装置のプライマリＯＦＣ１２Ａの場合、第１のＯＦＣ３Ａから第２のＯＦＣ３ＢへとプライマリＯＦＣ１２Ａを切替える（ステップＳ１７）。
【００４７】
尚、第６のＯＦＳ２Ｆは、自装置のプライマリＯＦＣ１２Ａが第２のＯＦＣ３Ｂであるため、第５のＯＦＳ２Ｅからの障害通知内の障害ＯＦＣ３の識別子が自装置のプライマリＯＦＣ１２Ａと異なる。従って、第６のＯＦＳ２Ｆは、第５のＯＦＳ２Ｅからの障害通知の転送を禁止する（ステップＳ１８）。尚、図７の例では、第５のＯＦＳ２Ｅは、障害通知をフラッディング送信した場合を例示したが、そもそも、第６のＯＦＳ２Ｆが第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａとしているため、第６のＯＦＳ２Ｆへの障害通知を転送しないようにしても良い。
【００４８】
また、第７のＯＦＳ２Ｇは、代表ＯＦＳ１１であるため、制御プレーン６を用いて、第２のＯＦＣ３Ｂとの間で定期的にキープアライブを実行するものである。
【００４９】
図８は、第１の障害検出処理に関わる代表ＯＦＳ１１の処理動作の一例を示すフローチャートである。図８に示す第１の障害検知処理は、プライマリＯＦＣ１２Ａとの間でキープアライブを実行し、プライマリＯＦＣ１２Ａの障害を検出した場合に障害通知をフラッディング送信し、プライマリＯＦＣ１２ＡをセカンダリＯＦＣ１２Ｂに切替える処理である。
【００５０】
図８において代表ＯＦＳ１１内の監視部３４Ｂは、Echo Replyの失敗回数をリセットし（ステップＳ２１）、制御プレーン６を用いて自装置のプライマリＯＦＣ１２Ａに対してキープアライブのEcho Requestを送信する（ステップＳ２２）。検出部３４Ｃは、Echo Requestを送信後、Echo Replyの受信待ちタイマを開始し（ステップＳ２３）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定する（ステップＳ２４）。検出部３４Ｃは、Echo Replyを受信した場合（ステップＳ２４肯定）、プライマリＯＦＣ１２Ａが正常と判定し（ステップＳ２５）、図８に示す処理動作を終了する。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの正常を認識できる。
【００５１】
検出部３４Ｃは、プライマリＯＦＣ１２ＡからEcho Replyを受信しなかった場合（ステップＳ２４否定）、Echo Replyの受信待ちタイマがタイムアップしたか否かを判定する（ステップＳ２６）。検出部３４Ｃは、受信待ちタイマがタイムアップした場合（ステップＳ２６肯定）、失敗回数を＋１インクリメントし（ステップＳ２７）、失敗回数が所定回数に到達したか否かを判定する（ステップＳ２８）。
【００５２】
検出部３４Ｃは、失敗回数が所定回数に到達した場合（ステップＳ２８肯定）、プライマリＯＦＣ１２Ａの障害と判定する（ステップＳ２９）。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を認識できる。代表ＯＦＳ１１内の送信部３５Ｂは、プライマリＯＦＣ１２Ａの障害通知をフラッディング送信する（ステップＳ３０）。更に、代表ＯＦＳ１１内の切替部３５Ａは、障害通知をフラッディング送信後、ＯＦＣ３の切替動作を実行し（ステップＳ３１）、図８に示す処理動作を終了する。その結果、代表ＯＦＳ１１は、セカンダリＯＦＣ１２ＢをプライマリＯＦＣ１２Ａに切替えることで障害を復旧できる。
【００５３】
また、検出部３４Ｃは、受信待ちタイマがタイムアップしていない場合（ステップＳ２６否定）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定すべく、ステップＳ２４に移行する。監視部３４Ｂは、失敗回数が所定回数に到達したのではない場合（ステップＳ２８否定）、再度、プライマリＯＦＣ１２Ａに対してEcho Requestを送信すべく、ステップＳ２２に移行する。
【００５４】
図８に示す第１の障害検出処理を実行する代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａとの間でキープアライブを実行する。その結果、プライマリＯＦＣ１２Ａ側のキープアライブに要する処理負担及び、キープアライブに要する制御プレーン６の通信負荷を抑制できる。
【００５５】
代表ＯＦＳ１１は、受信待ちタイマをタイムアップするまでにEcho Replyを受信した場合、プライマリＯＦＣ１２Ａの正常と判定する。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの正常を認識できる。
【００５６】
代表ＯＦＳ１１は、失敗回数が所定回数に到達した場合に、プライマリＯＦＣ１２Ａの障害と判定する。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を認識できる。
【００５７】
代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を検出した場合、障害のプライマリＯＦＣ１２Ａを識別する識別子を含む障害通知をフラッディング送信した。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害発生を他のＯＦＳ２に報知できる。
【００５８】
更に、各ＯＦＳ２は、障害通知を受信した場合、障害通知のプライマリＯＦＣ１２Ａの識別子と自装置を制御するプライマリＯＦＣ１２Ａの識別子とを比較し、自装置のプライマリＯＦＣ１２Ａの障害であるか否かを判定する。更に、ＯＦＳ２は、自装置のプライマリＯＦＣ１２Ａの障害と判定した場合に、その障害通知を隣接するＯＦＳ２にフラッディング送信する。その結果、各ＯＦＳ２は、自装置のプライマリＯＦＣ１２Ａの障害を報知できる。更に、ＯＦＳ２は、自装置のプライマリＯＦＣ１２Ａの障害と判定した場合に、プライマリＯＦＣ１２ＡからセカンダリＯＦＣ１２Ｂに切り替えるため、自装置を監視制御するＯＦＣ３の障害を復旧できる。
【００５９】
更に、各ＯＦＳ２は、受信した障害通知が自装置のプライマリＯＦＣ１２Ａでない場合、その障害通知の転送を禁止する。その結果、各ＯＦＳ２は、自装置のプライマリＯＦＣ１２Ａ以外の無駄な障害通知の転送を防止することで、制御プレーン６の通信負荷を抑制できる。
【００６０】
図９は、第１の障害検出処理に関わる通信システム１のＯＦＳ２及びＯＦＣ３の処理動作の一例を示すシーケンス図である。尚、代表ＯＦＳ１１は、第３のＯＦＳ２Ｃ、プライマリＯＦＣ１２Ａは第１のＯＦＣ３Ａ、セカンダリＯＦＣ１２Ｂは第２のＯＦＣ３Ｂとする。
【００６１】
代表ＯＦＳ１１の第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａとの間でキープアライブを実行するため、第１のＯＦＣ３Ａに対してEcho Requestを送信する（ステップＳ４１）。第１のＯＦＣ３Ａは、Echo Requestを受信した場合、Echo Replyを第３のＯＦＳ２Ｃに返信する（ステップＳ４２）。次に、第１のＯＦＣ３Ａに障害が発生したとする（ステップＳ４３）。この際、第３のＯＦＳ２Ｃは、次のキープアライブの実行タイミングで、第１のＯＦＣ３Ａに対してEcho Requestを送信する（ステップＳ４４）。しかしながら、第１のＯＦＣ３Ａは、障害が発生しているため、Echo Requestに対するEcho Replyを第３のＯＦＳ２Ｃに返信できない。その結果、第３のＯＦＳ２Ｃは、Echo Requestに対するEcho Replyが受信できず、第１のＯＦＣ３Ａの障害を検出することになる（ステップＳ４５）。
【００６２】
第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａの障害を検出した場合、第１のＯＦＳ２Ａ、第２のＯＦＳ２Ｂ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅに第１のＯＦＣ３Ａの障害を通知する障害通知をフラッディング送信する（ステップＳ４６）。そして、第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａの障害を検出したので、第１のＯＦＣ３Ａから第２のＯＦＣ３Ｂへ、プライマリＯＦＣ１２Ａを切替える（ステップＳ４７）。第１のＯＦＳ２Ａ、第２のＯＦＳ２Ｂ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、第１のＯＦＣの障害の障害通知を受信したので、第１のＯＦＣ３Ａから第２のＯＦＣ３Ｂへ、ＯＦＣ３の切替動作を実行し（ステップＳ４８）、図９に示す処理動作を終了する。
【００６３】
実施例１では、代表ＯＦＳ１１のみがプライマリＯＦＣ１２Ａとの間で定期的にキープアライブを実行し、キープアライブ結果に基づき、プライマリＯＦＣ１２Ａの障害を検出した場合に、障害通知を他のＯＦＳ２にフラッディング送信する。つまり、プライマリＯＦＣ１２Ａとのキープアライブを代表ＯＦＳ１１に限定したので、キープアライブに要するプライマリＯＦＣ１２Ａ側の処理負担及び制御プレーン６上のキープアライブに要する通信負荷を抑制できる。
【００６４】
代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を検出した場合、プライマリＯＦＣ１２ＡをセカンダリＯＦＣ１２Ｂに切替える。また、各ＯＦＳ２は、障害通知を受信した場合に、障害通知内の障害のＯＦＣ３の識別子が自装置のプライマリＯＦＣ１２Ａの識別子の場合、プライマリＯＦＣ１２ＡをセカンダリＯＦＣ１２Ｂに切替える。その結果、プライマリＯＦＣ１２Ａに障害を検出した場合でも、セカンダリＯＦＣ１２Ｂに切替えることで自装置を制御するＯＦＣ３の障害を復旧できる。
【００６５】
尚、上記実施例１の代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を検出した場合、障害通知をフラッディング送信した。しかしながら、フラッディングに限定されるものではなく、障害を通知すべきＯＦＳ２を事前に設定し、この設定したＯＦＳ２に対してのみ障害通知を通知するようにテーブルを設定しても良い。
【００６６】
上記実施例１では、代表ＯＦＳ１１のキープアライブに失敗する原因として、前述のようにプライマリＯＦＣ１２Ａ自体が障害となりEcho Replyが返信できなくなることが典型である。しかしながら、その他の原因として、プライマリＯＦＣ１２Ａ自体は障害でないが、プライマリＯＦＣ１２Ａと代表ＯＦＳ１１との間の制御プレーン６上のリンクやＳＷ４が障害となる場合も考えられる。この場合でも、代表ＯＦＳ１１は、そもそも、Echo RequestがプライマリＯＦＣ１２Ａに到達できず、やはり代表ＯＦＳ１１でEcho Replyを受信できないため、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害と判定することになる。
【００６７】
しかしながら、プライマリＯＦＣ１２Ａ自体の障害と制御プレーン６上のリンクダウンとを切り分けできるようにしても良い。この場合、代表ＯＦＳ１１の他に副代表ＯＦＳを加え、障害発生の原因を切り分けできる実施の形態について、実施例２として、以下に説明する。
【実施例２】
【００６８】
図１０は、実施例２のＯＦＳ２Ｘの機能構成の一例を示すブロック図である。尚、図３に示す実施例１のＯＦＳ２と同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。
【００６９】
実施例２の通信システム１Ａと実施例１の通信システム１とが異なるところは、代表ＯＦＳ１１の他に、図１３に示す副代表ＯＦＳ１３を追加した点にある。尚、副代表ＯＦＳ１３は、例えば、第２のスイッチ装置に相当する。また、図１０に示すＯＦＳ２Ｘと図３に示すＯＦＳ２とが異なるところは、代表テーブル３１Ｄを内蔵した点にある。代表テーブル３１Ｄには、自装置が代表ＯＦＳ１１、副代表ＯＦＳ１３、若しくは、それ以外のＯＦＳであるかを識別する代表識別子を管理している。代表テーブル３１Ｄは、自装置が代表ＯＦＳ１１の場合、代表識別子を“１”、自装置が副代表ＯＦＳ１３の場合、代表識別子を“２”、自装置が代表ＯＦＳ１１及び副代表ＯＦＳ１３以外のＯＦＳ２の場合、代表識別子を“０”としている。
【００７０】
判定部３４Ａは、代表テーブル３１Ｄを参照し、自装置が代表ＯＦＳ１１であるか否かを判定すると共に、自装置が副代表ＯＦＳ１３であるか否かを判定する。副代表ＯＦＳ１３内の監視部３４Ｂは、自装置が副代表ＯＦＳ１３であって、受信部３５Ｃを通じてプライマリＯＦＣ１２Ａの障害通知を受信した場合、プライマリＯＦＣ１２Ａに対して確認キープアライブを実行する。尚、確認キープアライブは、副代表ＯＦＳ１３とプライマリＯＦＣ１２Ａとの間で実行するキープアライブである。副代表ＯＦＳ１３内の監視部３４Ｂは、プライマリＯＦＣ１２Ａに対して確認キープアライブのEcho Requestを送信する。副代表ＯＦＳ１３内の検出部３４Ｃは、Echo Request送信後、Echo Replyの受信待ちタイマを起動し、受信待ちタイマがタイムアップする前にプライマリＯＦＣ１２ＡからEcho Replyを受信した場合に、確認キープアライブの成功と判定する。また、検出部３４Ｃは、Echo Replyを受信する前に、受信待ちタイマがタイムアップした場合に失敗回数を＋１インクリメントする。そして、検出部３４Ｃは、失敗回数が所定回数に到達した場合に、確認キープアライブの失敗と判定し、そのＯＦＣ３の障害を切替処理部３５に通知する。副代表ＯＦＳ１３内の送信部３５Ｂは、確認キープアライブの失敗と判定した場合、プライマリＯＦＣ１２Ａの障害を示す障害通知を障害通知未送信のＯＦＳ２に通知する。
【００７１】
図１１は、実施例２のＯＦＣ３Ｘの機能構成の一例を示すブロック図である。尚、図４に示す実施例１のＯＦＣ３と同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。図１１に示すＯＦＣ３Ｘと図４に示すＯＦＣ３とが異なるところは、制御対象ＯＦＳテーブル４１Ｄ内に代表ＯＦＳ１１の他に、副代表ＯＦＳ１３の識別子及びアドレスを管理している点にある。制御対象ＯＦＳテーブル４１Ｄには、制御対象のＯＦＳ２の識別子及びアドレスの他に、制御対象のＯＦＳ２毎に代表ＯＦＳ１１及び副代表ＯＦＳ１３の有無も対応付けて管理している。
【００７２】
選出部４５は、制御対象ＯＦＳテーブル４１Ｄから隣接するＯＦＳ２のペアを抽出する。尚、選出部４５は、例えば、制御トポロジ情報に基づき、プライマリＯＦＣ１２Ａとの制御プレーン６上のホップ数や距離が小さいＯＦＳ２のペアや、データトポロジ情報に基づき、データプレーン５上の全てのＯＦＳ２の中央付近にあるＯＦＳのペアを抽出する。選出部４５は、制御トポロジ情報に基づき、抽出したペアのＯＦＳ２からプライマリＯＦＣ１２Ａへの経路をチェックし、経路が異なるペアＯＦＳ２を代表ＯＦＳ１１及び副代表ＯＦＳ１３と選出する。尚、選出部４５は、ペアＯＦＳの内、例えば、プライマリＯＦＣ１２Ａから経路ホップ数の短い方のＯＦＳ２を代表ＯＦＳ１１として選出しても良い。指示部４６は、選出部４５で選出した一方のＯＦＳ２に代表ＯＦＳ１１、他方のＯＦＳ２に副代表ＯＦＳ１３として動作するように指示する。
【００７３】
次に実施例２の通信システム１Ａの動作について説明する。図１２は、選出処理に関わるプライマリＯＦＣ１２Ａの処理動作の一例を示すフローチャートである。図１２に示す選出処理は、制御対象ＯＦＳテーブル４１Ｄ内の複数のＯＦＳ２のペアから代表ＯＦＳ１１及び副代表ＯＦＳ１３を選出する処理である。
【００７４】
図１２においてプライマリＯＦＣ１２Ａ内の選出部４５は、制御対象ＯＦＳテーブル４１Ｄから制御対象のＯＦＳ２を抽出する（ステップＳ１３１）。選出部４５は、抽出した制御対象ＯＦＳ２の内、データトポロジ情報に基づき、ペアのＯＦＳ２を抽出する（ステップＳ１３２）。選出部４５は、抽出したペアのＯＦＳ２の内、制御トポロジ情報に基づき、異なる経路で自装置と接続するＯＦＳ２のペアを抽出する（ステップＳ１３３）。
【００７５】
更に、選出部４５は、抽出したペアのＯＦＳ２の一方を代表ＯＦＳ１１、他方を副代表ＯＦＳ１３に選出する（ステップＳ１３４）。指示部４６は、選出した一方のＯＦＳ２に代表ＯＦＳ１１の動作を指示すると共に、他方のＯＦＳ２に副代表ＯＦＳ１３の動作を指示し（ステップＳ１３５）、図１２に示す処理動作を終了する。その結果、プライマリＯＦＣ１２Ａは、制御対象のＯＦＳ２の中から代表ＯＦＳ１１及び副代表ＯＦＳ１３を選出できる。
【００７６】
図１３は、実施例２の通信システム１Ａの副代表ＯＦＳ１３の確認キープアライブ失敗時の動作の一例を示す説明図、図１４は、実施例２の通信システム１Ａの副代表ＯＦＳ１３の確認キープアライブ成功時の動作の一例を示す説明図である。尚、説明の便宜上、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａ、第３のＯＦＳ２Ｃを代表ＯＦＳ１１、第２のＯＦＳ２Ｂを副代表ＯＦＳ１３とする。
【００７７】
図１３において代表ＯＦＳ１１である第３のＯＦＳ２Ｃは、第１のＳＷ４Ａ及び第３のＳＷ４Ｃ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対してキープアライブを実行する（ステップＳ５１）。更に、第３のＯＦＳ２Ｃは、キープアライブ結果に基づき、第１のＯＦＣ３Ａの障害を検出した場合（ステップＳ５２）、データプレーン５を用いて第１のＯＦＣ３Ａの障害を示す障害通知をフラッディング送信する（ステップＳ５３）。つまり、第３のＯＦＳ２Ｃは、第２のＯＦＳ２Ｂ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅに障害通知を通知する。その結果、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、プライマリＯＦＣ１２Ａを第２のＯＦＣ３Ｂ、セカンダリＯＦＣ１２Ｂを第１のＯＦＣ３Ａに切替えるＯＦＣ切替動作を実行する。
【００７８】
副代表ＯＦＳ１３である第２のＯＦＳ２Ｂは、第３のＯＦＳ２Ｃからの障害通知を受信した場合、第１のＳＷ４Ａ及び第２のＳＷ４Ｂ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対して確認キープアライブを実行する（ステップＳ５４）。更に、第２のＯＦＳ２Ｂは、確認キープアライブの失敗を検出した場合（ステップＳ５５）、データプレーン５を用いて第１のＯＦＣ３Ａ自体の障害を示す障害通知を障害通知未通知のＯＦＳ２に通知する（ステップＳ５６）。つまり、第２のＯＦＳ２Ｂは、障害通知を障害未通知の第１のＯＦＳ２Ａに通知する。その結果、第２のＯＦＳ２Ｂ及び第１のＯＦＳ２Ａは、プライマリＯＦＣ１２Ａを第２のＯＦＣ３Ｂ、セカンダリＯＦＣ１２Ｂを第１のＯＦＣ３Ａに切替えるＯＦＣ切替動作を実行する。
【００７９】
図１４において第３のＯＦＳ２Ｃは、第１のＳＷ４Ａ及び第３のＳＷ４Ｃ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対してキープアライブを実行する（ステップＳ６１）。更に、第３のＯＦＳ２Ｃは、キープアライブ結果に基づき、第１のＯＦＣ３Ａの障害を検出した場合（ステップＳ６２）、データプレーン５を用いて第１のＯＦＣ３Ａの障害を示す障害通知をフラッディング送信する（ステップＳ６３）。つまり、第３のＯＦＳ２Ｃは、第２のＯＦＳ２Ｂ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅに障害通知を通知する。その結果、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、プライマリＯＦＣ１２Ａを第２のＯＦＣ３Ｂ、セカンダリＯＦＣ１２Ｂを第１のＯＦＣ３Ａに切替えるＯＦＣ切替動作を実行する。
【００８０】
副代表ＯＦＳ１３である第２のＯＦＳ２Ｂは、第３のＯＦＳ２Ｃからの障害通知を受信した場合、第１のＳＷ４Ａ及び第２のＳＷ４Ｂ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対して確認キープアライブを実行する（ステップＳ６４）。更に、第２のＯＦＳ２Ｂは、確認キープアライブの成功を検出した場合（ステップＳ６５）、第１のＯＦＣ３Ａ自体の障害ではなく、制御プレーン６上のリンクダウンと判断できる。
【００８１】
第２のＯＦＳ２Ｂは、第１のＯＦＣ３Ａの正常と判定する。その結果、第１のＯＦＳ２Ａ及び第２のＯＦＳ２Ｂは、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａとして維持する。
【００８２】
図１４のケースでは、第１のＯＦＣ３Ａ自体は障害ではなく、制御プレーン６上の第１のＳＷ４Ａと第３のＳＷ４Ｃとの間のリンクダウンであるため、副代表ＯＦＳ１３が実行する確認キープアライブは成功する。従って、副代表ＯＦＳ１３は、第１のＯＦＣ１２Ａ自体の障害ではなく、代表ＯＦＳ１１である第３のＯＦＳ２Ｃと第１のＯＦＣ３Ａとの間の制御プレーン６上のリンクダウンと判断することになる。そして、副代表ＯＦＳ１３は、第１のＯＦＳ２Ａ及び第２のＯＦＳ２Ｂと第１のＯＦＣ３Ａとの接続に影響が無いため、セカンダリＯＦＣ１２Ｂへの切替及び第１のＯＦＳ２Ａへの障害通知は実行しない。
【００８３】
図１５は、第２の障害検出処理に関わる副代表ＯＦＳ１３の処理動作の一例を示すフローチャートである。図１５に示す第２の障害検出処理は、代表ＯＦＳ１１からの障害通知を検出した場合、副代表ＯＦＳ１３からプライマリＯＦＣ１２Ａに確認キープアライブを実行する処理である。尚、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａとの間でキープアライブを実行するため、図７に示す第１の障害検出処理を実行するものとする。
【００８４】
図１５において副代表ＯＦＳ１３内の受信部３５Ｃは、データプレーン５を用いて、障害通知を受信したか否かを判定する（ステップＳ７１）。副代表ＯＦＳ１３は、障害通知を受信した場合に（ステップＳ７１肯定）、障害通知のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａであるか否かを判定する（ステップＳ７２）。
【００８５】
副代表ＯＦＳ１３内の監視部３４Ｂは、障害通知のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａの場合（ステップＳ７２肯定）、Echo Replyの失敗回数をリセットする（ステップＳ７３）。監視部３４Ｂは、制御プレーン６を用いて自装置のプライマリＯＦＣ１２Ａに確認キープアライブのEcho Requestを送信する（ステップＳ７４）。副代表ＯＦＳ１３内の検出部３４Ｃは、Echo Request送信後、Echo Replyの受信待ちタイマを開始し（ステップＳ７５）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定する（ステップＳ７６）。検出部３４Ｃは、Echo Replyを受信した場合（ステップＳ７６肯定）、確認キープアライブが成功と判定し（ステップＳ７７）、図１５に示す処理動作を終了する。
【００８６】
検出部３４Ｃは、プライマリＯＦＣ１２ＡからEcho Replyを受信しなかった場合（ステップＳ７６否定）、受信待ちタイマがタイムアップしたか否かを判定する（ステップＳ７８）。検出部３４Ｃは、受信待ちタイマがタイムアップした場合（ステップＳ７８肯定）、失敗回数を＋１インクリメントし（ステップＳ７９）、失敗回数が所定回数に到達したか否かを判定する（ステップＳ８０）。
【００８７】
検出部３４Ｃは、失敗回数が所定回数に到達した場合（ステップＳ８０肯定）、確認キープアライブが失敗と判定する（ステップＳ８１）。送信部３５Ｂは、確認キープアライブが失敗と判定した場合、プライマリＯＦＣ１２Ａの障害通知をフラッディング送信する（ステップＳ８２）。更に、切替部３５Ａは、障害通知をフラッディング後、ＯＦＣ切替動作を実行し（ステップＳ８３）、図１５に示す処理動作を終了する。
【００８８】
また、検出部３４Ｃは、受信待ちタイマがタイムアップしていない場合（ステップＳ７８否定）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定すべく、ステップＳ７６に移行する。監視部３４Ｂは、失敗回数が所定回数に到達していない場合（ステップＳ８０否定）、再度、プライマリＯＦＣ１２Ａに確認キープアライブのEcho Requestを送信すべく、ステップＳ７４に移行する。
【００８９】
受信部３５Ｃは、障害通知を受信しなかった場合（ステップＳ７１否定）、図１５に示す処理動作を終了する。また、検出部３４Ｃは、障害通知のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａでない場合（ステップＳ７２否定）、図１５に示す処理動作を終了する。
【００９０】
図１５に示す第２の障害検出処理を実行する副代表ＯＦＳ１３は、代表ＯＦＳ１１から障害通知を検出すると、プライマリＯＦＣ１２Ａとの間で確認キープアライブを実行する。副代表ＯＦＳ１３は、受信待ちタイマをタイムアップするまでにEcho Replyを受信した場合、確認キープアライブが成功と判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害ではなく、制御プレーン６のリンクダウンと認識できる。
【００９１】
副代表ＯＦＳ１３は、失敗回数が所定回数に到達した場合に、確認キープアライブが失敗と判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害発生を確認できる。
【００９２】
副代表ＯＦＳ１３は、確認キープアライブが失敗と判定した場合、障害のプライマリＯＦＣ１２Ａを識別する識別子を含む障害通知をフラッディング送信した。その結果、副代表ＯＦＳ１３に隣接する各ＯＦＳ２は、プライマリＯＦＣ１２Ａの障害発生を認識できる。
【００９３】
実施例２では、データプレーン５や制御プレーン６のトポロジ情報を考慮し、代表ＯＦＳ１１だけでなく副代表ＯＦＳ１３も選出し、代表ＯＦＳ１１から障害通知を受信した場合に、副代表ＯＦＳ１３が確認キープアライブを実行する。そして、確認キープアライブが失敗の場合、プライマリＯＦＣ１２Ａ自体の障害と判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害を確認できる。
【００９４】
また、副代表ＯＦＳ１３は、確認キープアライブが成功の場合、プライマリＯＦＣ１２Ａ自体の障害ではなく、制御プレーン６上のリンクダウンと判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害ではなく、制御プレーン６上のリンクダウンを識別できる。
【００９５】
上記実施例２の代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を検出した場合に、障害通知のフラッディング送信後に副代表ＯＦＳ１３からプライマリＯＦＣ１２Ａに確認キープアライブを実行した。しかしながら、副代表ＯＦＳ１３の確認キープアライブの結果後に、代表ＯＦＳ１１が副代表ＯＦＳ１３からの確認結果に基づき障害通知を送信しても良く、この場合の実施の形態について、実施例３として、以下に説明する。尚、実施例２の通信システム１Ａと同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。
【実施例３】
【００９６】
実施例２の通信システム１Ａと実施例３の通信システム１Ｂとが異なるところは、代表ＯＦＳ１１が、プライマリＯＦＣ１２Ａの障害を検出した場合、副代表ＯＦＳ１３にキープアライブの確認を依頼し、その確認結果に基づき、障害通知を送信する点にある。つまり、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害を検出した場合に直ちに障害通知をフラッディング送信するのではなく、副代表ＯＦＳ１３に確認を依頼する。
【００９７】
次に実施例３の通信システム１Ｂの動作について説明する。図１６は、実施例３の通信システム１Ｂの副代表ＯＦＳ１３の確認キープアライブ失敗時の動作の一例を示す説明図、図１７は、実施例３の通信システム１Ｂの副代表ＯＦＳ１３の確認キープアライブ成功時の動作の一例を示す説明図である。尚、説明の便宜上、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａ、第３のＯＦＳ２Ｃを代表ＯＦＳ１１、第２のＯＦＳ２Ｂを副代表ＯＦＳ１３とする。
【００９８】
図１６において代表ＯＦＳ１１である第３のＯＦＳ２Ｃは、第１のＳＷ４Ａ及び第３のＳＷ４Ｃ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対してキープアライブを実行する（ステップＳ５１）。更に、第３のＯＦＳ２Ｃは、キープアライブ結果に基づき、第１のＯＦＣ３Ａの障害を検出した場合（ステップＳ５２）、データプレーン５を用いて確認依頼を副代表ＯＦＳ１３の第２のＯＦＳ２Ｂに通知する（ステップＳ５３Ａ）。尚、第３のＯＦＳ２Ｃは、確認依頼を副代表ＯＦＳ１３へ通知するために、副代表ＯＦＳ１３への出力ポートを明示的に設定しておくものとする。
【００９９】
第２のＯＦＳ２Ｂは、確認依頼を受信した場合、第１のＳＷ４Ａ及び第２のＳＷ４Ｂ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対して確認キープアライブを実行する（ステップＳ５４Ａ）。更に、第２のＯＦＳ２Ｂは、確認キープアライブが失敗と判定した場合（ステップＳ５５Ａ）、データプレーン５を用いて確認結果（失敗）を第３のＯＦＳ２Ｃに通知する（ステップＳ５６Ａ）。
【０１００】
第３のＯＦＳ２Ｃは、確認結果（失敗）の場合、第１のＯＦＣ３Ａ自体の障害と判断し、障害通知をフラッディング送信する（ステップＳ５７Ａ）。また、副代表ＯＦＳ１３の第２のＯＦＳ２Ｂは、代表ＯＦＳ１３から障害通知を受信した場合、障害通知を障害通知未通知のＯＦＳ２に通知する。つまり、第２のＯＦＳ２Ｂは、障害通知を第１のＯＦＳ２Ａに通知する。その結果、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ、及び第５のＯＦＳ２Ｅ、また、第２のＯＦＳ２Ｂ及び第１のＯＦＳ２ＡはＯＦＣ３の切替動作を実行する。つまり、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅ、また、第２のＯＦＳ２Ｂ及び第１のＯＦＳ２Ａは、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａ、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂに切替える。
【０１０１】
図１７において第３のＯＦＳ２Ｃは、第１のＳＷ４Ａ及び第３のＳＷ４Ｃ経由の制御プレーン６を用いて、第１のＯＦＣ３Ｃに対してキープアライブを実行する（ステップＳ６１）。更に、第３のＯＦＳ２Ｃは、キープアライブ結果に基づき、第１のＯＦＣ３Ａの障害を検出した場合（ステップＳ６２）、データプレーン５を用いて確認依頼を副代表ＯＦＳ１３の第２のＯＦＳ２Ｂに通知する（ステップＳ６３Ａ）。
【０１０２】
第２のＯＦＳ２Ｂは、確認依頼を受信した場合、第１のＳＷ４Ａ及び第２のＳＷ４Ｂ経由の制御プレーン６を用いて、第１のＯＦＣ３Ａに対して確認キープアライブを実行する（ステップＳ６４Ａ）。更に、第２のＯＦＳ２Ｂは、確認キープアライブが成功と判定した場合（ステップＳ６５Ａ）、データプレーンを用いて確認結果（成功）を第３のＯＦＳ２Ｃに通知する（ステップＳ６６Ａ）。
【０１０３】
第３のＯＦＳ２Ｃは、確認結果（成功）の場合、第１のＯＦＣ３Ａ自体の障害ではなく、制御プレーン６上のリンクダウンと判定し、第２のＯＦＳ２Ｂへの出力ポート以外の出力ポートから障害通知をフラッディング送信する（ステップＳ６７Ａ）。その結果、第３のＯＦＳ２Ｃは、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅに障害通知を送信する。第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２ＥはＯＦＣ３の切替動作を実行する。つまり、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａ、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂに切替える。
【０１０４】
第２のＯＦＳ２Ｂは、確認キープアライブが成功と判定した場合、第１のＯＦＣ３Ａ自体の障害ではなく、制御プレーン６上のリンクダウンと判断できる。その結果、第１のＯＦＳ２Ａ及び第２のＯＦＳ２Ｂは、第１のＯＦＣ３ＡをプライマリＯＦＣ１２Ａとして維持することになる。
【０１０５】
図１７のケースでは、第１のＯＦＣ３Ａ自体が障害ではなく、制御プレーン６上の第１のＳＷ４Ａと第３のＳＷ４Ｃとの間のリンクダウンであるため、副代表ＯＦＳ１３が実行する確認キープアライブは成功する。従って、副代表ＯＦＳ１３は、第１のＯＦＣ１２Ａ自体の障害ではなく、代表ＯＦＳ１１である第３のＯＦＳ２Ｃと第１のＯＦＣ３Ａとの間の制御プレーン６上のリンクダウンと判定することになる。そして、副代表ＯＦＳ１３は、第１のＯＦＳ２Ａ及び第２のＯＦＳ２Ｂと第１のＯＦＣ３Ａとの接続に影響が無いため、セカンダリＯＦＣ１２Ｂへの切替及び第１のＯＦＳ２Ａへの障害通知を実行しない。
【０１０６】
図１８は、第３の障害検出処理に関わる代表ＯＦＳ１１の処理動作の一例を示すフローチャートである。図１８に示す第３の障害検出処理は、プライマリＯＦＣ１２Ａとの間でキープアライブを実行し、プライマリＯＦＣ１２Ａの障害を検出した場合に確認依頼を副代表ＯＦＳ１３に送信する処理である。
【０１０７】
図１８において代表ＯＦＳ１１内の監視部３４Ｂは、Echo Replyの失敗回数をリセットし（ステップＳ９１）、制御プレーン６を用いて自装置のプライマリＯＦＣ１２Ａに対してキープアライブのEcho Requestを送信する（ステップＳ９２）。検出部３４Ｃは、Echo Requestを送信後、Echo Replyの受信待ちタイマを開始し（ステップＳ９３）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定する（ステップＳ９４）。検出部３４Ｃは、Echo Replyを受信した場合（ステップＳ９４肯定）、プライマリＯＦＣ１２Ａが正常と判定し（ステップＳ９５）、図１８に示す処理動作を終了する。
【０１０８】
検出部３４Ｃは、プライマリＯＦＣ１２ＡからEcho Replyを受信しなかった場合（ステップＳ９４否定）、受信待ちタイマがタイムアップしたか否かを判定する（ステップＳ９６）。検出部３４Ｃは、受信待ちタイマがタイムアップした場合（ステップＳ９６肯定）、失敗回数を＋１インクリメントし（ステップＳ９７）、失敗回数が所定回数に到達したか否かを判定する（ステップＳ９８）。
【０１０９】
送信部３５Ｂは、失敗回数が所定回数に到達した場合（ステップＳ９８肯定）、データプレーン５を用いて、障害ＯＦＣ３の識別子を含む確認依頼を副代表ＯＦＳ１３に送信し（ステップＳ９９）、図１８に示す処理動作を終了する。
【０１１０】
また、検出部３４Ｃは、受信待ちタイマがタイムアップしていない場合（ステップＳ９６否定）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定すべく、ステップＳ９４に移行する。送信部３５Ｂは、失敗回数が所定回数に到達しなかった場合（ステップＳ９８否定）、プライマリＯＦＣ１２ＡにEcho Requestを送信すべく、ステップＳ９２に移行する。
【０１１１】
図１８に示す第３の障害検出処理を実行する代表ＯＦＳ１１は、失敗回数が所定回数に到達した場合に、副代表ＯＦＳ１３に確認依頼を通知する。その結果、代表ＯＦＳ１１は、プライマリＯＦＣ１２Ａの障害の確認依頼を副代表ＯＦＳ１３に依頼できる。
【０１１２】
図１９は、第４の障害検出処理に関わる副代表ＯＦＳ１３の処理動作の一例を示すフローチャートである。図１９に示す第４の障害検出処理は、代表ＯＦＳ１１からの確認依頼を検出した場合、プライマリＯＦＣ１２Ａとの間で確認キープアライブを実行する処理である。
【０１１３】
図１９において副代表ＯＦＳ１３の受信部３５Ｃは、データプレーン５を用いて確認依頼を受信したか否かを判定する（ステップＳ１０１）。副代表ＯＦＳ１３内の検出部３４Ｃは、確認依頼を受信した場合に（ステップＳ１０１肯定）、確認依頼のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａであるか否かを判定する（ステップＳ１０２）。
【０１１４】
監視部３４Ｂは、確認依頼のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａの場合（ステップＳ１０２肯定）、Echo Replyの失敗回数をリセットする（ステップＳ１０３）。更に、監視部３４Ｂは、制御プレーン６を用いて自装置のプライマリＯＦＣ１２Ａに確認キープアライブのEcho Requestを送信する（ステップＳ１０４）。検出部３４Ｃは、Echo Request送信後、受信待ちタイマを開始し（ステップＳ１０５）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定する（ステップＳ１０６）。検出部３４Ｃは、Echo Replyを受信した場合（ステップＳ１０６肯定）、確認キープアライブが成功と判定する（ステップＳ１０７）。送信部３５Ｂは、確認キープアライブが成功と判定した場合、データプレーン５を用いて確認結果（成功）を代表ＯＦＳ１１に通知し（ステップＳ１０８）、図１９に示す処理動作を終了する。
【０１１５】
検出部３４Ｃは、プライマリＯＦＣ１２ＡからEcho Replyを受信しなかった場合（ステップＳ１０６否定）、受信待ちタイマがタイムアップしたか否かを判定する（ステップＳ１０９）。検出部３４Ｃは、受信待ちタイマがタイムアップした場合（ステップＳ１０９肯定）、失敗回数を＋１インクリメントし（ステップＳ１１０）、失敗回数が所定回数に到達したか否かを判定する（ステップＳ１１１）。
【０１１６】
送信部３５Ｂは、失敗回数が所定回数に到達した場合（ステップＳ１１１肯定）、確認キープアライブが失敗と判定する（ステップＳ１１２）。送信部３５Ｂは、確認キープアライブが失敗と判定した場合、データプレーン５を用いて、確認結果（失敗）を代表ＯＦＳ１１に通知し（ステップＳ１１３）、図１９に示す処理動作を終了する。
【０１１７】
また、検出部３４Ｃは、受信待ちタイマがタイムアップしていない場合（ステップＳ１０９否定）、プライマリＯＦＣ１２ＡからEcho Replyを受信したか否かを判定すべく、ステップＳ１０６に移行する。監視部３４Ｂは、失敗回数が所定回数に到達しなかった場合（ステップＳ１１１否定）、再度、プライマリＯＦＣ１２Ａに確認キープアライブのEcho Requestを送信すべく、ステップＳ１０４に移行する。
【０１１８】
受信部３５Ｃは、確認依頼を受信しなかった場合（ステップＳ１０１否定）、図１９に示す処理動作を終了する。副代表ＯＦＳ１３は、確認依頼のＯＦＣ３が自装置のプライマリＯＦＣ１２Ａでない場合（ステップＳ１０２否定）、図１９に示す処理動作を終了する。
【０１１９】
図１９に示す第４の障害検出処理を実行する副代表ＯＦＳ１３は、代表ＯＦＳ１１から確認依頼を検出すると、プライマリＯＦＣ１２Ａとの間で確認キープアライブを実行する。副代表ＯＦＳ１３は、受信待ちタイマをタイムアップするまでにEcho Replyを受信した場合、確認キープアライブ結果が成功と判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害ではなく、制御プレーン６のリンクダウンと認識できる。
【０１２０】
副代表ＯＦＳ１３は、失敗回数が所定回数に到達した場合に、確認キープアライブ結果が失敗と判定する。その結果、副代表ＯＦＳ１３は、プライマリＯＦＣ１２Ａ自体の障害発生を確認できる。
【０１２１】
更に、副代表ＯＦＳ１３は、確認キープアライブ結果を確認結果として代表ＯＦＳ１１に通知する。その結果、代表ＯＦＳ１１は、副代表ＯＦＳ１３からの確認結果に基づき、確認キープアライブ結果を認識できる。
【０１２２】
図２０は、確認応答処理に関わる代表ＯＦＳ１１の処理動作の一例を示すフローチャートである。図２０に示す確認応答処理は、副代表ＯＦＳ１３からの確認結果に基づき、プライマリＯＦＣ１２Ａの障害を確認する処理である。
【０１２３】
図２０において代表ＯＦＳ１１内の受信部３５Ｃは、データプレーン５を用いて副代表ＯＦＳ１３から確認結果を受信したか否かを判定する（ステップＳ１２１）。受信部３５Ｃは、確認結果を受信した場合（ステップＳ１２１肯定）、確認結果が「成功」であるか否かを判定する（ステップＳ１２２）。
【０１２４】
送信部３５Ｂは、確認結果が「成功」でない場合（ステップＳ１２２否定）、確認結果が「失敗」と判断し、プライマリＯＦＣ１２Ａの障害を示す障害通知をフラッディング送信する（ステップＳ１２３）。更に、切替部３５Ａは、ＯＦＣ３の切替動作を実行し（ステップＳ１２４）、図２０に示す処理動作を終了する。つまり、代表ＯＦＳ１１は、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａ、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂに切替える。
【０１２５】
送信部３５Ｂは、確認結果が「成功」の場合（ステップＳ１２２肯定）、副代表ＯＦＳ１３と接続するポート以外の出力ポートから障害通知を送信する（ステップＳ１２５）。更に、切替部３５Ａは、ＯＦＣ３の切替動作を実行し（ステップＳ１２４）、図２０に示す処理動作を終了する。つまり、代表ＯＦＳ１１及び代表ＯＦＳ１１と接続するポートの第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、障害通知に応じてＯＦＣ３の切替動作を実行する。代表ＯＦＳ１１及び第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅは、第２のＯＦＣ３ＢをプライマリＯＦＣ１２Ａ、第１のＯＦＣ３ＡをセカンダリＯＦＣ１２Ｂに切替える。
【０１２６】
受信部３５Ｃは、副代表ＯＦＳ１３から確認依頼に対する確認結果を受信しなかった場合（ステップＳ１２１否定）、図２０に示す処理動作を終了する。
【０１２７】
図２０に示す確認応答処理を実行する代表ＯＦＳ１１は、副代表ＯＦＳ１３からの確認結果が成功の場合、代表ＯＦＳ１１自体の障害ではなく、制御プレーン６上のリンクダウンと認識できる。
【０１２８】
代表ＯＦＳ１１は、副代表ＯＦＳ１３からの確認結果が失敗の場合、代表ＯＦＳ１１自体の障害であることを再確認し、プライマリＯＦＣ１２Ａの障害をフラッディング送信する。その結果、代表ＯＦＳ１１は、隣接するＯＦＳ２にプライマリＯＦＣ１２Ａの障害を報知できる。そして、各ＯＦＳ２は、障害通知を検出し、その障害通知の障害ＯＦＣ３が自装置のプライマリＯＦＣ１２Ａの場合、ＯＦＣ切替動作を実行する。その結果、自装置を制御するＯＦＣ３の障害を復旧できる。
【０１２９】
尚、上記実施例の代表ＯＦＳ１１は、Echo Replyの受信待ちタイマがタイムアップした場合に失敗回数を＋１インクリメントし、失敗回数が所定回数に到達した場合にプライマリＯＦＣ１２Ａの障害と判定した。しかしながら、失敗回数をインクリメントすることなく、Echo Replyの受信待ちタイマがタイムアップした場合にプライマリＯＦＣの障害と判定しても良い。
【０１３０】
代表ＯＦＳ１１は、障害通知をフラッディング送信する場合を例示したが、障害通知を事前に設定したＯＦＳ２に通知するようにしても良い。例えば、第５のＯＦＳ２ＥのプライマリＯＦＣ１２Ａが第１のＯＦＣ３Ａではなく、第２のＯＦＣ３Ｂに切替えられた場合には、第５のＯＦＳ２Ｅへの通知メッセージの送信は不要である。従って、第３のＯＦＳ２Ｃは、第２のＯＦＳ２Ｂ及び第４のＯＦＳ２Ｄと接続する２個の出力ポートに通知メッセージを送信するように設定しておくものとする。
【０１３１】
各ＯＦＳ２の障害通知の転送も、フラッディング送信に限定されるものではなく、各ＯＦＳ２に転送先の出力ポートを明示的に設定しておくことで障害通知を転送しても良い。例えば、第４のＯＦＳ２Ｄは、第２のＯＦＳ２Ｂから第１のＯＦＳ２Ａに障害通知が転送済みであるため、第１のＯＦＳ２Ａに障害通知を転送する必要はない。従って、第２のＯＦＳ２Ｂにのみ、障害通知を転送すべく、第１のＯＦＳ２Ａへの出力ポートを指定する。
【０１３２】
キープアライブのEcho Requestを送信する送信周期は、Echo Replyの受信待ちタイマのタイムアップ時間と同一にしても良く、適宜変更可能である。例えば、送信周期と受信待ちタイマのタイムアップ時間とを同一の３０ｍ秒とした場合、Echo Requestメッセージは３０ｍ秒周期で送信し、送信した各Echo Requestに対するEcho Replyが３０ｍ秒以内に代表ＯＦＳ１１で受信できるか否かを監視する。また、Echo Replyの受信失敗をより速く検出したい場合には、例えば、Echo Reply受信待ちタイマを１０ｍ秒に設定しても良く。この場合は、Echo Request送信後、１０ｍ秒以内にEcho Replyが受信できなかった場合には受信失敗となるため、ＯＦＣ障害を検出するまでの時間を短縮化できる。尚、この点、代表ＯＦＳ１１に限定されるものではなく、副代表ＯＦＳ１３にも適用可能である。
【０１３３】
実施例において、例えば、制御プレーン６上の第１のＯＦＳ２Ａ又は第２のＯＦＳ２Ｂと第２のＳＷ４Ｂとの間のリンクダウン、又は、第１のＳＷ４Ａと第２のＳＷ４Ｂとの間のリンクダウンが発生したとする。この場合、第１のＯＦＳ２Ａ又は第２のＯＦＳ２Ｂのいずれか、あるいは第１のＯＦＳ２Ａ及び第２のＯＦＳ２Ｂの両方が第１のＯＦＣ３Ａと接続不可となる。また、制御プレーン６において第２のＯＦＣ３Ｂ等の他のセカンダリＯＦＣ１２Ｂへ接続する経路も存在しなくなるため、運用者等の人手による障害の復旧が必要となる。
【０１３４】
上記実施例において、例えば、第３のＳＷ４Ｃと、第３のＯＦＳ２Ｃ、第４のＯＦＳ２Ｄ又は第５のＯＦＳ２Ｅとの間でリンクダウンが発生したとする。この場合、障害が発生したリンクに接続しているＯＦＳ２は、第１のＯＦＣ３Ａと接続不可となる。この場合、制御プレーン６において第３のＳＷ４Ｃを経由して第２のＯＦＣ３Ｂ等の他のセカンダリＯＦＣ１２Ｂへ接続することも不可となるため、運用者等の人手による障害の復旧が必要となる。尚、代表ＯＦＳ１１である第３のＯＦＳ２Ｃと第３のＳＷ４Ｃとの間のリンクが障害となった場合には、第１のＯＦＣ３Ａへのキープアライブが行えなくなる以前に、第３のＯＦＳ２Ｃにおいて第３のＳＷ４Ｃとの間のリンクダウンが検出されることになる。第３のＯＦＳ２Ｃは、第１のＯＦＣ３Ａ自体の障害ではなく、制御プレーン６のリンクダウンを検出した場合には、第１のＯＦＣ３Ａへ接続不可となるのは第３のＯＦＳ２Ｃ自体のみである。従って、隣接の第１のＯＦＳ２Ａ、第２のＯＦＳ２Ｂ、第４のＯＦＳ２Ｄ及び第５のＯＦＳ２Ｅと第１のＯＦＣ３Ａとの接続には影響が無いものと判断して、いずれの出力ポートからもＯＦＣ障害検出通知を送信しない。
【０１３５】
上記実施例の選出部４５は、制御トポロジ情報に基づき、プライマリＯＦＣ１２Ａとの制御プレーン６上のホップ数や距離を考慮した経路コストが最小のＯＦＳ２を代表ＯＦＳ１１に選出した。しかしながら、選出部４５は、例えば、ＯＦＳ２の識別子やアドレスの値が最も小さいＯＦＳ２や、データトポロジ情報に基づく、データプレーン５上の全てのＯＦＳ２の中央付近にあるＯＦＳ２を代表ＯＦＳ１１として選出しても良い。また、選出部４５は、制御対象ＯＦＳテーブル４１ＣからランダムにＯＦＳ２を選出し、選出したＯＦＳ２を代表ＯＦＳ１１として選出しても良い。
【０１３６】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【０１３７】
更に、各装置で行われる各種処理機能は、ＣＰＵ（Central  Processing  Unit）、ＤＳＰ（Digital  Signal  Processor）やＦＰＧＡ（Field  Programmable  Gate  Array）等上で、その全部又は任意の一部を実行するようにしても良い。また、各種処理機能は、ＣＰＵ等で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良い。
【０１３８】
各種情報を記憶する領域は、例えば、ＲＯＭ（Read  Only  Memory）や、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）やＮＶＲＡＭ（Non  Volatile  Random  Access  Memory）等のＲＡＭ（Random  Access  Memory）で構成しても良い。
【０１３９】
ところで、本実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータ内のＣＰＵ等のプロセッサで実行させることによって実現できる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行する情報処理装置の一例を説明する。図２１は、障害検出プログラムを実行するコンピュータの一例を示す説明図である。
【０１４０】
図２１に示す障害検出プログラムを実行するコンピュータ２００は、通信部２１０と、ＨＤＤ（Hard  Disc  driver）２２０と、ＲＯＭ２３０と、ＲＡＭ２４０と、ＣＰＵ２５０とを有する。通信部２１０、ＨＤＤ２２０、ＲＯＭ２３０、ＲＡＭ２４０及びＣＰＵ２５０は、バス２６０を介して接続される。通信部２１０は、第１のネットワーク及び第２のネットワークと通信接続する。第１のネットワークは、複数のスイッチ装置との間で、データの経路を切り替えて接続する。第２のネットワークは、複数のスイッチ装置を制御する制御装置と接続する。
【０１４１】
そして、ＲＯＭ２３０には、上記実施例と同様の機能を発揮する障害検出プログラムが予め記憶されている。ＲＯＭ２３０は、障害検出プログラムとして判定プログラム２３０Ａ、監視プログラム２３０Ｂ、検出プログラム２３０Ｃ及び通知プログラム２３０Ｄが記憶されている。尚、ＲＯＭ２３０ではなく、図示せぬドライブでコンピュータ読取可能な記録媒体に障害検出プログラムが記録されていても良い。また、記録媒体としては、例えば、ＣＤ−ＲＯＭ、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ等でも良い。
【０１４２】
そして、ＣＰＵ２５０は、判定プログラム２３０ＡをＲＯＭ２３０から読み出し、ＲＡＭ２４０上で判定プロセス２４０Ａとして機能させる。更に、ＣＰＵ２５０は、監視プログラム２３０ＢをＲＯＭ２３０から読み出し、ＲＡＭ２４０上で監視プロセス２４０Ｂとして機能させる。ＣＰＵ２５０は、検出プログラム２３０ＣをＲＯＭ２３０から読み出し、ＲＡＭ２４０上で検出プロセス２４０Ｃとして機能させる。ＣＰＵ２５０は、通知プログラム２３０ＤをＲＯＭ２３０から読み出し、ＲＡＭ２４０上で通知プロセス２４０Ｄとして機能させる。
【０１４３】
ＣＰＵ２５０は、第１のネットワーク上でデータの経路を切替える複数のスイッチ装置の内、自装置が第１のスイッチ装置であるか否かを判定する。ＣＰＵ２５０は、自装置が第１のスイッチ装置の場合に、第１のネットワークと異なる第２のネットワークを通じて複数のスイッチ装置を制御する制御装置との間でキープアライブを実行する。ＣＰＵ２５０は、前記キープアライブの監視結果に基づき、前記制御装置の障害を検出する。ＣＰＵ２５０は、前記制御装置の障害を検出した場合に、前記第１のネットワークを通じて、前記制御装置が制御する前記スイッチ装置に障害報告を通知する。その結果、制御装置の障害を検出する際の第２のネットワークの通信負荷及び制御装置側の処理負担を抑制できる。
【符号の説明】
【０１４４】
２  ＯＦＳ
３  ＯＦＣ
５  データプレーン
６  制御プレーン
１１  代表ＯＦＳ
１２Ａ  プライマリＯＦＣ
１２Ｂ  セカンダリＯＦＣ
１３  副代表ＯＦＳ
３４Ａ  判定部
３４Ｂ  監視部
３４Ｃ  検出部
３５Ａ  切替部
３５Ｂ  送信部
３５Ｃ  受信部
【図１】
2016208181.tif 000003
【図２】
2016208181.tif 000004
【図３】
2016208181.tif 000005
【図４】
2016208181.tif 000006
【図５】
2016208181.tif 000007
【図６】
2016208181.tif 000008
【図７】
2016208181.tif 000009
【図８】
2016208181.tif 000010
【図９】
2016208181.tif 000011
【図１０】
2016208181.tif 000012
【図１１】
2016208181.tif 000013
【図１２】
2016208181.tif 000014
【図１３】
2016208181.tif 000015
【図１４】
2016208181.tif 000016
【図１５】
2016208181.tif 000017
【図１６】
2016208181.tif 000018
【図１７】
2016208181.tif 000019
【図１８】
2016208181.tif 000020
【図１９】
2016208181.tif 000021
【図２０】
2016208181.tif 000022
【図２１】
2016208181.tif 000023