(57)【要約】【課題】オープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定可能なオープンフロー対応通信システムを提供する。【解決手段】複数のスイッチと、コントローラと、個々のスイッチとコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、スイッチからエラーが送出された際に、スイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々のスイッチの各バージョンネゴシエーションの成否に基づいて、個々のスイッチの対応プロトコルバージョンを識別し、所定バージョンでエラーを返答するスイッチにエラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該スイッチのスイッチＩＤを識別取得するネゴシエーションエラースイッチ特定部と、を具備する。【選択図】図１
2017183997.tif 000002
【特許請求の範囲】
【請求項１】
複数のオープンフロースイッチと、
前記複数のオープンフロースイッチを管理するオープンフローコントローラと、
前記複数のオープンフロースイッチに含まれる個々のオープンフロースイッチと前記オープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに 前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするオープンフロー対応通信システム。
【請求項２】
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、
そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするネゴシエーションエラースイッチ特定装置。
【請求項３】
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチのスイッチＩＤを通知する通信部を更に具備することを特徴とする請求項２に記載のネゴシエーションエラースイッチ特定装置。
【請求項４】
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチのスイッチＩＤと対応プロトコルバージョンとを通知する通信部を更に具備することを特徴とする請求項２又は３に記載のネゴシエーションエラースイッチ特定装置。
【請求項５】
該ネゴシエーションエラースイッチ特定装置は、前記コントローラがアクセス可能な特定記憶領域に、前記ネゴシエーションエラースイッチ特定部を用いて特定した、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を記録することを特徴とする請求項２ないし４の何れか一項に記載のネゴシエーションエラースイッチ特定装置。
【請求項６】
該ネゴシエーションエラースイッチ特定装置は、
前記コントローラから前記所定バージョンのバージョンネゴシエーションに関する前記エラーを取得した際に、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定し、
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を通知する
ことを特徴とする請求項２ないし５の何れか一項に記載のネゴシエーションエラースイッチ特定装置。
【請求項７】
該ネゴシエーションエラースイッチ特定装置は、
前記各々のオープンフロースイッチと前記コントローラとの通信を監視して、前記コントローラへの前記所定バージョンのバージョンネゴシエーションに関する前記エラーを取得し、
前記エラーを検出した際に、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定し、
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を通知する
ことを特徴とする請求項２ないし６の何れか一項に記載のネゴシエーションエラースイッチ特定装置。
【請求項８】
各々のオープンフロースイッチと自装置との間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーを受け付けた際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、
そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするオープンフローコントローラ装置。
【請求項９】
サーバのプロセッサを、
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別するエラー識別手段と、
前記エラー識別手段で前記エラーが識別された際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理するバージョン特定手段と、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するスイッチＩＤ特定手段、
として動作させることを特徴とするバージョンエラースイッチ特定プログラム。
【請求項１０】
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別し、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理し、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ことを特徴とするネゴシエーションエラースイッチ特定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＤＮ（Software-Defined Networking）技術に関して、特に サポートするプロトコルバージョンが異なる複数のオープンフロースイッチを含み構成される通信ネットワークを構築する通信システムに関する。
【背景技術】
【０００２】
近年、オープンフロー（OpenFlow）を採用して通信ネットワークが構築されている。オープンフロー通信ネットワークは、オープンフローコントローラと複数のオープンフロースイッチを含み、転送パケット群をオープンフロースイッチ間のフロー制御（エンドポイント間制御）で管理する。各オープンフロースイッチは、オープンフローコントローラから指定されたフローテーブルの内容に従って転送パケットを中継する。以下の説明では、オープンフロースイッチを単にスイッチ、オープンフローコントローラを単にコントローラと記載して、記載を簡略化することもある。
【０００３】
オープンフローに関する技術事項の幾つかは、ＯＮＦ（Open Networking Foundation）によって標準化されている。この中に、コントローラとスイッチ間の通信規約（OpenFlowプロトコル）もＯＮＦによって標準化されている。この標準化されたOpenFlowプロトコルは、幾つかのバージョンがある。このOpenFlowプロトコルの各バージョンは、互換性を保証していない。
【０００４】
コントローラとオープンフローネットワークを構築するスイッチ群とは、互いの通信に用いるオープンフロープロトコルのバージョンを揃える必要がある。このため多くの場合、ネットワークへのスイッチの接続時にバージョンを合わせるバージョンネゴシエーション処理を行っている。
【０００５】
本発明に関連する文献は、例えば下記の文献が挙げられる。
【０００６】
非特許文献１は、オープンフロープロトコル仕様v1.0.0のドキュメントである。オープンフロープロトコル仕様v1.0.0においてバージョンネゴシエーションは、スイッチとコントローラが接続時に、それぞれが対応するプロトコルバージョンを書き込んだHELLOメッセージをお互いに送信し合い、互いに相手のバージョン番号を識別して実施される。また、非特許文献２から５は、異なるバージョンのオープンフロープロトコル仕様のドキュメントである。
【０００７】
また、特許文献１には、オープンフローを実装可能な通信システムが開示されている。この文献内では、オープンフロー用の通信機器の説明や、オープンフロープロトコルで定義されているメッセージ（例えば、Packet InメッセージやFeatures Requestメッセージ/Features Replyメッセージ）の使用方法例について説明されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２０１４−５０４０４３号公報
【非特許文献】
【０００９】
【非特許文献１】OpenFlow Switch Specification v1.0.0, ONF, December 31 2009, https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.0.0.pdf
【非特許文献２】OpenFlow Switch Specification v1.1.0, ONF, February 28 2011, https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.1.0.pdf
【非特許文献３】OpenFlow Switch Specification v1.2.0, ONF, December 5 2011, https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.2.pdf
【非特許文献４】OpenFlow Switch Specification v1.3.4, ONF, March 27 2014, https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.3.4.pdf
【非特許文献５】OpenFlow Switch Specification v1.4.0, ONF, October 14 2013, https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.4.0.pdf
【発明の概要】
【発明が解決しようとする課題】
【００１０】
公知のオープンフローに対応した通信システム（例えば特許文献１に記載された通信システム）では、非特許文献１等のドキュメントで規定されているように、スイッチとコントローラ間でバージョン情報を送信し合い、バージョンが合致しない場合に各スイッチはエラーメッセージをコントローラに送信する。このことで、バージョンネゴシエーションエラーをコントローラで検知可能にしている。
【００１１】
しかし、この通信システムでは、バージョンネゴシエーションを実施した際に、どのスイッチがバージョンネゴシエーションに失敗したかをコントローラ若しくは管理者が容易に特定できないという問題があった。
【００１２】
以下は、発明者の考察である。 
上記問題の要因は、非特許文献１の標準化された手法によれば、バージョンネゴシエーションに失敗した場合にコントローラへと各々のスイッチから送られるエラーメッセージ内に、失敗したスイッチを特定できる ＩＤ情報が含まれていない。
【００１３】
このため、どのスイッチがバージョンネゴシエーションに失敗したかをコントローラが特定できない。
【００１４】
換言すれば、コントローラを操作する管理者も、バージョンネゴシエーションエラーがどのスイッチに起因しているのか、明確に認識できない。管理者は、各々のスイッチの設定を確認・再設定を繰り返し、問題解決を図る必要が生じるかもしれない。
【００１５】
あるいは、管理者は、コントローラで使用するプロトコルバージョンを全て初期仕様（v1.0.0）に変更することでバージョンネゴシエーションエラーに対応可能かもしれないが、他のプロトコルバージョンにある利点が使用できなくなる。
【００１６】
これらの対応策は、管理者が様々なメッセージを用いてコントローラや各々のスイッチから問題の要因を特定するための様々な情報を工数をかけて収集することで、対策が図れるかもしれない。 
しかし、例えば スイッチ自体は各バージョンに対応しているものの そのスイッチの内部設定で所望バージョンを無効に設定していた場合などに、その設定内容にまで管理者が辿り着くことに非常に労力を要する。 
更に別の例では、オープンフロープロトコルのバージョン切り替えに伴う通信システムの再起動時に、切り替え漏れ／設定誤りが生じたスイッチの特定、そのスイッチと通信可能なオープンフロープロトコルのバージョンの特定に多大な労力を要する。
【００１７】
そこで、発明者は、バージョンを多数有するオープンフロープロトコルの現状を踏まえつつ、バージョンネゴシエーションエラーがどのスイッチのサポートバージョンに起因しているのかを、容易に識別可能にする仕組みを検討した。
【００１８】
本発明の目的は、オープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定するオープンフロー対応通信システムを提供することにある。
【課題を解決するための手段】
【００１９】
本発明の一実施形態に係るオープンフロー対応通信システムは、複数のオープンフロースイッチと、前記複数のオープンフロースイッチを管理するオープンフローコントローラと、前記複数のオープンフロースイッチに含まれる個々のオープンフロースイッチと前記オープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するネゴシエーションエラースイッチ特定部と、を具備することを特徴とする。
【００２０】
また、本発明の一実施形態に係るネゴシエーションエラースイッチ特定装置は、各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するネゴシエーションエラースイッチ特定部と、を具備することを特徴とする。
【００２１】
また、本発明の一実施形態に係るオープンフローコントローラ装置は、各々のオープンフロースイッチと自装置との間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーを受け付けた際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するネゴシエーションエラースイッチ特定部と、を具備することを特徴とする。
【００２２】
また、本発明の一実施形態に係るバージョンエラースイッチ特定プログラムは、サーバのプロセッサを、各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別するエラー識別手段と、前記エラー識別手段で前記エラーが識別された際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理するバージョン特定手段と、前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するスイッチＩＤ特定手段、として動作させることを特徴とする。
【００２３】
また、本発明の一実施形態に係るネゴシエーションエラースイッチ特定方法は、各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別し、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理し、前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得することを特徴とする。
【発明の効果】
【００２４】
本発明によれば、オープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定するオープンフロー対応通信システムを提供できる。
【図面の簡単な説明】
【００２５】
【図１】本発明の第１の実施形態に係るオープンフロー対応通信システム１を示すブロック図である。
【図２】第１の実施形態に係るネゴシエーションエラースイッチ特定部３０を示すブロック図である。
【図３】オープンフロープロトコルのHELLOメッセージ例を可視化した説明図である。
【図４】オープンフロープロトコルのFeatures Replyメッセージ例を可視化した説明図である。
【図５】ネゴシエーションエラースイッチ特定部３０の動作例を示すフローチャートである。
【図６】第３の実施形態に係るコントローラ１２を示すブロック図である。
【図７】一構成例のネゴシエーションエラースイッチ特定装置３００を示すブロック図である。
【発明を実施するための形態】
【００２６】
［第１の実施形態］ 
本発明の第１の実施形態を図面を参照して説明する。 
図１は、一実施形態に係るオープンフロー対応通信システム１を示すブロック図である。
【００２７】
図示するように、オープンフロー対応通信システム１は、オープンフローコントローラ１０とオープンフロースイッチ群２０（２１から２ｎ）とを含み、更にネゴシエーションエラースイッチ特定部３０を含む。以下、オープンフロースイッチを単にスイッチ、オープンフローコントローラを単にコントローラ、オープンフロープロトコルを単にプロトコルと記載することもある。
【００２８】
オープンフローコントローラ１０は、管理下のオープンフロースイッチ群２０（２１から２ｎ）を管理するように構成されている。コントローラ１０は、各バージョンのオープンフロープロトコルに則って、スイッチ群２０（２１から２ｎ）との間で各メッセージを通知しあう。
【００２９】
オープンフロースイッチ群２０に含まれる個々のオープンフロースイッチ（２１から２ｎ）は、他のオープンフロースイッチと連携してオープンフローネットワークを構築する。本実施形態の各スイッチ（２１から２ｎ）は各々、対応可能なオープンフロープロトコルのバージョンに違いがある。各スイッチ（２１から２ｎ）は、必ずしも物理的スイッチである必要はなく、仮想的スイッチで構成してもよく、また混在していてもよい。
【００３０】
コントローラ１０と個々のスイッチ（２１から２ｎ）は、所定バージョンのバージョンネゴシエーションが実施できる。個々のスイッチ（２１から２ｎ）は、コントローラ１０が指定したバージョンのオープンフロープロトコルに対応していれば、そのプロトコルに則って初期化処理を実行する。他方で、個々のスイッチ（２１から２ｎ）は、コントローラ１０が指定したバージョンのプロトコルに対応していなければ、プロトコルに則ってバージョンネゴシエーションエラーを通知する。
【００３１】
ネゴシエーションエラースイッチ特定部３０は、例えば下記のバージョン特定部３１とスイッチＩＤ特定部３２を含み構成できる。図２は、ネゴシエーションエラースイッチ特定部３０の構成例を示すブロック図である。ネゴシエーションエラースイッチ特定部３０の物理的構成は、コントローラ１０とスイッチ群２０と通信できればどのように構築してもよい。例えば、コントローラ１０を構築するサーバにネゴシエーションエラースイッチ特定部３０を構築すればよい。また、コントローラ１０を構築するサーバとは別のサーバにネゴシエーションエラースイッチ特定部３０を構築してもよい。これらの場合、このサーバは、ネゴシエーションエラースイッチ特定装置となる。
【００３２】
バージョン特定部３１は、バージョンネゴシエーションエラーを識別した際に、スイッチ（２１から２ｎ）各々に 確認するプロトコルバージョンの全てについてのバージョンネゴシエーションを行うための所定メッセージを送信する。また、バージョン特定部３１は、その各所定メッセージへの応答を受け付ける。この応答には、各スイッチ（２１から２ｎ）の対応プロトコルバージョン毎にバージョンネゴシエーションの成否が現れる。バージョンネゴシエーションを行うための所定メッセージは、現状ではHELLOメッセージを用いればよい。
【００３３】
次に、バージョン特定部３１は、スイッチ（２１から２ｎ）各々の各バージョンネゴシエーションの成否に基づいて、各スイッチ（２１から２ｎ）の対応プロトコルバージョンを識別処理する。換言すれば、バージョン特定部３１は、プロトコルのバージョン毎にそのバージョンの対応の成否の問い合わせをスイッチ毎に実行して、各スイッチ（２１から２ｎ）からの各応答内容に基づいて対応プロトコルバージョンを自動的に収集する。
【００３４】
スイッチＩＤ特定部３２は、コントローラ１０で指定されている所定バージョンでバージョンエラーを返答するスイッチを識別処理して、その所定バージョン以外の確認したバージョン（対応バージョン）で初期化処理する。この初期化過程で、スイッチＩＤ特定部３２は、スイッチＩＤを該当スイッチに問い合わせる。そして、スイッチＩＤ特定部３２は、該当スイッチからの応答から 各スイッチをネットワーク内でユニークに特定するためのスイッチＩＤを識別取得する。
【００３５】
スイッチＩＤの問い合わせは、スイッチＩＤを少なくとも応答情報に含む所定メッセージをスイッチＩＤ特定部３２から該当スイッチ（識別したバージョンエラーを返答するスイッチ）に送信すればよい。
【００３６】
この一連の処理フローは、例えばHELLOメッセージによるバージョンネゴシエーションの成功の後、ネゴシエーションエラースイッチ特定部３０によって、スイッチＩＤを含む各種情報を取得するためのメッセージであるFeatures Requestメッセージを該当スイッチに送信し、そのスイッチからの応答である Features Replyメッセージに含まれるスイッチＩＤを取得することとすればよい。この例のように、スイッチＩＤを得るための所定メッセージには、現状ではFeatures Requestメッセージを用いればよい。
【００３７】
図４は、Features Replyメッセージの例である。このFeatures Replyメッセージにはスイッチのポート数やバッファ容量といったスペックのほかに、スイッチの一意なＩＤであるdatapath_idが含まれる。この情報をスイッチＩＤとして使えばよい。
【００３８】
このように、スイッチＩＤ特定部３２は、所定バージョンでバージョンネゴシエーションエラーを返答するスイッチに、その所定バージョン以外のバージョンのプロトコルを用いて、スイッチＩＤを得るためのFeatures Request メッセージを送信し、その応答であるFeatures Replyメッセージからdatapath_idを識別して取得すればよい。
【００３９】
上記バージョン特定部３１とスイッチＩＤ特定部３２の一連の処理の後、ネゴシエーションエラースイッチ特定部３０は、特定したスイッチＩＤとこのスイッチの対応プロトコルバージョンをバージョンネゴシエーションエラーに関連付ける。この処理は、ネゴシエーションエラースイッチ特定部３０が実施せずとも、例えば コントローラ１０に 特定したスイッチＩＤと 特定スイッチの対応プロトコルバージョンとを 個別に通知して、コントローラ１０が紐付けを行うこととしてもよい。また、ネゴシエーションエラースイッチ特定部３０内若しくは外部サーバの予め定められた記憶領域に 特定したスイッチＩＤと特定スイッチの対応プロトコルバージョンとを記録して、コントローラ１０若しくは管理者がその情報を読み出せるように構成してもよい。
【００４０】
このシステム構成によって、ネゴシエーションエラースイッチ特定部３０が、エラーを送出したスイッチ（バージョンネゴシエーションに失敗したスイッチ）と対応プロトコルバージョンを識別できる。その結果、オープンフロー対応通信システム１は、オープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定可能になる。このことで、コントローラ若しくは管理者は、バージョンネゴシエーションエラーがどのスイッチのサポートバージョンに起因しているのかを容易に識別でき、不具合の対処が行える。
【００４１】
次に、ネゴシエーションエラースイッチ特定部３０の動作例を示してオープンフロー対応通信システム１の動作を説明する。
【００４２】
図５は、一実施形態に係るネゴシエーションエラースイッチ特定部３０の動作例を示すフローチャートである。
【００４３】
まず、コントローラ１０とスイッチ群２０との間で所定バージョンのバージョンネゴシエーションが実施される。この際、ネゴシエーションエラースイッチ特定部３０は、バージョンネゴシエーションエラーが送出されたか識別する（ステップＳ１）。バージョンネゴシエーションエラーを識別した場合、ネゴシエーションエラースイッチ特定部３０はステップＳ２に進む。このバージョンネゴシエーションエラーは、コントローラ１０から所定バージョンのバージョンネゴシエーションに関するエラーとして受け付けてもよいし、各々のスイッチ（２１〜２ｎ）とコントローラ１０との通信を監視して、コントローラ１０への所定バージョンのバージョンネゴシエーションエラーをキャプチャするように構成してもよい。
【００４４】
次に、ネゴシエーションエラースイッチ特定部３０（バージョン特定部３１）は、確認する既存のプロトコルバージョンすべてについて各スイッチ（２１〜２ｎ）にHELLOメッセージ群を送り、その応答から各スイッチ（２１〜２ｎ）の対応バージョンを特定する（ステップＳ２）。
【００４５】
次に、ネゴシエーションエラースイッチ特定部３０（スイッチＩＤ特定部３２）は、対応バージョンと特定したバージョンのプロトコルに従って該当スイッチを初期化し、そのスイッチのスイッチＩＤを特定する（ステップＳ３）。
【００４６】
次に、本動作例では、ネゴシエーションエラースイッチ特定部３０は、バージョンネゴシエーションがエラーとなったスイッチのスイッチＩＤと対応プロトコルバージョンをコントローラに自動送信する（ステップＳ４）。本動作例ではこの自動送信でスイッチＩＤと対応プロトコルバージョンをコントローラ１０に通知するが、例えばコントローラ１０側からの参照要求や送信要求を受けて、該当スイッチのスイッチＩＤと対応プロトコルバージョンをコントローラ１０に応答するように動作させてもよい。
【００４７】
このように動作させることで、コントローラ１０若しくは管理者は、バージョンネゴシエーションに失敗したスイッチＩＤを特定できる。
【００４８】
別の側面から見れば、対応バージョンが様々な複数のスイッチから構成されるネットワークについて、プロトコルで規定されたメッセージを用いて、バージョンネゴシエーションに失敗したスイッチ及びサポートするバージョンを特定することが可能になる。
【００４９】
また、コントローラ１０若しくは管理者は、スイッチＩＤに加えて、そのスイッチＩＤのスイッチの対応バージョンを特定できる。このため、コントローラ１０若しくは管理者は、バージョンネゴシエーションに失敗したスイッチのバージョン設定を修正したり、あるいはこのネットワークで使用するバージョンを変更することでバージョンネゴシエーションエラーに対処できる。
【００５０】
［第２の実施形態］ 
次に第２の実施形態を説明する。 
第２の実施形態のオープンフロー対応通信システム２は、コントローラ１１がネゴシエーションエラースイッチ特定部３０に、バージョンネゴシエーションに失敗したスイッチのスイッチＩＤと対応バージョンを問い合わせ、加えて応答されたスイッチＩＤと対応バージョンを用いて、ネットワーク構成を修正（調整，復旧）する。
【００５１】
図５のＳ４までの処理動作によって、ネゴシエーションエラースイッチ特定部３０は、バージョンネゴシエーションがエラーとなったスイッチのスイッチＩＤと対応プロトコルバージョンをコントローラ１０に自動送信する。
【００５２】
コントローラ１０は、バージョンネゴシエーションがエラーとなったスイッチでサポートしている対応プロトコルバージョンと 他のスイッチでサポートしている対応プロトコルバージョンとを参照して、プロトコルバージョンの種別を含む構築可能ネットワーク構成を探索（ネットワーク対応プロトコルバージョン導出処理）する。そして、コントローラ１０は、その結果を管理者に提示する。なお、構築可能ネットワーク構成が複数あれば、コントローラ１０は、全てを管理者に提示して選択を受ければよい。また、コントローラ１０は、管理者への提示と共に、自動的にエラーを生じさせない組み合わせのプロトコルバージョンでネットワークを自動的に復旧（ＳＤＮ処理）してしまうこととしてもよい。
【００５３】
このように動作させることで、オープンフロー対応通信システム２は、バージョンネゴシエーションに失敗したスイッチＩＤを用いて該当スイッチ及び対応バージョンを特定でき、ネットワーク構成を修正できる。
【００５４】
［第３の実施形態］ 
次に第３の実施形態を説明する。 
第３の実施形態では、第１のネゴシエーションエラースイッチ特定部３０をコントローラ内に有する態様を説明する。
【００５５】
図６は、第３の実施形態に係るオープンフローコントローラ１２を示すブロック図である。図示するように、コントローラ１２は、コントローラ１２内に、ネゴシエーションエラースイッチ特定部３０が取り込また構成である。
【００５６】
コントローラ１２の動作は、他のコントローラ要素の動作と共に、第１の実施形態のネゴシエーションエラースイッチ特定部３０ 及び 第１又は第２の実施形態のコントローラ１０又は１１ の動作を実行する。
【００５７】
コントローラ１２の構成及び動作を他の表現で説明すれば次のようになる。 
コントローラ１２は、各スイッチと自装置との間で行われる所定バージョンのバージョンネゴシエーションで、スイッチからバージョンネゴシエーションエラーを受け付けた際に、スイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各スイッチの各バージョンネゴシエーションの成否に基づいて、個々のスイッチの対応プロトコルバージョンを識別処理する。 
その後、コントローラ１２は、識別結果からエラーを返答するスイッチを識別して、エラーしたバージョン以外のバージョンでスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答からこのスイッチのスイッチＩＤを識別取得する。
【００５８】
以後の処理動作は第１又は第２の実施形態のコントローラ１０又は１１と同様である。
【００５９】
このように動作させることで、コントローラの機能として、コントローラがオープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定可能になる。
【００６０】
［構成例］ 
次にネゴシエーションエラースイッチ特定装置の一構成例を説明する。 
本説明では、第１の実施形態のネゴシエーションエラースイッチ特定部３０を有するネゴシエーションエラースイッチ特定装置３００（サーバ）を説明する。
【００６１】
図７は、構成例のネゴシエーションエラースイッチ特定装置３００を示すブロック図である。
【００６２】
本ネゴシエーションエラースイッチ特定装置３００は、プロセッサ３１０、通信部３２０、および一時記憶部３３０を含み構成されている。プロセッサ３１０、通信部３２０、および一時記憶部３３０は、必要に応じてマルチ構成を採用してもよい。
【００６３】
ネゴシエーションエラースイッチ特定部３０は、図７に例示するようなコンピュータシステムのハードウェアとソフトウェアの組み合わせを用いて実現できる。
【００６４】
このネゴシエーションエラースイッチ特定装置３００は、一時記憶部３３０にバージョンエラースイッチ特定プログラムが展開され、ネゴシエーションエラースイッチ特定部３０を、バージョンネゴシエーションでスイッチから送出されたバージョンネゴシエーションエラーを識別するエラー識別手段と、バージョン特定手段、及びスイッチＩＤ特定手段として機能させる。この一時記憶部３３０に展開されるプログラムのデータには、プロセッサを１ないし複数の上述した各部として動作させる実行命令群やコード群、テーブルファイル、コンテンツデータなどを適宜含めればよい。また、ネゴシエーションエラースイッチ特定部３０は、通信部３２０と協調してメッセージキャプチャ、メッセージ送受信、コントローラへのネゴシエーションエラー特定情報送受信などを実行可能に構成すればよい。
【００６５】
このようにネゴシエーションエラースイッチ特定部３０は、バージョンエラースイッチ特定プログラムに基づいて１ないし複数のプロセッサ等のハードウェアを実行命令群やコード群で動作させることによって、実現すればよい。この際、必要に応じて、このプログラムは、オペーレティングシステムや、マイクロプログラム、ドライバなどのソフトウェアが提供する機能と協働して、各部を実現することとしてもよい。
【００６６】
以上説明したように、本発明を適用したオープンフロー対応通信システムは、オープンフロープロトコルに基づくバージョンネゴシエーションに失敗したスイッチ及びそのスイッチのサポートバージョンを特定して、事後の対処が図れる。
【００６７】
また、ネゴシエーションエラースイッチ特定部は、必ずしも一つの装置として構築される必要はなく、複数のサーバ／コンピュータ／仮想マシンなどに分散して構築されてもよい。また、ネゴシエーションエラースイッチ特定部の一部／全ての各部をハードウェアやファームウェア（例えば、一ないし複数のLSI：Large-Scale Integration，FPGA：Field Programmable Gate Array，電子素子の組み合わせ）で置換することとしてもよい。同様に、各部の一部のみをハードウェアやファームウェアで置換することとしてもよい。
【００６８】
また、このプログラムは、記録媒体に非一時的に記録されて頒布されても良い。当該記録媒体に記録されたプログラムは、有線、無線、又は記録媒体そのものを介してメモリーに読込まれ、プロセッサ等を動作させる。
【００６９】
尚、本明細書では、記録媒体には、類似するタームの記憶媒体やメモリー装置、ストレージ装置なども含むこととする。この記録媒体を例示すれば、オプティカルディスクや磁気ディスク、半導体メモリー装置、ハードディスク装置、テープメディアなどが挙げられる。また、記録媒体は、不揮発性であることが望ましい。また、記録媒体は、揮発性モジュール（例えばRAM：Random Access Memory）と不揮発性モジュール（例えばROM：Read Only Memory）の組み合わせを用いることとしてもよい。
【００７０】
なお、実施形態及び／又は実施例を例示して本発明を説明した。しかし、本発明の具体的な構成は前述の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の変更があってもこの発明に含まれる。例えば、上述した実施形態及び／又は実施例のブロック構成の分離併合、手順の入れ替えなどの変更は本発明の趣旨および説明される機能を満たせば自由であり、上記説明が本発明を限定するものではない。
【００７１】
また、上記の実施形態の一部又は全部は、以下のようにも記載されうる。尚、以下の付記は本発明をなんら限定するものではない。  
［付記１］
複数のオープンフロースイッチと、
前記複数のオープンフロースイッチを管理するオープンフローコントローラと、
前記複数のオープンフロースイッチに含まれる個々のオープンフロースイッチと前記オープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに 前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするオープンフロー対応通信システム。
【００７２】
［付記２］
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、
そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするネゴシエーションエラースイッチ特定装置。
【００７３】
［付記３］
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチのスイッチＩＤを通知する通信部を更に具備することを特徴とする上記付記記載のネゴシエーションエラースイッチ特定装置。
【００７４】
［付記４］
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチのスイッチＩＤと対応プロトコルバージョンとを通知する通信部を更に具備することを特徴とする上記付記記載のネゴシエーションエラースイッチ特定装置。
【００７５】
［付記５］
該ネゴシエーションエラースイッチ特定装置は、前記コントローラがアクセス可能な特定記憶領域に、前記ネゴシエーションエラースイッチ特定部を用いて特定した、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を記録することを特徴とする上記付記記載のネゴシエーションエラースイッチ特定装置。
【００７６】
［付記６］
該ネゴシエーションエラースイッチ特定装置は、
前記コントローラから前記所定バージョンのバージョンネゴシエーションに関する前記エラーを取得した際に、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定し、
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を通知する
ことを特徴とする上記付記記載のネゴシエーションエラースイッチ特定装置。
【００７７】
［付記７］
該ネゴシエーションエラースイッチ特定装置は、
前記各々のオープンフロースイッチと前記コントローラとの通信を監視して、前記コントローラへの前記所定バージョンのバージョンネゴシエーションに関する前記エラーを取得し、
前記エラーを検出した際に、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定し、
前記コントローラに、前記ネゴシエーションエラースイッチ特定部で識別した前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を通知する
ことを特徴とする上記付記記載のネゴシエーションエラースイッチ特定装置。
【００７８】
［付記８］
各々のオープンフロースイッチと自装置との間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーを受け付けた際に、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信し、
そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理すると共に、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ネゴシエーションエラースイッチ特定部と、
を具備することを特徴とするオープンフローコントローラ装置。
【００７９】
［付記９］
該オープンフローコントローラ装置は、特定記憶領域に、前記ネゴシエーションエラースイッチ特定部を用いて特定した、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を記録することを特徴とする上記付記記載のオープンフローコントローラ装置。
【００８０】
［付記１０］
該オープンフローコントローラ装置は、
前記各々のオープンフロースイッチとの通信を監視して、前記所定バージョンのバージョンネゴシエーションに関する前記エラーを取得し、
前記エラーを検出した際に、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定する
ことを特徴とする上記付記記載のオープンフローコントローラ装置。
【００８１】
［付記１１］
該オープンフローコントローラ装置は、
前記ネゴシエーションエラースイッチ特定部を用いて、前記所定バージョンの前記エラーを送出したオープンフロースイッチの スイッチＩＤ 又は スイッチＩＤ及び対応プロトコルバージョン を特定した後に、
バージョンネゴシエーションがエラーとなったスイッチでサポートしている対応プロトコルバージョンと 他のスイッチでサポートしている対応プロトコルバージョンとを参照して、プロトコルバージョンの種別を含む構築可能ネットワーク構成を探索する
ことを特徴とする上記付記記載のオープンフローコントローラ装置。
【００８２】
［付記１２］
サーバのプロセッサを、
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別するエラー識別手段と、
前記エラー識別手段で前記エラーが識別された際に、前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理するバージョン特定手段と、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得するスイッチＩＤ特定手段、
として動作させることを特徴とするバージョンエラースイッチ特定プログラム。
【００８３】
［付記１３］
各々のオープンフロースイッチとオープンフローコントローラとの間で行われる所定バージョンのバージョンネゴシエーションで、前記オープンフロースイッチからエラーが送出された際に、そのエラーを識別し、
前記オープンフロースイッチ各々に 確認するプロトコルバージョンの全てについての所定メッセージを送信して、そのプロトコルバージョンの異なる各所定メッセージへの応答を受け付けて、各々の前記オープンフロースイッチの各バージョンネゴシエーションの成否に基づいて、個々の前記オープンフロースイッチの対応プロトコルバージョンを識別処理し、
前記エラーの所定バージョンでエラーを返答する前記オープンフロースイッチに前記エラーの所定バージョン以外の確認したバージョンのスイッチＩＤを得るための所定メッセージを送信し、その所定メッセージの応答から該オープンフロースイッチのスイッチＩＤを識別取得する
ことを特徴とするネゴシエーションエラースイッチ特定方法。
【符号の説明】
【００８４】
１        オープンフロー対応通信システム
１０      オープンフローコントローラ
２０      オープンフロースイッチ群
（２１〜２ｎ  オープンフロースイッチ）
３０      ネゴシエーションエラースイッチ特定部
（ネゴシエーションエラースイッチ特定手段）
３１      バージョン特定部（バージョン特定手段）
３２      スイッチＩＤ特定部（スイッチＩＤ特定手段）
３００    ネゴシエーションエラースイッチ特定装置
【図１】
2017183997.tif 000003
【図２】
2017183997.tif 000004
【図３】
2017183997.tif 000005
【図４】
2017183997.tif 000006
【図５】
2017183997.tif 000007
【図６】
2017183997.tif 000008
【図７】
2017183997.tif 000009