(57)【特許請求の範囲】
【請求項１】
パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、
前記複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、
前記複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと
を備え、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記コマンドが検索コマンドである場合、前記複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定し、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木処理ブロックの各々は、前記新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定し、
前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記エントリ追加対象決定ブロックは、前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択し、
前記選択されたエントリ追加対象は、前記新たなルールを、自身の決定木における前記追加対象葉ノードが管理するルールリストに追加する
パケット分類器。
【請求項２】
請求項１に記載のパケット分類器であって、
前記エントリ追加対象候補は、前記追加対象葉ノードが管理している有効なルールのエントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象決定ブロックは、前記エントリ数に基づいて、前記エントリ追加対象を選択する
パケット分類器。
【請求項３】
請求項２に記載のパケット分類器であって、
前記エントリ追加対象決定ブロックは、前記エントリ数が最小である前記エントリ追加対象候補を、前記エントリ追加対象として選択する
パケット分類器。
【請求項４】
請求項２又は３に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、自身の決定木の各葉ノードによって管理されている有効なルールのエントリ数を記憶するエントリ数記憶ブロックを備え、
前記エントリ追加対象候補は、前記追加対象葉ノードに関する前記エントリ数を前記エントリ数記憶ブロックから読み出し、前記読み出したエントリ数を前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象は、前記追加対象葉ノードに関する前記エントリ数に１を加算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
【請求項５】
請求項４に記載のパケット分類器であって、
前記コマンドが既存ルールを削除するための削除コマンドである場合、前記複数の決定木処理ブロックの各々は、前記既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定し、
前記既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロックはエントリ削除対象であり、当該単一の葉ノードは削除対象葉ノードであり、
前記エントリ削除対象は、前記既存ルールを無効化し、また、前記削除対象葉ノードに関する前記エントリ数から１を減算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
【請求項６】
請求項２又は３に記載のパケット分類器であって、
前記エントリ追加対象候補の各々は、前記追加対象葉ノードが管理するルールリストに前記新たなルールを一時的に追加する一時追加処理を行い、また、前記一時追加処理の最中に、当該ルールリスト中の有効なルールのエントリ数をカウントし、
前記エントリ追加対象候補の各々は、前記一時追加処理において得られた前記エントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記一時的に追加された新たなルールを無効化する追加エントリ無効化処理を行う
パケット分類器。
【請求項７】
請求項６に記載のパケット分類器であって、
前記一時追加処理において、前記エントリ追加対象候補の各々は、前記ルールリスト中で前記新たなルールが追加された位置を示す位置情報を前記挿入コマンドに書き込み、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記位置情報を参照することによって、ルールマッチングを行うことなく、前記追加エントリ無効化処理を行う
パケット分類器。
【請求項８】
請求項１乃至７のいずれか一項に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、
各決定木の段数と同じ段数の決定木ノード処理ブロックを備え、前記決定木ノード処理ブロックを用いることによって決定木の探索をパイプライン処理で行う決定木パイプラインブロックと、
各葉ノードにおいて管理可能なルール数と同じ段数のルール処理ブロックを備え、前記ルール処理ブロックを用いることによってルールの検索、追加及び削除をパイプライン処理で行うルールパイプラインブロックと
を備える
パケット分類器。
【請求項９】
複数の決定木を用いたパケット分類方法であって、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記パケット分類方法は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類方法。
【請求項１０】
複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムであって、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記パケット分類処理は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット分類（Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ）に関する。
【背景技術】
【０００２】
パケット分類（Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ）は、ネットワーク上のルータやスイッチにおいて、パケットをフローと呼ばれる一連の属性をもつパケット列に分類するための重要な技術である。パケット分類は、個々のフローに対するＱｏＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）の提供や、ファイヤウォール（Ｆｉｒｅｗａｌｌ）等のセキュリティといった、付加的な価値をもつネットワークアプリケーションの実現に重要な役割を果たす。
【０００３】
パケット分類では、パケットのヘッダに含まれている１つ以上のフィールドを用いて、「ルール（フィルタと呼ばれることもある）」が定義される。ルールは、例えば、パケットのＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ヘッダに定義されている送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコル番号に加え、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）ヘッダに定義されている送信ポート番号、宛先ポート番号といった複数のヘッダフィールドによって定義される。このようにルールが複数のヘッダフィールドを用いて定義されているパケット分類は、特に、Ｍｕｌｔｉ−Ｆｉｅｌｄ  Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎと呼ばれている。
【０００４】
通常、このようなルールは複数個定義される。パケットが到着すると、そのパケットヘッダからルールの定義に用いられているフィールド値が抽出される。抽出されたフィールド値の組が複数個のルールと比較され、どのルールにマッチするか判定されることにより、パケットがフローに分類される。ここで、到着したパケットのヘッダから抽出されたフィールド値の組を「検索キー」と呼ぶ。また、一般的には、各ルールに対して、優先度（Ｐｒｉｏｒｉｔｙ）とアクション（Ａｃｔｉｏｎ）とが定義される。検索キーが複数個のルールのうち、２つ以上のルールにマッチする場合には、優先度がより高いルールが選択される。また、アクションには、そのルールにマッチした場合に到着パケットをどのように扱うか（例えば、廃棄する、１番のポートに送信する等）が定義される。
【０００５】
また、ルールにおける各フィールドに対しては、ある特定の値として定義されるＥｘａｃｔ  Ｍａｔｃｈ、上位の複数ビットは特定されるが下位の数ビットはワイルドカード（ｗｉｌｄｃａｒｄ）‘＊’を用いて不定として定義されるＰｒｅｆｉｘ  Ｍａｔｃｈ、２つのある特定の値の範囲として定義するＲａｎｇｅ  Ｍａｔｃｈ、個々のビット単位にワイルドカードを指定して定義されるＷｉｌｄｃａｒｄ  Ｍａｔｃｈといった手法が用いられる。例えば、８ｂｉｔのフィールドを考えた場合、“００１１０１０１”のように特定値として指定されるものがＥｘａｃｔ  Ｍａｔｃｈ、“００１１＊＊＊＊”のように、“００１１”の４ｂｉｔから始まる値として指定されるものがＰｒｅｆｉｘ  Ｍａｔｃｈ、［３−６４］のように８ｂｉｔのフィールドが１０進数で考えた際に３から６４の範囲に入っていればよいとするものがＲａｎｇｅ  Ｍａｔｃｈ、“０＊＊１０＊０１”のようにビット単位でワイルドカードが使用できるものがＷｉｌｄｃａｒｄ  Ｍａｔｃｈである。
【０００６】
このようなＭｕｌｔｉ−Ｆｉｅｌｄ  Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ技術に関して、ルールセットの大容量化とリンク速度の向上により、高速なルータやスイッチにおいてこれをいかに高速に処理させるかが１つの技術的な課題となっている。現状、その高速処理を実現するためにＴｅｒｎａｒｙ  Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ（ＴＣＡＭ）を基にした手法が用いられることが多い。
【０００７】
しかしながら、ＴＣＡＭはコストが高く、消費電力や回路規模も大きいといった問題が存在する。また、Ｒａｎｇｅ  Ｍａｔｃｈを用いた場合には、そのルールをＰｒｅｆｉｘ  Ｍａｔｃｈを用いたルールに分割する必要があるため、ルール数が増加してしまうといった問題もある。
【０００８】
その一方で、ＴＣＡＭの高コスト、高消費電力の問題を回避すべく、より低コスト、低消費電力なＳｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＳＲＡＭ）やＤｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＤＲＡＭ）を用いた様々なＭｕｌｔｉ−Ｆｉｅｌｄ  Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ手法が提案されている。
【０００９】
例えば、非特許文献１では、「決定木（Ｄｅｃｉｓｉｏｎ  Ｔｒｅｅ）」を用いた手法が提案されている。決定木を用いた手法では、全てのルールに対してマッチングを行うのではなく、当該検索キーがマッチする可能性のある少数のルールに対してのみマッチングを行う。これにより、検索処理に要する時間が短縮される。決定木を用いた手法について図１〜図３を用いて簡単に説明する。
【００１０】
図１は、それぞれ４ｂｉｔ長である２つのフィールドＸ、Ｙを用いて定義されたＲ０からＲ１５までの１６個のルールからなるルールセットの例を示している。フィールドＸ、Ｙは、例えば、送信元ＩＰアドレスや送信元ポート番号等、実際のパケットヘッダフィールドに相当する。尚、フィールドＸは、２進数で表記されており、‘＊’はワイルドカードを示している。また、フィールドＹは、Ｒａｎｇｅ  Ｍａｔｃｈで表記されており、“［ａ：ｂ］”のａ、ｂはそれぞれ下限値、上限値（１０進数表記）を示している。尚、ここでは、各ルールに付与される優先度とアクションについては省略している。
【００１１】
図２は、図１で示されたルールセットを、フィールドＸ、Ｙの２軸から成る２次元空間上で表している。尚、Ｘ軸、Ｙ軸上の数はそれぞれ１０進数で表記してある。決定木を用いた手法によれば、図２に示されるような多次元空間を複数の次元に着目して分割する。そして、分割領域内に存在するルール数がある閾値以下になるまで領域分割を繰り返すことにより、決定木が構築される。ここで、分割された領域で管理されるルール群を「ルールリスト」と呼ぶ。
【００１２】
図３は、図１で示されたルールセットに対して構築された決定木の一例を示している。尚、図３で示される決定木では、分割領域内のルール数の閾値は２に設定されている。図３に示されるように、まず、全空間がＸ方向とＹ方向のそれぞれに２分割される。つまり、全空間（Ｘ、Ｙ）＝（［０：１５］、［０：１５］）が、領域０（［０：７］、［０：７］）、領域１（［０：７］、［８：１５］）、領域２（［８：１５］、［０：７］）、及び領域３（［８：１５］、［８：１５］）の４つの領域に分割される。また、それぞれの領域で管理されるルールリストは、［Ｒ７、Ｒ８、Ｒ９、Ｒ１１］（領域０）、［Ｒ０、Ｒ６、Ｒ９、Ｒ１０、Ｒ１１、Ｒ１２］（領域１）、［Ｒ１、Ｒ２、Ｒ３、Ｒ４、Ｒ５、Ｒ１３、Ｒ１４］（領域２）、［Ｒ１０、Ｒ１４、Ｒ１５］（領域３）となる。各領域には、まだ閾値である２よりも多いルールが管理されているため、それぞれの領域について、閾値以下のルール数になるまでさらに領域分割を行う。図３に示される例では、全空間は最終的に２４の領域に分割されている。なお、決定木を構築するアルゴリズムについては、非特許文献１や非特許文献２に記載されているため、ここでは省略する。
【００１３】
パケット分類を行う場合には、検索キーを参照しながら決定木を辿っていき、辿り着いた葉ノードで管理されている閾値数以下のルールの全てに対してマッチングが行われる。例として、検索キーがＸ＝０１１１、Ｙ＝１００１となるパケットに対するパケット分類を考える。図３に示される決定木では、根ノードにおいて全空間が上記４つの領域に分割されており、当該パケットは、それら４つの領域のうち、領域１（［０：７］、［８：１５］）に属することが分かる。続いて、領域１のノードでは、更に、空間がＸ方向とＹ方向のそれぞれに２分割されている。つまり、領域１が、領域１０（［０：３］、［８：１１］）、領域１１（［０：３］、［１２：１５］）、領域１２（［４：７］、［８：１１］）、及び領域１３（［４：７］、［１２：１５］）に４分割されている。当該パケットは、このうち領域１２に属することが分かる。更にその領域１２は４分割されており、当該パケットは、領域１２２（［６：７］、［８：９］）に属することが分かる。そして、その領域１２２で管理されている２つのルールＲ９、Ｒ１０に対してマッチングが実施され、マッチしたルールが選択される。尚、本例では、当該パケットがルールＲ９、Ｒ１０の両方にマッチするため、図３では省略している各ルールに付与された優先度に応じて、ルールが選択される。
【００１４】
以上に説明されたような決定木を用いた手法によれば、領域分割の結果、同じルールが複数の分割領域で管理される可能性があり、これは以下「ルールの複製」と参照される。例えば図３では、Ｒ７やＲ９等のルールが複製されている。ルールの複製が発生した場合、複製されたルールそのもの、あるいは、複製されたルールに対するアドレス値を管理するためのメモリ容量が増加し、見た目上、実際のルールセットよりも多くのルールを扱うことになる。つまり、ルールの複製は、決定木におけるデータ量の増加を招く。ルールの複製を抑制するための技術として、次のものが知られている。
【００１５】
非特許文献１によれば、葉ノードではないノードもルールリストを持つ。そして、領域分割の結果、全ての子ノード（分割領域）に同一のルールが複製されてしまう場合には、複製されるルールが当該ノードのルールリストで管理される。しかしながら、この手法では、全てではない複数の子ノードへのルールの複製を防止することはできない。
【００１６】
非特許文献２では、決定木を用いたパケット分類手法を、パイプライン処理を用いたハードウェアによって高速に処理させるハードウェアアーキテクチャが提案されている。本方式においても、葉ノードではないノードも同様にルールリストを持つ。そして、領域分割の結果、同一のルールが複数の子ノードに複製されてしまう場合には、複製されるルールが当該ノードのルールリストで管理される。しかしながら、単一ノードにおいて複製されるルールの数がルールリストで管理可能なルール数以上となる場合には、ルールの複製が発生してしまう。
【００１７】
非特許文献３では、非特許文献２と同様に、ハードウェアがパイプライン処理を用いてパケット分類を実施する方式が提案されている。但し、非特許文献１や非特許文献２の場合とは異なり、決定木では葉ノードのみがルールを管理する。本方式によれば、複数の決定木が用意され、ルールの複製が発生しないいずれかの決定木が当該ルールを管理する。これにより、ルールの複製が防止される。
【先行技術文献】
【非特許文献】
【００１８】
【非特許文献１】Ｓｕｍｅｅｔ  Ｓｉｎｇｈ、Ｆｌｏｒｉｎ  Ｂａｂｏｅｓｃｕ、Ｇｅｏｒｇｅ  Ｖａｒｇｈｅｓｅ、Ｊｉａ  Ｗａｎｇ、“Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ  Ｕｓｉｎｇ  Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｃｕｔｔｉｎｇ”、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ＡＣＭ  ＳＩＧＣＯＭＭ  ２００３  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ａｐｐｌｉｃａｔｉｏｎｓ、Ｔｅｃｈｎｏｌｏｇｉｅｓ、Ａｒｃｈｉｔｅｃｔｕｒｅｓ、ａｎｄ  Ｐｒｏｔｏｃｏｌｓ  ｆｏｒ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ、２００３年、ｐｐ．２１３−２２４
【非特許文献２】Ｗｅｉｒｏｎｇ  Ｊｉａｎｇ、  Ｖｉｋｔｏｒ  Ｋ．  Ｐｒａｓａｎｎａ、“Ｌａｒｇｅ−Ｓｃａｌｅ  Ｗｉｒｅ−Ｓｐｅｅｄ  Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎ  ｏｎ  ＦＰＧＡｓ”、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ＡＣＭ／ＳＩＧＤＡ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙｓ、２００９年、ｐｐ．２１９−２２８
【非特許文献３】Ｗｅｉｒｏｎｇ  Ｊｉａｎｇ、  Ｖｉｋｔｏｒ  Ｋ．  Ｐｒａｓａｎｎａ、Ｎｏｒｉｏ  Ｙａｍａｇａｋｉ、“Ｄｅｃｉｓｉｏｎ  Ｆｏｒｅｓｔ：  Ａ  Ｓｃａｌａｂｌｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｆｌｅｘｉｂｌｅ  Ｆｌｏｗ  Ｍａｔｃｈｉｎｇ  ｏｎ  ＦＰＧＡ”、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ２０１０  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎ、２０１０年、ｐｐ．３９４−３９９
【発明の概要】
【発明が解決しようとする課題】
【００１９】
決定木を用いたパケット分類では、その決定木に対して新たなルールを追加したり、その決定木から既存ルールを削除したりすることも重要である。そのようなルールの追加／削除処理は、以下、「エントリの動的更新」と参照される。
【００２０】
非特許文献３では、エントリの動的更新を行うための具体的な手順については述べられていない。従って、どの決定木のどのノードにおけるルールを更新するのか、あらかじめ決定しておく必要があると考えられる。すなわち、エントリの動的更新を行うために、「前処理」が別途必要になるという問題がある。特に、非特許文献３では、予め与えられたルールセットに対して最適な決定木を構成することを前提としているため、最悪の場合には、決定木の構成自体を全て変更する必要があると考えられる。そのような場合には、エントリの動的更新の前処理に必要な時間と、エントリ更新に必要な時間が共に増大してしまうという問題がある。
【００２１】
本発明の１つの目的は、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することができる技術を提供することにある。
【課題を解決するための手段】
【００２２】
本発明の１つの観点において、パケット分類器が提供される。そのパケット分類器は、パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと、を備える。１つのルールは、複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理される。コマンドが検索コマンドである場合、複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定する。コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木処理ブロックの各々は、新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定する。新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードである。この場合、エントリ追加対象決定ブロックは、新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択する。そして、選択されたエントリ追加対象は、新たなルールを、自身の決定木における追加対象葉ノードが管理するルールリストに追加する。
【００２３】
本発明の他の観点において、複数の決定木を用いたパケット分類方法が提供される。１つのルールは、複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理される。本発明に係るパケット分類方法は、（Ａ）複数の決定木に対してコマンドを一斉に入力するステップと、（Ｂ）コマンドが検索コマンドである場合、複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、（Ｃ）コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木の各々において、新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、（Ｄ）新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択するステップと、（Ｅ）新たなルールを、エントリ追加対象の追加対象葉ノードが管理するルールリストに追加するステップと、を含む。
【００２４】
本発明の更に他の観点において、複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムが提供される。１つのルールは、複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理される。本発明に係るパケット分類処理は、（Ａ）複数の決定木に対してコマンドを一斉に入力するステップと、（Ｂ）コマンドが検索コマンドである場合、複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、（Ｃ）コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木の各々において、新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、（Ｄ）新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択するステップと、（Ｅ）新たなルールを、エントリ追加対象の追加対象葉ノードが管理するルールリストに追加するステップと、を含む。
【発明の効果】
【００２５】
本発明によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
【図面の簡単な説明】
【００２６】
【図１】図１は、ルールセットの一例を示す概念図である。
【図２】図２は、図１で示されたルールセットがフィールドＸ、Ｙの２軸から成る２次元空間上に配置された場合を示す概念図である。
【図３】図３は、図１で示されたルールセットに対する決定木の一例を示す概念図である。
【図４】図４は、本発明の第１の実施の形態に係るパケット分類器の構成を示すブロック図である。
【図５】図５は、第１の実施の形態に係るパケット分類器の各決定木処理ブロックの構成を示すブロック図である。
【図６】図６は、第１の実施の形態における決定木ノード処理ブロックと決定木の各ノードとの対応関係を示す概念図である。
【図７】図７は、第１の実施の形態に係る決定木処理ブロックの決定木ノード処理ブロックの構成を示すブロック図である。
【図８】図８は、第１の実施の形態に係る決定木処理ブロックのエントリ数カウントブロックの構成を示すブロック図である。
【図９】図９は、第１の実施の形態におけるルール処理ブロックと決定木の各葉ノードのルールリストに含まれるルールとの対応関係を示す概念図である。
【図１０】図１０は、第１の実施の形態に係る決定木処理ブロックのルール処理ブロックの構成を示すブロック図である。
【図１１】図１１は、第１の実施の形態におけるＬＯＯＫＵＰ処理を示すフローチャートである。
【図１２】図１２は、第１の実施の形態におけるコマンドの構成例を示す概念図である。
【図１３】図１３は、ステップＡ２の処理を示すフローチャートである。
【図１４】図１４は、第１の実施の形態におけるノード情報の構成例を示す概念図である。
【図１５】図１５は、第１の実施の形態におけるアドレス算出方法を説明するための図である。
【図１６】図１６は、ステップＡ４の処理を示すフローチャートである。
【図１７】図１７は、第１の実施の形態におけるエントリ情報の構成例を示す概念図である。
【図１８】図１８は、第１の実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。
【図１９】図１９は、ステップＡ６の処理を示すフローチャートである。
【図２０】図２０は、ステップＡ９の処理を示すフローチャートである。
【図２１】図２１は、ステップＡ１２の処理を示すフローチャートである。
【図２２】図２２は、第１の実施の形態におけるＤＥＬＥＴＥ処理を示すフローチャートである。
【図２３】図２３は、ステップＡ１４の処理を示すフローチャートである。
【図２４】図２４は、本発明の第２の実施の形態に係るパケット分類器の構成を示すブロック図である。
【図２５】図２５は、第２の実施の形態に係るパケット分類器の決定木処理ブロックの構成を示すブロック図である。
【図２６】図２６は、第２の実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。
【図２７】図２７は、ステップＡ１８の処理を示すフローチャートである。
【図２８】図２８は、第２の実施の形態におけるＤＥＬＥＴＥ処理を示すフローチャートである。
【図２９】図２９は、本発明の第３の実施の形態におけるコマンドの構成例を示す概念図である。
【図３０】図３０は、第３の実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。
【図３１】図３１は、ステップＡ１９の処理を示すフローチャートである。
【図３２】図３２は、ステップＡ２０の処理を示すフローチャートである。
【図３３】図３３は、本発明の第４の実施の形態に係るパケット分類器の構成を示すブロック図である。
【発明を実施するための形態】
【００２７】
添付図面を参照して、本発明の実施の形態を説明する。
【００２８】
１．第１の実施の形態
１−１．概要
図４は、本発明の第１の実施の形態に係るパケット分類器１の構成を示すブロック図である。パケット分類器１は、決定木を用いることによりパケット分類を行う。つまり、パケット分類器１は、パケットヘッダから抽出された検索キーがどのルールにマッチするかを、決定木を用いることにより判定する。更に、本実施の形態に係るパケット分類器１は、入力コマンドに応じて、エントリの動的更新（新規ルールの追加、既存ルールの削除）を自動的に行う。
【００２９】
本実施の形態において、パケット分類器１は、ハードウェア回路により実現される。より詳細には、図４に示されるように、パケット分類器１は、１個以上の複数の決定木処理ブロック２（２−１〜２−Ｎ：Ｎは２以上の整数）、エントリ追加対象決定ブロック３、コマンド入力ブロック４、及び結果出力ブロック５を備えている。また、パケット分類器１には入力データ６が入力され、パケット分類器１からは出力データ７が出力される。
【００３０】
入力データ６は、パケット分類器１が実行すべき処理に依存する。パケット分類器１が実行する処理としては、（１）検索キーにマッチするルールを検索する処理（以下、「ＬＯＯＫＵＰ処理」と参照される）、（２）新規ルール（新規エントリ）を決定木に追加する処理（以下、「ＩＮＳＥＲＴ処理」と参照される）、及び（３）既存ルール（既存エントリ）を無効化する処理（以下、「ＤＥＬＥＴＥ処理」と参照される）、（４）パケット分類器１に含まれるメモリや設定レジスタ等へ予め設定値を書き込むＣｏｎｆｉｇｕｒａｔｉｏｎ処理、が挙げられる。ここで、Ｃｏｎｆｉｇｕｒａｔｉｏｎ処理は初期化時に行われ、パケット分類器１に含まれる各ブロック内に備えられた設定レジスタやメモリへ構成に関わる値を設定することである。以下では、ＬＯＯＫＵＰ処理、ＩＮＳＥＲＴ処理、ＤＥＬＥＴＥ処理に関してのみ説明する。入力データ６は、処理種別を示す種別データと、当該処理で用いられるデータとを含む。ＬＯＯＫＵＰ処理の場合、入力データ６は、ＬＯＯＫＵＰ処理を示す種別データと、検索キーとを含む。ＩＮＳＥＲＴ処理の場合、入力データ６は、ＩＮＳＥＲＴ処理を示す種別データと、追加すべき新規ルールとを含む。ＤＥＬＥＴＥ処理の場合、入力データ６は、ＤＥＬＥＴＥ処理を示す種別データと、無効化すべき既存ルールとを含む。
【００３１】
コマンド入力ブロック４は、入力データ６を受け取り、その入力データ６に応じたコマンドを作成する。入力データ６の場合と同様に、コマンドは、処理種別を示す種別データと、当該処理で用いられるデータとを含む。ＬＯＯＫＵＰ処理の実行を指示する検索コマンドは、ＬＯＯＫＵＰ処理を示す種別データと、検索キーとを含む。ＩＮＳＥＲＴ処理の実行を指示する挿入コマンドは、ＩＮＳＥＲＴ処理を示す種別データと、追加すべき新規ルールとを含む。ＤＥＬＥＴＥ処理の実行を指示する削除コマンドは、ＤＥＬＥＴＥ処理を示す種別データと、無効化すべき既存ルールとを含む。コマンド入力ブロック４は、生成したコマンドを、複数の決定木処理ブロック２−１〜２−Ｎに対して一斉に入力する。
【００３２】
複数の決定木処理ブロック２−１〜２−Ｎのそれぞれは、パケット分類に用いられる複数の決定木を構成する。ここで、複数の決定木は、非特許文献３に記載されている手法と同様に、ルールの複製が生じないように構成される。つまり、各ルールは、当該ルールの複製が生じない決定木において管理される。言い換えれば、１つのルールは、複数の決定木のうちいずれか１つの決定木における単一の葉ノードでのみ管理される。各決定木処理ブロック２は、コマンド入力ブロック４から入力されたコマンドに応じて、ＬＯＯＫＵＰ処理、ＩＮＳＥＲＴ処理、あるいはＤＥＬＥＴＥ処理を実行する。尚、複数の決定木処理ブロック２−１〜２−Ｎは、同時並列に各処理を実行することができる。
【００３３】
＜ＬＯＯＫＵＰ処理＞
複数の決定木処理ブロック２−１〜２−Ｎは、検索コマンドに応じて、ＬＯＯＫＵＰ処理を同時並列に実行する。具体的には、各決定木処理ブロック２は、自身の決定木を用いることによって、検索キーがいずれかの葉ノードで管理されているいずれかのルールにマッチするか否かを判定する。検索キーにマッチするルールが存在する場合、当該決定木処理ブロック２は、当該マッチルールを結果出力ブロック５に通知する。検索キーが当該葉ノードにおけるルールリストに含まれるルールの複数にマッチする場合、当該決定木処理ブロック２は、複数のマッチルールのうち最も優先度の高いルールを結果出力ブロック５に通知する。一方、検索キーにマッチするルールが存在しない場合、当該決定木処理ブロック２は、マッチルールが存在しなかったことを結果出力ブロック５に通知する。結果出力ブロック５は、複数の決定木処理ブロック２−１〜２−Ｎから検索結果を受け取り、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック５は、その選択結果を示す出力データ７を、ＬＯＯＫＵＰ処理の最終結果として出力する。
【００３４】
＜ＩＮＳＥＲＴ処理＞
複数の決定木処理ブロック２−１〜２−Ｎは、挿入コマンドに応じて、ＩＮＳＥＲＴ処理を同時並列に実行する。具体的には、まず、各決定木処理ブロック２は、新規ルールを自身の決定木に追加してもルールの複製が発生しないかどうか判定する。言い換えれば、各決定木処理ブロック２は、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得るかどうかを判定する。ルールの複製が発生してしまう場合、当該決定木処理ブロック２は、新規ルールの追加対象とはならない。一方、ルールの複製が発生しない場合、すなわち、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得る場合、当該決定木処理ブロック２は「エントリ追加対象候補」となり、当該単一の葉ノードは「追加対象葉ノード」となる。
【００３５】
新規ルールが追加される対象である決定木処理ブロック２は、「エントリ追加対象」である。エントリ追加対象は、上記エントリ追加対象候補の中から選ばれる。そのエントリ追加対象を選ぶのが、エントリ追加対象決定ブロック３である。図４に示されるように、このエントリ追加対象決定ブロック３は、複数の決定木処理ブロック２−１〜２−Ｎの各々に接続されている。そして、エントリ追加対象決定ブロック３は、複数の決定木処理ブロック２−１〜２−Ｎから通知される情報に基づいて、エントリ追加対象候補を認識し、エントリ追加対象候補の中からエントリ追加対象を選択する。
【００３６】
例えば、各エントリ追加対象候補は、追加対象葉ノードが管理している有効なルールのエントリ数を、エントリ追加対象決定ブロック３に通知する。そして、エントリ追加対象決定ブロック３は、各エントリ追加対象候補から受け取った有効エントリ数を参照し、所定のポリシーに従って、エントリ追加対象を選択する。例えば、エントリ追加対象決定ブロック３は、当該有効エントリ数が最小であるエントリ追加対象候補を、エントリ追加対象として選択する。この場合、複数の決定木間でのルール数の偏りが抑えられ、好適である。
【００３７】
エントリ追加対象決定ブロック３は、エントリ追加対象の選択結果を各決定木処理ブロック２に通知する。例えば、エントリ追加対象決定ブロック３は、エントリ追加対象に対して新規ルールの追加を指示し、それ以外の決定木処理ブロック２に対してルール追加処理の不実行を指示する。そして、エントリ追加対象である決定木処理ブロック２は、新規ルールを、自身の決定木における追加対象葉ノードが管理するルールリストに追加する。
【００３８】
このようにして、ＩＮＳＥＲＴ処理が実行される。結果出力ブロック５は、複数の決定木処理ブロック２−１〜２−Ｎから処理結果を受け取り、ＩＮＳＥＲＴ処理の最終結果を示す出力データ７を出力する。
【００３９】
＜ＤＥＬＥＴＥ処理＞
複数の決定木処理ブロック２−１〜２−Ｎは、削除コマンドに応じて、ＤＥＬＥＴＥ処理を同時並列に実行する。具体的には、各決定木処理ブロック２は、削除対象である既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定する。当該既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロック２は「エントリ削除対象」となり、当該単一の葉ノードは「削除対象葉ノード」となる。エントリ削除対象である決定木処理ブロック２は、削除対象葉ノードが管理していた当該既存ルールを無効化する。
【００４０】
このようにして、ＤＥＬＥＴＥ処理が実行される。結果出力ブロック５は、複数の決定木処理ブロック２−１〜２−Ｎから処理結果を受け取り、ＤＥＬＥＴＥ処理の最終結果を示す出力データ７を出力する。
【００４１】
以上に説明されたように、本実施の形態によれば、ルールの複製が発生しない。特に、エントリの動的更新においても、ルールの複製が発生しないようにＩＮＳＥＲＴ処理が実行される。比較例として、ルールの複製が許容された決定木に対してエントリの動的更新が実施される場合を考える。エントリの動的更新では、更新するエントリのメモリ上のデータ保存領域のデータを書き換える必要がある。ルールの複製が存在する場合には、その複製回数だけデータ書き換えが必要になる。従って、ＩＮＳＥＲＴ処理やＤＥＬＥＴＥ処理において、その処理時間が毎回一定ではなくなり、場合によっては処理時間が非常に増大してしまう。本実施の形態によれば、このような問題が解決される。すなわち、ＩＮＳＥＲＴ処理やＤＥＬＥＴＥ処理といったエントリの動的更新に要する処理時間が一定となる。
【００４２】
更に、本実施の形態によれば、ＩＮＳＥＲＴ処理時、複数の決定木処理ブロック２−１〜２−Ｎの各々が、挿入コマンドを受け取り、その挿入コマンドに応じて、自身がエントリ追加対象候補か否かを自動的に判定する。エントリ追加対象決定ブロック３は、少なくともエントリ追加対象候補から通知される情報に基づいて、適切なエントリ追加対象を自動的に決定する。そして、エントリ追加対象は、新規ルールを追加対象葉ノードに自動的に追加する。また、ＤＥＬＥＴＥ処理時、複数の決定木処理ブロック２−１〜２−Ｎの各々が、削除コマンドを受け取り、その削除コマンドに応じて、自身がエントリ削除対象か否かを自動的に判定する。そして、エントリ削除対象は、削除対象葉ノード中の指定されたルールを自動的に無効化する。このように、エントリの動的更新は、コマンドに応じて自動的に実施される。どの決定木のどのノードにおけるルールを更新するのか予め決定しておくといった「前処理」は不要である。すなわち、本実施の形態によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
【００４３】
尚、本実施の形態に係るパケット分類器１は、例えば、スイッチやルータ等のネットワーク装置内や、サーバの拡張カードやオンボードで搭載されるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）内に配備される。この場合、パケット分類器１は、制御ブロックと接続される。その制御ブロックは、到着したパケットのヘッダを解析する機能、当該パケットヘッダから検索キーを抽出する機能、その検索キーを用いたＬＯＯＫＵＰ処理をパケット分類器１に実行させる機能を有する。更に、制御ブロックは、外部から指定される新規ルールを追加するＩＮＳＥＲＴ処理をパケット分類器１に実行させる機能、及び外部から指定される既存ルールを削除するＤＥＬＥＴＥ処理をパケット分類器１に実行させる機能を有する。パケット分類器１は、処理に応じた入力データ６を制御ブロックから受け取り、出力データ７を制御ブロックに出力する。
【００４４】
１−２．構成例
次に、本実施の形態に係るパケット分類器１の構成例を更に詳しく説明する。図５は、本実施の形態に係るパケット分類器１の各決定木処理ブロック２の構成を示すブロック図である。図５に示されるように、決定木処理ブロック２は、決定木パイプラインブロック２０、エントリ数カウントブロック２１、及びルールパイプラインブロック２２を備えている。コマンド入力ブロック４から決定木処理ブロック２に入力されるデータは、入力データ２３である。決定木処理ブロック２から結果出力ブロック５に出力されるデータは、出力データ２４である。決定木処理ブロック２とエントリ追加対象決定ブロック３との間でやりとりされるデータは、入出力データ２５である。
【００４５】
１−２−１．決定木パイプラインブロック２０
決定木パイプラインブロック２０は、パイプライン処理により決定木の探索を行う。具体的には、決定木パイプラインブロック２０は、決定木の深さ（段数）Ｈと同じ段数の決定木ノード処理ブロック２００−１〜２００−Ｈを備えている。図６に示されるように、決定木ノード処理ブロック２００−ｉ（ｉ＝１、２、・・・、Ｈ）は、決定木の根ノードから深さｊ（ｊ＝０、１、・・・、Ｈ−１）のノードに対応しており、当該ノードに関する処理を行う。これら決定木ノード処理ブロック２００−１〜２００−Ｈを用いることによって、決定木パイプラインブロック２０は、決定木の根ノードから葉ノードに向けて１ノードずつ探索処理を実行していく。好適には、１クロックサイクル毎に、決定木の１つのノードを辿る処理が実行される。
【００４６】
図７は、本実施の形態に係る決定木ノード処理ブロック２００の構成を示すブロック図である。図７に示されるように、決定木ノード処理ブロック２００は、子ノード決定ブロック２０００及びノード情報記憶ブロック２００１を備えている。
【００４７】
ノード情報記憶ブロック２００１は、メモリやレジスタ等の記憶媒体により構成され、ノード情報を記憶する。ノード情報は、根ノードから見て同じ深さにある全てのノードの各々に関して、当該ノードにおける領域分割情報、つまり当該ノードによって管理される子ノード（分割領域）に対する情報を示す。
【００４８】
決定木ノード処理ブロック２００は、前段の決定木ノード処理ブロック２００から入力データ２００２を受け取る。但し、決定木ノード処理ブロック２００−１は、コマンド入力ブロック４から入力データ２００２（＝入力データ２３）を受け取る。入力データ２００２は、各処理に応じたコマンドと、ノード情報記憶ブロック２００１へのアクセスに用いられるアドレス値を含んでいる。前段の決定木ノード処理ブロック２００からの入力データ２００２は、更に、後述される「有効ビット長」の情報も含んでいる。
【００４９】
子ノード決定ブロック２０００は、入力データ２００２を受け取り、その入力データ２００２で指定されているアドレス値を参照してノード情報記憶ブロック２００１からノード情報を読み出す。そして、子ノード決定ブロック２０００は、ノード情報、有効ビット長及びコマンドに基づいて、当該ノードの子ノードのノード情報が記憶されているアドレス値を算出する。また、子ノード決定ブロック２０００は、有効ビット長を更新する。アドレス値の算出や有効ビット長の更新に関しては、後に詳しく説明される。出力データ２００３は、入力データ２００２に含まれていたコマンド、算出された新しいアドレス値、及び更新後の有効ビット長を含む。子ノード決定ブロック２０００は、その出力データ２００３を、次段の決定木ノード処理ブロック２００に出力する。
【００５０】
最終段の決定木ノード処理ブロック２００−Ｈに関しては、次の通りである。ＬＯＯＫＵＰ処理あるいはＤＥＬＥＴＥ処理の場合、子ノード決定ブロック２０００によって算出されるアドレス値は、ルールパイプラインブロック２２のルール処理ブロック２２０のエントリ記憶ブロック２２０１（後述される）へのアクセスに用いられるアドレス値である。決定木ノード処理ブロック２００−Ｈは、出力データ２００３をルール処理ブロック２２０−１に出力する。また、ＩＮＳＥＲＴ処理の場合、子ノード決定ブロック２０００によって算出されるアドレス値は、エントリ数カウントブロック２１のエントリ数記憶ブロック２１１（後述される）へのアクセスに用いられるアドレス値である。出力データ２００４は、入力データ２００２に含まれていたコマンドと算出されたアドレス値を含む。子ノード決定ブロック２０００は、その出力データ２００４を、エントリ数カウントブロック２１に出力する。
【００５１】
１−２−２．エントリ数カウントブロック２１
エントリ数カウントブロック２１は、決定木の全ての葉ノードに関して、管理されている有効なルールのエントリ数を葉ノード毎に管理する。尚、エントリ数カウントブロック２１による処理は、決定木の深さＨに相当する処理サイクルにおいて実行される。
【００５２】
図８は、本実施の形態に係るエントリ数カウントブロック２１の構成を示すブロック図である。図８に示されるように、エントリ数カウントブロック２１は、カウント処理ブロック２１０及びエントリ数記憶ブロック２１１を備えている。
【００５３】
エントリ数記憶ブロック２１１は、メモリやレジスタ等の記憶媒体により構成され、エントリ数情報を記憶する。エントリ数情報は、決定木の各葉ノードによって管理されている有効なルールのエントリ数を示す。
【００５４】
ＩＮＳＥＲＴ処理の場合、カウント処理ブロック２１０は、決定木パイプラインブロック２０の決定木ノード処理ブロック２００−Ｈから入力データ２１２（＝上述の出力データ２００４）を受け取る。その入力データ２１２は、挿入コマンド、及びエントリ数記憶ブロック２１１へのアクセスに用いられるアドレス値を含む。カウント処理ブロック２１０は、そのアドレス値を参照して、エントリ数記憶ブロック２１１から追加対象葉ノードに関するエントリ数情報（有効ルールエントリ数）を読み出す。そして、カウント処理ブロック２１０は、読み出した有効ルールエントリ数を示す出力データ２１６を、上述のエントリ追加対象決定ブロック３に出力する。
【００５５】
また、カウント処理ブロック２１０は、エントリ追加対象決定ブロック３から入力データ２１６を受け取る。その入力データ２１６が「決定木への新規ルールの追加」を指定している場合、カウント処理ブロック２１０は、上記追加対象葉ノードに関する有効ルールエントリ数に“１”を加算し、エントリ数記憶ブロック２１１に書き込む。これにより、エントリ数記憶ブロック２１１が最新状態に更新される。更に、カウント処理ブロック２１０は、出力データ２１４を、ルールパイプラインブロック２２のルール処理ブロック２２０−１に出力する。その出力データ２１４は、挿入コマンドと、ルール処理ブロック２２０−１のエントリ記憶ブロック２２０１（後述される）へのアクセスに用いられるアドレス値を含む。
【００５６】
ＤＥＬＥＴＥ処理の場合、カウント処理ブロック２１０は、ルールパイプラインブロック２２のルール処理ブロック２２０−Ｂから入力データ２１３を受け取る。カウント処理ブロック２１０は、その入力データ２１３で指定されるアドレス値を参照して、エントリ数記憶ブロック２１１から削除対象葉ノードに関するエントリ数情報（有効ルールエントリ数）を読み出す。そして、カウント処理ブロック２１０は、当該有効ルールエントリ数から“１”を減算し、エントリ数記憶ブロック２１１に書き込む。これにより、エントリ数記憶ブロック２１１が最新状態に更新される。更に、カウント処理ブロック２１０は、ＤＥＬＥＴＥ処理の完了を示す出力データ２１５を、出力データ２４として結果出力ブロック５に出力する。
【００５７】
１−２−３．ルールパイプラインブロック２２
ルールパイプラインブロック２２は、パイプライン制御によりルール処理（検索キーにマッチするルールの検索、新規ルールの追加、既存ルールの削除）を行う。具体的には、ルールパイプラインブロック２２は、各葉ノードにおいて管理可能な最大ルール数（ルールリストのサイズ）Ｂと同じ段数のルール処理ブロック２２０−１〜２２０−Ｂを備えている。図９に示されるように、ルール処理ブロック２２０−ｉ（ｉ＝１、２、・・・、Ｂ）は、当該葉ノードのルールリストに含まれるルールｊ（ｊ＝１、２・・・、Ｂ）に対応付けられており、当該ルールｊに関するルール処理を実行する。これらルール処理ブロック２２０−１〜２２０−Ｂを用いることによって、ルールパイプラインブロック２２は、葉ノードのルールリストに含まれる各ルールに対してルール処理を実行する。好適には、１クロックサイクル毎に、１つのルールに対するルール処理が実行される。
【００５８】
図１０は、本実施の形態に係るルール処理ブロック２２０の構成を示すブロック図である。図１０に示されるように、ルール処理ブロック２２０は、比較更新処理ブロック２２００及びエントリ記憶ブロック２２０１を備えている。
【００５９】
エントリ記憶ブロック２２０１は、メモリやレジスタ等の記憶媒体により構成され、エントリ情報を記憶する。エントリ情報は、当該ルールが有効か無効かを示す有効フラグ、ルールＩＤ、ルール等を含む。
【００６０】
ＬＯＯＫＵＰ処理あるいはＤＥＬＥＴＥ処理の場合、ルール処理ブロック２２０−１は、決定木パイプラインブロック２０の決定木ノード処理ブロック２００−Ｈから入力データ２２０２（＝上述の出力データ２００３）を受け取る。入力データ２２０２は、各処理に応じたコマンドと、エントリ記憶ブロック２２０１へのアクセスに用いられるアドレス値を含んでいる。
【００６１】
ＩＮＳＥＲＴ処理の場合、ルール処理ブロック２２０−１は、エントリ数カウントブロック２１から入力データ２２０３（＝上述の出力データ２１４）を受け取る。入力データ２２０３は、挿入コマンドと、エントリ記憶ブロック２２０１へのアクセスに用いられるアドレス値を含んでいる。入力データ２２０３は、これ以降、上記入力データ２２０２と同様に扱われる。
【００６２】
比較更新処理ブロック２２００は、入力データ２２０２を受け取り、その入力データ２２０２で指定されているアドレス値を参照してエントリ記憶ブロック２２０１からエントリ情報を読み出す。そして、比較更新処理ブロック２２００は、読み出したエントリ情報に基づいて、コマンドに応じたルール処理を実行する。ルール処理の詳細は後述される。また、比較更新処理ブロック２２００は、受け取った入力データ２２０２を出力データ２２０４として、次段のルール処理ブロック２２０に出力する。
【００６３】
ルール処理ブロック２２０−２〜２２０−Ｂの各々は、前段のルール処理ブロック２２０から入力データ２２０２（＝上述の出力データ２２０４）を受け取る。比較更新処理ブロック２２００による処理は、上記と同じである。尚、ＤＥＬＥＴＥ処理の場合、最終段のルール処理ブロック２２０−Ｂの比較更新処理ブロック２２００は、出力データ２２０４の代わりに出力データ２２０５（＝上述の入力データ２１３）をエントリ数カウントブロック２１に出力する。出力データ２２０５の内容は、出力データ２２０４と同じである。
【００６４】
１−３．動作
次に、本実施の形態に係るパケット分類器１の動作を詳しく説明する。
【００６５】
１−３−１．ＬＯＯＫＵＰ処理
まず、ＬＯＯＫＵＰ処理を説明する。図１１は、本実施の形態におけるＬＯＯＫＵＰ処理を示すフローチャートである。
【００６６】
ステップＡ１：
パケット分類器１に、入力データ６が入力される。その入力データ６は、ＬＯＯＫＵＰ処理を示す種別データと、被検索対象パケットから抽出された検索キーとを含む。コマンド入力ブロック４は、その入力データ６を受け取る。コマンド入力ブロック４は、その入力データ６に基づいて装置内コマンド（ここでは、検索コマンド）を生成し、その装置内コマンドを決定木処理ブロック２−１〜２−Ｎに一斉に出力する。
【００６７】
図１２は、装置内コマンドの構成例を示す概念図である。コマンド部分は、処理種別、終了フラグ、及び結果フラグを含んでいる。例えば、２ビットデータである処理種別は、“００”であればＬＯＯＫＵＰ処理、“０１”であればＩＮＳＥＲＴ処理、“１０”であればＤＥＬＥＴＥ処理を示す。終了フラグは、‘０’であれば未終了、‘１’であれば終了を示す。結果フラグは、エントリの追加、削除を行った場合に、‘１’に設定される。尚、終了フラグと結果フラグについては、ＩＮＳＥＲＴ処理及びＤＥＬＥＴＥ処理においてのみ参照され、それらの利用方法については後述する。また、装置内コマンドの後半部分には、検索キー（ＬＯＯＫＵＰ処理）、追加される新規エントリ（ＩＮＳＥＲＴ処理）、あるいは、削除される既存エントリ（ＤＥＬＥＴＥ処理）が格納される。
【００６８】
ここで、エントリ（ルール）は、Ｐｒｅｆｉｘ  Ｍａｔｃｈ、Ｒａｎｇｅ  Ｍａｔｃｈ、Ｗｉｌｄｃａｒｄ  Ｍａｔｃｈを考慮すると様々な表現形態が考えられる。例えば、検索キー長と同じ長さのデータ列Ａ、Ｂを用意し、Ｐｒｅｆｉｘ  ＭａｔｃｈやＷｉｌｄｃａｒｄ  Ｍａｔｃｈの場合には、Ａに対象データ、Ｂにマスクビットデータを割り当て、Ｒａｎｇｅ  Ｍａｔｃｈの場合には、Ａに下限値、Ｂに上限値を割り当てる方法が考えられる。この場合、ルールのエントリ長は検索キー長の２倍となる。これらを考慮し、装置内コマンドの後半部分においては、ＬＯＯＫＵＰ処理時の検索キーと、ＩＮＳＥＲＴ、ＤＥＬＥＴＥ処理時の追加・削除エントリの長さが異なることを許容する。なお、追加エントリの場合には、その優先度も指定される。
【００６９】
ステップＡ２：
コマンド入力ブロック４から検索コマンドを受け取ると、各決定木処理ブロック２は、指定された検索キーを用いて、自身の決定木を辿る処理を実行する。図１３は、本ステップＡ２の処理を示すフローチャートである。
【００７０】
ステップＢ１：
決定木を辿る処理は、決定木の根ノードから開始する。そのため、まず、現在の処理ノードが、決定木の根ノードに設定される。具体的には、挿入コマンドが、決定木パイプラインブロック２０の初段の決定木ノード処理ブロック２００−１に入力される。
【００７１】
ステップＢ２：
子ノード決定ブロック２０００は、処理種別がＬＯＯＫＵＰであることを確認した上で、ノード情報記憶ブロック２００１からノード情報を読み出す。
【００７２】
図１４は、ノード情報の構成例を示す概念図である。ノード情報は、当該ノードにおける領域分割情報である。図１４に示されるように、ノード情報は、フィールド識別子（フィールドＩＤ）とその分割数（ｋ）のＣ個のペア、及びベースアドレスを含んでいる。ここで、Ｃは決定木の１ノードにおける領域分割に用いることができるフィールドの最大数である。フィールドＩＤは、検索キーやルールを構成するフィールド毎に予め決められている。また、各フィールドの範囲は、２ｋ分割されるとし（ｋは自然数）、分割数ｋはその指数を表す。例えば、既出の図１〜図３の例のように、フィールドＸ、Ｙの各々の範囲が２分割される場合、フィールドＸの分割数ｋは１であり、フィールドＹの分割数ｋも１である。尚、ｋの最大数は予め決められている。ベースアドレスは、当該ノードの子ノードのノード情報が格納されている記憶領域の最小アドレス値を示す。より詳細には、ベースアドレスは、当該ノードの子ノードのノード情報が格納されている次段の決定木ノード処理ブロック２００のノード情報記憶ブロック２００１における最小アドレス値であり、当該ノードの全ての子ノードのノード情報は、このベースアドレスから連続する記憶領域に格納されている。
【００７３】
ステップＢ３：
子ノード決定ブロック２０００は、読み出したノード情報、検索キーの各フィールドのビット列、及び有効ビット長に基づいて、次段の子ノードのノード情報が格納されている記憶領域のアドレス値を算出する。具体的には、次のようにして次段のアドレス値は算出される（図１５も参照されたい）。
【００７４】
例えば、ノード情報として、２つのフィールドに関する分割情報（フィールドＩＤ、分割数）＝（０００１、０１）、（０１００、１１）とベースアドレス＝００００１０００が設定されているとする。検索キーにおいては、フィールドＩＤ＝０００１のフィールド値が“０１０１”、フィールドＩＤ＝０１００のフィールド値が“０１１０”であり、それぞれの有効ビット長が３、４であったとする。ここで、有効ビット長とは、各フィールドのビット列に対し、領域分割に用いる下位ビットからの長さに相当する。つまり、フィールド値のうち、有効ビット長で指定された長さをもつ下位ビットからのビット列が参照される。フィールドＩＤ＝０００１に関して説明する。有効ビット長が３であることから、フィールド値の下位３ビット“１０１”を参照する。そして、分割数ｋ＝１であるため、有効ビットの上位１ビットを参照し、‘１’を得る（図１５参照）。同様に、フィールドＩＤ＝０１００に関しては、有効ビット長が４、分割数ｋが３であることから、“０１１”を得る。これらを連結した“１０１１”に対して、ベースアドレス“００００１０００”が加算される。その結果得られる“０００１００１１”が、次段の子ノードのノード情報が格納されている記憶領域のアドレス値である。
【００７５】
ステップＢ４：
続いて、子ノード決定ブロック２０００は、入力された有効ビット長から分割数ｋを減算することによって、有効ビット長を更新する。上記の例では、フィールドＩＤ＝０００１の有効ビット長が３−１＝２に、フィールドＩＤ＝０１００の有効ビット長が４−３＝１に更新される。尚、決定木ノード処理ブロック２００−１には有効ビット長が入力されないが、その場合の有効ビット長は、予め各フィールドのフィールド長として設定されているものとする。それ以降の決定木ノード処理ブロック２００に対しては、前段の決定木ノード処理ブロック２００から有効ビット長が入力される。
【００７６】
ステップＢ５、Ｂ６：
次に、子ノードが葉ノードであるか否かが判定される。具体的には、決定木ノード処理ブロック２００−Ｈが処理するノードの子ノードが葉ノードであるため（図６参照）、処理する決定木ノード処理ブロック２００が自動的に判別すればよい。
【００７７】
次ノードが葉ノードではない場合（ステップＢ５；Ｎｏ）は、決定木ノード処理ブロック２００−ｉ（ｉ＝１、２、・・・、Ｈ−１）の場合に相当する。その決定木ノード処理ブロック２００−ｉは、次段の決定木ノード処理ブロック２００−（ｉ＋１）に出力データ２００３を出力する（ステップＢ６）。その出力データ２００３は、入力データ２００２に含まれていたコマンド、算出された新しいアドレス値、及び更新後の有効ビット長を含む。そして、処理はステップＢ２に戻り、次段のノードが処理ノードとなる。
【００７８】
次ノードが葉ノードである場合（ステップＢ５；Ｙｅｓ）は、決定木ノード処理ブロック２００−Ｈの場合に相当する。この場合、ステップＡ２が終了する。
【００７９】
ステップＡ３：
ステップＡ２が終了すると、決定木ノード処理ブロック２００−Ｈは、ルールパイプラインブロック２２のルール処理ブロック２２０−１に、算出したアドレス値とコマンドを含む出力データ２００３を出力する。
【００８０】
ステップＡ４：
続いて、ルールパイプラインブロック２２が、検索キーとルールリスト中の各ルールとの比較（マッチング処理）を行う。図１６は、本ステップＡ４の処理を示すフローチャートである。
【００８１】
ステップＣ１：
マッチング処理は、ルールリスト中の１番目のルールから開始する。具体的には、初段のルール処理ブロック２２０−１から処理を開始する。
【００８２】
ステップＣ２：
比較更新処理ブロック２２００は、処理種別がＬＯＯＫＵＰであることを確認した上で、入力されたアドレス値を用いてエントリ記憶ブロック２２０１からエントリ情報を読み出す。そして、比較更新処理ブロック２２００は、有効フラグを確認する。
【００８３】
図１７は、エントリ情報の構成例を示す概念図である。エントリ情報は、当該ルールが有効であるかを示す有効フラグ、ルールＩＤ、ルール、優先度を含んでいる。ルールに対応するアクションを同時に記憶する場合には、アクションを加えても良い。ここでは、アクションは本パケット分類器１とは異なる場所で管理されており、本パケット分類器１によって検索を行った後に、当該ルールＩＤを用いることによりアクションが取得されるとする。なお、図１７のエントリ情報の構成例では、ルールＩＤを含んでいたが、これをエントリ情報には含まず、例えば、処理を行った決定木処理ブロックのＩＤ、葉ノードのＩＤ、ルールリストの順序等からルールＩＤを生成しても良い。より具体的には、処理を行った決定木処理ブロック２−ｉ（ｉ＝１、２、・・・、Ｎ）のｉ、決定木処理ブロック２−ｉで辿り着いた葉ノードのＩＤであるｊ、ルール処理ブロック２２０−ｋ（ｋ＝１、２、・・・、Ｂ）のｋを２進数で連結したものをルールＩＤとして参照することが可能である。
【００８４】
ステップＣ４：
ルールが有効である場合（ステップＣ３；Ｙｅｓ）、比較更新処理ブロック２２００は、検索キーと読み出したルールとの比較を行う。この比較方法については、例えば、非特許文献２に開示されている。
【００８５】
ステップＣ６：
検索キーがルールにマッチした場合（ステップＣ５；Ｙｅｓ）、比較更新処理ブロック２２００は、当該ルールの優先度と現在のマッチルールの優先度を比較する。ここで、現在のマッチルールとは、前段のルール処理ブロック２２０までにマッチしたルールのうち、最も優先度が高いルールを意味する。一方、現在のルール処理ブロック２２０において比較に用いられたルールは、比較ルールと参照される。
【００８６】
ステップＣ８：
比較ルールの優先度の方が大きかった場合（ステップＣ７；Ｙｅｓ）、比較更新処理ブロック２２００は、比較ルールを新たな現在のマッチルールに設定する。その後、処理は、ステップＣ９に進む。
【００８７】
ステップＣ９、Ｃ１０、Ｃ１１：
現在のルールが、ルールリスト中の最後のルールか否かが判定される。具体的には、ルール処理ブロック２２０−ｉ（ｉ＝１、２、・・・、Ｂ−１）が処理を実行している場合、それは最後のルールではない（ステップＣ９；Ｎｏ）。この場合、そのルール処理ブロック２２０−ｉは、次段のルール処理ブロック２２０−（ｉ＋１）に、アドレス値とコマンドを含む出力データ２２０４を出力する（ステップＣ１０）。そして、処理はステップＣ２に戻り、ルールリスト中の次のルールに対するマッチング処理が実行される。
【００８８】
尚、読み出したルールが有効で無い場合（ステップＣ３；Ｎｏ）、及び、検索キーがルールにマッチしない場合（ステップＣ５；Ｎｏ）、更に、比較ルールの優先度がマッチルールの優先度よりも小さかった場合（ステップＣ７；Ｎｏ）にも、処理はステップＣ９に進む。
【００８９】
現在のルールがルールリスト中の最後のルールである場合、つまり、処理がルール処理ブロック２２０−Ｂで行われた場合（ステップＣ９；Ｙｅｓ）、ルール処理ブロック２２０−Ｂは、マッチルールのルールＩＤと優先度、及びコマンドを、結果出力ブロック５に出力する（ステップＣ１１）。そして、ステップＡ４が終了する。尚、マッチルールが存在しない場合には、例えば、ルールＩＤのビット値が全て１であるような特値を出力することで、マッチルールが存在しなかったことを示す。
【００９０】
ステップＡ５：
結果出力ブロック５は、複数の決定木処理ブロック２−１〜２−Ｎから検索結果を受け取る。結果出力ブロック５は、マッチルールの優先度同士を比較し、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック５は、その選択結果を示す出力データ７として、例えば、最高優先度であったマッチルールのルールＩＤを、ＬＯＯＫＵＰ処理の最終結果として出力する。このとき、マッチルールが存在しなかった場合には、上述した特値のルールＩＤを出力することで、マッチルールが存在しなかったことを示すことができる。
【００９１】
１−３−２．ＩＮＳＥＲＴ処理
次に、ＩＮＳＥＲＴ処理を説明する。図１８は、本実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。
【００９２】
ステップＡ１：
パケット分類器１に、入力データ６が入力される。その入力データ６は、ＩＮＳＥＲＴ処理を示す種別データと、追加される新規ルールとを含む。コマンド入力ブロック４は、その入力データ６を受け取る。コマンド入力ブロック４は、その入力データ６に基づいて装置内コマンド（ここでは、挿入コマンド）を生成し、その装置内コマンドを決定木処理ブロック２−１〜２−Ｎに一斉に出力する。
【００９３】
ステップＡ６：
コマンド入力ブロック４から挿入コマンドを受け取ると、各決定木処理ブロック２は、指定された新規ルールを用いて、自身の決定木を辿る処理を実行する。図１９は、本ステップＡ６の処理を示すフローチャートである。
【００９４】
ステップＢ１：
まず、ＬＯＯＫＵＰ処理の場合と同様に、現在の処理ノードが、決定木の根ノードに設定される。
【００９５】
ステップＢ７：
子ノード決定ブロック２０００は、処理種別がＩＮＳＥＲＴであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘１’である場合（ステップＢ７；Ｙｅｓ）、処理はステップＢ５に進む。一方、終了フラグが‘０’である場合（ステップＢ７；Ｎｏ）、処理はステップＢ２に進む。
【００９６】
ステップＢ２：
ＬＯＯＫＵＰ処理の場合と同様に、子ノード決定ブロック２０００は、ノード情報記憶ブロック２００１からノード情報を読み出す。
【００９７】
ステップＢ８：
子ノード決定ブロック２０００は、読み出したノード情報、新規ルールの各フィールドのビット列、及び有効ビット長に基づいて、ルールの複製が発生するか否か判定する。ルールの複製が発生するか否かは、アドレス値の算出を行う際に、ワイルドカードが含まれるか否かで判断することができる。
【００９８】
例えば、ノード情報として、２つのフィールドに対する領域分割情報（フィールドＩＤ、分割数）＝（０００１、０１）、（０１００、１１）とベースアドレス＝００００１０００が設定されていたとする。追加対象ルールにいては、フィールドＩＤ＝０００１、フィールドＩＤ＝０１００の各フィールドに対して、（フィールド値、マスクビット列）が、（“０１０１”、“１１１１”）、（“０１１０”、“１１１１”）のように設定されており、それぞれの有効ビット長が３、４であったとする。なお、マスクビット列は各ビットが‘１’であれば有効、‘０’であれば無効、つまり、ワイルドカードとして扱うものとする。この場合、両フィールドともに、ワイルドカードは含まれていないため、ルールの複製は発生しないことが分かり、ＬＯＯＫＵＰ時のステップＢ３と同様に、次の子ノードのアドレス値を算出することができる。一方、同様のノード情報、有効ビット長に対して、追加対象ルールにおけるフィールドＩＤ＝０００１、フィールドＩＤ＝０１００の各フィールドの（フィールド値、マスクビット列）が、（“０１０１”、“１１１１”）、（“０１１０”、“１１００”）のように設定されている場合を考える。この場合、マスクビット列を考慮すると、各フィールド値はそれぞれ、“０１０１”、“０１＊＊”となる。ノード情報を元に子ノードのアドレス値を算出しようとすると、それぞれの有効ビット長が３、４であることから、フィールドＩＤ＝０００１に対して、下位３ビット“１０１”の上位１ビットを参照し、‘１’を得る。一方、フィールドＩＤ＝０１００のフィールドに対しては、有効ビット長が４、分割数が３であることから、“０１＊”を得る。この結果、子ノードの分割領域を示すビット列にワイルドカードが含まれ、これは、ルールの複製が発生することを意味する。なお、フィールド値がＲａｎｇｅ  Ｍａｔｃｈとして設定されている場合、下限値と上限値の有効ビット長に相当するビット列に対し、参照するビット列が共に同じ値であるか否かで判断できる。例えば、上記の例において、フィールドＩＤ＝０００１が下限値００００、上限値００１１として設定されていたとする。有効ビット長が３であることから、下限値、上限値の下位３ビットの“０００”と“０１１”を参照する。分割数が１であることから、各有効ビット長の先頭ビットを参照し、共に‘０’であることから、領域分割を行ってもルールの複製が発生しないと判断できる。一方、フィールドＩＤ＝０００１が下限値００００、上限値０１１１が設定されている場合には、参照ビットが‘０’と‘１’であるため、ルールの複製が発生すると判断できる。
【００９９】
ステップＢ１０：
ルールの複製が発生する場合（ステップＢ９；Ｙｅｓ）、当該決定木処理ブロック２は、エントリ追加対象候補とはならない。この場合、子ノード決定ブロック２０００は、コマンドの終了フラグを‘１’に設定する。その後、処理はステップＢ５に進む。
【０１００】
ステップＢ３、Ｂ４：
一方、ルールの複製が発生しない場合（ステップＢ９；Ｎｏ）、ＬＯＯＫＵＰ処理の場合と同様に、次段のアドレス値の算出（ステップＢ３）及び有効ビット長の更新（ステップＢ４）が行われる。その後、処理はステップＢ５に進む。
【０１０１】
ステップＢ５、Ｂ６：
ＬＯＯＫＵＰ処理の場合と同様に、ステップＢ５、Ｂ６が実施される。つまり、次ノードが葉ノードではない場合（ステップＢ５；Ｎｏ）は、決定木ノード処理ブロック２００−ｉ（ｉ＝１、２、・・・、Ｈ−１）は、次段の決定木ノード処理ブロック２００−（ｉ＋１）に出力データ２００３を出力する（ステップＢ６）。そして、処理はステップＢ７に戻り、次段のノードが処理ノードとなる。一方、次ノードが葉ノードである場合（ステップＢ５；Ｙｅｓ）は、ステップＡ６が終了する。
【０１０２】
ステップＡ７：
ステップＡ６が終了すると、決定木ノード処理ブロック２００−Ｈは、算出したアドレス値とコマンドを含む出力データ２００４を、エントリ数カウントブロック２１に出力する。
【０１０３】
ステップＡ８：
エントリ数カウントブロック２１のカウント処理ブロック２１０は、決定木ノード処理ブロック２００−Ｈから入力データ２１２（＝上述の出力データ２００４）を受け取る。カウント処理ブロック２１０は、処理種別がＩＮＳＥＲＴであることを確認した上で、終了フラグを参照する。終了フラグが‘０’の場合、当該決定木処理ブロック２は、エントリ追加対象候補である。この場合、カウント処理ブロック２１０は、入力されたアドレス値を用いて、エントリ数記憶ブロック２１１から追加対象葉ノードに関するエントリ数情報（有効ルールエントリ数）を読み出す。そして、カウント処理ブロック２１０は、読み出した有効ルールエントリ数を示す出力データ２１６を、エントリ追加対象決定ブロック３に出力する。
【０１０４】
一方、終了フラグが‘１’の場合、当該決定木処理ブロック２は、エントリ追加対象候補ではない。この場合、カウント処理ブロック２１０は、処理終了信号をエントリ追加対象決定ブロック３に出力する。あるいは、カウント処理ブロック２１０は、有効ルールエントリ数を最大値に設定し、その有効ルールエントリ数をエントリ追加対象決定ブロック３に通知してもよい。
【０１０５】
ステップＡ９：
エントリ追加対象決定ブロック３は、複数の決定木処理ブロック２−１〜２−Ｎから通知される情報に基づいて、エントリ追加対象候補を認識し、エントリ追加対象候補の中からエントリ追加対象を選択する。図２０は、本ステップＡ９の処理を示すフローチャートである。
【０１０６】
ステップＤ１、Ｄ２、Ｄ３：
エントリ追加対象決定ブロック３は、エントリ追加対象候補から有効ルールエントリ数を示す情報を受け取る（ステップＤ１）。次に、エントリ追加対象決定ブロック３は、有効ルールエントリ数がルールリストの最大数Ｂ（リストサイズ）を下回っているものがあるか否か確認する（ステップＤ２）。有効ルールエントリ数がリストサイズを下回っているものが無い場合（ステップＤ２；Ｎｏ）、エントリ追加対象決定ブロック３は、エントリ追加対象は存在しないと判断する（ステップＤ３）。
【０１０７】
ステップＤ４、Ｄ５：
一方、有効ルールエントリ数がリストサイズを下回っているものがある場合（ステップＤ２；Ｙｅｓ）、エントリ追加対象決定ブロック３は、有効エントリ数が最小であるエントリ追加対象候補を、エントリ追加対象として選択する（ステップＤ４）。その後、エントリ追加対象決定ブロック３は、各決定木処理ブロック２にエントリ追加の可否を通知する（ステップＤ５）。例えば、エントリ追加対象決定ブロック３は、エントリ追加対象に対して新規ルールの追加を指示し、それ以外の決定木処理ブロック２に対してルール追加処理の不実行を指示する。なお、ここでは有効ルールエントリ数が最小であるエントリ追加対象候補をエントリ追加対象として選択しているが、その他のポリシーに従ってエントリ追加対象を選択しても良い。
【０１０８】
ステップＡ１０：
エントリ追加対象である決定木処理ブロック２のエントリ数カウントブロック２１は、追加対象葉ノードに関する有効ルールエントリ数に“１”を加算し、エントリ数記憶ブロック２１１に書き込む。これにより、エントリ数記憶ブロック２１１が最新状態に更新される。それ以外の決定木処理ブロック２のエントリ数カウントブロック２１は、コマンドの終了フラグを‘１’に設定する。
【０１０９】
ステップＡ１１：
また、各決定木処理ブロック２のエントリ数カウントブロック２１は、アドレス値と挿入コマンドを含む出力データ２１４を、ルールパイプラインブロック２２のルール処理ブロック２２０−１に出力する。
【０１１０】
ステップＡ１２：
ルールパイプラインブロック２２は、ルールの追加処理を行う。図２１は、本ステップＡ１２の処理を示すフローチャートである。
【０１１１】
ステップＣ１２：
ステップＡ１２は、ルールリスト中の１番目のルールから開始する。具体的には、初段のルール処理ブロック２２０−１から処理を開始する。
【０１１２】
ステップＣ１３：
比較更新処理ブロック２２００は、処理種別がＩＮＳＥＲＴであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘１’である場合（ステップＣ１３；Ｙｅｓ）、処理はステップＣ９に進む。一方、終了フラグが‘０’である場合（ステップＣ１３；Ｎｏ）、処理はステップＣ２に進む。
【０１１３】
ステップＣ２：
ＬＯＯＫＵＰ処理の場合と同様に、比較更新処理ブロック２２００は、入力されたアドレス値を用いてエントリ記憶ブロック２２０１からエントリ情報を読み出す。そして、比較更新処理ブロック２２００は、有効フラグを確認する。
【０１１４】
ステップＣ１５：
ルールが有効である場合（ステップＣ３；Ｙｅｓ）、当該エントリに新規ルールを書き込むことは許されない。この場合、そのルール処理ブロック２２０−ｉは、次段のルール処理ブロック２２０−（ｉ＋１）に、アドレス値とコマンドを含む出力データ２２０４を出力する。そして、処理はステップＣ１３に戻り、ルールリスト中の次のルールに対する処理が実行される。
【０１１５】
ステップＣ１４：
一方、ルールが有効ではない場合（ステップＣ３；Ｎｏ）、当該エントリ（すなわち、空きエントリ）に新規ルールを書き込むことができる。この場合、比較更新処理ブロック２２００は、エントリ情報中のルール情報を新規ルールのものに書き換え、且つ、有効フラグを‘１’に設定し、エントリ記憶ブロック２２０１に書き込む。更に、比較更新処理ブロック２２００は、コマンド内の終了フラグを‘１’に設定し、結果フラグを‘１’（追加成功）に設定する。その後、処理はステップＣ９に進む。
【０１１６】
ステップＣ９：
ＬＯＯＫＵＰ処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合（ステップＣ９；Ｎｏ）、処理は上記ステップＣ１５に進む。一方、最後のルールの場合（ステップＣ９；Ｙｅｓ）、ルール処理ブロック２２０−Ｂは、現在のコマンドを、結果出力ブロック５に出力する（ステップＣ１６）。そして、ステップＡ１２が終了する。
【０１１７】
ステップＡ１３：
結果出力ブロック５は、複数の決定木処理ブロック２−１〜２−Ｎからコマンドを受け取る。結果出力ブロック５は、受け取ったコマンド内の結果フラグを参照して、新規ルールが追加されたか、又は追加されなかったかを確認する。そして、結果出力ブロック５は、その結果を示す出力データ７を、ＩＮＳＥＲＴ処理の最終結果として出力する。
【０１１８】
ここで、ＩＮＳＥＲＴ処理の最終結果として、新規ルールを追加した箇所を示すエントリＩＤを出力することが挙げられる。エントリＩＤは、上述したエントリ情報にルールＩＤを含まない場合のルールＩＤ生成手法と同様、エントリ追加対象となった決定木処理ブロックのＩＤ、葉ノードのＩＤ、ルールリスト順序等からエントリＩＤを生成することができる。このとき、新規ルールを追加できる空き領域が無く、新規ルールを追加できなかった場合には、それを示す信号を出力することでルールの追加ができなかったことを示すことができるが、例えば、エントリＩＤを全て‘１’とした特値として出力することで、ルールの追加ができなかったことを示す信号を省くこともできる。また、ＩＮＳＥＲＴ処理では、各々１ビットから成る終了フラグと結果フラグを用いて処理を行ったが、終了フラグのビット幅を増やし、例えば、ルールの複製が発生したことが要因で処理を終了したことや、当該葉ノードのルールリストに空きが無かったことが要因で処理を終了したこと等、処理を終了した要因を表現させることができる。このような終了フラグを参照することで、ＩＮＳＥＲＴ処理の最終結果として、新規ルールを追加できなかった場合にその要因も最終結果として出力することができる。
【０１１９】
１−３−３．ＤＥＬＥＴＥ処理
次に、ＤＥＬＥＴＥ処理を説明する。図２２は、本実施の形態におけるＤＥＬＥＴＥ処理を示すフローチャートである。
【０１２０】
ステップＡ１：
パケット分類器１に、入力データ６が入力される。その入力データ６は、ＤＥＬＥＴＥ処理を示す種別データと、削除される既存ルールとを含む。コマンド入力ブロック４は、その入力データ６を受け取る。コマンド入力ブロック４は、その入力データ６に基づいて装置内コマンド（ここでは、削除コマンド）を生成し、その装置内コマンドを決定木処理ブロック２−１〜２−Ｎに一斉に出力する。
【０１２１】
ステップＡ６：
ＩＮＳＥＲＴ処理の場合と同様に、各決定木処理ブロック２は、指定された既存ルールを用いて、自身の決定木を辿る処理を実行する。
【０１２２】
ステップＡ３：
ステップＡ６が終了すると、決定木ノード処理ブロック２００−Ｈは、ルールパイプラインブロック２２のルール処理ブロック２２０−１に、算出したアドレス値とコマンドを含む出力データ２００３を出力する。
【０１２３】
ステップＡ１４：
ルールパイプラインブロック２２は、ルールの削除処理を行う。図２３は、本ステップＡ１４の処理を示すフローチャートである。
【０１２４】
ステップＣ１：
ステップＡ１４は、ルールリスト中の１番目のルールから開始する。具体的には、初段のルール処理ブロック２２０−１から処理を開始する。
【０１２５】
ステップＣ１３：
比較更新処理ブロック２２００は、処理種別がＤＥＬＥＴＥであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘１’である場合（ステップＣ１３；Ｙｅｓ）、処理はステップＣ９に進む。一方、終了フラグが‘０’である場合（ステップＣ１３；Ｎｏ）、処理はステップＣ２に進む。
【０１２６】
ステップＣ２、Ｃ３：
ＬＯＯＫＵＰ処理の場合と同様に、比較更新処理ブロック２２００は、入力されたアドレス値を用いてエントリ記憶ブロック２２０１からエントリ情報を読み出す。そして、比較更新処理ブロック２２００は、有効フラグを確認する。ルールが無効である場合（ステップＣ３：Ｎｏ）、当該エントリは削除対象ではない。この場合、処理はステップＣ９に進む。一方、ルールが有効である場合（ステップＣ３；Ｙｅｓ）、処理はステップＣ１７に進む。
【０１２７】
ステップＣ１７：
比較更新処理ブロック２２００は、読み出したルールと、削除対象として指定されたルールとを比較する。つまり、比較更新処理ブロック２２００は、削除対象として指定されているルールが、読み出したルールにマッチするか否かを判定する。ここでは、両者が完全に一致するか否かが判定される。不一致の場合（ステップＣ５；Ｎｏ）、処理はステップＣ９に進む。一方、完全一致の場合（ステップＣ５；Ｙｅｓ）、処理はステップＣ１８に進む。
【０１２８】
ステップＣ１８：
比較更新処理ブロック２２００は、エントリ情報中の有効フラグを‘０’に設定し、エントリ記憶ブロック２２０１に書き込む。これにより、当該エントリ（ルール）は無効化される。この処理が既存ルールの削除に相当する。更に、比較更新処理ブロック２２００は、コマンド内の終了フラグを‘１’に設定し、結果フラグを‘１’（削除成功）に設定する。その後、処理はステップＣ９に進む。
【０１２９】
ステップＣ９、Ｃ１５：
ＬＯＯＫＵＰ処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合（ステップＣ９；Ｎｏ）、ルール処理ブロック２２０−ｉは、次段のルール処理ブロック２２０−（ｉ＋１）に、アドレス値とコマンドを含む出力データ２２０４を出力する（ステップＣ１５）。そして、処理はステップＣ１３に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合（ステップＣ９；Ｙｅｓ）、ステップＡ１４は終了する。
【０１３０】
ステップＡ１５：
ステップＡ１４が完了すると、ルール処理ブロック２２０−Ｂは、アドレス値とコマンドを含む出力データ２２０５を、エントリ数カウントブロック２１に出力する。
【０１３１】
ステップＡ１６：
エントリ数カウントブロック２１のカウント処理ブロック２１０は、ルール処理ブロック２２０−Ｂから入力データ２１３（＝上述の出力データ２００５）を受け取る。カウント処理ブロック２１０は、処理種別がＤＥＬＥＴＥであることを確認した上で、終了フラグ及び結果フラグを参照する。終了フラグ及び結果フラグが共に‘１’である場合、カウント処理ブロック２１０は、入力されたアドレス値を用いて、エントリ数記憶ブロック２１１から削除対象葉ノードに関するエントリ数情報（有効ルールエントリ数）を読み出す。そして、カウント処理ブロック２１０は、当該有効ルールエントリ数から１を減算し、エントリ数記憶ブロック２１１に書き込む。これにより、エントリ数記憶ブロック２１１が最新状態に更新される。
【０１３２】
ステップＡ１７：
最後に、カウント処理ブロック２１０は、コマンドを含む出力データ２１５を結果出力ブロック５に出力する。結果出力ブロック５は、決定木処理ブロック２−１〜２−Ｎのそれぞれから受け取ったコマンド内の結果フラグを参照して、ルールが削除されたか、又は削除されなかったかを確認する。そして、結果出力ブロック５は、その結果を示す出力データ７を、ＤＥＬＥＴＥ処理の最終結果として出力する。
【０１３３】
ここで、ＤＥＬＥＴＥ処理の最終結果として、ＩＮＳＥＲＴ処理時の新規ルール追加箇所のエントリＩＤと同様、削除ルールを追加した箇所を示すエントリＩＤを出力することが挙げられる。この際、削除ルールが何らかの理由で管理ルールに存在しなかった場合には、削除ルールが存在しなかったことを示す信号や、エントリＩＤを全て‘１’とした特値として出力することで、削除ルールが存在しなかったことを示すことができる。
【０１３４】
１−３−４．補足
尚、本実施の形態における動作では、ＩＮＳＥＲＴ、ＤＥＬＥＴＥ処理時に、決定木パイプラインブロック２０にて決定木を辿る処理や、ルールパイプラインブロック２２にてルールの追加、削除処理を行う場合に、処理が完了していても、各パイプラインを順に処理していく。しかし、各パイプライン内の処理ブロックは、処理が完了した時点で何ら処理を実行しない。そのため、処理が完了した時点で、当該処理ブロックは、エントリ数カウントブロック２１や結果出力ブロック５に、処理が完了した信号とコマンドを直接出力してもよい。そして、それぞれのブロックで各決定木処理ブロックの処理タイミングが合うように待ち合わせを行っても構わない。
【０１３５】
また、ＩＮＳＥＲＴ処理時には、ルールは複数の決定木のうち必ず１つだけに追加され、ＤＥＬＥＴＥ処理時にも、削除対象ルールが必ず１つだけ削除されることを想定している。本実施の形態における動作では、既に追加されているエントリと同一エントリを追加しようとする場合の処理については、詳細には述べていない。しかし、ＩＮＳＥＲＴ処理時に、追加対象木以外の決定木も含めて、有効エントリに対して新規追加エントリとの比較を行うことで、既に追加済みのエントリとの重複追加を防止することが可能である。このような処理は、上記のＬＯＯＫＵＰ処理と組み合わせることで実現可能である。なお、ＩＮＳＥＲＴ時に追加しようとしているエントリと既に追加済みのエントリとの確認を行うことによって、ＤＥＬＥＴＥ時に、削除しようとしているルールが複数の箇所から削除されてしまうようなことは発生しない。
【０１３６】
更に、コマンド入力ブロック４は、外部から入力データ６として、処理種別や検索キー、追加／削除対象エントリを受け取り、装置内コマンドを生成していた。しかし、入力データ６として到着パケット、又は到着パケットのヘッダ情報データを直接受け取り、ヘッダ解析、検索キーの抽出を行い、装置内コマンドを生成しても構わない。
【０１３７】
１−４．効果
本実施の形態によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
【０１３８】
また、本実施の形態によれば、ＩＮＳＥＲＴ処理において、有効ルールエントリ数が最小であるエントリリストに新規ルールが追加される。これにより、複数の決定木間でのルール数の偏りが抑えられ、好適である。
【０１３９】
更に、本実施の形態によれば、ＩＮＳＥＲＴ処理やＤＥＬＥＴＥ処理といったエントリの動的更新に要する処理時間が一定となる。
【０１４０】
具体的に、各処理に要するサイクル数、及びパケット分類器１に対する次のコマンド入力までのサイクル数の概算値を見積もる。尚、ここでの見積もりは、コマンド入力ブロック４、エントリ追加対象決定ブロック３、結果出力ブロック５、決定木ノード処理ブロック２００、エントリ数カウントブロック２１、ルール処理ブロック２２０においては、読み出し処理とそれに関連する処理、あるいは、書き込み処理とそれに関連する処理を、それぞれ１単位サイクルで実行できるとした場合の概算値である。ここで、１単位サイクルは望ましくは１クロックサイクルである。また、次のコマンド入力までのサイクル数は、厳密にはＬＯＯＫＵＰ処理、ＩＮＳＥＲＴ処理、ＤＥＬＥＴＥ処理それぞれに対して次にどの処理コマンドを入力するかによって変わってくるが、ここでは次の処理コマンドを入力するまでサイクル数が最も大きい場合についての見積もり値である。
【０１４１】
ＬＯＯＫＵＰ処理の場合、パケット分類器１内の各メモリ領域に対しては、読み出ししか実行しない。そのため、コマンド入力ブロック４の処理、決定木処理ブロック２のＨ段の決定木パイプラインブロック２０における処理、Ｂ段のルールパイプラインブロック２２における処理、結果出力ブロック５の処理を、合計Ｈ＋Ｂ＋２単位サイクルで実行することが可能である。また、メモリ内の情報は更新されないため、ＬＯＯＫＵＰコマンドを入力したすぐ次のサイクルにて、次のコマンドを入力することができる。
【０１４２】
ＩＮＳＥＲＴ処理の場合、パケット分類器１内の各メモリ領域に対して、読み出し、書き込みが実行される。このため、コマンド入力ブロック４の処理、決定木処理ブロック２のＨ段の決定木パイプラインブロック２０の処理、エントリ数カウントブロック２１の読み出し処理、エントリ追加対象決定ブロック３の処理、エントリ数カウントブロック２１の書き込み処理、Ｂ段のルールパイプラインブロック２２における読み出し処理と１回の書き込み処理、結果出力ブロック５の処理を、Ｈ＋Ｂ＋６単位サイクルで実行することが可能である。また、エントリ数カウントブロック２１のエントリ数記憶ブロック２１１の書き込み処理が完了した後で無ければ、次のコマンド、特にＩＮＳＥＲＴ処理を正しく実行できない。このため、ＩＮＳＥＲＴコマンドを入力後３単位サイクル経過すれば、次のコマンドを入力することができる。
【０１４３】
ＤＥＬＥＴＥ処理の場合、ＩＮＳＥＲＴ処理の場合と同様、本パケット分類器内の各メモリ領域に対して、読み出し、書き込みが実行される。このため、コマンド入力ブロック４の処理、決定木処理ブロック２のＨ段の決定木パイプラインブロック２０の処理、Ｂ段のルールパイプラインブロック２２における読み出し処理と１回の書き込み処理、エントリ数カウントブロック２１における１回の読み出しと１回の書き込み処理、結果出力ブロック５の処理を、Ｈ＋Ｂ＋５単位サイクルで実行することが可能である。また、エントリ数カウントブロック２１のエントリ数記憶ブロック２１１の書き込み処理が完了した後で無ければ、次のコマンド、特にＩＮＳＥＲＴ処理を正しく実行できない。このため、ＩＮＳＥＲＴコマンドを入力後Ｂ＋３単位サイクル経過すれば、次のコマンドを入力することができる。
【０１４４】
このように、本実施の形態では、例えば、ＬＯＯＫＵＰ処理はＨ＋Ｂ＋２単位サイクル、ＩＮＳＥＲＴ処理はＨ＋Ｂ＋６単位サイクル、ＤＥＬＥＴＥ処理はＨ＋Ｂ＋５単位サイクルといった固定時間で処理可能である。従来例のように、ルールの複製が要因で処理時間が変動するようなことはない。また、ＬＯＯＫＵＰ処理の場合は次の単位サイクルで、ＩＮＳＥＲＴ処理の場合は３単位サイクル経過後、ＤＥＬＥＴＥ処理の場合はＢ＋３単位サイクル経過後に、次のコマンドを入力することができる。従って、わずかな処理オーバーヘッドで、各処理を実行することが可能である。
【０１４５】
２．第２の実施の形態
次に、本発明の第２の実施の形態を説明する。尚、第１の実施の形態と重複する説明は適宜省略される。
【０１４６】
２−１．構成及び概要
図２４は、第２の実施の形態に係るパケット分類器１の構成を示すブロック図である。図４で示された第１の実施の形態の構成と比較して、決定木処理ブロック２−１〜２−Ｎが、それぞれ、決定木処理ブロック９−１〜９−Ｎによって置き換えられている。
【０１４７】
図２５は、第２の実施の形態に係る決定木処理ブロック９の構成を示すブロック図である。図５で示された決定木処理ブロック２の構成と比較して、エントリ数カウントブロック２１が省かれている。また、ルールパイプラインブロック２２のルール処理ブロック２２０−Ｂは、出力データ２６をエントリ追加対象決定ブロック３に出力する。また、ルール処理ブロック２２０−１は、エントリ追加対象決定ブロックから入力データ２７を受け取る。
【０１４８】
本実施の形態によれば、ＩＮＳＥＲＴ処理時、エントリ追加対象候補の全てが、一旦、新規ルールを決定木に追加する。この処理は、以下「一時追加処理」と参照される。より詳細には、一時追加処理において、エントリ追加対象候補の各々のルールパイプラインブロック２２が、追加対象葉ノードによって管理されるルールリストに新規ルールを一時的に追加する。この一時追加処理の最中に、ルールパイプラインブロック２２は、当該ルールリスト中の有効ルールエントリ数をカウントする。そして、ルールパイプラインブロック２２が、エントリ数カウントブロック２１の代わりに、有効ルールエントリ数をエントリ追加対象決定ブロック３に通知する。具体的には、ルールパイプラインブロック２２の最終段のルール処理ブロック２２０−Ｂが、一時追加処理を通して得られた有効ルールエントリ数を示す出力データ２６を、エントリ追加対象決定ブロック３に出力する。
【０１４９】
エントリ追加対象決定ブロック３は、第１の実施の形態と同様に、エントリ追加対象候補の中から１つのエントリ追加対象を選択する。そして、エントリ追加対象決定ブロック３は、選択結果を示す情報（入力データ２７）を、全てのエントリ追加対象候補に送る。
【０１５０】
選択されたエントリ追加対象以外のエントリ追加対象候補の各々は、「追加エントリ無効化処理」を行う。この追加エントリ無効化処理では、当該エントリ追加対象候補は、上記一時追加処理によって一時的に追加された新規ルールを無効化する。追加エントリ無効化処理は、ＤＥＬＥＴＥ処理と同様に実現可能である。
【０１５１】
このように、本実施の形態によれば、エントリ数カウントブロック２１を用いることなく、第１の実施の形態と同じ処理結果を得ることができる。エントリ数カウントブロック２１が省かれるため、全体のメモリ容量を削減することが可能である。
【０１５２】
２−２．動作
次に、本実施の形態に係るパケット分類器１の動作を詳しく説明する。
【０１５３】
２−２−１．ＬＯＯＫＵＰ処理
ＬＯＯＫＵＰ処理は、第１の実施の形態の場合と同様である。
【０１５４】
２−２−２．ＩＮＳＥＲＴ処理
次に、ＩＮＳＥＲＴ処理を説明する。図２６は、本実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。ステップＡ１、Ａ６、Ａ１３は、第１の実施の形態のＩＮＳＥＲＴ処理の場合と同じである。
【０１５５】
ステップＡ３：
ステップＡ６が終了すると、ステップＡ７の代わりに、ＬＯＯＫＵＰ処理の場合と同様にステップＡ３が実行される。すなわち、決定木ノード処理ブロック２００−Ｈは、ルールパイプラインブロック２２のルール処理ブロック２２０−１に、算出したアドレス値とコマンドを含む出力データ２００３を出力する。
【０１５６】
ステップＡ１８：
ルールパイプラインブロック２２は、上述の「一時追加処理」を実行する。図２７は、本ステップＡ１８の処理を示すフローチャートである。
【０１５７】
ステップＣ１２：
ステップＡ１８は、ルールリスト中の１番目のルールから開始する。具体的には、初段のルール処理ブロック２２０−１から処理を開始する。ここで、有効ルールエントリ数は、初期値０に設定される。
【０１５８】
ステップＣ２、Ｃ３、Ｃ１９：
第１の実施の形態と同様に、ルール処理ブロック２２０は、エントリ情報を読み出し、有効フラグを確認する（ステップＣ２）。ルールが有効である場合（ステップＣ３；Ｙｅｓ）、ルール処理ブロック２２０は、有効ルールエントリ数に“１”を加算する（ステップＣ１９）。その後、処理はステップＣ１５に進む。
【０１５９】
ステップＣ１５：
ルール処理ブロック２２０−ｉは、次段のルール処理ブロック２２０−（ｉ＋１）に、アドレス値及びコマンドに加えて有効ルールエントリ数を含む出力データ２２０４を出力する。そして、処理はステップＣ２に戻り、ルールリスト中の次のルールに対する処理が実行される。
【０１６０】
ステップＣ１３：
一方、ルールが有効ではない場合（ステップＣ３；Ｎｏ）、ルール処理ブロック２２０は、コマンド内の終了フラグを参照する。終了フラグが‘１’である場合（ステップＣ１３；Ｙｅｓ）、処理は上記ステップＣ１５に進む。一方、終了フラグが‘０’である場合（ステップＣ１３；Ｎｏ）、処理はステップＣ１４に進む。
【０１６１】
ステップＣ１４：
第１の実施の形態と同様に、ルール処理ブロック２２０は、当該エントリ（すなわち、空きエントリ）に新規ルールを書き込み、有効フラグを‘１’に設定する。更に、ルール処理ブロック２２０は、コマンド内の終了フラグを‘１’に設定し、結果フラグを‘１’（追加成功）に設定する。その後、処理はステップＣ９に進む。
【０１６２】
ステップＣ９、Ｃ２０：
第１の実施の形態と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合（ステップＣ９；Ｎｏ）、処理は上記ステップＣ１５に進む。一方、最後のルールの場合（ステップＣ９；Ｙｅｓ）、ルール処理ブロック２２０−Ｂは、現在のコマンド及び有効ルールエントリ数を、エントリ追加対象決定ブロック３に出力する（ステップＣ２０）。そして、ステップＡ１８が終了する。
【０１６３】
ステップＡ９：
次に、エントリ追加対象決定ブロック３は、第１の実施の形態と同様に、エントリ追加対象候補の中からエントリ追加対象を選択する。そして、エントリ追加対象決定ブロック３は、選択結果を示す情報を、全てのエントリ追加対象候補に送る。
【０１６４】
ステップＡ１４：
ルールパイプラインブロック２２は、上述の「追加エントリ無効化処理」を実行する。この追加エントリ無効化処理は、ＤＥＬＥＴＥ処理と同様に行われる。ここで、削除対象のルールは、一時追加処理によって追加された新規ルールである。尚、追加エントリ無効化処理を実施する際のコマンドの処理種別として、第１の実施の形態で使用されなかった“１１”を用いることが考えられる。また、このときの終了フラグ、結果フラグについては、初期化しておく。
【０１６５】
２−２−３．ＤＥＬＥＴＥ処理
図２８は、本実施の形態におけるＤＥＬＥＴＥ処理を示すフローチャートである。本実施の形態によれば、エントリ数カウントブロック２１が省かれている。従って、図２２で示された第１の実施の形態におけるＤＥＬＥＴＥ処理と比較して、エントリ数カウントブロック２１に関連するステップＡ１５、Ａ１６を省略することができる。その他は、第１の実施の形態と同様である。
【０１６６】
２−３．効果
本実施の形態によれば、第１の実施の形態と同じ効果が得られる。更に、メモリ領域が削減される。
【０１６７】
第１の実施の形態の場合と同様に、各処理に要するサイクル数、及びパケット分類器１に対する次のコマンド入力までのサイクル数の概算値を見積もる。
【０１６８】
ＬＯＯＫＵＰ処理は、第１の実施の形態と同じである。
【０１６９】
ＩＮＳＥＲＴ処理は、コマンド入力ブロック４の処理、決定木処理ブロック２のＨ段の決定木パイプラインブロック２０の処理、Ｂ段のルールパイプラインブロック２２における読み出し処理と１回の書き込み処理、エントリ追加対象決定ブロック３の処理、さらに、Ｂ段のルールパイプラインブロック２２における読み出し処理と１回の書き込み処理、結果出力ブロック５の処理を含む。従って、全体で、Ｈ＋２Ｂ＋５単位サイクルで実行することが可能である。また、追加対象木以外の決定木に対する追加エントリの無効化を完了しなければ、その後の処理を待ち合わせ無く行うことができない。このため、ＩＮＳＥＲＴコマンドを入力後Ｂ＋３単位サイクル経過すれば、次のコマンドを入力することができる。
【０１７０】
ＤＥＬＥＴＥ処理は、コマンド入力ブロック４の処理、決定木処理ブロック２のＨ段の決定木パイプラインブロック２０の処理、Ｂ段のルールパイプラインブロック２２における読み出し処理と１回の書き込み処理、結果出力ブロック５の処理を含む。従って、全体で、Ｈ＋Ｂ＋３単位サイクルで実行することが可能である。一方、削除対象エントリは順次削除されるため、エントリの削除を行うルールパイプラインブロック２２における１回の書き込み処理を考慮し、ＤＥＬＥＴＥコマンドを入力後１単位サイクル経過すれば、次のコマンドを入力することができる。
【０１７１】
このように、本実施の形態では、例えば、ＬＯＯＫＵＰ処理はＨ＋Ｂ＋２単位サイクル、ＩＮＳＥＲＴ処理はＨ＋２Ｂ＋５単位サイクル、ＤＥＬＥＴＥ処理はＨ＋Ｂ＋３単位サイクルといった固定時間で処理可能である。従来例のように、ルールの複製が要因で処理時間が変動するようなことはない。また、ＬＯＯＫＵＰ処理の場合は次の単位サイクルで、ＩＮＳＥＲＴ処理の場合はＢ＋３単位サイクル経過後、ＤＥＬＥＴＥ処理の場合は１単位サイクル経過後に次のコマンドを入力することができる。従って、わずかな処理オーバーヘッドが必要になるものの、各処理を順次実行することが可能である。
【０１７２】
３．第３の実施の形態
本発明の第３の実施の形態は、コマンドの構成及びそのコマンドを用いたＩＮＳＥＲＴ処理が、第２の実施の形態と異なる。構成、ＬＯＯＫＵＰ処理及びＤＥＬＥＴＥ処理は第２の実施の形態と同様であり、重複する説明は適宜省略される。
【０１７３】
図２９は、第３の実施の形態におけるコマンドの構成例を示す概念図である。図２９に示されるように、本実施の形態によれば、コマンド部に更に「エントリ追加リストＩＤ」のフィールドが追加されている。このエントリ追加リストＩＤは、上述の一時追加処理において新規ルールが追加された位置（段数）を示す位置情報である。つまり、ルール処理ブロック２２０−ｉ（ｉ＝１、２、・・・、Ｂ）において新規ルールが追加された場合、エントリ追加リストＩＤには“ｉ”が設定される。
【０１７４】
図３０は、本実施の形態におけるＩＮＳＥＲＴ処理を示すフローチャートである。本実施の形態では、一時追加処理として、第２の実施の形態でのステップＡ１８の代わりに、ステップＡ１９が実行される。また、追加エントリ無効化処理として、第２の実施の形態でのステップＡ１４の代わりに、ステップＡ２０が実行される。その他は、第２の実施の形態と同様である。
【０１７５】
ステップＡ１９：
図３１は、ステップＡ１９の処理を示すフローチャートである。第２の実施の形態でのステップＡ１８（図２７参照）と比較して、ステップＣ１４とステップＣ９との間にステップＣ２１が追加されている。ステップＣ２１において、ルール処理ブロック２２０−ｉは、コマンドのエントリ追加リストＩＤを、当該ルール処理ブロックのＩＤ（＝ｉ）に設定する。その他は、ステップＡ１８と同様である。
【０１７６】
ステップＡ２０：
図３２は、ステップＡ２０の処理を示すフローチャートである。
【０１７７】
ステップＣ１：
ステップＡ２０は、ルールリスト中の１番目のルールから開始する。具体的には、初段のルール処理ブロック２２０−１から処理を開始する。
【０１７８】
ステップＣ２２：
ルール処理ブロック２２０は、自身のＩＤが、入力されたコマンドのエントリ追加リストＩＤと一致するか否か判定する。一致の場合（ステップＣ２２；Ｙｅｓ）、処理はステップＣ２に進む。一方、不一致の場合（ステップＣ２２；Ｎｏ）、処理はステップＣ９に進む。
【０１７９】
ステップＣ２、Ｃ１８：
ルール処理ブロック２２０は、入力されたアドレス値を用いてエントリ記憶ブロック２２０１からエントリ情報を読み出す（ステップＣ２）。更に、ルール処理ブロック２２０は、エントリ情報中の有効フラグを‘０’に設定し、エントリ記憶ブロック２２０１に書き込む。これにより、当該エントリ（ルール）は無効化される。更に、ルール処理ブロック２２０は、コマンド内の終了フラグを‘１’に設定し、結果フラグを‘１’（削除成功）に設定する。その後、処理はステップＣ９に進む。
【０１８０】
ステップＣ９、Ｃ１５：
既出の実施の形態の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合（ステップＣ９；Ｎｏ）、ルール処理ブロック２２０−ｉは、次段のルール処理ブロック２２０−（ｉ＋１）に、アドレス値とコマンドを含む出力データ２２０４を出力する（ステップＣ１５）。そして、処理はステップＣ２２に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合（ステップＣ９；Ｙｅｓ）、ステップＡ２０は終了する。
【０１８１】
本実施の形態によれば、第２の実施の形態と同じ効果が得られる。更に、追加エントリ無効化処理において、無効化しないルールに関するルールマッチング処理（読み出し／比較処理）をスキップすることができる。従って、処理時間及び消費電力が低減される。
【０１８２】
４．第４の実施の形態
図３３は、本発明の第４の実施の形態に係るパケット分類器の構成を示すブロック図である。第４の実施の形態では、コンピュータがソフトウェアプログラムを実行することによりパケット分類処理が実現される。具体的には、本実施の形態に係るパケット分類器は、プログラム処理装置１０とパケット分類プログラム１１を備えている。プログラム処理装置１０は、サーバやＰＣ等のホストのＣＰＵにより実現される。パケット分類プログラム１１は、プログラム処理装置１０によって実行されるコンピュータプログラムであり、プログラム処理装置１０の動作を制御する。プログラム処理装置１０は、パケット分類プログラム１１を実行することにより、既出の実施の形態で説明されたパケット分類器１の機能を備えることができる。
【０１８３】
尚、パケット分類プログラム１１は、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
【０１８４】
プログラム処理装置１０として、複数のＣＰＵコアを有するマルチコアプロセッサ（さらには、より多くのＣＰＵコアを有するメニーコアプロセッサ）を用いてもよい。その場合、それぞれのＣＰＵコアに、コマンド入力ブロック４、決定木処理ブロック２−１〜２−Ｎ、エントリ追加対象決定ブロック３、結果出力ブロック５、さらには、決定木処理ブロック２を構成する各決定木ノード処理ブロック２００、エントリ数カウントブロック２１、ルール処理ブロック２２０の処理を実行させることにより、より高速な処理が可能となる。
【０１８５】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１８６】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１８７】
（付記１）
パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、
前記複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、
前記複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと
を備え、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記コマンドが検索コマンドである場合、前記複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定し、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木処理ブロックの各々は、前記新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定し、
前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記エントリ追加対象決定ブロックは、前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択し、
前記選択されたエントリ追加対象は、前記新たなルールを、自身の決定木における前記追加対象葉ノードが管理するルールリストに追加する
パケット分類器。
【０１８８】
（付記２）
付記１に記載のパケット分類器であって、
前記エントリ追加対象候補は、前記追加対象葉ノードが管理している有効なルールのエントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象決定ブロックは、前記エントリ数に基づいて、前記エントリ追加対象を選択する
パケット分類器。
【０１８９】
（付記３）
付記２に記載のパケット分類器であって、
前記エントリ追加対象決定ブロックは、前記エントリ数が最小である前記エントリ追加対象候補を、前記エントリ追加対象として選択する
パケット分類器。
【０１９０】
（付記４）
付記２又は３に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、自身の決定木の各葉ノードによって管理されている有効なルールのエントリ数を記憶するエントリ数記憶ブロックを備え、
前記エントリ追加対象候補は、前記追加対象葉ノードに関する前記エントリ数を前記エントリ数記憶ブロックから読み出し、前記読み出したエントリ数を前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象は、前記追加対象葉ノードに関する前記エントリ数に１を加算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
【０１９１】
（付記５）
付記４に記載のパケット分類器であって、
前記コマンドが既存ルールを削除するための削除コマンドである場合、前記複数の決定木処理ブロックの各々は、前記既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定し、
前記既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロックはエントリ削除対象であり、当該単一の葉ノードは削除対象葉ノードであり、
前記エントリ削除対象は、前記既存ルールを無効化し、また、前記削除対象葉ノードに関する前記エントリ数から１を減算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
【０１９２】
（付記６）
付記２又は３に記載のパケット分類器であって、
前記エントリ追加対象候補の各々は、前記追加対象葉ノードが管理するルールリストに前記新たなルールを一時的に追加する一時追加処理を行い、また、前記一時追加処理の最中に、当該ルールリスト中の有効なルールのエントリ数をカウントし、
前記エントリ追加対象候補の各々は、前記一時追加処理において得られた前記エントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記一時的に追加された新たなルールを無効化する追加エントリ無効化処理を行う
パケット分類器。
【０１９３】
（付記７）
付記６に記載のパケット分類器であって、
前記一時追加処理において、前記エントリ追加対象候補の各々は、前記ルールリスト中で前記新たなルールが追加された位置を示す位置情報を前記挿入コマンドに書き込み、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記位置情報を参照することによって、ルールマッチングを行うことなく、前記追加エントリ無効化処理を行う
パケット分類器。
【０１９４】
（付記８）
付記１乃至７のいずれか一項に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、
各決定木の段数と同じ段数の決定木ノード処理ブロックを備え、前記決定木ノード処理ブロックを用いることによって決定木の探索をパイプライン処理で行う決定木パイプラインブロックと、
各葉ノードにおいて管理可能なルール数と同じ段数のルール処理ブロックを備え、前記ルール処理ブロックを用いることによってルールの検索、追加及び削除をパイプライン処理で行うルールパイプラインブロックと
を備える
パケット分類器。
【０１９５】
（付記９）
複数の決定木を用いたパケット分類方法であって、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記パケット分類方法は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類方法。
【０１９６】
（付記１０）
複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムであって、
１つのルールは、前記複数の決定木のうちいずれか１つの決定木における単一の葉ノードによって管理され、
前記パケット分類処理は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類プログラム。
【０１９７】
本出願は、２０１０年１２月１５日に出願された日本国特許出願２０１０−２７９６９３を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１９８】
１    パケット分類器
２    決定木処理ブロック
３    エントリ追加対象決定ブロック
４    コマンド入力ブロック
５    結果出力ブロック
９    決定木処理ブロック
１０    プログラム処理装置
１１    パケット分類プログラム
２０    決定木パイプラインブロック
２１    エントリ数カウントブロック
２２    ルールパイプラインブロック
２００    決定木ノード処理ブロック
２１０    カウント処理ブロック
２１１    エントリ数記憶ブロック
２２０    ルール処理ブロック
２０００    子ノード決定ブロック
２００１    ノード情報記憶ブロック
２２００    比較更新処理ブロック
２２０１    エントリ記憶ブロック
【図１】
0005807676.tif 000002
【図２】
0005807676.tif 000003
【図３】
0005807676.tif 000004
【図４】
0005807676.tif 000005
【図５】
0005807676.tif 000006
【図６】
0005807676.tif 000007
【図７】
0005807676.tif 000008
【図８】
0005807676.tif 000009
【図９】
0005807676.tif 000010
【図１０】
0005807676.tif 000011
【図１１】
0005807676.tif 000012
【図１２】
0005807676.tif 000013
【図１３】
0005807676.tif 000014
【図１４】
0005807676.tif 000015
【図１５】
0005807676.tif 000016
【図１６】
0005807676.tif 000017
【図１７】
0005807676.tif 000018
【図１８】
0005807676.tif 000019
【図１９】
0005807676.tif 000020
【図２０】
0005807676.tif 000021
【図２１】
0005807676.tif 000022
【図２２】
0005807676.tif 000023
【図２３】
0005807676.tif 000024
【図２４】
0005807676.tif 000025
【図２５】
0005807676.tif 000026
【図２６】
0005807676.tif 000027
【図２７】
0005807676.tif 000028
【図２８】
0005807676.tif 000029
【図２９】
0005807676.tif 000030
【図３０】
0005807676.tif 000031
【図３１】
0005807676.tif 000032
【図３２】
0005807676.tif 000033
【図３３】
0005807676.tif 000034