(57)【要約】ストリームを処理するための再プログラミング可能なパケット処理システムを開示する。再プログラミング可能なデータプロセッサは、データストリームが、特定のデータパターンに一致する文字列を含むか否かを決定するようにプログラミングされる。含んでいれば、データプロセッサは指定された動作を実行する。データプロセッサは、異なるデータパターンの存在に関してパケットを検索するように、及び／又は一致する文字列が検出されると異なる動作を実行するように再プログラミングされることが可能である。再構成装置は、データパターン及び動作を指定するための入力をユーザから受信し、この入力を処理して、データプロセッサの再プログラミングに必要な構成情報を生成し、構成情報を、パケットプロセッサの再プログラムのために当該パケットプロセッサへ送信する。
2005527042.tif 000002
【特許請求の範囲】
【請求項１】
データストリームを処理するための再プログラミング可能なシステムであって、
データストリームを受信し、上記受信されたデータストリームを、プログラミング可能な論理装置（ＰＬＤ）を用いて処理する再プログラミング可能なデータプロセッサを備え、上記再プログラミング可能なデータプロセッサは、（１）再定義可能なデータパターンに一致する文字列を上記データストリームが含むか否かを決定することと、（２）上記データパターンに一致する文字列を上記データストリームが含むことが発見された場合に、再定義可能な動作を実行することとを行うようにプログラミングされ、
上記データプロセッサと通信する再構成装置であって、再定義されたデータパターン及び再定義された動作からなるグループのうちの少なくとも一方を上記ＰＬＤに再プログラミングするように動作する再構成装置を備えた再プログラミング可能なシステム。
【請求項２】
上記再定義可能な動作はデータ変更動作であり、
上記ＰＬＤは、一致した文字列を含むことが発見されたデータストリームの少なくとも一部を変更することによって上記データ変更動作を実行するようにプログラミングされる請求項１記載のシステム。
【請求項３】
上記データ変更動作は文字列置換動作であり、上記文字列置換動作は再定義可能な置換文字列を含み、
上記ＰＬＤは、上記データストリームにおける一致した文字列を上記置換文字列で置換することによって上記文字列置換動作を実行するようにプログラミングされる請求項２記載のシステム。
【請求項４】
上記ＰＬＤは、上記データストリームにおける一致した最長の文字列を上記置換文字列で置換することによって上記文字列置換動作を実行するようにプログラミングされる請求項３記載のシステム。
【請求項５】
上記データプロセッサは、上記データストリームがコンピュータネットワークから受信されるときの当該コンピュータネットワークと通信し、上記データストリームは、上記コンピュータネットワークを介して送信されるデータパケットのストリームを含む請求項３記載のシステム。
【請求項６】
上記パケットストリームにおける各パケットはペイロード部分を含み、
上記ＰＬＤは、上記受信されたパケットのうちのいずれかのペイロード部分が、一致した文字列を含むか否かを決定するようにプログラミングされる請求項５記載のシステム。
【請求項７】
上記再構成装置は、上記コンピュータネットワークを介して上記データプロセッサと通信し、さらに上記コンピュータネットワークを介して上記ＰＬＤを再プログラミングするように動作する請求項６記載のシステム。
【請求項８】
上記再構成装置は、
データパターンと置換文字列とを受信するように動作する再構成入力と、
（１）上記受信されたデータパターン及び上記受信された置換文字列に基づいて生成されるモジュールであって、上記モジュールは、上記ＰＬＤにプログラミングされているときに、そこに適用されたパケットのペイロードが、上記受信されたデータパターンに一致する文字列を含むか否かを決定し、その中に一致した文字列が発見されれば上記一致した文字列を上記受信された置換文字列で置換するように動作するモジュールを生成することと、（２）上記生成されたモジュールに基づいて、上記生成されたモジュールを上記ＰＬＤにプログラミングするように作用する構成情報を生成することとを行うように動作するコンパイラと、
上記モジュールを上記ＰＬＤにプログラミングするために、上記構成情報を上記ネットワークを介して上記データプロセッサへ伝送するように動作する送信機とを備えた請求項６記載のシステム。
【請求項９】
上記データプロセッサはさらに、上記ＰＬＤ及び上記コンピュータネットワークと通信するプログラミング装置であって、上記送信機から上記構成情報を受信し、上記受信された構成情報に従って上記ＰＬＤをプログラミングするように動作するプログラミング装置を備えた請求項８記載のシステム。
【請求項１０】
上記再構成入力はさらに、上記データパターンを正規表現フォーマットで受信するように構成された請求項９記載のシステム。
【請求項１１】
上記コンパイラはさらに、上記受信されたデータパターンを字句解析器生成器を用いて処理し、これによりパターンマッチング状態マシンの論理的表現を生成することによって上記モジュールを部分的に生成するように構成され、上記パターンマッチング状態マシンは、そこに適用されたデータが、上記受信されたデータパターンに一致する文字列を含むか否かを決定するように動作し、
上記モジュールは上記パターンマッチング状態マシンの表現を含む請求項１０記載のシステム。
【請求項１２】
上記字句解析器生成器はＪＬｅｘである請求項１１記載のシステム。
【請求項１３】
上記モジュールは、上記パケットストリームの並列処理のために、複数の上記パターンマッチング状態マシンの表現を含む請求項１１記載のシステム。
【請求項１４】
上記コンパイラはさらに、上記受信された置換文字列を処理してこれにより文字列置換マシンの論理的表現を生成することによって上記モジュールを部分的に生成するように構成され、上記文字列置換マシンは、データ内に発見された一致した文字列を上記受信された置換文字列で置換するように動作し、
上記モジュールは上記文字列置換マシンの表現を含む請求項１１記載のシステム。
【請求項１５】
上記コンパイラはさらに、上記パターンマッチング状態マシンの表現及び上記文字列置換マシンの表現を、所定のコントローラの論理的表現に対して調整することによって上記モジュールを部分的に生成するように構成され、上記コントローラの表現は、（１）上記パターンマッチング状態マシンの表現と通信して、一致した文字列の開始位置及び終了位置を決定することと、（２）上記決定された開始及び終了位置を処理して上記文字列置換マシンの表現を制御することとを行うように動作し、
上記モジュールは上記コントローラの表現を含む請求項１４記載のシステム。
【請求項１６】
上記ＰＬＤはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である請求項４記載のシステム。
【請求項１７】
上記データパターンは少なくとも１つのワードを第１の言語で含み、
上記置換文字列は、上記第１の言語の上記少なくとも１つのワードの、第２の言語での訳語を備えた請求項４記載のシステム。
【請求項１８】
上記データパターンは少なくとも部分的に卑俗なデータを含み、
上記置換文字列は、上記卑俗なデータを含まないデータ文字列を備えた請求項４記載のシステム。
【請求項１９】
上記データパターンは暗号化されたデータ文字列を含み、
上記置換文字列は、上記暗号化されたデータ文字列の復号化されたものに対応するデータ文字列を備えた請求項４記載のシステム。
【請求項２０】
上記データパターンはデータ文字列を含み、
上記置換文字列は上記データ文字列の暗号化されたものを備えた請求項４記載のシステム。
【請求項２１】
上記データパターンはコンピュータウイルスの少なくとも一部を含み、
上記置換文字列は、コンピュータウイルスでないデータ文字列を備えた請求項４記載のシステム。
【請求項２２】
上記文字列置換動作は後退代入動作である請求項３記載のシステム。
【請求項２３】
上記データプロセッサは、上記データストリームがコンピュータネットワークから受信されるときの当該コンピュータネットワークと通信し、上記データストリームは、上記コンピュータネットワークを介して送信される複数のデータパケットにてなるストリームを備え、
上記再定義可能な動作はパケット廃棄動作であり、
上記ＰＬＤは、一致した文字列を含むことが発見されたパケットを廃棄することによって上記パケット廃棄動作を実行するようにプログラミングされる請求項３記載のシステム。
【請求項２４】
上記再定義可能な動作は通知動作であり、
上記ＰＬＤは、関心が持たれた装置に通知信号を送ることによって上記通知動作を実行するようにプログラミングされ、上記通知信号は、上記データストリームにおける一致した文字列の存在を識別するように動作する請求項１記載のシステム。
【請求項２５】
上記データプロセッサは、上記データストリームがコンピュータネットワークから受信されるときの当該コンピュータネットワークと通信し、上記データストリームは、上記コンピュータネットワークを介して送信される複数のデータパケットにてなるストリームを備え、
上記通知信号は、関心が持たれた相手先装置宛の送信のためにアドレス指定された通知パケットであり、
上記通知パケットは、上記一致した文字列を含むパケットのコピーを含む請求項２４記載のシステム。
【請求項２６】
上記再定義可能な動作はａｗｋ動作であり、
上記ＰＬＤは、一致した文字列が上記データストリーム内に発見されるときに上記ａｗｋ動作を実行するようにプログラミングされる請求項１記載のシステム。
【請求項２７】
上記データパターンは、画像ファイル、オーディオファイル、ビデオファイル、オーディオ／ビデオファイル、ソフトウェア、ウイルスで汚染されたファイル、テキストファイル、及び電子的な出版物のファイルからなるグループのうちの少なくとも１つの少なくとも一部を含む請求項１記載のシステム。
【請求項２８】
上記データパターンは、著作権で保護された作品の少なくとも一部を含む請求項１記載のシステム。
【請求項２９】
上記データパターンは、企業秘密の少なくとも一部を含む請求項１記載のシステム。
【請求項３０】
上記データパターンは、犯罪の謀議を示すデータ文字列を含む請求項１記載のシステム。
【請求項３１】
データストリームを処理する方法であって、
プログラミング可能な論理装置（ＰＬＤ）を、（１）そこに適用されたデータストリームが、所定のデータパターンに一致する文字列を含むか否かを決定することと、（２）一致した文字列を上記データストリームが含むことが発見されれば応答動作を実行することとを行うようにプログラミングすることと、
上記プログラミングされたＰＬＤを用いてデータストリームを処理し、（１）上記データパターンに一致する文字列を上記データストリームが含むか否かを決定し、かつ（２）一致した文字列を上記データストリームが含むことが発見されれば上記応答動作を実行することと、
異なるデータパターン及び異なる動作からなるグループのうちの少なくとも一方によって、上記プログラミングするステップを反復することとを含む方法。
【請求項３２】
上記プログラミングするステップは、
データパターンを受信することと、
一致した文字列を上記データストリームが含むことが発見されたときに実行されるべき動作を指定する動作コマンドを受信することと、
上記受信されたデータパターン及び上記受信された動作コマンドに基づいて生成されかつモジュールを定義する構成情報を生成することとを含み、上記モジュールは、上記ＰＬＤにプログラミングされているときに、（１）そこに適用されたデータストリームが、上記受信されたデータパターンに一致する文字列を含むか否かを決定し、かつ（２）一致した文字列を上記データストリームが含むことが発見されれば上記応答動作を実行するように動作し、
上記ＰＬＤに上記構成情報をプログラミングすることを含む請求項３１記載の方法。
【請求項３３】
上記動作コマンドを受信するステップは、データ変更動作を指定する動作コマンドを受信することを含み、上記データ変更動作は、一致した文字列をデータストリームが含むことが発見されたときにそのデータストリームがどのように変更されるべきかを識別する請求項３２記載の方法。
【請求項３４】
上記動作コマンドを受信するステップは、文字列置換動作を指定する動作コマンドを受信することを含み、上記文字列置換動作は、一致した文字列に代えてデータストリームへ挿入されるべき置換文字列を識別する請求項３３記載の方法。
【請求項３５】
上記動作コマンドを受信するステップは、通知動作を指定する動作コマンドを受信することを含み、上記通知動作は、上記データストリーム内に一致した文字列が発見されるときに送信されるべき通知信号を指定する請求項３２記載の方法。
【請求項３６】
上記データストリームはコンピュータネットワークを介して送信される複数のパケットにてなるストリームであり、各データパケットはペイロード部分を含み、
上記処理するステップは、
複数のデータパケットにてなるストリームを受信することと、
受信された各データパケットのペイロード部分を識別することと、
上記受信された各データパケットのペイロード部分を上記プログラミングされたＰＬＤを用いて処理し、（１）上記受信されたデータパケットのうちのいずれかのペイロード部分が、上記データパターンに一致する文字列を含むか否かを決定し、かつ（２）一致した文字列を上記ペイロード部分が含むことが発見されれば上記応答動作を実行することとを含む請求項３２記載の方法。
【請求項３７】
上記ＰＬＤに上記構成情報をプログラミングするステップは、上記構成情報を上記コンピュータネットワークを介して上記ＰＬＤへ送信することを含む請求項３６記載の方法。
【請求項３８】
データストリームを受信しかつ処理して上記データストリームが所定のデータパターンを含むか否かを決定し、含んでいれば応答動作を実行するように動作するデータ処理モジュールを、プログラミング可能な論理装置（ＰＬＤ）にプログラミングするように作用する構成情報を生成するための装置であって、
ユーザからデータパターン及び動作コマンドを受信するように動作する入力を備え、上記動作コマンドは、上記データパターンに一致する文字列を上記データストリームが含むことが発見されたときに実行されるべき動作を指定し、
上記受信されたデータパターン及び上記受信された変更コマンドに基づいて構成情報を生成するように動作するコンパイラを備え、上記構成情報はデータ処理モジュールを定義し、上記データ処理モジュールは、上記ＰＬＤにプログラミングされているときに、（１）そこに適用されたデータストリームが、上記受信されたデータパターンに一致する文字列を含むか否かを決定し、かつ（２）一致した文字列を上記データストリームが含むことが発見されれば上記動作を実行するように動作し、上記構成情報は、上記ＰＬＤに上記データ処理モジュールをプログラミングするように作用する装置。
【請求項３９】
上記動作コマンドは変更コマンドであり、上記変更コマンドは、一致した文字列を上記データストリームが含むことが発見されたときに上記データストリームに対して実行されるべき変更動作を指定し、
上記コンパイラはまた、上記構成情報によって定義される上記モジュールが上記ＰＬＤへプログラミングされるときに、上記モジュールがまた、一致した文字列を上記データストリームが含むことが発見されれば上記データストリームに対して上記変更動作を実行して動作するように、上記変更コマンドに基づいて上記構成情報を生成するように動作する請求項３８記載の装置。
【請求項４０】
上記コンパイラはまた、上記受信されたデータパターンを字句解析器生成器を用いて処理することによりパターンマッチング状態マシンの論理的表現を生成するように動作し、上記パターンマッチング状態マシンは、そこに適用されたデータストリームが、上記受信されたデータパターンに一致する文字列を含むか否かを決定するように動作し、上記パターンマッチング状態マシンの表現は部分的に上記モジュールを定義する請求項３９記載の装置。
【請求項４１】
上記変更コマンドによって指定される上記変更動作は文字列置換動作であり、
上記変更コマンドは置換文字列を含み、
上記コンパイラはまた、上記受信された変更コマンドを処理することにより、上記データストリーム内の一致した文字列を上記置換文字列で置換するように動作する文字列置換マシンの論理的表現を生成するように動作し、上記文字列置換マシンの表現は部分的に上記モジュールを定義する請求項４０記載の装置。
【請求項４２】
上記コンパイラはまた、上記パターンマッチング状態マシンの表現が少なくとも１つの決定論的有限状態オートマトン（ＤＦＡ）を備えるように、上記受信されたデータパターンを上記字句解析器生成器を用いて処理して動作する請求項４１記載の装置。
【請求項４３】
上記データストリームは、コンピュータネットワークを介して送信される複数のデータパケットを備えたパケットストリームであり、
上記装置はさらに、上記コンパイラと上記コンピュータネットワークとのインタフェースをとる送信機を備え、上記送信機は、上記コンパイラから上記構成情報を受信し、かつ上記ＰＬＤと通信中のプログラミング装置に上記構成情報を上記ネットワークを介して送信するように動作し、上記プログラミング装置は、それにより定義された上記モジュールを上記ＰＬＤにプログラミングするように動作する請求項４２記載の装置。
【請求項４４】
上記パケットストリームにおける各パケットはペイロード部分を含み、
上記コンパイラはさらに、上記構成情報により定義される上記モジュールが上記ＰＬＤにプログラミングされるときに、上記モジュールがまた、上記パケットストリームを構成する上記パケットのペイロードのうちのいずれかが一致した文字列を含むか否かを決定して動作するように、上記構成情報を生成して動作する請求項４３記載の装置。
【請求項４５】
上記入力はまた、上記データパターンを正規表現フォーマットで受信するように動作する請求項４４記載の装置。
【請求項４６】
上記入力はまた、複数のデータパターンと、対応するデータパターンをそれぞれ有する複数の上記変更コマンドとをユーザから受信するように動作し、
上記コンパイラはまた、上記構成情報によって定義される上記データ処理モジュールがまた各データパターン及び対応する変更コマンドに関して上記一致の決定と上記文字列置換動作とを実行して動作するように、上記構成情報を生成して動作する請求項４５記載の装置。
【請求項４７】
プログラミング可能な論理装置（ＰＬＤ）をプログラミングしてデータストリームを処理する方法であって、
所定のデータパターンを受信することと、
上記データパターンに対応する変更コマンドを受信することを含み、上記動作コマンドは、上記データパターンに一致する文字列を上記データストリームが含むことが発見されれたときに実行されるべき動作を指定し、
上記受信されたデータパターン及び上記受信された変更コマンドに基づいて、上記ＰＬＤにデータ処理モジュールをプログラミングするように作用する構成情報を生成することを含み、上記データ処理モジュールは、上記ＰＬＤにプログラミングされているときに、（１）そこに適用されたデータストリームが、上記データパターンに一致する文字列を含むか否かを決定し、かつ（２）一致した文字列を上記データストリームが含むことが発見されれば上記動作コマンドによって指定された上記動作を実行するように動作し、
上記ＰＬＤと通信するプログラミング装置に上記構成情報を伝送することを含み、上記プログラミング装置は上記ＰＬＤに上記構成情報をプログラミングするように動作する方法。
【請求項４８】
上記動作コマンドは、一致した文字列を含むデータストリームに対して実行されるべき変更動作を指定する変更コマンドであり、
上記生成するステップは、上記構成情報によって定義される上記モジュールがまた、一致した文字列を上記データストリームが含むことが発見されたときに上記データストリームに対して上記変更動作を実行して動作するように、上記構成情報を生成することを含む請求項４７記載の方法。
【請求項４９】
上記変更動作は文字列置換動作であり、
上記変更コマンドは置換文字列を含み、
上記生成するステップは、上記構成情報によって定義される上記モジュールがまた、上記データストリーム内の一致した文字列を上記置換文字列で置換することにより上記文字列置換動作を実行して動作するように、上記構成情報を生成することを含む請求項４８記載の方法。
【請求項５０】
上記生成するステップは、上記データパターンを字句解析器生成器を用いて処理することにより、それに基づいてパターンマッチング状態マシンの論理的表現を生成することを含み、上記パターンマッチング状態マシンは上記モジュールを部分的に定義し、上記パターンマッチング状態マシンは、そこに適用されたデータストリームが、上記データパターンに一致する文字列を含むか否かを決定するように動作する請求項４９記載の方法。
【請求項５１】
上記生成するステップは、上記受信された変更コマンドに基づいて文字列置換マシンの論理的表現を生成することを含み、上記文字列置換マシンは上記モジュールを部分的に定義し、上記文字列置換マシンは、上記データストリーム内の一致した文字列を上記置換文字列で置換するように動作する請求項５０記載の方法。
【請求項５２】
上記データストリームは、コンピュータネットワークを介して送信される複数のデータパケットを備えたパケットストリームであり、
上記伝送するステップは、上記構成情報を上記ネットワークを介して上記プログラミング装置へ伝送することを含む請求項５１記載の方法。
【請求項５３】
上記データパケットの各々はペイロード部分を含み、
上記生成するステップは、上記構成情報により定義される上記モジュールが上記ＰＬＤにプログラミングされるとき、上記モジュールがまた、上記パケットストリームを構成する上記パケットのペイロード部分のうちのいずれかが一致した文字列を含むか否かを決定して動作するように、上記構成情報を生成することを含む請求項５２記載の方法。
【請求項５４】
上記データパターンを受信するステップは、上記データパターンを正規表現フォーマットで受信することを含む請求項５３記載の方法。
【請求項５５】
上記データパターンを受信するステップは、複数のデータパターンを受信することを含み、
上記変更コマンドを受信するステップは、複数の上記変更コマンドを受信することを含み、各変更コマンドはデータパターンに対応し、
上記生成するステップは、上記構成情報により定義される上記モジュールがまた各データパターン及び対応する変更コマンドに対して（１）上記一致の決定を実行しかつ（２）上記文字列置換動作を実行して動作するように、上記構成情報を生成することを含む請求項５４記載の方法。
【請求項５６】
データストリームを処理するための装置であって、
データストリームを受信することと、複数の再定義可能な論理構造を用いて上記データストリームを直列に処理することとを行うようにプログラミングされた、プログラミング可能な論理装置（ＰＬＤ）を備え、各論理構造は、対応する再定義可能なデータパターンに対して調整され、各論理構造は、上記処理されるデータストリーム内に、その論理構造の対応するデータパターンに一致する文字列が存在するか否かを決定するように動作する装置。
【請求項５７】
各論理構造はまた、対応する再定義可能な動作に対して調整され、各論理構造はさらに、その論理構造の対応するデータパターンに一致する文字列を上記処理されるデータストリームが含むことが発見されたとき、その論理構造の対応する再定義可能な動作を実行するように動作する請求項５６記載の装置。
【請求項５８】
各再定義可能な動作は文字列置換動作であり、各文字列置換動作は置換文字列を含み、
各論理構造はさらに、上記処理されるデータストリームにおいて発見された文字列であって、その論理構造の対応するデータパターンに一致する文字列を、その論理構造の対応する置換文字列で置換するように動作する請求項５７記載の装置。
【請求項５９】
上記ＰＬＤは、コンピュータネットワークと通信するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）であり、上記データストリームは、上記コンピュータネットワークを介して送信される複数のデータパケットにてなるストリームを含む請求項５８記載の装置。
【請求項６０】
データストリームを処理する装置であって、
データストリームを受信することと、複数のパターンマッチング状態マシンを用いて上記受信されたデータストリームを並列に処理することとを行うようにプログラミングされた、プログラミング可能な論理装置（ＰＬＤ）を備え、上記複数のパターンマッチング状態マシンのうちの各パターンマッチング状態マシンは所定のデータパターンに対して調整され、各パターンマッチング状態マシンは、それが調整される対象となるデータパターンに一致する文字列を上記データストリームが含むか否かを決定するように動作する装置。
【請求項６１】
上記複数のパターンマッチング状態マシンのうちの各パターンマッチング状態マシンは、同じデータパターンに対して調整される請求項６０記載の装置。
【請求項６２】
上記データストリームは複数のデータバイトにてなるストリームを含み、
上記ＰＬＤにはまた、各パターンマッチング状態マシンが異なるバイトで開始される上記データストリームを受信するように上記データストリームを上記複数の並列のパターンマッチング状態マシンへ供給して動作するコントローラがプログラミングされる請求項６１記載の装置。
【請求項６３】
上記コントローラはまた、上記複数の並列のパターンマッチング状態マシンと通信して、上記データストリームにおける文字列であって、上記データパターンに一致した最長の文字列を識別するように動作する請求項６２記載の装置。
【請求項６４】
上記複数のパターンマッチング状態マシンのうちの各パターンマッチング状態マシンは、異なるデータパターンに対して調整される請求項６０記載の装置。
【請求項６５】
データストリームを処理するための再プログラミング可能なシステムであって、
データストリームを受信して、プログラミング可能な論理装置（ＰＬＤ）を用いて上記受信されたデータストリームを処理する、再プログラミング可能なデータプロセッサを備え、上記プログラミング可能な論理装置（ＰＬＤ）には、再定義可能なデータパターンに一致する文字列を上記データストリームが含むか否かを決定する少なくとも１つの決定論的有限状態オートマトン（ＤＦＡ）がプログラミングされ、
上記データプロセッサと通信し、異なるデータパターンに一致する文字列をデータストリームが含むか否かを決定する異なるＤＦＡを上記ＰＬＤに再プログラミングするように動作する再構成装置を備えた再プログラミング可能なシステム。
【請求項６６】
コンピュータネットワークを介して送信される複数のデータパケットにてなるストリームを処理するためのネットワークプロセッサであって、
上記コンピュータネットワークからデータを受信し、上記データを処理してそれに基づいて複数のデータパケットにてなるストリームを生成するように動作するプロトコルラッパー装置を備え、上記パケットストリームは複数のワードにてなるストリームを含み、各ワードは複数のバイトを含み、
上記プロトコルラッパー装置から上記パケットストリームを受信し、上記パケットストリームを構成する上記複数のパケットのいずれかが所定のデータパターンに一致する文字列を含むか否かを検出するように動作するマッチングパスと、
上記マッチングパスと通信し、上記マッチングパスによって検出された各一致した文字列の開始バイト位置と終了バイト位置とを決定するように動作するコントローラと、
上記コントローラと通信し、上記プロトコルラッパー装置から上記パケットストリームを受信し、上記コントローラによって決定された各一致した文字列の開始バイト位置及び終了バイト位置のそれぞれを処理して（１）一致した文字列に対応するものではない上記パケットストリームの各バイトを出力しかつ（２）一致した文字列に対応する上記パケットストリームのバイトを置換文字列で置換するように動作するデータパスとを備え、
上記マッチングパスと、上記コントローラと、上記データパスとは、プログラミング可能な論理装置（ＰＬＤ）上に実装されるネットワークプロセッサ。
【請求項６７】
上記プロトコルラッパー装置もまた上記ＰＬＤ上に実装される請求項６６記載のネットワークプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワークを介して送信されるパケット等のデータの高速処理に関する。特に、本発明は、パケットのペイロードを処理して、（１）これらのペイロード内に再定義可能なデータパターンに一致する文字列が存在するか否かを検出し、（２）それが検出された時点で再定義可能な動作を実行することに関する。
【背景技術】
【０００２】
複数のコンピュータネットワークを介して伝送される複数のパケットのコンテンツをモニタリングする能力を保有することは、非常に望ましい。動機が、著作権で保護されたオーディオ、フィルム／ビデオ、ソフトウェア、出版物及び書籍のコンテンツ等の素材を含むデータファイルの伝送を識別すること、会社内部のコンピュータシステム内の機密データを保護すること、コンピュータウイルスを検出して除去すること、（犯罪を計画している２名の間での電子メールトラフィックのような）犯罪の謀議の一部であるかもしれないパケット伝送を識別して位置決めすること、又は標的とされるエンティティのデータ伝送をモニタリングすることのいずれであるにしても、指定されたデータパターンに一致する文字列（又はデータ列）を求めてパケットのペイロードを検索する能力は、今日の電子情報時代において強力なツールになる。さらに、データストリームを変更する能力は、システムに対して、とりわけ、データをフィルタリングすること、データのフォーマットを変更すること、言語間で翻訳を実行すること、情報を抽出すること、データを挿入すること、又は他者にコンテンツに関連する通知を行うことを許容する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
文字列マッチング及びパターンマッチングは、広範囲にわたる研究の主題となっている。かつては、ソフトウェアに基づいた文字列マッチング技術を使用して、パケットのペイロードが所定のデータパターンを含むか否かを決定してきた。しかしながら、このようなソフトウェアに基づいた技術は、ソフトウェアで実行することの帰結としてパケット処理速度が本質的に遅いために、コンピュータネットワークにおいて広範囲に使用するには実際的でない。
【０００４】
例えば、ヒレ（Hile）ほかに発行された米国特許第５，３１９，７７６号（これの特許明細書の開示内容は参照によりここに含まれる。）は、ソース媒体と宛先媒体との間で通過中のデータが、有限状態マシンを用いて試験されるシステムであって、上記有限状態マシンが、既知のコンピュータウイルスのシグニチャ（signature）を表す任意の文字列をそのデータが含むか否かを決定する能力を有するシステムを開示している。しかしながら、ヒレの有限状態マシンはソフトウェアで実装されるので、このヒレのシステムは低速である。従って、ヒレのシステムは、データレートが２．５ギガビット／秒に近づくＯＣ−４８等の高速回線のレートを処理する能力を有するネットワーク装置として使用するには実際的でない。さらに、ソフトウェアに基づいた技術は、ハードウェアに基づいた技術よりも伝統的かつ本質的に数桁の大きさで遅い。
【０００５】
ソフトウェアに基づいたもう１つの文字列マッチング技術は、クレイトン（Clayton）ほかに発行された米国特許第５，１０１，４２４号（これの特許明細書の開示内容は参照によりここに含まれる。）において見うけられる。クレイトンは、電話交換機からのテキストストリームをモニタリングするための、ソフトウェアに基づいたＡＷＫプロセッサを開示している。クレイトンでは、電話交換機を通過するデータストリームがテキストファイルにロードされる。クレイトンのシステムは、次に、（１）テキストファイルのコンテンツを処理して、その中に特定の文字列が発見されるか否かを決定し、（２）一致を発見した時点で、指定された動作を実行する。上述のヒレのシステムの場合と同様に、このソフトウェアに基づいた技術は、高速ネットワーク装置として使用するには遅すぎて実用的でない。
【０００６】
さらに、ネットワーク上のコンピュータが攻撃を受けているか否かを示すインターネットパケットをヘッダとペイロードとの組み合わせに関してスキャンするための、当該技術においてＳＮＯＲＴ（スノート）として知られたソフトウェアツールが開発されている。このソフトウェアプログラムは、ネットワークインタフェースに着信するパケットをスキャンする、オープンソースのネットワーク侵入検知システムである。通常、パケットはイーサネット（登録商標）のような媒体上で着信する。プログラムは、各パケットを、複数のルールにてなるリストにおいて指定されるデータと比較する。ヘッダのフィールド、又はペイロードの一部のフィールドが所定のルールに一致すれば、プログラムはそれに応答したタスクを実行する、例えば、コンソール上へメッセージを印字したり、通知メッセージを送信したり、又はイベントのログをデータベースに記録したりする。ＳＮＯＲＴに関する詳細は、ＳＮＯＲＴのホームページhttp://www.snort.org/に記載されている。上述したシステムの場合と同様に、ＳＮＯＲＴには、ソフトウェアで実装されていることに起因して、そのマッチングタスクと、その応答タスクとの両方に関して処理速度が遅いという欠点がある。
【０００７】
パケットのペイロードが処理される速度を向上させるための努力においては、特定の文字列に関してパケットのペイロードをスキャンする、専用の特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）を備えたシステムが設計されている。ペイロードをスキャンすることをＡＳＩＣ上に実装したことは、ソフトウェアに基づいた技術に比べて速度を大幅に向上させたが、このようなＡＳＩＣに基づいたシステムには、柔軟性に関して多大な問題点がある。すなわち、ＡＳＩＣに基づいたペイロード処理装置は、検索文字列の変更に際して、その新たな検索文字列に合わせて調整された新たなＡＳＩＣの設計（及び以前のＡＳＩＣの新たなＡＳＩＣへの交換）を必要とするので、パケットが比較される対象となる検索文字列を変更することができない。すなわち、文字列のマッチングを実行するチップは、検索文字列が変更される毎に交換されなければならなくなる。このような再設計及び交換の努力は、このようなＡＳＩＣに基づいたシステムが広範囲に使用される場合には特に、途方もなく時間がかかり、かつコストがかかる。
【０００８】
ソフトウェアに基づいたパターンマッチングの処理速度の遅さと、ＡＳＩＣに基づいたパターンマッチングに係る柔軟性の欠如とを回避するために、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）等の再プログラミング可能なハードウェアを使用してパターンマッチングが実行されている。このようなＦＰＧＡに基づいた技術は、アール・シドゥ及びブイ・プラサナ，「ＦＰＧＡを用いた高速正規表現マッチング」，ＩＥＥＥフィールドプログラマブルカスタムコンピューティングマシンについてのシンポジウム（ＦＣＣＭ  ２００１），２００１年４月（Sidhu, R. and Prasanna, V., "Fast Regular Expression Matching using FPGAs", IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM 2001), April 2001）と、アール・シドゥほか，「自己再構成を用いたマルチコンテキストＦＰＧＡ上での文字列マッチング」，ＦＰＧＡ‘９９：フィールドプログラマブルゲートアレイに関する１９９９年ＡＣＭ／ＳＩＧＤＡ第７回国際シンポジウム講演論文集，２１７−２２６ページ，１９９９年２月（Sidhu, R. et al., "String Matching on Multicontext FPGAs Using Self-Reconfiguration", FPGA '99,: Proceedings of the 1999 ACM/SIGDA Seventh International Symposium on Field Programmable Gate Arrays, pp. 217-226, February 1999）とに記載され、これらの開示内容の全体は参照によりここに含まれている。
【０００９】
シドゥの各論文は、ユーザによって指定されたデータパターンを処理して複数の非決定性有限状態オートマトン（ＮＦＡ）を生成する技術であって、これらの非決定論的有限状態オートマトン（ＮＦＡ）は、あるＦＰＧＡ内にプログラミングされているときに、そこに適用されたデータが所定のデータパターンに一致する文字列を含むか否かを決定するように動作可能であるという技術を開示している。しかしながらシドゥは、データにおいて一致する文字列が発見された場合にデータ変更等の指定された動作を実行するために、このような装置がまたどのようにしてプログラミングされることが可能であるかという問題を取り扱うことに失敗している。従ってシドゥの技術は、再定義可能なデータパターンに関するパターンマッチングを実行するためにＦＰＧＡを用いることで、ハードウェアの実装による高速性と、ＦＰＧＡの再プログラミング可能という態様によるデータパターンを再定義する際の柔軟性とを提供するが、シドゥの技術は、一致する文字列を検出するだけでなく、一致する文字列を検出した時点で指定された動作をさらに実行するという装置に対する、当該技術における必要性を満たすものではない。
【００１０】
さらに、シドゥの技術は、複数のデータパターンのうちのいずれかの存在に関してデータストリームをスキャンする能力を有する（Ｐｉをデータパターンとしてデータストリーム内にＰ１又はＰ２又は…又はＰｎが発見されるときに、一致が発見される）ものの、シドゥの技術は、どの（複数の）データパターンがデータストリームにおける所定の文字列に一致したかを識別することも、データストリームにおけるどの（複数の）文字列がデータパターンのうちのいずれかに一致したかを識別することもできない。
【００１１】
本発明者らは、既存のＦＰＧＡに基づいたパターンマッチング技術の能力に満足せず、所定のデータパターンに一致する文字列をパケットのペイロードが含むか否かを高速かつ柔軟性のある方法で決定できるだけでなく、一致した文字列がパケットのペイロード内で発見されたときに複数の指定された動作を実行できるパケット処理システムを設計しようと試みている。
【００１２】
このようなシステムを設計しようとする本発明者らの１人による初期のある試みを、ここでは「ハローワールドアプリケーション（Hello World Application）」と呼ぶ。ジョン・ロックウッド及びデイビッド・リム，「ハローワールド：フィールドプログラマブルポートエクステンダ（ＦＰＸ）のための簡単なアプリケーション」，ワシントン・ユニバーシティ技術報告ＷＵＣＳ−００−１２，２０００年７月１１日（Lockwood, John and Lim, David, Hello, World: A Simple Application for the Field Programmable Port Extender (FPX), Washington University Tech Report WUCS-00-12, July 11, 2000）を参照されたい（これの開示内容は参照によりここに含まれる。）。このハローワールドアプリケーションでは、ワシントン・ユニバーシティのフィールドプログラマブルポートエクステンダ（ＦＰＸ）として知られた、パケット処理を実行するための再プログラミング可能なハードウェアを用いたプラットフォーム（図１０を参照）に対して、以下のように設計された状態マシン及びワードカウンタがプログラミングされた。すなわち、（１）ワード「０＊＊＊」（ここで、各＊は空白を表す）が後続するワード「ＨＥＬＬ」からなる文字列が、パケットのペイロードの最初の２個のワードに存在した場合を識別し、（２）その文字列がパケットのペイロードの最初の２個のワードとして発見されたとき、ワード「０＊＊＊」をワード「０＊ＷＯ」で置換し、かつワード「ＲＬＤ．」及び「＊＊＊＊」をそのパケットのペイロードの次の２個のワードとして添加する。ＦＰＸによって使用される再プログラミング可能なハードウェアは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）であった。このようにハローワールドアプリケーションは、ペイロード内に「ＨＥＬＬＯ」を有するパケットを、「ＨＥＬＬＯ」を「ＨＥＬＬＯ  ＷＯＲＬＤ」で置換することによって変更するように動作した。
【００１３】
ハローワールドアプリケーションの首尾よい動作は、正確なマッチング及び文字列の置換を実行する能力のある回路の再プログラミング可能なハードウェアへの実装が実現可能であるということを本発明者らに示したが、ハローワールドアプリケーションは、このアプリケーションの再プログラミング可能という態様の利点を十分に活用できた装置を伴うことがなかった。すなわち、ハローワールドアプリケーションを実行するようにプログラミングされたＦＰＧＡは潜在的には再プログラミング可能であるが、「ＨＥＬＬＯ」以外の検索文字列に関してパケットをスキャンしたり、又は一致した文字列を「ＨＥＬＬＯ  ＷＯＲＬＤ」以外の置換文字列で置換したりするように、ＦＰＧＡが自動化されかつ効率的な方法で再プログラミングされることを可能にする技術は開発されていなかった。本発明は、再定義可能な異なる文字列に関してパケットをスキャンするように、また一致した文字列を含むパケットに対して再定義可能な異なる動作を実行するようにパケットプロセッサを再プログラミングするための能率化された処理に取り組むものである。この目的に沿って、本発明は、拡張されたパターンマッチング能力と、一致した文字列の検出時には指定された動作を実行する能力とを有する、再プログラミング可能なハードウェアに基づいたパケットプロセッサを生成するために、正規表現及びａｗｋ機能を利用する。
【００１４】
正規表現は、条件付き文字列を定義するための公知のツールである。ある正規表現は、いくつかの異なる文字列に一致する可能性がある。あるパターンの定義に様々な正規表現演算子を組み込むことによって、このようなパターン定義は複数の異なる文字列を包含することができる。例えば、正規表現演算子「．＊」は、「任意個数の任意の文字」を意味する。従って、正規表現「ｃ．＊ｔ」は、「ｃａｔ」、「ｃｏａｔ」、「ｃｈｅｖｒｏｌｅｔ」及び「ｃｏｌｄ  ｉｓ  ｔｈｅ  ｏｐｐｏｓｉｔｅ  ｏｆ  ｈｏｔ」等の文字列を包含するデータパターンを定義する。正規表現演算子のもう１つの例は「＊」であり、これは「０個又はそれよりも多くの先行する表現」を意味する。従って、正規表現「ａ＊ｂ」は、「ａｂ」、「ａａｂ」及び「ａａａｂ」等の文字列を包含するが、「ａｃｂ」又は「ａａｃｂ」等の文字列は包含しないデータパターンを定義する。さらに、正規表現「（ａｂ）＊ｃ」は、「ａｂｃ」、「ａｂａｂｃ」、「ａｂａｂａｂｃ」等の文字列を含むが「ａｂａｃ」又は「ａｂｄｃ」等の文字列を包含しない。またさらに、正規表現演算子は、パターンを定義する際の付加的な柔軟性のために組み合わされることも可能である。例えば正規表現「（ａｂ）＊ｃ．＊ｚ」は、アルファベット「ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ」、「ａｂａｂｃｚ」、「ａｂａｂｃｑｓｒｚ」及び「ａｂｃｚ」等の文字列を包含し、「ａｂａｃｚ」、「ａｂａｂｃ」又は「ａｂａｂａｃｘｖｈｇｆｊｚ」等の文字列を包含しない。
【００１５】
正規表現は当該技術において公知であるので、可能なすべての正規表現演算子（例えば、ＯＲ演算子「│」というものも存在するが、「（ａ│ｂ）」の場合、これは「ａ」又は「ｂ」を有する任意の文字列を意味する）や、正規表現演算子の可能なすべての組み合わせを列挙する必要はない。上述した背景技術についての記載から理解されるべきことは、正規表現が、関心が持たれた文字列を包含するデータパターンを定義するための強力なツールを本発明のユーザに提供するということにある。
【００１６】
さらに、ａｗｋは公知のパターンマッチングプログラムである。ａｗｋは、特定のパターンの出現に関してデータを検索し、指定された動作をそのデータに対して実行するために広く使用されている。正規表現は、データが比較される対象となるパターンを定義するために使用可能である。正規表現によって定義されたパターンによって包含される文字列が位置決めされると、ａｗｋは、指定された様々な動作がデータに対して実行されることを可能にする。指定された動作の例には、直線的な（簡単な）代入（置換）、後退代入、保護された代入、及びレコード分離が含まれる。これらの例は単なる例示であり、データを処理するためにａｗｋにおいて利用可能である全範囲にわたる動作を包含するものではない。
【００１７】
ハローワールドアプリケーションのさらなる改善として、本発明は、複数の異なる検索文字列を包含する検索パターンを柔軟に定義すること、及びパケットに対してａｗｋのような様々な変更動作を実行することの能力をユーザらに提供する。本発明の再プログラミング可能なハードウェアにはこれらの特徴機能が組み込まれ、今までは知られることのなかった柔軟性と速度との組み合わせを有するパケットプロセッサが生成される。
【００１８】
従って、ここでは、データストリームのための再プログラミング可能なデータ処理システムを開示する。
【課題を解決するための手段】
【００１９】
本システムの１つの構成要素は、データストリームを受信し、プログラミング可能な論理装置（programmable logic device：ＰＬＤ）によりそのデータストリームを処理するための再プログラミング可能なデータプロセッサを備え、上記プログラミング可能な論理装置（ＰＬＤ）には、（１）再定義可能なデータパターンに一致する文字列がデータストリーム内に存在するか否かを決定し、（２）このような一致した文字列が発見された場合に再定義可能な動作を実行するように動作可能であるデータ処理モジュールがプログラミングされている。データパターンは、正規表現によって定義されることが可能であり、よって複数の異なる文字列を包含することが可能である。さらに、データプロセッサによって処理されるデータストリームは、コンピュータネットワークを介して伝送されるデータパケットのストリームであってもよく、この場合、データプロセッサはパケットプロセッサであり、データ処理モジュールはパケット処理モジュールである。また、このようなパケット処理モジュールは、受信されたパケットのペイロードが、データパターンに一致する文字列を含むか否かを決定するように動作することも可能である。ＰＬＤは、好適にはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。
【００２０】
一致した文字列が検出されたときにデータプロセッサによって実行されることが可能である再定義可能な動作の例としては、変更動作（例えば、文字列置換や後退代入などのａｗｋタスク）、廃棄動作、通知動作（ここでは、関心が持たれた相手先装置は、一致が生じたことについての通知を受け、通知は、変化するさまざまなレベルの詳細事項（一致した文字列を含むパケットのコピー、文字列に一致したデータパターンについての通知、データパターンに一致した文字列についての通知）を包含することが可能である。）、及び記録保持／統計情報の更新（ここでは、データストリームのコンテンツに関するデータが収集される）がある。
【００２１】
本システムのもう１つの構成要素は、ＰＬＤにデータ処理モジュールをプログラミングするように作用することが可能な構成情報を生成するための装置であり、この装置は、（１）ユーザからデータパターン及び動作コマンドを受信するように動作可能な入力と、（２）少なくとも部分的には受信されたデータパターン及び動作コマンドに基づいて構成情報を生成するように動作可能なコンパイラとを備え（構成情報は所定のデータ処理モジュールを定義し、このデータ処理モジュールは、そこに適用されたデータストリームが、受信されたデータパターンに一致する文字列を含むか否かを決定するように動作可能である。）、構成情報は、データ処理モジュールがＰＬＤにプログラミングされるように作用することが可能である。構成情報をコンパイラからＰＬＤへ伝送するために送信機が使用可能であって、これによりデータ処理モジュールがＰＬＤにプログラミングされる。
【００２２】
コンパイラは、好適にはデータ処理モジュールの設計を自動化する字句解析器生成器（又は語彙解析器生成器：lexical analyzer generator）を含む。字句解析器生成器は、受信されたデータパターンを処理し、少なくとも部分的にこのデータパターンに基づいて、パターンマッチング状態マシンの論理的表現を生成する。パターンマッチング状態マシンは、データストリームが、受信されたデータパターンに一致する文字列を含むか否かを決定するタスクを実行する。パターンマッチング状態マシンは、少なくとも部分的にデータ処理モジュールを定義する。
【００２３】
本発明のデータプロセッサは、そのタスクがハードウェアで実行されるので、ネットワークの回線速度で動作する能力を有する。さらに、データプロセッサをプログラミングするために使用される構成情報を生成する装置に起因して、本発明のデータ処理システムは、追加のデータパターン又は異なるデータパターンを単にそこに提供することによって追加のデータパターン又は異なるデータパターンに関してパケットを検索するように容易に再プログラミングされ、また、一致した文字列を検出したことに応答して追加の動作又は異なる動作を実行するようにも容易に再プログラミングされる。いったんこのような入力がユーザによって提供されると、コンパイラは、再プログラムを実行するために必要な構成情報を生成し、送信機は、この情報を、おそらくはコンピュータネットワークを介してデータプロセッサへ伝送する。データプロセッサは、異なるデータパターンに関してパケットを検索するように再プログラミングされることが可能であるばかりではなく、同じ技術によって、異なるパケット変更動作を実行するように再プログラミングされることも可能である。従って、本発明の速度及び柔軟性は先行技術とは比較にならないほど優れている。
【００２４】
この速度及び柔軟性に起因して、本発明の潜在的アプリケーションは広範囲にわたる。例えば本発明はウイルスの検出に使用可能である。本発明のパケットプロセッサにキーとして設定されるデータパターンは、既知のコンピュータウイルスを含むデータパターンであってもよい。従って、本発明は、パケット伝送において存在する任意の既知のコンピュータウイルスを検出する（また、変更動作によってこれを除去する）ために使用可能である。
【００２５】
また本発明は、著作権を管理下におくためにも使用可能である。パケットプロセッサには、ある当事者の著作権で保護された素材がネットワークを介して伝送される場合に確実に検出するデータパターンがキーとして設定されることが可能である。例えば、著作権で保護された歌、映画及び画像は、音声ファイル、動画ファイル及び画像ファイルを介してウェブ上で伝送されることが多い。このような作品がパケットトラフィック内に存在する場合を検出するデータパターンを適正に設計することにより、本発明を実施する者は、パケットプロセッサを利用して、このような著作権で保護された作品の伝送を検出しかつ検出した時点で適切な行動をとることができる。
【００２６】
またさらに、本発明は、企業秘密及び機密文書が拡散することを防止するために使用可能である。会社の内部コンピュータシステム上に格納された企業秘密及び／又は機密文書を有する会社は、このような情報を会社の内部ネットワークの外へ無許可で送信することを防止するために本発明を利用することができる。会社のネットワークファイアウォールは、その会社の企業秘密及び／又は機密文書を包含するデータパターンに一致する文字列を含むことが発見された無許可の任意のパケットを検出しかつこれを廃棄するようにキーとなる情報が設定されたパケットプロセッサを使用することができる。会社は、その機密／企業秘密情報にフラグを付与するために、このような情報に電子透かしを付加すること（ここで、データプロセッサには上記電子透かしがキーとして設定される。）から、各機密／企業秘密の文書／ファイルについて、その文書／ファイルが送信される場合に確実に検出する別個のデータパターンを設計することに至るまで、広範囲にわたるオプションを有する。
【００２７】
またさらに、本発明は、政府の調査機関によって、コンピュータネットワークを介した
ターゲットとなる当事者のデータ伝送をモニタリングするために利用されることも可能である。パケットプロセッサには、関心対象であるキーワード及びその変形物を包含するデータパターンがキーとして設定されることが可能である。例えば、爆発物（すなわち、ＴＮＴなど）、犯罪（すなわち、殺す、盗む、など）、及び／又は指名手配者（すなわち、既知のテロリスト、逃亡者、など）に関連する所定の単語又は語句（ワード）が、パケットプロセッサにキーとして設定されることが可能である。いったんこのように構成されると、パケットプロセッサは、パケットストリーム内にこれらのキーワード（又は変形物）が存在するか否かを検出し、さらに検出された時点で適切な動作を実行する（例えば、関連の政府機関へ通知するか、又はさらなる自動処理のためにこのデータをリダイレクトする）ことができる。
【００２８】
本発明に係るアプリケーションのさらにもう１つの例として、言語翻訳機がある。パケットプロセッサの検索及び置換機能は、第１の言語のある単語がパケット内に存在する場合を検出し、さらに検出された時点でその単語を第２の言語のその訳語に置換するために使用されることが可能である。例えば、パケットプロセッサは、パケット内で単語「ｆｒｉｅｎｄ」が検出されたときに、これをそのスペイン語訳である「ａｍｉｇｏ」に置換するために使用可能である。本発明のパケットプロセッサは複数の異なるデータパターンに関してパケットを検索する能力を有するという事実を利用すると、本発明は、言語Ａから言語Ｂへの大規模辞書がキーとしてパケットプロセッサに設定される大規模翻訳装置として使用可能である。さらにまた、本発明を実施する者は、逐語的翻訳を考慮するだけでなくさらに文法的問題点も考慮した（例えば、形容詞が名詞に先行するという英語方式を、名詞に形容詞が後続するというスペイン語方式に調和させる。）データパターンを開発できる可能性もある。
【００２９】
さらにまた、本発明は、不快なコンテンツに関してパケットトラフィックをモニタリングする／フィルタリングするために使用可能である。例えば、親は、卑俗なデータ又はポルノグラフィーのデータを子供がインターネットを介して受信することを防ぐために、本発明のパケットプロセッサを使用することを希望する可能性がある。卑俗なもの、又は潜在的にポルノグラフィーに関わるデータを検索して削除するようなキーをデータプロセッサに設定することにより、親は、このような不快なデータが彼らの家庭のコンピュータに届くことを防ぐことができる。
【００３０】
さらにもう１つの潜在的アプリケーションとして、暗号化／復号化装置がある。パケットプロセッサは、様々なワード又は文字を置換コードで置換し、これによりネットワーク用に設計されたパケットを暗号化するように設計されることが可能である。受信側では、置換コードを元データで置換することにより暗号化されたパケットを復号化するために、パケットプロセッサが設けられることが可能である。
【００３１】
しかしながら、これらのことは、本発明の潜在的用途のうちのごく少数である。当業者は本発明に係る追加の用途を容易に認識するであろうし、よって本発明の範囲は上述したアプリケーションに限定されるべきではない。上述したアプリケーションは、本発明が有する広範囲にわたる有用性の単なる例示である。本発明の完全な範囲は、以下の説明及び添付された請求の範囲を読むことにより決定することが可能である。
【発明を実施するための最良の形態】
【００３２】
図１（ａ）及び図１（ｂ）に、本発明に係るパケット処理システムの概要を示す。パケットプロセッサは、コンピュータネットワークを介して伝送されるデータパケットを受信し、これらのパケットをスキャンして、指定されたデータパターンに一致する文字列をこれらのパケットが含むか否かを決定するように動作する。パケットが、一致した文字列を含んでいることが発見されれば、パケットプロセッサは、データ変更（例えば文字列の置換）、パケットの廃棄、通知、又は他の何らかの動作等の、指定された動作を実行する。例えば、パケットプロセッサは、パケットが「ｒｅｃｉｅｖｅｄ」という文字列を含むか否かを決定し、この文字列が発見されたときに、「ｒｅｃｉｅｖｅｄ」の各インスタンスを正しいスペルで綴られた置換文字列「ｒｅｃｅｉｖｅｄ」で置換することによりパケットを変更するように構成されることが可能である。又は、パケットプロセッサは、コンピュータウイルスであることを示す文字列をパケットが含むか否かを決定し、このような文字列が発見されればパケットを廃棄するように構成されることも可能である。また、パケットプロセッサは、一致した文字列が発見されたときに、別の装置に通知パケット又は通知信号を送信するように構成されることも可能である。一致した文字列を検出した時点でパケットプロセッサが実行する可能性のある動作にてなるこのリストは単なる例示であり、本発明は、一致の検出に応答した様々な動作のうちの任意のものを利用することが可能である。
【００３３】
パケットプロセッサの重要な特徴は、これが、異なるデータパターンに関してパケットをスキャンするように再プログラミング可能である、及び／又は、指定された異なる動作を実行するように再プログラミング可能であるということにある。パケットプロセッサ上に存在するプログラミング可能な論理装置（ＰＬＤ）には、以下のモジュール、すなわち、パターンマッチング機能を提供し、マッチングが発見されたときには、指定された動作を実行するように動作可能なモジュールがプログラミングされる。ＰＬＤを再構成することにより、パケットプロセッサには、新たなモジュール、すなわち、異なるデータパターンに関してパケットをスキャンし、及び／又は、一致が発見されたときに異なる動作を実行するように動作可能な新たなモジュールが再プログラミングされることが可能である。パケットプロセッサは、ハードウェアに依存してパターンマッチングを実行するので、受信されたパケットをネットワークの回線速度でスキャンすることができる。従ってパケットプロセッサは、ＯＣ−４８等のネットワーク速度で伝搬するストリーミングデータを処理するネットワーク装置として使用されることが可能である。
【００３４】
パケットプロセッサを再プログラミングするためには、再構成装置が構成情報をネットワークを介してパケットプロセッサへ送信する。構成情報は、ＰＬＤへプログラミングされるモジュールを定義する。ネットワークを介して構成情報を受信した後で、パケットプロセッサは、受信された構成情報に従ってＰＬＤを再構成する。
【００３５】
再構成装置は、構成情報をユーザ入力に基づいて生成する。好適には、この入力は、データパケットの比較対象となるデータパターンと、一致した文字列が検出された時点で実行されるべき動作を指定する動作コマンドとを含む。ユーザからこの入力を受信すると、再構成装置は、これに基づいて、ユーザから受信されたデータパターン及び動作コマンドをキーとして設定されたモジュールを定義する構成情報を生成する。
【００３６】
図１（ｂ）は、パケットプロセッサが簡単な検索及び置換のタスクを実行するようにどのように動作するかを示す。図１（ｂ）に示す例では、パケットプロセッサにプログラミングされたモジュールは、「Ｕ．＊Ｓ．＊Ａ」というデータパターンに対して調整されている。「Ｕ．＊Ｓ．＊Ａ」は、１つのＵと、これに続く任意個数の任意の文字と、これに続く１つのＳと、これに続く任意個数の任意の文字と、これに続く１つのＡとを意味する。パケット内においてこのパターンに一致する文字列が発見されるとき、モジュールにはまた、この一致した文字列を置換文字列「米国」（United States）で置換するようなキーが設定される。従って、「私はＵＳＡに住んでいます。」（I live in the USA）という文字列を含むペイロード部分を有するパケットがパケットプロセッサによって受信されて処理される場合、このパケットは、出力されるパケットのペイロード部分が「私は米国に住んでいます。」（I live in the United States）という文字列を含むように変更される（文字列「ＵＳＡ」が検出され、「米国」（United States）で置換される）。
【００３７】
図２は、パケットプロセッサのネットワーク装置としての使用を示す。ある好適な実装においては、パケットプロセッサは、Ｎ×Ｎのパケットスイッチと、上記パケットスイッチとの間でデータトラフィックを送受信するように伝送する回線カードとの間のインタフェースとして使用可能である。パケットプロセッサが、異なるデータパターン（又は別のデータパターン）に関してパケットをスキャンするように、又は一致が発見されたときに異なる動作（又は別の動作）を実行するように再プログラミングされることが所望される場合には、再構成装置は必要な構成情報を生成し、この情報をネットワークを介してパケットプロセッサへ送信してこれを再プログラミングさせる。
【００３８】
図３は、ＰＬＤへプログラミングされる好適なパケット処理モジュール１００の概要を示す。着信するデータは、まずプロトコルラッパー装置（protocol wrapper）１０２によって処理される。着信側において、プロトコルラッパー装置１０２は、着信するパケット内の様々なヘッダ情報を処理し、制御情報を検索及び置換論理回路（search and replace logic：ＳＲＬ）１０４に提供するように動作し、上記提供される制御情報は、ＳＲＬ１０４がパケットの異なる部分に輪郭を設定することを可能にする。好適にはプロトコルラッパー装置１０２によりＳＲＬ１０４へ提供される制御情報は、パケットの最初のワードを識別するフレーム開始部（start of frame：ＳＯＦ）インジケータ、パケットの後続するワードがＳＲＬ１０４へ送られるときにアサートされるＤＡＴＡ＿ＥＮ信号、ＵＤＰヘッダの最初のワードを識別するデータグラム開始部（start of datagram：ＳＯＤ）信号、及びパケットのペイロードの最後のワードを識別するフレーム終了部（end of frame：ＥＯＦ）信号である。
【００３９】
図６は、データパケットの様々な構成要素及びワードの位置を示す。最初のワードはＡＴＭヘッダである。ＳＯＦ信号は、ＡＴＭヘッダの着信によってアサートされる。ＡＴＭヘッダに続いて、少なくとも５つのワードからなるＩＰヘッダが存在する。ＤＡＴＡ＿ＥＮ信号はＩＰヘッダの最初のワードで開始するようにアサートされ、パケットの後続するすべてのワードにわたってアサートされたままである。ＩＰヘッダのワードに続いて、ＵＤＰヘッダの最初のワードがワード位置ｘに位置決めされる。ＳＯＤ信号は、ＵＤＰヘッダの最初のワードとともにアサートされる。ＵＤＰヘッダは２つのワードを含み、ワード位置ｘ＋２においてパケットのペイロード部分が開始する。ＥＯＦ信号は、ワード位置ｘ＋ｎにおける、ペイロード部分の最後のワードによってアサートされる。従ってペイロードは、所定のワード数Ｌ（Ｌ＝ｎ−２）を含む。ワード位置ｘ＋ｎ＋１及びｘ＋ｎ＋２における次の２個のワードは、パケットのトレーラを含む。
【００４０】
ある好適な実施形態に係るプロトコルラッパー装置は、着信するパケットが適切な仮想的回線又はフロー識別子で着信したことを照合するセルラッパー装置と、着信するパケットをセルに分割しかつ発信するセルを再び集めてパケットにするフレームラッパー装置と、着信する各ＩＰパケットが正しいチェックサムを有することを照合し、発信する各ＩＰパケットについて新たなチェックサム及び長さを計算するＩＰラッパー装置と、着信する各ＵＤＰパケットが正しいチェックサム及び長さを有することを照合し、発信する各ＵＤＰパケットについて新たなチェックサム及び長さを計算するＵＤＰラッパー装置とを含む。
【００４１】
パターンマッチングは、パケットのペイロード部分に対してのみ実行されることが好適である。このような場合、ＳＲＬ１０４はプロトコルラッパー装置１０２からの制御情報（ＳＯＦ、ＤＡＴＡ＿ＥＮ、ＳＯＤ、及びＥＯＦ）を使用してペイロードを含むパケットのワードを識別し、これらのワードに対してのみパターンマッチングを実行する。しかしながら、必ずしもこの通りである必要はない。
【００４２】
また、所望されれば、本発明を実施する者によってＴＣＰラッパー装置等の追加のラッパー装置が含まれてもよい。ＴＣＰラッパー装置は、着信する複数のパケットが、送信されたデータストリームと同一の連続的なデータストリームに組み立てられるように、チェックサムを読み取って計算する。ＴＣＰラッパー装置は、同じパケットの複数のコピーとして着信するデータを廃棄し、順番違いで着信するパケットを並べ替える。
【００４３】
プロトコルラッパー装置の設計及び動作は、当該技術において公知である。例えば、エフ・ブラウン，ジェイ・ダブリュー・ロックウッド及びエム・ヴァルトフォーゲル，「再構成可能なハードウェアにおけるインターネットパケット処理のための階層化されたプロトコルラッパー装置」，ワシントン・ユニバーシティ技術報告，ＷＵ−ＣＳ−０１−１０，ワシントン・ユニバーシティ  コンピュータサイエンス学部，セントルイス，２００１年６月（F. Braun, J. W. Lockwood, and M. Waldvogel, "Layered Protocol Wrappers for Internet Packet Processing in Reconfigurable Hardware", Washington University Technical Report WU-CS-01-10, Washington University in St. Louis, Dept. of Computer Science, June 2001）を参照されたい。その開示内容は、参照によりここに含まれている。
【００４４】
受信されるデータパケットは、３２ビットワードからなるストリームとしてＳＲＬに着信する。また先に述べたように、ＳＲＬ１０４は各ワードとともに４ビットの制御情報も受信する。ＳＲＬ１０４は再構成装置からのデータパターンに対して調整され、着信するワードストリーム内にそのデータパターンによって包含される文字列が存在するか否かを決定するように動作する。ＳＲＬ１０４はまた置換文字列に対しても調整され、着信するワードストリーム内に一致した文字列が発見されるときに文字列変更動作を実行する。ＳＲＬ１０４が実行する可能性のある変更動作の例は、簡単な代入（パケット内の一致した文字列を置換文字列で置換する。）と、後退代入（パケット内の一致した文字列を置換文字列で置換するが、ここで、置換文字列は、パケット内で発見される実際の文字列であって、一致を生じさせた文字列を含む。）と、保護された代入（パケット内の一致を生じさせた文字列に先行するか又は後続するかのいずれかで、パケット内に存在する文字列をパケットに追加するか、又はパケットから除去する。）とを含む、ａｗｋに基づいた任意の変更コマンドである。
【００４５】
モジュール１００は、図４に示すように、デイジーチェーンで互いに接続された複数Ｎ個のＳＲＬ１０４を含んでもよい。各ＳＲＬには、異なるデータパターンと異なる変更コマンドとがキーとして設定されることが可能である。本発明に係るパケットプロセッサが２つ以上のデータパターンに関してパケットをスキャンすることを許容することにより、パケットプロセッサの能力は大幅に拡張される。例えば、３種の異なるコンピュータウイルスがコンピュータネットワーク内に蔓延していることがわかっている場合、モジュール１００は、コンピュータウイルスのうちの異なる各１つに対して設計されたデータパターンがキーとしてそれぞれ設定された、３つの異なるＳＲＬ１０４を含むことができる。ＳＲＬのいずれかがパケット内にそのパターンに一致する文字列を検出すると、ＳＲＬはパケットからそのウイルスを除去することができる。
【００４６】
ＳＲＬ１０４の概略図を、回路内の関連した信号を記載したテーブルとともに図５に示す。ＳＲＬ１０４の動作は、マッチングパス１１０と、データパス１１２と、コントローラ１１４とで分配される。マッチングパス１１０は、着信するデータストリームが、指定されたデータパターンに一致する文字列を含むか否かを決定する。データパス１１２は、着信したデータストリームを出力し、必要であれば、指定された変更動作に従ってそのデータストリームを変更する。コントローラ１１４は、プロトコルラッパー装置からの制御ビットと、それがマッチングパスから受信する制御信号とを使用して、マッチングパス１１０及びデータパス１１２の両方の動作を調整しかつ制御する。
【００４７】
先に述べたように、マッチングパス１１０の主要なタスクは、入力されたストリームが、指定されたデータパターンに一致する文字列を含むか否かを決定することである。マッチングバッファ（ＭＢ）は、プロトコルラッパー装置から３５ビットのストリーミング信号（Ｓ１）を受信する。３２ビットはパケットのワードであり、３ビットは、ＳＯＦインジケータ、ＳＯＤインジケータ及びＥＯＦインジケータである。好適には、着信するワードは、マッチングバッファ（ＭＢ）において、コントローラ１１４から着信するＤＡＴＡ＿ＷＲ＿ＡＤＤ信号（ＣＳ１）によって識別されるアドレスの上位の３２ビットとして格納され、制御ビットは下位の３ビットとして格納される。マッチングバッファ（ＭＢ）が一杯になれば、コントローラは、Ｓ１上でのデータ伝送を停止するようにプロトコルラッパー装置に通知するＣＯＮＧＥＳＴＩＯＮ（輻輳）信号（ＣＳ１０）をアサートする。ＭＢは、その中にバッファリングされたワードであって、コントローラ１１４から着信するＭＢ＿ＲＤ＿ＡＤＤ信号（ＣＳ２）によって指定されるアドレスにバッファリングされたワードを出力する。ＭＢから出力された上位の３２ビット（着信するパケットのワード）（Ｓ２）は、次にワード・バイト変換器１（word-to-byte converter：ＷＢＣ１）へ送られる。下位の３ビット（ワードの制御ビット）は、これらに対応する３２ビットワードをどのように処理するかをコントローラが決定できるように、コントローラへ送られる（Ｓ３）。
【００４８】
ＷＢＣ１は、ワードとして着信するストリームを、バイトとして発信するストリームへ変換するように動作する。ＷＢＣ１は、好適には、それぞれ８ビットからなる４つの入力グループを有するマルチプレクサである。各入力グループは、ＭＢから出力された３２ビットワードのうちの１バイトである。コントローラからのＷＢＣ１＿ＳＥＬＥＣＴ信号（ＣＳ３）は、ワードのうちのどのバイトがＷＢＣ１の出力（Ｓ４）へ送られるのかを識別する。
【００４９】
ＷＢＣ１の出力は、正規表現有限状態マシン（Regular Expression Finite State Machine：ＲＥＦＳＭ）によって受信される。ＲＥＦＳＭは、着信するバイトストリームを処理し、それにキーとして設定されたデータパターンに一致する文字列をそのバイトストリームが含むか否かを決定する、パターンマッチング状態マシンである。好適には、ＲＥＦＳＭのパターンマッチング状態マシンは、決定論的有限状態オートマトン（deterministic finite automaton：ＤＦＡ）として実装される。コントローラがＲＥＦＳＭ＿ＥＮＡＢＬＥ信号（ＣＳ４）をアサートするとき、ＲＥＦＳＭは、ＷＢＣ１から着信するバイトを処理する。好適には、コントローラは、Ｓ４内にパケットのペイロードのバイトが存在する場合にのみ、ＲＥＦＳＭ＿ＥＮＡＢＬＥをアサートする。
【００５０】
バイトを処理する際に、ＲＥＦＳＭは、それにキーとして設定されているデータパターンに対して、処理されている現在のバイトがどのように一致するのか、それとも一致しないのかを示す出力信号ＲＥＦＳＭ＿ＳＴＡＴＵＳを生成する。ＲＥＦＳＭ＿ＳＴＡＴＵＳは、ＲＵＮＮＩＮＧ（動作中）状態（一致の可能性がある。）、ＲＥＳＥＴＴＩＮＧ（リセット）状態（一致が存在しない。）、又はＡＣＣＥＰＴＩＮＧ（受諾）状態（一致した文字列が発見されている。）のいずれかを示す可能性がある。ＲＥＦＳＭ＿ＳＴＡＴＵＳは、ＲＥＦＳＭによって処理されている現在のバイトに依存して、ＲＥＦＳＭの現在の状態及び次の状態の両方を識別する。ＲＥＦＳＭがあるバイトを処理して、そのバイトが、データパターンに一致する可能性があるであろう文字列の一部であると決定する場合（すなわち、ＲＥＦＳＭによって処理された文字列が「ａｂｃ」であり、現在のバイトが「ｄ」であり、かつデータパターンが「ａｂｃｄｅ」である場合）、ＲＥＦＳＭ＿ＳＴＡＴＵＳの現在の状態及び次の状態はＲＵＮＮＩＮＧになる。ＲＥＦＳＭが、データパターンに完全に一致する文字列のバイトを処理する場合（今度は「ｅ」バイトが受信されている場合）、ＲＥＦＳＭ＿ＳＴＡＴＵＳによって識別される次の状態はＡＣＣＥＰＴＩＮＧになる。しかしながら、マッチングの割り当てが最長一致の割り当てである場合は、ＡＣＣＥＰＴＩＮＧ状態が必ずしもＲＥＦＳＭのパターンマッチングタスクの完了を意味しないという点は留意される必要がある。データパターンがどのように定義されるのかに依存して、ＲＥＦＳＭによって処理される後続のバイトもまたデータパターンに一致する可能性がある。例えば、ＲＥフォーマットで表現されたデータパターンが「ａｂｃ＊」（データパターンが１つの「ａ」と、それに続く１つの「ｂ」と、それに続く１つ又は複数の「ｃ」とであることを意味する。）であれば、いったんＲＥＦＳＭが「ａｂｃ」というバイトストリームを処理すると、マッチングが生じたことになり、ＲＥＦＳＭはＡＣＣＥＰＴＩＮＧ状態になる。しかしながら、次のバイトが同じく１つの「ｃ」であれば、文字列「ａｂｃｃ」もまたデータパターンに一致する。こうして、ＡＣＣＥＰＴＩＮＧ状態にある場合には、ＲＥＦＳＭは、引き続き一致するであろう後続のバイトに対しても、警報状態であり続ける必要がある。ＲＥＦＳＭは、「ｃ」でないバイトを受信して処理するまで、完全な一致が生じたことについて認識しない。
【００５１】
ＲＥＦＳＭ＿ＳＴＡＴＵＳは、その現在の状態がＡＣＣＥＰＴＩＮＧでありかつその次の状態がＲＥＳＥＴＴＩＮＧであるとき、完全一致である（先行するバイトが完全一致であったが、現在のバイトが一致の成立をだめにしてしまうことを意味する。）ことを識別する。上述の例（ＲＥが「ａｂｃ＊」の場合）では、入力文字列が「ａｂｃｃｃｄ」であれば、ＲＥＦＳＭは「ａ」を処理した後にＲＵＮＮＩＮＧを開始し、最初の「ｃ」が処理されるとＡＣＣＥＰＴＩＮＧを開始し、最後の「ｃ」が処理されて後続の「ｄ」が状態マシンをＲＥＳＥＴにするとＭＡＴＣＨ（一致）になる。
【００５２】
ＲＥＦＳＭは、コントローラ１１４にＲＥＦＳＭ＿ＳＴＡＴＵＳ信号（ＣＳ５）を供給して、それの現在の状態及びそれの次の状態（これは現在のバイトに依存する。）の両方をコントローラに通知する。コントローラはＲＥＦＳＭ＿ＳＴＡＴＵＳ信号を処理し、ＭＢワードアドレスと、そのワードにおける、完全に一致した最初と最後のバイトのバイト位置とを決定する。図７（ａ）及び図７（ｂ）は、これに関して、コントローラがマッチングパス１１０の動作をどのように制御するのかを示す。
【００５３】
ステップ７．１乃至７．７は、マッチングバッファ（ＭＢ）におけるワードに関連付けられた制御ビットを処理して、ＭＢにおける、パケットのペイロードを含むワードを識別することに関連している。ステップ７．１では、ＭＢ＿ＲＤ＿ＡＤＤ信号が１に等しく設定される。次にコントローラはＭＢ＿ＲＤ＿ＡＤＤをアサートし（ステップ７．２）、ＭＢにおいてそのアドレスに格納されているワードがＳ２として出力されるとともに、そのワードに関連付けられた制御ビットがＳ３として出力される。ステップ７．３において、コントローラは、ＳＯＦビットがアサートされているか否かをチェックする。アサートされていれば、コントローラは、ＭＢにおいてＭＢ＿ＲＤ＿ＡＤＤに格納されているワードがパケットのＡＴＭヘッダであることを認識する。再び図６を参照すると、（ＩＰヘッダが５ワードの長さであれば）ＵＤＰヘッダはワード位置７で開始する可能性のあることが分かる。従って、ＲＥＦＳＭがパケットのペイロードのみを処理することが所望される場合には、コントローラは、ＭＢ＿ＲＤ＿ＡＤＤを調節してＵＤＰヘッダを検索し始める（いったんＵＤＰヘッダの最初のワードが発見されれば、ペイロードの最初のワードは２つ後のワード位置になるということが分かる。）。従って、ステップ７．４において、コントローラはＭＢ＿ＲＤ＿ＡＤＤをＭＢ＿ＲＤ＿ＡＤＤ＋６に等しく設定し、ステップ７．２へループして戻る。
【００５４】
この後、次のパスにおいてコントローラはステップ７．５に至り、ＭＢ格納されたワードであって、新たに調節されたＭＢ＿ＲＤ＿ＡＤＤ信号によって識別された位置に格納されているワードに関連付けられたＳＯＤビットをチェックする。ＳＯＤビットがアサートされていれば、コントローラは、ＭＢにおいて２つ後のアドレスに格納されているワードがペイロードの最初のワードであることを認識する。従って、ＳＯＤがハイレベルであれば、コントローラはＭＢ＿ＲＤ＿ＡＤＤをＭＢ＿ＲＤ＿ＡＤＤ＋２に等しく設定し（ステップ７．７）、ステップ７．８でパターンマッチング処理を開始する。ＳＯＤビットがハイレベルでなければ、コントローラは、ＳＯＤビットがハイレベルであるワードが発見されるまでＭＢ＿ＲＤ＿ＡＤＤをインクリメントする（ステップ７．６）。
【００５５】
ステップ７．８を最初として、パターンマッチング処理が開始される。パケットのペイロードの最初のワードがＭＢから出力され、ＲＥＦＳＭ＿ＥＮＡＢＬＥ信号がアサートされる。次にステップ７．９において、パラメータＢＹＴＥ＿ＰＯＳ＿ＩＮが１に設定される。このパラメータは、ＷＢＣ１の出力に送信されるＳ２におけるワードのバイトを識別するために使用される。コントローラはＷＢＣ１＿ＳＥＬＥＣＴ＝ＢＹＴＥ＿ＰＯＳ＿ＩＮをアサートし、これにより現在のワードの最初のバイトをＲＥＦＳＭへ送る（ステップ７．１０）。
【００５６】
次にＲＥＦＳＭはこのバイトを処理し、それに応じてＲＥＦＳＭ＿ＳＴＡＴＵＳ信号をアサートする。コントローラはこの信号を読み取る（ステップ７．１１）。次にステップ７．１２において、コントローラは、ＲＥＦＳＭの現在の状態がＲＵＮＮＩＮＧ状態であることをＲＥＦＳＭ＿ＳＴＡＴＵＳ信号が示しているか否かをチェックする。現在の状態がＲＵＮＮＩＮＧであれば、コントローラはステップ７．１３へ進み、ＭＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＩＮの両方をパラメータＢＡＣＫ＿ＰＴＲとして格納する。コントローラはここからステップ７．２０へ進み、そこで、コントローラは、処理するための次のバイトを発見する処理を開始する。パラメータＢＡＣＫ＿ＰＴＲは、ＲＥＦＳＭの現在の状態がＲＵＮＮＩＮＧになるまでは、ＲＥＦＳＭによって処理される現在のバイトの動作中表現となり、ＢＡＣＫ＿ＰＴＲの値は、ＲＥＦＳＭの現在の状態がＲＵＮＮＩＮＧになった時点で固定される。ＲＥＦＳＭにおけるフリップフロップの性質に起因して、ＲＥＦＳＭ＿ＳＴＡＴＵＳは、生じうる一致の第２のバイトが受信されるまでは、現在の状態をＲＵＮＮＩＮＧとして識別することはない。従って、ＲＥＦＳＭ＿ＳＴＡＴＵＳがＲＵＮＮＩＮＧという現在の状態を識別し、ＢＡＣＫ＿ＰＴＲが固定されると、ＢＡＣＫ＿ＰＴＲによって識別されたワード及びバイト位置は、一致した可能性のある文字列の最初のバイトになる。
【００５７】
ステップ７．１２において、コントローラが、ＲＥＦＳＭ＿ＳＴＡＴＵＳから、ＲＥＦＳＭの現在の状態がＲＵＮＮＩＮＧである（現在のバイトは、一致した文字列の一部である可能性があるということを意味する。）ことを決定すると、コントローラはステップ７．１４へ進み、ＲＥＦＳＭ＿ＳＴＡＴＵＳ信号によって識別される次の状態がＲＥＳＥＴＴＩＮＧであるか否かをチェックする。次の状態がＲＥＳＥＴＴＩＮＧであるとき、このことは、現在のバイトが部分的な一致をだめにしてしまったことを意味する。次の状態がＲＥＳＥＴＴＩＮＧでなければ、コントローラは（ステップ７．１５において）次の状態がＡＣＣＥＰＴＩＮＧであるか否かをチェックする。次の状態がＲＥＳＥＴＴＩＮＧでもＡＣＣＥＰＴＩＮＧでもない場合、このことは、次の状態が依然としてＲＵＮＮＩＮＧであることを意味し、その場合、コントローラはステップ７．２０へ進んでペイロードの次のバイトを取得する処理を実行する。
【００５８】
ステップ７．１５において、次の状態はＡＣＣＥＰＴＩＮＧであるとコントローラが決定する場合、このことは、ＲＥＦＳＭが完全一致を発見しているが、一致の完全な境界をまだ決定していないということを意味する。しかしながら、コントローラは、現在のバイトのワードアドレス及びバイト位置が、一致部分の最後のバイトのワードアドレス及びバイト位置である可能性があるということをまさに認識している。従ってコントローラは、ステップ７．１６において、ＭＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＩＮを値ＡＣＣＥＰＴ＿ＰＴＲとして格納する。次にステップ７．１７において、コントローラは一致が生じたことを記録し、ステップ７．２０へ進んで次のバイトを取得する。
【００５９】
次のバイトが処理されてステップ７．１４に再び到達するとき、コントローラは、ＲＥＦＳＭ＿ＳＴＡＴＵＳによって識別される次の状態がＲＥＳＥＴＴＩＮＧであるか否かを再びチェックする。次の状態がＲＥＳＥＴＴＩＮＧであれば、コントローラはステップ７．１８へ進み、ここで、コントローラは、当該コントローラによって以前に一致が記録されているか否かをチェックする。一致が記録されていなければ、コントローラは、ＢＡＣＫ＿ＰＴＲによって識別されたバイトで始まる文字列はデータパターンの一致ではないと決定する。従って、コントローラは、ＲＥＦＳＭがＢＡＣＫ＿ＰＴＲの直後のバイトを処理するようにＭＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＩＮを設定する必要があるが、これは、そのアドレスに格納されたバイトが、それが一致した文字列の開始部となりうるか否かを決定するためにチェックされる必要があるからである。コントローラは、ＭＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＩＮを、ＢＡＣＫ＿ＰＴＲに格納された値に等しく設定することによってこのことを達成する（ステップ７．１９）。コントローラはここからステップ７．２０へ進み、次のバイトを取得する。
【００６０】
しかしながら、ステップ７．１７において一致が生じたとコントローラがすでに記録していた例では、コントローラが次にステップ７．１８へ至るとき、コントローラはステップ７．２９へと進む。ステップ７．２９へ到達した場合、このことは、一致した文字列の完全な境界がＲＥＦＳＭによってすでに処理されているということを意味する。現在のバイトは、ＲＥＦＳＭに、その次の状態がＲＥＳＥＴＴＩＮＧであるとすでに決定させている。しかしながら、先行するバイト（その位置はＡＣＣＥＰＴ＿ＰＴＲによって識別される。）は、一致した文字列の最後のバイトになる。また、ＢＡＣＫ＿ＰＴＲの値は、一致した文字列の最初のバイトのアドレスになる。従ってコントローラは、パケットのペイロードにおける、一致した最長の文字列の最初と最後のバイトのアドレスを認識する。ステップ７．２９において、コントローラは、ＢＡＣＫ＿ＰＴＲの値をＦＩＦＯ  ＡにＳＴＡＲＴ＿ＡＤＤとして格納する（図５のＣＳ６）。またコントローラは、ＡＣＣＥＰＴ＿ＰＴＲの値をＦＩＦＯ  ＢへＥＮＤ＿ＡＤＤとして格納する（図５のＣＳ８）。次に、ステップ７．３０において、コントローラはその一致の記録をクリアする。次にステップ７．３１において、コントローラは、ＭＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＩＮを、ＡＣＣＥＰＴ＿ＰＴＲに格納された値に設定し、また、ＡＣＣＥＰＴ＿ＰＴＲによって識別されたバイトの直後のバイトが処理されるように、ステップ７．２０へ進む。いったんＳＴＡＲＴ＿ＡＤＤがＦＩＦＯ  Ａで待機するように格納させられ（キューイングされ）かつＥＮＤ＿ＡＤＤがＦＩＦＯ  Ｂで待機するように格納させられると、コントローラは、変更されるパケットにおける一致した最長の文字列の境界を認識するようになるので、発信するパケットを適切に変更できるようになる。
【００６１】
ステップ７．２０から、コントローラは次のバイトを取得する処理を開始する。ステップ７．２０ではＢＹＴＥ＿ＰＯＳ＿ＩＮがインクリメントされ、次いでコントローラは、ステップ７．２１において、ＢＹＴＥ＿ＰＯＳ＿ＩＮが４より大きいか否かをチェックする。ＢＹＴＥ＿ＰＯＳ＿ＩＮが４以下である場合、コントローラは、ＷＢＣ１の入力回線上の現在のワードに係る別のバイトが処理される必要があるということを認識する。従って、コントローラはステップ７．１０へループして戻り、そのバイトの処理を開始する。ＢＹＴＥ＿ＰＯＳ＿ＩＮが４より大きい場合、コントローラは、現在のワードに係るすべてのバイトが処理済みであって、ＭＢにおける次のワードが取得される必要があるということを認識する。次のワードを取得する前に、コントローラは、現在のワードに関するＥＯＦビットがハイレベルであるか否かをチェックする（ステップ７．２２）。
【００６２】
ＥＯＦビットがハイレベルであれば、このことは、現在のワードがペイロードの最後のワードであることを意味し、この場合、そのパケットに対するパターンマッチング処理は完了している。ＲＥＦＳＭ＿ＥＮＡＢＬＥはアンアサートされ（アサートされた状態から解除され）、ＭＢ＿ＲＤ＿ＡＤＤはＭＢ＿ＲＤ＿ＡＤＤ＋３に等しく設定されて、次のパケットの処理が開始される（ステップ７．２７及び７．２８）。また、パケットのペイロードの最後のワードの最後のバイトが、完全に一致した状態を存在させることになったバイトであるという状況を考慮して、コントローラは、ステップ７．１８、７．２９及び７．３０に並行したステップであるステップ７．２４、７．２５及び７．２６へと進む。ＥＯＦビットがハイレベルでない場合、このことは、現在のワードがペイロードの最後のワードでないことを意味し、次のワードのバイトがＲＥＦＳＭによって処理される必要がある。従って、コントローラはＭＢ＿ＲＤ＿ＡＤＤをインクリメントし（ステップ７．２３）、ステップ７．８へループして戻り、ＭＢにおいてＭＢ＿ＲＤ＿ＡＤＤに格納されたワードの処理を開始する。
【００６３】
データパス１１２の主要なタスクは、着信したデータを出力することと、必要であればこのデータを変更することとである。データパス内の置換バッファ（ＲＥＰＢＵＦ）は、一致した各文字列に代えてデータストリームに挿入されるべき置換文字列を格納する。ＲＥＰＢＵＦ及びＭＵＸはともに、後述のように文字列置換マシンとして動作する。ＲＥＰＢＵＦに格納される置換文字列は、パケット処理モジュールが最初に生成される際にユーザによって提供される。
【００６４】
データバッファ（ＤＢ）は、ＭＢが受信するビットと同じ３５ビット（Ｓ１）を受信する。コントローラはまた、同じＤＡＴＡ＿ＷＲ＿ＡＤＤ（ＣＳ１）を使用して、ＭＢに対して制御するのと同様に、ＤＢへのワードの書き込みを制御する。ＤＢとＭＢとは、同様又は同一のバッファである。コントローラは、ＤＢ＿ＲＤ＿ＡＤＤ信号を使用して（ＣＳ１１）、ＤＢからどのワードが読み出されるのかを制御する。
【００６５】
ワード・バイト変換器２（ＷＢＣ２）はＷＢＣ１と同様に動作して、着信する３２ビットワード（Ｓ７）を４つのバイトに分割し、これらのバイトを、ＷＢＣ２＿ＳＥＬＥＣＴ信号（ＣＳ１２）に従ってＷＢＣ２の出力へ送信する。信号Ｓ６は、ＤＢから読み出されたワードであって、アドレスＤＢ＿ＲＤ＿ＡＤＤから読み出されたワードに関連付けられた３つの制御ビットを伝送する。
【００６６】
データパスからの出力は、あるバイトが、一致した文字列の一部であるか否かをマッチングパスが決定し終えるまで、そのバイトを利用できない。図８は、この保護機能がどのように確立されるのかを示す。ＤＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＯＵＴが初期化された後（ステップ８．１及び８．２）、コントローラは、ＤＢ＿ＲＤ＿ＡＤＤを、ＢＡＣＫ＿ＰＴＲに格納されたＭＢ＿ＲＤ＿ＡＤＤと比較する（ステップ８．３）。そのワードのアドレスが、ＢＡＣＫ＿ＰＴＲに格納されたＭＢ＿ＲＤ＿ＡＤＤ以上であれば、コントローラはＤＢからのワードの読み出しを行わない。このような場合、コントローラは、ＢＡＣＫ＿ＰＴＲにおけるＭＢ＿ＲＤ＿ＡＤＤが、ＤＢ＿ＲＤ＿ＡＤＤよりも大きくなるまで増加するのを待機する。ＤＢ＿ＲＤ＿ＡＤＤがＢＡＣＫ＿ＰＴＲにおけるＭＢ＿ＲＤ＿ＡＤＤ未満であれば、コントローラはステップ８．４へ進み、マッチングパスが一致を発見しているか否か（ＦＩＦＯＡは空であるか？）をチェックする。マッチングパスによって一致が発見されていなければ、コントローラはステップ８．６乃至８．１１を実行してそのワードのバイトを出力する。
【００６７】
ステップ８．６においてＤＢ＿ＲＤ＿ＡＤＤがアサートされ、これにより、ＤＢにおいてそのアドレスに格納されたワードがＷＢＣ２へ送信される（Ｓ７）。ステップ８．７では、ＷＢＣ２＿ＳＥＬＥＣＴがＢＹＴＥ＿ＰＯＳ＿ＯＵＴに等しく設定され、これにより、ＢＹＴＥ＿ＰＯＳ＿ＯＵＴによって識別されたバイトが、ＷＢＣ２の出力へ送信させられる（Ｓ９）。その後、ステップ８．８においてＭＵＸ＿ＳＥＬＥＣＴがアサートされ、ＷＢＣ２の出力がＭＵＸの出力へ送信される（Ｓ１０）。次いで、コントローラは、ＢＹＴＥ＿ＰＯＳ＿ＯＵＴをインクリメントし、現在のワードの各バイトがＭＵＸへ送信されるまでステップ８．７乃至８．１０を繰り返す。すべてのバイトがＭＵＸへ送信されると、ＤＢ＿ＲＤ＿ＡＤＤがインクリメントされ（ステップ８．１１）、コントローラはステップ８．２へループして戻る。
【００６８】
ステップ８．４の結果として、ＦＩＦＯ  Ａで待機するように格納されたＳＴＡＲＴ＿ＡＤＤが存在すると決定されれば、コントローラは、ＤＢ＿ＲＤ＿ＡＤＤを、ＦＩＦＯ  Ａの先頭にＳＴＡＲＴ＿ＡＤＤとともに格納されたＭＢ＿ＲＤ＿ＡＤＤと比較する（ステップ８．５）。ＤＢ＿ＲＤ＿ＡＤＤが、ＳＴＡＲＴ＿ＡＤＤとともに格納されたＭＢ＿ＲＤ＿ＡＤＤより小さい場合には、ＤＢ＿ＲＤ＿ＡＤＤにおけるワードは、一致した文字列の一部でないので、ステップ８．６乃至８．１１が実行される。しかしながら、ＤＢ＿ＲＤ＿ＡＤＤが、待機状態（キューイングされた状態）から読み出されたＳＴＡＲＴ＿ＡＤＤとともに格納されたＭＢ＿ＲＤ＿ＡＤＤに等しい場合には、コントローラは次に、現在のワード（ＤＢ＿ＲＤ＿ＡＤＤにおけるワード）のどのバイトが、一致した文字列の開始バイトであるのかを識別する必要がある。従って、（ステップ８．１２でＳＴＡＲＴ＿ＡＤＤがＦＩＦＯ  Ａから読み出された後に）ステップ８．１３において、コントローラは、ＢＹＴＥ＿ＰＯＳ＿ＯＵＴを、ＳＴＡＲＴ＿ＡＤＤに格納されたＢＹＴＥ＿ＰＯＳ＿ＩＮと比較する。ＢＹＴＥ＿ＰＯＳ＿ＯＵＴが、ＳＴＡＲＴ＿ＡＤＤに格納されたＢＹＴＥ＿ＰＯＳ＿ＩＮに等しくない場合には、そのバイトは、一致した文字列の一部ではなく、コントローラはステップ８．１４乃至８．１６を実行してそのバイトをＭＵＸの出力へ送信する。ステップ８．１４乃至８．１６は、ステップ８．７乃至８．９に並行している。最終的には、コントローラがステップ８．１３へ戻ると、ＢＹＴＥ＿ＰＯＳ＿ＯＵＴは、待機状態から読み出されたＳＴＡＲＴ＿ＡＤＤとともに格納されたＢＹＴＥ＿ＰＯＳ＿ＩＮに一致する。これが発生すると、コントローラはステップ８．１７において文字列置換処理を開始する。
【００６９】
ステップ８．１７において、コントローラはＲＥＰＢＵＦ＿ＥＮＡＢＬＥ（ＣＳ１３）をアサートし、次いで、置換バッファ（ＲＥＰＢＵＦ）の出力（Ｓ８）がＭＵＸの出力へ送信されるようにＭＵＸ＿ＳＥＬＥＣＴをアサートする。ＲＥＰＢＵＦが動作可能にされると、これは、それに格納されている置換文字列のバイトを出力し始める。Ｓ８をＭＵＸの出力へ送信するようにＭＵＸ＿ＳＥＬＥＣＴがアサートされているので、データパスは、ＲＥＰＢＵＦに格納された置換文字列をデータパスに挿入する。一致した文字列ではなく置換文字列をＭＵＸの出力へ送信することにより、データパスは、データストリーム内の一致した文字列を置換文字列で置換する。図９は、ＲＥＰＢＵＦの動作を示す。
【００７０】
ＲＥＰＢＵＦは、置換文字列のバイトを格納するアレイを有している。ポインタＡＲＲＡＹ＿ＲＤ＿ＡＤＤは、置換文字列のどのバイトが出力されるべきかを識別する。ステップ９．１においてＡＲＲＡＹ＿ＷＲ＿ＡＤＤが初期化された後、ＲＥＰＢＵＦは、コントローラからのＲＥＰＢＵＦ＿ＥＮＡＢＬＥ信号をチェックする（ステップ９．２）。いったんＲＥＰＢＵＦ＿ＥＮＡＢＬＥが受信されると、ＲＥＰＢＵＦはＡＲＲＡＹ＿ＲＤ＿ＡＤＤに格納されたバイトを出力する。ステップ９．３において、ＲＥＰＢＵＦは、ＡＲＲＡＹ＿ＲＤ＿ＡＤＤが置換文字列の最後のバイトを指示しているか否かをチェックする。指示していなければ、ＡＲＲＡＹ＿ＲＤ＿ＡＤＤはインクリメントされて、次のバイトが出力される（ステップ９．６から９．３へ戻る。）。ＡＲＲＡＹ＿ＲＤ＿ＡＤＤが置換文字列の最後のバイトへ到達すると、ＲＥＰＢＵＦ＿ＤＯＮＥ（ＣＳ１４）がアサートされ、コントローラには、置換文字列の全体が出力済みであることが通知され（ステップ９．５）、ＡＲＲＡＹ＿ＲＤ＿ＡＤＤはその初期値へリセットされる。
【００７１】
図８に戻ると、ＲＥＰＢＵＦ＿ＥＮＡＢＬＥがアサートされかつＭＵＸ＿ＳＥＬＥＣＴがアサートされてＳ８がＳ１０へ送信された後、コントローラはＲＥＰＢＵＦからのＲＥＰＢＵＦ＿ＤＯＮＥ信号を待機する（ステップ８．１９）。いったんＲＥＰＢＵＦ＿ＤＯＮＥが受信されると、コントローラは、データパスによって処理される次のバイトを決定する。上記次のバイトは、一致した文字列の最後のバイトの直後のバイトになる。コントローラは、ＦＩＦＯ  Ｂの先頭からＥＮＤ＿ＡＤＤを読み出し（ステップ８．２０）、ＤＢ＿ＲＤ＿ＡＤＤ及びＢＹＴＥ＿ＰＯＳ＿ＯＵＴを、ＥＮＤ＿ＡＤＤにおける値に等しく設定して（ステップ８．２１）ステップ８．３に戻ることにより、この目的を達成する。
【００７２】
ＭＵＸから出力されるバイトのストリーム（Ｓ１０）は、ワードストリームに再変換されたときにおいて、ＳＲＬから出力される準備が完了する。このタスクは、バイト・ワード変換器（byte-to-word converter：ＢＷＣ）が実行する。図１０は、ＢＷＣによるこの動作を示す。コントローラは、ＢＷＣ＿ＥＮＡＢＬＥ信号（ＣＳ１６）によってＢＷＣの動作を制御する。ＢＷＣ内のカウンタは、受信される各バイトを追跡する。カウンタ値は０に初期化される（ステップ１０．１）。ＢＷＣはまた、１つのワードを完成するためにいくつのパディングバイトが必要であるのかを追跡する。例えば、ＢＷＣによって組み立てられているワードが、ペイロードの最後のワードになるはずのものであり、かつそのワードとして２バイトのみが受信されている場合には、そのワードを完成するためには２つのパディングバイトが必要になる。従って、パラメータＰＡＤＤＩＮＧ＿ＣＯＵＮＴは、ワードを充填するためにＢＷＣによりさらに必要とされるバイト数に係る、動作中の表示として使用される。ステップ１０．２では、ＰＡＤＤＩＮＧ＿ＣＯＵＮＴが（４−カウンタ値）に等しく設定される。ステップ１０．４において、ＢＷＣは、コントローラがＢＷＣ＿ＥＮＡＢＬＥ信号をアサートしているか否かをチェックする。アサートされていれば、ＢＷＣは、ＭＵＸの出力からバイトを（又は場合によってはコントローラからＳ１２を介してパディングバイトを）受信する（ステップ１０．４）。ステップ１０．５において、ＢＷＣは、カウンタ値が３に等しいか否かをチェックする。カウンタ値が３に等しい場合、ＢＷＣは、受信した現在のバイトがワードの最後のバイトであることを認識する。この状況では、現在のバイトと、ＢＷＣによって格納されているはずの他の３バイトとは、ＢＷＣの出力へ３２ビットワード（Ｓ１１）として送信される（ステップ１０．６）。また、ワードのバイトのうちのいずれもパディングバイトではないので、ＰＡＤＤＩＮＧ＿ＣＯＵＮＴは０に等しい。ＢＷＣはＰＡＤＤＩＮＧ＿ＣＯＵＮＴ信号（ＣＳ１７）をコントローラへ供給し、よって、コントローラは、パディングバイトが信号Ｓ１２を介してＢＷＣへ送信される必要があるか否かを決定することができる。ＢＷＣは、ステップ１０．６からステップ１へ戻り、カウンタをリセットする。
【００７３】
ステップ１０．５においてカウンタが３に等しくない場合には、ＢＷＣは、ステップ１０．７において、受信されたバイトを内部アドレスＢＷＣ＿ＡＤＤに格納する。ここで、ＢＷＣ＿ＡＤＤはカウンタ値に等しい。この後、カウンタ値はインクリメントされ（ステップ１０．８）、ＢＷＣはステップ２へ戻る。
【００７４】
図１１は、コントローラが、パディングバイトがＢＷＣへ供給される必要があるか否かを決定するためにＢＷＣからのＰＡＤＤＩＮＧ＿ＣＯＵＮＴ信号をどのように処理するのかを示す。ステップ１１．１において、コントローラはＢＷＣからＰＡＤＤＩＮＧ＿ＣＯＵＮＴを受信し、ステップ１１．２において、コントローラはパラメータＴＲＡＣＫ＿ＰＡＤＤＩＮＧをＰＡＤＤＩＮＧ＿ＣＯＵＮＴに等しく設定する。この後、コントローラは、ＢＷＣによって構築されているワードがパケットのペイロードの最後のワードになるはずのものであるか否かをチェックする（ステップ１１．３）。置換処理に起因して、ペイロードのバイト長は変更される可能性があり、これにより、結果的に、ペイロードの最後のワードを充填するためにパディングバイトを使用することが必要になる場合がある。構築されているワードがペイロードの最後のワードになるはずのものであれば、コントローラは、ステップ１１．４において、ＴＲＡＣＫ＿ＰＡＤＤＩＮＧが０より大きいか否かをチェックする。０より大きければ、ステップ１１．５においてパディングバイトがＢＷＣへ送られ（Ｓ１２）、ＴＲＡＣＫ＿ＰＡＤＤＩＮＧはデクリメントされ（ステップ１１．６）、コントローラはステップ１１．４へ戻る。ステップ１１．４を実行した結果、ＴＲＡＣＫ＿ＰＡＤＤＩＮＧが０に等しいと決定される場合、パディングバイトは不要であってコントローラはステップ１１．１へ戻る。
【００７５】
また、文字列の置換処理により、結果的に、パケットのヘッダ及びトレーラを変更することが必要となる可能性がある。コントローラは、ヘッダ及びトレーラに必要な変更を加えるように構成される。Ｓ１１を介してＢＷＣから出力されるワードはプロトコルラッパー装置１０２へ送信され、最終的に出力される。発信するワードに関する制御ビットは、コントローラにより信号Ｓ１３としてアサートされ、プロトコルラッパー装置１０２に送信される。
【００７６】
以上、パケット処理モジュールについて説明したが、次に、これを実装するハードウェアに注目して説明する。パケットプロセッサのための好適なプラットフォームは、ワシントン・ユニバーシティのフィールドプログラマブルポートエクステンダ（ＦＰＸ）である。しかしながら、ＰＬＤに異なるモジュールを再プログラミングする能力を有するサポート装置を備えたＰＬＤを含むプラットフォームであれば、本発明は代替のプラットフォーム上にも実装可能であるということは留意される必要がある。
【００７７】
ＦＰＸプラットフォームに関する詳細は、当該技術において公知である。例えば、ジョン・ロックウッドほか，「フィールドプログラマブルポートエクステンダ（ＦＰＸ）上の再プログラミング可能なネットワークパケット処理」，フィールドプログラマブルゲートアレイに関するＡＣＭ国際シンポジウム（ＦＰＧＡ２００１），カリフォルニア州モントレー，２００１年２月１１−１２日（Lockwood, John et al., "Reprogrammable Network Packet Processing on the Field Programmable Port Extender (FPX)", ACM International Symposium on Field Programmable Gate Arrays (FPGA 2001), Monterey, CA, February 11-12, 2001）を参照されたい。また、ジョン・ロックウッド，「発展可能なインターネットハードウェアプラットフォーム」，発展可能なハードウェアに関するＮＡＳＡ／ＤｏＤワークショップ（ＥＨＷ’０１），カリフォルニア州ロングビーチ，２００１年７月１２−１４日，２７１−２７９ページ（Lockwood, John, "Evolvable Internet Hardware Platforms", NASA/DoD Workshop on Evolvable Hardware (EHW '01), Long Beach, CA, July 12-14, 2001, pp. 271-279）と、ジョン・ロックウッドほか，「分散型ルーティング及びキューイングのためのフィールドプログラマブルポートエクステンダ（ＦＰＸ）」，フィールドプログラマブルゲートアレイに関するＡＣＭ国際シンポジウム（ＦＰＧＡ２０００），カリフォルニア州モントレー，２０００年２月，１３７−１４４ページ（Lockwood, John et al., "Field Programmable Port Extender (FPX) for Distributed Routing & Queuing", ACM International Symposium of Field Programmable Gate Arrays (FPGA 2000), Monterey, CA, February 2000, pp. 137-144）とを参照されたい。これらの開示内容は、参照によりここに含まれる。図１２に、ＦＰＸの図を示す。ＦＰＸ１２０の主要な構成要素は、再プログラミング可能なアプリケーション装置（Reprogrammable Application Device：ＲＡＤ）１２２と、ネットワークインタフェース装置（Network Interface Device：ＮＩＤ）１２４である。
【００７８】
ＲＡＤ１２２は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。好適なＦＰＧＡは、カリフォルニア州サンホゼのザイリンクス・コーポレイション（Xilinx Corp.）によって製造されたザイリンクスＸＣＶ  １００Ｅ（Xilinx XCV 100E）である。しかしながら、本発明のパケット処理モジュールを取り扱うのに十分なゲートを上に有するＦＰＧＡであれば、いずれも適切であろう。ＲＡＤ１２２には、図３乃至図１１に関連して説明したパケット処理モジュールがプログラミングされる。ある好適な実施形態では、ＲＡＤ１２２には２つのモジュールがプログラミングされ、その一方が、着信するトラフィック（回線カードからスイッチへ送られるデータ）を処理し、もう一方が、発信するトラフィック（スイッチから回線カードへと戻されるデータ）を処理することが可能である。着信及び発信処理に関しては、１組のＳＲＡＭ及びＳＤＲＡＭが、データの着信時に当該データをバッファリングするために使用されるとともに、もう一方のＳＲＡＭ及びＳＤＲＡＭバッファが、データの発信時に当該データをバッファリングする。しかしながら、ＲＡＤ１２２には、ＦＰＧＡ上のゲート数に依存して任意個数のモジュールが実装されることが可能であるということは留意されるべきである。
【００７９】
ＮＩＤ１２４は、（スイッチ又は回線カードのいずれかから着信する可能性がある）着信するトラフィックを認識して適切なモジュールへルーティングし、かつ（スイッチ又は回線カードのいずれかへ発信される可能性がある）発信するトラフィックを認識して適切な出力へルーティングすることにより、ＲＡＤと外界とのインターフェースをとる。ＮＩＤもまたＦＰＧＡであることが好適であるが、必ずしもそうである必要はない。ＮＩＤ１２４のもう１つのタスクは、ＲＡＤのプログラミングを制御することである。パケットスキャナに新たなモジュールを再プログラミングするために再構成装置がパケットプロセッサへ構成情報を送信する場合、ＮＩＤ１２４は、その構成情報が中に存在しているパケットに再構成装置が包含させるヘッダを読み出すことにより、その構成情報を構成情報として認識する。ＮＩＤが構成情報を受信すると、その構成情報はＲＡＤプログラミングＳＲＡＭ１２６に格納される。いったんＮＩＤがすべての構成情報をＲＡＤプログラミングＳＲＡＭに格納すると、ＮＩＤは、ＳＲＡＭ１２６に格納された構成情報によって定義されたモジュールをＲＡＤに再プログラミングするようにＮＩＤに命令する、再構成装置からの命令パケットを待機する。いったんその命令パケットを受信すると、ＮＩＤは、ＳＲＡＭ１２６から構成情報を読み出し、かつこれをＦＰＧＡの再構成ポートへ書き込むことにより、構成情報をＲＡＤへロードする。
【００８０】
ＦＰＸが本発明と共用されることを望ましいものにするＦＰＸのもう１つの特徴は、ＲＡＤが既存のモジュールによってなおタスクを実行する能力を有しながら、ＦＰＸがＲＡＤを部分的に再プログラミングする能力を有するということにある。ＦＰＸは、ＲＡＤ上の論理回路の一部のみをプログラミングするように指定するコマンドを構成ストリームが含むことを許容することによって、ＲＡＤの部分的な再プログラミングをサポートする。ＮＩＤは、装置を再初期化するコマンドを発行する代わりに、単にＲＡＤの再プログラミングポートに構成情報のフレームを書き込む。こうして、ＲＡＤ上の既存のモジュールは、部分的な構成を行う間も、パケットの処理を継続することができる。
【００８１】
図１３に、本発明の再構成装置の概要を示す。再構成装置の主要な構成要素は、ユーザからの入力を受信して、この入力より、パケットプロセッサの再プログラミングに使用される構成情報を生成するコンパイラと、構成情報をネットワークを介してパケットプロセッサへ伝送する送信機とである。再構成装置は、好適には、ネットワークに接続された汎用コンピュータ上に実装され、ここで、コンパイラは好適にはコンピュータ上に存在するソフトウェアであり、送信機は、同じくコンピュータ上に存在するネットワークインタフェースを利用する。しかしながら、当業者は、代替の実装を容易に認識することができるであろう。
【００８２】
本発明に係るコンパイラは、再プログラミング可能なパケットプロセッサをユーザが最小の努力で再プログラミングできるようにする強力なツールである。ユーザが行う必要のあることは、データパターン及び動作コマンドをコンパイラに提供することだけであり、コンパイラは、モジュールを設計しかつそのモジュールのパケットプロセッサへのプログラミングに必要な構成情報を生成するという集中的なタスクを自動化する。この能率化された処理は、高速パケットスキャナを再プログラミングする際に、当該技術において以前は知られることのなかった柔軟性をもたらす。
【００８３】
コンパイラは、入力として、ユーザから２つのアイテム、すなわち（１）パケットがスキャンされる際の対象となるデータパターンを定義する正規表現と、（２）一致した文字列を有するパケットが発見された場合にパケットプロセッサがどのように応答すべきかを指定する動作コマンドとを受信する。この入力情報に基づいて、コンパイラは、図５における２つの動的な構成要素（コンポーネント）であるパターンマッチング状態マシン（ＲＥＦＳＭ）及び置換バッファ（ＲＥＰＢＵＦ）を生成する。ＲＥＦＳＭは、そこに適用されるデータが、ユーザによって指定されたデータパターンに一致する文字列を含むか否かを決定するように調整され、動作コマンドが文字列置換動作を指定する場合、ＲＥＰＢＵＦは、コントローラによって起動されたときに、ユーザによって指定された文字列置換コマンドに従って置換文字列を出力するように調整される。
【００８４】
またコンパイラは、図３乃至図５における静的な構成要素（コンポーネント）であって、メモリに格納された構成要素（プロトコルラッパー装置、類似した一対のワードバッファＭＢ及びＤＢ、ワード・バイト変換器ＷＢＣ１及びＷＢＣ２、コントローラ、ＭＵＸ、及びバイト・ワード変換器ＢＷＣ）のＶＨＤＬ表現を検索して読み出す。コンパイラは、動的に生成されたコンポーネントと静的なコンポーネントとを統合して、パケット処理モジュールの論理的表現（好適にはＶＨＤＬ表現）を生成する。当該技術分野において利用可能なＦＰＧＡ合成ツールは、モジュールのＶＨＤＬ表現を、ＦＰＧＡにモジュールをプログラミングするように動作可能なビットマップに変換することができる。モジュールのビットマップは、ネットワークを介してパケットプロセッサへ送信されるべき構成情報として利用される。
【００８５】
送信機は、構成情報がネットワークを介してパケットプロセッサへ伝送されうるように、当該構成情報をパケット化して動作する。コンピュータネットワークで伝送するためのデータのパケット化は当該技術において公知であり、ここで繰り返す必要はない。しかしながら、送信機は、これらのパケットが構成情報を含むものであるとパケットプロセッサに認識させる（よって、パケットプロセッサは、その構成情報を使用して当該パケットプロセッサ自体を再プログラミングすることができる。）構成情報を含む情報を、パケットのヘッダに包含させる必要があるということは留意されるべきである。
【００８６】
図１４は、本発明に係るコンパイラの動作を示す。ステップ１４．１において、コンパイラはユーザからＮラインの入力を受信する。この入力は、キーボード等の入力装置を介してユーザから直接に到来する場合もあれば、ウェブインタフェースを介してユーザから間接的に到来する場合もあり、又は追加のソフトウェアによってユーザから間接的に到来する場合もある。入力の各ラインｋは、異なるデータパターン及び動作コマンドを指定することが可能である。好適には、この入力は、ＲＥ及びａｗｋのフォーマットで提供される。付録Ａには、ユーザがコンパイラへ提供することができる入力の例が含まれている。付録Ａに示す例は検索及び置換動作であって、ここでは、（ＲＥによって定義された）データパターンは「ｔ．＊ｔ」であり、置換文字列は「ｔｈｉｓ  ｉｓ  ａ  ｔｅｓｔ」であるコンパイラは、この入力に基づいて、パターン「ｔ．＊ｔ」に一致するパケット内の文字列を検出してこの文字列を「ｔｈｉｓ  ｉｓ  ａ  ｔｅｓｔ」で置換するように動作可能なモジュールを定義する構成情報を生成する。
【００８７】
ＢｕｉｌｄＡｐｐと呼ばれる高水準のスクリプトがコンパイラによって実行され、構成情報の生成が開始される。付録Ａには、ＢｕｉｌｄＡｐｐのコードも含まれている。ステップ１４．２乃至１４．１０は、ＢｕｉｌｄＡｐｐによって実行される。ステップ１４．２においてインデックスｋが１に初期化された後、コンパイラは、パターンマッチング状態マシン（ＲＥＦＳＭ）及び文字列置換マシン（ＲＥＰＢＵＦ）の生成を開始する。
【００８８】
ＲＥＦＳＭの自動化された生成において本発明により使用される重要なツールは、字句解析器生成器である。字句解析器生成器は、正規表現を受信し、これに基づいてパターンマッチング状態マシンの論理的表現を生成するために実行可能な力強いツールであり、ここで、上記パターンマッチング状態マシンは、上記正規表現によって定義されたデータパターンに一致する文字列を、入力されたストリームが含むか否かを決定するように動作可能である。字句解析器生成器は当該技術において既知であり、本発明者らは、ＪＬｅｘとして知られる字句解析器生成器が、本発明と関連した使用のために優れた字句解析器生成器であることを発見している。ＪＬｅｘはエリオット・ジョエル・バーク（Elliot Joel Berk）によって開発され、公開されて利用可能なソフトウェアであり、インターネットを介してウェブサイトhttp://www.cs.princeton.edu/-appel/modern/java/JLex/から入手可能である。
【００８９】
ステップ１４．３において、コンパイラは、ユーザ入力のラインｋを、字句解析器生成器によって読み取り可能なフォーマットに変換し、パターンマッチング状態マシンの論理的表現を生成する。好適には、字句解析器生成器としてＪＬｅｘが使用される場合、ステップ１４．３は、入力のラインｋを、ＪＬｅｘによって使用されるフォーマットへ変換するように動作する。このタスクを実行する際には、ＢｕｉｌｄＡｐｐによってＣｒｅａｔｅＲｅｇＥｘと呼ばれるスクリプトが呼び出される。付録Ａには、ＣｒｅａｔｅＲｅｇＥｘのコードが含まれている。付録Ａはまた、ＲＥ入力が「ｔ．＊ｔ」である上記例におけるＣｒｅａｔｅＲｅｇＥｘの出力を含む。
【００９０】
ステップ１４．４では、字句解析器生成器が動作され、ユーザ入力のラインｋにおいて発見された正規表現により定義されたデータパターンに対して調整されている、パターンマッチング状態マシン（ＲＥＦＳＭ）の表現が生成される。字句解析器生成器としてＪＬｅｘが使用されれば、ＪＬｅｘはＲＥＦＳＭのＪａｖａ（登録商標）表現を生成する。付録Ａはさらに、例示的なＲＥ「ｔ．＊ｔ」に対するパターンマッチング状態マシンのＪａｖａ（登録商標）表現を含む（ｊｌｅｘ＿ｉｎ．ｊａｖａ）。
【００９１】
従って、ステップ１４．５では、ＲＥＦＳＭのＪａｖａ（登録商標）表現をパターンマッチング状態マシンのＶＨＤＬ表現に変換する追加の動作が必要になる。ＳｔａｔｅＧｅｎと呼ばれるスクリプトは、ＪＬｅｘの出力（ｊｌｅｘ＿ｉｎ．ｊａｖａ）を構文解析して、パターンマッチング状態マシンのＶＨＤＬ表現を生成する。ＳｔａｔｅＧｅｎもまた付録Ａに含まれている。ＳｔａｔｅＧｅｎによって生成されたＶＨＤＬエンティティは、ＲｅｇＥｘ＿ＦＳＭ｛ｋ｝．ｖｈｄ（ｋは、ＲＥＦＳＭが生成されたもととなったユーザ入力のラインである。）として保存される。付録Ａはまた、ＲＥが「ｔ．＊ｔ」である例から作成されたパターンマッチング状態マシンのＶＨＤＬコードを含む（ＲｅｇＥｘ＿ＦＳＭ１．ｖｈｄ）。
【００９２】
ステップ１４．６において、コンパイラは、ユーザ入力のラインｋから置換バッファ（ＲＥＰＢＵＦ）のＶＨＤＬ表現を生成する。ＲｅｐｌａｃｅＢｕｆＧｅｎと呼ばれるスクリプト（付録Ａを参照）は、置換バッファの生成を制御する。置換バッファのＶＨＤＬ表現は、図８に関連して説明した通りに動作する。付録Ａはまた、置換文字列が「ｔｈｉｓ  ｉｓ  ａ  ｔｅｓｔ」である上記例におけるＲＥＰＢＵＦのＶＨＤＬコードを含む。
【００９３】
ユーザ入力のラインｋ＝１に関する動的なコンポーネントが生成された後、ステップ１４．７において、コンパイラは、入力の他のラインが存在するか否かをチェックする。存在すれば、コンパイラはステップ１４．８に進んでｋをインクリメントし、次いでステップ１４．３乃至１４．６へループして戻る。いったんユーザ入力のＮ個のラインのすべてについて動的なコンポーネントが生成されると、コンパイラはＮ個のＲＥＦＳＭ及びＮ個のＲＥＰＢＵＦのすべてに係るＶＨＤＬ表現を有している。
【００９４】
次にステップ１４．９において、コンパイラは、ＢｕｉｌｄＡｐｐスクリプトを用いて、検索及び置換論理回路（ＳＲＬ）に係る静的なコンポーネント及び動的なコンポーネントのすべての間における相互接続と、それらの間で伝送される信号とを定義する。ＳＲＬの静的なコンポーネントのＶＨＤＬ表現は、コンパイラによってアクセスされることが可能なメモリに格納される。付録Ａは、これらの静的なコンポーネントのＶＨＤＬコード（（コントローラ、ワード・バイト変換器、及びＭＵＸを包含する）ｃｏｎｔｒｏｌｌｅｒ．ｖｈｄと、（ワードバッファを包含する）ｃｈａｒａｃｔｅｒ．ｂｕｆ．ｖｈｄと、（バイト・ワード変換器を定義する）ｗｒｄ＿ｂｌｄｒ．ｖｈｄ）を含む。ＳＲＬサブモジュールのＶＨＤＬ表現は、付録ＡにＲｅｇＥｘ＿Ａｐｐ．ｖｈｄとして挙げられている。さらに、コンパイラは、ＢｕｉｌｄＡｐｐスクリプトを用いて、様々なラッパー装置とＳＲＬとの間の相互接続と、それらの間で伝送される信号とを定義して、パケットスキャンモジュールのＶＨＤＬ表現を生成する。ラッパー装置のＶＨＤＬコードも同じく、コンパイラによってアクセスされることが可能なメモリに格納される。付録Ａはラッパー装置のＶＨＤＬコードを含み、かつ付録Ａは結果として得られるパケットスキャンモジュールのＶＨＤＬコードを含む（ｒｅｇｅｘ＿ｍｏｄｕｌｅ．ｖｈｄ）。
【００９５】
次にステップ１４．１０において、コンパイラは、ＢｕｉｌｄＡｐｐを用いて、モジュールに係るすべての動的なコンポーネント及び静的なコンポーネントのＶＨＤＬ表現に対するファイル名のリストを含むプロジェクトファイルを生成する。ＢｕｉｌｄＡｐｐは、ＭａｋｅＰｒｏｊｅｃｔという名称のスクリプトを呼び出してこのタスクを実行する。ＭａｋｅＰｒｏｊｅｃｔは付録Ａに含まれ、その出力ファイルＲｅｇＥｘ＿Ａｐｐ．ｐｒｊもまた同様に付録Ａに含まれる。
【００９６】
さらにステップ１４．１１において、コンパイラは、プロジェクトファイルに列挙された複数のコンポーネントを合成し、モジュールのバックエンド表現を生成する。このタスクのために、当該技術において既知の合成ツールを使用可能であり、本発明者らは、カリフォルニア州サニーベールのシンプリシティ・インコーポレイテッド（Synplicity, Inc.）からの合成ツールである、シンプリシティ・シンプリファイ・プロ（Synplicity Synplify Pro）が甚だ適しているということを発見している。シンプリシティ・シンプリファイ・プロは、http://www.synplicity.comにおいてオンラインで入手することができる。合成ツールによって生成されたバックエンドのモジュール表現は、次に、再プログラミング可能なハードウェアのためのバックエンド変換ツール（好適には、ザイリンクスのバックエンド変換ツール等のＦＰＧＡ変換ツール）へ提供され、パケットスキャンモジュールを再プログラミング可能なハードウェアへプログラミングするように作用することが可能なビットマップが生成される。このビットマップは、パケットスキャナのＰＬＤへプログラミングされるモジュールを定義する構成情報であり、後にネットワークを介してパケットスキャナへ送信されることが可能である。
【００９７】
以上、本発明をその好適な実施形態に関連して説明してきたが、当業者には認識されるであろうが、本発明には、本発明の範囲になお包含される様々な変更を加えることが可能である。
【００９８】
例えば、本発明に係るパケット処理システムでは、その環境はコンピュータネットワークであり、それが処理するデータストリームは、ネットワークを介して送信されるデータパケットのストリームであるものとして説明されている。しかしながら、必ずしもこうである必要はない。本発明に係るパケット処理システムは、そのソースが何であるかに関わらず、任意のデータストリームを処理するために使用可能である。例えば、本発明は、ディスクドライブ、テープドライブ、パケット無線、衛星受信機、光ファイバケーブル、又はこのような他の媒体等のデータソースから読み出されているストリーミングデータを処理するために使用可能である。
【００９９】
また、以上説明したパケット処理モジュールによって使用されるＳＲＬは、ペイロードバイトをスキャンするために単一のＲＥＦＳＭを使用した。ＳＲＬの動作の速度を上げるためには、同一のデータパターンがキーとしてそれぞれ設定された、複数のＲＥＦＳＭを並列に実装することが可能である。図１３は、ＳＲＬのマッチングパス１１０が並列な複数のＲＥＦＳＭを如何にして実装できるかということを示している。各ＲＥＦＳＭは、異なるバイトから開始されるバイトストリームを処理するために使用可能である。バイトストリーム｛Ｂ１，Ｂ２，…，ＢＮ，…，ＢＭ｝の場合、コントローラは、バイトストリーム｛Ｂ１，…，ＢＭ｝がＲＥＦＳＭ（１）へ供給されるようにＭＢ＿ＲＤ＿ＡＤＤ（１）及びＷＢＣ１＿ＳＥＬＥＣＴ（１）を起動し、バイトストリーム｛Ｂ２，…，ＢＭ｝がＲＥＦＳＭ（２）へ送信されるようにＭＢ＿ＲＤ＿ＡＤＤ（２）及びＷＢＣ１＿ＳＥＬＥＣＴ（２）を起動し、バイトストリーム｛Ｂ３，…，ＢＭ｝がＲＥＦＳＭ（３）へ送信されるようにＭＢ＿ＲＤ＿ＡＤＤ（３）及びＷＢＣ１＿ＳＥＬＥＣＴ（３）を起動し、以下同様にＮ個のＲＥＦＳＭに対して処理することができる。この構成では、バイト２で始まる潜在的に一致した文字列を他のＲＥＦＳＭがすでに処理しつつあるので、バイト１で始まる不一致文字列を処理することで時間を浪費することはない。コントローラは、２つ以上のＲＥＦＳＭが一致を検出する状況を考慮するように変更されることが可能である。例えば、ＲＥＦＳＭ（１）が文字列｛Ｂ１，Ｂ２，…，Ｂ６｝に関して一致を発見し、かつＲＥＦＳＭ（２）が文字列｛Ｂ２，Ｂ３，…，Ｂ６｝に関して一致を発見している場合、コントローラは、一致した最長の文字列（すなわち、Ｂ１，Ｂ２，…，Ｂ６｝）を選択するように設計されることが可能である。
【０１００】
また、図１５における並列な各ＲＥＦＳＭには、異なるデータパターンがキーとして設定されることが可能である。各ＲＥＦＳＭには同じバイトストリームが供給されることが可能であり、コントローラは各ＲＥＦＳＭ＿ＳＴＡＴＵＳ信号を処理して、データストリーム内にどのデータパターンが存在しているのかを決定することができる。
【０１０１】
さらに、説明してきたパケットプロセッサでは、一致が発見されたときにそれによって実行される動作は、直線的な置換動作であった。しかしながら、広範囲にわたる追加の動作もまた容易に実装されることが可能である。一致した文字列を置換する代わりに、プロセッサは、一致した文字列を含むパケットを処理モジュールから出力しないことによって、このようなパケットを廃棄するように構成されることが可能である。また処理論理回路のデータパスは、一致した文字列が発見されたとき、関心が持たれた相手先装置に対してアドレス指定された通知パケットを出力するように構成されることが可能である。このような通知パケットは、一致した文字列を含むパケットのコピーを含んでいてもよい。また、本発明では、パケットプロセッサが、一致が生じていることを識別するだけでなく、一致した文字列とともに、文字列の一致する対象であるデータパターンを識別するので、このような情報は、データ文字列に関する統計情報を収集するために使用可能である。データストリームのコンテンツをモニタリングする統計記録装置に対して、適切な信号が伝送されることが可能である。
【０１０２】
またさらに、直線的な代入動作よりも後退代入動作が所望される場合（後退代入動作では、置換文字列は、一致した文字列の少なくとも１つのコピーを含む。）、図８のアルゴリズムは図１６に従って変更されることが可能である。図１６は、図８のステップ８．１７から分岐したものである。後退代入では、置換文字列は、一致した文字列がデータストリームに挿入されるべきであることを示すバイトを含む。このバイトがＲＥＰＢＵＦから出力されるとき、コントローラはＲＥＰＢＵＦを固定し、ＤＢから一致した文字列を読み出して、ＷＢＣ２及びＭＵＸ出力へ伝送する。一致した文字列がいったんデータストリームへ挿入されると、コントローラはＲＥＰＢＵＦを再起動して、置換文字列の出力を継続させる。
【０１０３】
また、ＳＲＬ１０４のマッチングパスは、ＷＢＣ１の出力とＲＥＦＳＭの入力との間に大文字／小文字変換器（ケース変換器）を追加することにより、大文字と小文字を区別しないように構成されることが可能である（大文字は小文字と同様に処理される。）。大文字／小文字変換器は、着信した各バイトを、ＲＥＦＳＭが調整されている対象であるデータパターンの文字ケースに一致した共通の文字ケース（すべて大文字か、又はすべて小文字かのいずれか）に変換するように動作可能である。例えば、文字ケースの違いに応答しないことが所望され、かつＲＥＦＳＭがすべて大文字で定義されたデータパターンによって調整されている場合、大文字／小文字変換器はストリーム「ａｂｃＤｅｆｇｈＩＪＫｌｍ」をストリーム「ＡＢＣＤＥＦＧＨＩＪＫＬＭ」に変換する。
【０１０４】
さらに、説明したパケットプロセッサは、回線カードとパケットスイッチとの間のインターフェースをとるＦＰＸ上のスタンドアロン型装置として実装されたものであった。しかしながら、当業者は、再プログラミング可能なパケットプロセッサが、任意のネットワーク処理装置（パケットスイッチ等）の内部構成要素として実装されてもよいということを容易に認識するであろう。
【０１０５】
またさらに、本発明に係るパケットプロセッサは、インターネットのような、又は無線ＬＡＮを含む様々なローカルエリアネットワーク（ＬＡＮ）のような、すべての方式のネットワークとともに使用されることが可能である。例えば、パケットプロセッサには、無線データを送受信する無線送受信機（トランシーバ）が設けられることが可能であり、これにより、パケットプロセッサと無線ネットワークとが一体化される（無線送受信機は当該技術において既知である。）。
【０１０６】
ここに教示した内容を精査すれば、好適な実施形態に対するこれらの変更及び他の変更を認識することができるであろう。従って、本発明の完全な範囲は、上述の詳細な説明と、添付の図面と、付録とに鑑みて、添付の請求の範囲により定義されるべきものである。
【実施例１】
【０１０７】
付録Ａ
*Character Set（文字セット）
*SNRList
*BuildApp
*jlex_in
*jlex_in.java
*CreateRegEx
*StateGen
*ReplaceBufGen
*regex_app.vhd
*replace_bufl.vhd
*controller.vhd
*wrd_bldr.vhd
*character_buf.vhd
*regex_fsml.vhd
*rad_loopback_core.vhd
*rad_loopback.vhd
*loopback_module.vhd
*blink.vhd
*regex_module.vhd
*MakeProject
*regex_app.prj
【０１０８】
Character Set
【０１０９】
【表１】
2005527042.tif 000003
【０１１０】
【表２】
2005527042.tif 000004
【０１１１】
【表３】
2005527042.tif 000005
【０１１２】
SNRList
【０１１３】
【表４】
2005527042.tif 000006
【０１１４】
BuildApp
【０１１５】
【表５】
2005527042.tif 000007
【０１１６】
【表６】
2005527042.tif 000008
【０１１７】
【表７】
2005527042.tif 000009
【０１１８】
【表８】
2005527042.tif 000010
【０１１９】
【表９】
2005527042.tif 000011
【０１２０】
【表１０】
2005527042.tif 000012
【０１２１】
jlex_in
【０１２２】
【表１１】
2005527042.tif 000013
【０１２３】
jlex_in.java
【０１２４】
【表１２】
2005527042.tif 000014
【０１２５】
【表１３】
2005527042.tif 000015
【０１２６】
【表１４】
2005527042.tif 000016
【０１２７】
【表１５】
2005527042.tif 000017
【０１２８】
【表１６】
2005527042.tif 000018
【０１２９】
CreateRegEx
【０１３０】
【表１７】
2005527042.tif 000019
【０１３１】
【表１８】
2005527042.tif 000020
【０１３２】
StateGen
【０１３３】
【表１９】
2005527042.tif 000021
【０１３４】
【表２０】
2005527042.tif 000022
【０１３５】
【表２１】
2005527042.tif 000023
【０１３６】
【表２２】
2005527042.tif 000024
【０１３７】
【表２３】
2005527042.tif 000025
【０１３８】
【表２４】
2005527042.tif 000026
【０１３９】
【表２５】
2005527042.tif 000027
【０１４０】
【表２６】
2005527042.tif 000028
【０１４１】
ReplaceBufGen
【０１４２】
【表２７】
2005527042.tif 000029
【０１４３】
【表２８】
2005527042.tif 000030
【０１４４】
regex_app.vhd
【０１４５】
【表２９】
2005527042.tif 000031
【０１４６】
【表３０】
2005527042.tif 000032
【０１４７】
【表３１】
2005527042.tif 000033
【０１４８】
【表３２】
2005527042.tif 000034
【０１４９】
replace_bufl.vhd
【０１５０】
【表３３】
2005527042.tif 000035
【０１５１】
【表３４】
2005527042.tif 000036
【０１５２】
controller.vhd
【０１５３】
【表３５】
2005527042.tif 000037
【０１５４】
【表３６】
2005527042.tif 000038
【０１５５】
【表３７】
2005527042.tif 000039
【０１５６】
【表３８】
2005527042.tif 000040
【０１５７】
【表３９】
2005527042.tif 000041
【０１５８】
【表４０】
2005527042.tif 000042
【０１５９】
【表４１】
2005527042.tif 000043
【０１６０】
【表４２】
2005527042.tif 000044
【０１６１】
【表４３】
2005527042.tif 000045
【０１６２】
【表４４】
2005527042.tif 000046
【０１６３】
【表４５】
2005527042.tif 000047
【０１６４】
wrd_bldr.vhd
【０１６５】
【表４６】
2005527042.tif 000048
【０１６６】
【表４７】
2005527042.tif 000049
【０１６７】
【表４８】
2005527042.tif 000050
【０１６８】
character_buf.vhd
【０１６９】
【表４９】
2005527042.tif 000051
【０１７０】
【表５０】
2005527042.tif 000052
【０１７１】
regex_fsml.vhd
【０１７２】
【表５１】
2005527042.tif 000053
【０１７３】
【表５２】
2005527042.tif 000054
【０１７４】
【表５３】
2005527042.tif 000055
【０１７５】
【表５４】
2005527042.tif 000056
【０１７６】
【表５５】
2005527042.tif 000057
【０１７７】
【表５６】
2005527042.tif 000058
【０１７８】
【表５７】
2005527042.tif 000059
【０１７９】
【表５８】
2005527042.tif 000060
【０１８０】
【表５９】
2005527042.tif 000061
【０１８１】
【表６０】
2005527042.tif 000062
【０１８２】
rad_loopback_core.vhd
【０１８３】
【表６１】
2005527042.tif 000063
【０１８４】
【表６２】
2005527042.tif 000064
【０１８５】
【表６３】
2005527042.tif 000065
【０１８６】
rad_loopback.vhd
【０１８７】
【表６４】
2005527042.tif 000066
【０１８８】
【表６５】
2005527042.tif 000067
【０１８９】
【表６６】
2005527042.tif 000068
【０１９０】
【表６７】
2005527042.tif 000069
【０１９１】
loopback_module.vhd
【０１９２】
【表６８】
2005527042.tif 000070
【０１９３】
【表６９】
2005527042.tif 000071
【０１９４】
blink.vhd
【０１９５】
【表７０】
2005527042.tif 000072
【０１９６】
【表７１】
2005527042.tif 000073
【０１９７】
regex_module.vhd
【０１９８】
【表７２】
2005527042.tif 000074
【０１９９】
【表７３】
2005527042.tif 000075
【０２００】
【表７４】
2005527042.tif 000076
【０２０１】
【表７５】
2005527042.tif 000077
【０２０２】
【表７６】
2005527042.tif 000078
【０２０３】
【表７７】
2005527042.tif 000079
【０２０４】
【表７８】
2005527042.tif 000080
【０２０５】
MakeProject
【０２０６】
【表７９】
2005527042.tif 000081
【０２０７】
【表８０】
2005527042.tif 000082
【０２０８】
regex_app.prj
【０２０９】
【表８１】
2005527042.tif 000083
【図面の簡単な説明】
【０２１０】
【図１（ａ）】本発明に係るパケット処理システムの概要を示す図である。
【図１（ｂ）】本発明に係るパケットプロセッサの検索及び置換機能の例を示す図である。
【図２】本発明に係るパケット処理システムが高速コンピュータネットワーク内に実装されうる方法の概要を示す図である。
【図３】ＰＬＤへプログラミングされ、パケット処理機能を提供するように動作可能なモジュールの概要を示す図である。
【図４】ＰＬＤへプログラミングされ、パケット処理機能を提供するように動作可能なモジュールであって、２つ以上のデータパターンに関する検索及び置換機能の能力を有するモジュールの概要を示す図である。
【図５】指定されたデータパターンに一致する文字列を着信するデータが含むか否かを決定し、任意の一致した文字列を置換文字列で置換するように動作可能な検索及び置換論理回路を示す図である。
【図６】パケットと、そのパケットを含むワードのコンテンツとを示す図である。
【図７（ａ）】一致した文字列の開始位置及び終了位置をコントローラがどのように決定するのかを示すフローチャートである。
【図７（ｂ）】一致した文字列の開始位置及び終了位置をコントローラがどのように決定するのかを示すフローチャートである。
【図８】一致した文字列の置換文字列による置換を含む、コントローラがデータの出力をどのように制御するのかを示すフローチャートである。
【図９】置換バッファの動作を示すフローチャートである。
【図１０】バイト・ワード変換器の動作を示すフローチャートである。
【図１１】変更されたパケットのバイト長の変化をコントローラがどのように考慮するのかを示すフローチャートである。
【図１２】フィールドプログラマブルポートエクステンダ（ＦＰＸ）プラットフォームを示す図である。
【図１３】本発明に係る再構成装置の概要を示す図である。
【図１４】コンパイラの動作を示すフローチャートである。
【図１５】複数のパターンマッチング状態マシンが並列に動作する、検索及び置換論理回路のマッチングパスの実装を示す図である。
【図１６】データ変更動作が後退代入動作である場合にコントローラがデータの出力をどのように制御するのかを示すフローチャートである。
【図１（ａ）】
2005527042.tif 000084
【図１（ｂ）】
2005527042.tif 000085
【図２】
2005527042.tif 000086
【図３】
2005527042.tif 000087
【図４】
2005527042.tif 000088
【図５】
2005527042.tif 000089
【図６】
2005527042.tif 000090
【図７（ａ）】
2005527042.tif 000091
【図７（ｂ）】
2005527042.tif 000092
【図８】
2005527042.tif 000093
【図９】
2005527042.tif 000094
【図１０】
2005527042.tif 000095
【図１１】
2005527042.tif 000096
【図１２】
2005527042.tif 000097
【図１３】
2005527042.tif 000098
【図１４】
2005527042.tif 000099
【図１５】
2005527042.tif 000100
【図１６】
2005527042.tif 000101
【国際調査報告】
2005527042.tif 000102
2005527042.tif 000103