JP2014504042A - パケット分類器、パケット分類方法、及びパケット分類プログラム - Google Patents
パケット分類器、パケット分類方法、及びパケット分類プログラム Download PDFInfo
- Publication number
- JP2014504042A JP2014504042A JP2013514491A JP2013514491A JP2014504042A JP 2014504042 A JP2014504042 A JP 2014504042A JP 2013514491 A JP2013514491 A JP 2013514491A JP 2013514491 A JP2013514491 A JP 2013514491A JP 2014504042 A JP2014504042 A JP 2014504042A
- Authority
- JP
- Japan
- Prior art keywords
- rule
- entry
- block
- decision tree
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/748—Address table lookup; Address filtering using longest matching prefix
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
パケット分類器は、複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、それら決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、エントリ追加対象決定ブロックとを備える。1つのルールは、いずれかの決定木の単一の葉ノードによって管理される。コマンドが新たなルールを追加するための挿入コマンドである場合、各決定木処理ブロックの各々は、その新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定する。当該新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードである。エントリ追加対象決定ブロックは、エントリ追加対象をエントリ追加対象候補の中から選択する。選択されたエントリ追加対象は、当該新たなルールを、追加対象葉ノードが管理するルールリストに追加する。
【選択図】図4
【選択図】図4
Description
本発明は、パケット分類(Packet Classification)に関する。
パケット分類(Packet Classification)は、ネットワーク上のルータやスイッチにおいて、パケットをフローと呼ばれる一連の属性をもつパケット列に分類するための重要な技術である。パケット分類は、個々のフローに対するQoS(Quality of Service)の提供や、ファイヤウォール(Firewall)等のセキュリティといった、付加的な価値をもつネットワークアプリケーションの実現に重要な役割を果たす。
パケット分類では、パケットのヘッダに含まれている1つ以上のフィールドを用いて、「ルール(フィルタと呼ばれることもある)」が定義される。ルールは、例えば、パケットのIP(Internet Protocol)ヘッダに定義されている送信元IPアドレス、宛先IPアドレス、プロトコル番号に加え、TCP(Transmission Control Protocol)/UDP(User Datagram Protocol)ヘッダに定義されている送信ポート番号、宛先ポート番号といった複数のヘッダフィールドによって定義される。このようにルールが複数のヘッダフィールドを用いて定義されているパケット分類は、特に、Multi−Field Packet Classificationと呼ばれている。
通常、このようなルールは複数個定義される。パケットが到着すると、そのパケットヘッダからルールの定義に用いられているフィールド値が抽出される。抽出されたフィールド値の組が複数個のルールと比較され、どのルールにマッチするか判定されることにより、パケットがフローに分類される。ここで、到着したパケットのヘッダから抽出されたフィールド値の組を「検索キー」と呼ぶ。また、一般的には、各ルールに対して、優先度(Priority)とアクション(Action)とが定義される。検索キーが複数個のルールのうち、2つ以上のルールにマッチする場合には、優先度がより高いルールが選択される。また、アクションには、そのルールにマッチした場合に到着パケットをどのように扱うか(例えば、廃棄する、1番のポートに送信する等)が定義される。
また、ルールにおける各フィールドに対しては、ある特定の値として定義されるExact Match、上位の複数ビットは特定されるが下位の数ビットはワイルドカード(wildcard)‘*’を用いて不定として定義されるPrefix Match、2つのある特定の値の範囲として定義するRange Match、個々のビット単位にワイルドカードを指定して定義されるWildcard Matchといった手法が用いられる。例えば、8bitのフィールドを考えた場合、“00110101”のように特定値として指定されるものがExact Match、“0011****”のように、“0011”の4bitから始まる値として指定されるものがPrefix Match、[3−64]のように8bitのフィールドが10進数で考えた際に3から64の範囲に入っていればよいとするものがRange Match、“0**10*01”のようにビット単位でワイルドカードが使用できるものがWildcard Matchである。
このようなMulti−Field Packet Classification技術に関して、ルールセットの大容量化とリンク速度の向上により、高速なルータやスイッチにおいてこれをいかに高速に処理させるかが1つの技術的な課題となっている。現状、その高速処理を実現するためにTernary Content Addressable Memory(TCAM)を基にした手法が用いられることが多い。
しかしながら、TCAMはコストが高く、消費電力や回路規模も大きいといった問題が存在する。また、Range Matchを用いた場合には、そのルールをPrefix Matchを用いたルールに分割する必要があるため、ルール数が増加してしまうといった問題もある。
その一方で、TCAMの高コスト、高消費電力の問題を回避すべく、より低コスト、低消費電力なStatic Random Access Memory(SRAM)やDynamic Random Access Memory(DRAM)を用いた様々なMulti−Field Packet Classification手法が提案されている。
例えば、非特許文献1では、「決定木(Decision Tree)」を用いた手法が提案されている。決定木を用いた手法では、全てのルールに対してマッチングを行うのではなく、当該検索キーがマッチする可能性のある少数のルールに対してのみマッチングを行う。これにより、検索処理に要する時間が短縮される。決定木を用いた手法について図1〜図3を用いて簡単に説明する。
図1は、それぞれ4bit長である2つのフィールドX、Yを用いて定義されたR0からR15までの16個のルールからなるルールセットの例を示している。フィールドX、Yは、例えば、送信元IPアドレスや送信元ポート番号等、実際のパケットヘッダフィールドに相当する。尚、フィールドXは、2進数で表記されており、‘*’はワイルドカードを示している。また、フィールドYは、Range Matchで表記されており、“[a:b]”のa、bはそれぞれ下限値、上限値(10進数表記)を示している。尚、ここでは、各ルールに付与される優先度とアクションについては省略している。
図2は、図1で示されたルールセットを、フィールドX、Yの2軸から成る2次元空間上で表している。尚、X軸、Y軸上の数はそれぞれ10進数で表記してある。決定木を用いた手法によれば、図2に示されるような多次元空間を複数の次元に着目して分割する。そして、分割領域内に存在するルール数がある閾値以下になるまで領域分割を繰り返すことにより、決定木が構築される。ここで、分割された領域で管理されるルール群を「ルールリスト」と呼ぶ。
図3は、図1で示されたルールセットに対して構築された決定木の一例を示している。尚、図3で示される決定木では、分割領域内のルール数の閾値は2に設定されている。図3に示されるように、まず、全空間がX方向とY方向のそれぞれに2分割される。つまり、全空間(X、Y)=([0:15]、[0:15])が、領域0([0:7]、[0:7])、領域1([0:7]、[8:15])、領域2([8:15]、[0:7])、及び領域3([8:15]、[8:15])の4つの領域に分割される。また、それぞれの領域で管理されるルールリストは、[R7、R8、R9、R11](領域0)、[R0、R6、R9、R10、R11、R12](領域1)、[R1、R2、R3、R4、R5、R13、R14](領域2)、[R10、R14、R15](領域3)となる。各領域には、まだ閾値である2よりも多いルールが管理されているため、それぞれの領域について、閾値以下のルール数になるまでさらに領域分割を行う。図3に示される例では、全空間は最終的に24の領域に分割されている。なお、決定木を構築するアルゴリズムについては、非特許文献1や非特許文献2に記載されているため、ここでは省略する。
パケット分類を行う場合には、検索キーを参照しながら決定木を辿っていき、辿り着いた葉ノードで管理されている閾値数以下のルールの全てに対してマッチングが行われる。例として、検索キーがX=0111、Y=1001となるパケットに対するパケット分類を考える。図3に示される決定木では、根ノードにおいて全空間が上記4つの領域に分割されており、当該パケットは、それら4つの領域のうち、領域1([0:7]、[8:15])に属することが分かる。続いて、領域1のノードでは、更に、空間がX方向とY方向のそれぞれに2分割されている。つまり、領域1が、領域10([0:3]、[8:11])、領域11([0:3]、[12:15])、領域12([4:7]、[8:11])、及び領域13([4:7]、[12:15])に4分割されている。当該パケットは、このうち領域12に属することが分かる。更にその領域12は4分割されており、当該パケットは、領域122([6:7]、[8:9])に属することが分かる。そして、その領域122で管理されている2つのルールR9、R10に対してマッチングが実施され、マッチしたルールが選択される。尚、本例では、当該パケットがルールR9、R10の両方にマッチするため、図3では省略している各ルールに付与された優先度に応じて、ルールが選択される。
以上に説明されたような決定木を用いた手法によれば、領域分割の結果、同じルールが複数の分割領域で管理される可能性があり、これは以下「ルールの複製」と参照される。例えば図3では、R7やR9等のルールが複製されている。ルールの複製が発生した場合、複製されたルールそのもの、あるいは、複製されたルールに対するアドレス値を管理するためのメモリ容量が増加し、見た目上、実際のルールセットよりも多くのルールを扱うことになる。つまり、ルールの複製は、決定木におけるデータ量の増加を招く。ルールの複製を抑制するための技術として、次のものが知られている。
非特許文献1によれば、葉ノードではないノードもルールリストを持つ。そして、領域分割の結果、全ての子ノード(分割領域)に同一のルールが複製されてしまう場合には、複製されるルールが当該ノードのルールリストで管理される。しかしながら、この手法では、全てではない複数の子ノードへのルールの複製を防止することはできない。
非特許文献2では、決定木を用いたパケット分類手法を、パイプライン処理を用いたハードウェアによって高速に処理させるハードウェアアーキテクチャが提案されている。本方式においても、葉ノードではないノードも同様にルールリストを持つ。そして、領域分割の結果、同一のルールが複数の子ノードに複製されてしまう場合には、複製されるルールが当該ノードのルールリストで管理される。しかしながら、単一ノードにおいて複製されるルールの数がルールリストで管理可能なルール数以上となる場合には、ルールの複製が発生してしまう。
非特許文献3では、非特許文献2と同様に、ハードウェアがパイプライン処理を用いてパケット分類を実施する方式が提案されている。但し、非特許文献1や非特許文献2の場合とは異なり、決定木では葉ノードのみがルールを管理する。本方式によれば、複数の決定木が用意され、ルールの複製が発生しないいずれかの決定木が当該ルールを管理する。これにより、ルールの複製が防止される。
Sumeet Singh、Florin Baboescu、George Varghese、Jia Wang、"Packet Classification Using Multidimensional Cutting"、Proceedings of the ACM SIGCOMM 2003 Conference on Applications、Technologies、Architectures、and Protocols for Computer Communications、2003年、pp.213−224
Weirong Jiang、 Viktor K. Prasanna、"Large−Scale Wire−Speed Packet Classification on FPGAs"、Proceedings of the ACM/SIGDA International Symposium on Field Programmable Gate Arrays、2009年、pp.219−228
Weirong Jiang、 Viktor K. Prasanna、Norio Yamagaki、"Decision Forest: A Scalable Architecture for Flexible Flow Matching on FPGA"、Proceedings of 2010 International Conference on Field Programmable Logic and Application、2010年、pp.394−399
決定木を用いたパケット分類では、その決定木に対して新たなルールを追加したり、その決定木から既存ルールを削除したりすることも重要である。そのようなルールの追加/削除処理は、以下、「エントリの動的更新」と参照される。
非特許文献3では、エントリの動的更新を行うための具体的な手順については述べられていない。従って、どの決定木のどのノードにおけるルールを更新するのか、あらかじめ決定しておく必要があると考えられる。すなわち、エントリの動的更新を行うために、「前処理」が別途必要になるという問題がある。特に、非特許文献3では、予め与えられたルールセットに対して最適な決定木を構成することを前提としているため、最悪の場合には、決定木の構成自体を全て変更する必要があると考えられる。そのような場合には、エントリの動的更新の前処理に必要な時間と、エントリ更新に必要な時間が共に増大してしまうという問題がある。
本発明の1つの目的は、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することができる技術を提供することにある。
本発明の1つの観点において、パケット分類器が提供される。そのパケット分類器は、パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと、を備える。1つのルールは、複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理される。コマンドが検索コマンドである場合、複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定する。コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木処理ブロックの各々は、新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定する。新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードである。この場合、エントリ追加対象決定ブロックは、新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択する。そして、選択されたエントリ追加対象は、新たなルールを、自身の決定木における追加対象葉ノードが管理するルールリストに追加する。
本発明の他の観点において、複数の決定木を用いたパケット分類方法が提供される。1つのルールは、複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理される。本発明に係るパケット分類方法は、(A)複数の決定木に対してコマンドを一斉に入力するステップと、(B)コマンドが検索コマンドである場合、複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、(C)コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木の各々において、新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、(D)新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択するステップと、(E)新たなルールを、エントリ追加対象の追加対象葉ノードが管理するルールリストに追加するステップと、を含む。
本発明の更に他の観点において、複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムが提供される。1つのルールは、複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理される。本発明に係るパケット分類処理は、(A)複数の決定木に対してコマンドを一斉に入力するステップと、(B)コマンドが検索コマンドである場合、複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、(C)コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、複数の決定木の各々において、新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、(D)新たなルールを追加する対象であるエントリ追加対象を、エントリ追加対象候補の中から選択するステップと、(E)新たなルールを、エントリ追加対象の追加対象葉ノードが管理するルールリストに追加するステップと、を含む。
本発明によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
添付図面を参照して、本発明の実施の形態を説明する。
1.第1の実施の形態
1−1.概要
図4は、本発明の第1の実施の形態に係るパケット分類器1の構成を示すブロック図である。パケット分類器1は、決定木を用いることによりパケット分類を行う。つまり、パケット分類器1は、パケットヘッダから抽出された検索キーがどのルールにマッチするかを、決定木を用いることにより判定する。更に、本実施の形態に係るパケット分類器1は、入力コマンドに応じて、エントリの動的更新(新規ルールの追加、既存ルールの削除)を自動的に行う。
1−1.概要
図4は、本発明の第1の実施の形態に係るパケット分類器1の構成を示すブロック図である。パケット分類器1は、決定木を用いることによりパケット分類を行う。つまり、パケット分類器1は、パケットヘッダから抽出された検索キーがどのルールにマッチするかを、決定木を用いることにより判定する。更に、本実施の形態に係るパケット分類器1は、入力コマンドに応じて、エントリの動的更新(新規ルールの追加、既存ルールの削除)を自動的に行う。
本実施の形態において、パケット分類器1は、ハードウェア回路により実現される。より詳細には、図4に示されるように、パケット分類器1は、1個以上の複数の決定木処理ブロック2(2−1〜2−N:Nは2以上の整数)、エントリ追加対象決定ブロック3、コマンド入力ブロック4、及び結果出力ブロック5を備えている。また、パケット分類器1には入力データ6が入力され、パケット分類器1からは出力データ7が出力される。
入力データ6は、パケット分類器1が実行すべき処理に依存する。パケット分類器1が実行する処理としては、(1)検索キーにマッチするルールを検索する処理(以下、「LOOKUP処理」と参照される)、(2)新規ルール(新規エントリ)を決定木に追加する処理(以下、「INSERT処理」と参照される)、及び(3)既存ルール(既存エントリ)を無効化する処理(以下、「DELETE処理」と参照される)、(4)パケット分類器1に含まれるメモリや設定レジスタ等へ予め設定値を書き込むConfiguration処理、が挙げられる。ここで、Configuration処理は初期化時に行われ、パケット分類器1に含まれる各ブロック内に備えられた設定レジスタやメモリへ構成に関わる値を設定することである。以下では、LOOKUP処理、INSERT処理、DELETE処理に関してのみ説明する。入力データ6は、処理種別を示す種別データと、当該処理で用いられるデータとを含む。LOOKUP処理の場合、入力データ6は、LOOKUP処理を示す種別データと、検索キーとを含む。INSERT処理の場合、入力データ6は、INSERT処理を示す種別データと、追加すべき新規ルールとを含む。DELETE処理の場合、入力データ6は、DELETE処理を示す種別データと、無効化すべき既存ルールとを含む。
コマンド入力ブロック4は、入力データ6を受け取り、その入力データ6に応じたコマンドを作成する。入力データ6の場合と同様に、コマンドは、処理種別を示す種別データと、当該処理で用いられるデータとを含む。LOOKUP処理の実行を指示する検索コマンドは、LOOKUP処理を示す種別データと、検索キーとを含む。INSERT処理の実行を指示する挿入コマンドは、INSERT処理を示す種別データと、追加すべき新規ルールとを含む。DELETE処理の実行を指示する削除コマンドは、DELETE処理を示す種別データと、無効化すべき既存ルールとを含む。コマンド入力ブロック4は、生成したコマンドを、複数の決定木処理ブロック2−1〜2−Nに対して一斉に入力する。
複数の決定木処理ブロック2−1〜2−Nのそれぞれは、パケット分類に用いられる複数の決定木を構成する。ここで、複数の決定木は、非特許文献3に記載されている手法と同様に、ルールの複製が生じないように構成される。つまり、各ルールは、当該ルールの複製が生じない決定木において管理される。言い換えれば、1つのルールは、複数の決定木のうちいずれか1つの決定木における単一の葉ノードでのみ管理される。各決定木処理ブロック2は、コマンド入力ブロック4から入力されたコマンドに応じて、LOOKUP処理、INSERT処理、あるいはDELETE処理を実行する。尚、複数の決定木処理ブロック2−1〜2−Nは、同時並列に各処理を実行することができる。
<LOOKUP処理>
複数の決定木処理ブロック2−1〜2−Nは、検索コマンドに応じて、LOOKUP処理を同時並列に実行する。具体的には、各決定木処理ブロック2は、自身の決定木を用いることによって、検索キーがいずれかの葉ノードで管理されているいずれかのルールにマッチするか否かを判定する。検索キーにマッチするルールが存在する場合、当該決定木処理ブロック2は、当該マッチルールを結果出力ブロック5に通知する。検索キーが当該葉ノードにおけるルールリストに含まれるルールの複数にマッチする場合、当該決定木処理ブロック2は、複数のマッチルールのうち最も優先度の高いルールを結果出力ブロック5に通知する。一方、検索キーにマッチするルールが存在しない場合、当該決定木処理ブロック2は、マッチルールが存在しなかったことを結果出力ブロック5に通知する。結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから検索結果を受け取り、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック5は、その選択結果を示す出力データ7を、LOOKUP処理の最終結果として出力する。
複数の決定木処理ブロック2−1〜2−Nは、検索コマンドに応じて、LOOKUP処理を同時並列に実行する。具体的には、各決定木処理ブロック2は、自身の決定木を用いることによって、検索キーがいずれかの葉ノードで管理されているいずれかのルールにマッチするか否かを判定する。検索キーにマッチするルールが存在する場合、当該決定木処理ブロック2は、当該マッチルールを結果出力ブロック5に通知する。検索キーが当該葉ノードにおけるルールリストに含まれるルールの複数にマッチする場合、当該決定木処理ブロック2は、複数のマッチルールのうち最も優先度の高いルールを結果出力ブロック5に通知する。一方、検索キーにマッチするルールが存在しない場合、当該決定木処理ブロック2は、マッチルールが存在しなかったことを結果出力ブロック5に通知する。結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから検索結果を受け取り、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック5は、その選択結果を示す出力データ7を、LOOKUP処理の最終結果として出力する。
<INSERT処理>
複数の決定木処理ブロック2−1〜2−Nは、挿入コマンドに応じて、INSERT処理を同時並列に実行する。具体的には、まず、各決定木処理ブロック2は、新規ルールを自身の決定木に追加してもルールの複製が発生しないかどうか判定する。言い換えれば、各決定木処理ブロック2は、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得るかどうかを判定する。ルールの複製が発生してしまう場合、当該決定木処理ブロック2は、新規ルールの追加対象とはならない。一方、ルールの複製が発生しない場合、すなわち、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得る場合、当該決定木処理ブロック2は「エントリ追加対象候補」となり、当該単一の葉ノードは「追加対象葉ノード」となる。
複数の決定木処理ブロック2−1〜2−Nは、挿入コマンドに応じて、INSERT処理を同時並列に実行する。具体的には、まず、各決定木処理ブロック2は、新規ルールを自身の決定木に追加してもルールの複製が発生しないかどうか判定する。言い換えれば、各決定木処理ブロック2は、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得るかどうかを判定する。ルールの複製が発生してしまう場合、当該決定木処理ブロック2は、新規ルールの追加対象とはならない。一方、ルールの複製が発生しない場合、すなわち、新規ルールが自身の決定木における単一の葉ノードによってのみ管理され得る場合、当該決定木処理ブロック2は「エントリ追加対象候補」となり、当該単一の葉ノードは「追加対象葉ノード」となる。
新規ルールが追加される対象である決定木処理ブロック2は、「エントリ追加対象」である。エントリ追加対象は、上記エントリ追加対象候補の中から選ばれる。そのエントリ追加対象を選ぶのが、エントリ追加対象決定ブロック3である。図4に示されるように、このエントリ追加対象決定ブロック3は、複数の決定木処理ブロック2−1〜2−Nの各々に接続されている。そして、エントリ追加対象決定ブロック3は、複数の決定木処理ブロック2−1〜2−Nから通知される情報に基づいて、エントリ追加対象候補を認識し、エントリ追加対象候補の中からエントリ追加対象を選択する。
例えば、各エントリ追加対象候補は、追加対象葉ノードが管理している有効なルールのエントリ数を、エントリ追加対象決定ブロック3に通知する。そして、エントリ追加対象決定ブロック3は、各エントリ追加対象候補から受け取った有効エントリ数を参照し、所定のポリシーに従って、エントリ追加対象を選択する。例えば、エントリ追加対象決定ブロック3は、当該有効エントリ数が最小であるエントリ追加対象候補を、エントリ追加対象として選択する。この場合、複数の決定木間でのルール数の偏りが抑えられ、好適である。
エントリ追加対象決定ブロック3は、エントリ追加対象の選択結果を各決定木処理ブロック2に通知する。例えば、エントリ追加対象決定ブロック3は、エントリ追加対象に対して新規ルールの追加を指示し、それ以外の決定木処理ブロック2に対してルール追加処理の不実行を指示する。そして、エントリ追加対象である決定木処理ブロック2は、新規ルールを、自身の決定木における追加対象葉ノードが管理するルールリストに追加する。
このようにして、INSERT処理が実行される。結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから処理結果を受け取り、INSERT処理の最終結果を示す出力データ7を出力する。
<DELETE処理>
複数の決定木処理ブロック2−1〜2−Nは、削除コマンドに応じて、DELETE処理を同時並列に実行する。具体的には、各決定木処理ブロック2は、削除対象である既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定する。当該既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロック2は「エントリ削除対象」となり、当該単一の葉ノードは「削除対象葉ノード」となる。エントリ削除対象である決定木処理ブロック2は、削除対象葉ノードが管理していた当該既存ルールを無効化する。
複数の決定木処理ブロック2−1〜2−Nは、削除コマンドに応じて、DELETE処理を同時並列に実行する。具体的には、各決定木処理ブロック2は、削除対象である既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定する。当該既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロック2は「エントリ削除対象」となり、当該単一の葉ノードは「削除対象葉ノード」となる。エントリ削除対象である決定木処理ブロック2は、削除対象葉ノードが管理していた当該既存ルールを無効化する。
このようにして、DELETE処理が実行される。結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから処理結果を受け取り、DELETE処理の最終結果を示す出力データ7を出力する。
以上に説明されたように、本実施の形態によれば、ルールの複製が発生しない。特に、エントリの動的更新においても、ルールの複製が発生しないようにINSERT処理が実行される。比較例として、ルールの複製が許容された決定木に対してエントリの動的更新が実施される場合を考える。エントリの動的更新では、更新するエントリのメモリ上のデータ保存領域のデータを書き換える必要がある。ルールの複製が存在する場合には、その複製回数だけデータ書き換えが必要になる。従って、INSERT処理やDELETE処理において、その処理時間が毎回一定ではなくなり、場合によっては処理時間が非常に増大してしまう。本実施の形態によれば、このような問題が解決される。すなわち、INSERT処理やDELETE処理といったエントリの動的更新に要する処理時間が一定となる。
更に、本実施の形態によれば、INSERT処理時、複数の決定木処理ブロック2−1〜2−Nの各々が、挿入コマンドを受け取り、その挿入コマンドに応じて、自身がエントリ追加対象候補か否かを自動的に判定する。エントリ追加対象決定ブロック3は、少なくともエントリ追加対象候補から通知される情報に基づいて、適切なエントリ追加対象を自動的に決定する。そして、エントリ追加対象は、新規ルールを追加対象葉ノードに自動的に追加する。また、DELETE処理時、複数の決定木処理ブロック2−1〜2−Nの各々が、削除コマンドを受け取り、その削除コマンドに応じて、自身がエントリ削除対象か否かを自動的に判定する。そして、エントリ削除対象は、削除対象葉ノード中の指定されたルールを自動的に無効化する。このように、エントリの動的更新は、コマンドに応じて自動的に実施される。どの決定木のどのノードにおけるルールを更新するのか予め決定しておくといった「前処理」は不要である。すなわち、本実施の形態によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
尚、本実施の形態に係るパケット分類器1は、例えば、スイッチやルータ等のネットワーク装置内や、サーバの拡張カードやオンボードで搭載されるNIC(Network Interface Card)内に配備される。この場合、パケット分類器1は、制御ブロックと接続される。その制御ブロックは、到着したパケットのヘッダを解析する機能、当該パケットヘッダから検索キーを抽出する機能、その検索キーを用いたLOOKUP処理をパケット分類器1に実行させる機能を有する。更に、制御ブロックは、外部から指定される新規ルールを追加するINSERT処理をパケット分類器1に実行させる機能、及び外部から指定される既存ルールを削除するDELETE処理をパケット分類器1に実行させる機能を有する。パケット分類器1は、処理に応じた入力データ6を制御ブロックから受け取り、出力データ7を制御ブロックに出力する。
1−2.構成例
次に、本実施の形態に係るパケット分類器1の構成例を更に詳しく説明する。図5は、本実施の形態に係るパケット分類器1の各決定木処理ブロック2の構成を示すブロック図である。図5に示されるように、決定木処理ブロック2は、決定木パイプラインブロック20、エントリ数カウントブロック21、及びルールパイプラインブロック22を備えている。コマンド入力ブロック4から決定木処理ブロック2に入力されるデータは、入力データ23である。決定木処理ブロック2から結果出力ブロック5に出力されるデータは、出力データ24である。決定木処理ブロック2とエントリ追加対象決定ブロック3との間でやりとりされるデータは、入出力データ25である。
次に、本実施の形態に係るパケット分類器1の構成例を更に詳しく説明する。図5は、本実施の形態に係るパケット分類器1の各決定木処理ブロック2の構成を示すブロック図である。図5に示されるように、決定木処理ブロック2は、決定木パイプラインブロック20、エントリ数カウントブロック21、及びルールパイプラインブロック22を備えている。コマンド入力ブロック4から決定木処理ブロック2に入力されるデータは、入力データ23である。決定木処理ブロック2から結果出力ブロック5に出力されるデータは、出力データ24である。決定木処理ブロック2とエントリ追加対象決定ブロック3との間でやりとりされるデータは、入出力データ25である。
1−2−1.決定木パイプラインブロック20
決定木パイプラインブロック20は、パイプライン処理により決定木の探索を行う。具体的には、決定木パイプラインブロック20は、決定木の深さ(段数)Hと同じ段数の決定木ノード処理ブロック200−1〜200−Hを備えている。図6に示されるように、決定木ノード処理ブロック200−i(i=1、2、・・・、H)は、決定木の根ノードから深さj(j=0、1、・・・、H−1)のノードに対応しており、当該ノードに関する処理を行う。これら決定木ノード処理ブロック200−1〜200−Hを用いることによって、決定木パイプラインブロック20は、決定木の根ノードから葉ノードに向けて1ノードずつ探索処理を実行していく。好適には、1クロックサイクル毎に、決定木の1つのノードを辿る処理が実行される。
決定木パイプラインブロック20は、パイプライン処理により決定木の探索を行う。具体的には、決定木パイプラインブロック20は、決定木の深さ(段数)Hと同じ段数の決定木ノード処理ブロック200−1〜200−Hを備えている。図6に示されるように、決定木ノード処理ブロック200−i(i=1、2、・・・、H)は、決定木の根ノードから深さj(j=0、1、・・・、H−1)のノードに対応しており、当該ノードに関する処理を行う。これら決定木ノード処理ブロック200−1〜200−Hを用いることによって、決定木パイプラインブロック20は、決定木の根ノードから葉ノードに向けて1ノードずつ探索処理を実行していく。好適には、1クロックサイクル毎に、決定木の1つのノードを辿る処理が実行される。
図7は、本実施の形態に係る決定木ノード処理ブロック200の構成を示すブロック図である。図7に示されるように、決定木ノード処理ブロック200は、子ノード決定ブロック2000及びノード情報記憶ブロック2001を備えている。
ノード情報記憶ブロック2001は、メモリやレジスタ等の記憶媒体により構成され、ノード情報を記憶する。ノード情報は、根ノードから見て同じ深さにある全てのノードの各々に関して、当該ノードにおける領域分割情報、つまり当該ノードによって管理される子ノード(分割領域)に対する情報を示す。
決定木ノード処理ブロック200は、前段の決定木ノード処理ブロック200から入力データ2002を受け取る。但し、決定木ノード処理ブロック200−1は、コマンド入力ブロック4から入力データ2002(=入力データ23)を受け取る。入力データ2002は、各処理に応じたコマンドと、ノード情報記憶ブロック2001へのアクセスに用いられるアドレス値を含んでいる。前段の決定木ノード処理ブロック200からの入力データ2002は、更に、後述される「有効ビット長」の情報も含んでいる。
子ノード決定ブロック2000は、入力データ2002を受け取り、その入力データ2002で指定されているアドレス値を参照してノード情報記憶ブロック2001からノード情報を読み出す。そして、子ノード決定ブロック2000は、ノード情報、有効ビット長及びコマンドに基づいて、当該ノードの子ノードのノード情報が記憶されているアドレス値を算出する。また、子ノード決定ブロック2000は、有効ビット長を更新する。アドレス値の算出や有効ビット長の更新に関しては、後に詳しく説明される。出力データ2003は、入力データ2002に含まれていたコマンド、算出された新しいアドレス値、及び更新後の有効ビット長を含む。子ノード決定ブロック2000は、その出力データ2003を、次段の決定木ノード処理ブロック200に出力する。
最終段の決定木ノード処理ブロック200−Hに関しては、次の通りである。LOOKUP処理あるいはDELETE処理の場合、子ノード決定ブロック2000によって算出されるアドレス値は、ルールパイプラインブロック22のルール処理ブロック220のエントリ記憶ブロック2201(後述される)へのアクセスに用いられるアドレス値である。決定木ノード処理ブロック200−Hは、出力データ2003をルール処理ブロック220−1に出力する。また、INSERT処理の場合、子ノード決定ブロック2000によって算出されるアドレス値は、エントリ数カウントブロック21のエントリ数記憶ブロック211(後述される)へのアクセスに用いられるアドレス値である。出力データ2004は、入力データ2002に含まれていたコマンドと算出されたアドレス値を含む。子ノード決定ブロック2000は、その出力データ2004を、エントリ数カウントブロック21に出力する。
1−2−2.エントリ数カウントブロック21
エントリ数カウントブロック21は、決定木の全ての葉ノードに関して、管理されている有効なルールのエントリ数を葉ノード毎に管理する。尚、エントリ数カウントブロック21による処理は、決定木の深さHに相当する処理サイクルにおいて実行される。
エントリ数カウントブロック21は、決定木の全ての葉ノードに関して、管理されている有効なルールのエントリ数を葉ノード毎に管理する。尚、エントリ数カウントブロック21による処理は、決定木の深さHに相当する処理サイクルにおいて実行される。
図8は、本実施の形態に係るエントリ数カウントブロック21の構成を示すブロック図である。図8に示されるように、エントリ数カウントブロック21は、カウント処理ブロック210及びエントリ数記憶ブロック211を備えている。
エントリ数記憶ブロック211は、メモリやレジスタ等の記憶媒体により構成され、エントリ数情報を記憶する。エントリ数情報は、決定木の各葉ノードによって管理されている有効なルールのエントリ数を示す。
INSERT処理の場合、カウント処理ブロック210は、決定木パイプラインブロック20の決定木ノード処理ブロック200−Hから入力データ212(=上述の出力データ2004)を受け取る。その入力データ212は、挿入コマンド、及びエントリ数記憶ブロック211へのアクセスに用いられるアドレス値を含む。カウント処理ブロック210は、そのアドレス値を参照して、エントリ数記憶ブロック211から追加対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、読み出した有効ルールエントリ数を示す出力データ216を、上述のエントリ追加対象決定ブロック3に出力する。
また、カウント処理ブロック210は、エントリ追加対象決定ブロック3から入力データ216を受け取る。その入力データ216が「決定木への新規ルールの追加」を指定している場合、カウント処理ブロック210は、上記追加対象葉ノードに関する有効ルールエントリ数に“1”を加算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。更に、カウント処理ブロック210は、出力データ214を、ルールパイプラインブロック22のルール処理ブロック220−1に出力する。その出力データ214は、挿入コマンドと、ルール処理ブロック220−1のエントリ記憶ブロック2201(後述される)へのアクセスに用いられるアドレス値を含む。
DELETE処理の場合、カウント処理ブロック210は、ルールパイプラインブロック22のルール処理ブロック220−Bから入力データ213を受け取る。カウント処理ブロック210は、その入力データ213で指定されるアドレス値を参照して、エントリ数記憶ブロック211から削除対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、当該有効ルールエントリ数から“1”を減算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。更に、カウント処理ブロック210は、DELETE処理の完了を示す出力データ215を、出力データ24として結果出力ブロック5に出力する。
1−2−3.ルールパイプラインブロック22
ルールパイプラインブロック22は、パイプライン制御によりルール処理(検索キーにマッチするルールの検索、新規ルールの追加、既存ルールの削除)を行う。具体的には、ルールパイプラインブロック22は、各葉ノードにおいて管理可能な最大ルール数(ルールリストのサイズ)Bと同じ段数のルール処理ブロック220−1〜220−Bを備えている。図9に示されるように、ルール処理ブロック220−i(i=1、2、・・・、B)は、当該葉ノードのルールリストに含まれるルールj(j=1、2・・・、B)に対応付けられており、当該ルールjに関するルール処理を実行する。これらルール処理ブロック220−1〜220−Bを用いることによって、ルールパイプラインブロック22は、葉ノードのルールリストに含まれる各ルールに対してルール処理を実行する。好適には、1クロックサイクル毎に、1つのルールに対するルール処理が実行される。
ルールパイプラインブロック22は、パイプライン制御によりルール処理(検索キーにマッチするルールの検索、新規ルールの追加、既存ルールの削除)を行う。具体的には、ルールパイプラインブロック22は、各葉ノードにおいて管理可能な最大ルール数(ルールリストのサイズ)Bと同じ段数のルール処理ブロック220−1〜220−Bを備えている。図9に示されるように、ルール処理ブロック220−i(i=1、2、・・・、B)は、当該葉ノードのルールリストに含まれるルールj(j=1、2・・・、B)に対応付けられており、当該ルールjに関するルール処理を実行する。これらルール処理ブロック220−1〜220−Bを用いることによって、ルールパイプラインブロック22は、葉ノードのルールリストに含まれる各ルールに対してルール処理を実行する。好適には、1クロックサイクル毎に、1つのルールに対するルール処理が実行される。
図10は、本実施の形態に係るルール処理ブロック220の構成を示すブロック図である。図10に示されるように、ルール処理ブロック220は、比較更新処理ブロック2200及びエントリ記憶ブロック2201を備えている。
エントリ記憶ブロック2201は、メモリやレジスタ等の記憶媒体により構成され、エントリ情報を記憶する。エントリ情報は、当該ルールが有効か無効かを示す有効フラグ、ルールID、ルール等を含む。
LOOKUP処理あるいはDELETE処理の場合、ルール処理ブロック220−1は、決定木パイプラインブロック20の決定木ノード処理ブロック200−Hから入力データ2202(=上述の出力データ2003)を受け取る。入力データ2202は、各処理に応じたコマンドと、エントリ記憶ブロック2201へのアクセスに用いられるアドレス値を含んでいる。
INSERT処理の場合、ルール処理ブロック220−1は、エントリ数カウントブロック21から入力データ2203(=上述の出力データ214)を受け取る。入力データ2203は、挿入コマンドと、エントリ記憶ブロック2201へのアクセスに用いられるアドレス値を含んでいる。入力データ2203は、これ以降、上記入力データ2202と同様に扱われる。
比較更新処理ブロック2200は、入力データ2202を受け取り、その入力データ2202で指定されているアドレス値を参照してエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、読み出したエントリ情報に基づいて、コマンドに応じたルール処理を実行する。ルール処理の詳細は後述される。また、比較更新処理ブロック2200は、受け取った入力データ2202を出力データ2204として、次段のルール処理ブロック220に出力する。
ルール処理ブロック220−2〜220−Bの各々は、前段のルール処理ブロック220から入力データ2202(=上述の出力データ2204)を受け取る。比較更新処理ブロック2200による処理は、上記と同じである。尚、DELETE処理の場合、最終段のルール処理ブロック220−Bの比較更新処理ブロック2200は、出力データ2204の代わりに出力データ2205(=上述の入力データ213)をエントリ数カウントブロック21に出力する。出力データ2205の内容は、出力データ2204と同じである。
1−3.動作
次に、本実施の形態に係るパケット分類器1の動作を詳しく説明する。
次に、本実施の形態に係るパケット分類器1の動作を詳しく説明する。
1−3−1.LOOKUP処理
まず、LOOKUP処理を説明する。図11は、本実施の形態におけるLOOKUP処理を示すフローチャートである。
まず、LOOKUP処理を説明する。図11は、本実施の形態におけるLOOKUP処理を示すフローチャートである。
ステップA1:
パケット分類器1に、入力データ6が入力される。その入力データ6は、LOOKUP処理を示す種別データと、被検索対象パケットから抽出された検索キーとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、検索コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
パケット分類器1に、入力データ6が入力される。その入力データ6は、LOOKUP処理を示す種別データと、被検索対象パケットから抽出された検索キーとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、検索コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
図12は、装置内コマンドの構成例を示す概念図である。コマンド部分は、処理種別、終了フラグ、及び結果フラグを含んでいる。例えば、2ビットデータである処理種別は、“00”であればLOOKUP処理、“01”であればINSERT処理、“10”であればDELETE処理を示す。終了フラグは、‘0’であれば未終了、‘1’であれば終了を示す。結果フラグは、エントリの追加、削除を行った場合に、‘1’に設定される。尚、終了フラグと結果フラグについては、INSERT処理及びDELETE処理においてのみ参照され、それらの利用方法については後述する。また、装置内コマンドの後半部分には、検索キー(LOOKUP処理)、追加される新規エントリ(INSERT処理)、あるいは、削除される既存エントリ(DELETE処理)が格納される。
ここで、エントリ(ルール)は、Prefix Match、Range Match、Wildcard Matchを考慮すると様々な表現形態が考えられる。例えば、検索キー長と同じ長さのデータ列A、Bを用意し、Prefix MatchやWildcard Matchの場合には、Aに対象データ、Bにマスクビットデータを割り当て、Range Matchの場合には、Aに下限値、Bに上限値を割り当てる方法が考えられる。この場合、ルールのエントリ長は検索キー長の2倍となる。これらを考慮し、装置内コマンドの後半部分においては、LOOKUP処理時の検索キーと、INSERT、DELETE処理時の追加・削除エントリの長さが異なることを許容する。なお、追加エントリの場合には、その優先度も指定される。
ステップA2:
コマンド入力ブロック4から検索コマンドを受け取ると、各決定木処理ブロック2は、指定された検索キーを用いて、自身の決定木を辿る処理を実行する。図13は、本ステップA2の処理を示すフローチャートである。
コマンド入力ブロック4から検索コマンドを受け取ると、各決定木処理ブロック2は、指定された検索キーを用いて、自身の決定木を辿る処理を実行する。図13は、本ステップA2の処理を示すフローチャートである。
ステップB1:
決定木を辿る処理は、決定木の根ノードから開始する。そのため、まず、現在の処理ノードが、決定木の根ノードに設定される。具体的には、挿入コマンドが、決定木パイプラインブロック20の初段の決定木ノード処理ブロック200−1に入力される。
決定木を辿る処理は、決定木の根ノードから開始する。そのため、まず、現在の処理ノードが、決定木の根ノードに設定される。具体的には、挿入コマンドが、決定木パイプラインブロック20の初段の決定木ノード処理ブロック200−1に入力される。
ステップB2:
子ノード決定ブロック2000は、処理種別がLOOKUPであることを確認した上で、ノード情報記憶ブロック2001からノード情報を読み出す。
子ノード決定ブロック2000は、処理種別がLOOKUPであることを確認した上で、ノード情報記憶ブロック2001からノード情報を読み出す。
図14は、ノード情報の構成例を示す概念図である。ノード情報は、当該ノードにおける領域分割情報である。図14に示されるように、ノード情報は、フィールド識別子(フィールドID)とその分割数(k)のC個のペア、及びベースアドレスを含んでいる。ここで、Cは決定木の1ノードにおける領域分割に用いることができるフィールドの最大数である。フィールドIDは、検索キーやルールを構成するフィールド毎に予め決められている。また、各フィールドの範囲は、2k分割されるとし(kは自然数)、分割数kはその指数を表す。例えば、既出の図1〜図3の例のように、フィールドX、Yの各々の範囲が2分割される場合、フィールドXの分割数kは1であり、フィールドYの分割数kも1である。尚、kの最大数は予め決められている。ベースアドレスは、当該ノードの子ノードのノード情報が格納されている記憶領域の最小アドレス値を示す。より詳細には、ベースアドレスは、当該ノードの子ノードのノード情報が格納されている次段の決定木ノード処理ブロック200のノード情報記憶ブロック2001における最小アドレス値であり、当該ノードの全ての子ノードのノード情報は、このベースアドレスから連続する記憶領域に格納されている。
ステップB3:
子ノード決定ブロック2000は、読み出したノード情報、検索キーの各フィールドのビット列、及び有効ビット長に基づいて、次段の子ノードのノード情報が格納されている記憶領域のアドレス値を算出する。具体的には、次のようにして次段のアドレス値は算出される(図15も参照されたい)。
子ノード決定ブロック2000は、読み出したノード情報、検索キーの各フィールドのビット列、及び有効ビット長に基づいて、次段の子ノードのノード情報が格納されている記憶領域のアドレス値を算出する。具体的には、次のようにして次段のアドレス値は算出される(図15も参照されたい)。
例えば、ノード情報として、2つのフィールドに関する分割情報(フィールドID、分割数)=(0001、01)、(0100、11)とベースアドレス=00001000が設定されているとする。検索キーにおいては、フィールドID=0001のフィールド値が“0101”、フィールドID=0100のフィールド値が“0110”であり、それぞれの有効ビット長が3、4であったとする。ここで、有効ビット長とは、各フィールドのビット列に対し、領域分割に用いる下位ビットからの長さに相当する。つまり、フィールド値のうち、有効ビット長で指定された長さをもつ下位ビットからのビット列が参照される。フィールドID=0001に関して説明する。有効ビット長が3であることから、フィールド値の下位3ビット“101”を参照する。そして、分割数k=1であるため、有効ビットの上位1ビットを参照し、‘1’を得る(図15参照)。同様に、フィールドID=0100に関しては、有効ビット長が4、分割数kが3であることから、“011”を得る。これらを連結した“1011”に対して、ベースアドレス“00001000”が加算される。その結果得られる“00010011”が、次段の子ノードのノード情報が格納されている記憶領域のアドレス値である。
ステップB4:
続いて、子ノード決定ブロック2000は、入力された有効ビット長から分割数kを減算することによって、有効ビット長を更新する。上記の例では、フィールドID=0001の有効ビット長が3−1=2に、フィールドID=0100の有効ビット長が4−3=1に更新される。尚、決定木ノード処理ブロック200−1には有効ビット長が入力されないが、その場合の有効ビット長は、予め各フィールドのフィールド長として設定されているものとする。それ以降の決定木ノード処理ブロック200に対しては、前段の決定木ノード処理ブロック200から有効ビット長が入力される。
続いて、子ノード決定ブロック2000は、入力された有効ビット長から分割数kを減算することによって、有効ビット長を更新する。上記の例では、フィールドID=0001の有効ビット長が3−1=2に、フィールドID=0100の有効ビット長が4−3=1に更新される。尚、決定木ノード処理ブロック200−1には有効ビット長が入力されないが、その場合の有効ビット長は、予め各フィールドのフィールド長として設定されているものとする。それ以降の決定木ノード処理ブロック200に対しては、前段の決定木ノード処理ブロック200から有効ビット長が入力される。
ステップB5、B6:
次に、子ノードが葉ノードであるか否かが判定される。具体的には、決定木ノード処理ブロック200−Hが処理するノードの子ノードが葉ノードであるため(図6参照)、処理する決定木ノード処理ブロック200が自動的に判別すればよい。
次に、子ノードが葉ノードであるか否かが判定される。具体的には、決定木ノード処理ブロック200−Hが処理するノードの子ノードが葉ノードであるため(図6参照)、処理する決定木ノード処理ブロック200が自動的に判別すればよい。
次ノードが葉ノードではない場合(ステップB5;No)は、決定木ノード処理ブロック200−i(i=1、2、・・・、H−1)の場合に相当する。その決定木ノード処理ブロック200−iは、次段の決定木ノード処理ブロック200−(i+1)に出力データ2003を出力する(ステップB6)。その出力データ2003は、入力データ2002に含まれていたコマンド、算出された新しいアドレス値、及び更新後の有効ビット長を含む。そして、処理はステップB2に戻り、次段のノードが処理ノードとなる。
次ノードが葉ノードである場合(ステップB5;Yes)は、決定木ノード処理ブロック200−Hの場合に相当する。この場合、ステップA2が終了する。
ステップA3:
ステップA2が終了すると、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA2が終了すると、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA4:
続いて、ルールパイプラインブロック22が、検索キーとルールリスト中の各ルールとの比較(マッチング処理)を行う。図16は、本ステップA4の処理を示すフローチャートである。
続いて、ルールパイプラインブロック22が、検索キーとルールリスト中の各ルールとの比較(マッチング処理)を行う。図16は、本ステップA4の処理を示すフローチャートである。
ステップC1:
マッチング処理は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
マッチング処理は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップC2:
比較更新処理ブロック2200は、処理種別がLOOKUPであることを確認した上で、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。
比較更新処理ブロック2200は、処理種別がLOOKUPであることを確認した上で、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。
図17は、エントリ情報の構成例を示す概念図である。エントリ情報は、当該ルールが有効であるかを示す有効フラグ、ルールID、ルール、優先度を含んでいる。ルールに対応するアクションを同時に記憶する場合には、アクションを加えても良い。ここでは、アクションは本パケット分類器1とは異なる場所で管理されており、本パケット分類器1によって検索を行った後に、当該ルールIDを用いることによりアクションが取得されるとする。なお、図17のエントリ情報の構成例では、ルールIDを含んでいたが、これをエントリ情報には含まず、例えば、処理を行った決定木処理ブロックのID、葉ノードのID、ルールリストの順序等からルールIDを生成しても良い。より具体的には、処理を行った決定木処理ブロック2−i(i=1、2、・・・、N)のi、決定木処理ブロック2−iで辿り着いた葉ノードのIDであるj、ルール処理ブロック220−k(k=1、2、・・・、B)のkを2進数で連結したものをルールIDとして参照することが可能である。
ステップC4:
ルールが有効である場合(ステップC3;Yes)、比較更新処理ブロック2200は、検索キーと読み出したルールとの比較を行う。この比較方法については、例えば、非特許文献2に開示されている。
ルールが有効である場合(ステップC3;Yes)、比較更新処理ブロック2200は、検索キーと読み出したルールとの比較を行う。この比較方法については、例えば、非特許文献2に開示されている。
ステップC6:
検索キーがルールにマッチした場合(ステップC5;Yes)、比較更新処理ブロック2200は、当該ルールの優先度と現在のマッチルールの優先度を比較する。ここで、現在のマッチルールとは、前段のルール処理ブロック220までにマッチしたルールのうち、最も優先度が高いルールを意味する。一方、現在のルール処理ブロック220において比較に用いられたルールは、比較ルールと参照される。
検索キーがルールにマッチした場合(ステップC5;Yes)、比較更新処理ブロック2200は、当該ルールの優先度と現在のマッチルールの優先度を比較する。ここで、現在のマッチルールとは、前段のルール処理ブロック220までにマッチしたルールのうち、最も優先度が高いルールを意味する。一方、現在のルール処理ブロック220において比較に用いられたルールは、比較ルールと参照される。
ステップC8:
比較ルールの優先度の方が大きかった場合(ステップC7;Yes)、比較更新処理ブロック2200は、比較ルールを新たな現在のマッチルールに設定する。その後、処理は、ステップC9に進む。
比較ルールの優先度の方が大きかった場合(ステップC7;Yes)、比較更新処理ブロック2200は、比較ルールを新たな現在のマッチルールに設定する。その後、処理は、ステップC9に進む。
ステップC9、C10、C11:
現在のルールが、ルールリスト中の最後のルールか否かが判定される。具体的には、ルール処理ブロック220−i(i=1、2、・・・、B−1)が処理を実行している場合、それは最後のルールではない(ステップC9;No)。この場合、そのルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC10)。そして、処理はステップC2に戻り、ルールリスト中の次のルールに対するマッチング処理が実行される。
現在のルールが、ルールリスト中の最後のルールか否かが判定される。具体的には、ルール処理ブロック220−i(i=1、2、・・・、B−1)が処理を実行している場合、それは最後のルールではない(ステップC9;No)。この場合、そのルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC10)。そして、処理はステップC2に戻り、ルールリスト中の次のルールに対するマッチング処理が実行される。
尚、読み出したルールが有効で無い場合(ステップC3;No)、及び、検索キーがルールにマッチしない場合(ステップC5;No)、更に、比較ルールの優先度がマッチルールの優先度よりも小さかった場合(ステップC7;No)にも、処理はステップC9に進む。
現在のルールがルールリスト中の最後のルールである場合、つまり、処理がルール処理ブロック220−Bで行われた場合(ステップC9;Yes)、ルール処理ブロック220−Bは、マッチルールのルールIDと優先度、及びコマンドを、結果出力ブロック5に出力する(ステップC11)。そして、ステップA4が終了する。尚、マッチルールが存在しない場合には、例えば、ルールIDのビット値が全て1であるような特値を出力することで、マッチルールが存在しなかったことを示す。
ステップA5:
結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから検索結果を受け取る。結果出力ブロック5は、マッチルールの優先度同士を比較し、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック5は、その選択結果を示す出力データ7として、例えば、最高優先度であったマッチルールのルールIDを、LOOKUP処理の最終結果として出力する。このとき、マッチルールが存在しなかった場合には、上述した特値のルールIDを出力することで、マッチルールが存在しなかったことを示すことができる。
結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nから検索結果を受け取る。結果出力ブロック5は、マッチルールの優先度同士を比較し、最も優先度の高いマッチルールを選択する。そして、結果出力ブロック5は、その選択結果を示す出力データ7として、例えば、最高優先度であったマッチルールのルールIDを、LOOKUP処理の最終結果として出力する。このとき、マッチルールが存在しなかった場合には、上述した特値のルールIDを出力することで、マッチルールが存在しなかったことを示すことができる。
1−3−2.INSERT処理
次に、INSERT処理を説明する。図18は、本実施の形態におけるINSERT処理を示すフローチャートである。
次に、INSERT処理を説明する。図18は、本実施の形態におけるINSERT処理を示すフローチャートである。
ステップA1:
パケット分類器1に、入力データ6が入力される。その入力データ6は、INSERT処理を示す種別データと、追加される新規ルールとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、挿入コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
パケット分類器1に、入力データ6が入力される。その入力データ6は、INSERT処理を示す種別データと、追加される新規ルールとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、挿入コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
ステップA6:
コマンド入力ブロック4から挿入コマンドを受け取ると、各決定木処理ブロック2は、指定された新規ルールを用いて、自身の決定木を辿る処理を実行する。図19は、本ステップA6の処理を示すフローチャートである。
コマンド入力ブロック4から挿入コマンドを受け取ると、各決定木処理ブロック2は、指定された新規ルールを用いて、自身の決定木を辿る処理を実行する。図19は、本ステップA6の処理を示すフローチャートである。
ステップB1:
まず、LOOKUP処理の場合と同様に、現在の処理ノードが、決定木の根ノードに設定される。
まず、LOOKUP処理の場合と同様に、現在の処理ノードが、決定木の根ノードに設定される。
ステップB7:
子ノード決定ブロック2000は、処理種別がINSERTであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップB7;Yes)、処理はステップB5に進む。一方、終了フラグが‘0’である場合(ステップB7;No)、処理はステップB2に進む。
子ノード決定ブロック2000は、処理種別がINSERTであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップB7;Yes)、処理はステップB5に進む。一方、終了フラグが‘0’である場合(ステップB7;No)、処理はステップB2に進む。
ステップB2:
LOOKUP処理の場合と同様に、子ノード決定ブロック2000は、ノード情報記憶ブロック2001からノード情報を読み出す。
LOOKUP処理の場合と同様に、子ノード決定ブロック2000は、ノード情報記憶ブロック2001からノード情報を読み出す。
ステップB8:
子ノード決定ブロック2000は、読み出したノード情報、新規ルールの各フィールドのビット列、及び有効ビット長に基づいて、ルールの複製が発生するか否か判定する。ルールの複製が発生するか否かは、アドレス値の算出を行う際に、ワイルドカードが含まれるか否かで判断することができる。
子ノード決定ブロック2000は、読み出したノード情報、新規ルールの各フィールドのビット列、及び有効ビット長に基づいて、ルールの複製が発生するか否か判定する。ルールの複製が発生するか否かは、アドレス値の算出を行う際に、ワイルドカードが含まれるか否かで判断することができる。
例えば、ノード情報として、2つのフィールドに対する領域分割情報(フィールドID、分割数)=(0001、01)、(0100、11)とベースアドレス=00001000が設定されていたとする。追加対象ルールにいては、フィールドID=0001、フィールドID=0100の各フィールドに対して、(フィールド値、マスクビット列)が、(“0101”、“1111”)、(“0110”、“1111”)のように設定されており、それぞれの有効ビット長が3、4であったとする。なお、マスクビット列は各ビットが‘1’であれば有効、‘0’であれば無効、つまり、ワイルドカードとして扱うものとする。この場合、両フィールドともに、ワイルドカードは含まれていないため、ルールの複製は発生しないことが分かり、LOOKUP時のステップB3と同様に、次の子ノードのアドレス値を算出することができる。一方、同様のノード情報、有効ビット長に対して、追加対象ルールにおけるフィールドID=0001、フィールドID=0100の各フィールドの(フィールド値、マスクビット列)が、(“0101”、“1111”)、(“0110”、“1100”)のように設定されている場合を考える。この場合、マスクビット列を考慮すると、各フィールド値はそれぞれ、“0101”、“01**”となる。ノード情報を元に子ノードのアドレス値を算出しようとすると、それぞれの有効ビット長が3、4であることから、フィールドID=0001に対して、下位3ビット“101”の上位1ビットを参照し、‘1’を得る。一方、フィールドID=0100のフィールドに対しては、有効ビット長が4、分割数が3であることから、“01*”を得る。この結果、子ノードの分割領域を示すビット列にワイルドカードが含まれ、これは、ルールの複製が発生することを意味する。なお、フィールド値がRange Matchとして設定されている場合、下限値と上限値の有効ビット長に相当するビット列に対し、参照するビット列が共に同じ値であるか否かで判断できる。例えば、上記の例において、フィールドID=0001が下限値0000、上限値0011として設定されていたとする。有効ビット長が3であることから、下限値、上限値の下位3ビットの“000”と“011”を参照する。分割数が1であることから、各有効ビット長の先頭ビットを参照し、共に‘0’であることから、領域分割を行ってもルールの複製が発生しないと判断できる。一方、フィールドID=0001が下限値0000、上限値0111が設定されている場合には、参照ビットが‘0’と‘1’であるため、ルールの複製が発生すると判断できる。
ステップB10:
ルールの複製が発生する場合(ステップB9;Yes)、当該決定木処理ブロック2は、エントリ追加対象候補とはならない。この場合、子ノード決定ブロック2000は、コマンドの終了フラグを‘1’に設定する。その後、処理はステップB5に進む。
ルールの複製が発生する場合(ステップB9;Yes)、当該決定木処理ブロック2は、エントリ追加対象候補とはならない。この場合、子ノード決定ブロック2000は、コマンドの終了フラグを‘1’に設定する。その後、処理はステップB5に進む。
ステップB3、B4:
一方、ルールの複製が発生しない場合(ステップB9;No)、LOOKUP処理の場合と同様に、次段のアドレス値の算出(ステップB3)及び有効ビット長の更新(ステップB4)が行われる。その後、処理はステップB5に進む。
一方、ルールの複製が発生しない場合(ステップB9;No)、LOOKUP処理の場合と同様に、次段のアドレス値の算出(ステップB3)及び有効ビット長の更新(ステップB4)が行われる。その後、処理はステップB5に進む。
ステップB5、B6:
LOOKUP処理の場合と同様に、ステップB5、B6が実施される。つまり、次ノードが葉ノードではない場合(ステップB5;No)は、決定木ノード処理ブロック200−i(i=1、2、・・・、H−1)は、次段の決定木ノード処理ブロック200−(i+1)に出力データ2003を出力する(ステップB6)。そして、処理はステップB7に戻り、次段のノードが処理ノードとなる。一方、次ノードが葉ノードである場合(ステップB5;Yes)は、ステップA6が終了する。
LOOKUP処理の場合と同様に、ステップB5、B6が実施される。つまり、次ノードが葉ノードではない場合(ステップB5;No)は、決定木ノード処理ブロック200−i(i=1、2、・・・、H−1)は、次段の決定木ノード処理ブロック200−(i+1)に出力データ2003を出力する(ステップB6)。そして、処理はステップB7に戻り、次段のノードが処理ノードとなる。一方、次ノードが葉ノードである場合(ステップB5;Yes)は、ステップA6が終了する。
ステップA7:
ステップA6が終了すると、決定木ノード処理ブロック200−Hは、算出したアドレス値とコマンドを含む出力データ2004を、エントリ数カウントブロック21に出力する。
ステップA6が終了すると、決定木ノード処理ブロック200−Hは、算出したアドレス値とコマンドを含む出力データ2004を、エントリ数カウントブロック21に出力する。
ステップA8:
エントリ数カウントブロック21のカウント処理ブロック210は、決定木ノード処理ブロック200−Hから入力データ212(=上述の出力データ2004)を受け取る。カウント処理ブロック210は、処理種別がINSERTであることを確認した上で、終了フラグを参照する。終了フラグが‘0’の場合、当該決定木処理ブロック2は、エントリ追加対象候補である。この場合、カウント処理ブロック210は、入力されたアドレス値を用いて、エントリ数記憶ブロック211から追加対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、読み出した有効ルールエントリ数を示す出力データ216を、エントリ追加対象決定ブロック3に出力する。
エントリ数カウントブロック21のカウント処理ブロック210は、決定木ノード処理ブロック200−Hから入力データ212(=上述の出力データ2004)を受け取る。カウント処理ブロック210は、処理種別がINSERTであることを確認した上で、終了フラグを参照する。終了フラグが‘0’の場合、当該決定木処理ブロック2は、エントリ追加対象候補である。この場合、カウント処理ブロック210は、入力されたアドレス値を用いて、エントリ数記憶ブロック211から追加対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、読み出した有効ルールエントリ数を示す出力データ216を、エントリ追加対象決定ブロック3に出力する。
一方、終了フラグが‘1’の場合、当該決定木処理ブロック2は、エントリ追加対象候補ではない。この場合、カウント処理ブロック210は、処理終了信号をエントリ追加対象決定ブロック3に出力する。あるいは、カウント処理ブロック210は、有効ルールエントリ数を最大値に設定し、その有効ルールエントリ数をエントリ追加対象決定ブロック3に通知してもよい。
ステップA9:
エントリ追加対象決定ブロック3は、複数の決定木処理ブロック2−1〜2−Nから通知される情報に基づいて、エントリ追加対象候補を認識し、エントリ追加対象候補の中からエントリ追加対象を選択する。図20は、本ステップA9の処理を示すフローチャートである。
エントリ追加対象決定ブロック3は、複数の決定木処理ブロック2−1〜2−Nから通知される情報に基づいて、エントリ追加対象候補を認識し、エントリ追加対象候補の中からエントリ追加対象を選択する。図20は、本ステップA9の処理を示すフローチャートである。
ステップD1、D2、D3:
エントリ追加対象決定ブロック3は、エントリ追加対象候補から有効ルールエントリ数を示す情報を受け取る(ステップD1)。次に、エントリ追加対象決定ブロック3は、有効ルールエントリ数がルールリストの最大数B(リストサイズ)を下回っているものがあるか否か確認する(ステップD2)。有効ルールエントリ数がリストサイズを下回っているものが無い場合(ステップD2;No)、エントリ追加対象決定ブロック3は、エントリ追加対象は存在しないと判断する(ステップD3)。
エントリ追加対象決定ブロック3は、エントリ追加対象候補から有効ルールエントリ数を示す情報を受け取る(ステップD1)。次に、エントリ追加対象決定ブロック3は、有効ルールエントリ数がルールリストの最大数B(リストサイズ)を下回っているものがあるか否か確認する(ステップD2)。有効ルールエントリ数がリストサイズを下回っているものが無い場合(ステップD2;No)、エントリ追加対象決定ブロック3は、エントリ追加対象は存在しないと判断する(ステップD3)。
ステップD4、D5:
一方、有効ルールエントリ数がリストサイズを下回っているものがある場合(ステップD2;Yes)、エントリ追加対象決定ブロック3は、有効エントリ数が最小であるエントリ追加対象候補を、エントリ追加対象として選択する(ステップD4)。その後、エントリ追加対象決定ブロック3は、各決定木処理ブロック2にエントリ追加の可否を通知する(ステップD5)。例えば、エントリ追加対象決定ブロック3は、エントリ追加対象に対して新規ルールの追加を指示し、それ以外の決定木処理ブロック2に対してルール追加処理の不実行を指示する。なお、ここでは有効ルールエントリ数が最小であるエントリ追加対象候補をエントリ追加対象として選択しているが、その他のポリシーに従ってエントリ追加対象を選択しても良い。
一方、有効ルールエントリ数がリストサイズを下回っているものがある場合(ステップD2;Yes)、エントリ追加対象決定ブロック3は、有効エントリ数が最小であるエントリ追加対象候補を、エントリ追加対象として選択する(ステップD4)。その後、エントリ追加対象決定ブロック3は、各決定木処理ブロック2にエントリ追加の可否を通知する(ステップD5)。例えば、エントリ追加対象決定ブロック3は、エントリ追加対象に対して新規ルールの追加を指示し、それ以外の決定木処理ブロック2に対してルール追加処理の不実行を指示する。なお、ここでは有効ルールエントリ数が最小であるエントリ追加対象候補をエントリ追加対象として選択しているが、その他のポリシーに従ってエントリ追加対象を選択しても良い。
ステップA10:
エントリ追加対象である決定木処理ブロック2のエントリ数カウントブロック21は、追加対象葉ノードに関する有効ルールエントリ数に“1”を加算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。それ以外の決定木処理ブロック2のエントリ数カウントブロック21は、コマンドの終了フラグを‘1’に設定する。
エントリ追加対象である決定木処理ブロック2のエントリ数カウントブロック21は、追加対象葉ノードに関する有効ルールエントリ数に“1”を加算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。それ以外の決定木処理ブロック2のエントリ数カウントブロック21は、コマンドの終了フラグを‘1’に設定する。
ステップA11:
また、各決定木処理ブロック2のエントリ数カウントブロック21は、アドレス値と挿入コマンドを含む出力データ214を、ルールパイプラインブロック22のルール処理ブロック220−1に出力する。
また、各決定木処理ブロック2のエントリ数カウントブロック21は、アドレス値と挿入コマンドを含む出力データ214を、ルールパイプラインブロック22のルール処理ブロック220−1に出力する。
ステップA12:
ルールパイプラインブロック22は、ルールの追加処理を行う。図21は、本ステップA12の処理を示すフローチャートである。
ルールパイプラインブロック22は、ルールの追加処理を行う。図21は、本ステップA12の処理を示すフローチャートである。
ステップC12:
ステップA12は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップA12は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップC13:
比較更新処理ブロック2200は、処理種別がINSERTであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理はステップC9に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC2に進む。
比較更新処理ブロック2200は、処理種別がINSERTであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理はステップC9に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC2に進む。
ステップC2:
LOOKUP処理の場合と同様に、比較更新処理ブロック2200は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。
LOOKUP処理の場合と同様に、比較更新処理ブロック2200は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。
ステップC15:
ルールが有効である場合(ステップC3;Yes)、当該エントリに新規ルールを書き込むことは許されない。この場合、そのルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する。そして、処理はステップC13に戻り、ルールリスト中の次のルールに対する処理が実行される。
ルールが有効である場合(ステップC3;Yes)、当該エントリに新規ルールを書き込むことは許されない。この場合、そのルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する。そして、処理はステップC13に戻り、ルールリスト中の次のルールに対する処理が実行される。
ステップC14:
一方、ルールが有効ではない場合(ステップC3;No)、当該エントリ(すなわち、空きエントリ)に新規ルールを書き込むことができる。この場合、比較更新処理ブロック2200は、エントリ情報中のルール情報を新規ルールのものに書き換え、且つ、有効フラグを‘1’に設定し、エントリ記憶ブロック2201に書き込む。更に、比較更新処理ブロック2200は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(追加成功)に設定する。その後、処理はステップC9に進む。
一方、ルールが有効ではない場合(ステップC3;No)、当該エントリ(すなわち、空きエントリ)に新規ルールを書き込むことができる。この場合、比較更新処理ブロック2200は、エントリ情報中のルール情報を新規ルールのものに書き換え、且つ、有効フラグを‘1’に設定し、エントリ記憶ブロック2201に書き込む。更に、比較更新処理ブロック2200は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(追加成功)に設定する。その後、処理はステップC9に進む。
ステップC9:
LOOKUP処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、処理は上記ステップC15に進む。一方、最後のルールの場合(ステップC9;Yes)、ルール処理ブロック220−Bは、現在のコマンドを、結果出力ブロック5に出力する(ステップC16)。そして、ステップA12が終了する。
LOOKUP処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、処理は上記ステップC15に進む。一方、最後のルールの場合(ステップC9;Yes)、ルール処理ブロック220−Bは、現在のコマンドを、結果出力ブロック5に出力する(ステップC16)。そして、ステップA12が終了する。
ステップA13:
結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nからコマンドを受け取る。結果出力ブロック5は、受け取ったコマンド内の結果フラグを参照して、新規ルールが追加されたか、又は追加されなかったかを確認する。そして、結果出力ブロック5は、その結果を示す出力データ7を、INSERT処理の最終結果として出力する。
結果出力ブロック5は、複数の決定木処理ブロック2−1〜2−Nからコマンドを受け取る。結果出力ブロック5は、受け取ったコマンド内の結果フラグを参照して、新規ルールが追加されたか、又は追加されなかったかを確認する。そして、結果出力ブロック5は、その結果を示す出力データ7を、INSERT処理の最終結果として出力する。
ここで、INSERT処理の最終結果として、新規ルールを追加した箇所を示すエントリIDを出力することが挙げられる。エントリIDは、上述したエントリ情報にルールIDを含まない場合のルールID生成手法と同様、エントリ追加対象となった決定木処理ブロックのID、葉ノードのID、ルールリスト順序等からエントリIDを生成することができる。このとき、新規ルールを追加できる空き領域が無く、新規ルールを追加できなかった場合には、それを示す信号を出力することでルールの追加ができなかったことを示すことができるが、例えば、エントリIDを全て‘1’とした特値として出力することで、ルールの追加ができなかったことを示す信号を省くこともできる。また、INSERT処理では、各々1ビットから成る終了フラグと結果フラグを用いて処理を行ったが、終了フラグのビット幅を増やし、例えば、ルールの複製が発生したことが要因で処理を終了したことや、当該葉ノードのルールリストに空きが無かったことが要因で処理を終了したこと等、処理を終了した要因を表現させることができる。このような終了フラグを参照することで、INSERT処理の最終結果として、新規ルールを追加できなかった場合にその要因も最終結果として出力することができる。
1−3−3.DELETE処理
次に、DELETE処理を説明する。図22は、本実施の形態におけるDELETE処理を示すフローチャートである。
次に、DELETE処理を説明する。図22は、本実施の形態におけるDELETE処理を示すフローチャートである。
ステップA1:
パケット分類器1に、入力データ6が入力される。その入力データ6は、DELETE処理を示す種別データと、削除される既存ルールとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、削除コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
パケット分類器1に、入力データ6が入力される。その入力データ6は、DELETE処理を示す種別データと、削除される既存ルールとを含む。コマンド入力ブロック4は、その入力データ6を受け取る。コマンド入力ブロック4は、その入力データ6に基づいて装置内コマンド(ここでは、削除コマンド)を生成し、その装置内コマンドを決定木処理ブロック2−1〜2−Nに一斉に出力する。
ステップA6:
INSERT処理の場合と同様に、各決定木処理ブロック2は、指定された既存ルールを用いて、自身の決定木を辿る処理を実行する。
INSERT処理の場合と同様に、各決定木処理ブロック2は、指定された既存ルールを用いて、自身の決定木を辿る処理を実行する。
ステップA3:
ステップA6が終了すると、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA6が終了すると、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA14:
ルールパイプラインブロック22は、ルールの削除処理を行う。図23は、本ステップA14の処理を示すフローチャートである。
ルールパイプラインブロック22は、ルールの削除処理を行う。図23は、本ステップA14の処理を示すフローチャートである。
ステップC1:
ステップA14は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップA14は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップC13:
比較更新処理ブロック2200は、処理種別がDELETEであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理はステップC9に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC2に進む。
比較更新処理ブロック2200は、処理種別がDELETEであることを確認した上で、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理はステップC9に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC2に進む。
ステップC2、C3:
LOOKUP処理の場合と同様に、比較更新処理ブロック2200は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。ルールが無効である場合(ステップC3:No)、当該エントリは削除対象ではない。この場合、処理はステップC9に進む。一方、ルールが有効である場合(ステップC3;Yes)、処理はステップC17に進む。
LOOKUP処理の場合と同様に、比較更新処理ブロック2200は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す。そして、比較更新処理ブロック2200は、有効フラグを確認する。ルールが無効である場合(ステップC3:No)、当該エントリは削除対象ではない。この場合、処理はステップC9に進む。一方、ルールが有効である場合(ステップC3;Yes)、処理はステップC17に進む。
ステップC17:
比較更新処理ブロック2200は、読み出したルールと、削除対象として指定されたルールとを比較する。つまり、比較更新処理ブロック2200は、削除対象として指定されているルールが、読み出したルールにマッチするか否かを判定する。ここでは、両者が完全に一致するか否かが判定される。不一致の場合(ステップC5;No)、処理はステップC9に進む。一方、完全一致の場合(ステップC5;Yes)、処理はステップC18に進む。
比較更新処理ブロック2200は、読み出したルールと、削除対象として指定されたルールとを比較する。つまり、比較更新処理ブロック2200は、削除対象として指定されているルールが、読み出したルールにマッチするか否かを判定する。ここでは、両者が完全に一致するか否かが判定される。不一致の場合(ステップC5;No)、処理はステップC9に進む。一方、完全一致の場合(ステップC5;Yes)、処理はステップC18に進む。
ステップC18:
比較更新処理ブロック2200は、エントリ情報中の有効フラグを‘0’に設定し、エントリ記憶ブロック2201に書き込む。これにより、当該エントリ(ルール)は無効化される。この処理が既存ルールの削除に相当する。更に、比較更新処理ブロック2200は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(削除成功)に設定する。その後、処理はステップC9に進む。
比較更新処理ブロック2200は、エントリ情報中の有効フラグを‘0’に設定し、エントリ記憶ブロック2201に書き込む。これにより、当該エントリ(ルール)は無効化される。この処理が既存ルールの削除に相当する。更に、比較更新処理ブロック2200は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(削除成功)に設定する。その後、処理はステップC9に進む。
ステップC9、C15:
LOOKUP処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC15)。そして、処理はステップC13に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合(ステップC9;Yes)、ステップA14は終了する。
LOOKUP処理の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC15)。そして、処理はステップC13に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合(ステップC9;Yes)、ステップA14は終了する。
ステップA15:
ステップA14が完了すると、ルール処理ブロック220−Bは、アドレス値とコマンドを含む出力データ2205を、エントリ数カウントブロック21に出力する。
ステップA14が完了すると、ルール処理ブロック220−Bは、アドレス値とコマンドを含む出力データ2205を、エントリ数カウントブロック21に出力する。
ステップA16:
エントリ数カウントブロック21のカウント処理ブロック210は、ルール処理ブロック220−Bから入力データ213(=上述の出力データ2005)を受け取る。カウント処理ブロック210は、処理種別がDELETEであることを確認した上で、終了フラグ及び結果フラグを参照する。終了フラグ及び結果フラグが共に‘1’である場合、カウント処理ブロック210は、入力されたアドレス値を用いて、エントリ数記憶ブロック211から削除対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、当該有効ルールエントリ数から1を減算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。
エントリ数カウントブロック21のカウント処理ブロック210は、ルール処理ブロック220−Bから入力データ213(=上述の出力データ2005)を受け取る。カウント処理ブロック210は、処理種別がDELETEであることを確認した上で、終了フラグ及び結果フラグを参照する。終了フラグ及び結果フラグが共に‘1’である場合、カウント処理ブロック210は、入力されたアドレス値を用いて、エントリ数記憶ブロック211から削除対象葉ノードに関するエントリ数情報(有効ルールエントリ数)を読み出す。そして、カウント処理ブロック210は、当該有効ルールエントリ数から1を減算し、エントリ数記憶ブロック211に書き込む。これにより、エントリ数記憶ブロック211が最新状態に更新される。
ステップA17:
最後に、カウント処理ブロック210は、コマンドを含む出力データ215を結果出力ブロック5に出力する。結果出力ブロック5は、決定木処理ブロック2−1〜2−Nのそれぞれから受け取ったコマンド内の結果フラグを参照して、ルールが削除されたか、又は削除されなかったかを確認する。そして、結果出力ブロック5は、その結果を示す出力データ7を、DELETE処理の最終結果として出力する。
最後に、カウント処理ブロック210は、コマンドを含む出力データ215を結果出力ブロック5に出力する。結果出力ブロック5は、決定木処理ブロック2−1〜2−Nのそれぞれから受け取ったコマンド内の結果フラグを参照して、ルールが削除されたか、又は削除されなかったかを確認する。そして、結果出力ブロック5は、その結果を示す出力データ7を、DELETE処理の最終結果として出力する。
ここで、DELETE処理の最終結果として、INSERT処理時の新規ルール追加箇所のエントリIDと同様、削除ルールを追加した箇所を示すエントリIDを出力することが挙げられる。この際、削除ルールが何らかの理由で管理ルールに存在しなかった場合には、削除ルールが存在しなかったことを示す信号や、エントリIDを全て‘1’とした特値として出力することで、削除ルールが存在しなかったことを示すことができる。
1−3−4.補足
尚、本実施の形態における動作では、INSERT、DELETE処理時に、決定木パイプラインブロック20にて決定木を辿る処理や、ルールパイプラインブロック22にてルールの追加、削除処理を行う場合に、処理が完了していても、各パイプラインを順に処理していく。しかし、各パイプライン内の処理ブロックは、処理が完了した時点で何ら処理を実行しない。そのため、処理が完了した時点で、当該処理ブロックは、エントリ数カウントブロック21や結果出力ブロック5に、処理が完了した信号とコマンドを直接出力してもよい。そして、それぞれのブロックで各決定木処理ブロックの処理タイミングが合うように待ち合わせを行っても構わない。
尚、本実施の形態における動作では、INSERT、DELETE処理時に、決定木パイプラインブロック20にて決定木を辿る処理や、ルールパイプラインブロック22にてルールの追加、削除処理を行う場合に、処理が完了していても、各パイプラインを順に処理していく。しかし、各パイプライン内の処理ブロックは、処理が完了した時点で何ら処理を実行しない。そのため、処理が完了した時点で、当該処理ブロックは、エントリ数カウントブロック21や結果出力ブロック5に、処理が完了した信号とコマンドを直接出力してもよい。そして、それぞれのブロックで各決定木処理ブロックの処理タイミングが合うように待ち合わせを行っても構わない。
また、INSERT処理時には、ルールは複数の決定木のうち必ず1つだけに追加され、DELETE処理時にも、削除対象ルールが必ず1つだけ削除されることを想定している。本実施の形態における動作では、既に追加されているエントリと同一エントリを追加しようとする場合の処理については、詳細には述べていない。しかし、INSERT処理時に、追加対象木以外の決定木も含めて、有効エントリに対して新規追加エントリとの比較を行うことで、既に追加済みのエントリとの重複追加を防止することが可能である。このような処理は、上記のLOOKUP処理と組み合わせることで実現可能である。なお、INSERT時に追加しようとしているエントリと既に追加済みのエントリとの確認を行うことによって、DELETE時に、削除しようとしているルールが複数の箇所から削除されてしまうようなことは発生しない。
更に、コマンド入力ブロック4は、外部から入力データ6として、処理種別や検索キー、追加/削除対象エントリを受け取り、装置内コマンドを生成していた。しかし、入力データ6として到着パケット、又は到着パケットのヘッダ情報データを直接受け取り、ヘッダ解析、検索キーの抽出を行い、装置内コマンドを生成しても構わない。
1−4.効果
本実施の形態によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
本実施の形態によれば、決定木を用いたパケット分類において、前処理を行うことなく、エントリの動的更新を実現することが可能となる。
また、本実施の形態によれば、INSERT処理において、有効ルールエントリ数が最小であるエントリリストに新規ルールが追加される。これにより、複数の決定木間でのルール数の偏りが抑えられ、好適である。
更に、本実施の形態によれば、INSERT処理やDELETE処理といったエントリの動的更新に要する処理時間が一定となる。
具体的に、各処理に要するサイクル数、及びパケット分類器1に対する次のコマンド入力までのサイクル数の概算値を見積もる。尚、ここでの見積もりは、コマンド入力ブロック4、エントリ追加対象決定ブロック3、結果出力ブロック5、決定木ノード処理ブロック200、エントリ数カウントブロック21、ルール処理ブロック220においては、読み出し処理とそれに関連する処理、あるいは、書き込み処理とそれに関連する処理を、それぞれ1単位サイクルで実行できるとした場合の概算値である。ここで、1単位サイクルは望ましくは1クロックサイクルである。また、次のコマンド入力までのサイクル数は、厳密にはLOOKUP処理、INSERT処理、DELETE処理それぞれに対して次にどの処理コマンドを入力するかによって変わってくるが、ここでは次の処理コマンドを入力するまでサイクル数が最も大きい場合についての見積もり値である。
LOOKUP処理の場合、パケット分類器1内の各メモリ領域に対しては、読み出ししか実行しない。そのため、コマンド入力ブロック4の処理、決定木処理ブロック2のH段の決定木パイプラインブロック20における処理、B段のルールパイプラインブロック22における処理、結果出力ブロック5の処理を、合計H+B+2単位サイクルで実行することが可能である。また、メモリ内の情報は更新されないため、LOOKUPコマンドを入力したすぐ次のサイクルにて、次のコマンドを入力することができる。
INSERT処理の場合、パケット分類器1内の各メモリ領域に対して、読み出し、書き込みが実行される。このため、コマンド入力ブロック4の処理、決定木処理ブロック2のH段の決定木パイプラインブロック20の処理、エントリ数カウントブロック21の読み出し処理、エントリ追加対象決定ブロック3の処理、エントリ数カウントブロック21の書き込み処理、B段のルールパイプラインブロック22における読み出し処理と1回の書き込み処理、結果出力ブロック5の処理を、H+B+6単位サイクルで実行することが可能である。また、エントリ数カウントブロック21のエントリ数記憶ブロック211の書き込み処理が完了した後で無ければ、次のコマンド、特にINSERT処理を正しく実行できない。このため、INSERTコマンドを入力後3単位サイクル経過すれば、次のコマンドを入力することができる。
DELETE処理の場合、INSERT処理の場合と同様、本パケット分類器内の各メモリ領域に対して、読み出し、書き込みが実行される。このため、コマンド入力ブロック4の処理、決定木処理ブロック2のH段の決定木パイプラインブロック20の処理、B段のルールパイプラインブロック22における読み出し処理と1回の書き込み処理、エントリ数カウントブロック21における1回の読み出しと1回の書き込み処理、結果出力ブロック5の処理を、H+B+5単位サイクルで実行することが可能である。また、エントリ数カウントブロック21のエントリ数記憶ブロック211の書き込み処理が完了した後で無ければ、次のコマンド、特にINSERT処理を正しく実行できない。このため、INSERTコマンドを入力後B+3単位サイクル経過すれば、次のコマンドを入力することができる。
このように、本実施の形態では、例えば、LOOKUP処理はH+B+2単位サイクル、INSERT処理はH+B+6単位サイクル、DELETE処理はH+B+5単位サイクルといった固定時間で処理可能である。従来例のように、ルールの複製が要因で処理時間が変動するようなことはない。また、LOOKUP処理の場合は次の単位サイクルで、INSERT処理の場合は3単位サイクル経過後、DELETE処理の場合はB+3単位サイクル経過後に、次のコマンドを入力することができる。従って、わずかな処理オーバーヘッドで、各処理を実行することが可能である。
2.第2の実施の形態
次に、本発明の第2の実施の形態を説明する。尚、第1の実施の形態と重複する説明は適宜省略される。
次に、本発明の第2の実施の形態を説明する。尚、第1の実施の形態と重複する説明は適宜省略される。
2−1.構成及び概要
図24は、第2の実施の形態に係るパケット分類器1の構成を示すブロック図である。図4で示された第1の実施の形態の構成と比較して、決定木処理ブロック2−1〜2−Nが、それぞれ、決定木処理ブロック9−1〜9−Nによって置き換えられている。
図24は、第2の実施の形態に係るパケット分類器1の構成を示すブロック図である。図4で示された第1の実施の形態の構成と比較して、決定木処理ブロック2−1〜2−Nが、それぞれ、決定木処理ブロック9−1〜9−Nによって置き換えられている。
図25は、第2の実施の形態に係る決定木処理ブロック9の構成を示すブロック図である。図5で示された決定木処理ブロック2の構成と比較して、エントリ数カウントブロック21が省かれている。また、ルールパイプラインブロック22のルール処理ブロック220−Bは、出力データ26をエントリ追加対象決定ブロック3に出力する。また、ルール処理ブロック220−1は、エントリ追加対象決定ブロックから入力データ27を受け取る。
本実施の形態によれば、INSERT処理時、エントリ追加対象候補の全てが、一旦、新規ルールを決定木に追加する。この処理は、以下「一時追加処理」と参照される。より詳細には、一時追加処理において、エントリ追加対象候補の各々のルールパイプラインブロック22が、追加対象葉ノードによって管理されるルールリストに新規ルールを一時的に追加する。この一時追加処理の最中に、ルールパイプラインブロック22は、当該ルールリスト中の有効ルールエントリ数をカウントする。そして、ルールパイプラインブロック22が、エントリ数カウントブロック21の代わりに、有効ルールエントリ数をエントリ追加対象決定ブロック3に通知する。具体的には、ルールパイプラインブロック22の最終段のルール処理ブロック220−Bが、一時追加処理を通して得られた有効ルールエントリ数を示す出力データ26を、エントリ追加対象決定ブロック3に出力する。
エントリ追加対象決定ブロック3は、第1の実施の形態と同様に、エントリ追加対象候補の中から1つのエントリ追加対象を選択する。そして、エントリ追加対象決定ブロック3は、選択結果を示す情報(入力データ27)を、全てのエントリ追加対象候補に送る。
選択されたエントリ追加対象以外のエントリ追加対象候補の各々は、「追加エントリ無効化処理」を行う。この追加エントリ無効化処理では、当該エントリ追加対象候補は、上記一時追加処理によって一時的に追加された新規ルールを無効化する。追加エントリ無効化処理は、DELETE処理と同様に実現可能である。
このように、本実施の形態によれば、エントリ数カウントブロック21を用いることなく、第1の実施の形態と同じ処理結果を得ることができる。エントリ数カウントブロック21が省かれるため、全体のメモリ容量を削減することが可能である。
2−2.動作
次に、本実施の形態に係るパケット分類器1の動作を詳しく説明する。
次に、本実施の形態に係るパケット分類器1の動作を詳しく説明する。
2−2−1.LOOKUP処理
LOOKUP処理は、第1の実施の形態の場合と同様である。
LOOKUP処理は、第1の実施の形態の場合と同様である。
2−2−2.INSERT処理
次に、INSERT処理を説明する。図26は、本実施の形態におけるINSERT処理を示すフローチャートである。ステップA1、A6、A13は、第1の実施の形態のINSERT処理の場合と同じである。
次に、INSERT処理を説明する。図26は、本実施の形態におけるINSERT処理を示すフローチャートである。ステップA1、A6、A13は、第1の実施の形態のINSERT処理の場合と同じである。
ステップA3:
ステップA6が終了すると、ステップA7の代わりに、LOOKUP処理の場合と同様にステップA3が実行される。すなわち、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA6が終了すると、ステップA7の代わりに、LOOKUP処理の場合と同様にステップA3が実行される。すなわち、決定木ノード処理ブロック200−Hは、ルールパイプラインブロック22のルール処理ブロック220−1に、算出したアドレス値とコマンドを含む出力データ2003を出力する。
ステップA18:
ルールパイプラインブロック22は、上述の「一時追加処理」を実行する。図27は、本ステップA18の処理を示すフローチャートである。
ルールパイプラインブロック22は、上述の「一時追加処理」を実行する。図27は、本ステップA18の処理を示すフローチャートである。
ステップC12:
ステップA18は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。ここで、有効ルールエントリ数は、初期値0に設定される。
ステップA18は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。ここで、有効ルールエントリ数は、初期値0に設定される。
ステップC2、C3、C19:
第1の実施の形態と同様に、ルール処理ブロック220は、エントリ情報を読み出し、有効フラグを確認する(ステップC2)。ルールが有効である場合(ステップC3;Yes)、ルール処理ブロック220は、有効ルールエントリ数に“1”を加算する(ステップC19)。その後、処理はステップC15に進む。
第1の実施の形態と同様に、ルール処理ブロック220は、エントリ情報を読み出し、有効フラグを確認する(ステップC2)。ルールが有効である場合(ステップC3;Yes)、ルール処理ブロック220は、有効ルールエントリ数に“1”を加算する(ステップC19)。その後、処理はステップC15に進む。
ステップC15:
ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値及びコマンドに加えて有効ルールエントリ数を含む出力データ2204を出力する。そして、処理はステップC2に戻り、ルールリスト中の次のルールに対する処理が実行される。
ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値及びコマンドに加えて有効ルールエントリ数を含む出力データ2204を出力する。そして、処理はステップC2に戻り、ルールリスト中の次のルールに対する処理が実行される。
ステップC13:
一方、ルールが有効ではない場合(ステップC3;No)、ルール処理ブロック220は、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理は上記ステップC15に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC14に進む。
一方、ルールが有効ではない場合(ステップC3;No)、ルール処理ブロック220は、コマンド内の終了フラグを参照する。終了フラグが‘1’である場合(ステップC13;Yes)、処理は上記ステップC15に進む。一方、終了フラグが‘0’である場合(ステップC13;No)、処理はステップC14に進む。
ステップC14:
第1の実施の形態と同様に、ルール処理ブロック220は、当該エントリ(すなわち、空きエントリ)に新規ルールを書き込み、有効フラグを‘1’に設定する。更に、ルール処理ブロック220は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(追加成功)に設定する。その後、処理はステップC9に進む。
第1の実施の形態と同様に、ルール処理ブロック220は、当該エントリ(すなわち、空きエントリ)に新規ルールを書き込み、有効フラグを‘1’に設定する。更に、ルール処理ブロック220は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(追加成功)に設定する。その後、処理はステップC9に進む。
ステップC9、C20:
第1の実施の形態と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、処理は上記ステップC15に進む。一方、最後のルールの場合(ステップC9;Yes)、ルール処理ブロック220−Bは、現在のコマンド及び有効ルールエントリ数を、エントリ追加対象決定ブロック3に出力する(ステップC20)。そして、ステップA18が終了する。
第1の実施の形態と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、処理は上記ステップC15に進む。一方、最後のルールの場合(ステップC9;Yes)、ルール処理ブロック220−Bは、現在のコマンド及び有効ルールエントリ数を、エントリ追加対象決定ブロック3に出力する(ステップC20)。そして、ステップA18が終了する。
ステップA9:
次に、エントリ追加対象決定ブロック3は、第1の実施の形態と同様に、エントリ追加対象候補の中からエントリ追加対象を選択する。そして、エントリ追加対象決定ブロック3は、選択結果を示す情報を、全てのエントリ追加対象候補に送る。
次に、エントリ追加対象決定ブロック3は、第1の実施の形態と同様に、エントリ追加対象候補の中からエントリ追加対象を選択する。そして、エントリ追加対象決定ブロック3は、選択結果を示す情報を、全てのエントリ追加対象候補に送る。
ステップA14:
ルールパイプラインブロック22は、上述の「追加エントリ無効化処理」を実行する。この追加エントリ無効化処理は、DELETE処理と同様に行われる。ここで、削除対象のルールは、一時追加処理によって追加された新規ルールである。尚、追加エントリ無効化処理を実施する際のコマンドの処理種別として、第1の実施の形態で使用されなかった“11”を用いることが考えられる。また、このときの終了フラグ、結果フラグについては、初期化しておく。
ルールパイプラインブロック22は、上述の「追加エントリ無効化処理」を実行する。この追加エントリ無効化処理は、DELETE処理と同様に行われる。ここで、削除対象のルールは、一時追加処理によって追加された新規ルールである。尚、追加エントリ無効化処理を実施する際のコマンドの処理種別として、第1の実施の形態で使用されなかった“11”を用いることが考えられる。また、このときの終了フラグ、結果フラグについては、初期化しておく。
2−2−3.DELETE処理
図28は、本実施の形態におけるDELETE処理を示すフローチャートである。本実施の形態によれば、エントリ数カウントブロック21が省かれている。従って、図22で示された第1の実施の形態におけるDELETE処理と比較して、エントリ数カウントブロック21に関連するステップA15、A16を省略することができる。その他は、第1の実施の形態と同様である。
図28は、本実施の形態におけるDELETE処理を示すフローチャートである。本実施の形態によれば、エントリ数カウントブロック21が省かれている。従って、図22で示された第1の実施の形態におけるDELETE処理と比較して、エントリ数カウントブロック21に関連するステップA15、A16を省略することができる。その他は、第1の実施の形態と同様である。
2−3.効果
本実施の形態によれば、第1の実施の形態と同じ効果が得られる。更に、メモリ領域が削減される。
本実施の形態によれば、第1の実施の形態と同じ効果が得られる。更に、メモリ領域が削減される。
第1の実施の形態の場合と同様に、各処理に要するサイクル数、及びパケット分類器1に対する次のコマンド入力までのサイクル数の概算値を見積もる。
LOOKUP処理は、第1の実施の形態と同じである。
INSERT処理は、コマンド入力ブロック4の処理、決定木処理ブロック2のH段の決定木パイプラインブロック20の処理、B段のルールパイプラインブロック22における読み出し処理と1回の書き込み処理、エントリ追加対象決定ブロック3の処理、さらに、B段のルールパイプラインブロック22における読み出し処理と1回の書き込み処理、結果出力ブロック5の処理を含む。従って、全体で、H+2B+5単位サイクルで実行することが可能である。また、追加対象木以外の決定木に対する追加エントリの無効化を完了しなければ、その後の処理を待ち合わせ無く行うことができない。このため、INSERTコマンドを入力後B+3単位サイクル経過すれば、次のコマンドを入力することができる。
DELETE処理は、コマンド入力ブロック4の処理、決定木処理ブロック2のH段の決定木パイプラインブロック20の処理、B段のルールパイプラインブロック22における読み出し処理と1回の書き込み処理、結果出力ブロック5の処理を含む。従って、全体で、H+B+3単位サイクルで実行することが可能である。一方、削除対象エントリは順次削除されるため、エントリの削除を行うルールパイプラインブロック22における1回の書き込み処理を考慮し、DELETEコマンドを入力後1単位サイクル経過すれば、次のコマンドを入力することができる。
このように、本実施の形態では、例えば、LOOKUP処理はH+B+2単位サイクル、INSERT処理はH+2B+5単位サイクル、DELETE処理はH+B+3単位サイクルといった固定時間で処理可能である。従来例のように、ルールの複製が要因で処理時間が変動するようなことはない。また、LOOKUP処理の場合は次の単位サイクルで、INSERT処理の場合はB+3単位サイクル経過後、DELETE処理の場合は1単位サイクル経過後に次のコマンドを入力することができる。従って、わずかな処理オーバーヘッドが必要になるものの、各処理を順次実行することが可能である。
3.第3の実施の形態
本発明の第3の実施の形態は、コマンドの構成及びそのコマンドを用いたINSERT処理が、第2の実施の形態と異なる。構成、LOOKUP処理及びDELETE処理は第2の実施の形態と同様であり、重複する説明は適宜省略される。
本発明の第3の実施の形態は、コマンドの構成及びそのコマンドを用いたINSERT処理が、第2の実施の形態と異なる。構成、LOOKUP処理及びDELETE処理は第2の実施の形態と同様であり、重複する説明は適宜省略される。
図29は、第3の実施の形態におけるコマンドの構成例を示す概念図である。図29に示されるように、本実施の形態によれば、コマンド部に更に「エントリ追加リストID」のフィールドが追加されている。このエントリ追加リストIDは、上述の一時追加処理において新規ルールが追加された位置(段数)を示す位置情報である。つまり、ルール処理ブロック220−i(i=1、2、・・・、B)において新規ルールが追加された場合、エントリ追加リストIDには“i”が設定される。
図30は、本実施の形態におけるINSERT処理を示すフローチャートである。本実施の形態では、一時追加処理として、第2の実施の形態でのステップA18の代わりに、ステップA19が実行される。また、追加エントリ無効化処理として、第2の実施の形態でのステップA14の代わりに、ステップA20が実行される。その他は、第2の実施の形態と同様である。
ステップA19:
図31は、ステップA19の処理を示すフローチャートである。第2の実施の形態でのステップA18(図27参照)と比較して、ステップC14とステップC9との間にステップC21が追加されている。ステップC21において、ルール処理ブロック220−iは、コマンドのエントリ追加リストIDを、当該ルール処理ブロックのID(=i)に設定する。その他は、ステップA18と同様である。
図31は、ステップA19の処理を示すフローチャートである。第2の実施の形態でのステップA18(図27参照)と比較して、ステップC14とステップC9との間にステップC21が追加されている。ステップC21において、ルール処理ブロック220−iは、コマンドのエントリ追加リストIDを、当該ルール処理ブロックのID(=i)に設定する。その他は、ステップA18と同様である。
ステップA20:
図32は、ステップA20の処理を示すフローチャートである。
図32は、ステップA20の処理を示すフローチャートである。
ステップC1:
ステップA20は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップA20は、ルールリスト中の1番目のルールから開始する。具体的には、初段のルール処理ブロック220−1から処理を開始する。
ステップC22:
ルール処理ブロック220は、自身のIDが、入力されたコマンドのエントリ追加リストIDと一致するか否か判定する。一致の場合(ステップC22;Yes)、処理はステップC2に進む。一方、不一致の場合(ステップC22;No)、処理はステップC9に進む。
ルール処理ブロック220は、自身のIDが、入力されたコマンドのエントリ追加リストIDと一致するか否か判定する。一致の場合(ステップC22;Yes)、処理はステップC2に進む。一方、不一致の場合(ステップC22;No)、処理はステップC9に進む。
ステップC2、C18:
ルール処理ブロック220は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す(ステップC2)。更に、ルール処理ブロック220は、エントリ情報中の有効フラグを‘0’に設定し、エントリ記憶ブロック2201に書き込む。これにより、当該エントリ(ルール)は無効化される。更に、ルール処理ブロック220は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(削除成功)に設定する。その後、処理はステップC9に進む。
ルール処理ブロック220は、入力されたアドレス値を用いてエントリ記憶ブロック2201からエントリ情報を読み出す(ステップC2)。更に、ルール処理ブロック220は、エントリ情報中の有効フラグを‘0’に設定し、エントリ記憶ブロック2201に書き込む。これにより、当該エントリ(ルール)は無効化される。更に、ルール処理ブロック220は、コマンド内の終了フラグを‘1’に設定し、結果フラグを‘1’(削除成功)に設定する。その後、処理はステップC9に進む。
ステップC9、C15:
既出の実施の形態の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC15)。そして、処理はステップC22に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合(ステップC9;Yes)、ステップA20は終了する。
既出の実施の形態の場合と同様に、現在のルールが、ルールリスト中の最後のルールか否かが判定される。現在のルールが最後のルールではない場合(ステップC9;No)、ルール処理ブロック220−iは、次段のルール処理ブロック220−(i+1)に、アドレス値とコマンドを含む出力データ2204を出力する(ステップC15)。そして、処理はステップC22に戻り、ルールリスト中の次のルールに対する処理が実行される。一方、現在のルールがルールリスト中の最後のルールである場合(ステップC9;Yes)、ステップA20は終了する。
本実施の形態によれば、第2の実施の形態と同じ効果が得られる。更に、追加エントリ無効化処理において、無効化しないルールに関するルールマッチング処理(読み出し/比較処理)をスキップすることができる。従って、処理時間及び消費電力が低減される。
4.第4の実施の形態
図33は、本発明の第4の実施の形態に係るパケット分類器の構成を示すブロック図である。第4の実施の形態では、コンピュータがソフトウェアプログラムを実行することによりパケット分類処理が実現される。具体的には、本実施の形態に係るパケット分類器は、プログラム処理装置10とパケット分類プログラム11を備えている。プログラム処理装置10は、サーバやPC等のホストのCPUにより実現される。パケット分類プログラム11は、プログラム処理装置10によって実行されるコンピュータプログラムであり、プログラム処理装置10の動作を制御する。プログラム処理装置10は、パケット分類プログラム11を実行することにより、既出の実施の形態で説明されたパケット分類器1の機能を備えることができる。
図33は、本発明の第4の実施の形態に係るパケット分類器の構成を示すブロック図である。第4の実施の形態では、コンピュータがソフトウェアプログラムを実行することによりパケット分類処理が実現される。具体的には、本実施の形態に係るパケット分類器は、プログラム処理装置10とパケット分類プログラム11を備えている。プログラム処理装置10は、サーバやPC等のホストのCPUにより実現される。パケット分類プログラム11は、プログラム処理装置10によって実行されるコンピュータプログラムであり、プログラム処理装置10の動作を制御する。プログラム処理装置10は、パケット分類プログラム11を実行することにより、既出の実施の形態で説明されたパケット分類器1の機能を備えることができる。
尚、パケット分類プログラム11は、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
プログラム処理装置10として、複数のCPUコアを有するマルチコアプロセッサ(さらには、より多くのCPUコアを有するメニーコアプロセッサ)を用いてもよい。その場合、それぞれのCPUコアに、コマンド入力ブロック4、決定木処理ブロック2−1〜2−N、エントリ追加対象決定ブロック3、結果出力ブロック5、さらには、決定木処理ブロック2を構成する各決定木ノード処理ブロック200、エントリ数カウントブロック21、ルール処理ブロック220の処理を実行させることにより、より高速な処理が可能となる。
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、
前記複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、
前記複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと
を備え、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記コマンドが検索コマンドである場合、前記複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定し、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木処理ブロックの各々は、前記新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定し、
前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記エントリ追加対象決定ブロックは、前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択し、
前記選択されたエントリ追加対象は、前記新たなルールを、自身の決定木における前記追加対象葉ノードが管理するルールリストに追加する
パケット分類器。
パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、
前記複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、
前記複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと
を備え、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記コマンドが検索コマンドである場合、前記複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定し、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木処理ブロックの各々は、前記新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定し、
前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記エントリ追加対象決定ブロックは、前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択し、
前記選択されたエントリ追加対象は、前記新たなルールを、自身の決定木における前記追加対象葉ノードが管理するルールリストに追加する
パケット分類器。
(付記2)
付記1に記載のパケット分類器であって、
前記エントリ追加対象候補は、前記追加対象葉ノードが管理している有効なルールのエントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象決定ブロックは、前記エントリ数に基づいて、前記エントリ追加対象を選択する
パケット分類器。
付記1に記載のパケット分類器であって、
前記エントリ追加対象候補は、前記追加対象葉ノードが管理している有効なルールのエントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象決定ブロックは、前記エントリ数に基づいて、前記エントリ追加対象を選択する
パケット分類器。
(付記3)
付記2に記載のパケット分類器であって、
前記エントリ追加対象決定ブロックは、前記エントリ数が最小である前記エントリ追加対象候補を、前記エントリ追加対象として選択する
パケット分類器。
付記2に記載のパケット分類器であって、
前記エントリ追加対象決定ブロックは、前記エントリ数が最小である前記エントリ追加対象候補を、前記エントリ追加対象として選択する
パケット分類器。
(付記4)
付記2又は3に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、自身の決定木の各葉ノードによって管理されている有効なルールのエントリ数を記憶するエントリ数記憶ブロックを備え、
前記エントリ追加対象候補は、前記追加対象葉ノードに関する前記エントリ数を前記エントリ数記憶ブロックから読み出し、前記読み出したエントリ数を前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象は、前記追加対象葉ノードに関する前記エントリ数に1を加算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
付記2又は3に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、自身の決定木の各葉ノードによって管理されている有効なルールのエントリ数を記憶するエントリ数記憶ブロックを備え、
前記エントリ追加対象候補は、前記追加対象葉ノードに関する前記エントリ数を前記エントリ数記憶ブロックから読み出し、前記読み出したエントリ数を前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象は、前記追加対象葉ノードに関する前記エントリ数に1を加算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
(付記5)
付記4に記載のパケット分類器であって、
前記コマンドが既存ルールを削除するための削除コマンドである場合、前記複数の決定木処理ブロックの各々は、前記既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定し、
前記既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロックはエントリ削除対象であり、当該単一の葉ノードは削除対象葉ノードであり、
前記エントリ削除対象は、前記既存ルールを無効化し、また、前記削除対象葉ノードに関する前記エントリ数から1を減算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
付記4に記載のパケット分類器であって、
前記コマンドが既存ルールを削除するための削除コマンドである場合、前記複数の決定木処理ブロックの各々は、前記既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定し、
前記既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロックはエントリ削除対象であり、当該単一の葉ノードは削除対象葉ノードであり、
前記エントリ削除対象は、前記既存ルールを無効化し、また、前記削除対象葉ノードに関する前記エントリ数から1を減算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。
(付記6)
付記2又は3に記載のパケット分類器であって、
前記エントリ追加対象候補の各々は、前記追加対象葉ノードが管理するルールリストに前記新たなルールを一時的に追加する一時追加処理を行い、また、前記一時追加処理の最中に、当該ルールリスト中の有効なルールのエントリ数をカウントし、
前記エントリ追加対象候補の各々は、前記一時追加処理において得られた前記エントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記一時的に追加された新たなルールを無効化する追加エントリ無効化処理を行う
パケット分類器。
付記2又は3に記載のパケット分類器であって、
前記エントリ追加対象候補の各々は、前記追加対象葉ノードが管理するルールリストに前記新たなルールを一時的に追加する一時追加処理を行い、また、前記一時追加処理の最中に、当該ルールリスト中の有効なルールのエントリ数をカウントし、
前記エントリ追加対象候補の各々は、前記一時追加処理において得られた前記エントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記一時的に追加された新たなルールを無効化する追加エントリ無効化処理を行う
パケット分類器。
(付記7)
付記6に記載のパケット分類器であって、
前記一時追加処理において、前記エントリ追加対象候補の各々は、前記ルールリスト中で前記新たなルールが追加された位置を示す位置情報を前記挿入コマンドに書き込み、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記位置情報を参照することによって、ルールマッチングを行うことなく、前記追加エントリ無効化処理を行う
パケット分類器。
付記6に記載のパケット分類器であって、
前記一時追加処理において、前記エントリ追加対象候補の各々は、前記ルールリスト中で前記新たなルールが追加された位置を示す位置情報を前記挿入コマンドに書き込み、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記位置情報を参照することによって、ルールマッチングを行うことなく、前記追加エントリ無効化処理を行う
パケット分類器。
(付記8)
付記1乃至7のいずれか一項に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、
各決定木の段数と同じ段数の決定木ノード処理ブロックを備え、前記決定木ノード処理ブロックを用いることによって決定木の探索をパイプライン処理で行う決定木パイプラインブロックと、
各葉ノードにおいて管理可能なルール数と同じ段数のルール処理ブロックを備え、前記ルール処理ブロックを用いることによってルールの検索、追加及び削除をパイプライン処理で行うルールパイプラインブロックと
を備える
パケット分類器。
付記1乃至7のいずれか一項に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、
各決定木の段数と同じ段数の決定木ノード処理ブロックを備え、前記決定木ノード処理ブロックを用いることによって決定木の探索をパイプライン処理で行う決定木パイプラインブロックと、
各葉ノードにおいて管理可能なルール数と同じ段数のルール処理ブロックを備え、前記ルール処理ブロックを用いることによってルールの検索、追加及び削除をパイプライン処理で行うルールパイプラインブロックと
を備える
パケット分類器。
(付記9)
複数の決定木を用いたパケット分類方法であって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類方法は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類方法。
複数の決定木を用いたパケット分類方法であって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類方法は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類方法。
(付記10)
複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムであって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類処理は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類プログラム。
複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムであって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類処理は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類プログラム。
本出願は、2010年12月15日に出願された日本国特許出願2010−279693を基礎とする優先権を主張し、その開示の全てをここに取り込む。
1 パケット分類器
2 決定木処理ブロック
3 エントリ追加対象決定ブロック
4 コマンド入力ブロック
5 結果出力ブロック
9 決定木処理ブロック
10 プログラム処理装置
11 パケット分類プログラム
20 決定木パイプラインブロック
21 エントリ数カウントブロック
22 ルールパイプラインブロック
200 決定木ノード処理ブロック
210 カウント処理ブロック
211 エントリ数記憶ブロック
220 ルール処理ブロック
2000 子ノード決定ブロック
2001 ノード情報記憶ブロック
2200 比較更新処理ブロック
2201 エントリ記憶ブロック
2 決定木処理ブロック
3 エントリ追加対象決定ブロック
4 コマンド入力ブロック
5 結果出力ブロック
9 決定木処理ブロック
10 プログラム処理装置
11 パケット分類プログラム
20 決定木パイプラインブロック
21 エントリ数カウントブロック
22 ルールパイプラインブロック
200 決定木ノード処理ブロック
210 カウント処理ブロック
211 エントリ数記憶ブロック
220 ルール処理ブロック
2000 子ノード決定ブロック
2001 ノード情報記憶ブロック
2200 比較更新処理ブロック
2201 エントリ記憶ブロック
Claims (10)
- パケット分類に用いられる複数の決定木のそれぞれを構成する複数の決定木処理ブロックと、
前記複数の決定木処理ブロックに対してコマンドを一斉に入力するコマンド入力ブロックと、
前記複数の決定木処理ブロックに接続されたエントリ追加対象決定ブロックと
を備え、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記コマンドが検索コマンドである場合、前記複数の決定木処理ブロックの各々は、自身の決定木を用いることによって、検索キーがいずれかのルールにマッチするか否かを判定し、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木処理ブロックの各々は、前記新たなルールが自身の決定木における単一の葉ノードによって管理され得るかどうかを判定し、
前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木処理ブロックはエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記エントリ追加対象決定ブロックは、前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択し、
前記選択されたエントリ追加対象は、前記新たなルールを、自身の決定木における前記追加対象葉ノードが管理するルールリストに追加する
パケット分類器。 - 請求項1に記載のパケット分類器であって、
前記エントリ追加対象候補は、前記追加対象葉ノードが管理している有効なルールのエントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象決定ブロックは、前記エントリ数に基づいて、前記エントリ追加対象を選択する
パケット分類器。 - 請求項2に記載のパケット分類器であって、
前記エントリ追加対象決定ブロックは、前記エントリ数が最小である前記エントリ追加対象候補を、前記エントリ追加対象として選択する
パケット分類器。 - 請求項2又は3に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、自身の決定木の各葉ノードによって管理されている有効なルールのエントリ数を記憶するエントリ数記憶ブロックを備え、
前記エントリ追加対象候補は、前記追加対象葉ノードに関する前記エントリ数を前記エントリ数記憶ブロックから読み出し、前記読み出したエントリ数を前記エントリ追加対象決定ブロックに通知し、
前記エントリ追加対象は、前記追加対象葉ノードに関する前記エントリ数に1を加算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。 - 請求項4に記載のパケット分類器であって、
前記コマンドが既存ルールを削除するための削除コマンドである場合、前記複数の決定木処理ブロックの各々は、前記既存ルールが自身の決定木における単一の葉ノードによって管理されているか否かを判定し、
前記既存ルールが単一の葉ノードによって管理されている場合、当該決定木処理ブロックはエントリ削除対象であり、当該単一の葉ノードは削除対象葉ノードであり、
前記エントリ削除対象は、前記既存ルールを無効化し、また、前記削除対象葉ノードに関する前記エントリ数から1を減算することにより、前記エントリ数記憶ブロックを更新する
パケット分類器。 - 請求項2又は3に記載のパケット分類器であって、
前記エントリ追加対象候補の各々は、前記追加対象葉ノードが管理するルールリストに前記新たなルールを一時的に追加する一時追加処理を行い、また、前記一時追加処理の最中に、当該ルールリスト中の有効なルールのエントリ数をカウントし、
前記エントリ追加対象候補の各々は、前記一時追加処理において得られた前記エントリ数を、前記エントリ追加対象決定ブロックに通知し、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記一時的に追加された新たなルールを無効化する追加エントリ無効化処理を行う
パケット分類器。 - 請求項6に記載のパケット分類器であって、
前記一時追加処理において、前記エントリ追加対象候補の各々は、前記ルールリスト中で前記新たなルールが追加された位置を示す位置情報を前記挿入コマンドに書き込み、
前記選択されたエントリ追加対象以外の前記エントリ追加対象候補の各々は、前記位置情報を参照することによって、ルールマッチングを行うことなく、前記追加エントリ無効化処理を行う
パケット分類器。 - 請求項1乃至7のいずれか一項に記載のパケット分類器であって、
前記複数の決定木処理ブロックの各々は、
各決定木の段数と同じ段数の決定木ノード処理ブロックを備え、前記決定木ノード処理ブロックを用いることによって決定木の探索をパイプライン処理で行う決定木パイプラインブロックと、
各葉ノードにおいて管理可能なルール数と同じ段数のルール処理ブロックを備え、前記ルール処理ブロックを用いることによってルールの検索、追加及び削除をパイプライン処理で行うルールパイプラインブロックと
を備える
パケット分類器。 - 複数の決定木を用いたパケット分類方法であって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類方法は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類方法。 - 複数の決定木を用いたパケット分類処理をコンピュータに実行させるためのパケット分類プログラムであって、
1つのルールは、前記複数の決定木のうちいずれか1つの決定木における単一の葉ノードによって管理され、
前記パケット分類処理は、
前記複数の決定木に対してコマンドを一斉に入力するステップと、
前記コマンドが検索コマンドである場合、前記複数の決定木の各々において、検索キーがいずれかのルールにマッチするか否かを判定するステップと、
前記コマンドが新たなルールを決定木に追加するための挿入コマンドである場合、前記複数の決定木の各々において、前記新たなルールが単一の葉ノードによって管理され得るかどうかを判定するステップと、ここで、前記新たなルールが単一の葉ノードによって管理され得る場合、当該決定木はエントリ追加対象候補であり、当該単一の葉ノードは追加対象葉ノードであり、
前記新たなルールを追加する対象であるエントリ追加対象を、前記エントリ追加対象候補の中から選択するステップと、
前記新たなルールを、前記エントリ追加対象の前記追加対象葉ノードが管理するルールリストに追加するステップと
を含む
パケット分類プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013514491A JP5807676B2 (ja) | 2010-12-15 | 2011-09-13 | パケット分類器、パケット分類方法、及びパケット分類プログラム |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010279693 | 2010-12-15 | ||
JP2010279693 | 2010-12-15 | ||
JP2013514491A JP5807676B2 (ja) | 2010-12-15 | 2011-09-13 | パケット分類器、パケット分類方法、及びパケット分類プログラム |
PCT/JP2011/005131 WO2012081148A1 (en) | 2010-12-15 | 2011-09-13 | Packet classifier, packet classification method and packet classification program |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014504042A true JP2014504042A (ja) | 2014-02-13 |
JP5807676B2 JP5807676B2 (ja) | 2015-11-10 |
Family
ID=46244268
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013514491A Expired - Fee Related JP5807676B2 (ja) | 2010-12-15 | 2011-09-13 | パケット分類器、パケット分類方法、及びパケット分類プログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP5807676B2 (ja) |
WO (1) | WO2012081148A1 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012239048A (ja) * | 2011-05-12 | 2012-12-06 | Nec Corp | パケット分類器、パケット分類方法、及びパケット分類プログラム |
KR101897612B1 (ko) * | 2017-04-14 | 2018-09-12 | 계명대학교 산학협력단 | IoT 환경에서 패킷 분류를 위한 와일드카드 비율 기반 판별 트리 생성 방법 및 시스템 |
CN108711074A (zh) * | 2018-05-21 | 2018-10-26 | 阿里巴巴集团控股有限公司 | 业务分类方法、装置、服务器及可读存储介质 |
WO2020241207A1 (ja) * | 2019-05-27 | 2020-12-03 | 日本電気株式会社 | データ管理装置、制御方法、及び記憶媒体 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10462062B2 (en) | 2014-08-15 | 2019-10-29 | Hewlett Packard Enterprise Development Lp | Memory efficient packet classification method |
US10404594B2 (en) | 2016-12-13 | 2019-09-03 | Oracle International Corporation | System and method for providing partitions of classification resources in a network device |
US10341242B2 (en) | 2016-12-13 | 2019-07-02 | Oracle International Corporation | System and method for providing a programmable packet classification framework for use in a network device |
CN109101260B (zh) * | 2018-08-30 | 2023-01-24 | 郑州云海信息技术有限公司 | 一种节点软件的升级方法、装置和计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7536476B1 (en) * | 2002-12-20 | 2009-05-19 | Cisco Technology, Inc. | Method for performing tree based ACL lookups |
US20100067535A1 (en) * | 2008-09-08 | 2010-03-18 | Yadi Ma | Packet Router Having Improved Packet Classification |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020176355A1 (en) * | 2001-05-22 | 2002-11-28 | Alan Mimms | Snooping standby router |
US7840696B2 (en) * | 2003-07-25 | 2010-11-23 | Broadcom Corporation | Apparatus and method for classifier identification |
-
2011
- 2011-09-13 WO PCT/JP2011/005131 patent/WO2012081148A1/en active Application Filing
- 2011-09-13 JP JP2013514491A patent/JP5807676B2/ja not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7536476B1 (en) * | 2002-12-20 | 2009-05-19 | Cisco Technology, Inc. | Method for performing tree based ACL lookups |
US20100067535A1 (en) * | 2008-09-08 | 2010-03-18 | Yadi Ma | Packet Router Having Improved Packet Classification |
Non-Patent Citations (1)
Title |
---|
JPN6015032135; Weirong Jiang et.al.: 'Decision Forest: A Scalable Architecture for Flexible Flow Matching on FPGA' 2010 International Conference on Field Programmable Logic and Applications , 20100902, pp.394-399 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012239048A (ja) * | 2011-05-12 | 2012-12-06 | Nec Corp | パケット分類器、パケット分類方法、及びパケット分類プログラム |
KR101897612B1 (ko) * | 2017-04-14 | 2018-09-12 | 계명대학교 산학협력단 | IoT 환경에서 패킷 분류를 위한 와일드카드 비율 기반 판별 트리 생성 방법 및 시스템 |
CN108711074A (zh) * | 2018-05-21 | 2018-10-26 | 阿里巴巴集团控股有限公司 | 业务分类方法、装置、服务器及可读存储介质 |
CN108711074B (zh) * | 2018-05-21 | 2021-08-24 | 创新先进技术有限公司 | 业务分类方法、装置、服务器及可读存储介质 |
WO2020241207A1 (ja) * | 2019-05-27 | 2020-12-03 | 日本電気株式会社 | データ管理装置、制御方法、及び記憶媒体 |
JPWO2020241207A1 (ja) * | 2019-05-27 | 2020-12-03 | ||
JP7180769B2 (ja) | 2019-05-27 | 2022-11-30 | 日本電気株式会社 | データ管理装置、制御方法、及び記憶媒体 |
Also Published As
Publication number | Publication date |
---|---|
JP5807676B2 (ja) | 2015-11-10 |
WO2012081148A1 (en) | 2012-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5807676B2 (ja) | パケット分類器、パケット分類方法、及びパケット分類プログラム | |
US8180803B2 (en) | Deterministic finite automata (DFA) graph compression | |
US7949683B2 (en) | Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph | |
CN108370352B (zh) | 使用网络处理器的高速灵活分组分类 | |
US9495479B2 (en) | Traversal with arc configuration information | |
KR100477391B1 (ko) | 네트워크 프로세서용 완전 정합(fm) 검색 알고리즘 구현 | |
JP6383578B2 (ja) | 構文解析木において経路を一意的に列挙する装置および方法 | |
US10230639B1 (en) | Enhanced prefix matching | |
US20080192754A1 (en) | Routing system and method for managing rule entries of ternary content addressable memory in the same | |
US20070168377A1 (en) | Method and apparatus for classifying Internet Protocol data packets | |
WO2010065418A1 (en) | Graph-based data search | |
Mishra et al. | Duos-simple dual tcam architecture for routing tables with incremental update | |
US11652744B1 (en) | Multi-stage prefix matching enhancements | |
CN108763443A (zh) | 区块链账户处理方法与装置 | |
JP5682442B2 (ja) | パケット分類器、パケット分類方法、及びパケット分類プログラム | |
JP5673667B2 (ja) | パケット分類器、パケット分類方法、パケット分類プログラム | |
Norige et al. | A ternary unification framework for optimizing TCAM-based packet classification systems | |
US20080065822A1 (en) | Determining the Presence of a Pre-Specified String in a Message | |
JP2009017439A (ja) | パケット転送装置およびパケット転送方法。 | |
JPWO2002082750A1 (ja) | ビットストリングの検索装置および方法 | |
JP5144225B2 (ja) | 情報検索装置、及び情報検索装置へのエントリ情報の登録方法 | |
JP2018056739A (ja) | スイッチ、および通信方法 | |
Kawano et al. | A novel channel assignment method to ensure deadlock-freedom for deterministic routing | |
JP3591426B2 (ja) | プレフィックスを含む複数アドレスによる連想情報探索方法及び装置 | |
Markoborodov et al. | An approach to the translation of software-defined network switch flow table into network processing unit assembly language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20140813 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20150811 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150824 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5807676 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |