パケットを受信し、フローテーブルに登録されたフローエントリに従って前記パケットを転送するスイッチと、前記スイッチからの問い合わせに応じて、前記フローテーブルにフローエントリを登録するコントローラとを含み、前記スイッチは、受信パケットがテストパケットか否かを確認する手段と、前記受信パケットがテストパケットでない場合、前記フローテーブルの既存のフローエントリの中に、前記受信パケットにマッチするフローエントリがあるか否かを確認する手段と、前記受信パケットにマッチするフローエントリがない場合、前記コントローラに問い合わせる手段と、前記コントローラから仮登録されたフローエントリを基に、テストパケットを生成する手段と、前記受信パケットを保留し、前記コントローラから仮登録されたフローエントリに従い、前記テストパケットを転送し、閉路形成を検出するためのテストを開始する手段と、テストの結果、閉路形成を検出した場合、前記コントローラから仮登録されたフローエントリを破棄する手段とを具備する閉路形成未然防止システム。請求項1に記載の閉路形成未然防止システムであって、前記コントローラは、前記スイッチから問い合わせを受けた際、経路を計算する手段と、テストを一意に識別可能なテストIDを生成する手段と、前記スイッチに、経路計算結果に基づくフローエントリを仮登録する手段と前記仮登録されるフローエントリの中に、アクションフィールドとテストIDフィールドとを設ける手段と、前記アクションフィールドに、仮登録である旨の内容のデータを格納する手段と、前記テストIDフィールドに、前記テストIDの値を格納する手段とを具備する閉路形成未然防止システム。請求項2に記載の閉路形成未然防止システムであって、前記スイッチは、テストパケットを生成する際、当該テストパケットに、基本ヘッダ部とテストデータ部とを設ける手段と、前記基本ヘッダ部のサービスタイプフィールド及びプロトコルタイプフィールドに、テストパケットである旨を示す値を格納する手段と、前記基本ヘッダ部の生存時間フィールドに、前記受信パケットに記されていた値を転記する手段と、前記テストデータ部のテストIDフィールドに、前記コントローラから仮登録されたフローエントリに記載されているテストIDを格納する手段と、前記テストデータ部のテスト成否フラグフィールドに、テスト未完のステータスであることを示す値を格納する手段と、前記テストデータ部の通過OFS情報フィールドに、前記スイッチのMACアドレス及びポート番号の値を格納する手段とを更に具備する閉路形成未然防止システム。請求項3に記載の閉路形成未然防止システムであって、前記スイッチは、前記受信パケットがテストパケットである場合、前記テストパケットのテスト成否フラグフィールドの値を参照する手段と、前記テストパケットのテスト成否フラグフィールドに値がセットされていないか、値が0である場合、テスト処理中であると判断し、生存時間フィールドの値が0か否かを確認する手段と、前記テストパケットの生存時間フィールドの値が0であった場合、パケットの生存期限切れであると判断し、テスト失敗と判断する手段と、前記テストパケットの生存時間フィールドの値が0でない場合、前記フローテーブルの既存のフローエントリの中に、前記テストパケットにマッチするフローエントリがあるか否かを確認する手段と、前記テストパケットにマッチするフローエントリがある場合、当該フローエントリのテストIDフィールドに、前記テストパケットのテストIDフィールドに記されている値と同一の値があるか否かを確認する手段と、同一の値があった場合、閉路が形成されたと判断し、テスト失敗と判断する手段と、同一の値がない場合、現段階では閉路は形成されていないと判断し、当該フローエントリの転送先がホストであるか否かを確認する手段と、当該フローエントリの転送先がホストである場合、閉路を形成しておらずルーティングできると判断し、テスト成功と判断する手段と、テスト結果を表す値を、前記テストパケットのテスト成否フラグフィールドに格納する手段と、前記テストパケットの通過OFS情報フィールドの末尾のMACアドレスを参照して、前記テストパケットを1つ前に経由したスイッチに転送し、テストを完了する手段とを更に具備する閉路形成未然防止システム。請求項4に記載の閉路形成未然防止システムであって、前記スイッチは、前記テストパケットにマッチするフローエントリがない場合、前記コントローラに問い合わせる手段と、前記コントローラからフローエントリが仮登録された場合、或いは、前記テストパケットにマッチするフローエントリの転送先がホストでない場合、当該フローエントリのテストIDフィールドに、前記テストパケットのテストIDフィールドに記されている値を記入する手段と、前記テストパケットの通過OFS情報フィールドに、前記スイッチのMACアドレス及びポート番号の値を格納する手段と、前記テストパケットの生存時間フィールドの値を1減算する手段と、当該フローエントリに従い、前記テストパケットを転送し、テストを継続する手段とを更に具備する閉路形成未然防止システム。請求項4又は5に記載の閉路形成未然防止システムであって、前記スイッチは、前記テストパケットのテスト成否フラグフィールドに0以外の値がセットされている場合、前記テストパケットの通過OFS情報フィールドの末尾から、前記スイッチのMACアドレスを削除する手段と、前記フローテーブルに登録されているフローエントリの中から、前記テストパケットのテストIDフィールドに記されている値と同一の値がテストIDフィールドに記されているフローエントリを検索する手段と、検出されたフローエントリのアクションフィールドを参照して、当該フローエントリが仮登録のフローエントリか本登録のフローエントリかを判断する手段と、当該フローエントリが仮登録のフローエントリであった場合、前記テストパケットのテスト成否フラグを参照する手段と、前記テストパケットのテスト成否フラグフィールドにテスト成功を表す値が入っている場合、当該フローエントリを本登録のフローエントリに更新する手段と、前記テストパケットのテスト成否フラグフィールドにテスト失敗を表す値が入っている場合、当該フローエントリを削除する手段と、当該フローエントリが本登録のフローエントリであった場合、テストの成否に関わらず、当該フローエントリのテストIDフィールドから、前記テストパケットのテストIDフィールドに記載されているテストIDの値を削除する手段と、前記テストパケットの通過OFS情報フィールドを参照し、1個以上のMACアドレスがあるか否かを確認する手段と、前記テストパケットの通過OFS情報フィールドに1個以上のMACアドレスがある場合は、前記テストパケットの通過OFS情報フィールドの末尾のMACアドレスを持つスイッチに前記テストパケットを転送し、テストを継続する手段と、前記テストパケットの通過OFS情報フィールドに1個もMACアドレスがない場合、前記テストパケットの生成元のスイッチに戻ってきたと判断し、前記テストパケットのテスト成否フラグフィールドを参照して、テストの成否を確認する手段と、テストが成功していた場合、前記保留していた受信パケットを、本登録のフローエントリに従って転送する手段と、テストが失敗していた場合、前記保留していた受信パケットを破棄し、前記コントローラに対してエラーを返す手段と、前記テストパケットを破棄し、テストを完了する手段とを更に具備する閉路形成未然防止システム。受信パケットがテストパケットか否かを確認する手段と、前記受信パケットがテストパケットでない場合、フローテーブルの既存のフローエントリの中に、前記受信パケットにマッチするフローエントリがあるか否かを確認する手段と、前記受信パケットにマッチするフローエントリがある場合、当該フローエントリに従って、前記受信パケットを転送する手段と、前記受信パケットにマッチするフローエントリがない場合、コントローラに問い合わせる手段と、前記コントローラから仮登録されたフローエントリを基に、テストパケットを生成する手段と、前記受信パケットを保留し、前記コントローラから仮登録されたフローエントリに従い、前記テストパケットを転送し、閉路形成を検出するためのテストを開始する手段と、テストの結果、閉路形成を検出した場合、前記コントローラから仮登録されたフローエントリを破棄する手段とを具備するスイッチ。フローテーブルに登録されたフローエントリに従ってパケットを転送するスイッチから受信パケットについての問い合わせを受けた際、経路を計算する手段と、テストを一意に識別可能なテストIDを生成する手段と、前記スイッチに、経路計算結果に基づくフローエントリを仮登録する手段と前記仮登録されるフローエントリの中に、アクションフィールドとテストIDフィールドとを設ける手段と、前記アクションフィールドに、仮登録である旨の内容のデータを格納する手段と、前記テストIDフィールドに、前記テストIDの値を格納する手段とを具備するコントローラ。スイッチにより実施される閉路形成未然防止方法であって、受信パケットがテストパケットか否かを確認することと、前記受信パケットがテストパケットでない場合、前記フローテーブルの既存のフローエントリの中に、前記受信パケットにマッチするフローエントリがあるか否かを確認することと、前記受信パケットにマッチするフローエントリがある場合、当該フローエントリに従って、前記受信パケットを転送することと、前記受信パケットにマッチするフローエントリがない場合、コントローラに問い合わせることと、前記コントローラから仮登録されたフローエントリを基に、テストパケットを生成することと、前記受信パケットを保留し、前記コントローラから仮登録されたフローエントリに従い、前記テストパケットを転送し、閉路形成を検出するためのテストを開始することと、テストの結果、閉路形成を検出した場合、前記コントローラから仮登録されたフローエントリを破棄することとを含む閉路形成未然防止方法。受信パケットがテストパケットか否かを確認するステップと、前記受信パケットがテストパケットでない場合、フローテーブルの既存のフローエントリの中に、前記受信パケットにマッチするフローエントリがあるか否かを確認するステップと、前記受信パケットにマッチするフローエントリがある場合、当該フローエントリに従って、前記受信パケットを転送するステップと、前記受信パケットにマッチするフローエントリがない場合、前記コントローラに問い合わせるステップと、前記コントローラから仮登録されたフローエントリを基に、テストパケットを生成するステップと、前記受信パケットを保留し、前記コントローラから仮登録されたフローエントリに従い、前記テストパケットを転送し、閉路形成を検出するためのテストを開始するステップと、テストの結果、閉路形成を検出した場合、前記コントローラから仮登録されたフローエントリを破棄するステップとをスイッチに実行させるためのプログラムを格納するための記憶媒体。[本発明の効果]本発明では、テストパケットにより、事前に閉路の形成をチェックし、その結果をフローエントリ登録に反映できる。そのため、OFC等のコントローラ同士が連携することを必要とせず、閉路の形成を未然に防止できる。また、本発明では、閉路形成テスト処理において、OFCやOFSの数に対して線形以上の処理量の増加があるような計算要素がない。そのため、ネットワークの規模が大きくなっても、閉路形成テストが軽量な処理により実行できる。[OFSの内部構成例]図11を参照して、本発明に係る閉路形成未然防止システムにおけるOFSの内部構成例について説明する。OFS1111-j、j=1~yの各々は、テストパケット確認部111と、フローエントリ確認部112と、問い合わせ処理部113と、テストパケット生成部114と、テスト実行部115と、仮登録フローエントリ破棄部116を備える。テストパケット確認部111は、受信パケットがテストパケットか否かを確認する。フローエントリ確認部112は、受信パケットがテストパケットでない場合、フローテーブルの既存のフローエントリの中に、受信パケットにマッチするフローエントリがあるか否かを確認する。問い合わせ処理部113は、受信パケットにマッチするフローエントリがない場合、OFC1212-k、k=1~zに問い合わせる。テストパケット生成部114は、OFC1212-k、k=1~zから仮登録されたフローエントリを基に、テストパケットを生成する。テスト実行部115は、受信パケットを保留し、OFC1212-k、k=1~zから仮登録されたフローエントリに従い、テストパケットを転送し、閉路形成を検出するためのテストを開始する。仮登録フローエントリ破棄部116は、テストの結果、閉路形成を検出した場合、OFC1212-k、k=1~zから仮登録されたフローエントリを破棄する。なお、テストパケット確認部111、フローエントリ確認部112、問い合わせ処理部113、テストパケット生成部114、テスト実行部115、及び仮登録フローエントリ破棄部116は、相互に連携可能であるものとする。[テストパケット生成部の詳細]図12を参照して、テストパケット生成部114の詳細について説明する。テストパケット生成部114は、フィールド設定部1141と、テストパケット判別情報管理部1142と、TTL管理部1143と、テストID管理部1144と、テスト結果情報初期化部1145と、通過OFS情報管理部1146を備える。フィールド設定部1141は、テストパケットを生成する際、当該テストパケットに、基本ヘッダ部とテストデータ部とを設ける。テストパケット判別情報管理部1142は、基本ヘッダ部のサービスタイプフィールド及びプロトコルタイプフィールドに、テストパケットである旨を示す値を格納する。TTL管理部1143は、基本ヘッダ部の生存時間フィールドに、受信パケットに記されていた値を転記する。テストID管理部1144は、テストデータ部のテストIDフィールドに、OFC1212-k、k=1~zから仮登録されたフローエントリに記載されているテストIDを格納する。テスト結果情報初期化部1145は、テストデータ部のテスト成否フラグフィールドに、テスト未完のステータスであることを示す値を格納する。通過OFS情報管理部1146は、テストデータ部の通過OFS情報フィールドに、OFS1111-j、j=1~yのMACアドレス及びポート番号の値を格納する。[テスト実行部の詳細]図13を参照して、テスト実行部115の詳細について説明する。テスト実行部115は、テスト成否フラグ確認部1151と、TTL確認部1152と、テストID確認部1153と、転送先確認部1154と、テスト結果情報管理部1155と、テストパケット転送部1156を備える。テスト成否フラグ確認部1151は、受信パケットがテストパケットである場合、テストパケットのテスト成否フラグフィールドの値を確認し、テストパケットのテスト成否フラグフィールドに値がセットされていないか、又は値が0である場合、テスト処理中であると判断する。TTL確認部1152は、テスト処理中である場合、生存時間フィールドの値が0か否かを確認する。TTL確認部1152は、テストパケットの生存時間フィールドの値が0であった場合、パケットの生存期限切れであると判断し、テスト失敗と判断する。また、TTL確認部1152は、テストパケットの生存時間フィールドの値が0でない場合、図11のフローエントリ確認部112と連携して、フローテーブルの既存のフローエントリの中に、テストパケットにマッチするフローエントリがあるか否かを確認する。テストID確認部1153は、テストパケットにマッチするフローエントリがある場合、当該フローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値と同一の値があるか否かを確認し、同一の値があった場合、閉路が形成されたと判断し、テスト失敗と判断する。転送先確認部1154は、同一の値がない場合、現段階では閉路は形成されていないと判断し、当該フローエントリの転送先がホストであるか否かを確認し、当該フローエントリの転送先がホストである場合、閉路を形成しておらずルーティングできると判断し、テスト成功と判断する。テスト結果情報管理部1155は、テスト結果を表す値を、テストパケットのテスト成否フラグフィールドに格納する。テストパケット転送部1156は、テストパケットの通過OFS情報フィールドの末尾のMACアドレスを参照して、テストパケットを1つ前に経由したOFS1111-j、j=1~yに転送し、テストを完了する。[テストパケット未登録の場合]以下に、テストパケットが未登録の場合における処理について説明する。図11の問い合わせ処理部113は、テストパケットにマッチするフローエントリがない場合、OFC1212-k、k=1~zに問い合わせる。図12のテストID管理部1144は、OFC1212-k、k=1~zからフローエントリが仮登録された場合、或いは、テストパケットにマッチするフローエントリの転送先がホストでない場合、当該フローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値を記入する。図12の通過OFS情報管理部1146は、テストパケットの通過OFS情報フィールドに、OFS1111-j、j=1~yのMACアドレス及びポート番号の値を格納する。図12のTTL管理部1143は、テストパケットの生存時間フィールドの値を1減算する。図13のテストパケット転送部1156は、当該フローエントリに従い、テストパケットを転送し、テストを継続する。[テスト実行済みの場合]以下に、テストが実行済みの場合における処理について説明する。図12の通過OFS情報管理部1146は、テストパケットのテスト成否フラグフィールドに0以外の値がセットされている場合テスト未完了ではない場合、テストパケットの通過OFS情報フィールドの末尾から、OFS1111-j、j=1~yのMACアドレスを削除する。図11のフローエントリ確認部112は、フローテーブルに登録されているフローエントリの中から、テストパケットのテストIDフィールドに記されている値と同一の値がテストIDフィールドに記されているフローエントリを検索する。検出されたフローエントリのアクションフィールドを参照して、当該フローエントリが仮登録のフローエントリか本登録のフローエントリかを判断する。当該フローエントリが仮登録のフローエントリであった場合、図13のテスト成否フラグ確認部1151と連携して、テストパケットのテスト成否フラグを参照する。テストパケットのテスト成否フラグフィールドにテスト成功を表す値が入っている場合、当該フローエントリを本登録のフローエントリに更新する。テストパケットのテスト成否フラグフィールドにテスト失敗を表す値が入っている場合、当該フローエントリを削除する。当該フローエントリが本登録のフローエントリであった場合、図12のテストID管理部1144と連携して、テストの成否に関わらず、当該フローエントリのテストIDフィールドから、テストパケットのテストIDフィールドに記載されているテストIDの値を削除する。図13のテストパケット転送部1156は、テストパケットの通過OFS情報フィールドを参照し、1個以上のMACアドレスがあるか否かを確認する。テストパケットの通過OFS情報フィールドに1個以上のMACアドレスがある場合は、テストパケットの通過OFS情報フィールドの末尾のMACアドレスを持つOFS1111-j、j=1~yにテストパケットを転送し、テストを継続する。テストパケットの通過OFS情報フィールドに1個もMACアドレスがない場合、テストパケットの生成元のOFS1111-j、j=1~yに戻ってきたと判断し、テスト結果情報管理部1155と連携して、テストパケットの生成元のOFS1111-j、j=1~yに戻ってきた場合、テストパケットのテスト成否フラグフィールドを参照して、テストの成否を確認する。テストが成功していた場合、保留していた受信パケットを、本登録のフローエントリに従って転送する。テストが失敗していた場合、保留していた受信パケットを破棄し、OFC1212-k、k=1~zに対してエラーを返す。その後、テストパケットを破棄し、テストを完了する。[OFCの内部構成例]図14を参照して、本発明に係る閉路形成未然防止システムにおけるOFCの内部構成例について説明する。OFC1212-k、k=1~zの各々は、経路計算部121と、テストID生成部122と、フローエントリ仮登録部123を備える。経路計算部121は、OFS1111-j、j=1~yから問い合わせを受けた際、経路を計算する。テストID生成部122は、テストを一意に識別可能なテストIDを生成する。フローエントリ仮登録部123は、OFS1111-j、j=1~yに、経路計算結果に基づくフローエントリを仮登録する。このとき、フローエントリ仮登録部123は、仮登録されるフローエントリの中に、アクションフィールドとテストIDフィールドとを設ける。アクションフィールドには、仮登録である旨の内容のデータを格納する。テストIDフィールドには、テストIDの値を格納する。[ハードウェアの例示]ホスト1010-i、i=1~x及びOFC1212-k、k=1~zの例として、PCパソコン、アプライアンスappliance、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。他にも、ホスト1010-i、i=1~xの例として、携帯電話機、スマートフォン、スマートブック、カーナビカーナビゲーションシステム、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット電子機器、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電informationhomeappliance、POSPointofSale端末、OAOfficeAutomation機器、店頭端末高機能コピー機、デジタルサイネージDigitalSignage:電子看板等も考えられる。ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、車両や船舶、航空機等の移動体に搭載されていても良い。なお、ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシンVM:VirtualMachineでも良い。OFS1111-j、j=1~yの例として、ネットワークスイッチnetworkswitchを想定している。ネットワークスイッチの例として、L3スイッチlayer3switch、L4スイッチlayer4switch、L7スイッチ/アプリケーションスイッチlayer7switch、或いは、マルチレイヤスイッチmulti-layerswitch等が考えられる。その他、OFS1111-j、j=1~yの例として、ルータrouter、プロキシproxy、ゲートウェイgateway、ファイアウォールfirewall、ロードバランサloadbalancer:負荷分散装置、帯域制御装置/セキュリティ監視制御装置gatekeeper、基地局basestation、アクセスポイントAP:AccessPoint、通信衛星CS:CommunicationSatellite、或いは、複数の通信ポートを有する計算機等も考えられる。図示しないが、上記のようなホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~zは、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。上記のプロセッサの例として、CPUCentralProcessingUnit、ネットワークプロセッサNP:NetworkProcessor、マイクロプロセッサmicroprocessor、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路IC:IntegratedCircuit等が考えられる。上記のメモリの例として、RAMRandomAccessMemory、ROMReadOnlyMemory、EEPROMElectricallyErasableandProgrammableReadOnlyMemoryやフラッシュメモリ等の半導体記憶装置、HDDHardDiskDriveやSSDSolidStateDrive等の補助記憶装置、又は、DVDDigitalVersatileDisk等のリムーバブルディスクや、SDメモリカードSecureDigitalmemorycard等の記憶媒体メディア等が考えられる。また、バッファbufferやレジスタregisterでも良い。或いは、DASDirectAttachedStorage、FC-SANFibreChannel-StorageAreaNetwork、NASNetworkAttachedStorage、IP-SANIP-StorageAreaNetwork等を用いたストレージ装置でも良い。なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の1チップ化が進んでいる。従って、電子機器等に搭載される1チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例が考えられる。上記のインターフェースの例として、ネットワーク通信に対応した基板マザーボード、I/Oボードやチップ等の半導体集積回路、NICNetworkInterfaceCard等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口コネクタ等の通信ポート等が考えられる。また、ネットワークの例として、インターネット、LANLocalAreaNetwork、無線LANWirelessLAN、WANWideAreaNetwork、バックボーンBackbone、ケーブルテレビCATV回線、固定電話網、携帯電話網、WiMAXIEEE802.16a、3G3rdGeneration、専用線leaseline、IrDAInfraredDataAssociation、Bluetooth登録商標、シリアル通信回線、データバス等が考えられる。なお、ホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~zは、物理マシン上に構築された仮想マシンVirtualMachineVMでも良い。また、ホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~z内の各部内部構成は、モジュールmodule、コンポーネントcomponent、或いは専用デバイス、又はこれらの起動呼出プログラムでも良い。但し、実際には、これらの例に限定されない。<まとめ>以上のように、本発明では、オープンフローOpenFlowネットワークにおける閉路形成を未然に防止する。具体的には、本発明は、1個のOFCが複数のOFSを管理するネットワークが複数あり、それらの組み合わせにより大きなネットワークが形成されているオープンフローネットワークシステムにおいて、複数あるOFC等のコントローラ同士が相互に連携する構成要素や処理手順を必要とせず、閉路を形成するようなフローエントリの登録を未然に防止する。本発明では、OFCで導出したフローエントリをOFSに登録するに先立って、閉路が形成されることがないか評価する。また、本発明では、経路評価を仮登録のフローエントリ及びテストパケットを用いて実施する。また、本発明では、経路評価に際して、テストパケットの挙動のモニタリングする構成要素や処理手順、又は結果を収集して分析する構成要素や処理手順を必要とせず、テストパケットとOFS群の相互作用だけにより、テストの開始からテスト結果の判定、テスト結果の反映に至るまで、自律的に実施できる。本発明は、OFCのソフトウェアの更新、及び、OFSのファームウェアの更新のみで実現できる。本発明は、オープンフローネットワークシステムにおける閉路形成のテストに利用できる。以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。なお、本出願は、日本出願番号2010-257781に基づく優先権を主張するものであり、日本出願番号2010-257781における開示内容は引用により本出願に組み込まれる。以下に、本発明の実施形態について添付図面を参照して説明する。本発明は、図1に示すようなオープンフローネットワークシステムを対象としている。図1に示されたオープンフローネットワークシステムでは、1個のOFCが複数のOFSを管理する小規模ネットワークが複数あり、それらの組み合わせにより、大規模ネットワークが形成されている。当該オープンフローネットワークシステムは、ホスト1010-i、i=1~x:xは総台数と、OFS1111-j、j=1~y:yは総台数と、OFC1212-k、k=1~z:zは総台数を含む。小規模ネットワークでは、1個のOFC12が複数のOFS11を管理している。小規模ネットワークの各々は、最上位のOFS11を介して、他の小規模ネットワークと接続し、大規模ネットワークを形成する。[本発明におけるフローエントリの形式]図7は、本発明で用いるフローエントリの形式である。本発明におけるフローエントリは、図2のフローエントリを拡張し、テストIDフィールドを追加したものである。図7に示すように、本発明におけるフローエントリは、大きく、ルールフィールド、アクションフィールド、統計情報フィールド、テストIDフィールドの4つのフィールドを有する。ルールフィールドには、パケット種別、パケット送信元ホストアドレス、パケット送信先ホストアドレス等のルールマッチ条件が記される。パケット種別のフィールドには、IPv4InternetProtocolversion4やIPv6InternetProtocolversion6等の情報が記される。アクションフィールドには、破棄やOFS12-nnは任意に転送等、ルールに合致するパケットを受け取った際にどのように処理するかを示すアクション処理内容が記される。統計情報フィールドには、処理したパケットの累計数等の統計情報が記される。テストIDフィールドには、テストを一意に判別可能なテストIDが記される。[本発明におけるテストパケットの形式]図8は、本発明で用いるテストパケットの形式である。ここでは、テストパケットがIPv4に準拠する場合を例に説明する。テストパケットは、基本ヘッダ部と、テストデータ部を有する。テストパケットは、基本ヘッダ部に、サービスタイプTOS:TypeOfServiceフィールドと、プロトコルProtocolフィールドを含む。サービスタイプフィールドは、パケットが転送される際に重視するサービスを一意に判別可能なサービス種別を格納できるサイズを持つものとする。プロトコルフィールドは、上位プロトコルを一意に判別可能なプロトコル番号を格納できるサイズを持つものとする。サービスタイプフィールド及びプロトコルフィールドは、それぞれのフィールドの値の組み合わせにより、本発明に係る閉路検出用テストパケットであることを表す。すなわち、サービスタイプフィールド及びプロトコルフィールドは、本発明に係る閉路検出用テストパケットであるか否かの判別に用いられる。また、テストパケットは、テストデータ部に、テストIDフィールドと、テスト成否フラグフィールドと、通過OFS情報フィールドを含む。テストIDフィールドは、テストを一意に判別可能なテストIDを格納できるサイズを持つものとする。例えば、OFCは、当該OFCのMACアドレス及び時刻等からユニークuniqueなテストIDを生成する。テスト成否フラグフィールドは、テスト未完了を表す0、テストが成功して完了したことを表す1、テストが失敗して完了したことを表す2、パケットの生存期限有効期限切れによりルーティングが完了しなかったことを表す3の4つの状態を表現できるサイズ例えば、2bitを持つものとする。通過OFS情報フィールドは、MACアドレス及びポート番号を複数格納できるサイズを持つものとする。MACアドレス及びポート番号は、OFS1台分のアドレス情報である。すなわち、OFS1台につき、MACアドレス及びポート番号の組を1つ持つ。この通過OFS情報フィールドには、テストパケットがテスト中に経由したOFSのMACアドレスを順に格納するものとする。なお、この通過OFS情報フィールドは、基本ヘッダ部にある生存時間TTL:TimeToLiveフィールドの値で示される数だけアドレス情報を格納できる。すなわち、この通過OFS情報フィールドにおけるアドレス情報のエントリ数の上限は、生存時間フィールドの値で示される。[動作の説明]次に、図9を参照して、Aテストの実施例、B成否判断の実施例、C結果反映の実施例の順に説明する。[Aテストの実施例]図9に示すオープンフローネットワークシステムは、ホスト4040-i、i=1~xと、OFS4141-j、j=1~yと、OFC4242-k、k=1~zを含む。ここで、ホスト4040-i、i=1~xは、図1のホスト1010-i、i=1~xに相当する。OFS4141-j、j=1~yは、図1のOFS1111-j、j=1~yに相当する。OFC4242-k、k=1~zは、図1のOFC1111-k、k=1~zに相当する。ホスト4040-i、i=1~x、OFS4141-j、j=1~y、及びOFC4242-k、k=1~zは、ネットワーク400400-l、l=1~wに属する。ホスト40-1、OFS41-1、及びOFS41-2は、ネットワーク400-1に属し、OFC42-1は、OFS41-1、OFS41-2を管理しているものとする。同様に、OFS41-3は、ネットワーク400-2に属し、OFC42-2は、OFS41-3を管理しているものとする。同様に、ホスト40-2、OFS41-4、及びOFS41-5は、ネットワーク400-3に属し、OFC42-3は、OFS41-4及びOFS41-5を管理しているものとする。1ステップA01ホスト40-1は、ホスト40-2宛のパケットをOFS41-1に送信する。OFS41-1は、パケットを受け取った際、フローテーブルに登録されたフローエントリの中に、パケットに記された転送先アドレス転送元アドレスの値がマッチするフローエントリがあるかないかを判断する。2ステップA02OFS41-1は、既存のフローエントリには、パケットに記された転送先アドレス転送元アドレスの値がマッチするフローエントリが無いので、OFC42-1に問い合わせる。OFC42-1は、ネットワーク400-2及びネットワーク400-3において、どのようなフローエントリが設定されているかを検知する構成要素や処理手順を持たない。OFC42-1は、経路計算ルーチンに従い、経路を計算する。OFC42-1は、その計算結果をフローエントリとしてOFS41-1に登録する際、このフローエントリを仮登録のフローエントリとする。OFC42-1は、仮登録であることが判別可能となるように、仮登録のフローエントリのアクションフィールドに、例えば、TESTFORWARDといった仮登録である旨を示す内容のデータを記すものとする。また、OFC42-1は、当該OFC42-1のMACアドレス及び時刻等からユニークなテストIDを生成し、テストIDフィールドにテストIDを格納する。3ステップA03OFS41-1では、元々ホスト40-1から受け取ったパケットを一時保持する。また、OFS41-1は、図8に示す形式に準じたテストパケットを生成する。OFS41-1は、テストパケットを生成する際、基本ヘッダ部のサービスタイプフィールド及びプロトコルフィールドに、本閉路形成テストに用いるパケットテストパケットであることを判別可能な値を格納する。また、OFS41-1は、基本ヘッダ部の生存時間フィールドに、元々受け取ったパケットに記されていた値を転記する。また、OFS41-1は、テストデータ部のテストIDフィールドに、OFC42-1により生成されたテストIDすなわち、仮登録されたフローエントリに記載されているテストIDを格納するものとする。また、OFS41-1は、テストデータ部のテスト成否フラグフィールドに、テスト未完のステータスであることを示す値例えば、0を格納する。また、OFS41-1は、テストデータ部の通過OFS情報フィールドに、OFS41-1のMACアドレス及びポート番号の値を格納する。4ステップA04OFS41-1は、上記のようにして生成されたテストパケットを、仮登録されたフローエントリに従って、OFS41-2宛に転送する。5ステップA05OFS41-2は、到着したパケットのサービスタイプとプロトコルタイプの値をチェックすることで、テストパケットが到着したことを検知する。OFS41-2は、テストパケットのテストデータ部の通過OFS情報フィールドに、OFS41-2のMACアドレス及びポート番号の値を追加する。OFS41-2は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがあるかないかを判断する。ここでは、OFS41-2は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがあるので、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値テストIDが記されていないかをチェックする。OFS41-2は、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されていない場合、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドに記されている値テストIDを記入する。OFS41-2は、既に、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されている場合、閉路が形成されたことになるため、この時点でテスト失敗としてテストを完了する。ここでは、テスト失敗ではないものとして、テストを継続する。6ステップA06OFS41-2は、テストパケットを、マッチした既存のフローエントリに従って、OFS41-3宛に転送する。7ステップA07OFS41-3は、到着したパケットのサービスタイプとプロトコルタイプの値をチェックすることで、テストパケットが到着したことを検知する。OFS41-3は、テストパケットの通過OFS情報フィールドに、OFS41-3のMACアドレス及びポート番号の値を追加する。OFS41-3は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがあるかないかを判断する。8ステップA08OFS41-3は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがないので、OFC42-2に仮登録のフローエントリ設定を依頼する。OFC42-2は、具備する経路計算ルーチンにより経路の計算を行う。OFC42-2は、その計算結果をフローエントリとしてOFS41-3に登録する際、このフローエントリを仮登録のフローエントリとする。また、OFC42-2は、ステップA03と同様に、仮登録であることが判別可能となるように、仮登録のフローエントリのアクションフィールドに、例えば、TESTFORWARDといった内容のデータを記すものとする。9ステップA09OFS41-3は、仮登録のフローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドに記されている値を格納する。10ステップA10OFS41-3は、テストパケットを、仮登録されたフローエントリに従って、OFS41-4宛に転送する。11ステップA11OFS41-4は、到着したパケットのサービスタイプとプロトコルタイプの値をチェックすることで、テストパケットが到着したことを検知する。OFS41-4は、テストテストパケットの通過OFS情報フィールドに、OFS41-4のMACアドレス及びポート番号の値を追加する。OFS41-4は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがあるかないかを判断する。ここでは、OFS41-4は、マッチするフローエントリがあるので、ステップA05と同様に、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されていないかをチェックする。OFS41-4は、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されていない場合、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドに記されている値を記入する。OFS41-4は、既に、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されている場合、閉路が形成されたことになるため、この時点でテスト失敗としてテストを完了する。ここでは、テスト失敗ではないものとして、テストを継続する。12ステップA12OFS41-4は、テストパケットを、マッチした既存のフローエントリに従って、OFS41-5宛に転送する。13ステップA13OFS41-5は、到着したパケットのサービスタイプとプロトコルタイプの値をチェックすることで、テストパケットが到着したことを検知する。OFS41-5は、テストテストパケットの通過OFS情報フィールドにOFS41-4のMACアドレス及びポート番号の値を追加する。OFS41-5は、自身のフローテーブルの既存のフローエントリの中に、テストパケットの転送先アドレス転送元アドレスの値がマッチするフローエントリがあるかないかを判断する。ここでは、OFS41-5は、マッチするフローエントリがあるので、ステップA05、ステップA11と同様に、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されていないかをチェックする。OFS41-5は、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されていない場合、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドに記されている値を記入する。OFS41-5は、既に、当該フローエントリのテストIDフィールドに、当該テストパケットのテストIDフィールドと同一の値が記されている場合、閉路が形成されたことになるため、この時点でテスト失敗としてテストを完了する。ここでは、テスト失敗ではないものとして、テストを継続する。14ステップA14OFS41-5は、テストパケットを、マッチした既存のフローエントリに従って、ホスト40-2に転送する。[B成否判断の実施例]AのステップA01からステップA14は、閉路が生成されなかった事例ケースの実施例である。ステップA13、ステップA14において、OFSは、送信元ホストと異なるホストに転送可能であることが判断できるため、この時点でテスト成功とし、テストパケットのテスト成否フラグフィールドに、テストが成功して完了したことを示す値1を格納するものとする。一方、テストが失敗する事例ケースでは、自身のフローテーブルの既存のフローエントリの中に、テストパケットとマッチするフローエントリがあり、当該フローエントリのテストIDフィールドとテストパケットのテストIDフィールドとに、同一の値テストIDが記されている場合は、既に一度通った経路に再び入ったこととなり、閉路が形成されてしまったことになる。したがって、この場合、OFSは、テストパケットのテスト成否フラグフィールドに、テストが失敗して完了したことを示す値2を格納するものとする。また、図9では示されていないが、テストパケットの転送において生存時間TTLフィールドの値が0となった場合は、パケットの生存期限有効期限が切れたことになるため、生存期限有効期限切れで失敗したことを示す値例えば、3を格納するものとする。本事例については、後述するOFSの処理ルーチン図10A参照において別途説明する。[C結果反映の実施例]上記のABの実施例のように、テストパケットを転送し続けることにより、いずれかのOFSにおいて、テストが成功/失敗して完了する。OFSは、テスト結果を反映させるために、テスト結果の値をテスト成否フラグフィールドに詰めた後、テストパケットとフローエントリのクリーンナップcleanup処理を行う。[テストパケットのクリーンナップ処理]OFSは、クリーンナップ処理の対象がテストパケットの場合、当該テストパケットのテストデータ部の通過OFS情報フィールドの末尾に、自身のMACアドレスが記載されているので、このMACアドレスを削除する。[本登録のフローエントリのクリーンナップ処理]OFSは、クリーンナップ処理の対象が本登録のフローエントリの場合、テストの成否に関わらず、当該フローエントリのテストIDフィールドから、自身に該当するテストIDを削除し、テスト中に付与したデータを削除する。[仮登録のフローエントリのクリーンナップ処理]OFSは、クリーンナップ処理の対象が仮登録のフローエントリの場合、テストの成否に応じてクリーンナップ処理を行う。例えば、OFSは、テスト失敗の場合、仮登録のフローエントリ自体を削除する。また、OFSは、テスト成功の場合、仮登録のフローエントリのアクションフィールドを書き換えて、仮登録のフローエントリから本登録のフローエントリに更新する。OFSは、上記のようにして、テスト結果を、テストパケットとフローエントリに反映する。以上のクリーンナップ処理が完了すると、OFSは、テストパケットのテストデータ部の通過OFS情報フィールドの末尾に記載されているMACアドレスを基に、当該MACアドレスを持つOFSに当該テストパケットを転送する。転送先のOFSも、クリーンナップ処理を行う。これを繰り返すことにより、最終的にテストパケットにMACアドレスが1個も記載されていない状態となる。このとき、テストパケットは、生成元のOFSに戻ってきたことになる。ここで、OFSは、テスト成功の場合には、当該OFSでペンディングpending:未解決、保留としていたパケットを、上記のABCのようにして本登録したフローエントリに従って転送する。また、OFSは、テスト失敗の場合には、ペンディングとしていたパケットを破棄して経路計算を実施したOFCにエラーを返す。上記ABCの実施例は、図7で示されるフローエントリと、図8で示されるテストパケットと、図10A~図10Cで示されるOFSの処理ルーチンにより実現可能となる。OFSの処理ルーチンは、ファームウェアFW:Firmwareとして実装される。[OFSの処理ルーチン]図10A、図10B、及び図10Cを用いて、OFSの処理ルーチンについて説明する。1ステップB01OFSは、パケットを受け取ったとき、パケットのヘッダ部のサービスタイプ、プロトコルを参照することにより、テストパケットか否かを確認チェックする。2ステップB02OFSは、受け取ったパケットがテストパケットでない場合、パケットのヘッダ部の送信元アドレス、宛て先アドレスを基に、自身のフローテーブルの既存のフローエントリの中に、マッチするフローエントリがあるかないかを判断する。3ステップB03OFSは、マッチするフローエントリがある場合は、そのエントリに従って転送等の処理をする。4ステップB04OFSは、マッチするフローエントリがない場合は、OFCに経路を問い合わせる。OFCは、経路を計算し、テストIDを生成する。5ステップB05OFCは、計算結果を基に、OFSにフローエントリを仮登録する。OFCは、当該フローエントリのアクションフィールドに、仮登録による転送である旨を記す。また、OFCは、当該フローエントリのテストIDフィールドに、生成したテストIDを記す。6ステップB06OFSは、テストパケットを生成する。テストパケットの生成については、ステップA03で説明した通りである。7ステップB07OFSは、元々受け取ったパケットを、ペンディング扱いとして保持しておき、ステップB06で生成したテストパケットを、ステップB05で仮登録したフローエントリに従って転送する。これにより、テストが開始したことになる。8ステップB08また、OFSは、ステップB01において、受け取ったパケットがテストパケットである場合は、テスト処理中、或いは、テスト結果の反映処理中であるか、テスト成否フラグの値を参照して判断する。9ステップB09OFSは、ステップB08において、テスト成否フラグフィールドに値がセットされていない或いは、値が0である場合は、テスト処理中であると判断し、生存時間フィールドの値が0か否かを確認する。10ステップB10OFSは、ステップB09において、生存時間フィールドの値が0であった場合は、パケットの生存期限有効期限切れであると判断する。11ステップB11OFSは、ステップB09において、生存時間フィールドの値が0でない場合は、パケットのヘッダ部の送信元アドレス、宛て先アドレスを基に、自身のフローテーブルの既存のフローエントリの中に、マッチするフローエントリがあるかないかを判断する。12ステップB12OFSは、ステップB11において、マッチするフローエントリがある場合、当該フローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値と同一の値があるか否かを確認する。13ステップB13OFSは、ステップB12において、同一の値があった場合は、閉路を検出したことになるため、テスト失敗と判断する。14ステップB14OFSは、ステップB12において、同一の値が無い場合は、現段階では閉路は形成されていないと判断し、当該フローエントリの転送先がホストであるか否かを確認する。15ステップB15OFSは、ステップB14において、当該フローエントリの転送先がホストである場合、閉路を形成しておらず、ルーティングできることを検出したことになるため、テスト成功と判断する。16ステップB16OFSは、テスト結果を表す値を、テストパケットのテスト成否フラグフィールドに格納する。ここでは、OFSは、ステップB10を経由した場合は、生存期限有効期限切れで失敗したことを表す3を、テストパケットのテスト成否フラグフィールドに格納する。また、OFSは、ステップB13を経由した場合は、閉路が形成されて失敗したことを表す2を、テストパケットのテスト成否フラグフィールドに格納する。また、OFSは、ステップB15を経由した場合は、成功を表す1を、テストパケットのテスト成否フラグフィールドに格納する。17ステップB17OFSは、テストパケットのテストデータ部の通過OFS情報フィールドの末尾のMACアドレスを参照して、テストパケットを1つ前に経由したOFSに転送し、この時点でテストを完了する。18ステップB18OFSは、ステップB11において、マッチするフローエントリがない場合は、OFCに経路を問い合わせる。OFCは、経路を計算する。19ステップB19OFCは、計算結果を基に、OFSにフローエントリを仮登録する。OFCは、当該フローエントリのアクションフィールドに、仮登録による転送である旨を記す。20ステップB20OFSは、フローエントリにテストIDを格納する。このとき、既に別のフローエントリが格納されている場合は、別のテストを実行中ということである。通常、テストは短い時間で完了するため、当該テストが完了するのを待ち、既存のテストIDがクリーンナップ処理により削除されてから、当該テストパケットのテストIDを格納する。ここでは、OFSは、ステップB14を経由した場合は、マッチしたフローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値を記す。また、OFSは、ステップB19を経由した場合は、仮登録されたフローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値を記す。21ステップB21OFSは、テストパケットの通過OFS情報フィールドに、自OFSのMACアドレス及びポート番号を記載し、テストパケットの生存時間フィールドの値を1減算し、エントリに従って転送する。22ステップB22また、ステップB08において、テスト成否フラグフィールドに、テスト成功を表す値、或いは、テスト失敗を表す値がセットされていた場合0以外の値がセットされている場合は、テスト結果の反映処理中であるということである。OFSにおいて、テストパケットのテストデータ部の通過OFS情報フィールドの末尾のMACアドレスを見ると、当該OFSのMACアドレスが記載されているはずである。OFSは、テストパケットのテストデータ部の通過OFS情報フィールドの末尾から、自身のMACアドレスを削除する。23ステップB23OFSは、自身のフローテーブルに登録されているフローエントリの中から、テストパケットのテストIDフィールドに記されている値と同一の値がテストIDフィールドに記されているフローエントリを探す。24ステップB24OFSは、見つかったフローエントリのアクションフィールドを参照して、当該フローエントリが仮登録のフローエントリか本登録のフローエントリかを判断する。25ステップB25OFSは、ステップB24の結果、当該フローエントリが仮登録のフローエントリであった場合、テストパケットのテスト成否フラグを参照する。26ステップB26OFSは、ステップB25の結果、テスト成否フラグフィールドにテスト成功を表す値が入っていれば、仮登録のフローエントリを本登録のフローエントリに更新する。すなわち、OFSは、当該フローエントリのアクションフィールドに記された仮登録である旨を示す内容のデータを、本登録である旨を示す内容のデータに更新する。例えば、OFSは、当該フローエントリのアクションフィールドから、仮登録である旨を示す内容のデータを削除するようにしても良い。27ステップB27OFSは、ステップB25の結果、テスト成否フラグフィールドにテスト失敗を表す値が入っていれば、当該フローエントリを削除する。28ステップB28OFSは、ステップB24の結果、当該フローエントリが本登録のフローエントリであった場合、テストの成否に関わらず、当該フローエントリのテストIDフィールドから、テストパケットのテストIDフィールドに記載されているテストIDの値を削除する。29ステップB29OFSは、テストパケットのテストデータ部の通過OFS情報フィールドを参照し、1個以上のMACアドレスがあるか否かを確認する。30ステップB30OFSは、ステップB29において、1個以上のMACアドレスがある場合は、通過OFS情報フィールドの末尾のMACアドレスを持つOFSにテストパケットを転送する。31ステップB31ステップB29において、1個もMACアドレスがない場合は、テストパケット生成元のOFSに戻ってきたということである。OFSは、テストパケットのテスト成否フラグフィールドを参照して、テストの成否を確認する。32ステップB32OFSは、ステップB31において、テストが成功していた場合、ステップB07においてペンディングとしていたパケットを、フローエントリに従って転送する。また、OFSは、テストパケットを破棄する。33ステップB33OFSは、ステップB31において、テストが失敗していた場合、ステップB07においてペンディングとしていたパケットを破棄し、OFCに対してエラーを返す。また、OFSは、テストパケットを破棄する。[本発明の効果]本発明では、テストパケットにより、事前に閉路の形成をチェックし、その結果をフローエントリ登録に反映できる。そのため、OFC等のコントローラ同士が連携することを必要とせず、閉路の形成を未然に防止できる。また、本発明では、閉路形成テスト処理において、OFCやOFSの数に対して線形以上の処理量の増加があるような計算要素がない。そのため、ネットワークの規模が大きくなっても、閉路形成テストが軽量な処理により実行できる。[OFSの内部構成例]図11を参照して、本発明に係る閉路形成未然防止システムにおけるOFSの内部構成例について説明する。OFS1111-j、j=1~yの各々は、テストパケット確認部111と、フローエントリ確認部112と、問い合わせ処理部113と、テストパケット生成部114と、テスト実行部115と、仮登録フローエントリ破棄部116を備える。テストパケット確認部111は、受信パケットがテストパケットか否かを確認する。フローエントリ確認部112は、受信パケットがテストパケットでない場合、フローテーブルの既存のフローエントリの中に、受信パケットにマッチするフローエントリがあるか否かを確認する。問い合わせ処理部113は、受信パケットにマッチするフローエントリがない場合、OFC1212-k、k=1~zに問い合わせる。テストパケット生成部114は、OFC1212-k、k=1~zから仮登録されたフローエントリを基に、テストパケットを生成する。テスト実行部115は、受信パケットを保留し、OFC1212-k、k=1~zから仮登録されたフローエントリに従い、テストパケットを転送し、閉路形成を検出するためのテストを開始する。仮登録フローエントリ破棄部116は、テストの結果、閉路形成を検出した場合、OFC1212-k、k=1~zから仮登録されたフローエントリを破棄する。なお、テストパケット確認部111、フローエントリ確認部112、問い合わせ処理部113、テストパケット生成部114、テスト実行部115、及び仮登録フローエントリ破棄部116は、相互に連携可能であるものとする。[テストパケット生成部の詳細]図12を参照して、テストパケット生成部114の詳細について説明する。テストパケット生成部114は、フィールド設定部1141と、テストパケット判別情報管理部1142と、TTL管理部1143と、テストID管理部1144と、テスト結果情報初期化部1145と、通過OFS情報管理部1146を備える。フィールド設定部1141は、テストパケットを生成する際、当該テストパケットに、基本ヘッダ部とテストデータ部とを設ける。テストパケット判別情報管理部1142は、基本ヘッダ部のサービスタイプフィールド及びプロトコルタイプフィールドに、テストパケットである旨を示す値を格納する。TTL管理部1143は、基本ヘッダ部の生存時間フィールドに、受信パケットに記されていた値を転記する。テストID管理部1144は、テストデータ部のテストIDフィールドに、OFC1212-k、k=1~zから仮登録されたフローエントリに記載されているテストIDを格納する。テスト結果情報初期化部1145は、テストデータ部のテスト成否フラグフィールドに、テスト未完のステータスであることを示す値を格納する。通過OFS情報管理部1146は、テストデータ部の通過OFS情報フィールドに、OFS1111-j、j=1~yのMACアドレス及びポート番号の値を格納する。[テスト実行部の詳細]図13を参照して、テスト実行部115の詳細について説明する。テスト実行部115は、テスト成否フラグ確認部1151と、TTL確認部1152と、テストID確認部1153と、転送先確認部1154と、テスト結果情報管理部1155と、テストパケット転送部1156を備える。テスト成否フラグ確認部1151は、受信パケットがテストパケットである場合、テストパケットのテスト成否フラグフィールドの値を確認し、テストパケットのテスト成否フラグフィールドに値がセットされていないか、又は値が0である場合、テスト処理中であると判断する。TTL確認部1152は、テスト処理中である場合、生存時間フィールドの値が0か否かを確認する。TTL確認部1152は、テストパケットの生存時間フィールドの値が0であった場合、パケットの生存期限切れであると判断し、テスト失敗と判断する。また、TTL確認部1152は、テストパケットの生存時間フィールドの値が0でない場合、図11のフローエントリ確認部112と連携して、フローテーブルの既存のフローエントリの中に、テストパケットにマッチするフローエントリがあるか否かを確認する。テストID確認部1153は、テストパケットにマッチするフローエントリがある場合、当該フローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値と同一の値があるか否かを確認し、同一の値があった場合、閉路が形成されたと判断し、テスト失敗と判断する。転送先確認部1154は、同一の値がない場合、現段階では閉路は形成されていないと判断し、当該フローエントリの転送先がホストであるか否かを確認し、当該フローエントリの転送先がホストである場合、閉路を形成しておらずルーティングできると判断し、テスト成功と判断する。テスト結果情報管理部1155は、テスト結果を表す値を、テストパケットのテスト成否フラグフィールドに格納する。テストパケット転送部1156は、テストパケットの通過OFS情報フィールドの末尾のMACアドレスを参照して、テストパケットを1つ前に経由したOFS1111-j、j=1~yに転送し、テストを完了する。[テストパケット未登録の場合]以下に、テストパケットが未登録の場合における処理について説明する。図11の問い合わせ処理部113は、テストパケットにマッチするフローエントリがない場合、OFC1212-k、k=1~zに問い合わせる。図12のテストID管理部1144は、OFC1212-k、k=1~zからフローエントリが仮登録された場合、或いは、テストパケットにマッチするフローエントリの転送先がホストでない場合、当該フローエントリのテストIDフィールドに、テストパケットのテストIDフィールドに記されている値を記入する。図12の通過OFS情報管理部1146は、テストパケットの通過OFS情報フィールドに、OFS1111-j、j=1~yのMACアドレス及びポート番号の値を格納する。図12のTTL管理部1143は、テストパケットの生存時間フィールドの値を1減算する。図13のテストパケット転送部1156は、当該フローエントリに従い、テストパケットを転送し、テストを継続する。[テスト実行済みの場合]以下に、テストが実行済みの場合における処理について説明する。図12の通過OFS情報管理部1146は、テストパケットのテスト成否フラグフィールドに0以外の値がセットされている場合テスト未完了ではない場合、テストパケットの通過OFS情報フィールドの末尾から、OFS1111-j、j=1~yのMACアドレスを削除する。図11のフローエントリ確認部112は、フローテーブルに登録されているフローエントリの中から、テストパケットのテストIDフィールドに記されている値と同一の値がテストIDフィールドに記されているフローエントリを検索する。検出されたフローエントリのアクションフィールドを参照して、当該フローエントリが仮登録のフローエントリか本登録のフローエントリかを判断する。当該フローエントリが仮登録のフローエントリであった場合、図13のテスト成否フラグ確認部1151と連携して、テストパケットのテスト成否フラグを参照する。テストパケットのテスト成否フラグフィールドにテスト成功を表す値が入っている場合、当該フローエントリを本登録のフローエントリに更新する。テストパケットのテスト成否フラグフィールドにテスト失敗を表す値が入っている場合、当該フローエントリを削除する。当該フローエントリが本登録のフローエントリであった場合、図12のテストID管理部1144と連携して、テストの成否に関わらず、当該フローエントリのテストIDフィールドから、テストパケットのテストIDフィールドに記載されているテストIDの値を削除する。図13のテストパケット転送部1156は、テストパケットの通過OFS情報フィールドを参照し、1個以上のMACアドレスがあるか否かを確認する。テストパケットの通過OFS情報フィールドに1個以上のMACアドレスがある場合は、テストパケットの通過OFS情報フィールドの末尾のMACアドレスを持つOFS1111-j、j=1~yにテストパケットを転送し、テストを継続する。テストパケットの通過OFS情報フィールドに1個もMACアドレスがない場合、テストパケットの生成元のOFS1111-j、j=1~yに戻ってきたと判断し、テスト結果情報管理部1155と連携して、テストパケットの生成元のOFS1111-j、j=1~yに戻ってきた場合、テストパケットのテスト成否フラグフィールドを参照して、テストの成否を確認する。テストが成功していた場合、保留していた受信パケットを、本登録のフローエントリに従って転送する。テストが失敗していた場合、保留していた受信パケットを破棄し、OFC1212-k、k=1~zに対してエラーを返す。その後、テストパケットを破棄し、テストを完了する。[OFCの内部構成例]図14を参照して、本発明に係る閉路形成未然防止システムにおけるOFCの内部構成例について説明する。OFC1212-k、k=1~zの各々は、経路計算部121と、テストID生成部122と、フローエントリ仮登録部123を備える。経路計算部121は、OFS1111-j、j=1~yから問い合わせを受けた際、経路を計算する。テストID生成部122は、テストを一意に識別可能なテストIDを生成する。フローエントリ仮登録部123は、OFS1111-j、j=1~yに、経路計算結果に基づくフローエントリを仮登録する。このとき、フローエントリ仮登録部123は、仮登録されるフローエントリの中に、アクションフィールドとテストIDフィールドとを設ける。アクションフィールドには、仮登録である旨の内容のデータを格納する。テストIDフィールドには、テストIDの値を格納する。[ハードウェアの例示]ホスト1010-i、i=1~x及びOFC1212-k、k=1~zの例として、PCパソコン、アプライアンスappliance、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。他にも、ホスト1010-i、i=1~xの例として、携帯電話機、スマートフォン、スマートブック、カーナビカーナビゲーションシステム、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット電子機器、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電informationhomeappliance、POSPointofSale端末、OAOfficeAutomation機器、店頭端末高機能コピー機、デジタルサイネージDigitalSignage:電子看板等も考えられる。ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、車両や船舶、航空機等の移動体に搭載されていても良い。なお、ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、ホスト1010-i、i=1~x及びOFC1212-k、k=1~zは、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシンVM:VirtualMachineでも良い。OFS1111-j、j=1~yの例として、ネットワークスイッチnetworkswitchを想定している。ネットワークスイッチの例として、L3スイッチlayer3switch、L4スイッチlayer4switch、L7スイッチ/アプリケーションスイッチlayer7switch、或いは、マルチレイヤスイッチmulti-layerswitch等が考えられる。その他、OFS1111-j、j=1~yの例として、ルータrouter、プロキシproxy、ゲートウェイgateway、ファイアウォールfirewall、ロードバランサloadbalancer:負荷分散装置、帯域制御装置/セキュリティ監視制御装置gatekeeper、基地局basestation、アクセスポイントAP:AccessPoint、通信衛星CS:CommunicationSatellite、或いは、複数の通信ポートを有する計算機等も考えられる。図示しないが、上記のようなホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~zは、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。上記のプロセッサの例として、CPUCentralProcessingUnit、ネットワークプロセッサNP:NetworkProcessor、マイクロプロセッサmicroprocessor、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路IC:IntegratedCircuit等が考えられる。上記のメモリの例として、RAMRandomAccessMemory、ROMReadOnlyMemory、EEPROMElectricallyErasableandProgrammableReadOnlyMemoryやフラッシュメモリ等の半導体記憶装置、HDDHardDiskDriveやSSDSolidStateDrive等の補助記憶装置、又は、DVDDigitalVersatileDisk等のリムーバブルディスクや、SDメモリカードSecureDigitalmemorycard等の記憶媒体メディア等が考えられる。また、バッファbufferやレジスタregisterでも良い。或いは、DASDirectAttachedStorage、FC-SANFibreChannel-StorageAreaNetwork、NASNetworkAttachedStorage、IP-SANIP-StorageAreaNetwork等を用いたストレージ装置でも良い。なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の1チップ化が進んでいる。従って、電子機器等に搭載される1チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例が考えられる。上記のインターフェースの例として、ネットワーク通信に対応した基板マザーボード、I/Oボードやチップ等の半導体集積回路、NICNetworkInterfaceCard等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口コネクタ等の通信ポート等が考えられる。また、ネットワークの例として、インターネット、LANLocalAreaNetwork、無線LANWirelessLAN、WANWideAreaNetwork、バックボーンBackbone、ケーブルテレビCATV回線、固定電話網、携帯電話網、WiMAXIEEE802.16a、3G3rdGeneration、専用線leaseline、IrDAInfraredDataAssociation、Bluetooth登録商標、シリアル通信回線、データバス等が考えられる。なお、ホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~zは、物理マシン上に構築された仮想マシンVirtualMachineVMでも良い。また、ホスト1010-i、i=1~x、OFS1111-j、j=1~y、及びOFC1212-k、k=1~z内の各部内部構成は、モジュールmodule、コンポーネントcomponent、或いは専用デバイス、又はこれらの起動呼出プログラムでも良い。但し、実際には、これらの例に限定されない。<まとめ>以上のように、本発明では、オープンフローOpenFlowネットワークにおける閉路形成を未然に防止する。具体的には、本発明は、1個のOFCが複数のOFSを管理するネットワークが複数あり、それらの組み合わせにより大きなネットワークが形成されているオープンフローネットワークシステムにおいて、複数あるOFC等のコントローラ同士が相互に連携する構成要素や処理手順を必要とせず、閉路を形成するようなフローエントリの登録を未然に防止する。本発明では、OFCで導出したフローエントリをOFSに登録するに先立って、閉路が形成されることがないか評価する。また、本発明では、経路評価を仮登録のフローエントリ及びテストパケットを用いて実施する。また、本発明では、経路評価に際して、テストパケットの挙動のモニタリングする構成要素や処理手順、又は結果を収集して分析する構成要素や処理手順を必要とせず、テストパケットとOFS群の相互作用だけにより、テストの開始からテスト結果の判定、テスト結果の反映に至るまで、自律的に実施できる。本発明は、OFCのソフトウェアの更新、及び、OFSのファームウェアの更新のみで実現できる。本発明は、オープンフローネットワークシステムにおける閉路形成のテストに利用できる。以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。なお、本出願は、日本出願番号2010-257781に基づく優先権を主張するものであり、日本出願番号2010-257781における開示内容は引用により本出願に組み込まれる。