コントローラから通知されたフローが所定の機能と整合するか確認し、当該フローが有効か無効かを判定する手段と、有効なフローを正規フローテーブルに登録する手段と、無効なフローを退避フローテーブルに登録する手段と、ネットワークから受信したパケットをフローと認識し、当該フローが前記正規フローテーブルに登録されている場合、当該フローに対して指定された処理に基づいて、前記パケットを処理する手段とを具備するスイッチ。請求項1に記載のスイッチであって、前記スイッチは、前記コントローラからのフロー登録の成否の問い合わせに対して、当該フローを前記正規フローテーブル及び前記退避フローテーブルのいずれかから読み出す手段と、前記コントローラに対して、当該フローが前記正規フローテーブル及び前記退避フローテーブルのいずれに登録されているか応答する手段とを更に具備するスイッチ。請求項1又は2に記載のスイッチであって、前記所定の機能の変更を検知する手段と、前記所定の機能の変更に応じて、前記正規フローテーブル及び前記退避フローテーブルに登録済みのフローの各々について、各フローが前記所定の機能と整合するか確認し、各フローが有効か無効かを判定する手段と、有効なフローを前記正規フローテーブルに登録する手段と、有効なフローが前記退避フローテーブルに登録されている場合は前記退避フローテーブルから削除する手段と、無効なフローを前記退避フローテーブルに登録する手段と、無効なフローが前記正規フローテーブルに登録されている場合は前記正規フローテーブルから削除する手段とを更に具備するスイッチ。請求項1乃至3のいずれか一項に記載のスイッチであって、障害発生時に、前記退避フローテーブルに登録済みのフローを有効にする手段とを更に具備するスイッチ。スイッチにより実施されるフローテーブル制御方法であって、コントローラから通知されたフローが所定の機能と整合するか確認し、当該フローが有効か無効かを判定することと、有効なフローを正規フローテーブルに登録することと、無効なフローを退避フローテーブルに登録することと、ネットワークから受信したパケットをフローと認識し、当該フローが前記正規フローテーブルに登録されている場合、当該フローに対して指定された処理に基づいて、前記パケットを処理することとを含むフローテーブル制御方法。請求項5に記載のフローテーブル制御方法であって、前記コントローラからのフロー登録の成否の問い合わせに対して、当該フローを前記正規フローテーブル及び前記退避フローテーブルのいずれかから読み出すことと、前記コントローラに対して、当該フローが前記正規フローテーブル及び前記退避フローテーブルのいずれに登録されているか応答することとを更に含むフローテーブル制御方法。請求項5又は6に記載のフローテーブル制御方法であって、前記所定の機能の変更を検知することと、前記所定の機能の変更に応じて、前記正規フローテーブル及び前記退避フローテーブルに登録済みのフローの各々について、各フローが前記所定の機能と整合するか確認し、各フローが有効か無効かを判定することと、有効なフローを前記正規フローテーブルに登録することと、有効なフローが前記退避フローテーブルに登録されている場合は前記退避フローテーブルから削除することと、無効なフローを前記退避フローテーブルに登録することと、無効なフローが前記正規フローテーブルに登録されている場合は前記正規フローテーブルから削除することとを更に含むフローテーブル制御方法。請求項5乃至7のいずれか一項に記載のフローテーブル制御方法を、スイッチに実行させるためのフローテーブル制御用プログラムを格納した記憶媒体。本発明では、退避フローテーブルを実装したオープンフローシステムについて説明する。<第1実施形態>以下に、本発明の第1実施形態について添付図面を参照して説明する。本実施形態では、本発明のオープンフローシステムにおける基本的な構成及び動作について説明する。[システム構成]図1に示すように、本発明のオープンフローシステムは、コントローラ10と、スイッチ20を含む。コントローラ10は、スイッチ20との間で、1つのオープンフローシステムを形成しており、オープンフロープロトコルメッセージを送受信する。スイッチ20は、メッセージ処理部21と、フローテーブル制御部22と、プラットフォーム機能管理部23と、構成情報24と、フローテーブル25と、フローテーブル読み出し部26を備える。メッセージ処理部21は、コントローラ10からオープンフロープロトコルメッセージを受信し、メッセージ解析を行い、スイッチ20の内部モジュールのうち適切な内部モジュールにハンドリングを行い、内部モジュールからの要求に応じてオープンフロープロトコルメッセージを組み立てて、コントローラ10に送信する。オープンフロープロトコルメッセージには、フロー変更FlowModメッセージと、統計要求StatisticsRequestメッセージが存在する。フロー変更FlowModメッセージは、スイッチ20のフローテーブル25に対してフローエントリを設定追加、変更、削除、或いはフローテーブル25を作成するためのものである。統計要求StatisticsRequestメッセージは、スイッチ20の持つフローエントリ、ポート、フローテーブル25についての統計情報を要求するためのものである。フローテーブル制御部22は、プラットフォーム機能管理部23に対して、メッセージ処理部21から受け取ったフローの確認の問い合わせを行い、問い合わせの結果に基づいて、フローテーブル25に対して、フローエントリの追加削除変更処理を行う。プラットフォーム機能管理部23は、フローテーブル制御部22からの問い合わせに応じて、対象となるフローが有効か無効かを決定する。ここでは、プラットフォーム機能管理部23は、フローテーブル制御部22からフローに関する問合せを受け取った際に、スイッチ20の持つ構成情報24を参照し、ネットワークNW:Network設定を確認する。すなわち、プラットフォーム機能管理部23は、対象となるフローのルールやアクションが、スイッチ20の持つ構成情報24と整合しているか確認する。構成情報24は、予め設定されており、スイッチ20の内部に保持されている。構成情報24の例として、スイッチ20が属するネットワークNW内のノード構成に関する情報や、スイッチ20が持つ機能に関する情報等が考えられる。フローテーブル25は、正規フローテーブル251と、退避フローテーブル252を有する。正規フローテーブル251は、スイッチ20の持つ構成情報24と整合した有効なフローを登録するためのフローテーブルである。退避フローテーブル252は、スイッチ20の持つ構成情報24と整合しない無効なフローを登録するためのフローテーブルである。フローテーブル読み出し部26は、メッセージ処理部21から受け取ったフローのヘッダ領域の値を基に検索キーを作成し、この検索キーを用いてフローテーブル25内のフローエントリを検索し、該当するフローエントリを読み出す。ここでは、メッセージ処理部21は、ネットワークからパケットを受信し、当該パケットに基づくフローをフローテーブル読み出し部26に通知し、当該フローについて正規フローテーブル251に該当するフローエントリがあれば、当該フローエントリに従って転送する。また、メッセージ処理部21は、当該フローについて正規フローテーブル251に該当するフローエントリがなければ、当該フローをコントローラ10に通知する。このとき、メッセージ処理部21がネットワークと通信するための通信回線と、メッセージ処理部21がコントローラ10と通信するための通信回線は、異なる通信回線であると好適である。但し、実際には、同じ通信回線を用いることも可能である。[ハードウェアの例示]コントローラ10の例として、PCパソコン、アプライアンスappliance、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。また、コントローラ10は、物理マシン上に構築された仮想マシンVirtualMachineVM環境でも良い。スイッチ20の例として、ネットワークスイッチnetworkswitchを想定している。ネットワークスイッチには、L3スイッチlayer3switch、L4スイッチlayer4switch、L7スイッチ/アプリケーションスイッチlayer7switch、或いは、マルチレイヤスイッチmulti-layerswitch等がある。他にも、スイッチ20の例として、ルータrouter、プロキシproxy、ゲートウェイgateway、ファイアウォール、ロードバランサ、帯域制御装置、セキュリティ監視制御装置、基地局、アクセスポイント、或いは、複数の通信ポートを有する計算機等が考えられる。メッセージ処理部21、フローテーブル制御部22、フローテーブル読み出し部26、プラットフォーム機能管理部23は、プログラムで駆動されるプロセッサ等のハードウェアと、そのハードウェアを駆動して所望の処理を実行するためのプログラム等のソフトウェアと、そのソフトウェアや各種データを格納するメモリによって実現される。フローテーブル25、及び構成情報24は、上記のメモリに格納されているものとする。上記のハードウェアの例として、CPUCentralProcessingUnit、マイクロプロセッサmicroprocessor、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路IntegratedCircuitIC等が考えられる。上記のメモリの例として、RAMRandomAccessMemory、ROMReadOnlyMemory、EEPROMElectricallyErasableandProgrammableReadOnlyMemoryやフラッシュメモリ等の半導体記憶装置、HDDHardDiskDriveやSSDSolidStateDrive等の補助記憶装置、又は、DVDDigitalVersatileDiskやSDメモリカードSecureDigitalmemorycard等のリムーバブルディスクや記憶媒体メディア等が考えられる。また、上記のメモリは、DASDirectAttachedStorage、FC-SANFibreChannel-StorageAreaNetwork、NASNetworkAttachedStorage、IP-SANIP-StorageAreaNetwork等を用いたストレージ装置でも良い。また、上記のハードウェア、及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の1チップ化が進んでいる。従って、スイッチ20に搭載される1チップマイコンが、処理装置、及び記憶装置を備えている事例が考えられる。但し、実際には、これらの例に限定されない。[フローテーブルへの設定処理]図2を参照して、フローテーブル25へフローエントリを設定する際の処理について説明する。1ステップS101メッセージ処理部21は、コントローラ10からオープンフロープロトコルメッセージとしてフロー変更FlowModメッセージを受信する。このとき、メッセージ処理部21は、コントローラ10から受信したオープンフロープロトコルメッセージの種別を判定するようにしても良い。2ステップS102メッセージ処理部21は、フロー変更FlowModメッセージに応じて、フローテーブル制御部22に、フロー変更FlowModメッセージにおいて指定された処理を要求する。ここでは、フロー変更FlowModメッセージにおいて指定された処理の内容は、フローエントリの追加削除変更処理のいずれかであるものとする。3ステップS103フローテーブル制御部22は、フロー変更FlowModメッセージに示されたフローについて、プラットフォーム機能管理部23に対して、ネットワークNW:Network設定の確認を要求する。このとき、フローテーブル制御部22は、プラットフォーム機能管理部23を起動するようにしても良い。4ステップS104プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24を参照し、ネットワークNW設定確認を行い、当該フローが有効なフローか無効なフローかを判定し、ネットワークNW設定確認結果判定結果をフローテーブル制御部22に返す。5ステップS105フローテーブル制御部22は、ネットワークNW設定確認の結果、当該フローが有効なフローであれば、正規フローテーブル251に対して、フロー変更FlowModメッセージにおいて指定された処理フローエントリの追加削除変更のいずれかを行う。6ステップS106フローテーブル制御部22は、ネットワークNW設定確認の結果、当該フローが無効なフローであれば、退避フローテーブル252に対して、フロー変更FlowModメッセージにおいて指定された処理フローエントリの追加削除変更のいずれかを行う。なお、フローテーブル制御部22は、メッセージ処理部21から受け取ったフローを基にフローエントリの削除を行う場合には、プラットフォーム機能管理部23へのネットワークNW設定確認の要求を行わず、正規フローテーブル251及び退避フローテーブル252の両方に対して、順番に/同時に、フローエントリの削除を指示するようにしても良い。正規フローテーブル251及び退避フローテーブル252のいずれかにフローエントリが登録された後に、ネットワークNW設定が変更され、フローエントリの登録時と削除時で、ネットワークNW設定確認結果判定結果が異なってしまう可能性もあるからである。[正規フローテーブルへの登録処理]図3を参照して、コントローラ10から通知されたフローがスイッチ20の持つ構成情報24と整合し正規フローテーブルに登録する際の処理について説明する。1ステップS111まず、コントローラ10は、メッセージ処理部21に、フロー登録を指示するフロー変更FlowModメッセージを送信する。2ステップS112メッセージ処理部21は、フロー変更FlowModメッセージに応じて、フローテーブル制御部22に、フロー登録を要求する。3ステップS113フローテーブル制御部22は、フロー変更FlowModメッセージに含まれるフローに基づいて、プラットフォーム機能管理部23に、ネットワークNW設定確認を要求する。4ステップS114プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24を参照し、ネットワークNW設定確認を行い、フローテーブル制御部22に、ネットワークNW設定確認結果を返す。ここでは、ネットワークNW設定確認結果は、当該フローが有効なフローである旨を示すものとする。5ステップS115フローテーブル制御部22は、当該フローが有効なフローである場合、正規フローテーブル251に、当該フローのエントリを登録する。[退避フローテーブルへの設定処理]図4を参照して、コントローラ10から通知されたフローがスイッチ20の持つ構成情報24と整合せず退避フローテーブルに設定する処理について説明する。1ステップS121まず、コントローラ10は、メッセージ処理部21に、フロー登録を指示するフロー変更FlowModメッセージを送信する。2ステップS122メッセージ処理部21は、フロー変更FlowModメッセージに応じて、フローテーブル制御部22に、フロー登録を要求する。3ステップS123フローテーブル制御部22は、フロー変更FlowModメッセージに含まれるフローに基づいて、プラットフォーム機能管理部23に、ネットワークNW設定確認を要求する。4ステップS124プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24を参照し、ネットワークNW設定確認を行い、フローテーブル制御部22に、ネットワークNW設定確認結果を返す。ここでは、ネットワークNW設定確認結果は、当該フローが無効なフローである旨を示すものとする。5ステップS125フローテーブル制御部22は、当該フローが無効なフローである場合、退避フローテーブル252に、当該フローのエントリを登録する。[フローテーブルからの読み出し処理]図5を参照して、フローテーブル25からフローエントリを読み出す際の処理について説明する。1ステップS201メッセージ処理部21は、コントローラ10からオープンフロープロトコルメッセージとして統計要求StatisticsRequestメッセージを受信する。このとき、メッセージ処理部21は、コントローラ10から受信したオープンフロープロトコルメッセージの種別を判定するようにしても良い。2ステップS202メッセージ処理部21は、統計要求StatisticsRequestメッセージに含まれるフローについて、フローテーブル読み出し部26にフロー状態読み出しを要求する。ここでは、メッセージ処理部21は、当該フローを、フローテーブル読み出し部26に通知する。このとき、メッセージ処理部21は、フローテーブル読み出し部26を起動するようにしても良い。3ステップS203フローテーブル読み出し部26は、フロー状態読み出しの要求に応じて、フロー状態確認を行う。ここでは、フローテーブル読み出し部26は、当該フローのヘッダ領域の値を基に検索キーを作成し、この検索キーを用いて正規フローテーブル251を検索し、正規フローテーブル251内での該当するフローエントリの有無を確認する。4ステップS204フローテーブル読み出し部26は、正規フローテーブル251内に該当するフローエントリがあれば、フロー状態確認結果により、正規フローテーブル251内に該当するフローエントリがあることを確認する。5ステップS205フローテーブル読み出し部26は、正規フローテーブル251内に該当するフローエントリがなければ、フロー状態確認結果により、正規フローテーブル251内に該当するフローエントリがないことを確認する。6ステップS206フローテーブル読み出し部26は、正規フローテーブル251内に該当するフローエントリがなかった場合、当該フローのヘッダ領域の値を基に検索キーを作成し、この検索キーを用いて退避フローテーブル252を検索し、退避フローテーブル252内での該当するフローエントリの有無を確認する。7ステップS207フローテーブル読み出し部26は、退避フローテーブル252内に該当するフローエントリがあれば、フロー状態確認結果により、退避フローテーブル252内に該当するフローエントリがあることを確認する。8ステップS208フローテーブル読み出し部26は、退避フローテーブル252内に該当するフローエントリがなければ、フロー状態確認結果により、退避フローテーブル252内に該当するフローエントリがないことを確認する。この場合、当該フローは、正規フローテーブル251及び退避フローテーブル252のいずれにも登録されていない未登録のフローであることが判明する。9ステップS209フローテーブル読み出し部26は、フロー状態確認結果に基づいて、メッセージ処理部21にフロー状態読み出し結果を通知する。例えば、フローテーブル読み出し部26は、当該フローが複数であった場合、これら複数のフローの全てについてフロー状態確認を完了した場合に、メッセージ処理部21にフロー状態読み出し結果を通知する。10ステップS210メッセージ処理部21は、フロー状態読み出し結果に基づいて、統計応答StatisticsReplyメッセージを作成してコントローラ10に送信する。[正規フローテーブルからの読み出し処理]図6を参照して、コントローラ10から要求されたフローについて、正規フローテーブル251からフローエントリを読み出す際の処理について説明する。1ステップS211まず、コントローラ10は、メッセージ処理部21に、統計要求StatisticsRequestメッセージを送信する。2ステップS212メッセージ処理部21は、統計要求StatisticsRequestメッセージに含まれるフローに基づいて、フローテーブル読み出し部26に、フロー状態読み出しを要求する。3ステップS213フローテーブル読み出し部26は、当該フローに基づいて、正規フローテーブル251を検索し、該当するフローエントリの有無についてフロー状態確認を行う。ここでは、正規フローテーブル251内に該当するフローエントリがあるものとする。4ステップS214フローテーブル読み出し部26は、フロー状態確認結果として、正規フローテーブル251内に該当するフローエントリがあることを確認する。5ステップS215その後、フローテーブル読み出し部26は、メッセージ処理部21に、フロー状態読み出し結果を通知する。6ステップS216メッセージ処理部21は、統計応答StatisticsReplyメッセージを作成してコントローラ10に送信する。[退避フローテーブルからの読み出し処理]図7を参照して、コントローラ10から要求されたフローについて、退避フローテーブル252からフローエントリを読み出す際の処理について説明する。1ステップS221まず、コントローラ10は、メッセージ処理部21に、統計要求StatisticsRequestメッセージを送信する。2ステップS222メッセージ処理部21は、統計要求StatisticsRequestメッセージに含まれるフローに基づいて、フローテーブル読み出し部26に、フロー状態読み出しを要求する。3ステップS223フローテーブル読み出し部26は、当該フローに基づいて、正規フローテーブル251を検索し、該当するフローエントリの有無についてフロー状態確認を行う。ここでは、正規フローテーブル251内に該当するフローエントリがないものとする。4ステップS224フローテーブル読み出し部26は、フロー状態確認結果として、正規フローテーブル251内に該当するフローエントリがないことを確認する。5ステップS225次に、フローテーブル読み出し部26は、当該フローに基づいて、退避フローテーブル252を検索し、該当するフローエントリの有無についてフロー状態確認を行う。ここでは、退避フローテーブル252内に該当するフローエントリがあるものとする。6ステップS226フローテーブル読み出し部26は、フロー状態確認結果として、退避フローテーブル252内に該当するフローエントリがあることを確認する。7ステップS227その後、フローテーブル読み出し部26は、メッセージ処理部21に、フロー状態読み出し結果を通知する。8ステップS228メッセージ処理部21は、統計応答StatisticsReplyメッセージを作成してコントローラ10に送信する。これにより、コントローラ10は、統計要求StatisticsRequestメッセージを送信するだけで、フローテーブル25への登録に成功したフローと失敗したフローを確認することができる。例えば、コントローラ10は、あるフローについて、スイッチ20にフローテーブル25への設定処理を要求した後、当該フローについて、フローテーブル25への登録に成功したかどうか確認するために、当該フローについての統計要求StatisticsRequestメッセージをスイッチ20に送信する。コントローラ10は、スイッチ20からの統計応答StatisticsReplyメッセージにより、フローテーブル25への登録に成功したか失敗したかを確認することができる。<第2実施形態>次に、本発明の第2実施形態について説明する。本実施形態では、フローテーブルへの登録後に、フローテーブル内のフローエントリに示されたフローが有効か無効かを再確認する。[フローエントリの有効性の再確認処理]図8を参照して、フローエントリに示されたフローが有効か無効かを再確認する際の処理について説明する。1ステップS301プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24に変更が加えられた場合、フローテーブル制御部22に通知する。フローテーブル制御部22は、プラットフォーム機能管理部23から通知を受けると、メッセージ処理部21に通知する。すなわち、プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24に変更が加えられた場合、フローテーブル制御部22を介して、又は直接に、メッセージ処理部21に通知する。2ステップS302メッセージ処理部21は、フローテーブル読み出し部26に、正規フローテーブル251及び退避フローテーブル252に登録されている全てのフローエントリの読み出しを要求する。3ステップS303フローテーブル読み出し部26は、メッセージ処理部21からの要求に応じて、正規フローテーブル251及び退避フローテーブル252に登録されている全てのフローエントリを読み出し、メッセージ処理部21に通知する。なお、実際には、フローテーブル読み出し部26は、正規フローテーブル251内のフローエントリの読み出しと、退避フローテーブル252内のフローエントリの読み出しを、一括ではなく、別々に独立して行うようにしても良い。この場合、フローテーブル読み出し部26は、正規フローテーブル251内のフローエントリと、退避フローテーブル252内のフローエントリを、別々に、メッセージ処理部21に通知する。4ステップS304メッセージ処理部21は、フローテーブル読み出し部26から通知されたフローエントリに示された全てのフローを、フローテーブル制御部22に通知する。5ステップS305フローテーブル制御部22は、メッセージ処理部21から通知された全てのフローについて、プラットフォーム機能管理部23に対して、ネットワークNW設定の確認を要求する。このとき、フローテーブル制御部22は、プラットフォーム機能管理部23を起動するようにしても良い。6ステップS306プラットフォーム機能管理部23は、スイッチ20の持つ構成情報24を参照し、ネットワークNW設定確認を行い、それぞれのフローが有効なフローか無効なフローかを判定し、ネットワークNW設定確認結果判定結果をフローテーブル制御部22に返す。7ステップS307フローテーブル制御部22は、ネットワークNW設定確認の結果、それぞれのフローについて、対象フローが有効なフローであれば、正規フローテーブル251に対して、フローエントリの追加変更を行う。8ステップS308更に、フローテーブル制御部22は、対象フローが退避フローテーブル252に登録されていたものであれば、退避フローテーブル252に対して、フローエントリの削除を行う。対象フローが退避フローテーブル252に登録されていたものでなければ、この動作は行われない。9ステップS309また、フローテーブル制御部22は、ネットワークNW設定確認の結果、それぞれのフローについて、対象フローが無効なフローであれば、退避フローテーブル252に対して、フローエントリの追加変更を行う。10ステップS310更に、フローテーブル制御部22は、対象フローが正規フローテーブル251に登録されていたものであれば、正規フローテーブル251に対して、フローエントリの削除を行う。対象フローが正規フローテーブル251に登録されていたものでなければ、この動作は行われない。ここでは、対象フローが、正規フローテーブル251内のフローエントリと、退避フローテーブル252内のフローエントリのどちらに由来するものであるか分かっているものとする。例えば、それぞれのフローに、どちらのフローテーブルに登録されているものか由来を示す情報を対応付けている場合が考えられる。或いは、正規フローテーブル251内のフローエントリを対象とする処理と、退避フローテーブル252内のフローエントリを対象とする処理を、別々に独立して行っている場合も考えられる。また、対象フローが、正規フローテーブル251内のフローエントリと、退避フローテーブル252内のフローエントリのどちらに由来するものであるか分かっていなかったとしても、対象フローをどちらかのフローテーブルに再登録する前に、既に登録されているフローエントリを事前に削除するようにすれば、重複登録を回避することができる。例えば、フローテーブル制御部22は、メッセージ処理部21からフローを通知された後、対象フローをそれぞれのフローテーブルに再登録する前に、対象フローのヘッダ領域の値を基に検索キーを作成し、この検索キーを用いてそれぞれのフローテーブルを検索して、該当するフローエントリを削除しておく。或いは、フローエントリ単位ではなく、既存のフローテーブル25正規フローテーブル251及び退避フローテーブル252自体を初期化削除しておき、新規に正規フローテーブル251及び退避フローテーブル252を作成し直す。更に、対象フローが、正規フローテーブル251内のフローエントリと、退避フローテーブル252内のフローエントリのどちらに由来するものであるか関係なく判断せず、無条件に、登録対象のフローテーブルへのフローエントリの追加変更処理を行い、それ以外のフローテーブルへのフローエントリの削除処理を行うようにしても良い。もし、フローエントリの削除処理を行ったフローテーブルに、該当するフローエントリが存在していなくても、フローエントリの削除処理が失敗するだけである。これにより、スイッチ20は、構成情報24に変更が加えられた場合、コントローラ10から指示を受けることなく、フローテーブル25に登録されている全てのフローエントリについて、構成情報24に整合するフローを再確認することができる。本実施形態によれば、コントローラ10は、スイッチ20のフローテーブル25に予め無効なフローを登録しておくことで、構成情報24が変更したときに無効なフローを自動的に有効にすることができる。これにより、スイッチ20のフローテーブル25を冗長化することができる。<第3実施形態>次に、本発明の第3実施形態について説明する。本実施形態では、第2実施形態に示したフローエントリの有効性の再確認処理において、スイッチ20の持つ構成情報24に変更が加えられた場合に限らず、定期的に、又は新たなフローを通知された際に、フローエントリの有効性の再確認処理を行う。例えば、図8に示したステップS301のプラットフォーム機能管理部23からの通知を受けた際ではなく、毎日、特定の時間に、又は、コントローラ10からフロー変更FlowModメッセージを受信した際に、図8に示したステップS302以降の処理を行うようにする。本実施形態によれば、構成情報24の変更を検知しなくても、構成情報24の変更に対応することができる。すなわち、構成情報24の変更を即座に検知するのではなく、再確認した際に、事後的に構成情報24の変更を認識する。<第4実施形態>次に、本発明の第4実施形態について説明する。本実施形態では、第1実施形態に示したフローテーブルからの読み出し処理の直後に、第2実施形態に示したフローエントリの有効性の再確認処理を行う。例えば、図5に示したステップS210の直後、又はステップS209とステップS210の間に、図8に示したステップS305以降の処理を行うようにする。<第5実施形態>次に、本発明の第5実施形態について説明する。本実施形態では、第1実施形態に示したフローテーブルからの読み出し処理において、フローテーブルからの読み出しを開始する前に、統計要求StatisticsRequestメッセージに含まれるフローを対象フローとして、第2実施形態に示したフローエントリの有効性の再確認処理を行うようにすることも考えられる。例えば、メッセージ処理部21は、図5に示したステップS201とステップS202の間に、統計要求StatisticsRequestメッセージに含まれるフローを対象フローとして、フローテーブル制御部22に通知する。その後、図8に示したステップS306以降の処理を行うようにする。この場合、フローテーブル制御部22は、ステップS308~ステップS311において、対象フローがどちらのフローテーブルに登録されているものか分からない。そのため、フローテーブル制御部22は、対象フローをそれぞれのフローテーブルに再登録する前に、対象フローのヘッダ領域の値を基に検索キーを作成し、この検索キーを用いてそれぞれのフローテーブルを検索して、該当するフローエントリを削除しておく。或いは、フローテーブル制御部22は、対象フローについて、無条件に、登録対象のフローテーブルへのフローエントリの追加変更処理を行い、それ以外のフローテーブルへのフローエントリの削除処理を行う。<第6実施形態>次に、本発明の第6実施形態について説明する。本実施形態では、障害が起きた際に、退避テーブルのフローエントリを有効にする。例えば、メッセージ処理部21は、障害発生時に、フローテーブル読み出し部26に対して、退避フローテーブル252のフローエントリの読み出しを指示し、フローテーブル読み出し部26から退避フローテーブル252のフローエントリの通知を受ける。メッセージ処理部21は、フローテーブル制御部22に対して、当該フローエントリに示されたフローについて、正規フローテーブル251へのフローエントリの追加と、退避フローテーブル252からのフローエントリの削除を指示する。フローテーブル制御部22は、メッセージ処理部21からの指示に応じて、正規フローテーブル251へのフローエントリの追加と、退避フローテーブル252からのフローエントリの削除を実行する。なお、障害発生時には、スイッチ20の持つ構成情報24に変更が発生する場合もあるため、第2実施形態におけるフローエントリの有効性の再確認処理で対応する事例も考えられる。<各実施形態の関係>なお、上記の各実施形態は、組み合わせて実施することも可能である。<まとめ>以上のように、本発明では、退避フローテーブルを用いたオープンフローシステムを提供する。本発明のオープンフローシステムにおけるスイッチは、所定の機能と整合していないフローエントリを無効エントリとして保持することを特徴としている。無効エントリを保持するフローテーブルを退避フローテーブルとする。すなわち、本発明のオープンフローシステムにおけるスイッチは、スイッチのプラットフォーム機能と整合するフローを登録した正規フローテーブルと、スイッチのプラットフォーム機能と整合しないフローを登録した退避フローテーブルを備えたことを特徴とする。これにより、コントローラ側で、どのフローエントリが無効であるかを統計要求StatisticsRequestメッセージを用いて確認することができる。本発明のオープンフローシステムにおけるコントローラは、統計要求StatisticsRequestメッセージを送信するだけで、登録に成功したフローと失敗したフローを確認することができる。また、コントローラは、スイッチのフローテーブルに登録しようとしたフローが実際に登録できたか、無効であるため登録できなかったかを判別できるようになる。また、障害が起きた際に、退避テーブルのフローエントリを有効にするように実装することで、オープンフローシステムに冗長性を持たせることもできる。<付記>上記の実施形態の一部又は全部は、以下の付記のように記載することも可能である。但し、実際には、以下の記載例に限定されない。付記1コントローラから通知されたフローが所定の機能と整合するか確認し、当該フローが有効か無効かを判定するステップと、有効なフローを正規フローテーブルに登録するステップと、無効なフローを退避フローテーブルに登録するステップと、ネットワークから受信したパケットをフローと認識し、当該フローが前記正規フローテーブルに登録されている場合、当該フローに対して指定された処理に基づいて、前記パケットを処理するステップとをスイッチに実行させるためのフローテーブル制御用プログラム。付記2付記1に記載のフローテーブル制御用プログラムであって、前記コントローラからのフロー登録の成否の問い合わせに対して、当該フローを前記正規フローテーブル及び前記退避フローテーブルのいずれかから読み出すステップと、前記コントローラに対して、当該フローが前記正規フローテーブル及び前記退避フローテーブルのいずれに登録されているか応答するステップとを更にスイッチに実行させるためのフローテーブル制御用プログラム。付記3付記1又は2に記載のフローテーブル制御用プログラムであって、前記所定の機能の変更を検知するステップと、前記所定の機能の変更に応じて、前記正規フローテーブル及び前記退避フローテーブルに登録済みのフローの各々について、各フローが前記所定の機能と整合するか確認し、各フローが有効か無効かを判定するステップと、有効なフローを前記正規フローテーブルに登録するステップと、有効なフローが前記退避フローテーブルに登録されている場合は前記退避フローテーブルから削除するステップと、無効なフローを前記退避フローテーブルに登録するステップと、無効なフローが前記正規フローテーブルに登録されている場合は前記正規フローテーブルから削除するステップとを更にスイッチに実行させるためのフローテーブル制御用プログラム。以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。<備考>なお、本出願は、日本出願番号2010-095760に基づく優先権を主張するものであり、日本出願番号2010-095760における開示内容は引用により本出願に組み込まれる。