(57)【要約】【課題】テストパケットでは検出できない障害を検出できる通信装置を提供できる。【解決手段】データを送受信する通信装置であって、通常時に受信しないデータを特定可能な情報を含む障害検出条件が登録されたアサーション情報を記憶し、他の通信装置からデータを受信した場合、前記アサーション情報を参照し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすか否かを判定し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、障害を検出する。【選択図】図１
2017028539.tif 000002
【特許請求の範囲】
【請求項１】
データを送受信する通信装置であって、
通常時に受信しないデータを特定可能な情報を含む障害検出条件が登録されたアサーション情報を記憶し、
他の通信装置からデータを受信した場合、前記アサーション情報を参照し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすか否かを判定し、
前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、障害を検出することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
少なくとも一つの他の通信装置に接続されたポートを備え、
前記アサーション情報に登録された障害検出条件に含まれる前記通常時に受信しないデータを特定可能な情報は、前記ポートのうち通常時に自身にデータを転送しない通信装置に接続されたポートの識別子を含むことを特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記受信したデータに関する条件と当該条件と一致するデータに対するアクションとが対応付けられたフローエントリが登録されたフロー情報と、
前記通信装置のポートと他の通信装置のポートとの接続関係が登録されたトポロジ情報と、を記憶し、
前記フロー情報の前記アクションが所定の条件を満たす場合、当該アクションに対応する条件と一致するデータの出力ポートを特定し、
前記トポロジ情報を参照し、前記特定した出力ポートに接続された他の通信装置のポートを特定し、
前記他の通信装置のポートの識別子を前記障害検出条件として含むアサーション情報を生成し、
前記生成したアサーション情報を前記他の通信装置に設定することを特徴とする通信装置。
【請求項４】
請求項２に記載の通信装置であって、
前記受信したデータに関する条件と当該条件と一致するデータに対するアクションとが対応付けられたフローエントリが登録されたフロー情報と、前記アサーション情報と、が記憶された検索用メモリと、
前記アサーション情報に登録され得る障害検出条件が登録されたアサーション候補情報が記憶されたメモリと、を備え、
前記検索用メモリの記憶容量は前記メモリより小さく、前記検索用メモリに記憶されるアサーション情報に登録可能な障害検出条件の数は、前記メモリに記憶されるアサーション候補情報に登録可能な障害検出条件の数より小さいものであって、
前記アサーション候補情報に登録された障害検出条件には優先度が付与され、
前記優先度に基づいて、前記アサーション候補情報に登録された障害検出条件を前記アサーション情報に登録することを特徴とする通信装置。
【請求項５】
請求項４に記載の通信装置であって、
隣接する通信装置のアサーション候補情報に登録された障害検出条件を管理し、
前記受信したデータに関する条件と、当該条件と一致するデータに対するアクションと、当該条件と一致するデータの受信回数とが対応付けられたフローエントリを含むフロー情報と、
前記通信装置のポートと他の通信装置のポートとの接続関係が登録されたトポロジ情報と、を記憶し、
前記フロー情報の前記アクションが所定の条件を満たす場合、当該アクションに対応する条件と一致するデータの出力ポートを特定し、
前記トポロジ情報を参照し、前記特定した出力ポートに接続された他の通信装置のポートを特定し、
前記他の通信装置のポートの識別子を前記障害検出条件を生成し、
前記生成した障害検出条件を前記他の通信装置に設定し、
前記生成した障害検出条件と、前記障害検出条件の生成に用いたフローエントリの識別子とを対応付けたアサーション管理情報を記憶し、
前記フロー情報に含まれるフローエントリに登録された受信回数に基づいて、当該フローエントリの識別子に対応付けられた障害検出条件の優先度を更新し、
前記更新した障害検出条件の優先度を前記他の通信装置に設定することを特徴とする通信装置。
【請求項６】
請求項１に記載の通信装置であって、
前記アサーション情報には、異なる種別の障害を検出する複数の障害検出条件が登録され、
少なくとも一つの障害検出条件は、通常時にデータが通信される現用系経路と障害時にデータが通信される待機系経路とがある冗長ネットワーク構成において前記待機系経路でデータが通信されたことを示す冗長ネットワークに関する障害を検出する条件であり、
前記受信したデータが前記冗長ネットワークに関する障害を検出する障害検出条件を満たすと判定された場合、前記受信したデータを一時的に記憶し、
前記現用系経路から前記待機系経路への切り替えがあった場合、前記冗長ネットワークに関する障害でないと判断し、前記一時的に記憶したデータを転送し、
前記現用系経路から前記待機系経路への切り替えがなかった場合、前記冗長ネットワークに関する障害を検出し、前記一時的に記憶したデータを破棄することを特徴とする通信装置。
【請求項７】
データを送受信する複数の通信装置によって構築されるネットワークを制御する制御装置であって、
前記制御装置は、
前記通信装置が通常時に受信しないデータを特定可能な情報を含む障害検出条件を前記通信装置に設定し、
前記通信装置に設定した障害検出条件を管理し、
前記通信装置は、
前記制御装置から設定された障害検出条件をアサーション情報に登録して、記憶し、
他の通信装置からデータを受信した場合、前記アサーション情報を参照し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすか否かを判定し、
前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、障害を検出することを特徴とする制御装置。
【請求項８】
請求項７に記載の制御装置であって、
前記通信装置は、少なくとも一つの他の通信装置に接続されたポートを有し、
前記アサーション情報に登録された障害検出条件に含まれる前記通常時に受信しないデータを特定可能な情報は、前記ポートのうち通常時に自身にデータを転送しない通信装置に接続されたポートの識別子を含むことを特徴とする制御装置。
【請求項９】
請求項８に記載の制御装置であって、
前記通信装置は、前記受信したデータに関する条件と当該条件と一致するデータに対するアクションとが対応付けられたフローエントリが登録されたフロー情報を記憶し、
前記制御装置は、
前記複数の通信装置に記憶されたフロー情報と、
前記複数の通信装置のポート間の接続関係が登録されたトポロジ情報と、を記憶し、
ある通信装置のアサーション情報を生成する場合、前記トポロジ情報を参照し、前記ある通信装置のあるポートに接続されたポートを有する通信装置を特定し、
前記特定した通信装置のフロー情報を取得し、
前記取得したフロー情報の前記アクションが所定の条件を満たす場合、前記ある通信装置のあるポートの識別子を含む前記障害検出条件を生成し、
前記生成した障害検出条件を前記ある通信装置に設定することを特徴とする制御装置。
【請求項１０】
請求項９に記載の制御装置であって、
前記制御装置は、
前記障害検出条件によって検出される障害の種別に対応する優先度が登録されたアサーション優先度情報を記憶し、
前記障害検出条件を生成した場合、前記アサーション優先度情報を参照し、前記生成した障害検出条件によって検出される障害の種別に対応する優先度を取得し、
前記取得した優先度を前記生成した障害検出条件に付与し、前記優先度が付与され障害検出条件を前記通信装置に設定し、
前記通信装置は、
前記フロー情報と、前記アサーション情報と、が記憶された検索用メモリと、
前記アサーション情報に登録され得る障害検出条件が登録されたアサーション候補情報が記憶されたメモリと、を有し、
前記検索用メモリの記憶容量は前記メモリより小さく、前記検索用メモリに記憶されるアサーション情報に登録可能な障害検出条件の数は、前記メモリに記憶されるアサーション候補情報に登録可能な障害検出条件の数より小さいものであって、
前記通信装置から設定された障害検出条件をアサーション候補情報に登録して、記憶し、
前記アサーション候補情報に登録された障害検出条件に付与された優先度に基づいて、前記アサーション候補情報に登録された障害検出条件を前記アサーション情報に登録することを特徴とする制御装置。
【請求項１１】
請求項１０に記載の制御装置であって、
前記フロー情報のフローエントリには、当該フローエントリの条件と一致するデータの受信回数も登録され、
前記制御装置は、
前記生成した障害条件出条件と、当該障害検出条件の生成に用いたフローエントリの識別子とを対応付けて記憶し、
前記フロー情報に含まれるフローエントリに登録されたデータの受信回数に基づいて、当該フローエントリの識別子に対応付けられた障害検出条件の優先度を更新し、
前記更新した障害検出条件の優先度を前記通信装置に設定することを特徴とする制御装置。
【請求項１２】
請求項７に記載の制御装置であって、
前記アサーション情報には、異なる種別の障害を検出する複数の障害検出条件が登録され、
少なくとも一つの障害検出条件は、通常時にデータが通信される現用系経路と障害時にデータが通信される待機系経路とがある冗長ネットワーク構成において前記待機系経路でデータが通信されたことを示す冗長ネットワークに関する障害を検出する条件であり、
前記通信装置は、前記受信したデータが前記冗長ネットワークに関する障害を検出する障害検出条件を満たすと判定された場合、前記受信したデータを一時的に記憶して、前記現用系経路から前記待機系経路への切り替えの有無を前記制御装置に問合せ、
前記制御装置は、前記通信装置からの問合せに対して、前記現用系経路から前記待機系経路への切り替えの有無を示す情報を前記通信装置に送信し、
前記通信装置は、
前記現用系経路から前記待機系経路への切り替えがあった場合、前記冗長ネットワークに関する障害でないと判断し、前記一時的に記憶したデータを転送し、
前記現用系経路から前記待機系経路への切り替えがなかった場合、前記冗長ネットワークに関する障害を検出し、前記一時的に記憶したデータを破棄することを特徴とする制御装置。
【請求項１３】
請求項８に記載の制御装置であって、
前記複数の通信装置のポート間の接続関係が登録されたトポロジ情報を記憶し、
前記通信装置は、受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、当該障害を検出した旨に通知し、
前記制御装置は、前記通信装置から障害を検出した旨が通知された場合、前記トポロジ情報を参照し、前記障害を検出した障害検出情報に含まれるポートの識別子によって識別されるポートに接続される通信装置を特定し、
前記特定した通信装置で障害が検出されているか否かを判定することによって、前記障害の箇所を特定することを特徴とする制御装置。
【請求項１４】
データを送受信する複数の通信装置と、前記複数の通信装置によって構築されるネットワークを制御する制御装置とを備える通信システムであって、
前記通信装置は、
通常時に受信しないデータを特定可能な情報を含む障害検出条件が登録されたアサーション情報を記憶し、
他の通信装置からデータを受信した場合、前記アサーション情報を参照し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすか否かを判定し、
前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、障害を検出し、
前記制御装置は、
前記複数の通信装置に記憶されたアサーション情報を管理し、
前記複数の通信装置に前記アサーション情報を設定することを特徴とする通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、障害を検出する通信装置に関する。
【背景技術】
【０００２】
ネットワークの障害を特定するための技術として特開２０１３−４６０９０号公報（特許文献１）及びITU-T, "G.8032/Y.1344 Ethernet ring protection switching," Feb.2012（非特許文献１）がある。特許文献１の公報には、「ＥＲＰにより障害が検出された場合、障害検出結果とトポロジ情報テーブルに登録されているトポロジ情報とに基づいて、障害の種別（装置障害とリンク障害のいずれか）を判別するとともに、装置障害の場合には障害が発生した装置を特定し、特定結果を上位レイヤ（レイヤ３）に通知する」と記載されている（段落［００３０］参照）。
【０００３】
また、非特許文献１には、「As an example, the ring links of each Ethernet ring node may be monitored by individually exchanging continuity check messages (CCM)」と記載されている（９頁参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１９５２５２号公報
【非特許文献】
【０００５】
【非特許文献１】ITU-T, "G.8032/Y.1344 Ethernet ring protection switching," Feb.2012
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ネットワークの信頼性を向上させるためにネットワーク障害を検出する必要がある。特許文献１には、ＥＲＰ（Ethernet Ring Protection（Ethernetは登録商標））を用いて障害を検出する方法が記載されている。また、ＥＲＰを規定している非特許文献１には、疎通確認用のメッセージであるＣＣМ（Continuity Check Message）を定期的に送受信することによって、リンクの障害を検出する方法が記載されている。
【０００７】
しかしながら、特許文献１及び非特許文献１の技術では、ＣＣＭのようなテストパケットの送受信によっては検出できない障害を想定していない。例えば、半導体の微細化で顕在化してきている宇宙線によるハードウェア故障が発生している場合、ＣＣＭ等のテストパケットの送受信には問題がなくても、テストパケットと以外のユーザパケットの送受信で障害が発生し得る。
【０００８】
本発明の目的は、テストパケットでは検出できない障害を検出できる通信装置を提供することである。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明は、データを送受信する通信装置であって、通常時に受信しないデータを特定可能な情報を含む障害検出条件が登録されたアサーション情報を記憶し、他の通信装置からデータを受信した場合、前記アサーション情報を参照し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすか否かを判定し、前記受信したデータが前記アサーション情報に登録された障害検出条件を満たすと判定された場合、障害を検出することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、テストパケットでは検出できない障害を検出できる通信装置を提供できる。
【００１１】
上記した以外の課題、構成、及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】実施例１の通信システムの構成を示すブロック図である。
【図２】実施例１のネットワークの構成例の説明図である。
【図３】実施例１の通信装置（ＳＷ１）のフローテーブルの説明図である。
【図４】実施例１の通信装置（ＳＷ１）のグループテーブルの説明図である。
【図５】実施例１の通信装置（ＳＷ２）のアサーションテーブルの説明図である。
【図６】実施例１のアサーションＤＢの説明図である。
【図７】実施例１のアサーション優先度ＤＢの説明図である。
【図８Ａ】実施例１のコンフィグＤＢに含まれるフローテーブルの説明図である。
【図８Ｂ】実施例１のコンフィグＤＢに含まれるグループテーブルの説明図である。
【図９Ａ】実施例１のトポロジＤＢに含まれる通信装置管理テーブルの説明図である。
【図９Ｂ】実施例１のトポロジＤＢに含まれるトポロジテーブルの説明図である。
【図１０】実施例１のアサーション生成処理のフローチャートである。
【図１１】実施例１のブロッキングポート判定処理のフローチャートである。
【図１２】実施例１のアサーションエントリ生成処理のフローチャートである。
【図１３】実施例１のアサーションＤＢ優先度更新処理のフローチャートである。
【図１４】実施例１のアサーションテーブル更新処理のフローチャートである。
【図１５】実施例１の通信装置の状態遷移図である。
【図１６】実施例１の通信装置の障害検出処理のフローチャートである。
【図１７】実施例１の障害確定処理のフローチャートである。
【図１８】実施例１の障害回避処理のフローチャートである。
【図１９】実施例１の障害特定処理のフローチャートである。
【図２０】実施例１のＲｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【図２１】実施例１のＬｏｏｐ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【図２２】実施例１のリング障害ポイント特定処理のフローチャートである。
【図２３】実施例１のＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【図２４】実施例１のＬｉｎｋ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【図２５】実施例１の経路障害ポイント特定処理のフローチャートである。
【図２６】実施例２の通信システムの構成を示すブロック図である。
【図２７】実施例２のアサーションテーブル生成処理のフローチャートである。
【図２８】実施例２のアサーションエントリ優先度更新処理のフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施例を図面に基づいて説明する。各図における同一符号は同一物又は相当物を示す。説明の都合上、符号に添え字を追加して区別することがある。
【００１４】
本発明は以下の実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１５】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。
【００１６】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００１７】
本明細書で引用した刊行物、特許および特許出願は、そのまま本明細書の説明の一部を構成する。
【実施例１】
【００１８】
実施例１について、図１〜図２５を用いて説明する。
【００１９】
図１は、実施例１の通信システムの構成を示すブロック図である。
【００２０】
本実施例の通信システムは、通信装置１００及び制御装置２００を有する。通信装置１００と制御装置２００とは制御ネットワーク３００を介して互いに接続される。通信装置１００は、複数の通信装置１００によって構成されるネットワーク３１０を介して互いに接続される。本実施例の通信装置が有する通信装置１００及び制御装置２００の数は、図１に示す数に限定されない。
【００２１】
通信装置１００は、自身に接続された通信装置との間でデータを通信する。通信装置１００は、管理インタフェース（Ｉ／Ｆ）１１０、スイッチ部１２０、アサーション部１３０、通信インタフェース（Ｉ／Ｆ）１７０を有する。管理Ｉ／Ｆ１１０は、制御装置２００に接続されるネットワーク３００に通信装置１００を接続するインタフェースである。通信Ｉ／Ｆ１７０は、他の通信装置等に接続されるネットワーク３１０に通信装置１００を接続するインタフェースである。管理Ｉ／Ｆ１１０及び通信Ｉ／Ｆ１７０は、Ｅｔｈｅｒｎｅｔ又はＩｎｆｉｎｉｂａｎｄ（登録商標）等、同じインタフェース同士を接続する。
【００２２】
スイッチ部１２０は、フローテーブル制御部１２１、トラフィック統計計測部１２２、フローテーブル１２３、及びグループテーブル１２４を有する。スイッチ部１２０は、ＯｐｅｎＦｌｏｗ（登録商標）スイッチの機能を有し、フローテーブル１２３を参照し、受信したデータを転送する。
【００２３】
また、アサーション部１３０は、アサーション制御部１３１、アサーションテーブル１３２、アサーションメモリ１３３、及びパケットバッファ１３４を有する。アサーション部１３０は、受信したデータとアサーションテーブル１３２とに基づいて障害が発生していないか否かを判定する。
【００２４】
さらに、通信装置１００は、ＣＰＵ１４０、ＴＣＡＭ（Ternary Content Addressable Memory）１５０、及びメモリ１６０を有する。ＣＰＵ１４０は、フローテーブル制御部１２１、トラフィック統計計測部１２２、及びアサーション制御部１３１を有し、ＴＣＡＭ１５０は、フローテーブル１２３及びアサーションテーブル１３２を記憶し、メモリ１６０は、グループテーブル１２４、アサーションメモリ１３３、及びパケットバッファ１３４を有する。
【００２５】
まず、スイッチ部１２０の構成について説明する。
【００２６】
フローテーブル制御部１２１は、制御装置２００からの指示に基づいて、フローエントリをフローテーブル１２３に登録し、制御装置２００からの指示に基づいて、フローテーブル１２３からフローエントリを削除する。トラフィック統計計測部１２２は、通信装置１００が受信したデータの統計情報を計測する。受信したデータの統計情報は、例えば、パケット数及びバイト数等である。フローテーブル制御部１２１及びトラフィック統計計測部１２２は、ＣＰＵ１４０がプログラムを実行することによって実現されるが、これに限定されず、ＦＰＧＡ（Field Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェア回路によって実現されてもよい。
【００２７】
フローテーブル１２３には、受信したデータに関する条件と、当該条件と一致するデータに対するアクションと、当該条件と一致するデータの統計情報とを含むフローエントリが登録される。通信装置１００は、データを受信した場合、フローテーブル１２３を参照し、受信したデータと一致するフローエントリを検索し、検索したフローエントリのアクションを実行することによって、受信したデータを他の通信装置等に転送する。なお、フローテーブル１２３の詳細は図３で説明する。
【００２８】
グループテーブル１２４には、フローテーブル１２３に登録されたフローエントリのアクションに関する詳細な情報が登録される。なお、グループテーブル１２４の詳細は図４で説明する。
【００２９】
次に、アサーション部１３０の構成について説明する。
【００３０】
アサーション制御部１３１は、アサーションテーブル１３２にエントリに登録し、アサーションテーブル１３２からエントリを削除する。また、アサーション制御部１３１は、障害を検出した場合、パケットバッファ１３４を制御する。なお、アサーション制御部１３１は、ＣＰＵ１４０がプログラムを実行することによって実現されるが、これに限定されず、ＦＰＧＡ（Field Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェア回路によって実現されてもよい。
【００３１】
アサーションテーブル１３２には、受信したデータに関して、障害を検出するための条件（アサーション）が登録される。通信装置１００がデータを受信した場合、最初にアサーション部１３０がアサーションテーブル１３２を参照し、受信したデータがアサーションテーブル１３２に登録された条件と一致するか否かを判定して、障害が発生したか否かを判定する。アサーション部１３０によって障害が発生していないと判定された場合、スイッチ部１２０がフローテーブル１２３を参照して、受信したデータを転送する。なお、アサーションテーブル１３２の詳細は、図５で説明する。
【００３２】
アサーションメモリ１３３には、アサーションテーブル１３２に登録され得るアサーションが登録される。
【００３３】
アサーションテーブル１３２は、受信したデータと一致する条件を検索する処理を高速化するためにＴＣＡＭ１５０に記憶される。ＴＣＡＭ１５０は、一般に価格が高く、消費電力も大きいため、記憶容量が大きなＴＣＡＭ１５０を用意することは困難である。本発明では、ＴＣＡＭ１５０より価格が安く、記憶容量も大きいメモリ１６０が有するアサーションメモリ１３３にアサーションを登録しておき、アサーションの優先度に基づいてアサーションテーブル１３２に登録するアサーションを決定し、決定したアサーションがアサーションテーブル１３２に書き込む。これによって、従来のＴＣＡＭ１５０の記憶容量のままで、優先度の高いアサーションをアサーションテーブル１３２に書き込むため、通信装置１００の製造コストが高くなることを防止できる。
【００３４】
パケットバッファ１３４には、アサーション部１３０が障害と疑われるパケットを検出した場合、当該パケットの障害が確定するまでの間、当該パケットが記憶される。
【００３５】
次に、制御装置２００について説明する。
【００３６】
制御装置２００は、ＣＰＵ２１０、メモリ２２０、管理Ｉ／Ｆ２３０、入力デバイス（不図示）及び出力デバイス（不図示）を有する。入力デバイスは例えばキーボード及びマウス等であり、出力デバイスは例えばディスプレイ等である。管理Ｉ／Ｆ２３０は、ネットワーク３００に接続されるインタフェースである。
【００３７】
ＣＰＵ２１０は、アサーション生成部２１１、アサーション制御部２１２、コンフィグ制御部２１３、及び障害特定部２１４を有する。アサーション生成部２１１、アサーション制御部２１２、コンフィグ制御部２１３、及び障害特定部２１４は、ＣＰＵ２１０がプログラムを実行することによって実現されるが、これに限定されず、ＦＰＧＡ（Field Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェア回路によって実現されてもよい。メモリ２２０には、アサーションデータベース（ＤＢ）２２１、アサーション優先度データベース（ＤＢ）２２２、コンフィグデータベース（ＤＢ）２２３、及びトポロジデータベース（ＤＢ）２２４が記憶される。
【００３８】
アサーション生成部２１１は、アサーションの生成対象となる通信装置１００に接続された通信装置１００のフローテーブル１２３及びグループテーブル１２４を参照してアサーションを生成し、生成したアサーションをアサーションＤＢ２２１に登録する。アサーション生成部２１１の生成処理の詳細は、図１０〜図１２で説明する。
【００３９】
アサーション制御部２１２は、通信装置１００のアサーションテーブル１３２に登録されているアサーションを管理し、通信装置１００が受信したデータの統計情報を収集する。また、アサーション制御部２１２は、アサーションＤＢ２２１に登録されたアサーションのアサーションメモリ１３３への登録指示を、管理Ｉ／Ｆ２３０を介して通信装置１００に送信する。
【００４０】
コンフィグ制御部２１３は、コンフィグＤＢ２２３に登録された通信装置１００のフローテーブルの内容、及びグループテーブルの内容の通信装置１００のフローテーブル１２３及びグループテーブル１２４への登録指示を、管理Ｉ／Ｆ２３０を介して通信装置１００に送信する。
【００４１】
障害特定部２１４は、通信装置１００が障害を検出した場合、トポロジＤＢ２２４を参照し、障害が発生した箇所を特定する。障害特定部２１４の障害特定処理の詳細は、図Ｘで説明する。
【００４２】
アサーションＤＢ２２１には、各通信装置１００のアサーションメモリ１３３に登録されるアサーションが登録される。アサーションＤＢ２２１の詳細は図６で説明する。アサーション優先度ＤＢ２２２には、アサーションの種別に対応する優先度の初期値が登録される。アサーション優先度ＤＢ２２２の詳細は図７で説明する。なお、この初期値は、管理者によって任意に設定される。管理者は、一般的には、障害発生時のネットワークに与える影響の大きいアサーションの種別ほど初期値が高くなるように、アサーション優先度ＤＢ２２２を設定する。
【００４３】
コンフィグＤＢ２２３には、通信装置１００のフローテーブル１２３及びグループテーブル１２４の内容が登録される。コンフィグＤＢ２２３の詳細は図８で説明する。トポロジＤＢ２２４には、通信装置１００の接続関係を示すトポロジデータが登録される。トポロジＤＢ２２４の詳細は図９で説明する。
【００４４】
図２は、実施例１のネットワーク３１０の構成例の説明図である。
【００４５】
ネットワーク３１０は、通信装置（ＳＷ１）１００Ａ〜通信装置（ＳＷ５）１００Ｅによって構築される。各通信装置（ＳＷ１）１００Ａ〜通信装置（ＳＷ５）１００Ｅは、ネットワーク３００を介して制御装置２００に接続される。
【００４６】
図２では、通信装置（ＳＷ１）１００ＡのＰｏｒｔ１／１と通信装置（ＳＷ２）１００ＢのＰｏｒｔ１／１とが接続され、通信装置（ＳＷ２）１００ＢのＰｏｒｔ２／１と通信装置（ＳＷ３）１００ＣのＰｏｒｔ２／１とが接続され、通信装置（ＳＷ３）１００ＣのＰｏｒｔ３／１と通信装置（ＳＷ４）１００ＤのＰｏｒｔ３／１とが接続され、通信装置（ＳＷ４）１００ＤのＰｏｒｔ４／１と通信装置（ＳＷ１）１００ＡのＰｏｒｔ４／１とが接続され、通信装置（ＳＷ５）１００ＥのＰｏｒｔ５／１と通信装置（ＳＷ１）のＰｏｒｔ５／１とが接続される。
【００４７】
通信装置（ＳＷ１）１００Ａ〜通信装置（ＳＷ５）１００Ｅによって構築されるネットワーク３１０のトポロジはリングトポロジであり、通信装置（ＳＷ１）１００ＡのＰｏｒｔ１／１はブロッキングポートとして動作し、通常、通信装置（ＳＷ２）１００ＢのＰｏｒｔ１／１は、通信装置（ＳＷ１）のＰｏｒｔ１／１からデータを受信しない。
【００４８】
図３は、実施例１の通信装置（ＳＷ１）１００Ａのフローテーブル１２３の説明図である。
【００４９】
フローテーブル１２３は、Ｍａｔｃｈ  Ｆｉｅｌｄ３０１、Ａｃｔｉｏｎ３０２、及びＳｔａｔｉｓｔｉｃｓ３０３を含む。Ｍａｔｃｈ  Ｆｉｅｌｄ３０１には、条件が登録される。Ａｃｔｉｏｎ３０２には、通信装置１００が受信したデータがＭａｔｃｈ  Ｆｉｅｌｄ３０１に登録された条件と一致した場合の処理内容が登録される。Ｓｔａｔｉｓｔｉｃｓ３０３には、Ｍａｔｃｈ  Ｆｉｅｌｄ３０１に登録された条件と一致したデータの統計情報が登録される。Ｓｔａｔｉｓｔｉｃｓ３０３はトラフィック統計計測部１２２によって更新される。なお、Ｍａｔｃｈ  Ｆｉｅｌｄ３０１、Ａｃｔｉｏｎ３０２、及びＳｔａｔｉｓｔｉｃｓ３０３の内容は、ＯｐｅｎＦｌｏｗに基づく。
【００５０】
「＃１」のフローエントリでは、入力ポートがＰｏｒｔ１／１であって、かつＶＬＡＮが「１００」であるデータを、出力ポート「Ｂｌｏｃｋｉｎｇ」に転送することを定義している。出力ポート「Ｂｌｏｃｋｉｎｇ」は、リングトポロジの特殊のポートとして定義され、正常時においては、受信したデータをパケットの出力を停止し、リング切替時においては、出力ポート「Ｎｏｒｍａｌ」と同じく、受信したデータをＬ２スイッチのＦＤＢ（Forwarding DataBase）に基づいて転送する。具体的には、ＦＤＢが未学習である場合、受信したデータは、同じＶＬＡＮが入力ポートの条件として定義されているポートにフラッディングされ、ＦＤＢが学習済みである場合、受信したデータは、学習した出力ポートへ転送される。
【００５１】
「＃２」のフローエントリでは、入力ポートがＰｏｒｔ４／１であって、かつＶＬＡＮが「１００」であるデータを、出力ポート「Ｎｏｒｍａｌ」に転送することを定義している。「Ｎｏｒｍａｌ」宛ての転送は、通信装置１００に依存した転送であることがＯｐｅｎｆｌｏｗの仕様で規定されている。本実施例では、「Ｎｏｒｍａｌ」宛ての転送は、受信したデータをＬ２スイッチのＦＤＢに基づいて転送する。
【００５２】
図４は、実施例１の通信装置（ＳＷ１）１００Ａのグループテーブル１２４の説明図である。
【００５３】
グループテーブル１２４は、Ｇｒｏｕｐ  Ｔｙｐｅ４０１及びＡｃｔｉｏｎ４０２を含む。
【００５４】
Ｇｒｏｕｐ  Ｔｙｐｅ４０１には、グループの種別が登録される。Ａｃｔｉｏｎ４０２には、グループのアクションが登録される。Ｇｒｏｕｐ  Ｔｙｐｅ４０１及びＡｃｔｉｏｎ４０２の内容は、ＯｐｅｎＦｌｏｗに基づく。
【００５５】
フローテーブル１２３に登録されたフローエントリのＡｃｔｉｏｎ３０２にグループの種別が登録されている場合、通信装置（ＳＷ１）１００Ａはグループテーブル１２４を参照し、Ｇｒｏｕｐ  Ｔｙｐｅ４０１に当該グループの種別が登録されたエントリのＡｃｔｉｏｎ４０２に登録されたアクションの処理内容を受信したデータに実行する。
【００５６】
「＃１」のエントリでは、グループの種別が「Ｆａｓｔ  Ｆａｉｌｏｖｅｒ」であるアクションが、通常時においては、Ｐｏｒｔ４／１をウォッチし、出力ポートがＰｏｒｔ４／１であり、障害時においては、Ｐｏｒｔ５／１をウォッチし、出力ポートがＰｏｒｔ５／１であることを示す。
【００５７】
図５は、実施例１の通信装置（ＳＷ２）１００Ｂのアサーションテーブル１３２の説明図である。
【００５８】
アサーションテーブル１３２は、Ｍａｔｃｈ  Ｆｉｅｌｄ５０１、Ｃｏｎｄｉｔｉｏｎ５０２、Ｔｉｍｅ  Ｌｉｍｉｔ５０３、Ａｃｔｉｏｎ５０４、及びＰｒｉｏｒｉｔｙ５０５を含む。なお、アサーションテーブル１３２に登録されたエントリをアサーションという。
【００５９】
Ｍａｔｃｈ  Ｆｉｅｌｄ５０１には、障害を検出するための受信したデータに関する条件が登録される。Ｃｏｎｄｉｔｉｏｎ５０２には、障害を検出するためのトポロジの状態に関する条件が登録される。例えば、Ｃｏｎｄｉｔｉｏｎ５０２には、Ｒｉｎｇ  Ａｃｔｉｖｅ、Ｒｉｎｇ  Ｓｔａｎｄｂｙ、Ｒｅｄｕｎｄａｎｔ  Ａｃｔｉｖｅ、Ｒｅｄｕｎｄａｎｔ  Ａｃｔｉｖｅ、又はＲｅｄｕｎｄａｎｔ  Ｓｔａｎｄｂｙ等が登録される。Ｒｉｎｇ  Ａｃｔｉｖｅは、リングトポロジが正常状態であることを示し、Ｒｉｎｇ  Ｓｔａｎｄｂｙは、リングトポロジが冗長系に切り替わったことを示し、Ｒｅｄｕｎｄａｎｔ  Ａｃｔｉｖｅは、冗長化された経路のトポロジが正常状態であることを示し、Ｒｅｄｕｎｄａｎｔ  Ｓｔａｎｄｂｙは、冗長化された経路のトポロジが冗長経路に切り替わったことを示す。また、トポロジの状態が障害を検出するための条件として不要である場合、Ｃｏｎｄｉｔｉｏｎ５０２にはＡｌｗａｙｓが登録される。Ｃｏｎｄｉｔｉｏｎ５０２にＴｉｍｅ  Ｌｉｍｉｔが登録された場合、Ｔｉｍｅ  Ｌｉｍｉｔ５０３に登録された時間が経過した場合、受信すべきデータが受信していないことが、障害を検出するための条件となる。
【００６０】
Ｔｉｍｅ  Ｌｉｍｉｔ５０３には、周期的に送信されるデータの障害を検出するための条件として、当該データの受信間隔等が登録される。なお、Ｔｉｍｅ  Ｌｉｍｉｔ５０３に「０」が登録されている場合、障害を検出するための条件として、データの受信間隔等は考慮しないことを示す。
【００６１】
Ａｃｔｉｏｎ５０４には、Ｍａｔｃｈ  Ｆｉｅｌｄ５０１、Ｃｏｎｄｉｔｉｏｎ５０２、及びＴｉｍｅ  Ｌｉｍｉｔ５０３に登録された障害を検出するための条件と一致した場合の障害の種別がアクションとして登録される。例えば、Ａｃｔｉｏｎ５０４には、Ｌｏｏｐ  Ｆａｉｌｕｒｅ、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ、Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ、又はＬｉｎｋ  Ｆａｉｌｕｒｅ等が登録される。Ｌｏｏｐ  Ｆａｉｌｕｒｅは、リングトポロジのネットワークにおいてループが発生している障害を示す。Ｒｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅは、冗長化された経路のトポロジのネットワークにおいて、冗長経路において障害な入力があったことを示す。Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅは、不正な転送があったことを示す。Ｌｉｎｋ  Ｆａｉｌｕｒｅは、疎通障害があったことを示す。
【００６２】
Ｐｒｉｏｒｉｔｙ５０５には、アサーションの優先度が登録される。Ｐｒｉｏｒｉｔｙ５０５に登録される優先度は、アサーション間の相対的な優先度を示す値を表現できればよい。本実施例では、Ｐｒｉｏｒｉｔｙ５０５に登録される値は、１６ビットの符号なし整数０〜６５５３５であるものとし、０は常にアサーションテーブル１３２に登録することを示す。
【００６３】
図５に示す通信装置（ＳＷ２）１００Ｂのアサーションテーブル１３２には、Ｌｏｏｐ  Ｆａｉｌｕｒｅを検出する条件（障害検出条件）として、通信装置（ＳＷ２）１００Ｂが受信したデータの入力ポートがＰｏｒｔ１／１であって、当該データのＶＬＡＮが「１００」であって、かつ、当該データの受信時のトポロジの状態がＲｉｎｇ  Ａｃｔｉｖｅであるという条件が登録される。図２で説明したように、通信装置（ＳＷ２）１００ＢのＰｏｒｔ１／１には、Ｒｉｎｇ  Ａｃｔｉｖｅである場合（通常時）、データが入力されない。このように、障害検出条件は、通常時に通信装置１００が受信しないデータを特定可能な情報を含み、当該データの特定可能な情報として、通常時にデータが入力されないポートの識別子を含むものである。
【００６４】
通信装置１００のアサーションテーブル１３２に、通常時に受信しないデータを特定可能な情報を含む障害検出条件がアサーションエントリとして登録される。これによって、通信装置１００に接続される通信装置１００の予期しない障害、及び管理者等の経路の誤設定を検出することができ、テストパケットで検出されない障害が発生した場合であっても、受信したデータが障害検出条件を満たせば、当該障害を検出できる。また、複数の通信フローを個別に検出することで、障害の特定を容易にすることができる。また、障害検出条件はデータが入力されないポートの識別子を含むので、入力されないデータが入力されたというテストパケットで検出されない障害を検出できる。
【００６５】
次に、図６〜図９Ｂを用いて、制御装置２００の各種データベース２２１〜２２４について説明する。
【００６６】
図６は、実施例１のアサーションＤＢ２２１の説明図である。
【００６７】
アサーションＤＢ２２１は、Ｆｌｏｗ  Ｅｎｔｒｙ６０１、Ｔａｒｇｅｔ  Ｓｗｉｔｃｈ６０２、Ｍａｔｃｈ  Ｆｉｅｌｄ６０３、Ｃｏｎｄｉｔｉｏｎ６０４、Ｔｉｍｅ  Ｌｉｍｉｔ６０５、Ａｃｔｉｏｎ６０６、及びＰｒｉｏｒｉｔｙ６０７を含む。
【００６８】
Ｆｌｏｗ  Ｅｎｔｒｙ６０１には、アサーションの生成に用いたフローエントリが登録されたフローテーブル１２３が記憶された通信装置１００の識別子と、当該フローエントリの識別子とが登録される。Ｔａｒｇｅｔ  Ｓｗｉｔｃｈ６０２には、アサーションを設定する通信装置１００の識別子が登録される。Ｍａｔｃｈ  Ｆｉｅｌｄ６０３〜Ｐｒｉｏｔｉｔｙ６０７は、アサーションテーブル１３２のＭａｔｃｈ  Ｆｉｅｌｄ５０１〜Ｐｒｉｏｔｉｔｙ５０５と同じであるので説明を省略する。
【００６９】
アサーション制御部２１２は、Ｔａｒｇｅｔ  Ｓｗｉｔｃｈ６０２に登録された識別子によって識別される通信装置１００に、Ｍａｔｃｈ  Ｆｉｅｌｄ６０３〜Ｐｒｉｏｒｉｔｙ６０７に登録された情報を含むアサーションを設定する。具体的には、アサーション制御部２１２は、トポロジＤＢ２２４に含まれる通信装置管理テーブル２２４Ａを参照して、Ｔａｒｇｅｔ  Ｓｗｉｔｃｈ６０２に登録された識別子によって識別される通信装置１００のアドレスを取得する。そして、アサーション制御部２１２は、取得したアドレスを宛先として、Ｍａｔｃｈ  Ｆｉｅｌｄ６０３〜Ｐｒｉｏｒｉｔｙ６０７に登録された情報を含むアサーションを管理Ｉ／Ｆ２３０から送信する。
【００７０】
なお、アサーションＤＢ２２１に登録されるアサーションは、アサーション生成部２１１によって自動的に生成されてもよいし、管理者等によって、フェールセーフ設定又はデバッグのために手動で生成されてもよい。なお、アサーションが手動で設定される場合、管理者等は、キーボード又はマウス等の入力デバイスを用いてアサーションの内容を制御装置２００に入力する。
【００７１】
図７は、実施例１のアサーション優先度ＤＢ２２２の説明図である。
【００７２】
アサーション優先度ＤＢ２２２は、Ａｓｓｅｒｔｉｏｎ  Ａｃｔｉｏｎ７０１、及びＰｒｉｏｒｉｔｙ７０２を含む。
【００７３】
Ａｓｓｅｒｔｉｏｎ  Ａｃｔｉｏｎ７０１には、アサーションテーブル１３２のＣｏｎｄｉｔｉｏｎ５０２に登録される障害の種別が登録される。Ｐｒｉｏｒｉｔｙ７０２には、各障害の種別の優先度が登録される。Ｐｒｉｏｒｉｔｙ７０２に登録される優先度は、障害による影響又は各障害の発生確率等を考慮して管理者によって登録される。
【００７４】
アサーション優先度ＤＢ２２２は、アサーション生成部２１１によってアサーションが生成される場合に利用される。
【００７５】
図８Ａは、実施例１のコンフィグＤＢ２２３に含まれるフローテーブル２２３Ａの説明図である。
【００７６】
コンフィグＤＢ２２３に含まれるフローテーブル２２３Ａには、各通信装置１００が保持するフローテーブル１２３の内容が登録される。
【００７７】
フローテーブル２２３Ａは、Ｓｗｉｔｃｈ８０１、Ｍａｔｃｈ  Ｆｉｅｌｄ８０２、Ａｃｔｉｏｎ８０３、Ｓｔａｔｉｓｔｉｃｓ８０４、及びＩｎｔｅｒｖａｌ８０５を含む。
【００７８】
Ｓｗｉｔｃｈ８０１には、フローテーブル２２３Ａのエントリに登録されたフローエントリが登録されたフローテーブル１２３を保持する通信装置１００の識別子が登録される。Ｍａｔｃｈ  Ｆｉｅｌｄ８０２〜Ｓｔａｔｉｓｔｉｃｓ８０４は、フローテーブル１２３のＭａｔｃｈ  Ｆｉｅｌｄ３０１〜Ｓｔａｔｉｓｔｉｃｓ３０３と同じであるので、説明を省略する。Ｉｎｔｅｒｖａｌ８０５には、Ｍａｔｃｈ  Ｆｉｅｌｄ８０２に登録された条件と一致するデータの送信間隔が登録される。
【００７９】
Ｉｎｔｅｒｖａｌ８０５は、アサーション生成部２１１がアサーションを生成する場合にのみ利用されるものであるので、通信装置１００が保持するフローテーブル１２３に含まれない。Ｉｎｔｅｒｖａｌ８０５に登録された送信間隔を考慮してアサーションが生成されることによって、周期的に送信されるデータの検証も可能となる。また、Ｓｔａｔｉｓｔｉｃｓ８０４は、アサーション制御部２１２によって更新される。
【００８０】
コンフィグ制御部２１３は、トポロジＤＢ２２４に含まれる通信装置管理テーブル２２４Ａを参照して、Ｓｗｉｔｃｈ８０１に登録された識別子によって識別される通信装置１００のアドレスを取得する。そして、アサーション制御部２１２は、取得したアドレスを宛先として、Ｍａｔｃｈ  Ｆｉｅｌｄ８０２及びＡｃｔｉｏｎ８０３に登録された情報を含むフロー情報を管理Ｉ／Ｆ２３０から送信して、各通信装置１００にフロー情報を設定する。なお、制御装置２００は、通信装置１００によって更新されたフローテーブル１２３のＳｔａｔｉｓｔｉｃｓ３０３の値を収集し、収集した値をコンフィグＤＢ２２３のフローテーブル２２３ＡのＳｔａｔｉｓｔｉｃｓ８０４に登録する。Ｓｔａｔｉｓｔｉｃｓ８０４の値は、フローテーブル２２３Ａの設定時には設定されない。
【００８１】
図８Ｂは、実施例１のコンフィグＤＢ２２３に含まれるグループテーブル２２３Ｂの説明図である。
【００８２】
コンフィグＤＢ２２３に含まれるグループテーブル２２３Ｂには、各通信装置１００が保持するグループテーブル１２４の内容が登録される。
【００８３】
グループテーブル２２３Ｂは、Ｓｗｉｔｃｈ８１１、Ｇｒｏｕｐ  Ｔｙｐｅ８１２、及びＡｃｔｉｏｎ８１３を含む。
【００８４】
Ｓｗｉｔｃｈ８１１には、グループテーブル２２３Ｂのエントリに登録されたグループテーブル１２４を保持する通信装置１００の識別子が登録される。Ｇｒｏｕｐ  Ｔｙｐｅ８１２及びＡｃｔｉｏｎ８１３は、グループテーブル１２４のＧｒｏｕｐ  Ｔｙｐｅ４０１及びＡｃｔｉｏｎ４０２と同じであるので、説明を省略する。
【００８５】
コンフィグ制御部２１３は、トポロジＤＢ２２４に含まれる通信装置管理テーブル２２４Ａを参照して、Ｓｗｉｔｃｈ８１１に登録された識別子によって識別される通信装置１００のアドレスを取得する。そして、アサーション制御部２１２は、取得したアドレスを宛先として、Ｇｒｏｕｐ  Ｔｙｐｅ８１２及びＡｃｔｉｏｎ８１３に登録された情報を含むグループ情報を管理Ｉ／Ｆ２３０から送信して、通信装置１００にグループテーブルを設定する。
【００８６】
コンフィグＤＢ２２３に含まれるフローテーブル２２３Ａ及びグループテーブル２２３Ｂは、管理者等によって設定される。
【００８７】
図９Ａは、実施例１のトポロジＤＢ２２４に含まれる通信装置管理テーブル２２４Ａの説明図である。
【００８８】
通信装置管理テーブル２２４Ａには、制御装置２００が管理する通信装置１００の識別子と当該通信装置１００のアドレスとの対応付けが登録される。
【００８９】
通信装置管理テーブル２２４Ａは、装置９０１及び管理アドレス９０２を含む。装置９０１には、制御装置２００が管理する通信装置１００の識別子が登録される。管理アドレス９０２には、制御装置２００が管理する通信装置１００の管理用のアドレスが登録される。通信装置１００の管理用のアドレスは、アサーション制御部２１２、コンフィグ制御部２１３、及び障害特定部２１４が通信装置１００にアクセスする場合に必要となる。
【００９０】
図９Ｂは、実施例１のトポロジＤＢ２２４に含まれるトポロジテーブル２２４Ｂの説明図である。
【００９１】
トポロジテーブル２２４Ｂには、複数の通信装置１００間の接続関係が登録される。トポロジテーブル２２４Ｂは、装置Ａ９１１、ポートＡ９１２、属性Ａ９１３、装置Ｂ９１４、ポートＢ９１５、及び属性Ｂ９１６を含む。
【００９２】
装置Ａ９１１には、接続元の通信装置１００の識別子が登録される。装置Ｂ９１４には、接続先の通信装置１００の識別子が登録される。ポートＡ９１２には、接続元の通信装置１００の接続先の通信装置１００に接続されたポートの識別子が登録される。ポートＢ９１５には、接続先の通信装置１００の接続元の通信装置１００に接続されたポートの識別子が登録される。属性Ａ９１３及び属性Ｂ９１６には、接続元の通信装置１００と接続先と通信装置１００との間のネットワークトポロジが登録される。
【００９３】
なお、接続元の通信装置１００と接続先の通信装置１００とは双方向に接続されるものとする。
【００９４】
トポロジＤＢ２２４に含まれる通信装置管理テーブル２２４Ａ及びトポロジテーブル２２４Ｂは、管理者等によって設定される。
【００９５】
次に、アサーション生成部２１１によって実行されるアサーションテーブル生成処理について、図１０〜図１２を用いて説明する。
【００９６】
図１０は、実施例１のアサーション生成処理のフローチャートである。
【００９７】
まず、アサーション生成部２１１は、アサーションテーブル１３２を生成する対象となる通信装置１００（通信装置Ｘ）の識別子の入力を管理者等から受け付ける（１００１）。
【００９８】
次に、アサーション生成部２１１は、トポロジＤＢ２２４に含まれるトポロジテーブル２２４Ｂを参照し、処理対象の通信装置Ｘの全てのポートの識別子をポートリストＬとして取得する（１００２）。具体的には、アサーション生成部２１１は、トポロジテーブル２２４Ｂの装置Ａ９１１に処理対象の通信装置Ｘの識別子が登録されたエントリのポートＡ９１２に登録されたポートの識別子を取得し、装置Ｂ９１４に処理対象の通信装置Ｘの識別子が登録されたエントリのポートＢ９１５に登録されたポートの識別子を取得する。
【００９９】
次に、アサーション生成部２１１は、ステップ１００２の取得したポートリストＬに含まれるポートの識別子から処理対象となるポート（ポートＰ）の識別子を選択し、ステップ１００４〜１０１３の処理を実行する（１００３）。なお、ステップ１００４〜１０１３の処理は、ポートリストＬに含まれる全てのポートの識別子に実行されるまで繰り返される。
【０１００】
アサーション生成部２１１は、トポロジＤＢ２２４に含まれるトポロジテーブル２２４Ｂを参照し、処理対象の通信装置Ｘのステップ１００３の処理で選択した処理対象となるポートＰに接続された通信装置Ｕの識別子と当該通信装置ＵのポートＱの識別子とを取得する（１００４）。
【０１０１】
具体的には、アサーション生成部２１１は、トポロジテーブル２２４Ｂの装置Ａ９１１に処理対象の通信装置Ｘの識別子が登録され、かつポートＡ９１２に処理対象のポートＰの識別子が登録されたエントリが存在する場合、当該エントリの装置Ｂ９１４に登録された識別子を通信装置Ｕの識別子として取得し、当該エントリのポートＢ９１５に登録された識別子をポートＱの識別子として取得する。同様に、アサーション生成部２１１は、トポロジテーブル２２４Ｂの装置Ｂ９１４に処理対象の通信装置Ｘの識別子が登録され、かつポートＢ９１５に処理対象のポートＰの識別子が登録されたエントリが存在する場合、当該エントリの装置Ａ９１１に登録された識別子を通信装置Ｕの識別子として取得し、当該エントリのポートＡ９１２に登録された識別子をポートＱの識別子として取得する。
【０１０２】
次に、アサーション生成部２１１は、処理対象の通信装置Ｘのアサーションを格納するためのアサーションリスト（変数Ａ）を初期化する（１００５）。
【０１０３】
次に、アサーション生成部２１１は、コンフィグＤＢ２２３に含まれるフローテーブル２２３Ａから通信装置Ｕに対応する全てのフローエントリをフローテーブルＦとして取得し、グループテーブル２２３Ｂから通信装置Ｕに対応する全てのエントリをグループテーブルＧとして取得する（１００６）。
【０１０４】
具体的には、アサーション生成部２１１は、フローテーブル２２３Ａを参照し、Ｓｗｉｔｃｈ８０１に通信装置Ｕの識別子が登録された全てのエントリをフローテーブルＦとして取得する。また、アサーション生成部２１１は、グループテーブル２２３Ｂを参照し、Ｓｗｉｔｃｈ８１１に通信装置Ｕの識別子が登録された全てのエントリをグループテーブルＧとして取得する。
【０１０５】
次に、アサーション生成部２１１は、ステップ１００６の処理で取得したフローテーブルＦから処理対象のフローエントリＥを選択し、ステップ１００８及び１００９の処理を実行する（１００７）。ステップ１００８及び１００９の処理は、ステップ１００６の処理で取得した全てのフローエントリに実行されるまで繰り返される。
【０１０６】
アサーション生成部２１１は、ステップ１００７の処理で選択したフローエントリＥを参照して、通信装置ＵのポートＱがブロッキングポートであるか否かを判定するブロッキングポート判定処理を実行する（１００８）。ブロッキング判定処理は、フローエントリＥ及びポートＱの識別子が引数として入力される。ブロッキングポート判定処理の詳細は図１１で説明する。
【０１０７】
ステップ１００６の処理で取得した全てのフローエントリにステップ１００８の処理が実行されていなければ、アサーション生成部２１１は、ステップ１００７の処理に戻り、新たな処理対象のフローエントリＥを選択し、ステップ１００６の処理で取得した全てのフローエントリにステップ１００８の処理が実行されていれば、アサーション生成部２１１は、ステップ１０１０の処理に進む（１００９）。
【０１０８】
ステップ１００７〜１００９の処理では、アサーション生成部２１１は、通信装置Ｕの各フローエントリに対して、ポートＱがブロッキングポートであるか否かを判定する。
【０１０９】
ステップ１００６の処理で取得した全てのフローエントリにステップ１００８の処理が実行された場合、アサーション生成部２１１は、ステップ１００６の処理で取得したフローテーブルＦから処理対象のフローエントリＥを選択し、ステップ１０１１及び１０１２の処理を実行する（１０１０）。ステップ１０１１及び１０１２の処理は、ステップ１００６の処理で取得した全てのフローエントリに実行されるまで繰り返される。
【０１１０】
アサーション生成部２１１は、ステップ１０１０の処理で選択したフローエントリＥに基づいて、通信装置Ｘのアサーションエントリを生成するアサーションエントリ生成処理を実行する（１０１１）。アサーションエントリ生成処理の詳細は図１２で説明する。
【０１１１】
次に、ステップ１００６の処理で取得した全てのフローエントリにステップ１０１１の処理が実行されていなければ、アサーション生成部２１１は、ステップ１０１０の処理に戻り、新たな処理対象のフローエントリＥを選択し、ステップ１００６の処理で取得した全てのフローエントリにステップ１０１０の処理が実行されていれば、アサーション生成部２１１は、ステップ１０１３の処理に進む（１０１２）。
【０１１２】
ステップ１０１３の処理では、アサーション生成部２１１は、ステップ１００２の処理で取得したポートリストＬに含まれるポートの識別子に対してステップ１００４〜１０１２の処理が実行されていれば、アサーションテーブル生成処理を終了し、ステップ１００２の処理で取得したポートリストＬに含まれるポートの識別子に対してステップ１００４〜１０１２の処理が実行されていなければ、ステップ１００３の処理に戻り、ポートリストＬに含まれるポートの識別子から新たな処理対象となるポート（ポートＰ）の識別子を選択する（１０１３）。
【０１１３】
図１１は、実施例１のブロッキングポート判定処理のフローチャートである。ブロッキングポート判定処理は、アサーションテーブル１３２を生成する対象となる通信装置ＸのポートＰに接続された通信装置ＵのポートＱがブロッキングポートであるか否かを判定する処理であり、フローエントリＥ及びポートＱの識別子を引数とする。
【０１１４】
まず、アサーション生成部２１１は、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートがポートＱの識別子であるか否かを判定する（１１０１）。
【０１１５】
ステップ１１０１の処理で、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートがポートＱの識別子でないと判定された場合（１１０１：Ｎｏ）、当該フローエントリＥはポートＱに関するものでないので、アサーション生成部２１１は、ブロッキングポート判定処理を終了する。
【０１１６】
一方、ステップ１１０１の処理で、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートがポートＱの識別子であると判定された場合（１１０１：Ｙｅｓ）、アサーション生成部２１１は、フローエントリＥのＡｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、かつＡｃｔｉｏｎ８０３に出力ポート「Ｂｌｏｃｋｉｎｇ」が登録されているか否かを判定する（１１０２）。
【０１１７】
ステップ１１０２の処理で、フローエントリＥのＡｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、かつＡｃｔｉｏｎ８０３に出力ポート「Ｂｌｏｃｋｉｎｇ」が登録されていない場合、ポートＱはブロッキングポートでないので、アサーション生成部２１１は、ブロッキングポート判定処理を終了する。
【０１１８】
一方、ステップ１１０２の処理で、フローエントリＥのＡｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、かつＡｃｔｉｏｎ８０３に出力ポート「Ｂｌｏｃｋｉｎｇ」が登録されている場合、ポートＱがブロッキングポートであるので、アサーション生成部２１１は、ポートＱをブロッキングポートとしてマークして（１１０３）、ブロッキングポート判定処理を終了する。
【０１１９】
図１２は、実施例１のアサーションエントリ生成処理のフローチャートである。アサーションエントリ生成処理は、アサーションテーブル１３２を生成する対象となる通信装置ＸについてポートＰのアサーションエントリを、当該ポートＰに接続された通信装置ＵのフローエントリＥに基づいて生成する処理である。アサーションエントリ生成処理は、アサーションリストＡ、通信装置ＸのポートＰの識別子、通信装置ＵのポートＱの識別子、フローエントリＥ、及びグループテーブルＧを引数とする。
【０１２０】
まず、アサーション生成部２１１は、フローエントリＥを参照し、第１条件〜第５条件で処理を分岐させる（１２０１）。
【０１２１】
第１条件について説明する。第１条件は、フローエントリＥのＡｃｔｉｏｎ８０３にグループテーブルを参照する旨が登録され、グループテーブルＧのＧｒｏｕｐ  Ｔｙｐｅ８１２にＦａｓｔ  Ｆａｉｌｏｖｅｒが登録され、Ａｃｔｉｏｎ８１３のＢｕｃｋｅｔ２の出力ポートがポートＱと一致するという条件である。フローエントリＥが第１条件を満たす場合、通信装置ＸのポートＰと通信装置ＵのポートＱとの接続は、障害時にデータが通信される冗長接続である。正常時においては冗長接続を介してデータが通信されないので、正常時に通信装置ＸのポートＰにデータが入力されると、冗長化に関する障害が発生したことになる。したがって、フローエントリＥが第１条件を満たす場合、アサーション生成部２１１は、冗長化に関する障害を検出するためのアサーションエントリａを生成し（１２０２）、ステップ１２０６の処理に進む。
【０１２２】
ステップ１２０２の処理で生成されるアサーションエントリａでは、ＣｏｎｄｉｔｉｏｎにＲｅｄｕｎｄａｎｔ  Ａｃｔｉｖｅが登録され、Ｔｉｍｅ  Ｌｌｉｍｉｔに０が登録され、ＡｃｔｉｏｎにＲｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅが登録される。
【０１２３】
第２条件について説明する。第２条件は、フローエントリＥのＡｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、かつ、ポートＱがブロッキングポートであるという条件である。フローエントリＥが第２条件を満たす場合、通信装置ＸのポートＰと接続された通信装置ＵのポートＱがブロッキングポートであるという条件である。正常時においてポートＰにポートＱからデータが入力されることはなく、正常時にポートＰにデータが入力された場合、リングトポロジにおいてループ障害が発生したことになる。したがって、フローエントリＥが第２条件を満たす場合、アサーション生成部２１１は、リングトポロジにおけるループ障害を検出するためのアサーションエントリａを生成し（１２０３）、ステップ１２０６の処理に進む。
【０１２４】
ステップ１２０３の処理で生成されるアサーションエントリａでは、ＣｏｎｄｉｔｉｏｎにＲｉｎｇ  Ａｃｔｉｖｅが登録され、Ｔｉｍｅ  Ｌｌｉｍｉｔに０が登録され、ＡｃｔｉｏｎにＬｏｏｐ  Ｆａｉｌｕｒｅが登録される。
【０１２５】
なお、第１条件及び第２条件を満たす場合に生成されるアサーションエントリａは、どちらも正常時に待機系経路にデータが入力されたことによる冗長ネットワークの障害を検出するものである。
【０１２６】
第３条件について説明する。第３条件は、フローエントリＥのＡｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、かつ、出力ポートがＮｏｒｍａｌ以外であってポートＱと異なるという条件である。フローエントリＥが第３条件を満たす場合、通信装置ＵのポートＱからデータが出力されないため、通信装置ＸのポートＰにはポートＱからデータが入力されない。このため、通信装置ＸのポートＰにデータが入力された場合、通信装置Ｕでルーティング障害が発生したことになる。したがって、フローエントリＥが第３条件を満たす場合、アサーション生成部２１１は、ルーティング障害を検出するためのアサーションａを生成し（１２０４）、ステップ１２０６の処理に進む。
【０１２７】
ステップ１２０４の処理では、アサーション生成部２１１は、アサーションエントリａのＣｏｎｄｉｔｉｏｎにＡｌｗａｙｓを登録し、Ｔｉｍｅ  Ｌｌｉｍｉｔに０を登録し、ＡｃｔｉｏｎにＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅを登録する。
【０１２８】
第４条件について説明する。第４条件は、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートがＣｏｎｔｒｏｌｌｅｒであって、Ｉｎｔｅｒｖａｌ８０５に０以外の値が登録され、かつ出力ポートがポートＱであるという条件である。フローエントリＥが第４条件を満たす場合、通信装置ＸのポートＰには、ポートＱからＩｎｔｅｒｖａｌ８０５に登録された値が示す時間間隔でデータが入力されることになる。このため、ポートＰが当該時間間隔でポートＱからデータが入力されない場合、リンク障害が発生したことになる。したがって、フローエントリＥが第４条件を満たす場合、アサーション生成部２１１は、リンク障害を検出するためのアサーションエントリａを生成し（１２０５）、ステップ１２０６の処理に進む。
【０１２９】
ステップ１２０５の処理で生成されるアサーションエントリａでは、ＣｏｎｄｉｔｉｏｎにＴｉｍｅ  Ｌｉｍｉｔが登録され、Ｔｉｍｅ  ＬｌｉｍｉｔにフローエントリのＩｎｔｅｒｖａｌ８０５に登録された値が登録され、ＡｃｔｉｏｎにＬｉｎｋ  Ｆａｉｌｕｒｅが登録される。
【０１３０】
第５条件について説明する。第５条件は、フローエントリＥが第１条件〜第４条件を満たさないという条件である。フローエントリＥが第５条件を満たす場合、アサーション生成部２１１は、アサーションエントリ生成処理を終了する。
【０１３１】
ステップ１２０２〜１２０５の処理を実行した場合、アサーション生成部２１１は、生成したアサーションエントリａのＭａｔｃｈ  Ｆｉｅｌｄの入力ポートにポートＱの識別子を登録し、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄ８０２に登録された入力ポート以外の値をアサーションエントリａのＭａｔｃｈ  Ｆｉｅｌｄに登録する（１２０６）。
【０１３２】
次に、アサーション生成部２１１は、アサーション優先度ＤＢ２２２を参照し、アサーションａのＡｃｔｉｏｎに登録された障害の種別がＡｓｓｅｒｔｉｏｎ  Ａｃｔｉｏｎ７０１に登録されたエントリのＰｒｉｏｒｉｔｙ７０２に登録された優先度を取得する（１２０７）。そして、アサーション生成部２１１は、ステップ１２０７の処理で取得した優先度をアサーションエントリａのＰｒｉｏｒｉｔｙに登録する。また、アサーション生成部２１１は、アサーションエントリａのＦｌｏｗ  Ｅｎｔｒｙに通信装置Ｕの識別子とフローエントリＥの識別子とを登録し、Ｔａｒｇｅｔ  Ｓｗｉｔｃｈには通信装置Ｘの識別子を登録する。
【０１３３】
次に、アサーション生成部２１１は、アサーションリストＡに生成したアサーションエントリａを追加し（１２０８）、アサーション生成処理を終了する。
【０１３４】
以上によって、制御装置２００は、通信装置Ｘのアサーションを生成する場合、当該通信装置ＸのあるポートＰに接続された通信装置ＵのフローテーブルＦのフローエントリＥが所定の条件を満たす場合、アサーションエントリを生成する。そして、制御装置２００は、生成したアサーションエントリのＭａｔｃｈ  Ｆｉｅｌｄに障害を検出するための条件として、通信装置ＸのポートＰの識別子を登録する。これによって、管理者がアサーションテーブル１３２を生成する処理対象の通信装置１００を指定するだけで、アサーションエントリが自動的に生成されるので、管理者の負担を軽減できる。また、人手によって生成されたアサーションエントリと比較して、正確に障害を検出することができ、ネットワークの信頼性を向上させることができる。また、生成したアサーションエントリには障害の種別に対応する優先度が付与されるので、通信装置１００は、優先度に基づいてアサーションエントリをアサーションテーブル１３２に書き込むことができる。
【０１３５】
次に、図１０に示すアサーション生成処理について図２を用いて具体的に説明する。
【０１３６】
ステップ１００１の処理で、アサーションテーブル１３２を生成する通信装置Ｘとして、通信装置（ＳＷ２）１００Ｂの識別子が入力される。
【０１３７】
ステップ１００２の処理では、ポートリストＬとして、通信装置（ＳＷ２）１００Ｂのポートの識別子（Ｐｏｒｔ１／１、及びＰｏｒｔ２／１）が取得される。
【０１３８】
ステップ１００３の処理では、ポートＰの識別子としてＰｏｒｔ１／１が選択され、ステップ１００４の処理では、通信装置（ＳＷ２）１００ＢのＰｏｒｔ１／１に接続される通信装置（ＳＷ１）１００Ａが通信装置Ｕとして取得され、当該通信装置（ＳＷ１）１００ＡのＰｏｒｔ１／１がポートＱの識別子として取得される。
【０１３９】
ステップ１００５の処理では、アサーションリストＡが初期化され、ステップ１００６の処理では、通信装置（ＳＷ１）１００ＡのフローテーブルＦとして、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリが取得され、及び図８Ｂに示すグループテーブルＧの「＃１」のエントリが取得される。
【０１４０】
ステップ１００７の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリがフローエントリＥとして選択され、ステップ１００８の処理では、当該フローエントリＥを参照して、通信装置（ＳＷ１）のＰｏｒｔ１／１がブロッキングポートであるか否かが判定される。
【０１４１】
ステップ１００８の処理について図１１を用いて説明する。ステップ１１０１の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートはＰｏｒｔ１／１であるので、Ｙｅｓと判定される。ステップ１１０２の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリのＡｃｔｉｏｎ８０３にはＯｕｔｐｕｔが登録され、出力ポートが「Ｂｌｏｃｋｉｎｇ」であるので、Ｙｅｓと判定され、ステップ１１０３の処理では、Ｐｏｒｔ１／１がブロッキングポートとしてマークされる。
【０１４２】
ステップ１００９の処理では、ステップ１００６の処理で取得した全てのフローエントリにステップ１００８の処理を実行したので、ステップ１０１０の処理に進む。
【０１４３】
ステップ１０１０の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリがフローエントリＥとして選択される。ステップ１０１１の処理について図１２を用いて説明する。ステップ１２０１の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリは、Ａｃｔｉｏｎ８０３にＯｕｔｐｕｔが登録され、Ｐｏｒｔ１／１がブロッキングポートであるので、当該フローエントリは第２条件を満たすので、ステップ１２０３の処理に進む。ステップ１２０３の処理では、ＣｏｎｄｉｔｉｏｎにＲｉｎｇ  Ａｃｔｉｖｅが登録され、Ｔｉｍｅ  Ｌｉｍｉｔに０が登録され、Ａｃｔｉｏｎ８０３にＬｏｏｐ  Ｆａｉｌｕｒｅが登録されるアサーションエントリａが生成される。
【０１４４】
次に、ステップ１２０６の処理では、図８Ａに示すフローテーブル２２３Ａの「＃１」のフローエントリのＭａｔｃｈ  Ｆｉｅｌｄ８０２の入力ポートをポートＱ（Ｐｏｒｔ１／１）であるので変更の必要はなく、当該Ｍａｔｃｈ  Ｆｉｅｌｄ８０２に登録された情報（Ｉｎｐｏｒｔ＝Ｐｏｒｔ１／１、ＶＬＡＮ＝１００）をアサーションエントリａのＭａｔｃｈ  Ｆｉｅｌｄに登録する。
【０１４５】
次に、ステップ１２０７の処理では、アサーション優先度ＤＢ２２２のＡｓｓｅｒｔｉｏｎ  Ａｃｔｉｏｎ７０１にＬｏｏｐ  Ｆａｉｌｕｒｅが登録されたエントリのＰｒｉｏｒｉｔｙ７０２に登録された優先度「３」が取得される。そして、アサーションエントリａのＰｒｉｏｒｉｔｙに優先度「３」が登録され、Ｆｌｏｗ  Ｅｎｔｒｙに通信装置（ＳＷ１）１００Ａの識別子及び「＃１」を登録し、Ｔａｒｇｅｔ  Ｓｗｉｔｃｈに通信装置（ＳＷ２）１００Ｂの識別子を登録し、アサーションエントリ生成処理を終了し、図１０に示すステップ１０１２の処理に進む。
【０１４６】
ステップ１０１２の処理では、ステップ１００６の処理で取得した全てのフローエントリにステップ１０１１の処理を実行したので、ステップ１０１３の処理に進む。
【０１４７】
ステップ１０１３の処理では、ポートリストＬに含まれるＰｏｒｔ２／１に対してステップ１００４〜１０１２の処理が実行されていないので、ステップ１００３の処理に戻り、Ｐｏｒｔ２／１をポートＰとして選択する。
【０１４８】
ステップ１００４の処理では、通信装置（ＳＷ２）１００ＢのＰｏｒｔ２／１に接続される通信装置（ＳＷ３）１００Ｃが通信装置Ｕとして取得され、当該通信装置（ＳＷ３）１００ＣのＰｏｒｔ２／１がポートＱの識別子として取得される。なお、以降の処理では、通信装置（ＳＷ３）１００Ｃのフローエントリ（図８Ａに示すフローテーブル２２３Ａの「＃４」及び「＃５」のフローエントリ）に基づいて処理が実行される。この処理では、通信装置（ＳＷ３）１００ＣのＰｏｒｔ２／１はブロッキングポートではなく、「＃４」及び「＃５」のフローエントリは第１条件〜第４条件を満たさず、第５条件を満たすので、アサーションエントリａが生成されることなく、アサーションエントリ生成処理が終了する。
【０１４９】
以上のアサーショ生成処理によって、図６に示すアサーションＤＢ２２１の「＃１」のアサーションエントリが生成される。
【０１５０】
図１３は、実施例１のアサーションＤＢ優先度更新処理のフローチャートである。
【０１５１】
アサーションＤＢ優先度更新処理は、アサーションＤＢ２２１に登録されたアサーションの優先度をパケット数に応じて更新する処理であり、アサーション制御部２１２によって所定時間ごとに実行される。
【０１５２】
まず、アサーション制御部２１２は、トポロジＤＢ２２４の通信装置管理テーブル２２４Ａに登録された通信装置１００の識別子のリスト（通信装置リストＬ）を取得する（１３０１）。
【０１５３】
次に、アサーション制御部２１２は、ステップ１３０１の処理で取得した通信装置リストＬに含まれる通信装置１００の識別子を選択し、選択した通信装置１００（通信装置Ｕ）の識別子に対してステップ１３０３〜１３０５の処理を実行する（１３０２）。なお、ステップ１３０３及び１３０４の処理は、通信装置リストＬに含まれる全ての通信装置１００の識別子に対して繰り返し実行される。
【０１５４】
アサーション制御部２１２は、通信装置管理テーブル２２４Ａを参照し、通信装置Ｕのアドレスを取得し、取得したアドレスの通信装置Ｕにアクセスし、通信装置Ｕのフローテーブル１２３のＳｔａｔｉｓｔｉｃｓ３０３に登録された統計情報を取得する（１３０３）。
【０１５５】
次に、アサーション制御部２１２は、ステップ１３０３の処理で取得した通信装置Ｕの統計情報をコンフィグＤＢ２２３のフローテーブル２２３ＡのＳｔａｔｉｓｔｉｃｓ８０４に登録する（１３０４）。
【０１５６】
ステップ１３０１の処理で取得した全ての通信装置１００の識別子に対してステップ１３０３及び１３０４の処理が実行されていなければ、アサーション制御部２１２は、ステップ１３０２の処理に戻り、新たな通信装置１００の識別子を選択し、ステップ１３０１の処理で取得した全ての通信装置１００の識別子に対してステップ１３０３及び１３０４の処理が実行されていれば、アサーション制御部２１２は、ステップ１３０６の処理に進む（１３０５）。
【０１５７】
ステップ１３０２〜１３０５の処理では、制御装置２００が管理する全ての通信装置１００の統計情報が取得され、取得された統計情報がコンフィグＤＢ２２３に含まれるフローテーブル２２３Ａに登録される。
【０１５８】
次に、アサーション制御部２１２は、ステップ１３０１の処理で取得した通信装置リストＬに含まれる通信装置１００の識別子を選択し、選択した通信装置１００（通信装置Ｕ）の識別子に対してステップ１３０７〜１３１０の処理を実行する（１３０６）。なお、ステップ１３０７〜１３１０の処理は、通信装置リストＬに含まれる全ての通信装置１００の識別子に対して実行される。
【０１５９】
アサーション制御部２１２は、アサーションＤＢ２２１から通信装置ＵのアサーションテーブルＴを取得する（１３０７）。具体的には、アサーション制御部２１２は、アサーションＤＢ２２１のＴａｒｇｅｔ  Ｓｗｉｔｃｈ６０２に通信装置Ｕの識別子が登録されたアサーションエントリをアサーションテーブルＴとして取得する。
【０１６０】
次に、アサーション制御部２１２は、ステップ１３０７の処理で取得した通信装置ＵのアサーションテーブルＴに関連する全てのフローエントリＥをコンフィグＤＢ２２３に含まれるフローテーブル２２３Ａから取得する（１３０８）。具体的には、アサーション制御部２１２は、通信装置ＵのアサーションテーブルＴのＦｌｏｗ  Ｅｎｔｒｙ６０１に登録された識別子によって識別されるフローエントリをフローテーブル２２３Ａから取得する。なお、通信装置ＵのアサーションテーブルＴのＦｌｏｗ  Ｅｎｔｒｙ６０１に登録された識別子によって識別されるフローエントリが複数ある場合、全てのフローエントリがフローテーブル２２３Ａから取得される。
【０１６１】
次に、アサーション制御部２１２は、ステップ１３０８の処理で取得したフローエントリＥのＳｔａｔｉｓｔｉｃｓ８０４に登録された統計情報に含まれるパケット数の合計値を算出し、算出した合計値をスケーリングして当該アサーションテーブルＴであるアサーションエントリの優先度を決定し、決定した優先度をアサーションテーブルＴのＰｒｉｏｒｉｔｙ６０７に登録する（１３０９）。制御装置２００は、パケット数の合計値と優先度とが対応付けられた優先度算出用テーブル（不図示）を有しており、アサーション制御部２１２は、優先度算出用テーブルを参照して、パケット数の合計値に対応する優先度を算出する。なお、優先度算出用テーブルでは、パケット数の合計値が大きいほど、優先度が高くなるように、パケット数の合計値と優先度とが対応付けられている。
【０１６２】
ステップ１３０１の処理で取得した全ての通信装置１００の識別子に対してステップ１３０７〜１３０９の処理が実行されていなければ、アサーション制御部２１２は、ステップ１３０６の処理に戻り、新たな通信装置１００の識別子を選択し、ステップ１３０１の処理で取得した全ての通信装置１００の識別子に対してステップ１３０７〜１３０９の処理が実行されていれば、アサーションＤＢ優先度更新処理を終了する（１３１０）。
【０１６３】
アサーションＤＢ優先度更新処理において、アサーションＤＢ２２１のＰｒｉｏｒｉｔｙ６０７が更新された場合、アサーション制御部２１２は、各通信装置１００のアサーションメモリ１３３に登録された優先度を各通信装置１００に更新させるように指示する。
【０１６４】
なお、アサーション制御部２１２は、ステップ１３０４の処理で、取得した通信装置Ｕの統計情報を、当該統計情報の日付、曜日、又は時間帯等ごとにフローテーブル２２３Ａに登録しておき、ステップ１３０９の処理で、日付、曜日、又は時間帯等ごとにパケット数の合計値を算出し、日付、曜日、又は時間帯等ごとに優先度を決定してもよい。通信装置１００のトラフィックには日付、曜日、又は時間帯等で一定のパターンがあり、当該パターンに応じた優先度を決定することができる。
【０１６５】
アサーションＤＢ優先度更新処理によって、所定時間ごとに、アサーションの生成に用いたフローエントリに登録されたパケット数に基づいて、アサーションの優先度が更新される。これによって、アサーションの生成に用いたフローエントリと一致するデータの受信回数が多いほど、当該アサーションの優先度を高くすることができ、当該アサーションが通信装置１００のアサーションテーブル１３２に登録される可能性を高くすることができる。フローエントリと一致するデータの受信回数が多ければ多いほど、障害が発生する可能性も高くなり、障害が与える影響も大きくなる。アサーションエントリＤＢ優先度更新処理によって、障害が発生する可能性及び障害が与える影響をリアルタイムに反映させた優先度をアサーションに付与することができる。
【０１６６】
図１４は、実施例１のアサーションテーブル更新処理のフローチャートである。
【０１６７】
アサーションテーブル更新処理は、通信装置１００のアサーションメモリ１３３に登録されたアサーションエントリを、優先度に基づいて、アサーションテーブル１３２に登録する処理であり、通信装置１００のアサーション制御部１３１によって実行される。
【０１６８】
まず、アサーション制御部１３１は、配列ＡｃｔｉｖｅＥｎｔｉｒｉｅｓ［］の全ての要素をＦａｌｓｅに初期化する（１４０１）。配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］は、アサーションテーブル１３２の各エントリに対応する。配列ＡｃｔｉｖｅＥｎｔｒｉｅｓにＦａｌｓｅが登録されている要素は、当該要素に対応するアサーションテーブル１３２のエントリが書込可能であることを意味し、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓにＴｒｕｅが登録されている要素は、当該要素に対応するアサーションテーブル１３２のエントリが書込不可であることを意味する。
【０１６９】
次に、アサーション制御部１３１は、ステップ１４０３〜１４１３の処理を、アサーションメモリ１３３が更新されるまで繰り返し実行する（１４０２）。なお、アサーションメモリ１３３は、制御装置２００からの指示によって更新される。アサーションメモリ１３３が更新された場合、アサーションテーブル更新処理はステップ１４０１の処理から再度実行される。
【０１７０】
アサーション制御部１３１は、アサーションメモリ１３３に登録されたアサーションエントリの優先度を配列Ｃｏｕｎｔｅｒｓ［］の各要素に登録することによって、配列Ｃｏｕｎｔｅｒｓ［］を初期化する（１４０３）。
【０１７１】
次に、アサーション制御部１３１は、ステップ１４０５〜１４１２の処理を無限ループする（１４０４）。
【０１７２】
まず、アサーション制御部は、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］でＦａｌｓｅが登録されているｉ番目の要素が存在するか否かを判定する（１４０５）。
【０１７３】
ステップ１４０５の処理で、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］でＦａｌｓｅが登録されているｉ番目の要素が存在しないと判定された場合（１４０５：Ｎｏ）、すなわち、アサーションテーブル１３２の全てのエントリが書込不可である場合、アサーション制御部１３１はステップ１４０９の処理に進む。
【０１７４】
一方、ステップ１４０５の処理で、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］でＦａｌｓｅが登録されているｉ番目の要素が存在すると判定された場合（１４０５：Ｙｅｓ）、アサーション制御部１３１は、２以上の値が登録されたｎ番目の要素が配列Ｃｏｕｎｔｅｒｓ［］に存在するか否かを判定する（１４０６）。
【０１７５】
ステップ１４０６の処理で、２以上の値が登録されたｎ番目の要素が配列Ｃｏｕｎｔｅｒｓ［］に存在しないと判定された場合（１４０６：Ｎｏ）、アサーションテーブル１３２に登録すべき優先度のアサーションエントリがアサーションメモリ１３３に存在しないので、アサーション制御部１３１は、ステップ１４０２の処理に戻り、ステップ１４０３の処理で配列Ｃｏｕｎｔｅｒｓを初期化する。
【０１７６】
一方、ステップ１４０６の処理で、２以上の値が登録されたｎ番目の要素が配列Ｃｏｕｎｔｅｒｓ［］に存在すると判定された場合（１４０６：Ｙｅｓ）、アサーション制御部１３１は、アサーションメモリ１３３のアサーションエントリのうちアサーションテーブル１３２に登録されていないアサーションエントリを選択し、選択したアサーションエントリのうち配列Ｃｏｕｎｔｅｒｓ［］に登録された優先度が最大のアサーションエントリを、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］にＦａｌｓｅが登録されたｉ番目の要素に対応するアサーションテーブル１３２のエントリに登録する（１４０７）。
【０１７７】
次に、アサーション制御部１３１は、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］のｉ番目の要素にＴｒｕｅを登録する（１４０８）。
【０１７８】
次に、アサーション制御部１３１は、配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］のＴｒｕｅが登録された要素に対応する配列Ｃｏｕｎｔｅｒｓ［］の要素に登録された値から１を減算する（１４０９）。ステップ１４０９の処理では、アサーション制御部１３１は、Ｆｉｘｅｄが登録された配列Ｃｏｕｎｔｅｒｓ［］の要素に登録された値からは１を減算しない。
【０１７９】
次に、アサーション制御部１３１は、配列Ｃｏｕｎｔｅｒｓ［］の要素のうち１が登録された要素に対応する配列ＡｃｔｉｖｅＥｎｔｒｉｅｓ［］の要素にＦａｌｓｅを登録する（１４１０）。
【０１８０】
次に、アサーション制御部１３１は、所定時間（Ｔ時間）だけ処理を停止し、ステップ１４１２の処理に進む。なお、このＴ時間には、管理者等によって任意の値が設定される。Ｔ時間は、ネットワークのトラフィック特性に合わせて設定されることによって、障害検出精度及び通信装置１００の消費電力を調整できる。Ｔ時間が短く設定されれば、検出精度が上がる一方、アサーションテーブル１３２への読み書き回数が増えるので、消費電力が大きくなる。一方、Ｔ時間が長く設定されれば、検出精度が下がる一方、アサーションテーブル１３２への読み書き回数が減るので、消費電力が小さくなる。例えば、多様なトラフィックが混在する状況では、Ｔ時間が短くされることが望ましい。また、同種類のトラフィックがバースト的に続く状況では、Ｔ時間が長く設定されることが望ましい。
【０１８１】
ステップ１４１２の処理では、アサーション制御部１３１は、ステップ１４０５〜１４１１の繰り返し処理が終了していれば、ステップ１４１３の処理に進み、繰り返し処理が終了していなければ、ステップ１４０４の処理に戻る（１４１２）。
【０１８２】
ステップ１４１３の処理では、アサーション制御部１３１は、ステップ１４０３〜１４１２の繰り返し処理が終了していれば、アサーションテーブル更新処理を終了し、ステップ１４０３〜１４１２の繰り返し処理が終了していなければ、ステップ１４０２の処理に戻る。
【０１８３】
アサーションテーブル更新処理では、Ｔ時間ごとにステップ１７０５〜１７１２の処理が実行される。ステップ１７０５〜１７１２の処理では、優先度が最大のアサーションエントリをアサーションテーブル１３２の書込可能なエントリに書き込み、アサーションテーブル１３２の書き込まれているアサーションエントリの優先度を１減算していき、優先度が１となったアサーションエントリが書き込まれているアサーションテーブル１３２のエントリを書き込み可能なエントリに設定する処理をＴ時間ごとに繰り返す。これによって、優先度が「３」のアサーションエントリは、３Ｔ時間だけアサーションテーブル１３２に書き込まれる。このように、アサーションメモリ１３３に登録されたアサーションエントリを、優先度に基づいて、アサーションテーブル１３２に時分割で書き込むので、優先度が高いアサーションエントリほど、アサーションテーブル１３２に書き込まれている時間を長くすることができ、アサーションテーブル１３２の容量を大きくしなくとも、アサーションエントリの優先度に基づいて障害を検出できる。
【０１８４】
一般に、アサーションテーブル１３２は、メモリ１６０と比較して消費電力及び回路規模が大きいＴＣＡＭ１５０等に格納されるため、アサーションテーブル１３２には、アサーションメモリ１３３に登録された全てのアサーションエントリを格納できない可能性がある。したがって、アサーションテーブル更新処理により、アサーションテーブル１３２の容量を大きくなしなくとも、障害の検出精度を維持できることが重要となる。
【０１８５】
通信装置１００におけるアサーションテーブル１３２に基づく障害検出の動作について、図１５〜図１８を用いて説明する。
【０１８６】
図１５は、実施例１の通信装置１００の状態遷移図である。
【０１８７】
通信装置１００は、Ｎｏｒｍａｌ状態１５０１、Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２、Ｐｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３、及びＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移し得る。Ｎｏｒｍａｌ状態１５０１は、通信装置１００が正常である状態である。Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２は、冗長系の障害の被疑状態である。Ｐｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３は、ループ障害の被疑状態である。Ｆａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４は、障害が検出された状態である。図１５で検出される障害には、経路障害（Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ）、リンク障害（Ｌｉｎｋ  Ｆａｉｌｕｒｅ）、冗長系障害（Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ）、及びループ障害（Ｌｏｏｐ  Ｆａｉｌｕｒｅ）がある。
【０１８８】
アサーション制御部１３１は、通信装置１００の状態を管理し、所定の条件が満たす場合、通信装置１００の状態を遷移させる。
【０１８９】
通信装置１００が起動されると、通信装置１００の状態はＮｏｒｍａｌ状態１５０１に初期化される。
【０１９０】
Ｎｏｒｍａｌ状態１５０１で、アサーションテーブル１３２に基づいてＲｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅが検出されると、アサーション制御部１３１は、通信装置１００の状態をＰｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２に遷移させる。
【０１９１】
Ｎｏｒｍａｌ状態１５０１で、アサーションテーブル１３２に基づいてＬｏｏｐ  Ｆａｉｌｕｒｅが検出されると、アサーション制御部１３１は、通信装置１００の状態をＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３に遷移させる。
【０１９２】
Ｎｏｒｍａｌ状態１５０１で、アサーションテーブル１３２に基づいてＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ又はＬｉｎｋ  Ｆａｉｌｕｒｅが検出されると、アサーション制御部１３１は、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させる。
【０１９３】
Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２で、通信装置１００が制御装置２００からＰａｔｈ  Ｆａｉｌｏｖｅｒ（Ａｃｔｉｖｅ経路の切替）を検出した旨を受信すると、Ａｃｔｉｖｅ経路が切り替えられたことによってＲｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅが検出されたので、アサーション制御部１３１は、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させる。
【０１９４】
また、Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２で、通信装置１００が制御装置２００からＰａｔｈ  Ｆａｉｌｏｖｅｒ（Ａｃｔｉｖｅ経路の切替）を検出していない旨を受信すると、アサーション制御部１３１は、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させる。
【０１９５】
Ｐｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３で、通信装置１００が制御装置２００からＲｉｎｇ  Ｆａｉｌｏｖｅｒ（リング切替）を検出した旨を受信すると、リングが切り替えられたことによってＬｏｏｐ  Ｆａｉｌｕｒｅが検出されたので、アサーション制御部１３１は、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させる。
【０１９６】
また、Ｐｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３で、通信装置１００が制御装置２００からＲｉｎｇ  Ｆａｉｌｏｖｅｒ（リング切替）を検出していない旨を受信すると、アサーション制御部１３１は、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させる。
【０１９７】
Ｆａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４で、検出された障害が復旧すると、アサーション制御部１３１は、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させる。
【０１９８】
図１６は、実施例１の通信装置１００の障害検出処理のフローチャートである。
【０１９９】
障害検出処理は、受信したデータと一致するアサーションエントリがアサーションテーブル１３２に存在するか否かを判定して、各種障害を検出する処理であり、通信装置１００がデータを受信した場合にアサーション制御部１３１によって実行される。
【０２００】
まず、アサーション制御部１３１は、パケットＸを受信し（１６０１）、受信したパケットＸがアサーションテーブル１３２に登録されたアサーションエントリに一致するかを確認する（１６０２）。
【０２０１】
アサーション制御部１３１は、ステップ１６０２の処理における確認結果に基づいて、受信したパケットＸと一致するアサーションエントリが存在するか否かを判定する（１６０３）。
【０２０２】
ステップ１６０３の処理で、受信したパケットＸと一致するアサーションエントリが存在しないと判定された場合（１６０３：Ｎｏ）、アサーション制御部１３１は、受信したパケットＸを通常転送すると判断し（１６０４）、スイッチ部１２０によって通常の転送処理を実行して、障害検出処理を終了する。
【０２０３】
一方、ステップ１６０３の処理で、受信したパケットＸと一致するアサーションエントリが存在すると判定された場合（１６０３：Ｙｅｓ）、アサーション制御部１３１は、受信したパケットＸと一致するアサーションエントリ（アサーションＡ）を被疑アサーションＰＡとして自身に保存する（１６０５）。
【０２０４】
次に、アサーション制御部１３１は、アサーションＡのＡｃｔｉｏｎに登録された障害の種別に基づいて処理を分岐する（１６０６）。
【０２０５】
まず、アサーションＡのＡｃｔｉｏｎに登録された障害の種別がＲｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅである場合、アサーション制御部１３１は、通信装置１００の状態をＰｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２に遷移させ（１６０７）、ステップ１６０９の処理に進む。
【０２０６】
アサーションＡのＡｃｔｉｏｎに登録された障害の種別がＬｏｏｐ  Ｆａｉｌｕｒｅである場合、アサーション制御部１３１は、通信装置１００の状態をＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３に遷移させ（１６０８）、ステップ１６０９の処理に進む。
【０２０７】
ステップ１６０９の処理では、アサーション制御部１３１は、アサーションＡの優先度をＦｉｘｅｄに変更する（１６０９）。アサーションＡの優先度をＦｉｘｅｄに変更することによって、障害が疑われるアサーションエントリについては、常にアサーションテーブル１３２に書き込まれた状態となり、アサーション制御部１３１は、パケットを受信するたびに当該アサーションエントリの障害が発生しているか否かを判定できる。
【０２０８】
次に、アサーション制御部１３１は、受信したパケットＸをパケットバッファ１３４に格納し（１６１０）、アサーションＡを制御装置２００に通知し（１６１３）、障害検出処理を終了する。
【０２０９】
また、アサーションＡのＡｃｔｉｏｎに登録された障害の種別がＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ又はＬｉｎｋ  Ｆａｉｌｕｒｅである場合、アサーション制御部１３１は、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させる（１６１１）。次に、アサーション制御部１３１は、受信したパケットＸを破棄し（１６１２）、ステップ１６１３の処理でアサーションＡを制御装置２００に通知し、障害検出処理を終了する。
【０２１０】
障害検出処理では、障害が発生した即座に確定できない冗長系ネットワークに関する障害（Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ又はＬｏｏｐ  Ｆａｉｌｕｒｅ）である場合、障害が確定するまで、受信したパケットをパケットバッファ１３４に格納しておく。これによって、障害の可能性があるパケットの転送を防止できるとともに、障害でなかった場合には、当該パケットを転送でき、パケットロスを防止できる。
【０２１１】
図１７は、実施例１の障害確定処理のフローチャートである。
【０２１２】
障害確定処理は、通信装置１００がＰｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２又はＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３である場合に、制御装置２００からの経路切替があったか否かを示す情報に基づいて、障害が発生したか否か確定させる処理であり、アサーション制御部１３１によって実行される。
【０２１３】
まず、アサーション制御部１３１は、通信装置１００の状態に基づいて処理を分岐する（１７０１）。
【０２１４】
通信装置１００がＰｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２である場合、通信装置１００は、制御装置２００から障害検出結果Ｒを受信する（１７０２）。障害検出結果Ｒは、Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２又はＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３に遷移した場合の図１６に示すステップ１６１３の処理で制御装置２００に通知したアサーションＡに対する応答であり、Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２のアサーションＡに対する応答である場合、Ａｃｔｉｖｅ経路の切替があったか否かを示す情報を含みＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３のアサーションＡに対する応答である場合、リング切替があったか否かを示す情報を含む。
【０２１５】
次に、アサーション制御部１３１は、ステップ１７０２の処理で受信した障害検出結果ＲがＡｃｔｉｖｅ経路切替があったことを示すか否かを判定する（１７０３）。
【０２１６】
ステップ１７０３の処理において、障害検出結果ＲがＡｃｔｉｖｅ経路切替があったことを示すと判定された場合（１７０３：Ｙｅｓ）、アサーション制御部１３１は、パケットバッファ１３４に格納されたパケットＸを通常転送すると判断し（１７０６）、スイッチ部１２０によって通常の転送処理を実行する。そして、アサーション制御部１３１は、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させ、障害確定処理を終了する。
【０２１７】
一方、ステップ１７０３の処理において、障害検出結果ＲがＡｃｔｉｖｅ経路切替がなかったことを示すと判定された場合（１７０３：Ｎｏ）、アサーション制御部１３１は、パケットバッファ１３４に格納されたパケットＸを破棄し（１７０８）、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させ（１７０９）、障害確定処理を終了する。
【０２１８】
通信装置１００がＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３である場合、通信装置１００は、制御装置２００から障害検出結果Ｒを受信する（１７０４）。アサーション制御部１３１は、ステップ１７０４の処理で受信した障害検出結果Ｒがリング切替があったことを示すか否かを判定する（１７０５）。
【０２１９】
ステップ１７０５の処理において、障害検出結果Ｒがリング切替があったことを示すと判定された場合（１７０５：Ｙｅｓ）、アサーション制御部１３１は、ステップ１７０６の処理で、パケットバッファ１３４に格納されたパケットＸを通常転送し、ステップ１７０７の処理で、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させ、障害確定処理を終了する。
【０２２０】
一方、ステップ１７０５の処理において、障害検出結果Ｒがリング切替がなかったことを示すと判定された場合（１７０５：Ｎｏ）、アサーション制御部１３１は、ステップ１７０８の処理で、パケットバッファ１３４に格納されたパケットＸを破棄し、ステップ１７０９の処理で、通信装置１００の状態をＦａｉｌｕｒｅ  Ｄｅｔｅｃｔｉｏｎ状態１５０４に遷移させ、障害確定処理を終了する。
【０２２１】
通信装置１００が、Ｐｓｅｕｄｏ  Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ状態１５０２又はＰｓｅｕｄｏ  Ｌｏｏｐ  Ｆａｉｌｕｒｅ状態１５０３以外である場合、アサーション制御部１３１は、障害確定処理を終了する。
【０２２２】
このように、本実施例によれば、通信装置１００は、受信したデータとアサーションテーブル１３２に登録されたアサーションエントリとをマッチングすることによって、通常時と異なるデータを受信したことを検出し、経路切替及びリング切替を考慮した上で、障害を確定することができる。
【０２２３】
特許文献１に記載された技術では、ＣＣＭに基づいて障害を検出する。例えば、宇宙線などによるソフトエラーで特定の回路に障害が発生した場合等、ＣＣＭに障害が発生しなくても、その他のパケットに障害が発生する場合がある。ＣＣＭに基づいて障害を検出する技術では、このような障害を検出できないという問題があった。
【０２２４】
このような障害を検出するために、通信装置１００に設定された全てのフローエントリに障害が発生していないかを検証することも考えられる。この場合には、フローエントリ数分のテストパケットが必要となり、通信装置１００の負荷が高くなり、ネットワークの帯域がテストパケットで消費されてしまうという問題が起きる。
【０２２５】
また、ＣＣＭに基づいて障害を検出する場合、ＣＣＭの送受信の設定が適切でないと障害を正しく検出できない。例えば、３００ｍｓ以下の精度で障害の検出を望む場合にＣＣＭの送信タイミングが１秒間隔で設定されると、所望の精度で障害を検出できないという問題がある。
【０２２６】
本実施例によれば、アサーションテーブル１３２に障害を検出するための条件を登録し、アサーションテーブル１３２を参照することによって、ＣＣＭ等のテストパケットに障害が発生しなくてもその他のパケットに発生する障害を検出できる。また、アサーションテーブル１３２には、管理者が、予めフェールセーフ用又はデバッグ用のアサーションエントリが登録されることによって、通信装置１００の設定ミスも検出でき、ネットワークの信頼性を向上させることができる。
【０２２７】
図１８は、実施例１の障害回避処理のフローチャートである。
【０２２８】
障害回避処理は、障害が確定した場合に障害の元になったアサーションエントリに対応するフローエントリをフローテーブル１２３から削除し、障害を回避する処理であり、フローテーブル制御部１２１及びアサーション制御部１３１によって実行される。
【０２２９】
まず、フローテーブル制御部１２１は、フローテーブル１２３のＭａｔｃｈ  Ｆｉｅｌｄ３０１に登録された情報が、図１６に示すステップ１６０５の処理で保存された被疑アサーションＰＡのＭａｔｃｈ  Ｆｉｅｌｄに登録された情報と一致するフローエントリをフローテーブル１２３から削除する（１８０１）。このように、障害が発生したフローエントリがフローテーブル１２３から削除されることによって、フロー単位で障害を回避することができる。
【０２３０】
次に、フローテーブル制御部１２１は、ステップ１８０１の処理で削除したフローエントリを制御装置２００に通知する（１８０２）。なお、制御装置２００がフローエントリの削除の通知を受信すると、コンフィグＤＢ２２３のフローテーブル２２３Ａから当該フローエントリを削除する。
【０２３１】
次に、アサーション制御部１３１は、ステップ１６０９の処理でアサーションＡの優先度がＦｉｘｅｄに変更されていれば、当該アサーションＡの優先度を元の優先度に変更する（１８０３）。
【０２３２】
次に、アサーション制御部１３１は、通信装置１００の状態をＮｏｒｍａｌ状態１５０１に遷移させる（１８０４）。
【０２３３】
次に、アサーション制御部１３１は、通信装置１００の状態がＮｏｒｍａｌ状態１５０１に遷移した旨を制御装置２００に通知し（１８０５）、障害回避処理を終了する。
【０２３４】
障害回避処理によれば、障害が確定した場合に、障害が発生したフローエントリをフローテーブル１２３から削除することによって、フローエントリ単位で障害を回避することができる。
【０２３５】
例えば、特許文献１に記載されたＥＲＰでは、リング単位で疎通障害が検出され、フロー単位で障害を検出できない。特許文献１では、リング単位で障害が検出されるので、障害が検出されたリングに属する複数のフロー全てが影響を受けるという問題がある。また、リングに障害が発生してリング切替があると、通信装置１００のＦＤＢの内容が削除される。このため、通信装置１００は、ＦＤＢを再度学習しなければならず、処理負荷が高くなる。さらに、通信装置１００は、ＦＤＢを学習するまでの間、受信したパケットをフラッディングするので、ネットワークの帯域を圧迫してしまう。
【０２３６】
本実施例では、障害回避処理によってフローエントリ単位で障害を回避し、リングを切り替えないので、障害回避による影響を最小限にすることができ、ＦＤＢの学習による通信装置１００の処理負荷の増大及びネットワークの帯域の圧迫を防止できる。
【０２３７】
次に、通信装置１００が障害を検出した旨が通知された制御装置２００によって実行される障害特定処理について図１９〜図２５を用いて説明する。
【０２３８】
図１９は、実施例１の障害特定処理のフローチャートである。
【０２３９】
障害特定処理は、通信装置１００が検出した障害の種別に応じて障害原因等を特定する処理であり、通信装置１００から障害を検出したアサーションＡが通知された場合に制御装置２００の障害特定部２１４によって実行される。
【０２４０】
まず、障害特定部２１４は、障害を検出した通信装置ＸからアサーションＡを受信する（１９０１）。なお、通信装置Ｘは、図１６に示すステップ１６１３の処理でアサーションＡを制御装置２００に送信する。
【０２４１】
次に、障害特定部２１４は、受信したアサーションＡのＭａｔｃｈ  Ｆｉｅｌｄから入力ポートＰを抽出する（１９０２）。
【０２４２】
次に、障害特定部２１４は、トポロジＤＢ２２４のトポロジテーブル２２４Ｂを参照して、通信装置ＸのポートＰに接続されている通信装置Ｕを検索する（１９０３）。
【０２４３】
次に、障害特定部２１４は、アサーションＡのＡｃｔｉｏｎに登録された障害の種別に応じて処理を分岐する（１９０４）。
【０２４４】
アサーションＡのＡｃｔｉｏｎにＲｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅが登録されている場合、障害特定部２１４は、通信装置Ｘ及び通信装置Ｕの識別子を引数としてＲｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅ処理を呼び出し、当該処理を実行し（１９０５）、障害特定処理を終了する。Ｒｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅ処理の詳細は図２０で説明する。
【０２４５】
アサーションＡのＡｃｔｉｏｎにＬｏｏｐ  Ｆａｉｌｕｒｅが登録されている場合、障害特定部２１４は、通信装置Ｘ及び通信装置Ｕの識別子、並びにポートＰの識別子を引数としてＬｏｏｐ  Ｆａｉｌｕｒｅ処理を呼び出し、当該処理を実行し（１９０６）、障害特定処理を終了する。Ｌｏｏｐ  Ｆａｉｌｕｒｅ処理の詳細は図２１で説明する。
【０２４６】
アサーションＡのＡｃｔｉｏｎにＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅが登録されている場合、障害特定部２１４は、通信装置Ｕの識別子を引数としてＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理を呼び出し、当該処理を実行し（１９０７）、障害特定処理を終了する。Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理の詳細は図２３で説明する。
【０２４７】
アサーションＡのＡｃｔｉｏｎにＬｉｎｋ  Ｆａｉｌｕｒｅが登録されている場合、障害特定部２１４は、通信装置Ｘの識別子及びポートＰの識別子を引数としてＬｉｎｋ  Ｆａｉｌｕｒｅ処理を呼び出し、当該処理を実行し（１９０８）、障害特定処理を終了する。Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理の詳細は図２４で説明する。
【０２４８】
図２０は、実施例１のＲｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【０２４９】
Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理は、通信装置１００がＲｅｄｕｄａｎｔ  Ｆａｉｌｕｒｅを検出した場合の障害原因を特定する処理であり、障害特定部２１４によって実行される。
【０２５０】
障害特定部２１４は、通信装置ＵにＡｃｔｉｖｅ経路の切替があったか否かを確認する（２００１）。例えば、冗長経路は、ＬＡＧ（Link Aggregation Group）等を用いて構成されているものとする。また、例えば、障害特定部２１４は、トポロジＤＢ２２４の通信装置管理テーブル２２４Ａを参照して通信装置Ｕのアドレスを取得し、管理Ｉ／Ｆ２３０を介して通信装置Ｕにアクセスして、通信装置ＵにＡｃｔｉｖｅ経路の切替があったか否かを確認する。
【０２５１】
障害特定部２１４は、ステップ２００１の処理の確認結果を障害検出結果Ｒとして通信装置Ｘに通知する（２００２）。
【０２５２】
次に、障害特定部２１４は、ステップ２００１の処理の確認結果を参照し、通信装置ＵにＡｃｔｉｖｅ経路切替があったか否かを判定する（２００３）。
【０２５３】
ステップ２００３の処理で、通信装置ＵにＡｃｔｉｖｅ経路切替があったと判定された場合（２００３：Ｙｅｓ）、通信装置ＵのＡｃｔｉｖｅ経路に障害が発生したことが原因でＡｃｔｉｖｅ経路が切り替えられたので、障害特定部２１４は、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅの原因は通信装置ＵのＡｃｔｉｖｅ経路に障害が発生したことであると判断し（２００４）、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理を終了する。
【０２５４】
一方、ステップ２００３の処理で、通信装置ＵにＡｃｔｉｖｅ経路切替がなかったと判定された場合（２００３：Ｎｏ）、障害特定部２１４は、通信装置Ｕにハードウェア障害があったか否かを確認する（２００５）。なお、障害特定部２１４が通信装置Ｕにハードウェア障害があったか否かを確認する方法は、ステップ２００１の処理と同じ方法を用いることができる。
【０２５５】
次に、障害特定部２１４は、ステップ２００５の処理の確認結果を参照し、通信装置Ｕにハードウェア障害があったか否かを判定する（２００６）。
【０２５６】
ステップ２００６の処理で、通信装置Ｕにハードウェア障害があったと判定された場合（２００６：Ｙｅｓ）、障害特定部２１４は、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅの原因は通信装置Ｕにハードウェア障害が発生したことであると判断し（２００７）、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理を終了する。
【０２５７】
一方、ステップ２００６の処理で、通信装置Ｕにハードウェア障害がなかったと判定された場合（２００６：Ｎｏ）、障害特定部２１４は、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅの原因が不明であると判断し（２００８）、Ｒｅｄｕｎｄａｎｔ  Ｆａｉｌｕｒｅ処理を終了する。
【０２５８】
図２１は、実施例１のＬｏｏｐ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【０２５９】
Ｌｏｏｐ  Ｆａｉｌｕｒｅ処理は、通信装置１００がＬｏｏｐ  Ｆａｉｌｕｒｅを検出した場合の障害原因を特定する処理であり、障害特定部２１４によって実行される。
【０２６０】
まず、障害特定部２１４は、通信装置Ｕにリング切替があったか否かを判定する（２１０１）。なお、障害特定部２１４が通信装置Ｕにリング切替があったか否かを確認する方法は、ステップ２００１の処理と同じ方法を用いることができる。
【０２６１】
次に、障害特定部２１４は、ステップ２１０１の処理の確認結果を障害検出結果Ｒとして通信装置Ｘに通知する（２１０２）。
【０２６２】
次に、障害特定部２１４は、ステップ２１０１の処理の確認結果を参照し、通信装置Ｕにリング切替があったか否かを判定する（２１０３）。
【０２６３】
ステップ２１０３の処理で、通信装置Ｕにリング切替があったと判定された場合（２１０３：Ｙｅｓ）、障害特定部２１４は、通信装置Ｘの識別子及びポートＰの識別子を引数としてリング障害ポイント特定処理を呼び出し、当該処理を実行する（２１０４）。リング障害ポイント特定処理の詳細は図２２で説明する。
【０２６４】
次に、障害特定部２１４は、リング障害ポイント特定処理で障害ポイントＶが特定されたか否かを判定する（２１０５）。
【０２６５】
ステップ２１０５の処理で、リング障害ポイント特定処理で障害ポイントＶが特定されたと判定された場合（２１０５：Ｙｅｓ）、障害特定部２１４は、Ｌｏｏｐ  Ｆａｉｌｕｒｅの原因が障害ポイントＶで障害が発生したことであると判断し（２１０６）、Ｌｏｏｐ  Ｆａｉｌｕｒｅ処理を終了する。
【０２６６】
一方、ステップ２１０５の処理で、リング障害ポイント特定処理で障害ポイントＶが特定されないと判定された場合（２１０５：Ｎｏ）、障害特定部２１４は、Ｌｏｏｐ  Ｆａｉｌｕｒｅの原因が不明であると判断し（２１０９）、Ｌｏｏｐ  Ｆａｌｉｕｒｅ処理を終了する。
【０２６７】
一方、ステップ２１０３の処理で、通信装置Ｕにリング切替がなかったと判定された場合（２１０３：Ｎｏ）、障害特定部２１４は、通信装置Ｕにハードウェア障害があったか否かを確認する（２１０７）。なお、障害特定部２１４が通信装置Ｕにハードウェア障害があったか否かを確認する方法は、ステップ２００１の処理と同じ方法を用いることができる。
【０２６８】
次に、障害特定部２１４は、ステップ２１０７の処理の確認結果を参照し、通信装置Ｕにハードウェア障害があったか否かを判定する（２１０８）。
【０２６９】
ステップ２１０８の処理で、通信装置Ｕにハードウェア障害がなかったと判定された場合、障害特定部２１４は、ステップ２１０９の処理で、Ｌｏｏｐ  Ｆａｉｌｕｒｅの原因が不明であると判断し、Ｌｏｏｐ  Ｆａｌｉｕｒｅ処理を終了する。
【０２７０】
ステップ２１０８の処理で、通信装置Ｕにハードウェア障害があったと判定された場合、障害特定部２１４は、Ｌｏｏｐ  Ｆａｉｌｕｒｅの原因が通信装置Ｕのハードウェア障害であると判断し（２１１０）、Ｌｏｏｐ  Ｆａｉｌｕｒｅ処理を終了する。
【０２７１】
図２２は、実施例１のリング障害ポイント特定処理のフローチャートである。
【０２７２】
リング障害ポイント特定処理は、通信装置ＸのポートＰにリングトポロジで接続された上流側の通信装置に障害が発生しているか否かを判定していく処理であり、障害特定部２１４によって実行される。
【０２７３】
まず、障害特定部２１４は、トポロジＤＢ２２４のトポロジテーブル２２４Ｂを参照し、通信装置ＸのポートＰにリングトポロジで接続された通信装置ＵのポートＱの識別子と当該通信装置Ｕの識別子とを検索する（２２０１）。
【０２７４】
次に、障害特定部２１４は、通信装置Ｕにハードウェア障害があったか否かを確認する（２２０２）。なお、障害特定部２１４が通信装置Ｕにハードウェア障害があったか否かを確認する方法は、ステップ２００１の処理と同じ方法を用いることができる。
【０２７５】
次に、障害特定部２１４は、ステップ２２０２の処理の確認結果を参照し、通信装置Ｕにハードウェア障害があったか否かを判定する（２３０３）。
【０２７６】
ステップ２３０３の処理で、通信装置Ｕにハードウェア障害があったと判定された場合（２３０３：Ｙｅｓ）、障害特定部２１４は、障害ポイントＶを通信装置Ｕに特定し（２２１６）、リング障害ポイント特定処理を終了する。
【０２７７】
一方、ステップ２３０３の処理で、通信装置Ｕにハードウェア障害がなかったと判定された場合（２３０３：Ｎｏ）、障害特定部２１４は、コンフィグＤＢ２２３のフローテーブル２２３Ａを参照し、通信装置ＵのフローテーブルＦを取得する（２２０４）。
【０２７８】
次に、障害特定部２１４は、ステップ２２０４の処理で取得した通信装置ＵのフローテーブルＦのフローエントリＥを選択し、選択したフローエントリＥに対してステップ２２０６〜２２１３の処理を実行する（２２０５）。ステップ２２０６〜２２１３の処理は、フローテーブルＦの全てのフローエントリに実行される。
【０２７９】
障害特定部２１４は、フローエントリＥが（１）の条件又は（２）の条件を満たすか否かを確認する（２２０６）。（１）の条件は、フローエントリＥのＡｃｔｉｏｎにＯｕｔｐｕｔが登録され、かつ当該フローエントリＥのＡｃｔｉｏｎに登録されたＯｕｔｐｏｒｔがポートＱであることである。すなわち、（１）の条件は、通信装置ＵのフローエントリＥの出力ポートが通信装置ＸのポートＰにリングトポロジで接続される通信装置ＵのポートＱであることを条件とする。
【０２８０】
（２）の条件は、フローエントリＥのＡｃｔｉｏｎにＯｕｔｐｕｔが登録され、当該フローエントリＥのＡｃｔｉｏｎに登録されたＯｕｔｐｏｒｔがＮｏｒｍａｌであり、かつ当該フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄに登録されたＶＬＡＮがポートＱのＶＬＡＮと同じであることである。すなわち、（２）の条件は、通信装置ＵのフローエントリＥの出力ポートから出力されたデータが通信装置ＸのポートＰに入力されることを条件とする。
【０２８１】
次に、障害特定部２１４は、ステップ２２０６の処理の確認結果を参照し、フローエントリＥが（１）の条件又は（２）の条件を満たすか否かを判定する（２２０７）。
【０２８２】
ステップ２２０７の処理で、フローエントリＥが（１）の条件又は（２）の条件を満たすと判定された場合（２２０７：Ｙｅｓ）、障害特定部２１４は、フローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄの入力ポートをポートｐに設定する（２２０８）。
【０２８３】
次に、障害特定部２１４は、トポロジＤＢ２２４のトポロジテーブル２２４Ｂを参照し、通信装置Ｕのポートｐの属性を検索する（２２０９）。そして、障害特定部２１４は、ステップ２２０９の処理で検索された通信装置Ｕのポートｐの属性がリングトポロジであるか否かを判定する（２２１０）。
【０２８４】
ステップ２２１０の処理で、通信装置Ｕのポートｐの属性がリングトポロジであると判定された場合（２２１０：Ｙｅｓ）、障害特定部２１４は、通信装置Ｕの識別子及びポートｐの識別子を引数として、リング障害ポイント特定処理を再帰的に実行する（２２１１）。
【０２８５】
次に、障害特定部２１４は、ステップ２２１１の処理で実行されたリング障害ポイント特定処理で障害が検出されたか否かを判定する（２２１２）。
【０２８６】
ステップ２２１２の処理で、リング障害ポイント特定処理で障害が検出されたと判定された場合（２２１２：Ｙｅｓ）、障害特定部２１４は、障害が検出された通信装置Ｖを障害ポイントＶとして特定し（２２１５）、リング障害ポイント特定処理を終了する。
【０２８７】
一方、ステップ２２１２の処理で、リング障害ポイント特定処理で障害が検出されていないと判定された場合（２２１２：Ｎｏ）、フローテーブルＦの全てのフローエントリＥにステップ２２０６〜２２１３の処理が実行されていなければ、障害特定部２１４は、ステップ２２０３の処理に戻り、フローテーブルＦのフローエントリを新たなフローエントリＥに選択する。一方、フローテーブルＦの全てのフローエントリＥにステップ２２０６〜２２１３の処理が実行されていれば、障害特定部２１４は、障害が検出されなかったと判断し（２２１４）、リング障害ポイント特定処理を終了する。
【０２８８】
ステップ２２０７の処理で、フローエントリＥが（１）の条件又は（２）の条件を満たさないと判定された場合（２２０７：Ｎｏ）、及びステップ２２１０の処理で、通信装置Ｕのポートｐの属性がリングトポロジでないと判定された場合（２２１０：Ｎｏ）、障害特定部２１４は、ステップ２２１４の処理に進む。
【０２８９】
図２３は、実施例１のＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【０２９０】
Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理は、通信装置１００がＲｏｕｔｉｎｇ  Ｆａｉｌｕｒｅを検出した場合の障害原因を特定する処理であり、障害特定部２１４によって実行される。
【０２９１】
まず、障害特定部２１４は、通信装置Ｕにハードウェア障害があったか否かを確認する（２３０１）。なお、障害特定部２１４が通信装置Ｕにハードウェア障害があったか否かを確認する方法は、ステップ２００１の処理と同じ方法を用いることができる。
【０２９２】
次に、障害特定部２１４は、ステップ２３０１の処理の確認結果を参照し、通信装置Ｕにハードウェア障害があったか否かを判定する（２３０２）。
【０２９３】
ステップ２３０２の処理で、通信装置Ｕにハードウェア障害があったと判定された場合（２３０２：Ｙｅｓ）、障害特定部２１４は、Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅの原因が通信装置Ｕのハードウェア障害であると判断し（２３０３）、Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理を終了する。
【０２９４】
ステップ２３０２の処理で、通信装置Ｕにハードウェア障害がなかったと判定された場合（２３０２：Ｎｏ）、障害特定部２１４は、Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅの原因が不明であると判断し（２３０４）、Ｒｏｕｔｉｎｇ  Ｆａｉｌｕｒｅ処理を終了する。
【０２９５】
図２４は、実施例１のＬｉｎｋ  Ｆａｉｌｕｒｅ処理のフローチャートである。
【０２９６】
Ｌｉｎｋ  Ｆａｉｌｕｒｅ処理は、通信装置１００がＬｉｎｋ  Ｆａｉｌｕｒｅを検出した場合の障害原因を特定する処理であり、障害特定部２１４によって実行される。
【０２９７】
まず、障害特定部２１４は、通信装置Ｘの識別子及びポートＰの識別子を引数として経路障害ポイント特定処理を呼び出し、当該処理を実行する（２４０１）。経路障害ポイント特定処理の詳細は図２２で説明する。
【０２９８】
次に、障害特定部２１４は、経路障害ポイント特定処理で障害ポイントＶが特定されたか否かを判定する（２４０２）。
【０２９９】
ステップ２４０２の処理で、経路障害ポイント特定処理で障害ポイントＶが特定されたと判定された場合（２４０２：Ｙｅｓ）、障害特定部２１４は、Ｌｉｎｋ  Ｆａｉｌｕｒｅの原因が障害ポイントＶで障害が発生したことであると判断し（２４０３）、Ｌｉｎｋ  Ｆａｉｌｕｒｅ処理を終了する。
【０３００】
一方、ステップ２１０５の処理で、経路障害ポイント特定処理で障害ポイントＶが特定されないと判定された場合（２４０２：Ｎｏ）、障害特定部２１４は、Ｌｉｎｋ  Ｆａｉｌｕｒｅの原因が不明であると判断し（２４０４）、Ｌｉｎｋ  Ｆａｌｉｕｒｅ処理を終了する。
【０３０１】
図２５は、実施例１の経路障害ポイント特定処理のフローチャートである。
【０３０２】
経路障害ポイント特定処理は、通信装置ＸのポートＰに接続された上流側の通信装置に障害が発生しているか否かを判定していく処理であり、障害特定部２１４によって実行される。図２５に示す処理のうち、図２２に示すリング障害ポイント特定処理と同じ処理は同じ符号を付与し、説明を省略する。
【０３０３】
経路障害ポイント特定処理は、通信装置ＵのフローエントリＥのＭａｔｃｈ  Ｆｉｅｌｄの入力ポートの属性がリングトポロジであるか否かを判定する処理（図２２に示すステップ２２１０の処理）を実行しない点でリング障害ポイント特定処理と相違する。
【０３０４】
本実施例によって、通信装置１００が検出した障害に基づいて制御装置２００が障害の位置を特定できる。特許文献１に記載された技術では、リングトポロジを想定した特定方法であるので、他のトポロジでは障害の位置を特定できない。障害の位置が特定できれば、管理者等は、特定結果を参照して早期に障害復旧作業を実施できるので、ネットワークの信頼性を向上させることができる。
【実施例２】
【０３０５】
実施例１では、制御装置２００がアサーションテーブル生成処理（図１０）を実行して通信装置１００のアサーションエントリを生成し、アサーションＤＢ優先度更新処理（図１３）を実行し、アサーションエントリの優先度を更新したが、本実施例では、通信装置１００がアサーションエントリを生成し、アサーションエントリの優先度を更新する。これによって、制御装置２００の処理負荷を通信装置１００に分散させることができる。
【０３０６】
本実施例について図２６〜図２８を用いて説明する。
【０３０７】
図２６は、実施例２の通信システムの構成を示すブロック図である。図２６では、図１と同じ構成は同じ符号を付与して説明を省略する。
【０３０８】
本実施例の通信装置１００のスイッチ部１２０は、実施例１の構成に加えてトポロジＤＢ１２５を有する。トポロジＤＢ１２５は、メモリ１６０に格納される。また、本実施例の通信装置１００のアサーション部１０は、実施例１の構成に加えてアサーション生成部２１１、アサーションＤＢ２２１、及びアサーション優先度ＤＢ２２２を有する。アサーション生成部２１１は、ＣＰＵ１４０に実装され、アサーションＤＢ２２１及びアサーション優先度ＤＢ２２２はメモリ１６０に格納される。
【０３０９】
また、本実施例の制御装置２００は、アサーション生成部２１１、アサーション制御部２１２、アサーションＤＢ２２１、アサーション優先度ＤＢ２２２を有さない点で実施例１の制御装置２００と相違する。
【０３１０】
実施例１のアサーション生成部２１１は、通信装置１００のアサーションテーブル１３２に登録され得る全てのアサーションエントリを生成したが、本実施例のアサーション生成部２１１は、隣接する通信装置１００のアサーションテーブル１３２に登録され得る一部のアサーションエントリを生成する。
【０３１１】
また、本実施例のアサーション制御部１３１は、実施例１の制御装置２００のアサーション制御部２１２の機能も有する。具体的には、図２７に示すアサーションテーブル生成処理によって隣接する通信装置１００のアサーションエントリが生成された場合、アサーション制御部１３１は、生成されたアサーションエントリの登録を隣接する通信装置１００に管理Ｉ／Ｆ１１０を介して指示する。また、図２８に示すアサーションエントリ優先度更新処理によって隣接する通信装置１００のアサーションエントリの優先度が更新された場合、アサーション制御部１３１は、アサーションエントリの優先度の更新を隣接する通信装置１００に管理Ｉ／Ｆ１１０を介して指示する。
【０３１２】
通信装置１００のトポロジＤＢ１２５は、制御装置２００のトポロジＤＢ２２４と同じ内容である。制御装置２００のコンフィグ制御部２１３が、トポロジＤＢ２２４の内容の複製指示を、管理Ｉ／Ｆ２３０を介して通信装置１００に指示する。
【０３１３】
図２７は、実施例２のアサーションテーブル生成処理のフローチャートである。
【０３１４】
アサーションテーブル生成処理は、隣接する通信装置１００のアサーションテーブル１３２に登録され得る一部のアサーションエントリを生成する処理であり、通信装置１００のアサーション生成部２１１によって実行される。
【０３１５】
まず、アサーション生成部２１１は、生成したアサーションエントリを格納するためのアサーションリスト（変数Ａ）を初期化する（２７０１）。
【０３１６】
次に、アサーション生成部２１１は、自身を有する通信装置Ｕのフローテーブル１２３及びグループテーブル１２４をそれぞれフローテーブルＦ及びグループテーブルＧとして取得する（２７０２）。
【０３１７】
アサーション生成部２１１は、ステップ２７０２の処理で取得したフローテーブルＦから処理対象のフローエントリＥを選択し、ステップ２７０４〜２７０６の処理を実行する（２７０３）。なお、ステップ２７０４〜２７０６の処理は、フローテーブルＦの全てのフローエントリに実行されるまで繰り返される。
【０３１８】
アサーション生成部２１１は、ステップ２７０３の処理で選択したフローエントリＥのＡｃｔｉｏｎに登録された出力ポートＱを抽出する（２７０４）。例えばフローエントリＥのＡｃｔｉｏｎの出力ポートがＮｏｒｍａｌである場合、アサーション生成部２１１は、ＦＤＢを参照して出力ポートＱを特定する。
【０３１９】
次に、アサーション生成部２１１は、出力ポートＱがブロッキングポートであるか否かを判定するブロッキングポート判定処理を実行する（２７０５）。ブロッキング判定処理は、フローエントリＥ及びポートＱの識別子が引数として入力され、図１１と同じであるので、説明を省略する。
【０３２０】
通信装置ＵのフローテーブルＵの全てのフローエントリにステップ２７０４及び２７０５の処理が実行されていなければ、アサーション生成部２１１は、ステップ２７０３の処理に戻り、新たな処理対象のフローエントリＥを選択し、通信装置ＵのフローテーブルＵの全てのフローエントリにステップ２７０４及び２７０５の処理が実行されていれば、アサーション生成部２１１は、ステップ２７０７の処理に進む（２７０６）。
【０３２１】
アサーション生成部２１１は、フローテーブルＦのフローエントリから処理対象のフローエントリＥを選択し、ステップ２７０８〜２７１２の処理を実行する（２７０７）。なお、ステップ２７０８〜２７１２の処理は、フローテーブルＦの全てのフローエントリに実行されるまで繰り返される。
【０３２２】
アサーション生成部２１１は、ステップ２７０４の処理と同じく、ステップ２７０７の処理で選択したフローエントリＥのＡｃｔｉｏｎに登録された出力ポートＱを抽出する（２７０８）。
【０３２３】
次に、アサーション生成部２１１は、トポロジＤＢ１２５のトポロジテーブル２２４Ｂを参照し、出力ポートＱに接続されている通信装置ＸのポートＰの識別子と通信装置Ｘの識別子とを取得する（２７０９）。
【０３２４】
次に、アサーション生成部２１１は、アサーションリストＡ、ポートＰ及びポートＱの識別子、フローエントリＥ並びにグループテーブルＧを引数として、アサーションエントリ生成処理を呼び出し、当該処理を実行する（２７１０）。なお、アサーションエントリ生成処理は、通信装置Ｕに隣接する通信装置Ｘのアサーションテーブル１３２に登録され得るアサーションエントリを生成する処理であり、図１２と同じであるので説明を省略する。また、アサーションエントリ生成処理で生成されたアサーションエントリは、アサーションリストＡの最終エントリに格納される。
【０３２５】
次に、アサーション生成部２１１は、アサーションリストＡの最終エントリに格納されたアサーションエントリ（ステップ３０１１の処理で生成されたアサーションエントリ）を、通信装置Ｘに設定する（２７１１）。具体的には、アサーション生成部２１１は、トポロジＤＢ１２５の通信装置管理テーブル２２４Ａを参照し、通信装置Ｘのアドレスを取得し、管理Ｉ／Ｆ１１０を介して通信装置Ｘに生成したアサーションエントリを送信する。なお、通信装置Ｘは、受信したアサーションエントリをアサーションメモリ１３３に登録する。
【０３２６】
通信装置ＵのフローテーブルＦの全てのフローエントリにステップ２７０８〜２７１１の処理が実行されていなければ、アサーション生成部２１１は、ステップ２７０７の処理に戻り、新たな処理対象のフローエントリＥを選択し、通信装置ＵのフローテーブルＦの全てのフローエントリにステップ２７０８〜２７１１の処理が実行されていれば、アサーション生成部２１１は、ステップ２７１３の処理に進む（２７１２）。
【０３２７】
ステップ２７１３の処理では、アサーション生成部２１１は、アサーションリストＡに登録された全てのアサーションエントリをアサーションＤＢ２２１に登録し（２７１３）、アサーションテーブル生成処理を終了する。
【０３２８】
本実施例のアサーションテーブル生成処理では、ある通信装置１００が、自身のフローテーブルを参照し、隣接する通信装置１００のアサーションエントリを生成したが、ある通信装置１００が、隣接する通信装置１００のフローテーブルを参照し、自身のアサーションエントリを生成してもよい。
【０３２９】
図２８は、実施例２のアサーションエントリ優先度更新処理のフローチャートである。
【０３３０】
アサーションエントリ優先度更新処理は、隣接する通信装置１００のアサーションエントリの優先度を更新する処理であり、アサーション制御部１３１によって実行される。
【０３３１】
アサーション制御部１３１は、アサーション制御部１３１を有する通信装置１００（自装置）のフローテーブル１２３をフローテーブルＦとして取得する（２８０１）。
【０３３２】
次に、アサーション制御部１３１は、ステップ２８０１の処理で取得したフローテーブルＦから処理対象のフローエントリＥを選択し、ステップ２８０３及び２８０４の処理を実行する（２８０２）。なお、ステップ２８０３及び２８０４の処理は、フローテーブルＦの全てのフローエントリに実行されるまで繰り返される。
【０３３３】
アサーション制御部１３１は、アサーションＤＢ２２１を参照し、フローエントリＥに対応するアサーションエントリを取得し、フローエントリＥのＳｔａｔｉｓｔｉｃｓに登録されたパケット数に対応する優先度に更新する（２８０３）。具体的には、アサーション制御部１３１は、アサーションＤＢ２２１のＦｌｏｗ  Ｅｎｔｒｙ６０１に自装置の識別子及びフローエントリＥの識別子が登録されたアサーションエントリを取得する。そして、アサーション制御部１３１は、フローエントリＥのＳｔａｔｉｓｔｉｃｓに登録されたパケット数に対応する優先度を決定し、取得したアサーションエントリのＰｒｉｏｒｉｔｙに決定した優先度を登録する。
【０３３４】
次に、アサーション制御部１３１は、ステップ２８０３の処理で更新されたアサーションエントリの優先度を、当該アサーションエントリが登録され得る通信装置１００に設定する（２８０４）。具体的には、アサーション制御部１３１は、ステップ２８０３の処理で更新されたアサーションＤＢ２２１のアサーションエントリのＴａｒｇｅｔ  Ｆｉｅｌｉｄに登録された通信装置１００の識別子を取得する。そして、アサーション制御部１３１は、トポロジＤＢ１２５の通信装置管理テーブル２２４Ａを参照し、当該通信装置１００のアドレスを取得し、管理Ｉ／Ｆ１１０を介して通信装置１００に優先度が更新されたアサーションエントリを送信する。
【０３３５】
自装置のフローテーブルＦの全てのフローエントリにステップ２８０３及び２８０４の処理が実行されていなければ、アサーション生成部２１１は、ステップ２８０２の処理に戻り、新たな処理対象のフローエントリＥを選択し、自装置のフローテーブルＦの全てのフローエントリにステップ２８０３及び２８０４の処理が実行されていれば、アサーション生成部２１１は、アサーションエントリ優先度更新処理を終了する。
【０３３６】
本実施例のアサーションエントリ優先度更新処理では、ある通信装置１００が、自身のフローテーブルを参照し、隣接する通信装置１００のアサーションエントリの優先度を更新したが、ある通信装置１００が、隣接する通信装置１００のフローテーブルを参照し、自身のアサーションエントリの優先度を更新してもよい。
【０３３７】
本実施例によれば、アサーションテーブルの生成及びアサーションエントリの優先度の更新を通信装置１００が実施するので、制御装置２００の処理負荷を低減できる。特に、制御装置２００が全ての通信装置１００の統計情報を周期的に収集する処理は、処理負荷及びネットワーク負荷が高いので、本実施例のように制御装置２００の処理負荷を通信装置１００に分散することによって、制御装置２００の処理負荷を低減できる。これによって、本実施例は、性能の低い安価な制御装置２００でも実現可能である。また、通信装置１００が自律分散的にアサーションを設定することによって、制御装置２００が集中的にアサーションを設定する場合と比較して、ネットワーク全体のアサーション設定の耐障害性が向上する。
【０３３８】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、及び置換をすることが可能である。
【０３３９】
また、各実施例の構成の一部について、他の構成の追加、削除、及び置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。
【０３４０】
また、前記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【０３４１】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤカード、ＤＶＤ（Digital Versatile Disc）等の記録媒体に置くことができる。
【０３４２】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０３４３】
１００    通信装置
１１０    管理Ｉ／Ｆ
１２０    スイッチ部
１２１    フローテーブル制御部
１２２    トラフィック統計計測部
１２３    フローテーブル
１２４    グループテーブル
１２５    トポロジＤＢ
１３０    アサーション部
１３１    アサーション制御部
１３２    アサーションテーブル
１３３    アサーションメモリ
１３４    パケットバッファ
１４０    ＣＰＵ
１５０    ＴＣＡＭ
１６０    メモリ
１７０    通信Ｉ／Ｆ
２００    制御装置
２１０    ＣＰＵ
２１１    アサーション生成部
２１２    アサーション制御部
２１３    コンフィグ制御部
２１４    障害特定部
２２０    メモリ
２２１    アサーションＤＢ
２２２    アサーション優先度ＤＢ
２２３    コンフィグＤＢ
２２４    トポロジＤＢ
２３０    管理Ｉ／Ｆ
【図１】
2017028539.tif 000003
【図２】
2017028539.tif 000004
【図３】
2017028539.tif 000005
【図４】
2017028539.tif 000006
【図５】
2017028539.tif 000007
【図６】
2017028539.tif 000008
【図７】
2017028539.tif 000009
【図８Ａ】
2017028539.tif 000010
【図８Ｂ】
2017028539.tif 000011
【図９Ａ】
2017028539.tif 000012
【図９Ｂ】
2017028539.tif 000013
【図１０】
2017028539.tif 000014
【図１１】
2017028539.tif 000015
【図１２】
2017028539.tif 000016
【図１３】
2017028539.tif 000017
【図１４】
2017028539.tif 000018
【図１５】
2017028539.tif 000019
【図１６】
2017028539.tif 000020
【図１７】
2017028539.tif 000021
【図１８】
2017028539.tif 000022
【図１９】
2017028539.tif 000023
【図２０】
2017028539.tif 000024
【図２１】
2017028539.tif 000025
【図２２】
2017028539.tif 000026
【図２３】
2017028539.tif 000027
【図２４】
2017028539.tif 000028
【図２５】
2017028539.tif 000029
【図２６】
2017028539.tif 000030
【図２７】
2017028539.tif 000031
【図２８】
2017028539.tif 000032