(57)【要約】【課題】競合解消後のフローテーブルによる動作を変えることなくフローエントリを集約する。【解決手段】情報処理装置１は、記憶部１ａと制御部１ｂを備える。記憶部１ａは、パケットの識別条件を表すMatch（条件情報）と、パケットの処理を表すAction（処理情報）との組をフローエントリに持つフローテーブルを記憶する。制御部１ｂは、Matchの条件が包含される度合いを表す重なり度をフローエントリに付与し、重なり度付与後のフローテーブルの中から、重なり度を用いて集約可能なフローエントリを判定してフローエントリを集約する。【選択図】図１
2018117303.tif 000002
【特許請求の範囲】
【請求項１】
パケットの識別条件を表す条件情報と、前記パケットの処理を表す処理情報との組をフローエントリに持つフローテーブルを記憶する記憶部と、
前記条件情報が包含される度合いを表す重なり度を前記フローエントリに付与し、前記重なり度の付与後の前記フローテーブルから、前記重なり度を用いて集約可能な前記フローエントリを判定して前記フローエントリを集約する制御部と、
を有する情報処理装置。
【請求項２】
前記フローテーブルは、前記パケットの優先度情報を前記フローエントリにさらに含み、
前記制御部は、集約結果と前記重なり度にもとづいて前記優先度情報を決定する請求項１記載の情報処理装置。
【請求項３】
前記制御部は、
前記重なり度の付与対象フローエントリの前記条件情報を包含する包含フローエントリが前記フローテーブルにない場合、前記重なり度の最小値を前記付与対象フローエントリに付与し、
前記付与対象フローエントリの前記条件情報を包含する前記包含フローエントリが前記フローテーブルにある場合、前記包含フローエントリに付与されている前記重なり度内の最大値に所定値を加算した値を、前記付与対象フローエントリに付与する請求項１記載の情報処理装置。
【請求項４】
前記制御部は、
前記フローテーブルに追加される追加フローエントリの前記条件情報を包含する包含フローエントリが前記フローテーブルにない場合、前記重なり度の最小値を前記追加フローエントリに付与し、
前記追加フローエントリの前記条件情報を包含する前記包含フローエントリが前記フローテーブルにある場合、前記包含フローエントリに付与されている前記重なり度内の最大値に所定値を加算した値を、前記追加フローエントリに付与し、
前記追加フローエントリに包含される被包含フローエントリが前記フローテーブルにあり、前記被包含フローエントリの前記重なり度が、前記追加フローエントリに付与した前記重なり度と同じ場合、前記被包含フローエントリの前記重なり度に所定値を加算して更新する請求項１記載の情報処理装置。
【請求項５】
前記制御部は、
集約元候補フローエントリの前記重なり度よりも所定値小さい前記重なり度が付与された集約先候補フローエントリに対し、前記集約先候補フローエントリの前記条件情報が前記集約元候補フローエントリの前記条件情報を包含し、かつ前記集約元候補フローエントリの前記処理情報と前記集約先候補フローエントリの前記処理情報とが同じであることを条件とする第１の集約判定条件と、
前記集約先候補フローエントリの前記条件情報を含み、前記集約元候補フローエントリの前記重なり度と同じ前記重なり度が付与されている前記集約元候補フローエントリであって、前記集約元候補フローエントリのすべてが同じ前記処理情報を有していることを条件とする第２の集約判定条件と、
の両方を満たす場合に、前記集約元候補フローエントリを削除して前記集約先候補フローエントリに集約する請求項１記載の情報処理装置。
【請求項６】
前記制御部は、
集約元候補フローエントリの前記重なり度よりも所定値大きい前記重なり度が付与された集約先候補フローエントリに対し、前記集約先候補フローエントリの前記条件情報が前記集約元候補フローエントリの前記条件情報を包含し、かつ前記集約元候補フローエントリの前記処理情報と前記集約先候補フローエントリの前記処理情報とが同じであることを条件とする第１の集約判定条件と、
前記集約先候補フローエントリの前記条件情報を含み、前記集約元候補フローエントリの前記重なり度と同じ前記重なり度が付与されている前記集約元候補フローエントリであって、前記集約元候補フローエントリのすべてが同じ前記処理情報を有していることを条件とする第２の集約判定条件と、
の両方を満たす場合に、前記集約元候補フローエントリを削除して前記集約先候補フローエントリに集約する請求項１記載の情報処理装置。
【請求項７】
前記制御部は、
集約されない未集約フローエントリに対して、前記重なり度が大きい前記未集約フローエントリほど大きい値となるように優先度情報を決定し、
集約した集約済みフローエントリに対して、集約後に削除された集約元フローエントリの前記重なり度に所定値加算した前記重なり度が付与されているフローエントリの第１の優先度よりも小さく、かつ集約先フローエントリの第２の優先度よりも大きくなるように前記優先度情報を決定する請求項１記載の情報処理装置。
【請求項８】
前記制御部は、
複数回集約された前記フローテーブルに対して優先度情報を決定する場合、
集約されない未集約フローエントリに対して、前記重なり度が大きい前記未集約フローエントリほど大きい値となるように前記優先度情報を決定し、
集約した集約済みフローエントリに対して、集約後に削除された集約元フローエントリの前記重なり度に所定値加算した前記重なり度が付与されているフローエントリの第１の優先度よりも小さく、かつ集約先フローエントリの第２の優先度よりも大きくなるように、かつ前記重なり度が同じ場合は集約試行回数が少ないほど大きくなるように前記優先度情報を決定する請求項１記載の情報処理装置。
【請求項９】
前記制御部は、
集約元候補フローエントリの前記重なり度と、前記集約先候補フローエントリの前記重なり度との間にある前記重なり度が付与されたフローエントリに、前記条件情報を包含するフローエントリがないことを条件とする第１の条件と、
前記集約元候補フローエントリの前記重なり度よりも所定値小さい前記重なり度が付与された前記集約先候補フローエントリに対し、前記集約先候補フローエントリの前記条件情報が前記集約元候補フローエントリの前記条件情報を包含し、かつ前記集約元候補フローエントリの前記処理情報と前記集約先候補フローエントリの前記処理情報とが同じであることを条件とする第２の条件と、
前記集約先候補フローエントリの前記条件情報を含み、前記集約元候補フローエントリの前記重なり度と同じ前記重なり度が付与されている前記集約元候補フローエントリであって、前記集約元候補フローエントリのすべてが同じ前記処理情報を有していることを条件とする第３の条件と、
前記集約先候補フローエントリは、前記集約先候補フローエントリに付与される前記重なり度を持つエントリの中で最大の優先度情報が決定されていることを条件とする第４の条件と、
のすべてが満たされる場合に、前記集約元候補フローエントリの前記重なり度よりも２以上大きい前記重なり度が付与されている前記集約先候補フローエントリとの間で集約処理を行う請求項１記載の情報処理装置。
【請求項１０】
前記制御部は、前記フローテーブルに所定数の条件情報を含む第１フローエントリと、所定数の条件情報と、他の条件情報とを含む第２フローエントリとがある場合、前記第１フローエントリと前記第２フローエントリを比較して、それぞれの処理情報が同一である場合は、前記第２フローエントリを削除する請求項１記載の情報処理装置。
【請求項１１】
コンピュータが、
パケットの識別条件を表す条件情報と、前記パケットの処理を表す処理情報との組をフローエントリに持つフローテーブルを記憶させ、
前記条件情報が包含される度合いを表す重なり度を前記フローエントリに付与し、
前記重なり度の付与後の前記フローテーブルから、前記重なり度を用いて集約可能な前記フローエントリを判定して前記フローエントリを集約する、
フローエントリ集約方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびフローエントリ集約方法に関する。
【背景技術】
【０００２】
近年、ネットワークを構成する通信装置（スイッチ）を制御し、ネットワークの構築や設定などを動的に変更するＳＤＮ（Software Defined Networking）の技術が注目されている。ＳＤＮでは、ＯｐｅｎＦｌｏｗなどのプロトコルにより、通信装置からネットワーク制御機能を切り離し、ＳＤＮコントローラと呼ばれる装置がネットワーク全体を集中制御する。
【０００３】
また、ＳＤＮコントローラを制御するためのＡＰＩ（Application Programming Interface）が公開されていることから、複数のユーザが柔軟にネットワークを構築することができる。
【０００４】
ＳＤＮコントローラは、パケット転送の内容を記述した、Match（条件）、Action（処理）およびPriority（優先度）の各フィールド情報を含むフローエントリをアプリケーションによって通信装置に設定することでネットワークの制御を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１８６２１３号公報
【特許文献２】国際公開第２０１３／１４７０５３号
【特許文献３】国際公開第２０１１／０４３３１２号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のアプリケーションがフローエントリによるネットワーク設定を行うと、フローエントリの競合が発生する場合がある。フローエントリの競合とは、複数のアプリケーションの設定情報が重複し、１つのパケットに対して２つ以上の異なるAction（パケット処理）が設定されることである。
【０００７】
フローエントリの競合が発生した場合、ユーザは、どのActionでパケットを処理すべきかを設定したフローエントリを追加することで競合の解消を図る。また、追加されるフローエントリは、競合が増えるほど増大するため、競合解消後のフローテーブルに対してフローエントリ数を削減して集約することが行われる。しかし、例えば、Matchに設定される条件が重複するようなフローエントリに対して集約が行われた場合、元のフローテーブルの処理動作が変わってしまうおそれがある。
【０００８】
１つの側面では、本発明は、元のフローテーブルによる動作を変えることなくフローエントリを集約する情報処理装置およびフローエントリ集約方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、情報処理装置が提供される。情報処理装置は、記憶部と制御部を備える。記憶部は、パケットの識別条件を表す条件情報と、パケットの処理を表す処理情報との組をフローエントリに持つフローテーブルを記憶する。制御部は、条件情報が包含される度合いを表す重なり度をフローエントリに付与し、重なり度の付与後のフローテーブルから、重なり度を用いて集約可能なフローエントリを判定してフローエントリを集約する。
【００１０】
また、上記課題を解決するために、コンピュータが上記情報処理装置と同様の制御を実行するフローエントリ集約方法が提供される。
【発明の効果】
【００１１】
１態様によれば、元のフローテーブルによる動作を変えることなくフローエントリを集約することができる。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置の構成の一例を示す図である。
【図２】ネットワーク構成の一例を示す図である。
【図３】フローエントリが設定された通信装置の動作の一例を示す図である。
【図４】フローエントリの競合の一例を示す図である。
【図５】フローエントリの追加による競合解消の一例を示す図である。
【図６】フローテーブルに対応するベン図である。
【図７】フローエントリ集約が失敗するケースの一例を示す図である。
【図８】フローエントリ集約が失敗するケースのベン図である。
【図９】ＳＤＮコントローラのハードウェア構成の一例を示す図である。
【図１０】ＳＤＮコントローラの機能ブロックの一例を示す図である。
【図１１】集約部の全体動作を示すフローチャートである。
【図１２】重なり度付与処理の一例を示す図である。
【図１３】重なり度付与処理の動作を示すフローチャートである。
【図１４】重なり度付与処理の一例を示す図である。
【図１５】重なり度を表すベン図を示している。
【図１６】重なり度付与処理の動作を示すフローチャートである。
【図１７】集約判定処理を行った際に集約不可と判定される例を示す図である。
【図１８】集約判定処理を行った際に集約可能と判定される例を示す図である。
【図１９】集約判定処理の動作を示すフローチャートである。
【図２０】優先度決定処理の一例を示す図である。
【図２１】フローエントリ集約を行った場合のベン図である。
【図２２】優先度決定処理の動作を示すフローチャートである。
【図２３】優先度決定処理の動作を示すフローチャートである。
【図２４】重なり度の差が２以上の集約判定処理の動作を示すフローチャートである。
【図２５】ネットワーク構成の一例を示す図である。
【図２６】初期状態のフローテーブルの構成の一例を示す図である。
【図２７】フローテーブルに対応するベン図である。
【図２８】重なり度付与処理の一例を示す図である。
【図２９】集約判定処理の一例を示す図である。
【図３０】優先度決定処理の一例を示す図である。
【図３１】初期状態のフローテーブルの構成の一例を示す図である。
【図３２】フローテーブルに対応するベン図である。
【図３３】重なり度付与処理の一例を示す図である。
【図３４】集約判定処理の一例を示す図である。
【図３５】優先度決定処理の一例を示す図である。
【図３６】集約判定処理の一例を示す図である。
【図３７】優先度決定処理の一例を示す図である。
【図３８】フローテーブルの構成の一例を示す図である。
【図３９】フローテーブルに対応するベン図である。
【図４０】集約判定処理の一例を示す図である。
【図４１】優先度決定処理の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して実施の形態を詳細に説明する。
［第１の実施の形態］
第１の実施の形態の情報処理装置について図１を用いて説明する。図１は情報処理装置の構成の一例を示す図である。情報処理装置１は、記憶部１ａと制御部１ｂを備える。
【００１４】
記憶部１ａは、パケットの識別条件を表すMatch（条件情報）と、パケットの処理を表すAction（処理情報）との組をフローエントリに持つフローテーブルを記憶する。
なお、以降では、単に「Match」と記載する場合は、フローエントリのフィールド名を表し、「Matchの条件」と記載する場合は、Matchフィールドに書かれたパケット識別条件の情報（キーとバリューの組合せ）を表すものとする。
【００１５】
制御部１ｂは、Matchの条件が包含される度合いを表す重なり度をフローエントリに付与し、重なり度付与後のフローテーブルから、重なり度を用いて集約可能なフローエントリを判定してフローエントリを集約する。
【００１６】
図１の例において、初期状態のフローテーブルＴ０には以下の内容が記述されている。なお、以降の説明では、フローエントリを単にエントリとも呼ぶ。
・エントリ＃１：（Match、Action）＝（src=host、drop）
・エントリ＃２：（Match、Action）＝（src=host，dst=server、output:port２）
・エントリ＃３：（Match、Action）＝（src=host，dst=server，tcp＿port=ssh、output:port２）
制御部１ｂは、フローテーブルＴ０に対して、Matchの条件数が最も少ないエントリ＃１に重なり度１を付与する。また、制御部１ｂは、次にMatchの条件数が少ないエントリ＃２を検出し、エントリ＃２はエントリ＃1に包含されるのでエントリ＃２に重なり度２を付与する。さらに、制御部１ｂは、Matchの条件数が３番目に少ないエントリ＃３を検出し、エントリ＃３はエントリ＃２に包含されるのでエントリ＃３に重なり度３を付与する。
【００１７】
そして、制御部１ｂは、重なり度付与後のフローテーブルＴ１に対してフローエントリの集約処理を行う。この場合、制御部１ｂは、重なり度３のエントリ＃３は、重なり度２のエントリ＃２に集約可能であることを判定する（集約処理の詳細動作については後述する）。
【００１８】
よって、制御部１ｂは、エントリ＃３を削除して、集約後のフローテーブルＴ２を生成する。削除されたエントリ＃３のMatchの条件を有するパケットに対しても、フローテーブルＴ２によって、元のフローテーブルＴ０の処理と変わらずにパケット処理としてoutput:port２の処理が行われる。
【００１９】
このように、情報処理装置１では、Matchの条件が包含される度合いの重なり度を付与したフローテーブルの中から集約可能なフローエントリを判定してフローエントリを集約する。これにより、情報処理装置１は、競合解消後の元のフローテーブルによる動作を変えずにエントリを集約することが可能になる。
【００２０】
［第２の実施の形態］
次に第２の実施の形態について説明する。まず、ネットワーク構成について図２を用いて説明する。図２はネットワーク構成の一例を示す図である。ネットワーク２００は、ＳＤＮコントローラ１０、ホスト２０１、通信装置（スイッチ）２０２、サーバ２０３およびサンドボックス（sandbox）２０４を備える。
【００２１】
なお、サンドボックス２０４は、外部から受け取ったプログラムを保護領域で動作させ、不正プログラムであることを検知した場合は、そのプログラムを排除するセキュリティ機構部である。
【００２２】
ホスト２０１は、通信装置２０２のポートｐ１に接続する。通信装置２０２のポートｐ２は、サーバ２０３内のサービスＡ（tcp＿port：80）とサービスＢ（tcp＿port：22）に接続する。通信装置２０２のポートｐ３は、サンドボックス２０４に接続する。また、ＳＤＮコントローラ１０は、通信装置２０２に接続する。
【００２３】
このようなネットワーク２００の構成において、ＳＤＮコントローラ１０は、アプリケーションＡ、Ｂを通じて、ユーザによって記述されたパケット転送内容を含むフローエントリを通信装置２０２に送信し、通信装置２０２に対してフローエントリを設定する。
【００２４】
＜フローエントリが設定された通信装置の動作＞
図３はフローエントリが設定された通信装置の動作の一例を示す図である。フローエントリのMatch、Action、Priorityは、フローテーブル１１０により管理され、フローテーブル１１０は、通信装置２０２に設定されている。
【００２５】
通信装置２０２は、隣接のホスト２０１からパケットが送られてくると、パケットのヘッダ情報などからMatchの記述内容（Matchの条件）と一致するエントリをフローテーブル１１０の中から検出する。
【００２６】
このとき、通信装置２０２は、Priorityの高いエントリから順番に検索を行い、適合したエントリがあると、適合したエントリのActionを実行する。なお、適合したエントリよりもPriorityの低いエントリの処理は行われない。
【００２７】
図３の例において、通信装置２０２に設定されているフローテーブル１１０には、以下の内容が記述されている。
・エントリ＃１：（Match、Action、Priority）＝（dst=server，tcp＿port=http、output:port２、40000）
・エントリ＃２：（Match、Action、Priority）＝（dst=server，tcp＿port=ssh、drop、20000）
・エントリ＃３：（Match、Action、Priority）＝（dst=server、output:port２、10000）
なお、“dst=server”はパケットの宛先がサーバであることを示し、“tcp＿port=http”は、ＴＣＰ（Transmission Control Protocol）ポートがＨＴＴＰ（Hypertext Transfer Protocol）であること、“tcp＿port=ssh”は、ＴＣＰポートがＳＳＨ（Secure Shell）であることを示している。
【００２８】
また、“output:port２”は、通信装置２０２のポートｐ２からパケットが出力されること、“drop”は、通信装置２０２でパケットが破棄されることを意味している。なお、Priorityの数値は大きいほど高優先度としている。
【００２９】
通信装置２０２は、ホスト２０１から送信された、ＨＴＴＰパケット２１とＳＳＨパケット２２を受信する。ＨＴＴＰパケット２１とＳＳＨパケット２２の宛先は共に、サーバ２０３であるとする。
【００３０】
通信装置２０２は、ＨＴＴＰパケット２１とＳＳＨパケット２２に対して、まず、フローテーブル１１０の中でPriorityが最も高いエントリ＃１のMatchの条件に一致するものを検出する。
【００３１】
この例では、ＨＴＴＰパケット２１がエントリ＃１のMatchの条件に一致する。したがって、通信装置２０２は、エントリ＃１のActionにはoutput:port２という記述があるので、ＨＴＴＰパケット２１をポートｐ２から出力する。
【００３２】
なお、ＳＳＨパケット２２は、フローテーブル１１０の中でPriorityが２番目に高いエントリ＃２のMatchの条件と一致するが、Priorityが最も高いエントリ＃１に適合するＨＴＴＰパケット２１がすでに存在している。このため、通信装置２０２は、ＳＳＨパケット２２のサーバ２０３への転送処理を行わない。
【００３３】
このように、フローエントリを記述したフローテーブルが通信装置に設定されることで、複数の通信装置を備えるネットワークの設定が行われる。なお、フローエントリのMatch、Action、Priorityを用いた記述方式は、ＯｐｅｎＦｌｏｗに限らず、ファイヤウォールなどでも同様の記述方式でネットワークの設定が行われる。
【００３４】
＜フローエントリの競合＞
複数のアプリケーションがフローエントリによるネットワーク設定を行うと、上述したように、フローエントリの競合が発生する場合がある。
【００３５】
図４はフローエントリの競合の一例を示す図である。アプリケーションＡとアプリケーションＢそれぞれのフローエントリが競合している例を示している。フローテーブル１１１において、アプリケーションＡにより（Match、Action、Priority）には（dst=server、output:port２、10000）が記述されている。また、アプリケーションＢにより（Match、Action、Priority）には（tcp＿port=ssh、drop、10000）が記述されている。
【００３６】
Matchに含まれない条件は不定（Don't care）となるため、アプリケーションＡ、Ｂそれぞれは、dst=serverのパケットと、tcp＿port=sshのパケットとに対して異なるActionを設定していることになる。
【００３７】
ここで、ホスト２０１から、宛先がサーバ２０３であるＳＳＨパケット２２が送信され、通信装置２０２がＳＳＨパケット２２を受信したとする。また、ＳＳＨパケット２２の属性は、dst=server、tcp＿port=sshの両方を有しているものとする。
【００３８】
通信装置２０２に設定されるフローテーブル１１１では、アプリケーションＡは、dst=serverのパケットに対してActionとしてoutput:port２が設定されている。また、アプリケーションＢは、tcp＿port=sshのパケットに対してActionとしてdropが設定されている。したがって、ＳＳＨパケット２２に対して、ポートｐ２からの出力と、パケット破棄との異なる動作が定義されることになる。
【００３９】
＜フローエントリの追加による競合解消＞
図５はフローエントリの追加による競合解消の一例を示す図である。フローテーブル１１１ａは、フローテーブル１１１に対して、エントリ＃３が追加されたものである（Priorityの記載は省略する）。エントリ＃３は、（Match、Action）＝（dst=server，tcp＿port=ssh、output:port２）となっている。
【００４０】
Matchの条件をdst=server、tcp＿port=sshとしたエントリ＃３が追加されることで、ＳＳＨパケット２２の動作は一意に決まることになる。このように、新たなフローエントリが追加されることで競合の解消が図られる。
【００４１】
図６はフローテーブルに対応するベン図である。ベン図は、全パケット範囲において、曲線で囲まれた範囲が１つのエントリのMatchの範囲、斜線がActionを表す。
ベン図ｖ１は、フローテーブル１１１に対応している。フローエントリに競合が発生すると、ベン図ｖ１のエントリ＃１、＃２同士の重なり部分に、処理が定まらない領域が発生する。
【００４２】
一方、ベン図ｖ２は、新たなエントリ＃３が追加されたフローテーブル１１１ａに対応しており、重なり部分の処理がエントリ＃３と定まり、競合が解消されている状態を示している。
【００４３】
このように、新たなフローエントリが追加されることで、フローエントリの競合を解消できる。ただし、競合が増えるほど追加すべきフローエントリも増大するので、競合を解消した後のフローテーブルのエントリ数を削減してフローエントリを集約することが重要となる。
【００４４】
＜フローエントリ集約の失敗例＞
次に競合解消後のフローテーブルの動作が変わってしまい、集約が失敗する場合のフローエントリ集約について説明する。図７はフローエントリ集約が失敗するケースの一例を示す図である。なお、以降の説明では、フローテーブル中のPriorityの記載は適宜省略する。初期状態（集約前）のフローテーブル１１２には以下の内容が設定されている。
【００４５】
・エントリ＃１：（Match、Action）＝（src=host、drop）
・エントリ＃２：（Match、Action）＝（src=host，dst=server、output:port２）
・エントリ＃３：（Match、Action）＝（src=host，dst=server，tcp＿port=ssh、drop）
フローテーブル１１２のエントリ＃１、＃３のActionは共にdropである。このため、同じActionのエントリ＃１、＃３を持つフローテーブル１１２ａが生成される。また、エントリ＃１、＃３の共通のMatchの条件はsrc=hostであるので、共通のMatchの条件を持つフローエントリをエントリ＃４と定義したフローテーブル１１２ａ−１が生成される。そして、フローテーブル１１２からエントリ＃１、＃３を削除し、エントリ＃２にエントリ＃４を追加したテーブルが集約後のフローテーブル１１２ｂとして生成される。
【００４６】
このように、同じActionを持ち、共通のMatchの条件を持つエントリ＃１、＃３を集約して新たにエントリ＃４を生成し、エントリ＃２、＃４を含むフローテーブル１１２ｂが生成される。
【００４７】
しかし、このようなフローエントリ集約を行った場合、本来は（src=host，dst=server，tcp＿port=ssh）のパケットに対してdropの処理をするところ、集約後のフローテーブル１１２ｂでは、output:port２の処理が実行されてしまう。
【００４８】
図８はフローエントリ集約が失敗するケースのベン図である。ベン図ｖ３は、フローテーブル１１２に対応している。また、ベン図ｖ３−１は、集約後のフローテーブル１１２ｂに対応しており、本来（src=host，dst=server，tcp＿port=ssh）のパケットに対するdropの処理がoutput:port２の処理に変わっている状態を示している。
【００４９】
以上のように、同じActionを持ち、共通のMatchの条件を持つエントリを集約するというようなフローエントリ集約では、元のフローテーブルの処理を変えてしまうおそれがある。第２の実施の形態では、このような状況に鑑みて、競合解消後のフローテーブルの動作を変えずに、フローエントリ数を削減して集約するものである。
【００５０】
＜ＳＤＮコントローラのハードウェア構成＞
次に第２の実施の形態の構成および動作について以降詳しく説明する。図９はＳＤＮコントローラのハードウェア構成の一例を示す図である。図１の情報処理装置１の機能を有するＳＤＮコントローラ１０は、プロセッサ１００によって装置全体が制御されている。すなわち、プロセッサ１００は、ＳＤＮコントローラ１０の制御部として機能する。
【００５１】
プロセッサ１００には、バス１０３を介してメモリ１０１と複数の周辺機器が接続されている。プロセッサ１００は、マルチプロセッサであってもよい。プロセッサ１００は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ１００は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００５２】
メモリ１０１は、ＳＤＮコントローラ１０の主記憶装置として使用される。メモリ１０１には、プロセッサ１００に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０１には、プロセッサ１００による処理に要する各種データが格納される。
【００５３】
また、メモリ１０１は、ＳＤＮコントローラ１０の補助記憶装置としても使用され、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。メモリ１０１は、補助記憶装置として、フラッシュメモリやＳＳＤ（Solid State Drive）等の半導体記憶装置やＨＤＤ（Hard Disk Drive）等の磁気記録媒体を含んでもよい。
【００５４】
バス１０３に接続されている周辺機器としては、入出力インタフェース１０２およびネットワークインタフェース１０４がある。入出力インタフェース１０２は、プロセッサ１００からの命令にしたがってＳＤＮコントローラ１０の状態を表示する表示装置として機能するモニタ（例えば、ＬＥＤ（Light Emitting Diode）やＬＣＤ（Liquid Crystal Display）等）が接続されている。
【００５５】
また、入出力インタフェース１０２は、キーボードやマウス等の情報入力装置を接続可能であって、情報入力装置から送られてくる信号をプロセッサ１００に送信する。
また、入出力インタフェース１０２は、周辺機器を接続するための通信インタフェースとして機能する。例えば、入出力インタフェース１０２は、レーザ光等を利用して、光ディスクに記録されたデータの読み取りを行う光学ドライブ装置を接続することができる。光ディスクは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等がある。
【００５６】
また、入出力インタフェース１０２は、メモリ装置やメモリリーダライタを接続することができる。メモリ装置は、入出力インタフェース１０２との通信機能を搭載した記録媒体である。メモリリーダライタは、メモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しを行う装置である。メモリカードは、カード型の記録媒体である。
【００５７】
ネットワークインタフェース１０４は、例えば、ＮＩＣ（Network Interface Card）、無線ＬＡＮ（Local Area Network）カード等である。ネットワークインタフェース１０４で受信されたデータ等は、プロセッサ１００に出力される。
【００５８】
以上のようなハードウェア構成によって、ＳＤＮコントローラ１０の処理機能を実現することができる。例えば、ＳＤＮコントローラ１０は、プロセッサ１００がそれぞれ所定のプログラムを実行することで試験を行うことができる。
【００５９】
ＳＤＮコントローラ１０は、例えば、コンピュータで読み取り可能な記録媒体に記録されたプログラムを実行することにより、本発明の処理機能を実現する。ＳＤＮコントローラ１０に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。
【００６０】
例えば、ＳＤＮコントローラ１０に実行させるプログラムを補助記憶装置に格納しておくことができる。プロセッサ１００は、補助記憶装置内のプログラムの少なくとも一部を主記憶装置にロードし、プログラムを実行する。また、光ディスク、メモリ装置、メモリカード等の可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えば、プロセッサ１００からの制御により、補助記憶装置にインストールされた後、実行可能となる。またプロセッサ１００が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００６１】
＜ＳＤＮコントローラの機能ブロック＞
図１０はＳＤＮコントローラの機能ブロックの一例を示す図である。ＳＤＮコントローラ１０は、フローエントリ受信部１１、フローテーブルＤＢ（Data Base）１２、集約部１３および通信装置設定部１４を備える。また、集約部１３は、重なり度付与部１３ａ、集約判定部１３ｂ、優先度決定部１３ｃおよび重なり度付与フローテーブルＤＢ１３ｄを含む。
【００６２】
フローエントリ受信部１１は、アプリケーションから送信されたフローエントリを受信し、受信したフローエントリをフローテーブルＤＢ１２へ送信する。
集約部１３は、フローテーブルＤＢ１２に記憶されているフローテーブル形式のフローエントリに対して、フローエントリの集約が可能か否かを判断し、集約可能なフローエントリを削減して集約処理を行う。また、集約部１３は、集約後のフローエントリをフローテーブルＤＢ１２へ送信する。
【００６３】
フローテーブルＤＢ１２は、フローエントリ受信部１１または集約部１３から送信されたフローエントリをフローテーブルの形式で記憶する。通信装置設定部１４は、フローテーブルＤＢ１２で記憶されているフローエントリを所定の通信装置２０２に送信して通信装置２０２の動作設定を行う。
【００６４】
また、重なり度付与部１３ａは、フローテーブルのエントリ数を削減するために、エントリ間の重なり度をエントリに付与する。集約判定部１３ｂは、重なり度にもとづいて所定のエントリを削除してエントリの集約を行う。優先度決定部１３ｃは、集約されたフローエントリに対して優先度を決定する。重なり度付与フローテーブルＤＢ１３ｄは、重なり度が付与されたフローテーブルを記憶する。
【００６５】
＜集約部の全体動作＞
図１１は集約部の全体動作を示すフローチャートである。
〔ステップＳ１〕重なり度付与部１３ａは、重なり度付与処理として、MatchとActionの組み合わせに対して、Matchの条件が包含される度合いを表す重なり度を付与する。
【００６６】
〔ステップＳ２〕集約判定部１３ｂは、集約判定処理として、重なり度が付与されたフローテーブルから集約可能なエントリを判定して該当エントリを削除し集約する。
〔ステップＳ３〕優先度決定部１３ｃは、優先度決定処理として、集約した結果と重なり度にもとづいて優先度（Priority）を決定する。
【００６７】
＜重なり度付与処理＞
次に重なり度付与処理について説明する。重なり度付与部１３ａは、エントリが包含される度合いを表す数値である重なり度を設定し、エントリ間の重なり方を明らかにする。重なり度の付与方法としては、登録されたフローテーブル全体に付与する場合と、新規登録されたエントリ毎に順次付与する場合とがある。
【００６８】
まず、フローテーブル全体に重なり度を付与する場合の重なり度付与処理について図１２、図１３を用いて説明する。図１２は重なり度付与処理の一例を示す図である。フローテーブル１２０には、以下の内容が設定されている。
【００６９】
・エントリ＃１：（Match、Action）＝（src=host、drop）
・エントリ＃２：（Match、Action）＝（src=host，dst=server、output:port２）
・エントリ＃３：（Match、Action）＝（src=host，dst=server，tcp＿port=ssh、drop）
重なり度付与部１３ａは、Matchの条件数が最も少ないものを検出し、重なり度が付与されていなければ重なり度１を設定する。フローテーブル１２０において、エントリ＃１のMatchの条件は“src=host”の１つであり、Matchの条件数が最も少ない。したがって、重なり度付与部１３ａは、エントリ＃１に重なり度１を付与する。フローテーブル１２１は、重なり度１が付与された状態を示している。
【００７０】
次に、重なり度付与部１３ａは、Matchの条件数が２番目に少ないエントリ＃２を検出し、エントリ＃２を包含するエントリ＃１の重なり度が１であるからエントリ＃２の重なり度に２を付与する。すなわち、重なり度付与部１３ａは、重なり度１に包含されるエントリ（重なり度１のMatchの条件とすべて共通するエントリ）を重なり度２とする。
【００７１】
フローテーブル１２１において、エントリ＃２のMatchの条件は“src=host，dst=server”であり、Matchの条件数が２番目に少ない。したがって、重なり度付与部１３ａは、エントリ＃２に重なり度２を付与する。フローテーブル１２２は、重なり度２が付与された状態を示している。
【００７２】
さらに、重なり度付与部１３ａは、Matchの条件数が３番目に少ないエントリ＃３を検出し、エントリ＃３を包含するエントリ＃２の重なり度が２であるからエントリ＃３の重なり度に３を付与する。すなわち、重なり度付与部１３ａは、重なり度２に包含されるエントリ（重なり度２のMatchの条件とすべて共通するエントリ）を重なり度３とする。
【００７３】
フローテーブル１２２において、エントリ＃３のMatchの条件はsrc=host、dst=server、tcp＿port=sshであり、Matchの条件数が３番目に少ない。したがって、重なり度付与部１３ａは、エントリ＃３に重なり度３を付与する。フローテーブル１２３は、重なり度３が付与された状態を示している。
【００７４】
このように、重なり度付与部１３ａは、Matchの条件数が少ないものを順次検出し、重なり度１に包含されるエントリを重なり度２、重なり度２に包含されるエントリを重なり度３といった具合に順次重なり度を付与していく。
【００７５】
なお、重なり度３のエントリ＃３は、重なり度１のエントリ＃１にも包含されているが、重なり度付与部１３ａは、包含されるエントリの中で重なり度が最も高い値に１を加算するものとする。
【００７６】
すなわち、この例では、エントリ＃３は、エントリ＃１、＃２に包含されるが、包含されるエントリ＃１、＃２の中で重なり度が高いのはエントリ＃２であり、エントリ＃２の重なり度は２であるから、エントリ＃３の重なり度は３（＝２＋１）になる。
【００７７】
図１３は重なり度付与処理の動作を示すフローチャートである。
〔ステップＳ１０ａ−１〕重なり度付与部１３ａは、重なり度が付与されていないエントリをフローテーブルＤＢ１２から検出する。
【００７８】
〔ステップＳ１０ａ−２〕重なり度付与部１３ａは、重なり度が付与されていないエントリの中から、Matchの条件数が最も少ないエントリを検出する。
〔ステップＳ１０ａ−３〕重なり度付与部１３ａは、検出したエントリに重なり度１を付与する。
【００７９】
〔ステップＳ１１ａ〕重なり度付与部１３ａは、すべてのエントリに重なり度を付与したか判断する。すべてのエントリに重なり度を付与した場合は処理が終了し、付与していない場合はステップＳ１２ａへ処理が進む。
【００８０】
〔ステップＳ１２ａ〕重なり度付与部１３ａは、重なり度が付与されていないエントリの中から、Matchの条件数が次に少ないエントリを検出する。
〔ステップＳ１３ａ〕重なり度付与部１３ａは、検出したエントリの内、フローエントリのインデクスが最も小さいエントリを付与対象に設定する。
【００８１】
〔Ｓ１４ａ〕重なり度付与部１３ａは、付与対象のエントリを包含する他のエントリがあるか判断する。他のエントリがあればステップＳ１６ａへ処理が進み、他のエントリがなければステップＳ１５ａへ処理が進む。
【００８２】
〔Ｓ１５ａ〕重なり度付与部１３ａは、付与対象のエントリに重なり度１を付与する。
〔Ｓ１６ａ〕重なり度付与部１３ａは、包含する他エントリの重なり度の中で最も大きい重なり度の値を取得する。
【００８３】
〔Ｓ１７ａ〕重なり度付与部１３ａは、取得した値に１加算した値を重なり度として付与する。
〔Ｓ１８ａ〕重なり度付与部１３ａは、検出したエントリにすべて重なり度を付与したか判断する。すべて重なり度を付与した場合はステップＳ１１ａへ処理が戻り、付与していない場合はステップＳ１９ａへ処理が進む。
【００８４】
〔Ｓ１９ａ〕重なり度付与部１３ａは、検出したエントリの内で次にインデクスが小さいエントリを付与対象に設定する。ステップＳ１４ａの処理へ戻る。
以上のように、重なり度付与部１３ａは、重なり度の付与対象エントリのMatchの条件を包含する包含エントリがフローテーブル内にない場合、重なり度の最小値を付与対象エントリに付与する（図１２の例では、エントリ＃１に重なり度１が付与されている）。
【００８５】
また、重なり度付与部１３ａは、付与対象エントリのMatchの条件を包含する包含エントリがフローテーブル内にある場合、包含エントリに付与されている重なり度の最大値に所定値を加算した値を、付与対象エントリに付与する。
【００８６】
図１２の例では、エントリ＃３を付与対象エントリとすると、エントリ＃３のMatchの条件を包含するエントリ＃１、＃２がフローテーブル１２２内にあり、エントリ＃１、＃２に付与されている重なり度の最大値は２であるから、これに１（所定値）を加算した重なり度３がエントリ＃３に付与される。
【００８７】
このような重なり度付与処理が行われることによって、フローテーブル全体に対して、エントリ間のMatchの条件の包含関係を明確にすることができる。
次に重なり度を順次付与する場合の重なり度付与処理について、図１４から図１６を用いて説明する。図１４は重なり度付与処理の一例を示す図である。フローテーブル１３０は、エントリ＃１が１つの状態であり、エントリ＃１には（Match、Action）＝（src=host、drop）が登録されている。
【００８８】
重なり度付与部１３ａは、フローテーブル１３０に対して、付与対象のエントリ＃１を包含するエントリがないため重なり度１を設定する。また、エントリ＃１は、他のエントリを包含しない。よって、フローテーブル１３０のエントリ＃１に対して重なり度１が付与されたフローテーブル１３１が生成される。
【００８９】
次にフローテーブル１３１にエントリ＃３が追加されたとする。エントリ＃３には（Match、Action）＝（src=host，dst=server，tcp＿port=ssh、drop）が登録されている。重なり度付与部１３ａは、エントリ＃３が追加されると包含関係にあるエントリを検出する。
【００９０】
重なり度の付与対象のエントリ＃３は、エントリ＃１に包含されるため、重なり度付与部１３ａは、エントリ＃１の重なり度１を取得し、これに１を加算して、エントリ＃３に対して重なり度２を付与する。また、エントリ＃３は他のエントリを包含しない。よって、フローテーブル１３１に対して、重なり度２のエントリ＃３が付与されたフローテーブル１３２が生成される。
【００９１】
次にフローテーブル１３２にエントリ＃２が追加されたとする。エントリ＃２には（Match、Action）＝（src=host，dst=server、output:port2）が登録されている。重なり度付与部１３ａは、エントリ＃２が追加されると包含関係にあるエントリを検出する。
【００９２】
重なり度の付与対象のエントリ＃２は、エントリ＃１に包含されるため、重なり度付与部１３ａは、エントリ＃１の重なり度１を取得し、これに１を加算して、エントリ＃２に対して重なり度２とする。
【００９３】
また、重なり度付与部１３ａは、エントリ＃２は他のエントリ＃３を包含し、エントリ＃２、＃３との重なり度が同じ（重なり度＝２）であることを検出する。このため、重なり度付与部１３ａは、包含される側のエントリ＃３の重なり度に１加算して重なり度３と更新する。このような処理が行われることで、重なり度１のエントリ＃１、重なり度２のエントリ＃２および重なり度３のエントリ＃３を含むフローテーブル１３３が生成される。
【００９４】
図１５は重なり度を表すベン図を示している。領域ｒ１は包含されるエントリがないので重なり度は１である。領域ｒ１に含まれる領域ｒ２は、重なり度１のエントリに包含されるので重なり度２となる。領域ｒ２に含まれる領域ｒ３は、重なり度２のエントリに包含されるので重なり度３となる。
【００９５】
図１６は重なり度付与処理の動作を示すフローチャートである。
〔ステップＳ１０ｂ〕重なり度付与部１３ａは、付与対象のエントリを包含するエントリがあるか判断する。該当エントリがある場合は処理がステップＳ１２ｂへ進み、該当エントリがない場合は処理がステップＳ１１ｂへ進む。
【００９６】
〔ステップＳ１１ｂ〕重なり度付与部１３ａは、重なり度１を付与する。
〔ステップＳ１２ｂ〕重なり度付与部１３ａは、包含するエントリを検出し、その中で最大の重なり度の値を取得する。
【００９７】
〔ステップＳ１３ｂ〕重なり度付与部１３ａは、取得した値に１加算した値を重なり度としてエントリに付与する。
〔ステップＳ１４ｂ〕重なり度付与部１３ａは、付与対象のエントリは他のエントリを包含するか判断する。包含する場合はステップＳ１５ｂへ処理が進み、包含しない場合は終了する。
【００９８】
〔ステップＳ１５ｂ〕重なり度付与部１３ａは、包含する他のエントリの内、付与対象の重なり度と同じ値か判断する。同じ値の場合はステップＳ１６ｂへ処理が進み、同じ値でない場合は終了する。
【００９９】
〔ステップＳ１６ｂ〕重なり度付与部１３ａは、包含する他のエントリから付与対象と同じ重なり度のエントリを検出する。
〔ステップＳ１７ｂ〕重なり度付与部１３ａは、ステップＳ１６ｂで検出されたエントリおよびステップＳ１６ｂで検出されたエントリに包含されるエントリの重なり度に１加算して更新する。
【０１００】
以上のように、重なり度付与部１３ａは、フローテーブルに追加された追加フローエントリのMatchの条件を包含する包含エントリがフローテーブル内にない場合、重なり度の最小値を追加フローエントリに付与する（図１４の例では、エントリ＃１に重なり度１が付与されている）。
【０１０１】
また、重なり度付与部１３ａは、追加フローエントリのMatchの条件を包含する包含エントリがフローテーブル内にある場合、包含エントリに付与されている重なり度の最大値に所定値を加算した値を、追加フローエントリに付与する。
【０１０２】
図１４の例では、追加エントリ＃３のMatchの条件を包含するエントリ＃１がフローテーブル１３２内にあり、エントリ＃１に付与されている重なり度の最大値は１であるから、これに１（所定値）を加算した重なり度２がエントリ＃３に付与される。
【０１０３】
さらに、重なり度付与部１３ａは、追加フローエントリに包含される被包含エントリがフローテーブル内にあり、被包含フローエントリの重なり度が、追加エントリに付与した重なり度の値と同じ場合、被包含フローエントリの重なり度に定数を加算する。
【０１０４】
図１４の例では、追加エントリ＃２に包含される被包含エントリとしてエントリ＃３がフローテーブル１３３内にあり、エントリ＃３の重なり度が、追加エントリ＃２に付与した重なり度２と同じなので、エントリ＃３の重なり度に１を加算して更新される。
【０１０５】
このような重なり度付与処理が行われることによって、フローテーブルのエントリが順次追加されてフローテーブルが生成されるような場合にも、エントリ間のMatchの条件の包含関係を明確にすることができる。
【０１０６】
＜集約判定処理＞
次に集約判定処理について説明する。集約判定部１３ｂは、フローテーブルにおいて、重なり度が隣接するエントリ同士（重なり度の差が１になるエントリ同士）で以下の条件を満たすか判定する。
【０１０７】
（第１の集約判定条件）着目エントリ（集約元候補エントリ）の重なり度よりも所定値小さい（例えば、１小さい）重なり度が付与された集約先候補エントリに対し、集約先候補エントリのMatchの条件が集約元候補エントリのMatchの条件を包含し、かつ集約元候補エントリのActionと集約先候補エントリのActionとが同じである。
【０１０８】
（第２の集約判定条件）集約先候補エントリのMatchの条件を含み、集約元候補エントリの重なり度と同じ重なり度が付与されている集約元候補エントリであって、集約元候補エントリが複数ある場合は、複数の集約元候補エントリのすべてが同じActionを有していること。
【０１０９】
集約判定部１３ｂは、上記の２つの条件を共に満たすエントリの組を検出すると、重なり度の高い（条件範囲の小さい）方のエントリを削除する。
図１７は集約判定処理を行った際に集約不可と判定される例を示す図である。フローテーブル１４０には以下の内容が登録されている。
【０１１０】
・エントリ＃１：（Match、Action、重なり度）＝（src=host、drop、１）
・エントリ＃２：（Match、Action、重なり度）＝（src=host，dst=server、output:port２、２）
・エントリ＃３：（Match、Action、重なり度）＝（src=host，dst=server，tcp＿port=ssh、drop、３）
エントリ＃２、＃３の集約判定に対し、エントリ＃２のMatchの条件はエントリ＃３のMatchの条件を包含するが、エントリ＃２、＃３のActionは互いに異なる（第１の集約判定条件を満たさない）。したがって、エントリ＃２、＃３は、集約不可と判定される。
【０１１１】
エントリ＃２、＃１の集約判定に対し、エントリ＃１のMatchの条件はエントリ＃２のMatchの条件を包含するが、エントリ＃１、＃２のActionは互いに異なる（第１の集約判定条件を満たさない）。したがって、エントリ＃２、＃１は、集約不可と判定される。
【０１１２】
また、集約判定部１３ｂは、集約不可と判定したフローテーブルについては集約を行わず保存する（上述の集約を失敗するようなエントリに対しては集約を行わずに元のフローテーブルが保存される）。
【０１１３】
図１８は集約判定処理を行った際に集約可能と判定される例を示す図である。フローテーブル１５０には以下の内容が登録されている。
・エントリ＃１：（Match、Action、重なり度）＝（src=host、drop、１）
・エントリ＃２：（Match、Action、重なり度）＝（src=host，dst=server、output:port２、２）
・エントリ＃３：（Match、Action、重なり度）＝（src=host，dst=server，tcp＿port=ssh、output:port２、３）
エントリ＃２、＃３の集約判定に対し、第１の集約判定条件が満たされる。すなわち、集約元候補エントリ＃３の重なり度３よりも１小さい重なり度２が付与された集約先候補エントリ＃２に対し、集約先候補エントリ＃２のMatchの条件が集約元候補エントリ＃３のMatchの条件を包含し、かつ集約元候補エントリ＃３のActionと集約先候補エントリ＃２のActionとが同じである。また、エントリ＃２、＃３の集約判定に対し、集約元候補エントリはエントリ＃３のみなので、第２の集約判定条件も満たされる。したがって、エントリ＃２、＃３は、集約可能と判定される。
【０１１４】
一方、エントリ＃１、＃２の集約判定に対し、エントリ＃１のMatchの条件はエントリ＃２のMatchの条件を包含するが、エントリ＃１、＃２のActionは互いに異なる。したがって、エントリ＃１、＃２は、集約不可と判定される。
【０１１５】
フローテーブル１５１は、フローテーブル１５０の集約後のテーブルである。集約判定部１３ｂは、エントリ＃２、＃３は、集約可能と判定したため、重なり度が大きい方のエントリ＃３を削除し、さらに集約後のエントリには、集約結果の項目にフラグ（○）を立てる。
【０１１６】
図１９は集約判定処理の動作を示すフローチャートである。
〔ステップＳ２０ａ〕集約判定部１３ｂは、フローテーブル内で最大の重なり度の値を変数ｉに設定する。
【０１１７】
〔ステップＳ２１ａ〕集約判定部１３ｂは、着目エントリのMatchの条件を包含する重なり度ｉ−１のエントリがあるか判断する。該エントリがある場合はステップＳ２２ａへ処理が進み、該エントリがない場合は終了する。
【０１１８】
〔ステップＳ２２ａ〕集約判定部１３ｂは、重なり度ｉ−１のエントリを集約先候補に設定する。
〔ステップＳ２３ａ〕集約判定部１３ｂは、集約先候補のActionは、着目エントリのActionと同じか判断する。同じ場合はステップＳ２４ａへ処理が進み、同じでない場合は終了する。
【０１１９】
〔ステップＳ２４ａ〕集約判定部１３ｂは、集約先候補のMatchの条件を含む着目エントリの重なり度と同じ重なり度ｉを持つエントリのActionすべてが、着目エントリのActionと同じかを判断する。同じ場合はステップＳ２５ａへ処理が進み、同じでない場合は終了する。
【０１２０】
〔ステップＳ２５ａ〕集約判定部１３ｂは、集約先候補のMatchの条件を含む重なり度ｉのエントリを削除する。
〔ステップＳ２６ａ〕集約判定部１３ｂは、集約先候補の集約結果の項目にフラグを立てる。
【０１２１】
以上のように、集約判定部１３ｂは、上述の第１、第２の集約判定条件を共に満たす場合に、集約元候補エントリを削除して集約を行うことにより、元のフローテーブルによる動作を変えることなくフローエントリを集約することができる。
【０１２２】
＜優先度決定処理＞
次に優先度決定処理について説明する。優先度決定部１３ｃは、集約が施されたフローテーブルに対し、集約判定部１３ｂで設定された集約結果にもとづいて、所定の条件を満たすように優先度を決定する。
【０１２３】
具体的には、優先度決定部１３ｃは、集約していないエントリの場合（フラグが×のエントリの場合）、重なり度が大きいエントリほど高い値となるように優先度を設定する。
この場合、優先度決定部１３ｃは、例えば、以下の式（１）を用いて優先度を決定する。なお、ｋは重なり度、αは定数である。
【０１２４】
優先度＝ｋ×α・・・（１）
また、優先度決定部１３ｃは、集約したエントリの場合（フラグが○のエントリの場合）、集約して削除したエントリの重なり度に１加算した重なり度を持つエントリの優先度よりも小さく、かつ集約して残したエントリの優先度よりも大きくなるように優先度を設定する。
【０１２５】
この場合、優先度決定部１３ｃは、例えば、以下の式（２）を用いて優先度を決定する。なお、ｋは重なり度、αは定数、βはオフセットである（２α＞β＞０）。
優先度＝ｋ×α＋β・・・（２）
図２０は優先度決定処理の一例を示す図である。集約判定処理後のフローテーブル１５１（図１８に示した同じテーブル）に対する優先度決定処理を示す。なお、α＝１０００、β＝５００とする。
【０１２６】
優先度決定部１３ｃは、エントリ＃１の優先度を決定する場合、エントリ＃１は集約していないエントリなので、式（１）を用いて優先度を１０００と決定する。
また、優先度決定部１３ｃは、エントリ＃２の優先度を決定する場合、エントリ＃２は集約しているエントリなので、式（２）を用いて優先度を２５００と決定する。
【０１２７】
フローテーブル１５２は、初期のフローテーブル１５０が最終的に集約されたテーブルとなる。削除されたエントリ＃３のMatchの条件を含むパケットに対しても、フローテーブル１５２によってoutput:port２の処理が行われる。
【０１２８】
図２１はフローエントリ集約を行った場合のベン図である。ベン図ｖ４は、フローテーブル１５０に対応している。また、ベン図ｖ４−１は、集約後のフローテーブル１５２に対応しており、（src=host，dst=server，tcp＿port=ssh）のパケットに対するoutput:port２の処理が、集約後も変わっていない状態を示している。
【０１２９】
図２２は優先度決定処理の動作を示すフローチャートである。
〔Ｓ３１ａ〕優先度決定部１３ｃは、集約したフローテーブル内のエントリが集約したエントリか否かを判断する。集約したエントリの場合はステップＳ３３ａへ処理が進み、集約していないエントリの場合はステップＳ３２ａへ処理が進む。
【０１３０】
〔Ｓ３２ａ〕優先度決定部１３ｃは、式（１）で優先度を決定する。
〔Ｓ３３ａ〕優先度決定部１３ｃは、式（２）で優先度を決定する。
以上のように、優先度決定部１３ｃは、未集約エントリと集約済みエントリそれぞれに個別の優先度決定処理を行うので、元のフローテーブルの優先度を変えることなく集約後のエントリに優先度を設定することができる。
【０１３１】
＜再集約したフローテーブルの優先度決定処理＞
集約判定部１３ｂは、一度集約したフローテーブルに対して再度集約を行うことでフローエントリの削減数を増やす。この場合、優先度決定部１３ｃは、再度集約したフローエントリに対して優先度決定処理を行うが、集約したエントリについては集約試行回数の条件を加えて優先度を算出する。
【０１３２】
具体的には、優先度決定部１３ｃは、集約したエントリの場合（フラグが○のエントリの場合）、集約して削除したエントリの重なり度に１加算した重なり度を持つエントリの優先度よりも小さく、かつ集約して残したエントリの優先度よりも大きくなるように優先度を設定する。さらに、優先度決定部１３ｃは、同じ重なり度の値のエントリに対しては、集約可能と判定されたときの集約試行回数が少ないエントリほど大きい値になるように優先度を設定する。
【０１３３】
優先度決定部１３ｃは、例えば、以下の式（２ａ）で優先度を決定する。なお、ｋは重なり度、ｎは集約試行回数、αは定数、βはオフセットである（２α＞β＞０）。
優先度＝ｋ×α＋（β／ｎ）・・・（２ａ）
図２３は優先度決定処理の動作を示すフローチャートである。
【０１３４】
〔Ｓ３１ｂ〕優先度決定部１３ｃは、集約したフローテーブル内のエントリが集約したエントリか否かを判断する。集約したエントリの場合はステップＳ３３ｂへ処理が進み、集約していないエントリの場合はステップＳ３２ｂへ処理が進む。
【０１３５】
〔Ｓ３２ｂ〕優先度決定部は、式（１）で優先度を決定する。
〔Ｓ３３ｂ〕優先度決定部は、式（２ａ）で優先度を決定する。
以上のように、優先度決定部１３ｃは、再度集約したフローエントリに対しては、集約試行回数を加味して優先度決定処理を行うので、元のフローテーブルの優先度を変えることなく集約後のエントリに優先度を設定することができる。
【０１３６】
＜重なり度の差が２以上の集約判定処理＞
上記の集約判定処理では重なり度の差を１としたが、以下の４つの条件をすべて満たす場合は、集約判定部１３ｂは、重なり度の差が２以上の場合でも集約判定処理を行う。
【０１３７】
（第１の条件）着目エントリ（集約元候補エントリ）の重なり度と、集約先候補エントリの重なり度との間にある重なり度が付与されたエントリのMatchの条件は、着目エントリのMatchの条件を包含しないこと。
【０１３８】
（第２の条件）着目エントリの重なり度よりも小さい重なり度が付与された集約先候補エントリに対し、集約先候補エントリのMatchの条件が集約元候補エントリのMatchの条件を包含し、かつ同じActionであること。
【０１３９】
（第３の条件）集約先候補エントリのMatchの条件を含み、集約元候補エントリの重なり度と同じ重なり度が付与されている集約元候補エントリであって、集約元候補エントリが複数ある場合は、複数の集約元候補エントリのすべてが同じActionを有していること。
【０１４０】
（第４の条件）集約先候補エントリは、集約先候補エントリに付与される重なり度を持つエントリの中で最大のPriorityが決定されていること。
図２４は重なり度の差が２以上の集約判定処理の動作を示すフローチャートである。なお、変数ｉは、着目エントリの重なり度、変数ｊは、着目エントリと集約先候補との重なり度の差分を表す変数である。
【０１４１】
〔ステップＳ２０ｂ〕集約判定部１３ｂは、変数ｊに初期値１を設定する。
〔ステップＳ２１ｂ〕集約判定部１３ｂは、着目エントリのMatchの条件を包含する重なり度ｉ−ｊのエントリがあるか判断する。該エントリがある場合はステップＳ２３ｂへ処理が進み、該エントリがない場合ステップＳ２２ｂへ処理が進む。
【０１４２】
〔ステップＳ２２ｂ〕集約判定部１３ｂは、ｊの値を１増やす。
〔ステップＳ２２ｂ−１〕集約判定部１３ｂは、ｉ−ｊ＝１か判断する。１の場合は、終了し、１でない場合はステップＳ２１ｂへ処理が戻る。
【０１４３】
〔ステップＳ２３ｂ〕集約判定部１３ｂは、重なり度ｉ−ｊのエントリを集約先候補に設定する。
〔ステップＳ２４ｂ〕集約判定部１３ｂは、集約先候補のActionは、着目エントリのActionと同じか判断する。同じ場合はステップＳ２５ｂへ処理が進み、同じでない場合は終了する。
【０１４４】
〔ステップＳ２５ｂ〕集約判定部１３ｂは、集約先候補のMatchの条件を含む着目エントリの重なり度と同じ重なり度ｉを持つエントリのActionすべてが、着目エントリのActionと同じかを判断する。同じ場合はステップＳ２６ｂへ処理が進み、同じでない場合は終了する。
【０１４５】
〔ステップＳ２６ｂ〕集約判定部１３ｂは、集約先候補エントリのPriorityは同じ重なり度のエントリ内の着目エントリのMatchの条件を持つエントリ内で最大か判断する。最大の場合はステップＳ２７ｂへ処理が進み、最大でない場合は終了する。
【０１４６】
〔ステップＳ２７ｂ〕集約判定部１３ｂは、集約先候補のMatchの条件を含む重なり度ｉのフローエントリを削除する。
以上のように、集約判定部１３ｂは、上述の第１−第４の条件をすべて満たす場合に、重なり度の差が２以上の集約判定処理を行うことにより、元のフローテーブルによる動作を変えることなくフローエントリを集約することができる。
【０１４７】
次に第２の実施の形態の動作について具体例を挙げて説明する。まず、第２の実施の形態のＳＤＮコントローラ１０がフローエントリを設定する際のネットワークの構成例について説明する。
【０１４８】
図２５はネットワーク構成の一例を示す図である。ネットワーク２００ａは、ＳＤＮコントローラ１０、ホスト２０１、通信装置（スイッチ）２０２、サーバ２０３、サンドボックス２０４および制御ネットワーク２０５を備える。
【０１４９】
図２と異なる構成要素は、制御ネットワーク２０５であり、その他の構成は図２と同じである。制御ネットワーク２０５は、通信装置２０２の制御ポートと、ＳＤＮコントローラ１０と接続している。
【０１５０】
ネットワーク２００ａにおいて、フローエントリで使われるMatchの条件は４種類ある（この例では４種類としたが何種類あってもよい）。すなわち、dst＿macは宛先ＭＡＣアドレス、src＿macは送信元ＭＡＣアドレス、dst＿tcp＿portは宛先ＴＣＰポート、Ingress＿portはパケットが入ってきた通信装置２０２の物理ポートを表す。
【０１５１】
＜第１の動作例＞
次に第１の動作例について図２６から図３０を用いて説明する。図２６は初期状態のフローテーブルの構成の一例を示す図である。フローテーブルＴ１０には以下の内容が登録されている。
【０１５２】
・エントリ＃１：（Match、Action）＝（dst＿mac=00:00:00:00:00:01，src＿mac=00:00:00:00:00:02，dst＿tcp＿port=80、output:port２）
・エントリ＃２：（Match、Action）＝（dst＿mac=00:00:00:00:00:01，src＿mac=00:00:00:00:00:02、output:port２）
・エントリ＃３：（Match、Action）＝（dst＿mac=00:00:00:00:00:01、drop）
図２７はフローテーブルに対応するベン図である。ベン図ｖ1０は、フローテーブルＴ1０内のエントリ＃１−＃３の包含関係を示している。エントリ＃３は、他のエントリ＃１、＃２を包含するので（条件範囲が最も大きい）領域ｒ３に対応する。エントリ＃２は、エントリ＃３に包含され、エントリ＃１を包含するので領域ｒ２に対応する。エントリ＃１は、エントリ＃２、＃３に包含されるので（条件範囲が最も小さい）領域ｒ１に対応する。
【０１５３】
次に第１の動作例の重なり度付与処理について説明する。図２８は重なり度付与処理の一例を示す図である。フローテーブルＴ１０全体の重なり度付与処理を示している。
（１）重なり度付与部１３ａは、フローテーブルＴ１０の中から、Matchの条件数が最も少ないエントリ＃３を検出する。
【０１５４】
（２）重なり度付与部１３ａは、エントリ＃３に重なり度１を付与する。
（３）重なり度付与部１３ａは、エントリ＃３に包含されるエントリ＃１、＃２を検出する。
【０１５５】
（４）重なり度付与部１３ａは、エントリ＃１、＃２の中で最もMatchの条件数が少ないエントリ＃２を重なり度の付与対象に設定する。
（５）重なり度付与部１３ａは、エントリ＃２はエントリ＃３に包含されるため、エントリ＃３の重なり度１に１加算した重なり度２をエントリ＃２に付与する。
【０１５６】
（６）重なり度付与部１３ａは、次にMatchの条件数が少ないエントリとして、エントリ＃２に包含されるエントリ＃１を検出する。
（７）重なり度付与部１３ａは、エントリ＃１を重なり度の付与対象に設定する。
【０１５７】
（８）重なり度付与部１３ａは、エントリ＃１はエントリ＃２、＃３に包含され、エントリ＃２、＃３の重なり度の中で最も大きい重なり度は２であるから、重なり度２に１加算した重なり度３をエントリ＃１に付与する。
【０１５８】
（９）重なり度付与部１３ａは、フローテーブルＴ１０のエントリ＃１−＃３すべてに重なり度を付与したので重なり度付与処理を終了する。
次に第１の動作例の集約判定処理について説明する。図２９は集約判定処理の一例を示す図である。集約判定部１３ｂは、図２８で上述した重なり度付与処理によって重なり度が付与されたフローテーブルＴ１１に対して、重なり度の差が１のエントリ同士で集約可能か判定して、集約結果のフラグを編集する。
【０１５９】
（１）集約判定部１３ｂは、フローテーブルＴ１１の中で最大の重なり度３に着目し、重なり度３のエントリ＃１を着目エントリ（集約元候補）に設定する。
（２）集約判定部１３ｂは、重なり度２を持つエントリの内、エントリ＃１のMatchの条件を包含するエントリとしてエントリ＃２を検出し、エントリ＃２を集約先候補に設定する。
【０１６０】
（３）集約判定部１３ｂは、エントリ＃１、＃２のActionは共に同じであることを検出する（この段階で第１の集約判定条件が満たされる）。
（４）集約判定部１３ｂは、重なり度３を持つエントリ＃１のMatch条件を含むエントリはエントリ＃２のみなので第２の集約判定第条件も満たすことを検出する。
【０１６１】
（５）集約判定部１３ｂは、エントリ＃１を集約可能と判定し、エントリ＃１を削除し、エントリ＃１の集約結果の欄にフラグ（○）を立てる。
（６）集約判定部１３ｂは、重なり度３のエントリをすべて判定したため、着目する重なり度を２に変更し、エントリ＃２を着目エントリ（集約元候補）に設定する。
【０１６２】
（７）集約判定部１３ｂは、重なり度１を持つエントリの内、エントリ＃２のMatchの条件を包含するエントリとしてエントリ＃３を検出し、エントリ＃３を集約先候補に設定する。
【０１６３】
（８）集約判定部１３ｂは、エントリ＃２、＃３のActionは互いに異なることを検出する（第１の集約判定条件を満たさない）。
（９）集約判定部１３ｂは、エントリ＃２を集約不可と判定する。
【０１６４】
（１０）集約判定部１３ｂは、重なり度２のエントリをすべて判定したため、着目する重なり度を１に変更するが、集約判定をするエントリがこれ以上ないため、集約判定処理を終了する。なお、フローテーブルＴ１１ａは、集約可能か不可かを示した状態のテーブルであり、フローテーブルＴ１２は、集約後の状態を示している。
【０１６５】
次に第１の動作例の優先度決定処理について説明する。図３０は優先度決定処理の一例を示す図である。優先度決定部１３ｃは、図２９の集約判定処理で集約されたフローテーブルＴ１２に対して、各エントリの優先度を決定する。ここでは定数αを１０００、オフセットβを５００とする。
【０１６６】
優先度決定部１３ｃは、集約されたエントリ（フラグ○）を式（２）によりPriority＝２５００と算出し、集約不可のエントリ（フラグ×）を式（１）により、Priority＝１０００と算出してフローテーブルに設定する。
【０１６７】
フローテーブルＴ１３は、最終的に集約を完了した状態を示している。フローテーブルＴ１３において、削除されたエントリ＃３に適合するパケットに対しては、エントリ＃２の内容が適用され、output:port２の処理が実行されるため、元のフローテーブルの動作が変わっていない。
【０１６８】
＜第２の動作例＞
次に第２の動作例について図３１から図３５を用いて説明する。図３１は初期状態のフローテーブルの構成の一例を示す図である。フローテーブルＴ２０には以下の内容が登録されている。
【０１６９】
・エントリ＃１：（Match、Action）＝（dst＿mac=00:00:00:00:00:01，ingress＿port=port1，dst＿tcp＿port=22、output:port2，output:port3）
・エントリ＃２：（Match、Action）＝（dst＿mac=00:00:00:00:00:01，ingress＿port=port1、output:port3）
・エントリ＃３：（Match、Action）＝（dst＿mac=00:00:00:00:00:01，dst＿tcp＿port=22、drop）
・エントリ＃４：（Match、Action）＝（ingress＿port=port1，dst＿tcp＿port=22、drop）
・エントリ＃５：（Match、Action）＝（dst＿mac=00:00:00:00:00:01、output:port2）
・エントリ＃６：（Match、Action）＝（ingress＿port=port1、output:port3）
・エントリ＃７：（Match、Action）＝（dst＿tcp＿port=22、drop）
図３２はフローテーブルに対応するベン図である。ベン図ｖ２０は、フローテーブルＴ２０内のエントリ＃１−＃７の包含関係を示している。領域ｒ１はエントリ＃１に対応し、領域ｒ２はエントリ＃２に対応し、領域ｒ３はエントリ＃３に対応している。また、領域ｒ４はエントリ＃４に対応し、領域ｒ５はエントリ＃５に対応し、領域ｒ６はエントリ＃６に対応し、領域ｒ７はエントリ＃７に対応している。
【０１７０】
なお、ベン図内の縦線はoutput:port2のActionを示し、横線はdropのActionを示し、斜線はoutput:port3のActionを示す。
次に第２の動作例の重なり度付与処理について説明する。図３３は重なり度付与処理の一例を示す図である。フローテーブルＴ２０全体の重なり度付与処理を示している。
【０１７１】
（１）重なり度付与部１３ａは、フローテーブルＴ２０の中から、Matchの条件数が最も少ないエントリ（この例ではMatchの条件数＝１のエントリ）として、エントリ＃５、＃６、＃７を検出する。
【０１７２】
（２）重なり度付与部１３ａは、エントリ＃５、＃６、＃７に重なり度１を付与する。
（３）重なり度付与部１３ａは、エントリ＃５に着目し、エントリ＃５に包含されるエントリ＃１、＃２、＃３を検出し、エントリ＃１、＃２、＃３の中で、最もMatchの条件数が少ないエントリ（この例ではMatchの条件数＝２のエントリ）として、エントリ＃２、＃３を重なり度の付与対象に設定する。
【０１７３】
（３ａ）重なり度付与部１３ａは、エントリ＃２、＃３はエントリ＃５に包含されるため、エントリ＃５の重なり度１に１加算した重なり度２をエントリ＃２、＃３に付与する。
【０１７４】
（３ａ−１）重なり度付与部１３ａは、エントリ＃２に包含されるエントリの重なり度付与処理として、エントリ＃２に包含されるエントリ＃１を検出し、エントリ＃１を重なり度の付与対象に設定する。
【０１７５】
（３ａ−２）重なり度付与部１３ａは、エントリ＃１はエントリ＃２に包含されるため、エントリ＃２の重なり度２に１加算した重なり度３をエントリ＃１に付与する。
（３ｂ−１）重なり度付与部１３ａは、エントリ＃３に包含されるエントリの重なり度付与処理として、エントリ＃３に包含されるエントリ＃１を検出するが、エントリ＃１は重なり度付与済みであることを検出する。
【０１７６】
（４）重なり度付与部１３ａは、エントリ＃６に着目し、エントリ＃６に包含されるエントリ＃１、＃２、＃４を検出する。重なり度付与部１３ａは、エントリ＃１、＃２、＃４の中で、最もMatchの条件数が少ないエントリ（この例ではMatchの条件数＝２のエントリ）として、エントリ＃２、＃４を検出するが、エントリ＃２は重なり度付与済みであることを検出する。したがって、重なり度付与部１３ａは、エントリ＃４を重なり度の付与対象に設定する。
【０１７７】
（４ａ）重なり度付与部１３ａは、エントリ＃４はエントリ＃６に包含されるため、エントリ＃６の重なり度１に１加算した重なり度２をエントリ＃４に付与する。
（５）重なり度付与部１３ａは、エントリ＃７に着目し、エントリ＃７に包含されるエントリ＃１、＃３、＃４を検出するが、エントリ＃１、＃３、＃４は重なり度付与済みであることを検出する。
【０１７８】
（６）重なり度付与部１３ａは、すべてのエントリに重なり度が付与されたので処理を終了する。フローテーブルＴ２１は、重なり度が付与された状態のテーブルを示している。
【０１７９】
なお、上記の重なり度付与手順は、着目したエントリに包含されるエントリを順に見て重なり度付与を行うとしたが、Matchの条件数が少ない順に重なり度付与を行う場合は、以下のような処理手順になる。
【０１８０】
（１）重なり度付与部１３ａは、Matchの条件数が最も少ないエントリ＃５、＃６、＃７を検出する。
（２）重なり度付与部１３ａは、エントリ＃５、＃６、＃７に重なり度１を付与する。
【０１８１】
（３）重なり度付与部１３ａは、次にMatchの条件数が少ないエントリ＃２、＃３、＃４を検出し、インデクスの小さい順に重なり度付与対象を設定して包含関係を見ていく。
（３ａ）重なり度付与部１３ａは、エントリ＃２を付与対象に設定する。エントリ＃２は、重なり度１のエントリ＃５、＃６に包含されるので、重なり度付与部１３ａは、エントリ＃２に重なり度２を付与する。
【０１８２】
（３ｂ）重なり度付与部１３ａは、エントリ＃３を付与対象に設定する。エントリ＃３は、重なり度１のエントリ＃５、＃７に包含されるので、重なり度付与部１３ａは、エントリ＃３に重なり度２を付与する。
【０１８３】
（３ｃ）重なり度付与部１３ａは、エントリ＃４を付与対象に設定する。エントリ＃４は、重なり度１のエントリ＃６、＃７に包含されるので、重なり度付与部１３ａは、エントリ＃４に重なり度２を付与する。
【０１８４】
（４）重なり度付与部１３ａは、次にMatchの条件数が少ないエントリ＃１を検出する。
（５）重なり度付与部１３ａは、エントリ＃１を付与対象に設定する。エントリ＃１はエントリ＃２−＃７に包含されるが、その中で最も高い重なり度は重なり度２なので、重なり度付与部１３ａは、エントリ＃１には重なり度３を付与する。
【０１８５】
（６）重なり度付与部１３ａは、すべてのエントリに重なり度が付与されたので処理を終了する。
次に重なり度付与処理として順次付与処理を行った場合について説明する。エントリ＃７から降順にエントリを追加するとして、重なり度が順次付与される。
【０１８６】
（１）重なり度付与部１３ａは、生成されたエントリ＃７に対し、他のエントリがないためエントリ＃７に重なり度１を付与する。
（２）エントリ＃７にエントリ＃６が追加される。重なり度付与部１３ａは、エントリ＃６のMatchの条件を包含するエントリがないため、エントリ＃６に重なり度１を付与する。
【０１８７】
（３）エントリ＃６、＃７にエントリ＃５が追加される。重なり度付与部１３ａは、エントリ＃５のMatchの条件を包含するエントリがないため、エントリ＃５に重なり度１を付与する。
【０１８８】
（４）エントリ＃５−＃７にエントリ＃４が追加される。重なり度付与部１３ａは、エントリ＃４のMatchの条件はエントリ＃６、＃７に包含されるため、エントリ＃６、＃７の重なり度１に１加算した重なり度２をエントリ＃４に付与する。
【０１８９】
（５）エントリ＃４−＃７にエントリ＃３が追加される。重なり度付与部１３ａは、エントリ＃３のMatchの条件はエントリ＃５、＃７に包含されるため、エントリ＃５、＃７の重なり度１に１加算した重なり度２をエントリ＃３に付与する。
【０１９０】
（６）エントリ＃３−＃７にエントリ＃２が追加される。重なり度付与部１３ａは、エントリ＃２のMatchの条件はエントリ＃５、＃６に包含されるため、エントリ＃５、＃６の重なり度１に１加算した重なり度２をエントリ＃２に付与する。
【０１９１】
（７）エントリ＃２−＃７にエントリ＃１が追加される。重なり度付与部１３ａは、エントリ＃１のMatchの条件は、エントリ＃２−７すべてに包含されることを検出する。よって、重なり度付与部１３ａは、エントリ＃２−＃７の重なり度の中で、最も値の大きい重なり度２に１加算した重なり度３をエントリ＃１に付与する。
【０１９２】
次に第２の動作例の集約判定処理について説明する。図３４は集約判定処理の一例を示す図である。集約判定部１３ｂは、重なり度付与処理によって重なり度が付与されたフローテーブルに対して、重なり度の差が１のエントリ同士で集約可能か判定して、集約結果のフラグを編集する。
【０１９３】
（１）集約判定部１３ｂは、フローテーブルＴ２１の中で最大の重なり度３に着目し、重なり度３のエントリ＃１を着目エントリ（集約元候補）に設定する。
（２）集約判定部１３ｂは、重なり度２を持つエントリの内、エントリ＃１のMatchの条件を包含するエントリとしてエントリ＃２、＃３、＃４を検出する。
【０１９４】
（２ａ）集約判定部１３ｂは、エントリ＃２を集約先候補に設定して集約判定処理を実施する。
（２ａ−１）集約判定部１３ｂは、エントリ＃１、＃２のActionは異なることを検出する。すなわち、エントリ＃１の重なり度３よりも１小さい重なり度２のエントリ＃２は、エントリ＃１のMatchの条件を包含するが、エントリ＃１、＃２は同じActionではないので第１の集約判定条件を満たさないことが検出される。
【０１９５】
（２ｂ）集約判定部１３ｂは、エントリ＃３を集約先候補に設定して集約判定処理を実施する。
（２ｂ−１）集約判定部１３ｂは、エントリ＃１、＃３のActionは異なることを検出する。すなわち、エントリ＃１の重なり度３よりも１小さい重なり度２のエントリ＃３は、エントリ＃１のMatchの条件を包含するが、エントリ＃１、＃３は同じActionではないので第１の集約判定条件を満たさないことが検出される。
【０１９６】
（２ｃ）集約判定部１３ｂは、エントリ＃４を集約先候補に設定して集約判定処理を実施する。
（２ｃ−１）集約判定部１３ｂは、エントリ＃１、＃４のActionは異なることを検出する。すなわち、エントリ＃１の重なり度３よりも１小さい重なり度２のエントリ＃４は、エントリ＃１のMatchの条件を包含するが、エントリ＃１、＃４は同じActionではないので第１の集約判定条件を満たさないことが検出される。
【０１９７】
（３）集約判定部１３ｂは、エントリ＃１は集約不可と判定する。
（４）集約判定部１３ｂは、重なり度３のエントリ＃１を判定したため、着目する重なり度を２に変更する。そして、集約判定部１３ｂは、重なり度２内のエントリ＃２を着目エントリ（集約元候補）に設定する。
【０１９８】
（５）集約判定部１３ｂは、重なり度１を持つエントリの内、エントリ＃２のMatchの条件を包含するエントリとしてエントリ＃５、＃６を検出する。
（５ａ）集約判定部１３ｂは、エントリ＃５を集約先候補に設定して集約判定処理を実施する。
【０１９９】
（５ａ−１）集約判定部１３ｂは、エントリ＃２、＃５のActionは異なることを検出する。すなわち、エントリ＃２の重なり度２よりも１小さい重なり度１のエントリ＃５は、エントリ＃２のMatchの条件を包含するが、エントリ＃２、＃５は同じActionではないので第１の集約判定条件を満たさないことが検出される。
【０２００】
（５ｂ）集約判定部１３ｂは、エントリ＃６を集約先候補に設定して集約判定処理を実施する。
（５ｂ−１）集約判定部１３ｂは、エントリ＃２、＃６のActionは共に同じであることを検出する。すなわち、エントリ＃２の重なり度２よりも１小さい重なり度１のエントリ＃６は、エントリ＃２のMatchの条件を包含し、かつエントリ＃２、＃６は共に同じActionである。よって、集約判定部１３ｂは、エントリ＃６は第１の集約判定条件を満たすことを検出する。
【０２０１】
（５ｂ−２）集約判定部１３ｂは、重なり度２のエントリ内で、エントリ＃６のMatch条件に包含されるのはエントリ＃２、＃４であるが、エントリ＃２、＃４のActionは互いに異なることを検出する。
【０２０２】
すなわち、第１の集約判定条件を満たすエントリ＃６のMatch条件を含む、着目エントリ＃２の重なり度と同じ重なり度２のエントリにはエントリ＃２、＃４があり、エントリ＃２、＃４のActionは互いに異なる。よって、集約判定部１３ｂは、エントリ＃６は第２の集約判定条件を満たさないことを検出する。
【０２０３】
（６）集約判定部１３ｂは、重なり度２内のエントリ＃３を着目エントリ（集約元候補）に設定する。
（７）集約判定部１３ｂは、重なり度１を持つエントリの内、エントリ＃３のMatchの条件を包含するエントリとしてエントリ＃５、＃７を検出する。
【０２０４】
（７ａ）集約判定部１３ｂは、エントリ＃５を集約先候補に設定して集約判定処理を実施する。
（７ａ−１）集約判定部１３ｂは、エントリ＃３、＃５のActionは異なることを検出する。すなわち、エントリ＃３の重なり度２よりも１小さい重なり度１のエントリ＃５は、エントリ＃３のMatchの条件を包含するが、エントリ＃３、＃５は同じActionではないので第１の集約判定条件を満たさないことが検出される。
【０２０５】
（７ｂ）集約判定部１３ｂは、エントリ＃７を集約先候補に設定して集約判定処理を実施する。
（７ｂ−１）集約判定部１３ｂは、エントリ＃３、＃７のActionは共に同じであることを検出する。すなわち、エントリ＃３の重なり度２よりも１小さい重なり度１のエントリ＃７は、エントリ＃３のMatchの条件を包含し、かつエントリ＃３、＃７は共に同じActionである。よって、集約判定部１３ｂは、エントリ＃７は第１の集約判定条件を満たすことを検出する。
【０２０６】
（７ｂ−２）集約判定部１３ｂは、重なり度２のエントリ内で、エントリ＃７のMatch条件に包含されるのはエントリ＃３、＃４であり、エントリ＃３、＃４のActionは共に同じことを検出する。
【０２０７】
すなわち、第１の集約判定条件を満たすエントリ＃７のMatch条件を含む、着目エントリ＃３の重なり度と同じ重なり度２のエントリにはエントリ＃３、＃４があり、エントリ＃３、＃４のActionは同じである。よって、集約判定部１３ｂは、エントリ＃７は第２の集約判定条件を満たすことを検出する。
【０２０８】
（８）集約判定部１３ｂは、エントリ＃３、＃４をエントリ＃７に集約可能と判定し（この段階でエントリ＃４もエントリ＃７に集約可能と判定される）、エントリ＃３、＃４を削除し、エントリ＃７の集約結果の欄にフラグ（○）を立てる。
【０２０９】
（９）集約判定部１３ｂは、重なり度２のエントリをすべて判定したため、着目する重なり度を１に変更するが、集約判定をするエントリがこれ以上ないため、集約判定処理を終了する。なお、フローテーブルＴ２１ａは、集約可能か不可かを示した状態のテーブルであり、フローテーブルＴ２２は、集約後の状態を示している。なお、フローテーブルＴ２２中の“ｎ＝１”は集約試行回数が１回であることを示している。
【０２１０】
次に第２の動作例の優先度決定処理について説明する。図３５は優先度決定処理の一例を示す図である。優先度決定部１３ｃは、図３４の集約判定処理で集約されたフローテーブルＴ２２に対して、各エントリの優先度を決定する。ここでは定数αを１０００、オフセットβを５００とする。
【０２１１】
優先度決定部１３ｃは、集約されたエントリ（フラグ○）を式（２）によりPriority＝１５００と算出し、集約不可のエントリ（フラグ×）を式（１）によりPriorityを算出してフローテーブルに設定する。この場合、重なり度３のエントリ＃１はPriority＝３０００、重なり度２のエントリ＃２はPriority＝２０００、重なり度１のエントリ＃５、＃６はPriority＝１０００と算出される。
【０２１２】
フローテーブルＴ２３は、最終的に集約を完了した状態を示している。フローテーブルＴ２３において、削除されたエントリ＃３、＃４に適合するパケットに対しては、エントリ＃７の内容が適用され、dropの処理が実行されるため、元のフローテーブルの動作が変わっていない。
【０２１３】
＜第３の動作例＞
次に第３の動作例について図３６、図３７を用いて説明する。図３６は集約判定処理の一例を示す図である。集約判定部１３ｂは、図３５で上述した処理で集約されたフローテーブルＴ２３に対して再度集約を行う。
【０２１４】
（１）集約判定部１３ｂは、フローテーブルＴ２３ａの中で最大の重なり度３に着目し、重なり度３のエントリ＃１を着目エントリ（集約元候補）に設定する。
（２）集約判定部１３ｂは、重なり度２を持つエントリの内、エントリ＃１のMatchの条件を包含するエントリとしてエントリ＃２を検出する。
【０２１５】
（２ａ）集約判定部１３ｂは、エントリ＃２を集約先候補に設定して集約判定処理を実施する。
（２ａ−１）集約判定部１３ｂは、エントリ＃１、＃２のActionは異なることを検出する。すなわち、エントリ＃１の重なり度３よりも１小さい重なり度２のエントリ＃２は、エントリ＃１のMatchの条件を包含するが、エントリ＃１、＃２は同じActionではない。よって、集約判定部１３ｂは、エントリ＃２は第１の集約判定条件を満たさないことを検出する。
【０２１６】
（３）集約判定部１３ｂは、エントリ＃１は集約不可と判定する。
（４）集約判定部１３ｂは、重なり度３のエントリをすべて判定したため、着目する重なり度を２に変更する。そして、集約判定部１３ｂは、重なり度２内のエントリ＃２を着目エントリ（集約元候補）に設定する。
【０２１７】
（５）集約判定部１３ｂは、重なり度１を持つエントリの内、エントリ＃２のMatchの条件を包含するエントリとしてエントリ＃５、＃６を検出する。
（５ａ）集約判定部１３ｂは、エントリ＃５を集約先候補に設定して集約判定処理を実施する。
【０２１８】
（５ａ−１）集約判定部１３ｂは、エントリ＃２、＃５のActionは異なることを検出する。すなわち、エントリ＃２の重なり度２よりも１小さい重なり度１のエントリ＃５は、エントリ＃２のMatchの条件を包含するが、エントリ＃２、＃５は同じActionではない。よって、集約判定部１３ｂは、エントリ＃５は第１の集約判定条件を満たさないことを検出する。
【０２１９】
（５ｂ）集約判定部１３ｂは、エントリ＃６を集約先候補に設定して集約判定処理を実施する。
（５ｂ−１）集約判定部１３ｂは、エントリ＃２、＃６のActionは共に同じであることを検出する。すなわち、エントリ＃２の重なり度２よりも１小さい重なり度１のエントリ＃６は、エントリ＃２のMatchの条件を包含し、かつエントリ＃２、＃６は共に同じActionである。よって、集約判定部１３ｂは、エントリ＃６は第１の集約判定条件を満たすことを検出する。
【０２２０】
（５ｂ−２）集約判定部１３ｂは、重なり度２のエントリ内で、エントリ＃６のMatch条件に包含されるのはエントリ＃２であることを検出する。すなわち、第１の集約判定条件を満たすエントリ＃６のMatch条件を含む、着目エントリ＃２の重なり度と同じ重なり度２のエントリはエントリ＃２のみである。よって、集約判定部１３ｂは、エントリ＃６は第２の集約判定条件を満たすことを検出する。
【０２２１】
（６）集約判定部１３ｂは、エントリ＃２をエントリ＃６に集約可能と判定し、エントリ＃２を削除し、エントリ＃６の集約結果の欄にフラグ（○）と集約試行回数を立てる。
（７）集約判定部１３ｂは、重なり度２のエントリをすべて判定したため、着目する重なり度を１に変更するが、集約判定をするエントリがこれ以上ないため、集約判定処理を終了する。なお、フローテーブルＴ２４は、集約後の状態を示しており、フローテーブルＴ２４中の“ｎ＝２”は集約試行回数が２回であることを示している。
【０２２２】
次に第３の動作例の優先度決定処理について説明する。図３７は優先度決定処理の一例を示す図である。優先度決定部１３ｃは、図３６の集約判定処理で集約されたフローテーブルＴ２４に対して、各エントリの優先度を決定するが、ここではエントリ＃６のPriorityを再度算出する。
【０２２３】
すなわち、優先度決定部１３ｃは、集約試行が２回目以降の優先度の決定にはオフセットβに係数をかけ、試行回数を重ねるほど小さくなるようにする。この例では、係数を試行回数の逆数として、エントリ＃６のPriorityとして１２５０を算出する。
【０２２４】
フローテーブルＴ２５は、最終的に集約を完了した状態を示している。フローテーブルＴ２５において、削除されたエントリ＃２に適合するパケットに対しては、エントリ＃６の内容が適用され、output:port3の処理が実行されるため、元のフローテーブルの動作が変わっていない。
【０２２５】
＜第４の動作例＞
次に第４の動作例について図３８から図４１を用いて説明する。図３８はフローテーブルの構成の一例を示す図である。フローテーブルＴ３０には以下の内容が登録されている。なお、フローテーブルＴ３０はすでに集約が２回されているものとする。
【０２２６】
・エントリ＃１：（Match、Action、重なり度、Priority）＝（dst＿mac=00:00:00:00:00:01，ingress＿port=port1，dst＿tcp＿port=22、drop、3、3000）
・エントリ＃２：（Match、Action、重なり度、Priority）＝（dst＿mac=00:00:00:00:00:01、output:port2、1、1000）
・エントリ＃３：（Match、Action、重なり度、Priority）＝（ingress＿port=port1、output:port3、1、1250）
・エントリ＃４：（Match、Action、重なり度、Priority）＝（dst＿tcp＿port=22、drop、1、1500）
図３９はフローテーブルに対応するベン図である。ベン図ｖ３０は、フローテーブルＴ３０内のエントリ＃１−＃４の包含関係を示している。領域ｒ１はエントリ＃１に対応し、領域ｒ２はエントリ＃２に対応している。また、領域ｒ３はエントリ＃３に対応し、領域ｒ４はエントリ＃４に対応している。
【０２２７】
なお、ベン図内の縦線はoutput:port2のActionを示し、横線はdropのActionを示し、斜線はoutput:port3のActionを示す。
図４０は集約判定処理の一例を示す図である。重なり度の差が２以上で集約する場合の動作である。
【０２２８】
（１）集約判定部１３ｂは、フローテーブルＴ３０の中で最大の重なり度３に着目し、重なり度３のエントリ＃１を着目エントリ（集約元候補）に設定する。
（２）集約判定部１３ｂは、重なり度２のエントリがないことを検出すると、重なり度を１つ下げて、重なり度１を持つエントリの内、エントリ＃１のMatchの条件を包含するエントリとしてエントリ＃２、＃３、＃４を検出する。
【０２２９】
（２ａ）集約判定部１３ｂは、エントリ＃２を集約先候補に設定して集約判定処理を実施する。
（２ａ−１）集約判定部１３ｂは、エントリ＃１、＃２のActionは異なることを検出する。
【０２３０】
（３）集約判定部１３ｂは、エントリ＃２は集約不可と判定する。
（４）集約判定部１３ｂは、エントリ＃３を集約先候補に設定して集約判定処理を実施する。
【０２３１】
（４ａ−１）集約判定部１３ｂは、エントリ＃１、＃３のActionは異なることを検出する。
（５）集約判定部１３ｂは、エントリ＃４を集約先候補に設定して集約判定処理を実施する。
【０２３２】
（５ａ−１）集約判定部１３ｂは、エントリ＃１、＃４のActionは同じであることを検出する。
（５ａ−２）集約判定部１３ｂは、重なり度３のエントリ内で、エントリ＃４のMatch条件に包含されるのはエントリ＃１であることを検出する。
【０２３３】
（５ｂ−３）集約判定部１３ｂは、エントリ＃４は、重なり度１のエントリ内で最大のPriorityが設定されていることを検出する。
（６）集約判定部１３ｂは、エントリ＃１をエントリ＃４に集約可能と判定し、エントリ＃１を削除し、エントリ＃４の集約結果の欄にフラグ（○）と集約試行回数を立てる。
【０２３４】
（７）集約判定部１３ｂは、重なり度３のエントリをすべて判定したため、着目する重なり度を１に変更するが、集約判定をするエントリがこれ以上ないため、集約判定処理を終了する。なお、フローテーブルＴ３１は、集約後の状態を示しており、フローテーブルＴ３１中の“ｎ＝３”は集約試行回数が３回であることを示している。
【０２３５】
次に上記の集約判定処理の変形例について説明する。
（１）集約判定部１３ｂは、フローテーブルＴ３０の中で最大の重なり度３に着目し、重なり度３のエントリ＃１を着目エントリ（集約元候補）に設定する。
【０２３６】
（２）集約判定部１３ｂは、重なり度２のエントリがないことを検出すると、重なり度を１下げて、重なり度１を持つエントリの内、エントリ＃１のMatchの条件を包含するエントリとしてエントリ＃２、＃３、＃４を検出する。
【０２３７】
（３）集約判定部１３ｂは、エントリ＃２、＃３、＃４の中でPriorityが最も高いエントリ＃４を集約先候補に設定して集約判定処理を実施する。
（４）集約判定部１３ｂは、エントリ＃１、＃４のActionは同じであることを検出する。
【０２３８】
（５）集約判定部１３ｂは、重なり度３のエントリ内で、エントリ＃４のMatch条件に包含されるのはエントリ＃１であることを検出する。
（６）集約判定部１３ｂは、エントリ＃１をエントリ＃４に集約可能と判定し、エントリ＃１を削除し、エントリ＃４の集約結果の欄にフラグ（○）と集約試行回数を立てる。
【０２３９】
（７）集約判定部１３ｂは、重なり度３のエントリをすべて判定したため、着目する重なり度を１に変更するが、集約判定をするエントリがこれ以上ないため、集約判定処理を終了する。
【０２４０】
次に第４の動作例の優先度決定処理について説明する。図４１は優先度決定処理の一例を示す図である。優先度決定部１３ｃは、図４０の集約判定処理で集約されたフローテーブルに対して、各エントリの優先度を決定するが、ここではエントリ＃４のPriorityを再度算出する。
【０２４１】
すなわち、優先度決定部１３ｃは、集約試行が３回目以降の優先度の決定にはオフセットβに係数をかけ、試行回数を重ねるほど小さくなるようにする。この例では、係数を試行回数の逆数として、エントリ＃４のPriorityとして１６６７を算出する。
【０２４２】
フローテーブルＴ３２は、最終的に集約を完了した状態を示している。フローテーブルＴ３２において、削除されたエントリ＃１に適合するパケットに対しては、エントリ＃４の内容が適用され、dropの処理が実行されるため、元のフローテーブルの動作が変わっていない。
【０２４３】
以上説明したように、本発明によれば、競合解消したフローテーブルに対して、元のテーブルの動作を変えることなく、フローエントリ数を削減して集約することができる。これにより、通信装置でのフローテーブル検出にかける時間が短縮され、スループットの改善が図られる。
【０２４４】
上記で説明した本発明の情報処理装置およびＳＤＮコントローラの処理機能は、コンピュータによって実現することができる。その場合、情報処理装置およびＳＤＮコントローラが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【０２４５】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリ等がある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープ等がある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷ等がある。光磁気記録媒体には、ＭＯ（Magneto Optical disk）等がある。
【０２４６】
プログラムを流通させる場合、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２４７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。
【０２４８】
また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤ等の電子回路で実現することもできる。
【０２４９】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２５０】
１  情報処理装置
１ａ  記憶部
１ｂ  制御部
Ｔ０、Ｔ１、Ｔ２  フローテーブル
【図１】
2018117303.tif 000003
【図２】
2018117303.tif 000004
【図３】
2018117303.tif 000005
【図４】
2018117303.tif 000006
【図５】
2018117303.tif 000007
【図６】
2018117303.tif 000008
【図７】
2018117303.tif 000009
【図８】
2018117303.tif 000010
【図９】
2018117303.tif 000011
【図１０】
2018117303.tif 000012
【図１１】
2018117303.tif 000013
【図１２】
2018117303.tif 000014
【図１３】
2018117303.tif 000015
【図１４】
2018117303.tif 000016
【図１５】
2018117303.tif 000017
【図１６】
2018117303.tif 000018
【図１７】
2018117303.tif 000019
【図１８】
2018117303.tif 000020
【図１９】
2018117303.tif 000021
【図２０】
2018117303.tif 000022
【図２１】
2018117303.tif 000023
【図２２】
2018117303.tif 000024
【図２３】
2018117303.tif 000025
【図２４】
2018117303.tif 000026
【図２５】
2018117303.tif 000027
【図２６】
2018117303.tif 000028
【図２７】
2018117303.tif 000029
【図２８】
2018117303.tif 000030
【図２９】
2018117303.tif 000031
【図３０】
2018117303.tif 000032
【図３１】
2018117303.tif 000033
【図３２】
2018117303.tif 000034
【図３３】
2018117303.tif 000035
【図３４】
2018117303.tif 000036
【図３５】
2018117303.tif 000037
【図３６】
2018117303.tif 000038
【図３７】
2018117303.tif 000039
【図３８】
2018117303.tif 000040
【図３９】
2018117303.tif 000041
【図４０】
2018117303.tif 000042
【図４１】
2018117303.tif 000043