(57)【特許請求の範囲】
【請求項１】
回線から受信した第１のパケットを処理するパケット処理エンジンと、
前記第１のパケットに関する検索処理を行う検索エンジンと、
前記パケット処理エンジンと前記検索エンジンとの間でデータを受け渡す通信リンクを備え、
前記パケット処理エンジンは、受信した前記第１のパケットに検索キーを含む装置内ヘッダを付加して生成した第２のパケットを、前記通信リンクを介して前記検索エンジンに送信する手段を備え、        
前記検索エンジンは、前記パケット処理エンジンから前記通信リンクを介して送信された前記第２のパケットを一時的に格納するパケットバッファと、前記第２のパケットの前記装置内ヘッダに格納されている検索キーを基に検索処理を行う手段と、前記検索処理による検索結果情報と前記パケットバッファに格納された前記第２のパケットとを前記通信リンクを介して前記パケット処理エンジンに返送する手段と、前記パケット処理エンジンから受信した前記第２のパケット毎にシーケンス番号を割り当てるシーケンス番号管理手段と、前記パケット処理エンジンとの間で前記第２のパケットを繰り返し受け渡しながら前記第２のパケットに対して段階的に処理を追加するパケットループ処理を複数の前記第２のパケットに対して行う際に、前記シーケンス番号により個々の前記第２のパケットを識別しながら実行するループ制御手段を備え、
前記検索エンジンは、前記パケットループ処理が完了した複数の前記第２のパケットと検索結果情報を、前記シーケンス番号に基づいて、前記通信リンクからの第１回目の受信時刻が旧いものから先に順次前記パケット処理エンジンへ送信する
ことを特徴とするパケット処理装置。
【請求項２】
請求項１に記載のパケット処理装置において、
前記パケット処理エンジンと前記検索エンジンとの間を接続する前記通信リンクは、前記パケットループ処理前及び前記パケットループ処理完了後のパケットと装置内ヘッダを受け渡す第１の通信リンクと、前記パケットループ処理中のパケットと装置内ヘッダを受け渡す１以上の第２の通信リンクを含み、
前記１以上の第２の通信リンクは前記パケットループ処理時の各ループ回数毎に異なる通信リンクとして設けられ、
前記パケットループ処理中のパケットは、前記ループ回数毎に設けられた第２の通信リンクを介して前記パケット処理エンジンと前記検索エンジンとの間で受け渡される
ことを特徴とするパケット処理装置。
【請求項３】
請求項１に記載のパケット処理装置において、
前記検索エンジンは、前記検索処理部による検索結果に基づいて前記パケットと前記装置内ヘッダを出力すべき出力キューを決定し、前記出力キュー毎に前記パケットのスケジューリングを行って前記パケットと前記装置内ヘッダを前記パケット処理エンジンに転送するスケジューラを備えることを特徴とするパケット処理装置。
【請求項４】
回線から受信した第１のパケットを処理するパケット処理エンジンと前記第１のパケットに関する検索処理を行う検索エンジンとが連携して、前記第１のパケットに対して検索処理の結果を付加するパケット処理方法に於いて、
前記パケット処理エンジンは、前記第１のパケットに検索キーを含む装置内ヘッダを付加して生成した第２のパケットを前記検索エンジンに送信し、
前記検索エンジンは、前記パケット処理エンジンから受信した前記第２のパケット毎にシーケンス番号を割り当て、前記パケット処理エンジンとの間で前記第２のパケットを繰り返し受け渡しながら前記第２のパケットに対して段階的に処理を追加するパケットループ処理を複数の前記第２のパケットに対して行う際に、前記シーケンス番号により個々の前記第２のパケットを識別しながら実行し、前記パケットループ処理が完了した複数の前記第２のパケットと検索結果情報を、前記シーケンス番号に基づいて、前記第２のパケットの第１回目の受信時刻が旧いものから順に前記パケット処理エンジンへ送信する
ことを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高信頼性を維持しながらパケットの転送処理を高速化することができるパケット処理装置及びパケット処理方法に関する。
【背景技術】
【０００２】
ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ)等を適用してパケットを転送処理するルータ等のパケット処理装置は、パケット処理エンジンと、検索処理を行う為の検索エンジンとを含む構成を有するものである。又パケットの転送処理を行う場合、パケットのヘッダ部に含まれる宛先情報や、データの中身の情報を基に検索処理が行われ、転送先や転送制御情報を決定して転送する。又パケット処理エンジンにはネットワークプロセッサＮＷ
Ｐ（Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ）等のデバイスが適用されており、又パケット情報を基に転送先や転送制御情報の検索を行う検索エンジンにはＣＡＭ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）等が用いられている。
【０００３】
検索処理を行う場合、パケット処理エンジンから検索エンジンに、宛先の決定やフィルタリングの処理に必要なパケットの一部が検索キーとして転送される。パケット処理エンジンでは検索エンジンから検索結果が戻されると、その検索結果情報を基に後処理を実施し、パケットの転送を行う。
【０００４】
図１６は、従来技術のパケット処理装置の構成例である。
【０００５】
同図に於いて、１０１は入力インターフェース、１０２はパケット処理エンジン、１０３は検索エンジン、１０４はトラフィックマネージャー、１０５は出力インターフェース、１０６，１０７はパケットバッファを示す。主回線を伝送したパケットは、入力インターフェース１０１を介してパケット処理エンジン１０２のパケットバッファ１０６に一時的に格納され、パケット処理エンジン１０２は検索エンジン１０３に、そのパケットのヘッダやペイロードの一部等を検索キーとして転送して検索処理を行わせる。その検索結果はパケット処理エンジン１０２に返送される。パケット処理エンジン１０２は、検索結果の情報と共にパケットを、トラフィックマネージャー１０４のパケットバッファ１０７に転送して一時的に格納し、検索結果の情報に含まれる宛先情報や優先制御情報等を基にして出力インターフェース１０５を介して、パケットを主回線に送出する。
【０００６】
パケット処理エンジン１０２に用いられるネットワークプロセッサには、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）型のものと、データフロー型のものとがあり、ＲＩＳＣ型のものは複雑な処理を行うことができるが、処理が複雑になるほど、多くの処理時間が必要になり性能が劣化する。それに対し、データフロー型のネットワークプロセッサは、処理速度の向上がＲＩＳＣ型に比べて容易であり、更にパケット種別によって性能が劣化することは無い。しかし、一つのパケットに対して行うことのできる処理が限られており複雑な処理を行うことができない。
【０００７】
近年データの伝送速度が数Ｇｂｐｓ以上の高速伝送化が進み、パケットの転送処理を行うルータ等の装置の処理速度を上昇させることが必要となっている。その為、例えば、連想メモリを含む検索エンジンと、パケットを検索エンジンに転送する前の処理を担当する第１のプロセッサと、検索エンジンによる検索結果に基づいてパケットの中継処理を担当する第２のプロセッサとを備えたパケット処理装置が提案されている（例えば、特許文献１参照）。又入力されたパケットに一連番号を付加して、複数のパケット解析手段に分配し、複数のパケット解析手段により並列的に解析処理し、処理後のパケットを一連番号に従って元の順に並べ替えて出力するパケット処理装置が提案されている（例えば、特許文献２参照）。
【特許文献１】特開２００４−０１５５６１号公報
【特許文献２】特開２００４−１５８９０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前述のように、パケットを伝送する主回線の広帯域化により、パケットの転送速度の向上が必要であり、更に多種多様なサービスが求められ、パケットの転送処理のみでなく、フィルタリング、クラシファイ、負荷分散などの処理機能が要求されている。しかし、パケット処理エンジンとして用いられるデータフロー型のネットワークプロセッサに代表されるデバイスや、検索処理を行う検索エンジンには、処理能力に限界があるから、複雑な処理を行う場合、１パケットについて行わなければならない処理が、所定のパケット処理時間内に完了しないケースが発生し、それにより、パケット処理エンジンの中継処理速度の劣化を招く問題がある。
【０００９】
又巨大なルーティングテーブルを検索する必要がある検索処理や、パケットの多くの情報を基に判定する等の場合、検索処理がパケット処理のボトルネックとなる問題がある。又汎用のデータフロー型のネットワークプロセッサを使用した場合、検索エンジン１０３と接続するバスの帯域が小さく、パケット処理エンジン１０２から検索エンジン１０３に対して転送する検索キーの大きさに制限が生じる。又パケットの伝送中によるエラーは、パケットのＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｄｙ  Ｃｈｅｃｋ）等によりチェックすることができるが、ルータ等のパケット処理装置内部で発生したエラーについては、従来は、殆ど対策が講じられていないので、対向装置に対してエラーを含むパケットが転送される可能性があった。
【００１０】
本発明は、前述の従来の問題を解決するものであり、低コストで、高信頼性を維持しながらパケットの転送処理を高速化することができるパケット処理装置及びパケット処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明によるパケット処理装置は、回線から受信した第１のパケットを処理するパケット処理エンジンと、
前記第１のパケットに関する検索処理を行う検索エンジンと、
前記パケット処理エンジンと前記検索エンジンとの間でデータを受け渡す通信リンクを備え、
前記パケット処理エンジンは、受信した前記第１のパケットに検索キーを含む装置内ヘッダを付加して生成した第２のパケットを、前記通信リンクを介して前記検索エンジンに送信する手段を備え、前記検索エンジンは、前記パケット処理エンジンから前記通信リンクを介して送信された前記第２のパケットを一時的に格納するパケットバッファと、前記第２のパケットの前記装置内ヘッダに格納されている検索キーを基に検索処理を行う手段と、前記検索処理による検索結果情報と前記パケットバッファに格納された前記第２のパケットとを前記通信リンクを介して前記パケット処理エンジンに返送する手段と、前記パケット処理エンジンから受信した前記第２のパケット毎にシーケンス番号を割り当てるシーケンス番号管理手段と、前記パケット処理エンジンとの間で前記第２のパケットを繰り返し受け渡しながら前記第２のパケットに対して段階的に処理を追加するパケットループ処理を複数の前記第２のパケットに対して行い際に、前記シーケンス番号により個々の前記第２のパケットを識別しながら実行するループ制御手段を備え、前記検索エンジンは、前記パケットループ処理が完了した複数の前記第２のパケットと検索結果情報を、前記シーケンス番号に基づいて、前記通信リンクからの第１回目の受信時刻が旧いものから先に順次前記パケット処理エンジンへ送信する、ように構成される。 
【００１２】
これによれば、パケット処理エンジンは、検索処理を検索エンジンに分散して効率よく処理するだけでなく、主回線からパケットを受信した時点と、検索エンジンからパケットが返送された時点の２回に分けてパケットの処理を実行でき、例えば、パケットに対する１回の処理時間が制限されるデータフロー型のネットワークプロセッサを用いた場合に、パケット処理を効率的に処理できるようになる。さらに、パケットをパケット処理エンジンおよび検索エンジンの間で必要な回数ループさせながら、段階的にパケット処理、検索処理を実行でき、処理時間を要する複雑な処理であっても、１回の処理時間が制限されるデータフロー型のネットワークプロセッサを用いて順次追加実行することが可能となる。
【００１５】
さらに、本発明は、上記のパケット処理装置において、前記パケット処理エンジンと前記検索エンジンとの間を接続する前記バスは、前記パケットループ処理前及び前記パケットループ処理完了後のパケットと装置内ヘッダを受け渡す第１の通信リンクと、前記パケットループ処理中のパケットと装置内ヘッダを受け渡す１以上の第２の通信リンクを含み、
前記１以上の第２の通信リンクは前記パケットループ処理時の各ループ回数に対応して設けられ、前記パケットループ処理中のパケットは、前記ループ回数に対応する第２の通信リンクを介して前記パケット処理エンジンと前記検索エンジンとの間で受け渡される、ように構成してもよい。
【００１６】
これにより、複数のパケットのループ処理を並行して実行でき、処理時間を要する複雑な処理をさらに効率よく実行できる。
【００１７】
一方、本発明は、上記のパケット処理装置において、前記検索エンジンは、前記検索処理部による検索結果に基づいて前記パケットと前記装置内ヘッダを出力すべき出力キューを決定し、前記出力キュー毎に前記パケットのスケジューリングを行って前記パケットと前記装置内ヘッダを前記パケット処理エンジンに転送するスケジューラを備える、ように構成することもできる。
【００１８】
この構成によれば、トラフィックマネージャーを検索エンンジンに含めることができ、パケット処理装置の構成を単純化し、低コストを図ることができる。
【発明の効果】
【００１９】
本発明は、パケット処理エンジンにはパケットバッファを設けずに、検索エンジンにパケットバッファを設け、パケット処理エンジンに於いて検索キーを含む装置内ヘッダを付加して検索エンジンに転送する。その時、パケット処理エンジンと検索エンジンとの間のバスの帯域を、パケットを伝送する主回線の伝送帯域より大きくすることにより、装置内ヘッダを付加したパケットを、パケット処理エンジンと検索エンジンとの間で容易に転送することが可能となり、パケット処理エンジンを、データフロー型のネットワークプロセッサにより構成して、パケット処理を効率的に行うことができる。
【００２０】
又パケット処理エンジンと検索エンジンとの間のループ処理により、複雑な処理をパケット処理エンジンおよび検索エンジンに於いて順次追加実行することが可能となる。
【００２１】
又トラフィックマネージャーの機能を検索エンジンにスケジューラとして設けることにより、構成の単純化を図ることが可能となる。
【発明を実施するための最良の形態】
【００２２】
図１は、本発明の第１の実施形態によるパケット処理装置の構成例を示している。
【００２３】
１０は入力インターフェース、２０はパケット処理エンジン、３０は検索エンジン、４０はトラフィックマネージャー、５０は出力インターフェース、３９および４９はパケットバッファを示す。
【００２４】
入力インターフェース１０は１以上の受信ポート１からパケットを受信し、受信したパケットを通信リンク２を介してパケット処理エンジン２０に渡す。
【００２５】
パケット処理エンジン２０は、入力インターフェース１０から渡されたパケットに対して、ＩＰｖ４，ＩＰｖ６，ＭＰＬＳ（Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｉｎｇ）等のパケット種別の判断、パケットの正常性確認、宛先検索、フィルタリング検索、クラシファイ検索等の為に必要な検索キーの抽出等の処理を行い、検索エンジン３０に転送する。その時、パケットに固定サイズの装置内ヘッダを付加する。この装置内ヘッダには検索エンジン３０が検索処理を行う際に必要となる検索キーやパケット種別等を示す値を検索要求情報として設定する。このパケットに装置内ヘッダを付加したデータを検索要求ブロックとして通信リンク６を介して検索エンジン３０に送信する。ここで、宛先アドレス等のデータサイズの大きい検索キーを装置内ヘッダに設定すると、そのヘッダサイズが大きくなる為、検索キーが格納されているパケット内の位置を示すポインタ値を装置内ヘッダ内に設定することができる。なお、パケット種別毎に検索キーの位置が変わらないような検索キーについては特にポインタで示す必要はない。上記の検索要求情報については、例えば、後述する図１０のように構成することができる。
【００２６】
検索エンジン３０はパケット処理エンジン２０から渡された検索要求ブロック（パケットと装置内ヘッダ）の装置内ヘッダに設定されている検索要求情報を基に検索処理を実行する。そして、その検索結果情報を装置内ヘッダに設定してパケットに付加して検索結果ブロックとし、その検索結果ブロックを検索結果検索エンジン３０からパケット処理エンジン２０に通信リンク６を介して返送する。上記の検索結果情報については、例えば、後述する図１２のように構成することができる。
【００２７】
パケット処理エンジン２０は検索エンジン３０から返送された検索結果ブロックに格納されているパケットに処理を加えた後に、その処理が加えられたパケットを含む検索結果ブロックを通信リンク３を介してトラフィックマネージャー４０へ引き渡す。
【００２８】
トラフィックマネージャー４０はパケット処理エンジン２０から渡された検索結果ブロック（パケット＋装置内ヘッダ）の装置内ヘッダ（検索結果情報が設定されている）を基にトラフィック制御（例えば、送信キューの優先制御等）を行った後、該検索結果ブロック（パケット＋装置内ヘッダ）を通信リンク４を介して出力インターフェース５０に渡す。
【００２９】
出力インターフェース５０は、トラフィックマネージャー４０から渡された検索結果ブロック（パケット＋装置内ヘッダ）に含まれるパケットを、装置内ヘッダに設定されている検索結果情報を基に主回線の送信ポート５に送出する。例えば、パケットを装置内ヘッダに設定されている送信ポート番号に対応する送信ポートに出力する。
【００３０】
上記の構成において、パケット処理エンジン２０は、例えば、データフロー型のネットワークプロセッサを含む構成を有し、検索エンジン３０との間のデータ受け渡しを行う通信リンク６は主回線である受信ポート１、送信ポート５の伝送帯域以上の帯域を有するバス接続の中に構成することができる。これにより、パケット処理エンジン２０と検索エンジン３０との間で、受信ポート１から受信したパケットにさらに装置内ヘッダを付加したデータの受け渡しを、主回線のパケットの流れを遅延させることなく行うことが可能になる。
【００３１】
又検索エンジン３０とトラフィックマネージャー４０とにそれぞれパケットバッファ３９、４９を設け、パケット処理エンジン２０にはパケットバッファを設けない構成として、パケット処理エンジン２０の構成を簡素化し処理負荷を低減することができる。
【００３２】
図２は、本発明の第１の実施形態による検索エンジンの構成例を示している。  
【００３３】
３１は入力インターフェース部、３２は検索処理部、３３はシーケンス番号管理部、３４はパケットバッファ管理部、３５は出力インターフェース部を示し、３９は前記図１に示したパケットバッファ３９である。また、６ａは前記図１の通信リンク６に対応する検索エンジン３０側からみた入力ポートであり、６ｂは通信リンク６に対応する検索エンジン３０側からみた出力ポートである。
【００３４】
入力インターフェース部３１はパケット処理エンジン２０から入力ポート６ａを介して検索要求ブロック（装置内ヘッダ＋パケット）を受信すると、シーケンス番号管理部３３にパケットの受信通知を行う。検索要求ブロックは、例えば、後述する図９に示すように構成することができる。
【００３５】
シーケンス番号管理部３３は、次に割り当てるべきシーケンス番号である次シーケンス番号を常時保持しており、入力インターフェース部３１からパケットの受信通知があると、その保持している次シーケンス番号を読み出して、入力インターフェース部３１に対して通知すると同時に、次シーケンス番号をカウントアップする。
【００３６】
入力インターフェース部３１は受信した装置内ヘッダに設定されている検索要求情報を取り出してシーケンス番号管理部３３から通知されたシーケンス番号を設定し、検索処理部３２にそのシーケンス番号が設定された検索処理依頼データを引き渡す。検索処理依頼データは、例えば、後述する図１１のように構成することができる。この検索処理依頼データには検索キー情報を付加するが、この検索キー情報は装置内ヘッダから取り出した検索要求情報に検索キーポインタが設定されている場合に（後述する図１０参照）、その検索キーポインタが示すパケット内の領域から抽出して付加する。ここで、検索処理依頼データについては、例えば、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式でキューイングして検索処理部３２に引き渡すように構成することができる。
【００３７】
一方、入力インターフェース部３１はパケット処理エンジン２０から渡されたパケットにシーケンス番号管理部３３から通知されたシーケンス番号を付加してパケットバッファ管理部３４に渡す。
【００３８】
パケットバッファ管理部３４は入力インターフェース部３１から渡されたパケットをパケットバッファ３９に格納すると同時に、格納したパケットの格納位置情報（アドレス情報等）、パケット長をシーケンス番号と共に保持する。
【００３９】
検索処理部３２は、入力インターフェース部３１から渡された検索処理要求データに含まれる検索キー情報を基に、例えば、ＣＡＭなどを用いて該検索キー情報に該当するデータを検索し、検索結果情報をシーケンス番号と共に出力インターフェース部３５に通知する。検索結果情報は、例えば、後述する図１２のように構成することができる。
【００４０】
出力インターフェース部３５は、検索処理部３２から検索結果が通知されると、パケットバッファ管理部３４を介してパケットバッファ３９から該シーケンス番号に対応するパケットを読み出し、検索処理部３２から通知された検索結果情報を装置内ヘッダに設定して該パケットに付加して検索結果ブロックとし、出力ポート６ｂを介してパケット処理エンジン２０へ送信する。
【００４１】
上記のように、シーケンス番号管理部３３によってパケットに割り当てられたシーケンス番号を基にパケットをパケットバッファ３９から取り出して送出することにより、検索エンジン３０内に複数のパケットが検索処理待ちで一時的に滞留した場合においても、検索処理が完了したパケットはパケット処理エンジン２０から受信した順にパケット処理エンジン２０へ送出され、パケットの転送順序を維持することができる。
【００４２】
パケット処理エンジン２０は、検索エンジン３０から返送された検索結果ブロック（装置内ヘッダとパケットを含む）を基にパケット処理を行った後、トラフィックマネージャー４０に転送する。検索結果ブロックはトラフィックマネージャー４０のパケットバッファ４９に一時的に格納されトラフィック制御が行われた後に出力インターフェース５０に渡され、パケットは装置内ヘッダに設定されている検索結果情報を基に主回線の送信ポート５に送出される。例えば、検索結果情報の中の送信ポート番号が示す送信ポート５へパケットが送出される。
【００４３】
上記のように、パケット処理エンジン２０は、主回線から受信したパケットに対する処理を通信リンク２を介して渡された時点と、検索エンジン３０より通信リンク６を介して渡された時点の２回に分けて行うことが可能となる。これにより、例えば、パケット処理エンジン２０が１回のパケット受信に対する処理時間が制約されるデータフロー型のネットワークプロセッサで構成される場合においても、パケットに対する処理を２回に分けて段階的に実行することが可能となる。
【００４４】
図３は、本発明の第２の実施形態によるパケット処理装置の構成例を示している。
【００４５】
本発明の第２の実施形態では、前記図１に示した第１の実施形態のパケット処理装置の構成例に於けるパケット処理エンジン２０と検索エンジン３０の間のバス接続に、第１の通信リンクとなる通信リンク６の他に、さらに第２の通信リンクとなるＮ（Ｎ＝任意の自然数）個の双方向の通信リンクを設ける。このＮ対の通信リンク（第２の通信リンク）を用いることにより、パケット処理エンジン２０ａと検索エンジン３０ａとの間でパケットを交互に受け渡しながらパケットに対して段階的に処理を付加するパケットループ処理を効率的に実行できるようになる。つまり、パケットのループ回数毎に異なる通信リンクを用いてパケット処理エンジン２０と検索エンジン３０の間のパケット受け渡しを行うことにより、最大Ｎ回までのパケットのループ処理を並行して実行できる。例えば、入力インターフェース１０から渡されたパケットをパケット処理エンジン２０ａは検索エンジン３０aに引き渡す。検索エンジン３０aは渡されたパケットに対して検索処理を行い、パケットに対してさらに追加の処理が必要と判定したばあいは、その旨の情報を含む検索結果情報を装置内ヘッダに設定してパケットに付加し検索結果ブロックとして第２の通信リンクを介して処理エンジン２０ａに返送する。パケット処理エンジン２０ａは検索エンジン３０ａから検索結果ブロック（パケットと追加処理が指定された検索結果情報）を受信すると、その中のパケットに対して追加の処理を行い、その追加処理したパケットに装置内ヘッダとして検索要求情報を付加した検索要求ブロック生成して第２の通信リンクを介して検索エンジン３０ａに渡す。検索エンジン３０ａはこの渡された検索要求ブロックに格納されているパケットについて検索要求情報に基づいてさらに検索処理を行い、さらにループ処理が必要な場合は、その旨を指示した検索結果情報を装置内ヘッダに設定してパケットに付加し、検索結果ブロックとして第２の通信リンクを介してパケット処理エンジン２０に転送する。このようにして、パケット処理エンジン２０ａと検索エンジン３０ａとの間で第２の通信リンクを介してパケットを受け渡しながら該パケットに対して段階的に処理を付加していくパケットループ処理を繰り返す。このとき、パケット処理エンジン２０ａと検索エンジン３０ａとの間のループ処理によるデータの受け渡しは、ループ回数毎に異なる通信リンクを用いるように構成することができ、このときは、最大Ｎ回のループ処理が可能となる。そして、検索エンジン３０ａはループ処理が完了したパケットについては、最終的な検索結果を設定した装置内ヘッダと合わせて最終的な検索結果ブロックとし、第１の通信リンクを介してパケット処理エンジン２０ａへ渡す。
【００４６】
上記のようにして、同一のパケットに対して、検索エンジン３０ａによる複数回の検索処理、及び、パケット処理エンジン２０ａによる複数回の処理が可能となり、主回線の受信ポート１から受信したパケットに対してより複雑な処理を行った後に、該パケットを主回線の送信ポート５に出力することができるようになる。ここで、追加処理を指示する情報としては装置内ヘッダにパケットが何ループ目であるかを示すループ回数を設定しておくことができ、これにより、ループ回数に対応した処理を行うことができる。このループ回数については、後述する図１０、図１１に示されている。
【００４７】
また、上記のように、第２の通信リンクが含んでいる最大Ｎ個の通信リンクの各々をループ回数に対応付け、ループ回数毎に第２の通信リンク内の異なる通信リンクを用いてパケットを受け渡すことにより、最大N個のパケットのループ処理をタイミングをずらしながら並行して効率的に実行できる。
【００４８】
上記のようにしてループ処理が終了したパケットは、パケットに装置内ヘッダを付加した状態でパケット処理エンジン２０ａからトラフィックマネージャー４０に渡され、トラフィックマネージャー４０は出力キュー等を構成したパケットバッファ４９に一時的に格納した後、該パケットを装置内ヘッダ付きで出力インターフェース５０に渡す。出力インターフェース５０は渡された装置内ヘッダの内容に基づいて、パケットを主回線となる送信ポート５から送出する。
【００４９】
上記のようにして、例えばデータフローマシンを用いた場合のように、パケット処理エンジン２０ａの処理速度は十分であるが、一回のパケットの処理時間に制限がある場合においても、一つのパケットに対して複数の処理を段階的に、かつ、並行して実施できるようになり、パケット処理エンジン２０ａの効率的な機能拡張を容易に行うことができる。
【００５０】
図４は、本発明の第２の実施形態による検索エンジンの構成例を示している。
【００５１】
３１ａは入力インターフェース部、３２ａは検索処理部、３３ａはシーケンス番号管理部、３４ａはパケットバッファ管理部、３５ａは出力インターフェース部を示し、３９はパケットバッファである。３６はループ制御部を、３７は検索結果出力部を、３８は検索制御テーブルを示し、この第２の実施形態で新たに追加されている。また、６ａは前記図３に示した第１の通信リンクとなる通信リンク６に対応する検索エンジン３０ａ側からみた入力ポートであり、６ｂは通信リンク６に対応する検索エンジン３０ａ側からみた出力ポートである。同様に、７−１ａ、・・・、７−Ｎａは、それぞれ、前記図３に示した第２の通信リンクとなる通信リンク７−１、・・・、７−Ｎにそれぞれ対応する検索エンジン３０ａ側からみた入力ポートであり、７−１ｂ、・・・、７−Ｎｂは、それぞれ、通信リンク７−１、・・・、７−Ｎに対応する検索エンジン３０ａ側からみた出力ポートである。
【００５２】
この第２の実施形態に於いては、複雑な処理が必要なパケットに対しては、最大Ｎ回以下の必要な回数だけパケット処理エンジン２０ａと検索エンジン３０ａとの間でパケットをループさせながら、パケット処理エンジン２０ａ及び検索エンジン３０ａの処理を段階的に付加するパケットループ処理を行う。このパケットループ処理が完了したパケットはパケットバッファ３９に格納され、また、ループ処理が完了した最終的な検索結果はループ制御部３６を介して検索制御テーブル３８に格納される。
【００５３】
上記のようにしてパケットバッファ３９に格納されたパケット及び検索制御テーブル３８に格納された最終的な検索結果は、所定の周期で起動される検索結果出力部３７によりパケットが最初に受信された時刻（ループ処理前のパケットが受信された時刻）の順番で取り出されてパケット処理エンジン２０ａへ送信される。これにより、パケット処理エンジン２０ａが検索エンジン３０ａに対してパケットの検索要求を行った時刻の順に検索エンジン３０ａから検索結果ブロック（検索結果情報とパケットを含む）がパケット処理エンジン２０ａに返送されるため、パケット処理エンジン２０ａは処理するパケットの順序を、入力インターフェース１０からパケットが渡された順序と同じに維持して、トラフィックマネージャー４０に渡すことができる。
【００５４】
上記のパケットの順序維持制御を行うために、パケット処理エンジン２０ａでは、検索エンジン３０ａに渡す検索要求ブロックの装置内ヘッダ（検索要求情報）に、最初の検索要求であるか、パケットループ処理による検索要求であるかを判定できる情報を付加する。例えば、シーケンス番号を装置内ヘッダに含めておき、最初の検索要求の場合はシーケンス番号＝０を設定しておく。そして、検索エンジン３０ａでは０以外のシーケンス番号でパケットを管理し、シーケンス番号＝０が設定されている装置内ヘッダ（検索要求）を含む検索要求ブロックを受信した際は、０以外の新たなシーケンス番号を順番に割り当て、その割り当てられたシーケンス番号と該パケットの受信時刻を検索制御テーブル３８に記憶する。この割り当てられたシーケンス番号は検索結果情報（後述する図１２参照）に含めて、パケット処理エンジン２０ａに返送される装置内ヘッダに設定しておく。パケット処理エンジン２０ａはループ処理のための検索要求を検索エンジン３０ａに対して行う際は、その検索要求ブロック内の装置内ヘッダのシーケンス番号には、直前に検索エンジン３０ａから返送されたシーケンス番号を折り返し設定しておく。これにより、検索エンジン３０ａは受信した装置内ヘッダのシーケンス番号領域の内容が０か否かを判定することにより、最初の検索要求かパケットループ処理による検索要求かの識別が可能となる。
【００５５】
また、必要な回数のループ処理が完了したパケットの最終的な検索結果は、検索制御テーブル３８にシーケンス番号と共に格納されているため、シーケンス番号の順序を基に、対応するパケットと装置内ヘッダ（最終的な検索結果情報）を含む検索結果ブロックをパケット処理エンジン２０ａに送出することにより、上記のパケットの順序維持制御が可能となる。
【００５６】
入力インターフェース部３１は、パケット処理エンジン２０ａから入力ポート６ａ、７−１ａ、７−２ａ、・・・、７−Ｎａを介して装置内ヘッダが付加されたパケット、つまり、検索要求ブロックを受信する。装置内ヘッダにはパケット処理エンジン２０ａが生成した検索要求情報が格納されており、その検索要求情報に最初の検索処理を示す情報、例えば、シーケンス番号＝０が設定されていた場合は、シーケンス番号管理部３３ａにパケットを受信した旨を通知して新たなシーケンス番号の発行を依頼する。シーケンス番号管理部３３は入力インターフェース部３１ａからのパケット受信通知に対して新たなシーケンス番号を割り当て入力インターフェース部３１ａに通知する。このとき、シーケンス番号管理部３３ａはこのパケットに割り当てたシーケンス番号とパケットの受信時刻とを対応付けて検索制御テーブル３８内の後述する検索制御レコードに格納すると同時に、該検索制御レコードを初期化（処理中フラグの設定等）する。
【００５７】
又、入力インターフェース部３１は受信したパケットをシーケンス番号管理部３３ａから割り当てられたシーケンス番号と共にパケットバッファ管理部３４ａに渡す。パケットバッファ管理部３４ａは、入力インターフェース部３１ａから渡されたパケットをパケットバッファ３９に格納すると同時に、該パケットの格納位置情報（アドレスなど）、パケット長等後でパケットの読み出しの際に必要となる情報をシーケンス番号に対応付けて検索制御テーブル３８に格納する。このパケットは該パケットに関する全ての検索処理（つまり、ループ処理）が完了するまで保持され、該パケットの２回目以降のループ処理で使用される。
【００５８】
一方、入力インターフェース部３１ａは、シーケンス番号管理部３３ａからシーケンス番号が割り当てられると、パケット処理エンジン２０ａから受信した検索要求ブロックの装置内ヘッダから検索要求情報を抽出し、シーケンス番号管理部３３により割り当てられたシーケンス番号を設定する。本検索要求情報は、例えば、後述する図１０のように構成することができる。そして、該検索要求情報の検索キーポインタ情報が示すパケット内の領域から検索キー情報を抽出し、それを上記検索要求情報に付加して検索処理依頼データを生成して、検索処理部３２ａへ渡す。この検索処理依頼データについては、例えば、後述する図１１のように構成することができる。ここで、検索処理依頼データについては、例えば、ＦＩＦＯ方式でキューイングして検索処理部３２に引き渡すように構成してもよい。
【００５９】
検索処理部３２ａは、入力インターフェース部３１ａから渡された検索処理依頼データを基に検索処理を実行する。検索処理部３２ａは１回の検索処理が終了する毎に、その検索結果情報とさらにループ処理が必要か否かを示すループ判定情報をループ制御部３６へ通知する。
【００６０】
ループ制御部３６は、検索処理部３２ａから通知されたループ判定情報を判定し、ループ処理が必要である場合はパケットバッファ管理部３４ａを介してパケットバッファ３９から対応するパケットを読み出す。また、検索処理部３２ａから渡された検索結果情報内のループ回数をカウントアップして装置内ヘッダに設定し、該装置内ヘッダと読み出したパケットを合わせて検索結果ブロックとして出力インターフェース部３５ａへ渡す。出力インターフェース部３５ａは、ループ制御部３６から渡された検索結果ブロック（装置内ヘッダ＋パケット）には０以外のループ回数が設定されているため、第２の通信リンクの中の該ループ回数に対応する出力ポート（出力ポート７−１ｂ〜７−Nｂの中の一つ）へ出力して、パケット処理エンジン２０ａへ送信する。一方、上記の検索処理部３２ａから通知されたループ判定情報が検索処理完了を示していてループ処理は不要と判断した場合は、検索処理部３２ａから渡された検索結果情報内のループ回数をリセット（例えば０を設定）してその検索結果情報を検索制御テーブル３８に該シーケンス番号と対応づけて格納する。
【００６１】
検索制御テーブル３８は、ループ処理中のパケットに関する情報と該パケットの検索状況をシーケンス番号と対応付けて管理する検索制御レコードを保持している。また、現在の時刻を保持する現時刻タイマー、最大Ｎ回のパケットループ処理が完了するまでに許容される最大の処理時間を示す処理待ち時間を保持している。検索制御テーブル３８の詳細については、図５にて後述する。
【００６２】
検索結果出力部３７は所定の周期で起動され、全ての検索処理が完了、つまり、全てのループ処理が完了してパケットバッファ３９に格納されているパケットを、該パケットを最初に受信した時刻（ループ処理開始前の受信時刻）の順にパケット処理エンジン２０ａに送出する。そのため、所定の定周期で起動される検索結果出力部３７は、検索制御テーブル３８に格納されている検索制御レコードを参照し、現在処理中でパケットバッファ３９に滞留中のパケットの中で最も旧い時刻に受信したパケットの受信時刻を現時刻タイマーと比較し、その受信時刻から上記処理待ち時間以上の時間が経過しているか否か、を判定する。そして、処理待ち時間以上の時間が経過していた場合、検索制御レコードの検索処理の状況をチェックし、検索処理が完了している場合はパケットバッファ管理部３４ａを介してパケットバッファ１４からパケットを取り出し、該パケットに検索制御レコードに格納されている最終的な検索結果情報を設定した装置内ヘッダを付加して最終的な検索結果ブロックとし、出力インターフェース部３５ａへ渡す。出力インターフェース部３５ａは、検索結果出力部３７から渡された検索結果ブロックはその検索結果情報のループ回数がリセット（例えば０を設定）されていることから最終的な検索結果ブロックであると見なし、第１の通信リンクに対応する出力ポート６ｂを介してパケット処理エンジン２０ａへ送信する。一方、処理待ち時間が経過しているが該パケットに関する検索処理が未だ完了していない場合は、パケットバッファ管理部３４に該パケットの廃棄を指示して、該パケットに関する処理を中断する。
【００６３】
図５は、本発明の第２の実施形態による検索エンジンの検索制御テーブルの構成例である。
【００６４】
検索制御テーブル３８はシーケンス番号に対応して設けられる検索制御レコードを保持する検索制御レコード記憶部３８１０、次シーケンス番号記憶部３８２０、現時刻タイマー３８３０、処理待ち時間３８４０を含んでいる。
【００６５】
次シーケンス番号記憶部３８２０はパケット処理エンジン２０ａから最初のパケット（ループ処理前のパケット）、つまり、シーケンス番号が割り当てられていない（例えば、シーケンス番号＝０）パケットを受信した際に、その受信したパケットに割り当てるべきシーケンス番号（０以外の値）を記憶する。そして、例えば、最初のパケットに対するシーケンス番号の割り当てが完了すると、次シーケンス番号記憶部３８２０の内容は＋１され、所定の値ｎ（自然数）を越えたときは１に設定されるように構成する。これにより、検索エンジン３０ａが最初に受信したパケットに対しては１と所定の値ｎの間の連続した自然数を用いて昇順かつサイクリックにシーケンス番号が付与される。この所定の値は、例えば、第２の通信リンクが含んでいる通信リンク数がＮの場合は、Ｎ＋１以上の自然数とすることが望ましい。つまり、１、２、・・・、ｎ（ｎはＮ＋１以上の自然数）の自然数をサイクリックに用いてシーケンス番号とすることができる。ここで、ｎをＮ＋１以上の自然数とする理由は、パケットのループ処理はそのループ回数毎に異なる第２の通信リンクを用いて実行されるため、ループ処理を行わないパケットが第１の通信リンクを用いて処理される分を含めて、同時に処理中となるパケットの数はＮ＋１になる可能性があり、さらに、検索エンジン３０ａの内部処理に起因するパケットの滞留分を含めるとＮ＋１より大きい数のパケットが同時に処理中となる可能性があるからである。
【００６６】
現時刻タイマー３８３０は現在時刻を保持するタイマーで、例えば、図５には記載されていない独立した別プロセスにより一定周期でカウントアップして常に現在時刻を示すように構成できる。
【００６７】
検索制御レコード記憶部３８１０は、処理中のパケットをシーケンス番号に対応付けて管理するための情報である検索制御レコードを保持する領域である。
【００６８】
検索制御レコードは、例えば、パケットに関する検索処理の状況を示す状態情報３８１１、パケットループ処理前のパケット（以降、初期パケットとも記述する）の受信時刻である初期パケット受信時刻３８１２、パケットバッファ３９内におけるパケットの格納位置を示すパケットポインタ３８１３、パケット長３８１４、検索処理の結果を格納する検索結果情報３８１５を含むように構成できる。
【００６９】
状態情報３８１１は該パケットに対する検索処理を実行中か否かを示す処理中フラグ、該パケットに対する全ての検索処理（つまり、全てのループ処理を含んだ検索処理）が完了したか否かを示す検索完了フラグを含んでいる。前記図４に示した検索結果出力部３７は、この検索完了フラグを判定し、フラグがオンの場合は検索処理完了とみなして最終的な検索結果ブロック（検査結果情報＋パケット）をパケット処理エンジン２０ａへ送信する。最初のパケット受信時にシーケンス番号が割り当てられた時点で、本状態情報３８１１は初期化され、処理中フラグ、検索完了フラグはリセット（例えばオフを設定）される。
【００７０】
初期パケット受信時刻３８１２は、パケット処理エンジン２０ａから該パケットに関する最初に（ループ処理前に）検索要求ブロック（装置内ヘッダ＋パケット）を受信したときの時刻を示している。
【００７１】
パケットポインタ３８１３は、処理中のパケットが格納されているパケットバッファ３９内の位置情報を示している。
【００７２】
パケット長３８１４は、処理中のパケットの長さを示している。
【００７３】
検索結果情報３８１５は、検索完了したパケットに関する最終的な検索結果情報を保持している。
【００７４】
上記のシーケンス番号は、上記のように、例えば、番号１、２、・・・、ｎをこの順にサイクリックに割り当てるようにし、シーケンス番号１，２、・・・ｎをそれぞれ検索制御レコード１、２、・・・、ｎの配置順に対応付けることにより、検索制御レコード領域３８１０を図５に示すようにｎ個の検索制御レコードで構成することができる。
【００７５】
この場合は、次シーケンス番号記憶部３８２０が示すシーケンス番号ｉに対して、対応する検索制御レコードｉを起点として、検索制御レコード１、２、・・・、ｎをこの順にサイクリックにサーチして、最初に状態情報３８１１の処理中フラグがオンの検索制御レコードを最も旧い初期パケット受信時刻２６１２を持つ検索制御レコードと見なすことができる。また、上記のサーチ処理を回避するために、この処理中で最も旧い初期パケット受信時刻を持つ検索制御レコードに対応するシーケンス番号を常時別領域に保持し、その保持しているシーケンス番号を基に最も旧い初期パケット受信時刻の検索制御レコードを直ちに読み出せるように構成することもできる。
【００７６】
前記図４に示す検索エンジン３０ａの構成例と関連付けて説明すると、シーケンス番号管理部３３ａは、入力インターフェース部３１ａから初期パケット、つまり、シーケンス番号が割り当てられていないパケットを受信した旨の通知を受信したとき、検索制御テーブル３８の次シーケンス番号記憶部３８２０に設定されているシーケンス番号を読み出して入力インターフェース部３１ａに通知すると同時に、検索制御レコード記憶部３８１０内の該シーケンス番号に対応する検索制御レコードを初期化して初期パケット受信時刻３８１２を設定する。そして、次シーケンス番号記憶部３８２０の内容を１からｎの値域内でサイクリックに＋１でカウントアップする。パケットバッファ管理部３４ａはシーケンス番号と共に入力インターフェース部３１ａから渡されたパケットをパケットバッファ３９に格納すると同時に、検索制御テーブル３８の該シーケンス番号に対応する検索制御レコードのパケットポインタ３８１３にパケットの格納位置情報を設定し、また、パケット長３８１４に該パケットの長さを設定する。一方、検索処理部３２ａは、入力インターフェース部３１ａから渡された検索処理依頼データ（検索キー情報を含む）を基に検索処理を実行した後、さらにループ処理を実行すべきか否かを判定し、その判定結果を示すループ判定情報を検索結果情報と共にループ制御部３６へ渡す。ループ制御部３６は、渡されたループ判定情報がループ不要、つまり、全ての検索処理が完了したことを示している場合は、渡された検索結果情報（ループ回数をリセットしておく）を検索制御情報レコード記憶部３８１０のシーケンス番号に対応する検索制御レコードの検索結果情報３８１５に格納すると同時に、状態情報３８１１の検索完了フラグをオンに設定する。一方、渡されたループ判定情報がループ要を示している場合、つまり、さらにループ処理が必要な場合は、渡された検索結果情報のループ回数をカウントアップした後、パケットバッファ管理部３４ａを介してパケットバッファ３９から対応するパケットを読み出す。そして、読み出したパケットに上記の検索結果情報を格納した装置内ヘッダを付加して検索結果ブロックとし、出力インターフェース部３５ａに渡す。出力インターフェース部３５ａは渡されたループ処理途中の検索結果ブロックを、ループ回数に対応した第２の通信リンクを介してパケット処理エンジン２０ａへ送信する。
【００７７】
一方、検索結果出力部３７は所定の一定周期で起動され、検索制御レコード記憶部３８１０の次シーケンス番号３８２０に対応する検索制御レコードを起点としてシーケンス番号の１からｎに対応する検索制御レコードをサイクリックな昇順でサーチし、状態情報３８１１の処理中フラグが最初にオンとなる検索制御レコードを抽出する。そして、現時刻タイマー３８３０が示す時刻と抽出した検索制御レコードの初期パケット受信時刻３８１２が示す時刻の差を求め、その差が処理待ち時間３８４０が示す時間を越えているか否かを判定する。そして、その差が処理待ち時間３８４０が示す時間を越えている場合は、さらに状態情報３８１１の検索完了フラグがオンか否かを判定し、検索完了フラグがオンの場合は全ての検索処理が完了して最終的な検索結果が検索結果情報３８１５に格納されているため、その検索結果情報３８１５を取り出して装置内ヘッダに格納し、また、パケットバッファ管理部３４を介してパケットをパケットバッファ３９から取り出す。このとき、状態情報３８１１内の処理中フラグをリセット（例えばオフに設定）し、パケットバッファに存在していたパケットは削除しておく。そして、取り出したパケットに上記の装置内ヘッダを付加して最終的な検索結果ブロックとし、出力インターフェース部３５ａに渡す。出力インターフェース部３５ａは、渡された検索結果ブロックを第１の通信リンクとなる通信リンク６の出力ポート６ｂを介してパケット処理エンジン２０ａへ送信する。
【００７８】
また、状態情報３８１１の検索完了フラグがオフ、つまり、検索処理が完了していない場合は検索処理が所定の処理待ち時間内に完了しなかったことを意味し、該検索制御レコードの状態情報３８１１の処理中フラグをオフにすると同時に、パケットバッファ３９内に格納されているパケットを廃棄して、該パケットに対する処理を中断する。
【００７９】
上記のようにして、検索エンジン３０ａは、初期パケットを受信した時点から、該パケットのループ処理を含めた全ての検索処理が完了するまでの間、該パケットと検索結果情報をシーケンス番号を基に関連づけて保持する。そして、所定の処理待ち時間が経過した時点で初期パケットの受信時刻が最も旧いパケットの検索処理が完了している場合は該パケットをパケットバッファ３９から取り出してパケット処理エンジン２０ａに送信し、所定の処理待ち時間が経過した時点でも該パケットの検索処理が完了していない場合は、該パケットを削除して該パケットの処理を中断する。これにより、複数のパケットのループ処理を並行して効率よく実行すると同時に、検索エンジン３０ａがパケットを受信した順番を維持しながら、検索処理が完了したパケットをパケット処理エンジン２０ａへ送信することができる。
【００８０】
図６は、本発明の第３の実施形態によるパケット処理装置の構成例を示している。
【００８１】
１０は入力インターフェース、２０ｂはパケット処理エンジン、３０ｂは検索エンジン、５０は出力インターフェース、３９はパケットバッファ、３５１はスケジューラを示す。パケット処理エンジン２０ｂは出力インターフェース５０に対して直接データを渡す点以外は、前記図３に示したパケット処理エンジン２０ａと同様な機能を持っている。前記第２の実施形態と同様に、パケット処理エンジン２０ｂは入力インターフェース１０から転送されたパケットに、検索要求情報を格納した装置内ヘッダを付加して検索エンジン３０ｂに転送し、検索エンジン３０ｂはパケットバッファ３９にパケットを一時的に保持し、装置内ヘッダに含まれている検索キーを基に検索処理を行った後、その検索結果とパケットをパケット処理エンジン２０ｂに返送する。また、検索エンジン３０ａは、必要な場合は前記第２の実施形態と同様にパケットのループ処理を行う。
【００８２】
本第３の実施形態では、検索エンジン３０ｂは、前記図４に示した構成に加えて、前記図１、図２に示したトラフィックマネージャー４０と同様のスケジューリング処理を行うスケジューラ３５１をさらに備えている。従って、本発明の第２の実施形態に示す機能は全て含んでいるが、その内容は第２の実施形態と同様であり、説明は割愛する。
【００８３】
本第３の実施形態では、全てのループ処理が完了したパケット、つまり、その検索結果が検索制御レコードに保持されているパケットについては、スケジューラ３５１はその検索制御レコードに保持されている検索結果情報を基に（例えば、ＱｏＳ関連情報を基に）、パケットと装置内ヘッダをキューイングするなどの優先制御を行った後に、第１の通信リンクを介してパケット処理エンジン２０ｂへ送信する。
【００８４】
この第３の実施形態による検索エンジン３０ｂの構成例としては、前記図４に示した検索エンジン３０ａの構成において、出力インターフェース部３５ａの中に上記スケジューラ３５１は含めて構成することができる。
【００８５】
この第３の実施形態では、パケットバッファ３９を、検索処理用と検索完了したパケットのスケジューリング用とに兼用することによりトラフィックスケジューラ４０が不要となり、パケット処理装置の構成の単純化と低コストを図ることができる。
【００８６】
図７は、本発明の第２の実施形態による検索エンジンのループ処理時の動作フロー例である。
【００８７】
Ｓ０１．  検索エンジン３０ａは、パケット処理エンジン２０ａから第１の通信リンク６を介して検索要求ブロック（装置内ヘッダ＋パケット）を受信すると、装置内ヘッダに格納されている検索要求情報を基に最初の検索要求（ループ処理開始前の）か否かを判定する。この判定は、検索要求情報内に設定されているシーケンス番号により行うことができる。例えば、シーケンス番号が０のときは検索エンジン３０ａによりシーケンス番号が割り当てられていないことを示すように構成することにより、装置内ヘッダのシーケンス番号を判定して最初の検索要求か否かを判定することができる。
【００８８】
Ｓ０２．  検索制御テーブル３８の次シーケンス番号記憶部３８２０より、次に割り当てるべきシーケンス番号を取り出して受信したパケットに割り当て、検索制御レコード記憶部３８１０内の該シーケン番号に対応する検索制御レコードを初期化する。この初期化により、状態情報３８１１の処理中フラグ、検索完了フラグがリセット、つまり、オフに設定される。
【００８９】
Ｓ０３．  前記図４の第２の実施形態の構成例に示した検索処理部３２ａにより検索処理を実行する。この検索処理により、検索処理の結果を示す検索結果情報とループ処理が必要か否かを示すループ判定情報が出力される。
【００９０】
Ｓ０４．  上記ステップＳ０３で出力されたループ判定情報を基に、該パケットはさらにループ処理が必要か否かを判定し、ループ処理が必要ならば（ＹＥＳ）次のステップＳ０５へ移行し、ループ処理が不要、つまり、全ての検索処理が完了した状態ならば（ＮＯ）ステップＳ０６へ移行する。
【００９１】
Ｓ０５．  上記ステップＳ０３で出力された検索結果情報のループ回数をカウントアップした後に、パケットバッファ３９から対応するパケットを読み出し、そのパケットに上記検索結果情報を設定した装置内ヘッダを付加して検索結果ブロックとし、ループ回数に対応した第２の通信リンクを介してパケット処理エンジン２０ａへ送信し、処理を終了する。これにより、パケットループ処理、つまり、パケット処理エンジン２０ａと検索エンジン３０ａの間で必要な回数パケットを受け渡しながらパケットに対する追加処理を段階的に行うことができる。このループ処理は検索エンジン３０ａの検索処理部３２ａがループ処理が不要と判定するまで最大Ｎ回の範囲で行うことができる。ここで、Ｎは前記図３に示したパケット処理エンジン２０ａと検索エンジン３０ａの間の第２の通信リンクが含むループ用通信リンクの数を示している。
【００９２】
Ｓ０６．  ここではパケットのループ処理が不要、つまり、該パケットに対する全ての検索処理が完了しているため、検索結果情報のループ回数をリセット（例えば０に設定）した後に検索制御レコードの検索結果情報３８１５に格納し、処理を終了する。ここで格納された検索結果情報は、本処理と独立して所定の一定周期で起動される検索結果出力部３７により取り出されて装置内ヘッダに設定され、装置内ヘッダとパケットから成る検索結果ブロックとして第１の通信リンクを介してパケット処理エンジン２０ａへ送信される。この検索結果出力部３７の動作フローについては、図８において後述する。
【００９３】
図８は、本発明の第２の実施形態による検索エンジンの検索結果出力時の動作フローで、前記図４に示した第２の実施形態の検索エンジンの検索結果出力部３７の動作フローを示している。本処理は所定の一定周期で起動されるが、起動周期は検索完了したパケットが検索エンジン３０ａ内に滞留しないように、できるだけ短い時間であることが望ましい。
【００９４】
Ｓ１１．  検索制御テーブル３８に格納されている処理中（状態情報３８１１の処理中フラグがオン）の検索制御レコードの中から、最も旧い初期パケット受信時刻３８１２を有する検索制御レコードを取り出し、該検索制御レコードの初期パケット受信時刻３８１２を読み出す。つまり、処理中でしかも最も旧い初期パケット受信時刻を有する検索制御レコードが示すパケットが、次にパケット処理エンジン２０ａに送出すべきパケットとなる。ここで、最も旧い初期パケット受信時刻３８１２を有する処理中の検索制御レコードを抽出するためには、検索制御テーブル３８に格納されている検索制御レコード内の初期パケット受信時刻３８１２を直接サーチする方法もあるが、前記図５に示した検索制御テーブル３８の構成例では、シーケンス番号１から所定値ｎの間の自然数は、それぞれ、検索制御レコード１からｎに対応することを利用して、次のようにして抽出することができる。
【００９５】
次シーケンス番号３８２０に対応する検索制御レコードを起点としてシーケンス番号１からｎの間のサイクリックな昇順に対応する検索制御レコードをサーチし、状態情報３８１１の処理中フラグが最初にオンとなる検索制御レコードを抽出する。ここで、シーケンス番号１からｎの間のサイクリックな昇順とは、１、２、・・・、ｎ、１、２、・・・、ｎ、１、２、・・・のように、１からｎの間の自然数を連続的に昇順で繰り返し使用することを意味する。
【００９６】
この方法が可能なのは、検索制御レコードの状態情報３８１１の処理中フラグは、検索エンジン３０ａで検索処理中の場合のみオンに設定され、また、シーケンス番号は１からｎ間のサイクリックな昇順の自然数が順次割り当てられ、そのシーケンス番号が割り当てた時点で初期パケット受信時刻３８１２が設定されるため、処理中の検索制御レコードの初期パケット受信時刻３８１２の値の昇順と該検索制御レコードに割り当てられるシーケンス番号の１からｎの間のサイクリックな昇順とが対応するためである。
【００９７】
また別な方法として、次にパケット処理エンジン２０ａに最終的な検索結果として送出すべきパケットのシーケンス番号を常に保持しておくこともできる。この場合は、上記のようなサーチ処理は不要となり、より高速に次出力パケットの受信時刻の読み出しが可能となる。
【００９８】
Ｓ１２．  検索制御テーブル３８の現在時刻タイマー３８３０から、現在時刻を読み出す。
【００９９】
Ｓ１３．  上記ステップＳ１１で読み出した初期パケット受信時刻とステップＳ１２で読み出した現在時刻との差が、処理待ち時間３８４０に格納されている所定の処理待ち時間より大か否かを判定し、大ならば（ＹＥＳ）処理待ち時間のタイムアウトと見なして次のステップＳ１４に移行し、大でなければ（ＮＯ）次の処理待ち時間のタイムアウトになる時間まで待ち合わせるために処理を終了する。
【０１００】
Ｓ１４．  状態情報３８１１の検索完了フラグを判定し、検索完了ならば（ＹＥＳ）次のステップＳ１５へ移行し、検索が完了していない場合は（ＮＯ）ステップＳ１８へ移行する。
【０１０１】
Ｓ１５．  検索制御レコードに格納されている検索結果情報３８１５を読み出し、その検索結果情報を設定した装置内ヘッダを生成する。
【０１０２】
Ｓ１６．  対応するパケットをパケットバッファ３９から取り出して、上記ステップＳ１５で作成した装置内ヘッダを付加して最終的な検索結果ブロックとして出力する。このとき、対応するパケットはパケットバッファ３９から削除しておく。
【０１０３】
Ｓ１７．  検索制御レコードの状態情報３８１１の処理中フラグをリセットし、処理を終了する。
【０１０４】
Ｓ１８．  パケットバッファ３９に保持されている対応するパケットを削除し、ステップＳ１７へ移行する。
【０１０５】
図９は、本発明の検索要求ブロック及び検索結果ブロックの構成例で、検索要求ブロックはパケット検索エンジン２０ａから検索エンジン３０ａへ渡され、検索結果ブロックは検索エンジン３０ａからパケット処理エンジン２０ａ、トラフィックマネージャー４０、出力インターフェース５０へ渡される。
【０１０６】
検索要求ブロックおよび検索結果ブロックとも図９に示すようなデータフォーマット１０００で構成され、装置内ヘッダ１１００とパケット格納領域１２００を含んでいる。検索要求ブロックの場合は、装置内ヘッダ１１００にパケット処理エンジン２０ａが生成する検索要求情報３００が設定され、検索結果ブロックの場合は、装置内ヘッダ１１００に検索エンジン３０ａが生成する検索結果情報４００が設定される。パケット格納領域１２００には入力インターフェース１０からパケット処理エンジン２０ａに渡されたパケットデータが格納される。このパケットデータは、パケット処理エンジン２０ａの処理にて一部（例えばヘッダ部分等）変更された後にパケット領域１２００に格納される場合もある。
【０１０７】
図１０は、本発明の装置内ヘッダに設定される検索要求情報の構成例を示している。本構成は本発明の第１、２、３の実施形態で適用可能であるが、ここでは説明の便宜上、第２の実施形態を代表例にして説明する。
【０１０８】
検索要求情報３００は、検索要求ブロックの装置内ヘッダに格納されてパケット処理エンジン２０ａから検索エンジン３０ａに渡される。
【０１０９】
３０１はパケット処理エンジン２０ａによって生成されるデータチェック情報である。パケット処理エンジン２０ａは、パケット処理エンジン２０ａによって付け加えられた装置内ヘッダ、および、パケット処理エンジン２０ａによって変更されたパケット内のデータ領域についてデータチェックビットを生成して検索要求情報３００のデータチェック情報３０１に格納する。データチェックの方法としては、例えば、ＣＲＣチェックとすることができる。チェック対象となるデータ領域は後述するチェック範囲３０５によって示される。
【０１１０】
３０２はシーケンス番号で、検索エンジン３０ａによって割り当てられたシーケンス番号を格納する領域である。検索エンジン３０ａとパケット処理エンジン２０ａの間でパケットループ処理を実行している間は、検索エンジン３０ａとパケット処理エンジン２０ａの間で受け渡される装置内ヘッダに同一のシーケンス番号が保持され、他のパケットに関するループ処理と区別される。パケット処理エンジン２０ａから検索エンジン３０ａに最初に送信される初期パケットについては、シーケンス番号３０２には例えば０を設定しておくことにより、最初のパケットか否かを検索エンジン３０ａが判定できる。
【０１１１】
３０３はループ回数で、検索エンジン３０ａにより設定され、現在何回目のループ処理を実行中かを示す。パケット処理エンジン２０ａは、初期パケットについては、本ループ回数３０３をリセット（例えば０を設定）しておくが、それ以外のループ処理中は、検索エンジン３０ａから設定されてきた値をそのまま検索エンジン３０ａに送り返す。
【０１１２】
３０４は主回線の受信ポート１からパケットを受信した際のパケット種別を示す。
【０１１３】
３０５はチェック範囲で、データチェック情報３０１に設定されるチェックビットを生成する際のチェック対象となるデータ領域の境界位置を示す情報である。例えば、前記図９に示したデータフォーマット１０００の領域内の相対アドレス、つまり、オフセット値とすることができる。これにより、例えば、データフォーマット１０００の先頭からチェック範囲３０５に設定されているオフセット値が示すデータフォーマット１０００内の位置までの領域（ただし、検索要求情報３００のデータチェック情報３０１の領域を除く）をデータチェックの対象とすることができる。先頭からオフセット値が示す領域までをチェック範囲とするのは、パケット処理エンジン２０ａが変更する領域はパケットの先頭部分（ヘッダ領域とその近傍）の場合が多いためで、その変更した情報が格納されているパケット領域内の最終位置をオフセット値により設定しておくことができる。
【０１１４】
このようにデータチェック情報を構成することにより、例えば、パケット処理エンジン２０ａが検索要求ブロックを検索エンジン３０ａに送信する際に、パケット処理エンジン２０ａで変更した部分についてＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を計算して、装置内ヘッダのデータチェック情報３０１にその計算したＣＲＣ値を設定する。又、変更した部分の最終位置を示すオフセット値を検索要求情報３００のチェック範囲３０５に設定する。検索エンジン３０ａは、検索要求ブロック（装置内ヘッダ＋パケット）受信時に、チェック範囲３０５が示す位置までの領域（ただし、データチェック情報３０１の領域は除く）についてＣＲＣ値を計算し、その結果が受信した検索要求情報３００のデータチェック情報３０１に設定されている値と一致するか否かを判定することにより、送信されてきた検索要求ブロックのパケット処理エンジン２０ａが変更した部分についてはエラーが無いことを確認することができ，エラーがある場合は該データを廃棄することができる。
【０１１５】
同様にして、検索エンジン３０ａからパケット処理エンジン２０ａに検索結果ブロックを送信する場合も、検索エンジン３０ａにおいて変更した領域についてデータチェックを行ってデータチェック情報を付加してパケット処理エンジン２０ａに送信することができる。これについては、図１２において後述する。
【０１１６】
なお、変更のない部分については、検索エンジン３０ａ及びパケット処理エンジン２０ａに於いて確認を行う必要はない。
【０１１７】
３０６はＶＰＮ−ＩＤ（Ｖｉｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ−Ｉｄｅｎｔｉｆｉｅｒ）で、主回線の受信ポート１から入力インターフェース１０によりパケットが受信された際のパケットが属するＶＰＮのＩＤを示している。
【０１１８】
３０７は受信ポート番号で、パケットが受信された主回線の受信ポート１の番号である。
【０１１９】
３０８はパケット長である。
【０１２０】
３０９はユーザ定義領域で、例えば機能拡張時等に使用する領域である。
【０１２１】
３１０、３１１、３１２、３１３は検索キー情報が格納されている領域を示す検索キーポインタである。図１０の実施例では４個の検索キーの例を示しているが、検索キーの数はこれに限定されない。また、検索キー情報のサイズが小さい場合は、検索キーのポインタではなく、検索キー情報そのものを３１０、３１１、３１２、３１３に格納してもよい。
【０１２２】
上記の検索要求情報３００は一つの構成例であり、上記の検索要求情報３００に含まれる情報項目、および、レイアウトはパケット処理エンジン２０ａ、及び、検索エンジン３０ａの処理の内容に依存して変わるが、本発明の本質には影響しない。
【０１２３】
図１１は、本発明の検索エンジンの検索処理時に使用される検索処理依頼データの構成例を示しており、本発明の第１、第２、第３の実施形態で共通に用いることができるものであるが、説明の便宜上第２の実施形態を代表例として説明する。
【０１２４】
検索エンジン３０ａの入力インターフェース部３１ａは、パケット処理エンジン２０ａから渡された前記図１０に示す検索要求情報３００の中の検索キーポインタ３１０、３１１、３１２、３１３が示すパケット格納領域１２００より検索キー情報１、２、３、４をそれぞれ抽出して、装置内ヘッダ（検索要求情報）２３００に検索キー情報２３１０、２３１１、２３１２、２３１３として付加し、検索依頼データ２０００として検索処理部３２ａに渡す。これにより、検索処理部３２ａは渡された検索キー情報を基に検索処理を迅速に実行できる。検索キー情報としては、例えば、ＩＰｖ４のパケットデータの場合は、パケットのヘッダに格納されているＩＰ−ＳＡ（送信アドレス）、ＩＰ−ＤＡ（宛先アドレス）、あるいは、Ｐａｙｌｏａｄ（ペイロード）内の特定データ等が考えられる。
【０１２５】
本検索処理依頼データ２０００は、ＦＩＦＯ方式でキューイングして検索処理部３２ａに渡すように構成することもできる。
【０１２６】
図１２は、本発明の装置内ヘッダに格納される検索結果情報の構成例で、本発明の第１、第２、第３の実施形態で共通に用いることができるものであるが、説明の便宜上第２の実施形態を代表例として説明する。
【０１２７】
４０１は検索エンジン３０ａによって付加されるデータチェック情報である。検索処理エンジン３０ａは、検索エンジン３０ａによって生成された装置内ヘッダ、および、検索エンジン３０ａによって変更されたパケットデータ内のデータ領域を対象として、データチェック情報を生成して検索結果情報４００に格納する。データチェックの方法としては、例えば、ＣＲＣチェックとすることができる。チェック対象となるデータ領域は後述するチェック範囲４０５によって示される。
【０１２８】
４０２はシーケンス番号で、検索エンジン３０ａによって割り当てられたシーケンス番号を格納する領域である。パケット処理エンジン２０ａから最初に検索エンジン３０ａに送信される初期パケット（ループ処理前のパケット）については、シーケンス番号３０２には例えば０を設定しておく。検索エンジン３０ａは、シーケンス番号＝０の検索要求ブロックを受信した際は、シーケンス番号を該パケットに割り当て、ループ処理の際はこの割り当てたシーケンス番号が装置内ヘッダの検索結果情報に設定されてペケット処理エンジンに渡される。パケット処理エンジンは２０ａは、渡されたシーケンス番号をそのまま前記１０に示した検索要求情報のシ０ケンス番号３０２に設定して検索エンジン３０ａに引き渡す。
【０１２９】
４０３はループ回数で、検索エンジン３０ａがループ処理を行う際に、現在何回目のループ処理かを示すループ回数が設定する。ループ処理中は、パケット処理エンジン２０ａはここに設定されているループ回数をそのまま検索エンジン３０ａに送り返す。
【０１３０】
４０４は検索処理の対象となっているパケットの種別を示す。
【０１３１】
４０５は送信ポート番号で、検索処理の対象となっているパケットが最終的に出力インターフェース５０から送出されるときの主回線の送信ポート５の番号を示す。
【０１３２】
４０６は受信ポート番号で、検索処理の対象となっているパケットが入力インターフェース１０に入力されたときの主回線の受信ポート１の番号を示す。
【０１３３】
４０７はチェック範囲で、データチェック情報４０１に設定されるチェックビットを生成する際のチェック対象となるデータ領域の境界位置を示す情報で、例えば、前記図９に示した受け渡しデータ１０００領域内の相対アドレス情報、つまり、オフセット値とすることができる。
【０１３４】
これにより、例えば、データフォーマット１０００の先頭からチェック範囲４０７に設定されているオフセット値が示すデータフォーマット１０００内の位置までの領域（ただし、検索結果情報４００のデータチェック情報４０１の領域を除く）をデータチェックの対象とすることができる。先頭からオフセット値が示す領域までをチェック範囲とするのは、パケット検索エンジン３０ａが変更する領域はパケットの先頭部分（ヘッダ領域とその近傍）の場合が多いためで、その変更した情報が格納されているパケット領域内の最終位置をオフセット値により設定しておくことができる。
【０１３５】
検索エンジン３０ａは、例えば、パケットを送信する直前に装置内ヘッダ検索結果情報４００のチェック範囲４０５に設定されているオフセット値までのＣＲＣ計算を行い、検索結果情報４００のＣＲＣ値を書き換えて、パケット処理エンジン２０ａへ送信する。パケット処理エンジン２０ａは、受信した検索結果情報４００のチェック範囲４０５が示す領域のＣＲＣチェックビットを計算し、受信した検索結果情報４００のデータチェック情報４０１に設定されている値と一致するか否かを判定し、一致しない場合はデータエラーが発生したとみなして、該検索結果ブロックを廃棄する。なお、変更のない部分については、検索エンジン３０ａ及びパケット処理エンジン２０ａに於いて確認を行う必要はない。
【０１３６】
上記は、検索エンジン３０ａとパケット処理エンジン２０ａの間のデータ受け渡しに伴うエラーをチェックするものであるが、さらに、出力インターフェース５０で渡された検索結果ブロック（装置内ヘッダ＋パケット）のオフセット値以降、つまり、検索エンジン３０ａ及びパケット処理エンジン２０ａに於いて変更されなかった部分のＣＲＣのチェック行い、エラーがある場合はパケットを廃棄するように構成することもできる。
【０１３７】
また、検索エンジン３０ａやパケット処理エンジン２０ａの各処理ブロック内においても、例えば、ＲＡＭにデータを書き込む際はパリティを設定し、エラーを検出する仕組みを持たせることもできる。
【０１３８】
上記に示したデータチェック方法により、高信頼性を維持した状態でのパケットの転送処理を実行することができる。
【０１３９】
４０８はＶＰＮ−ＩＤで、検索処理の対象となっているパケットが最終的に出力インターフェース５０から送信ポート５へ送出されるときに属すべきＶＰＮのＩＤを示している。
【０１４０】
４０９はポリシングＩＤで、検索処理の対象となっているパケットに対してトラフィックマネージャー４０が優先制御などのＱｏＳ制御を行う際に用いられる。
【０１４１】
４１０はクラス情報で、上記ポリシングＩＤと同様に、検索処理の対象となっているパケットに対してトラフィックマネージャー４０が優先制御などのＱｏＳ制御を行う際に用いられる。
【０１４２】
４１１はユーザ定義領域で、例えば機能拡張時等に使用する領域である。
【０１４３】
上記の検索結果情報４００は一つの構成例であり、上記の検索結果情報４００に含まれる情報は検索エンジン３０ａの検索処理の内容に依存して変わるが、本発明の本質には影響しない。
【０１４４】
図１３は、本発明の第２の実施形態による検索エンジンの処理シーケンス例（１）で、シーケンス番号が未だ割り当てられていない初期パケットをループ処理する場合を例にして検索エンジン３０ａの処理の流れを、データの流れ（矢印）に付加した処理ステップ番号で示している。
【０１４５】
S１０１．  検索エンジン３０ａの入力インターフェース部３１ａはパケット処理エンジン２０ａからシーケンス番号が割り当てられていないパケットデータ、つまり、シーケンス番号＝０が装置内ヘッダに設定されているパケットデータを第１の通信リンクの入力ポート６ａを介して受信する。
【０１４６】
Ｓ１０２．  入力インターフェース部３１ａはシーケンス番号管理部３３ａに初期パケット受信の通知を行う。
【０１４７】
Ｓ１０３．  シーケンス番号管理部３３ａは、検索制御テーブル３８の次シーケンス番号記憶部３８２０に保持されているシーケンス番号を割り当てるシーケンス番号として発行し、入力インターフェース部３１ａに通知する。
【０１４８】
このとき、シーケンス番号管理部３３ａは検索制御テーブル３８の次シーケンス番号記憶部３８２０に対して、例えば、１から所定の値ｎの範囲でサイクリックの＋１加算処理を行い、次に割り当てるべきシーケンス番号を保持しておく。また、シーケンス番号管理部３３ａは、該シーケンス番号に対応する検索制御テーブル３８内の検索制御レコード領域を初期化し、その中の初期パケット受信時刻３８１２に該パケットの受信時刻を書き込む。
【０１４９】
Ｓ１０４.  上記ステップＳ１０３でシーケンス番号を通知された入力インターフェース部３１ａは、上記ステップＳ１０１で受信した装置内ヘッダの検索要求情報に格納されている検索キーのポインタ情報を基に、受信したパケットの中に格納されている検索キー情報を抽出する。そして、抽出した検索キー情報を受信した検索要求情報に付加して検索処理依頼データとして検索処理部３２ａに通知する。
【０１５０】
Ｓ１０５.  また、 入力インターフェース部３１ａは、受信したパケットとその割り当てられたシーケンス番号をパケットバッファ管理部３４へ引き渡す。パケットバッファ管理部３４ａは、引き渡されたパケットをパケットバッファ３９に格納すると同時に、その格納位置情報（例えばメモリアドレス）を渡されたシーケンス番号に対応する検索制御レコード内のパケットポインタ３８１３に設定する。
【０１５１】
Ｓ１０６.  上記シーケンスＳ１０４で検索処理依頼データを渡された検索処理部３２ａは、検索処理を実行した後さらにループ処理が必要か否かを判定し、その結果をループ判定情報として検索結果情報と共にループ制御部３６へ渡す。本図１３のケースはループ処理が必要な場合の例であるため、検索処理部３２ａがループ制御部３６に渡すループ判定情報にはループ処理が必要なことを示す情報が設定されている。
【０１５２】
Ｓ１０７.  ループ制御部３６は渡されたループ判定情報にはループ処理が必要なことが示されているため、ループ処理を行うためにパケットバッファ３９に格納されているパケットを読み出す。また、検索処理部３２ａから渡された検索結果情報内のループ回数をカウントアップする。（パケット処理エンジン２０ａから渡される検索要求情報のループ回数には、初期パケットの場合は０が設定されている）
Ｓ１０８.  ループ制御部３６は上記ステップＳ１０７で読み出したパケットに検索結果情報を格納した装置内ヘッダを付加して検索結果ブロックとし、出力インターフェース部３５ａへ渡す。
【０１５３】
Ｓ１０９.  出力インターフェース部３５は、渡された検索結果ブロック（パケットと装置内ヘッダを含む）を、第２の通信リンク内のループ回数に対応した番号（このケースでは１）の出力ポート（このケースでは７−１ｂ）を介してパケット処理エンジン２０ａへ送信する。
【０１５４】
図１４は、本発明の第２の実施形態による検索エンジンの処理シーケンス例（２）で、シーケンス番号が割り当て済み（ループ処理中）のパケットに対してさらにループ処理する場合を例にして、検索エンジン３０ａの処理の流れを、データの流れ（矢印）に付加した処理ステップ番号で示している。
【０１５５】
Ｓ２０１.   検索エンジン３０ａの入力インターフェース部３１ａはパケット処理エンジン２０ａから０以外のシーケンス番号が割り当て済みのパケットに関する検索要求ブロック（パケットと装置内ヘッダを含む）を受信する。シーケンス番号が割り当て済みということは、検索エンジン３０ａが該パケットに対してループ処理を実施中であることを示している。また、本検索要求ブロックは第２の通信リンク内の現在のループ回数（装置内ヘッダの検索要求情報に設定されている）に対応する通信リンク（７−１、・・・、７−Ｎの中の一つ）の入力ポートから受信される。このように、ループ処理対象のパケットを受信する通信リンクをループ回数に応じて設けることにより、最大Ｎ個の複数のパケットのループ処理をループ処理タイミングをずらしながら並行して実行することが可能となる。
【０１５６】
Ｓ２０２.   入力インターフェース部３１ａは、上記ステップＳ１０１で受信した検索要求ブロックの装置内ヘッダに格納されている検索要求情報の検索キーポインタ情報を基に、受信したパケットの中から検索キー情報を抽出する。そして、抽出した検索キー情報を受信した検索要求情報に付加したデータを検索処理依頼データとして検索処理部３２ａに通知する。
【０１５７】
Ｓ２０３.  また、入力インターフェース部３１ａは、受信したパケットと割り当てられたシーケンス番号をパケットバッファ管理部３４ａへ渡す。パケットバッファ管理部３４ａは、渡されたパケットをパケットバッファ３９に格納すると同時に、その格納位置の情報（例えばメモリアドレス）を該シーケンス番号に対応する検索制御レコードのパケットポインタ３８１３に格納する。
【０１５８】
ここで、ループ処理対象のパケットについては、初期パケットを受信した際（シーケンス番号が割り当てられていない状態のとき）のその初期パケットをパケットバッファ３９に格納してループ処理が終わるまで保持しておき、ループ処理でパケットの内容を変更する必要がない場合は、受信したパケットをパケットバッファ３９へ格納しないようにしてもよい。また、パケットのヘッダ部分など、ループ処理中に検索エンジン３０ａが変更する可能性のある部分のみをパケットバッファ３９に保持されているパケットに上書きしてもよい。
【０１５９】
Ｓ２０４.   上記ステップＳ２０２で入力インターフェース部３１ａから検索処理依頼データを渡された検索処理部３２ａは、渡された検索処理依頼データに設定されている検索キー情報を基に、例えば、ＣＡＭ等予め検索処理部３２ａに保持されているデータを検索し、検索結果をループ制御部３６へ渡す。このとき、同時に、さらにループ処理が必要か否かを判定してその結果をループ判定情報としてループ制御部３６へ渡す。
【０１６０】
Ｓ２０５.   ループ制御部３６は検索処理部３２ａから渡されたループ判定情報を判定するが、本ぅ１５のケースはループ処理が必要な場合であるため、さらにループ処理を行うために、パケットバッファ管理部３４ａを介してパケットバッファ３９に格納されているパケットを読み出す。また、検索処理部３２ａから渡された検索結果情報内のループ回数をカウントアップする。
【０１６１】
Ｓ２０６.  ループ制御部３６は、読み出したパケットに上記検索結果情報を設定した装置内ヘッダを付加して検索結果ブロックとし、出力インターフェース部３５へ渡す。この検索結果ブロックには、まだ全ての検索処理が完了していないループ処理途中の検索結果情報が格納されていることになる。
【０１６２】
Ｓ２０７.  出力インターフェース部３５ａは、渡された検索結果ブロック（パケットと装置内ヘッダを含む）を、第２の通信リンク内のループ回数に対応した番号の出力ポートを介してパケット処理エンジン２０ａへ送信する。
【０１６３】
図１５は、本発明の第２の実施形態による検索エンジンの処理シーケンス例（３）で、パケット対する検索処理が全て完了した場合、つまり、ループ処理が完了した場合を例にして、検索エンジン３０ａの処理の流れを、データの流れ（矢印）に付加した処理ステップ番号で示している。
【０１６４】
Ｓ３０１.   検索エンジン３０ａの入力インターフェース部３１ａはパケット処理エンジン２０ａからシーケンス番号が割り当て済みの検索要求ブロック（パケットと装置内ヘッダを含む）を受信する。シーケンス番号が割り当て済みということは、検索エンジン３０ａが該パケットに対してループ処理を実施中であることを示している。
【０１６５】
Ｓ３０２.   入力インターフェース部３１ａは、上記ステップＳ１０１で受信した検索要求ブロックの装置内ヘッダに格納されている検索要求情報の検索キーポインタ情報を基に、受信したパケットの中から検索キー情報を抽出する。そして、抽出した検索キー情報を受信した検索要求情報に付加したデータを検索処理依頼データとして検索処理部３２ａに通知する。
【０１６６】
Ｓ３０３.  また、入力インターフェース部３１ａは、受信したパケットと割り当てられたシーケンス番号をパケットバッファ管理部３４ａへ引き渡す。パケットバッファ管理部３４ａは、引き渡されたパケットをパケットバッファ３９に格納すると同時に、その格納位置の情報（例えばメモリアドレス）を渡されたシーケンス番号に対応する検索制御レコードのパケットポインタ３８１３に格納する。
【０１６７】
ここで、ループ処理対象のパケットについては、最初に受信した際（シーケンス番号が割り当てられていない状態のとき）のみパケットバッファ３９に格納してループ処理が終わるまで保持しておき、２回目以降のループ処理でパケットの内容を変更する必要がない場合は、パケットをパケットバッファ３９へ格納しないようにしてもよい。また、パケットのヘッダ部分など、ループ処理中に変更となる可能性のある部分のみをパケットバッファ３９に保持されているパケットに上書きしてもよい。
【０１６８】
Ｓ３０４.  検索処理部３２ａは、入力インターフェース部３１ａから渡された検索処理依頼データに設定されている検索キー情報を基に、例えば、ＣＡＭ等に予め検索処理部３２ａに保持されているデータを検索し、検索結果をループ制御部３６へ渡す。このとき、同時に、さらにループ処理が必要か否かを判断してその結果をループ判定情報としてループ制御部３６へ渡す。
【０１６９】
Ｓ３０５.   ループ制御部３６は検索処理部３２ａから渡されたループ判定情報を基に、さらにループ処理が必要か否かを判定する。本図１５のケースではループ処理が完了し検索処理が全て完了しているため、ループ制御部３６は検索処理部３２ａから渡された検索結果情報のループ回数をリセットして検索制御テーブル３８内の対応する検索制御レコードに格納する。
【０１７０】
Ｓ３０６.  上記ステップＳ３０５で検索制御テーブル３８の検索制御レコードに格納された検索結果情報は、所定の周期で起動される検査結果出力部３７により初期パケット受信時刻の順にとり出される。
【０１７１】
Ｓ３０７．  また、検査結果出力部３７は、パケットバッファ３９から該当するパケットを取り出す。
【０１７２】
Ｓ３０８．  上記ステップＳ３０６で取り出した検索結果情報を装置内ヘッダに設定し、また、上記ステップＳ３０７取り出したパケットに上記装置内ヘッダを付加して検索結果ブロックとし、出力インターフェース部３５ａへ渡す。
【０１７３】
Ｓ３０９.   出力インターフェース部３５aは、渡された検索結果ブロック（パケットと装置内ヘッダを含む）を、第１の通信リンクに対応する出力ポート６ｂを介してパケット処理エンジン２０ａへ送信する。
【０１７４】
以上詳述した本発明の説明で用いた実施例は代表的な例を示したもので、様々な変形が可能であるが、本発明はそれらに対しても同様に適用できる。
【０１７５】
以上述べた本発明の実施の態様は、以下の付記の通りである。
（付記１）パケット処理エンジンと検索エンジンとを含む構成のパケット処理装置に於いて、
前記パケット処理エンジンと前記検索エンジンとの間を、パケットを伝送する主回線の伝送帯域以上の帯域で接続するバスを備え、
前記パケット処理エンジンは、前記主回線を介して受信した前記パケットに検索キーを含む装置内ヘッダを付加して、前記バスを介して前記検索エンジンに送信する手段を備え、  
前記検索エンジンは、前記パケット処理エンジンから前記バスを介して送信されたパケットを一時的に格納するパケットバッファと、前記装置内ヘッダに格納されている検索キーを基に検索処理を行う手段と、前記検索処理部による検索結果情報と前記パケットバッファに格納されたパケットとを前記バスを介して前記パケット処理エンジンに返送する手段を備える
ことを特徴とするパケット処理装置。
（付記２）付記１に記載のパケット処理装置において、
前記検索エンジンは、前記パケット処理エンジンから受信したパケット毎にシーケンス番号を割り当てるシーケンス番号管理手段と、
前記パケット処理エンジンとの間で前記パケットと前記装置内ヘッダを繰り返し受け渡しながら前記パケットに対して段階的に処理を追加するパケットループ処理の実行を前記シーケンス番号を基に管理するループ制御手段を備え、
前記検索エンジンは、前記パケットループ処理が完了したパケットと検索結果を前記パケットループ処理前のパケットの受信時刻が旧いものから先に順次前記パケット処理エンジンへ送信する
ことを特徴とするパケット処理装置。
（付記３）付記２に記載のパケット処理装置において、
前記パケット処理エンジンと前記検索エンジンとの間を接続する前記バスは、前記パケットループ処理前及び前記パケットループ処理完了後のパケットと装置内ヘッダを受け渡す第１の通信リンクと、前記パケットループ処理中のパケットと装置内ヘッダを受け渡す１以上の第２の通信リンクを含み、
前記１以上の第２の通信リンクは前記パケットループ処理時の各ループ回数に対応して設けられ、
前記パケットループ処理中のパケットは、前記ループ回数に対応する第２の通信リンクを介して前記パケット処理エンジンと前記検索エンジンとの間で受け渡される
ことを特徴とするパケット処理装置。
（付記４）付記１に記載のパケット処理装置において、
前記検索エンジンは、前記検索処理部による検索結果に基づいて前記パケットと前記装置内ヘッダを出力すべき出力キューを決定し、前記出力キュー毎に前記パケットのスケジューリングを行って前記パケットと前記装置内ヘッダを前記パケット処理エンジンに転送するスケジューラを備える
ことを特徴とするパケット処理装置。
（付記５）付記１に記載のパケット処理装置において、
前記パケット処理エンジン、および、前記検索エンジンは、前記パケット処理エンジンと前記検索エンジンと間で受け渡す前記装置内ヘッダと前記パケットのデータの中の少なくとも変更のある部分についてのデータチェックを行う手段を備える、
ことを特徴とするパケット処理装置。
（付記６）付記２に記載のパケット処理装置において、
前記検索エンジンは、前記パケットループ処理前のパケットの受信時刻と、前記前記パケットループ処理が完了したパケットの検査結果情報とを前記シーケンス番号に対応付けて記憶する検索制御レコード記憶手段と、
前記シーケンス番号を基に前記検索制御レコード記憶手段から前記パケットループ処理前のパケットの受信時刻を読み出して、予め設定した処理待ち時間を経過したか否かを判定し、予め設定した前記処理待ち時間を経過した場合はさらに検索処理が完了したか否かを判定し、検索処理が完了していない場合は当該パケットを廃棄し、検索処理が完了している場合は前記検索制御レコード記憶手段から検索結果情報を読み出して装置内ヘッダに設定し、前記装置内ヘッダを付加したパケットを前記パケット処理エンジンに送信する検索結果出力手段を備える
ことを特徴とするパケット処理装置。
（付記７）パケット処理エンジンと検索エンジンとを含み、主回線を介して受信したパケットを処理するパケット処理方法に於いて、
前記パケット処理エンジンは、前記パケットに検索キーを含む装置内ヘッダを付加して前記検索エンジンに送信し、
該検索エンジンは、前記パケット処理エンジンから送信されてきた前記パケットをパケットバッファに一時的に格納し、前記装置内ヘッダに格納されている検索キーを基に検索処理した検索結果を、前記パケットバッファから読み出したパケットに付加して前記パケット処理エンジンに返送する
ことを特徴とするパケット処理方法。
（付記８）付記７に記載のパケット処理方法において、
前記検索エンジンは、前記パケット処理エンジンから受信したパケット毎にシーケンス番号を割り当て、
前記パケット処理エンジンとの間で前記パケットと前記装置内ヘッダを繰り返し受け渡しながら前記パケットに対して段階的に処理を追加するパケットループ処理の実行を前記シーケンス番号を基に管理し、
前記パケットループ処理が完了したパケットと検索結果を、前記パケットループ処理前のパケットの受信時刻が旧いものから先に順次前記パケット処理エンジンへ送信する
ことを特徴とするパケット処理方法。
（付記９）付記８に記載のパケット処理方法において、
前記検索エンジンと前記パケット処理エンジンは、前記パケットループ処理前及び前記パケットループ処理完了後のパケットと装置内ヘッダについては、前記検索エンジンと前記パケット処理エンジンの間に設けられる第１の通信リンクを介して受け渡し、
前記パケットループ処理中のパケットについては、前記検索エンジンと前記パケット処理エンジンの間に設けられ１以上の第２の通信リンクを介して受け渡す、
ことを特徴とするパケット処理方法。
（付記１０）付記９に記載のパケット処理方法において、
前記１以上の第２の通信リンクは前記パケットループ処理時の各ループ回数に対応して設けられ、
前記パケットループ処理中のパケットは、前記ループ回数に対応した通信リンクを介して前記パケット処理エンジンと前記検索エンジンとの間で受け渡す
ことを特徴とするパケット処理方法。
（付記１１）付記７に記載のパケット処理方法において、
前記検索エンジンは、検索処理の結果に基づいて前記パケットと前記装置内ヘッダを出力すべき出力キューを決定し、前記出力キュー毎に前記パケットのスケジューリングを行って前記パケットおよび前記装置内ヘッダを前記パケット処理エンジンに転送する
ことを特徴とするパケット処理方法。
（付記１２）付記７に記載のパケット処理方法において、
前記パケット処理エンジン、および、前記検索エンジンは、前記装置内ヘッダと前記パケットのデータの中の少なくとも変更のある部分についてのデータチェックを行う、
ことを特徴とするパケット処理方法。
（付記１３）付記９に記載のパケット処理方法において、
前記検索エンジンは、前記パケットループ処理前のパケットの受信時刻と、前記前記パケットループ処理が完了したパケットの検査結果情報とを前記シーケンス番号に対応付けて記憶し、
前記シーケンス番号を基に前記検索制御レコード記憶手段から前記パケットループ処理前の初期パケットの受信時刻を読み出して、予め設定した処理待ち時間を経過したか否かを判定し、予め設定した前記処理待ち時間を経過した場合はさらに検索処理が完了したか否かを判定し、検索処理が完了していない場合は当該パケットを廃棄し、検索処理が完了している場合は前記検索制御レコード記憶手段から検索結果情報を読み出して装置内ヘッダに設定し、前記装置内ヘッダを付加したパケットを前記パケット処理エンジンに送信する
ことを特徴とするパケット処理方法。
【図面の簡単な説明】
【０１７６】
【図１】本発明の第１の実施形態によるパケット処理装置の構成例である。
【図２】本発明の第１の実施形態による検索エンジンの構成例である。
【図３】本発明の第２の実施形態によるパケット処理装置の構成例である。
【図４】本発明の第２の実施形態による検索エンジンの構成例である。
【図５】本発明の第２の実施形態による検索エンジンの検索制御テーブルの構成例である。
【図６】本発明の第３の実施形態によるパケット処理装置の構成例である。
【図７】本発明の第２の実施形態による検索エンジンのループ処理時の動作フローである。
【図８】本発明の第２の実施形態による検索エンジンの検索結果出力時の動作フローである。
【図９】本発明の検索要求ブロック及び検索結果ブロックの構成例である。
【図１０】本発明の装置内ヘッダに設定される検索要求情報の構成例である。
【図１１】本発明の検索エンジンの検索処理時に使用される検索処理依頼データの構成例である。
【図１２】本発明の装置内ヘッダに設定される検索結果情報の構成例である。
【図１３】本発明の第２の実施形態による検索エンジンの処理シーケンス例（１）である。
【図１４】本発明の第２の実施形態による検索エンジンの処理シーケンス例（２）である。
【図１５】本発明の第２の実施形態による検索エンジンの処理シーケンス例（３）である。
【図１６】従来技術のパケット処理装置の構成例である。
【符号の説明】
【０１７７】
１  主回線の受信ポート  
２、３、４  通信リンク
５  主回線の送信ポート  
６  第１の通信リンク
６ａ  第１の通信リンクの入力ポート
６ｂ  第１の通信リンクの出力ポート
７−１、・・・、７−Ｎ  第２の通信リンク
７−１ａ、・・・、７−Ｎａ  第２の通信リンクの入力ポート
７−１ｂ、・・・、７−Ｎｂ  第２の通信リンクの出力ポート
１０  入力インターフェース
２０，２０ａ、２０ｂ  パケット処理エンジン
３０、３０ａ、３０ｂ  検索エンジン
３１，３１ａ、３１ｂ  入力インターフェース部
３２、３２ａ  検索処理部
３３，３３ａ  シーケンス番号管理部
３４，３４ａ  パケットバッファ管理部
３５，３５ａ  出力インターフェース部
３６  ループ制御部
３７  検索結果出力部
３８  検索制御テーブル
３８１０  検索制御レコード記憶部
３８１１  状態情報
３８１２  初期パケット受信時刻
３８１３  パケットポインタ
３８１４  パケット長
３８１５  検索結果情報
３８２０  次シーケンス番号
３８３０  現時刻ターマー
３８４０  処理待ち時間
３９、４９  パケットバッファ  
４０  トラフィックマネージャー
５０  出力インターフェース
１０００  検索要求ブロック、または、検索結果ブロック
１１００  装置内ヘッダ
１２００  パケット格納領域
２０００  検索処理依頼データ
３００  検索要求情報
３０１、４０１  データチェック情報
３０２、４０２  シーケンス番号
３０３、４０３  ループ回数
３０４、４０４  パケット種別
３０５、４０７  チェック範囲
３０６、４０８  ＶＰＮ−ＩＤ
３０７、４０６  受信ポート番号
３０８  パケット長
３０９、４１１  ユーザ定義領域
３１０，３１１、３１２、３２３  検索キーポインタ
４００  検索結果情報
４０５  送信ポート番号
４０９  ポリシングＩＤ
４１０  クラス
【図１】
0004779955.tif 000002
【図２】
0004779955.tif 000003
【図３】
0004779955.tif 000004
【図４】
0004779955.tif 000005
【図５】
0004779955.tif 000006
【図６】
0004779955.tif 000007
【図７】
0004779955.tif 000008
【図８】
0004779955.tif 000009
【図９】
0004779955.tif 000010
【図１０】
0004779955.tif 000011
【図１１】
0004779955.tif 000012
【図１２】
0004779955.tif 000013
【図１３】
0004779955.tif 000014
【図１４】
0004779955.tif 000015
【図１５】
0004779955.tif 000016
【図１６】
0004779955.tif 000017