本発明は、添付図面を参照することによって、より良好に理解することができるとともに、その多くの目的、特徴、および優位性を当業者に対して明らかにすることができる。異なる図面においても同じ参照符号を用いて、同様のまたは同一の物品を表す。
以下の説明は、本発明の少なくとも1つの例についての詳細な説明を与えるためのものであり、本発明自体を限定するものと理解してはならない。むしろ、任意の数の変形を、この説明に添付される特許請求の範囲において適切に規定される本発明の範囲に含めることができる。
図1は、本発明の実施形態による情報処理および通信システム100を例示するブロック図である。システム100には、プロセッサ110、キャッシュ120、メモリ130、システム・バス140、周辺機器150、およびパケット・コントローラ160が含まれている。プロセッサ110、キャッシュ120、メモリ130、周辺機器150、およびパケット・コントローラ160はすべて、システム・バス140を介して結合されている。システム100は、イーサネット、ギグ・イーサネット(Gig-Ethernet)および/もしくはXギグ・イーサネット・コントローラ、またはそうでなければそれらと互換性のものであっても良く、およびネットワーク・スイッチもしくはルータ、またはネットワーク内で通信するための他の形式の装置であっても良い。
パケット・コントローラ160には、バス・インターフェース・ユニット(BIU:Bus Interface Unit)170、受信部180、送信部185、およびメディア・アクセス・コントローラ(MAC:Media Access Controller )190が含まれている。バス・インターフェース・ユニット170は、システム・バス140に結合されている。バス・インターフェース・ユニット170は、接続部172を介して受信部180に結合され、接続部174を介して送信部185に結合されている。MAC190は、接続部192を介して受信部180に結合され、接続部194を介して送信部185に結合されている。MAC190は、物理層ハードウェアに結合されていて、物理的な(PHY)接続部198を介して他の装置からメッセージたとえばパケットを受信する。
メッセージは、MAC190において受信されて、受信部180に送られる。メッセージは、アドレス認識、ハッシング、パターン・マッチング、またはハッシングおよびパターン・マッチングに応じて、容認されることもあれば、容認されないこともある(たとえば、少なくとも図2〜9を参照して後述する)。容認されたメッセージからの情報は、メモリ130に送られる。パターン・マッチングによって、ある特定の情報が、プロセッサ110または他のシステム・リソースによる迅速なアクセスに特に適していると、識別されても良い。この場合、このような情報を、メモリ130に送る通常のメッセージ・データから取り出して、取り出したデータをキャッシュ120に隠蔽する(たとえば、少なくとも図2〜6および10〜11を参照して後述する)。
開示される送信先アドレス認識プロトコルによって、ポスト・フィルタリングに対する必要性が最小限になる。またこのプロトコルは、メディア・アクセス制御レベルで行なうことができ、より高いOSIレベルでさらなるソフトウェアおよびハードウェアを介入させる必要がない。アドレスのいくつかの組に対して、ユーザは、MACレベルにおいて完全なフィルタリングが得られるパターンの組を見出すことができる。完全なハッシュ−時間フィルタリングを保証するために、決定論的アルゴリズムを用いて必要なパターンを生成することができる。また開示されるプロトコルによって、パターン・マッチ検索が、送信先アドレス内だけでなく、容認されたフレーム全体を通して有効になるため、ハッシュ−時間フィルタリングの結果を精緻なものにすることができる。
メモリ130には、到着メッセージを記憶するためのフレーム・データ・バッファ134と、記憶したメッセージを追跡するためのバッファ記述子キュー132とが含まれている。これについては、後にさらに詳細に説明する。キャッシュ120には、1つまたは複数のバッファ記述子キュー122を記憶することができる記憶場所と、取り出したデータ124を、後にプロセッサ110が使用できるように隠蔽する(すなわち記憶する)ための記憶場所とが、含まれている。取り出すデータは、本明細書で説明するある特定のパターン・マッチング・プロトコルに従ってキャッシュ120に記憶するために、到着メッセージの通常のフレーム・データから取り出すデータである。取り出すデータは、たとえば、重要なデータ、サービス品質(QOS:Quality Of Service)レベルのデータ、またはアクセス時間を短くすることが望ましい場合がある優先度の高い他のデータであっても良い。メモリ130およびキャッシュ120は、プロセッサ110によりアクセス可能であり、またシステム100内の他の装置またはプロセッサ(図示せず)によりアクセス可能でさえあっても良い。
図2は、システム100のパケット・コントローラ160の受信部180を例示するブロック図である。受信部180には、直接メモリ・アクセス(DMA:Direct Memory Access)コントローラ210、受信FIFO220、およびアドレス/データ・フィルタ(ADF:Address/Data Filter )230が含まれている。ADF230は、MAC190からメッセージを受信するために、かつこのようなメッセージをFIFO220に選択的に送るために、結合されている。アドレス/データ・フィルタ230によって受信可能であるフレームを有する典型的なメッセージ・パケットについて、後に図3を参照して詳しく説明する。DMAは、メッセージ情報(たとえば、アドレスおよびデータ情報、メッセージ・フィルタ結果たとえばパターン・ステータス情報(これについては後述する))を、FIFOコントローラ222の制御の下で受信FIFO220から受信するために、結合されている。
ADF230には、一時的なキュー234、パターン・マッチング・ロジック232、アドレス認識およびハッシュ・ロジック238が含まれている。一時的なキュー234、パターン・マッチング・ロジック232、アドレス認識およびハッシュ・ロジック238はそれぞれ、MAC190からメッセージ(たとえばフレーム)を受信するために、結合されている。一時的なキュー234は、パターン・マッチング・ロジック232とアドレス認識およびハッシュ・ロジック238とからメッセージ・フィルタ結果情報を受信するために、かつフレーム(またはその一部)およびメッセージ・フィルタ情報を、受信FIFO220に、受信FIFO220に応答して送るために、結合されている。
パターン・マッチングおよびハッシング・ロジックを行なわないと、直接およびフル・アドレス比較を、すべての受信メッセージの送信先アドレスと、システム100またはシステム100がメッセージを容認するように構成される他のシステムのアドレスとの間で、行なわなければならなくなる。このようなフル・アドレス比較には通常、プロセッサ110を何らかの形で妨害することが伴う。なぜならば、比較は通常、ソフトウェアの制御の下で行なわれるからである。
しかし、例示する実施形態においては、パターン・マッチング・ロジック232およびハッシング・ロジック238が設けられていて、フル・アドレス比較を行なう頻度が減っており、その結果、プロセッサ110は他のタスクを自由に実行することができる。パターン・マッチング・ロジック232が、受信フレームに対してパターン・マッチング解析を行なうことで、パターン・マッチング結果に従ってフレームを選択的に容認することができる。パターン・マッチングは、パターン・マッチング(PM:Pattern Matching)レジスタ233に記憶される値(たとえば制御ビットまたはフィールド)の制御の下で行なわれる。ハッシング・ロジック238が受信フレームのアドレスに対してハッシング解析を行なうことで、ハッシュ・ヒットまたはミス結果に従ってフレームを選択的に容認することが可能となり、容認される確率が高いアドレスに対してフル・アドレス比較を行なう可能性がさらに高まる。
パターン・マッチング・ロジック232のPMレジスタ233には、16個のエントリが含まれている。各エントリには、5個の32ビット・レジスタが含まれている。図5を参照すると、各エントリには、パターン(PMデータ)、パターン・マスク(PMマスク)、およびパターン・マッチング制御(PM制御)フィールドが含まれている。パターン・マッチング制御フィールドには、マッチング・インデックス(MI:Matching Index)フィールド、連続検索有効(CSE:Continuous Search Enable)フィールド、反転(IV:Invert)フィールド、連結パターン(CP:Concatenate Pattern )フィールド、およびパターン・マッチ容認制御(PMAC:Pattern Match Acceptance Field)フィールドが、含まれている。
PMデータ・フィールドには、受信フレームと比較するためのビット・パターンが含まれている。PMデータ・ビット・パターン(たとえば4バイト・パターン)がフレーム内に見出された場合には、パターン・マッチが検出される。PMデータ・ビット・パターンがフレーム内に見出されない場合には、パターン・マッチは検出されない。PMデータ・フィールドは、例示した実施形態においては32ビットの長さである。PMマスク・フィールドには、比較が行なわれているときにパターン内のある特定のビットをマスキングするビットが含まれている。たとえば、PMマスクが適切に設定されているときには、フレームの一部におけるベンダ識別ビットを無視しても良い。
マッチング・インデックス(MI)フィールドは、受信フレームのどのくらい深いところで、パターン・マッチングを、対応するPMデータに対して開始するべきかを示す。たとえば、MIフィールドには6ビットが含まれて、検索開始範囲として0〜256ビットを示しても良い。一実施形態においては、MIによって、パターン・マッチングを開始するインデックスが、4バイトの倍数で、受信フレーム(DAフィールドからFCSまでを含む)の始まりから指定される。MIをクリアすると、送信先アドレスの最初の4バイトが、パターン・マッチングに対する開始点となる。MIに対する最大のプログラム値は、現在説明している実施形態では、63(252バイト・オフセット)である。各4バイト・パターンに対するMI値は、連続または非連続のパターンを可能にするときでさえ、受け付ける。
連続検索有効(CSE)フィールドは、マッチが見出されたときに取るべき動作の形式に影響を及ぼす。具体的には、CSEビットは、パターン・マッチが起きたら即座に動作を取るべきか、あるいはパターン・マッチが起きたらさらなるパターン・マッチ検索を行なうべきかを示す。CSEビットが設定されていると、エントリ上でマッチが起きた場合にパターン・マッチングを続けるべきであることを示す。たとえば、パターン・マッチが見出され、かつ連続検索が有効である場合には、パターン・マッチング・ロジック232は引き続き、PMレジスタ233の他のレジスタからのPMデータの他のマッチを検索することを、256バイトの最大値まで行なう。他のマッチが起きなかった場合には、マッチした最後のエントリに対応する属性を用いる。継続されるパターンはすべて、パターン・マッチングに基づく最終的な容認に対して拒否してはならない。たとえば、最初のパターン・マッチは、少なくとも条件付きで容認しなければならず、その後のパターンはすべて、容認するか、またはフレームを容認するために容認も拒否もしてはならない。その後のパターン・マッチの拒否が行なわれた場合、CSEの値は無視され、フレームは拒否され、検索は停止される。パターン・マッチが見出され、連続検索が無効(CSE=0)である場合には、他のすべてのパターンの検索がパターン・マッチング・ロジック232によって停止され、フレームが容認もしくは拒否されるか、あるいは特定のパターン・マッチが起きたという事実に基づいて他の判定がされる。
連結パターン(CP)フィールドでは、PMレジスタ233の各エントリにおいて利用可能なPMデータの32ビットを超える値を比較することができる。CPビットが設定されている場合には、現在のPMレジスタに続く隣接するPMレジスタ233は、このパターンの続きであるとみなされ、次のPMデータ・エントリは、現在のPMデータ・エントリに連結される。この場合、各PMデータ・エントリは、パターン・マッチが起きるフレーム内で見出されなければならないが、2組のマッチング・ビットは、それらの個々のMIに従ってフレーム内のどこにでも存在する可能性がある。CPビットが設定されていない場合には、パターンの連結は行なわれない。最後のPMレジスタ233のCPフィールドは、このフィールドに記憶されている値に関係なく、クリアされているとみなされる。CPが設定される最も低い数値PMレジスタ233には、パターン・マッチング制御と連結パターンに対して使用される属性情報(MI以外)とが含まれている。各連結パターンに対して、MIフィールドを適切な4バイトの倍数に設定して、すべてのパターンがフレームの最初の4バイトに対してマッチングを試みるようなことがないようにしなければならない(MIがクリアされた状態である場合)。
反転(IV)フィールドによって、フレームに対するパターンの比較を、真または補形式で行なうことができる。たとえば、反転が設定されていない場合(IV=0)、パターン・マッチが起きるのは、データ・マッチングが起きている(たとえば、受信フレーム内にPMデータが見出される)ときだけである。反転が設定されている場合(IV=1)、パターン・マッチが起きるのは、データ・マッチングが起きていない(たとえば、受信フレーム内にPMデータが見出されない)ときだけである。
PMACフィールドによって、フレームのフィルタリングが、パターン・マッチングに基づいて制御される。PMACには、以下のものを示す2ビットが記憶される。(i)対応するパターンに対するパターン・マッチングが有効であるか否か、(ii)対応するパターンに対してパターン・マッチングが有効であるならば、パターン・マッチングの効果をいったん達成させる。たとえば、PMACフィールドが00である場合には、特定のエントリに対するパターン・マッチングは無効であり、対応するパターンに対してパターン・マッチングは起きず、パターン・マッチング・ロジック232は次のPMレジスタ233内の次のパターンに自由に進める。PMACフィールドが00ではない場合、パターン・マッチングは有効である。PMACフィールドが11の場合、パターン・マッチが起きたらフレームを拒否する。PMACフィールドが10の場合、連続検索が無効ならば(CSE=0)、フレームを無条件に容認し、連続検索が有効ならば(CSE=1)、条件付きで容認する。PMACフィールドが01の場合、フレームを容認も拒否もしない。この場合、パターンは、マッチが起きたときにフレームを容認または拒否するために用いられる基準ではなく、パターン・マッチ結果に関して後処理を行なうために情報が収集されるが、収集される情報に基づいてフレームを容認または拒否する判定がされることはない。後処理には、以前のパターンに基づいてまたは送信先アドレス認識に基づいて容認されたフレーム上のデータを、ファイルするかあるいは取り出すことが含まれていても良いし、または他の分類機能を含めることもできる。フレームは、ハッシュ・プロセス、他のパターン・マッチング・プロセス等によって、後に容認することができる。
再び図2を参照すると、DMA210には、受信バッファ211、取り出しエンジン212、パターン属性レジスタ213、バッファ記述子およびファイリング・プロセッサ(BDFP:Buffer Descriptor and Filtering Processor )214、ステータス・レジスタ215、バッファ記述子アドレス・レジスタ216が含まれている。本明細書で説明する論理ブロックは典型的なものであり、異なる実施形態では、機能の論理パーティションが異なっていても良い。たとえば、一実施形態においては、DMA210には、取り出し、バッファ記述子処理、およびファイリング処理を行なうためのメモリ・コントローラが含まれていると想定しても良い。
受信バッファ211は、受信FIFO220からメッセージ・フレームを受信するために結合されている。ステータス・レジスタ215は、受信FIFO220からパターン・ステータス(PS:Pattern Status)情報を受信するために結合されている。パターン・ステータスには、パターン番号(たとえばPMレジスタ番号)および対応するパターン・ヒット表示が含まれている。FIFOコントローラ222は、このような情報の転送を制御するためにDMA210に結合されている。受信バッファ211は、フレーム・データを接続部172を介してバス・インターフェース・ユニット170に送るために結合されている。
取り出しエンジン212は、取り出し制御情報を受信バッファ211に送って、どのフレーム情報を取り出してキャッシュ120に転送するかを示すために結合されている。取り出しエンジン212は、取り出した情報に関する属性を接続部172を介してバス・インターフェース・ユニット170に送るために結合されている。たとえば、取り出しエンジン212は、受信FIFOによってメモリおよびまたはキャッシュに送られるデータが、取り出されるのかあるいは通常なのかを示し、そのデータをメモリ130に記憶するのかあるいはメモリ130にも記憶してキャッシュ120にも隠蔽するのかを示し、データに付随する任意の優先度情報を示す。ステータス・レジスタ215は、パターン・ステータス情報を取り出しエンジン212に送って、どのフレーム・データを取り出すべきかを示す。また取り出しエンジン212は、パターン属性レジスタ213から取り出し制御情報を受信するために結合されている。たとえば、パターン属性レジスタ213は、取り出しインデックスおよび取り出し長さを取り出しエンジン212に送る(後述する)。
パターン属性レジスタ213は、どのバッファ・キューにおいてフレーム・データ(PMF)をバッファ記述子アドレス・レジスタ216にファイルするかを示すファイリング情報を送るために結合されている。ステータス・レジスタ215は、パターン・マッチ情報たとえばマッチされた実際のパターンの表示をBDFP214に送るために結合されている。バッファ記述子アドレス・レジスタ216は、各バッファ記述子キュー(BDQ410,420,430,および440)に対するベース・アドレス、各キュー・ポインタ(BDQ_BASE、BDQ_CURRENT、およびBDQ_NEXT)、ならびにデフォルト・キューをBDFP214に送るために結合されている。BDFP214は、アドレスおよびデータ情報を接続部172を介してバス・インターフェース・ユニット170に送るために結合されている。
パターン属性レジスタは、マッチが起きたときの動作を指定するためにユーザによって書き込まれる。すなわち、フレーム情報をどこにファイルするか、フレーム情報をいつ取り出すか、受信フレームおよびその付随するバッファ記述子をどのように記憶するか、である。現在説明している実施形態においては、全体で16個のレジスタまたはエントリがサポートされる。このようなレジスタの1つ(または代替レジスタ)は、デフォルト・レジスタとして指定しても良いし、さらにパターン・マッチが起きなかったときの動作を指定する情報を含んでいても良い。図5を参照すると、各エントリには、取り出されるキャッシュ(たとえばL2キャッシュ)書き込み形式(ELCWT:Extracted Cache Write Type)、バッファ記述子キャッシュ書き込み形式(BDLWT:Buffer Descriptor Cache Write Type)、キュー分類(QC:Queue Classification)、パターン・マッチ・ファイル(PMF:Pattern Match File)、パターン・マッチ取り出し(PME:Pattern Match Extract )、取り出されるインデックス(EI:Extracted Index )、および取り出される長さ(EL:Extracted Index )が含まれている。他のビット・フィールドが、任意の数の他の機能を有効にするかあるいはサポートするために含まれていても良い。たとえば、データ・スヌープ・ビットが、メモリに対する受信フレームのスヌーピングまたは受信したバッファ・データ・メモリ・アクセスのスヌーピングをサポートするために含まれていても良い。この場合、メモリに対するアクセスがあったときに、キャッシュは、メモリに対する読み出しまたは書き込みアクセスをスヌープして、キャッシュがアドレスを検出してその後に適切な動作を取れるようにすることができる。適切な動作とは、たとえば、キャッシュに記憶されたデータのコピーを無効にすること、メモリからキャッシュ・データを更新すること、またはメモリにデータを記憶することと実質的に並行してキャッシュにデータを記憶すること、である。パターン属性レジスタは、説明した情報の内容に対する典型的なメモリ場所である。他の実施形態においては、このような情報の内容(他のビット構成、分散されたレジスタ場所などを含む)を記憶するための他の構成が含まれていても良い。
取り出されるキャッシュ書き込み形式(ELCWT)フィールドによって、取り出したデータに対して行なうべき書き込みトランザクション形式が指定される。パターン・マッチング取り出し(PME)フィールドが設定され、対応するパターン・マッチが起き、取り出し長さ(EL)フィールドが非ゼロであるならば、取り出し書き込みトランザクションが行なわれる。一実施形態においては、ELCWTが00である場合には、割り当てが行なわれず、ELCWTが01である場合には、取り出しが行なわれず、ELCWTが10である場合には、キャッシュ・ラインが割り当てられ、ELCWTが11である場合には、キャッシュ・ラインが割り当てられてロックされる。連結パターン構成の場合、用いられるELCWTは、最も低い数値パターン属性レジスタからのものである。キャッシュに対する書き込みは、スヌープによって行なわれる。
バッファ記述子キャッシュ書き込み形式(BDLWT)フィールドによって、受信フレームに対するバッファ記述子に対して行なうべき書き込みトランザクション形式が指定される。これが行なわれるのは、PMFまたはPMEの値にかかわらず、パターン・マッチが起きた場合である。キャッシュに対する書き込みは、スヌープによって行なわれる。一実施形態においては、BDLWTが00である場合には、割り当てが行なわれず、BDLWTが10である場合には、キャッシュ・ラインが割り当てられ、BDLWTが11である場合には、キャッシュ・ラインが割り当てられてロックされる。
パターン・マッチ取り出し(PME)フィールドは、パターン・マッチ・ベースの取り出しが有効であるか否かを示す。パターン・マッチ取り出しビットが設定されている場合(PME=1)には、取り出しは有効である。パターン・マッチ取り出しビットが設定されていない場合(PME=0)には、取り出しは無効である。
PMFフィールドが設定されていて、対応するパターン・マッチが起きた場合に、到着フレームをファイルする受信キュー分類が、キュー分類(QC)によって指定される。連結パターン構成の場合、用いられるQCは、最初の4バイト・パターンからのものである。QCが00である場合には、キュー#0が使用され、BDQ0_BASEが示すアドレスで始まるバッファ記述子が用いられる。QCが01である場合には、キュー#1が使用され、BDQ1_BASEが示すアドレスで始まるバッファ記述子が用いられる。QCが10である場合には、キュー#2が使用され、BDQ2_BASEが示すアドレスで始まるバッファ記述子が用いられる。QCが11である場合には、キュー#3が使用され、BDQ3_BASEが示すアドレスで始まるバッファ記述子が用いられる。
パターン・マッチ・ファイル(PMF)は、フレームがファイルされるメモリ130内の場所を判定するためにQCフィールドが用いられるか否かを示す。たとえば、PMF=0で、マッチが起きた場合には、デフォルト属性レジスタ内のQCフィールドが、フレームがファイルされる場所を判定するために用いられる。PMF=1で、マッチが起きた場合には、マッチしたパターンに対応するレジスタ内のQCフィールドが、フレームがファイルされる場所を判定するために用いられる。
またパターン属性レジスタ213も、ユーザによって書き込まれ、パターン・マッチが起きてレジスタ213内のパターン・マッチ取り出し(PME)ビットが設定されている場合に用いるべき取り出しインデックスおよび取り出し長さが指定される。取り出されるインデックス(EI)は、データの取り出しを始める受信フレーム内の最初のバイトを示す。DMAコントローラ210はこのEIフィールドを用いて取り出しを行なうが、それは、パターン・マッチ取り出しフィールド(PME=1)が設定されていて、対応するパターン・マッチが起きた場合である。連結パターン構成の場合(CP=1)には、用いられるEIは、最も低い数値レジスタ(たとえば連結鎖内の最初のレジスタ)からのものである。取り出される長さ(EL)フィールドによって、受信フレームから取り出すべきバイトの数が指定される。DMAコントローラ210はELフィールドを用いて取り出しを行なうが、それは、パターン・マッチ取り出しフィールド(PME=1)が、対応するパターン・マッチに対して設定されている場合である。連結パターン構成の場合には、最も低い数値パターン属性レジスタからのELが用いられる。ELがゼロである場合には、取り出しは行なわれない。
図4は、複数の典型的なバッファ記述子キューBDQO,BDQ1,BDQ2からBDQMまでを例示するブロック図である。各バッファ記述子キューには、BDQO,BD0412,BD1414,BD2416からBDN418までに対して示される記憶場所などの複数のバッファ記述子が含まれる。各バッファ記述子キューは、リング構造を有し、3つのポインタを介してアクセスされる。すなわち、BDQ_BASE、BDQ_CURRENT、およびBDQ_NEXTである。各バッファ記述子記憶場所には、メモリ130および/またはキャッシュ120に記憶される受信フレーム情報に関する情報が記憶される。たとえば、このような情報としては、ステータスおよび制御452、データ長454、データ・バッファ・ポインタ456、パターン・マッチ・ステータス458、相対的取り出しインデックス460、取り出し長さ462、およびバイト・カウント464が挙げられる。各バッファ記述子キューは、対応するフレームに対して異なる優先度を表わすことができる。図1に示したように、バッファ記述子キューは、メモリ130に記憶され、BDLWTが適切に設定されているならばキャッシュ120に記憶されることもある。バッファ記述子キューを記憶することは、フレーム・データの対応する取り出しが行なわれている状態で行なっても良いし、行なわれていない状態で行なっても良い。
図6は、システム100の典型的な処理フローを例示するフロー・チャートである。処理610においてフレームが受信されると直ちに、判定620において、フレームを容認すべきか否かがADF230によって判定される。フレームを容認するためのプロセスについては、少なくとも図7〜9を参照して、本明細書においてさらに説明する。判定620においてフレームが容認されない場合、処理610において、ADF230はさらなるフレームを待ち受ける。判定620においてフレームが容認された場合には、処理630において、フレームおよびパターン・ステータスが一時的なキュー234から受信FIFO220に送られる。フレームおよびパターン・ステータスが受信FIFO220に送られた後で、処理640において、パターン・ステータスおよびフレーム・データがDMA210に送られる。パターンがDMA210に転送されると直ちに、処理650において、DMA210はフレーム・データをメモリに記憶することができる。また処理650において、パターン・マッチ・レジスタ233内の有効なパターンにマッチする任意のデータが、取り出されてキャッシュ120に隠蔽される。フレーム・データを記憶し、取り出したフレーム・データを隠蔽するためのプロセスについては、少なくとも図10〜11を参照して、本明細書においてさらに説明する。
図3に、フレーム受信処理610においてアドレス/データ・フィルタ230によって受信可能であるフレームを有する典型的なメッセージ・パケットを例示する。例示したフォーマットは、イーサネット/IEEE802.3規格メッセージとの互換性があるものである。メッセージ300には、プリアンブル、開始フレーム区切り記号(SFD:Start Frame Delimiter )、およびフレームが含まれている。プリアンブルおよび開始フレーム区切り記号は、システムがフレームを受信および処理することを支援するためのセット・アップ情報を与える。プリアンブルは、受信機タイミング同期化のために用いられる1および0が交互に並んだ7バイト・フィールドである。たとえば各バイトには、値0x55が含まれている。開始フレーム区切り記号は、フレームの始まりを示す。開始フレーム区切り記号に対する典型的な値は、ひと続きの0xD5である(10101011バイナリ。なぜならば、ビット順序付けは最下位ビットが最初だからである)。例示したフレームは、長さが64〜1518バイトであり、6バイトの送信先アドレス(DA:Destination Address )、6バイトの送信元アドレス、2バイトの形式/長さフィールド、46〜1500バイトのロジック・リンク制御(LLC:Logic Link Control)フレーム、および4バイトのフレーム・チェック・シーケンスを含む。
フレームの送信先アドレスには、3バイトのベンダ・フィールドおよび3バイトのユーザ値が含まれる。ユーザ値の第1のビットによって、アドレスが、個々のアドレス(0)またはグループ・アドレス(1)として識別される。第2のビットによって、アドレスが局所的に規定されているか(1)、あるいは全体的に規定されているか(0)が示される。例示したように、送信元および送信先アドレスには、48ビットが含まれる。他の実施形態においては、異なるアドレス長、たとえばIEEE802.3仕様の初期バージョンにおける16ビット・アドレスを用いても良い。
形式/長さフィールドは、イーサネット形式フィールドおよび/またはIEEE802.3長さフィールドに対応する。形式フィールドは、フレームの残りで使用されるプロトコル(たとえばTCP/IP)を示す。長さフィールドは、フレームのデータ部分の長さを指定する。一般的に、長さフィールドは、イーサネットで使用されるどのような形式フィールドからも一意的であり、イーサネット・フレームおよびIEEE802.3フレームの両方を同じネットワーク上で用いることが容易になっている。形式フィールドは、1536(0x0600)以上で65535(0xFFFF)未満の10進数によって特定される。この数が0〜1,500(0x0000から0x05DCまで)の場合には、このフィールドはMACクライアント・データの長さを示している。例示した実施形態においては、1,501〜1,536(0x5DDから0x5ffまで)の範囲は、未定義である。
論理リンク制御(LLC)は、媒体形式(たとえばFDDI、イーサネット、トークン・リングなど)にかかわらず、ネットワーク層にサービスをもたらす役割を果たす。LLC層は、メディア・アクセス制御(MAC)層とプロトコル・スタックの上部層との間で通信するために、LLCプロトコル・データ・ユニット(PDU:Protocol Data Unit)を用いている。3つの変数によって、LLC−PDUを介した上部層内へのアクセスが判定される。変数には、送信先サービス・アクセス・ポイント(DSAP:Destination Service Access Point)、送信元サービス・アクセス・ポイント(SSAP:Source Service Access Point )、および制御変数が含まれる。DSAPアドレスによって、上部層に対するプロトコル情報を与えるステーション内の固有の識別子が指定される。SSAPによって、送信元アドレスに対する同じ情報が与えられる。
LLCフレームには、プリアンブルおよび情報フィールドが含まれている。プリアンブルには、DSAPフィールド、SSAPフィールド、および制御フィールドが含まれている。情報フィールドには、データおよび任意的なパディングが含まれている。一般的に、パディングが必要とされるのは、データが46オクテット/バイトよりも小さくてIEEE802.3規格で指定される64オクテットの最小フレーム・サイズが保証される場合である。802.3xでは、データ・フィールドの1番目の2つのオクテットは、オプコード(OP:Opcode)(休止=0x0001)として用いられ、2番目の2つのオクテットは、休止時間(PT:Pause Time)パラメータ(休止時間=0x0000(オンの場合)および0xFFFF(オフの場合))を送信するために用いられる。加えて、拡張された休止制御パラメータ(PTE)を得るために、3番目の2つのオクテット・フィールドを用いることができる。イーサネット・フレームでは、LLCの代わりに、同様のフィールドを有する異なるプロトコルを用いることができる。これらのフィールドの使用方法は、用いるプロトコルによって変わる。そのため、フィールドを検査してその内容を報告できる能力により、イーサネット・フレームの処理を著しく加速することができる。そして、このような能力は、パターン・マッチングを用いて高めることができる。
フレーム・チェック・シーケンス(FCS:Frame Check Sequence)によって、標準的な32ビットの巡回冗長チェック(CRC:Cyclic Redundancy Check )が指定される。このチェックは、プリアンブル、SFD、およびCRC以外のすべてのフィールド上で、標準的なCCITT−CRC多項式を用いることによって得られる。
図7および8は、パターン・マッチング用いたメッセージのハッシュ・フィルタリングを行なうための方法を例示するフロー・チャートである。図7を参照すると、処理610において到着フレームが一時的なキュー234において受信された後で、パターン・マッチング・ロジック232がPMレジスタ233にアクセスし、種々のエントリを連続的に選択して、PMレジスタ233に記憶されるパターンが、一時的なキュー234内のフレーム情報に含まれているか否かを判定する。
たとえば、ADF230は、パターン・マッチ有効ビット(PMEN:Pattern Match Enable bit)を含むADFグローバル制御レジスタをチェックして、パターン・マッチングが有効であるか否かを判定する。パターン・マッチングが有効でない場合(PMEN=0)、フローは、グループ・アドレス判定715に進む。パターン・マッチングが有効である場合(PMENは非ゼロ)、パターン・マッチング・プロセス710が開始される。パターン・マッチング・プロセス710の結果、フレームが容認または拒否された場合(図9を参照して、後でさらに詳細に説明する)、フローは、ブロック710から、例示した「容認」または「拒否」フロー・チャート・ノードのうちの該当する一方を通って、図8のフレーム容認処理860またはフレーム拒否処理870のうちの該当する一方に進む。パターン・マッチング・プロセス710の結果、フレーム容認も拒否も判定されなかった場合には、フローは、パターン・マッチング・プロセス710から、例示した「判定なし/パターン・マッチ検出なし」ノードを通って、前述のグループ・アドレス判定715に進む。
グループ・アドレス判定715において、受信部180によって、受信フレーム内のアドレスがグループ・アドレスか否かが判定される。現在説明している実施形態においては、フレームのユーザ値の第1のビットによって、アドレスが、個々のアドレス(0)またはグループ・アドレス(1)として識別される。アドレスがグループ・アドレスでない場合には、フローはステーション・アドレス判定720に進む。アドレスがグループ・アドレスである場合には、フローはブロードキャスト・アドレス判定725に進む。
ステーション・アドレス判定720において、受信部180は、フレーム・データとの正確な48ビットの比較を行なうことによって、受信フレーム内のアドレスがステーション・アドレスか否かを判定する。アドレスがステーション・アドレスであると判定された場合には、フローは、ブロック720から、例示した「容認」フロー・チャート・ノードを通って、図8のフレーム容認処理860に進み、フレームは、フレーム容認処理860において容認される。アドレスがステーション・アドレスではないと判定された場合には、フローは、ハッシュ・ヒット判定740に進む。
ブロードキャスト判定725において、受信部180は、受信フレーム内のアドレスがブロードキャスト・アドレスであるか否かを判定する。典型的なブロードキャスト・アドレスは、0xFFFFFF−FFFFFFのアドレスである。アドレスがブロードキャスト・アドレスであると判定された場合には、フローは、ブロードキャスト有効判定730に進む。アドレスがブロードキャスト・アドレスではないと判定された場合、フローは、前述のハッシュ・ヒット判定740に進む。
ブロードキャスト有効判定730において、受信部180は、ブロードキャスト機能が有効であるか否かを判定する。ブロードキャスト機能が有効であるのは、ADFグローバル制御レジスタ・ビットBC_REJがリセットされているときである。ブロードキャスト機能が有効である場合には、フローは、ブロック730から、例示した「容認」フロー・チャート・ノードを通って図8のフレーム容認処理860に進み、フレームは、フレーム容認処理860において容認される。ブロードキャスト機能が有効でない場合には、フローは、無差別モード判定735に進む。
無差別モード判定735において、受信部180は、無差別モードが有効であるか否かを判定する。無差別モードが有効であるのは、ADFグローバル制御レジスタ無差別ビットが設定されている場合(PROM=1)である。受信部が無差別モードの場合には、パターン・マッチングによって拒否されていないすべてのフレームが容認される。一般的に、無差別モードは試験用に用いられ、使用されることはめったにない。無差別モードが有効である場合には、フローは、ブロック735から、例示した「容認」フロー・チャート・ノードを通って図8のフレーム容認処理860に進み、フレームは、フレーム容認処理860において容認される。無差別モードが無効である場合には、フローは、ブロック735から、例示した「拒否」フロー・チャート・ノードを通って図8のフレーム拒否処理870に進み、フレームは、フレーム拒否処理870において拒否される。
パターン・マッチングは、処理710において、無差別モード判定735の前にあるいはこれと並行して(そうでない場合には、無差別モード判定735の結果として容認する前に)行なっても良いため、識別的無差別モードを用いても良い。識別的無差別モードでは、フレーム拒否の原因となるパターンを含む1つまたは複数の特定のフレームを除いて、すべてのアドレスからのフレームが容認される。たとえば、パターン・マッチングを用いて特定のアドレスを拒否する一方で、他のすべてのアドレスを容認しても良い。
ハッシュ・ヒット判定740において、受信部180は、フレーム送信先アドレス上のハッシュ・ヒットが起きたか否かを判定する。48ビットの送信先アドレスを、256バイナリ(または他の実施形態では256バイナリ超)のうちの1つにマッピングする。マッピングは、32ビットの巡回冗長チェック(CRC)のチェックサムの一部を用いることにより行なう。たとえば図12を参照されたい。同図では、多くの対応するアドレス1222に対して生成されている多くのCRC1224が例示されている。各行1201〜1210の各16進数のCRC1224は、同じ行の6バイトの16進数の送信先アドレスに対応している。
システム100のセット・アップの間、CRCチェックサムのビットを用いて、ハッシュ・テーブルにインデックスを付ける。一実施形態においては、8ビットを用いて、256バイナリ・テーブルにインデックスを付ける。8ビット・フィールドの高位の3ビットを用いて、個々のハッシュ・テーブルおよび/またはグループ・ハッシュ・テーブルにおける8つのハッシュ・バケット・レジスタのうちの1つを選択する。低位の5ビット・フィールドによって、選択された32ビット・レジスタ内のビットを選択する。コントローラがフレームを受信するときに、同じチェックサムを用いる。到着アドレスのCRCチェックサムによって、グループ/個々のハッシュ・テーブルにおいて設定されるビットが選択された場合に、ハッシュ・ヒットが起きている。そうでない場合には、ハッシュ・ヒットは起きていない。
例示した実施形態においては、CRCの最初の8ビットによって、ハッシュ・テーブルにおけるビットが選択される。行1201〜1203および1206におけるアドレスは、システムによって受信されるべきものであり、そのためこれらのアドレスは、ハッシュ・テーブルをセット・アップするために使用されている。行1201では、16進数の値0x04が、ハッシュ・バケット・バイナリ4に対してマッピングする。行1202では、16進数の値0x0Fが、ハッシュ・バケット・バイナリ15に対してマッピングする。行1203では、16進数の値0x15が、ハッシュ・バケット・バイナリ21に対してマッピングする。行1206では、16進数の値0xCBがハッシュ・バケット・バイナリ203に対してマッピングする。こうして、バケット・バイナリ4,15,21,および203のいずれかを選択するCRCを有するアドレスが、このようなアドレスが受信されたときにハッシュ・ヒットである。
ハッシュ・テーブルの有効性は、アドレスの数が増加するにつれて低下する可能性がある。たとえば、256バイナリ・ハッシュ・テーブルに記憶されるアドレスの数が増加すると、ハッシュ・テーブル・ビットの圧倒的多数が設定されることになり、その結果、意図しないフレームのうちメモリに記憶されない割合は、極めて小さくなる。ハッシュ・フィルタリングの1つの優位性は、ハッシングの速度が、送信先アドレス・リストにおけるアドレスの数に依存しないことである。また次のことにも注意されたい。すなわち、ハッシングだけのプロトコル(パターン・マッチングがない)では、これを用いて、選択されたアドレスの組にマッチングするフレームを拒否することはできない。なぜならば、意図しないアドレスの場合には、ハッシュ・テーブルにおける同じビットに対してマッピングすることができ、その結果、受信されるべきであったフレームが拒否されるからである。このように、ハッシュ・フィルタリングだけでは、フィルタリングは不完全であり、メモリに記憶されるフレームのポスト・フィルタリングを行なう必要がある。このことは、図12に示す受信した送信先アドレスを参照して、以下の例によって例示することができる。
ハッシュ・ヒット判定740において、受信した各アドレスに対するCRCを用いて、ハッシュ・バケット・バイナリを選択する。選択されたバイナリがヒットを示す場合には、ハッシュ・ヒットが起きている。たとえば、アドレス1201〜1203および1206〜1210のいずれかを受信した場合、バイナリ4,15,21,および203のうちの1つが選択され、ハッシュ・ヒットが起きている。したがって、アドレス1204またはアドレス1205を受信した場合、バイナリ4,15,21,および203のいずれも選択されず、ハッシュ・ヒットは起きていない。ハッシュ・ヒットが起きていない場合、フレームは通常拒否される。このようにして、アドレス1204および1205は拒否され得る。しかし、図12のアドレス1207〜1210は、ハッシュ・ヒットを生成してはいたが、システム100による受け取りおよび容認のためのアドレスではない。したがって、他のフィルタリング手段を用いなければならない。
システム100では、パターン・マッチングを用いて、到着アドレスをさらにフィルタリングすることで、プロセッサ/ソフトウェア・ベースのポスト・フィルタリングに対する必要性が、最小限になるかあるいは取り除かれさえするようにしている。たとえば、パターンをPMレジスタに記憶して、ハッシュ・ヒットの誤りの原因となるアドレスを拒否できるようにしても良い。例示した実施形態においては、アドレスが特定のベンダIDを対象としたものではない場合に(送信先アドレスの最初の24ビット)、そのアドレスを拒否することができる。0x0050FC04のパターンが、PMデータとしてPMレジスタに、0xFFFFFF00のPMマスクと共に記憶されている。このようにして、0x0050FCがその最初の24ビットにはない各アドレスを、パターン・マッチングによって拒否することができる。この場合、アドレス1207〜1209は拒否されるが、1210は拒否されない。なぜならば、そのベンダIDが、所望のベンダIDにマッチするからである。
プロセスを改善するために、さらなるパターンを記憶しても良い。たとえば、2つのパターン、1つは、PMデータ0x0050FC04と0xFFFFFFFFのPMマスクとを有するもの、第2のパターンは、PMデータ0x0050FC03−Cで0xFFFFFFFF−FのPMマスクを有するもの、を用いても良い。このようにして、アドレスとして、ハッシュ・ヒットであるが、0x0050FC04がその最初の32ビットになく、0x0050FC03−Cがその最初の36ビットにないものをそれぞれ、パターン・マッチングおよびハッシングを通して効果的に無視しても良い。この場合、アドレス1207〜1210は、パターン・マッチングおよびハッシングにより効果的に拒否され、所望のアドレスのみが、システム100によって容認される。
こうして、受信アドレス1201〜1210から、種々の異なる結果が生じる。アドレス1204および1205は、ハッシュ・ミスが起きるため容認されない。アドレス1201〜1203および1206〜1210は、ハッシュ・ヒットが起きる。アドレス1201〜1203は、第1のパターンがその中に見出されるため、ハッシュ・ヒットおよびパターン・マッチが起きる。したがって、アドレス1201〜1203は容認される。アドレス1206は、第2のパターンがその中に見出されるため、ハッシュ・ヒットおよびパターン・マッチが起きる。したがって、アドレス1206は容認される。アドレス1207〜1210は、ハッシュ・ヒットが起きるが、パターン・マッチには至らない。なぜならば、第1および第2のパターンが見出されないからである。したがって、アドレス1207〜1210は容認されない。
一般的に、32個のグループ・アドレスがハッシュ・テーブルに記憶されており、ランダム・グループ・アドレスが受信された場合には、ハッシュ・テーブルによって、大きなパーセンテージ(たとえば、場合によっては85%程度またはそれを超える値)のグループアドレス・フレームがメモリには記憶されない。現在開示しているパターン・マッチングを用いない場合には、システム100上で動作するソフトウェアによって、メモリ130に記憶されているものをさらにフィルタリング(すなわち、ポスト・フィルタリング)して、それが、正しいアドレスを含んでいるか否かを判定しなければならなくなる。前述の例では、アドレス1207〜1210は、パターン・マッチングによって生じる拒否条件を引き起こすことなく、プロセッサ110を伴うさらなるポスト・フィルタリングを必要としたであろう。
図8を参照すると、パターン・マッチ有効判定845において、受信部180は、選択されたレジスタ内の選択されたパターンPMデータに対してパターン・マッチングが有効であるか否かを判定する。パターン・マッチングが有効でない場合(PMEN=0)、フローは、ハッシュ/無差別判定855に進む。パターン・マッチングが有効である場合(PMEN=1)、パターン・マッチング・プロセス850が開始される。パターン・マッチング・プロセス850の結果、フレームが容認または拒否された場合(図9を参照して、後でさらに詳細に説明する)、フローは、ブロック850から、例示した「容認」または「拒否」フロー・チャート・ノードの該当する一方を通って、フレーム容認処理860またはフレーム拒否処理870の該当する一方に進む。フレーム容認または拒否の判定がされることなく、パターン・マッチング・プロセス850においてパターン・マッチが起きた場合、またはパターン・マッチが起きなかった場合には、フローは、パターン・マッチング・プロセス850から、例示した「判定なし/パターン・マッチ検出なし」ノードを通って、パターン・マッチ未検出判定852に進む。
現在説明している例示の実施形態におけるパターン・マッチ未検出判定852を参照すると、16個のパターンのどれもパターン・マッチの検出に至らなかった場合には、フローは、判定852から、例示した「拒否」フロー・チャート・ノードを通って、フレーム拒否処理870に進む。他の実施形態においては、フレームを、プロセッサ110によるさらなるフィルタリングのために保持しても良い。変形の実施形態においては、フレームに与える優先度を、パターンが検出されたフレームより低くしても良い。その結果、プロセッサ110では、信頼度の高いフレーム(ハッシュ・ヒットおよびパターン・マッチがある)が、信頼度の低いフレーム(ハッシュ・ヒットはあるがパターン・マッチはない)の前に、重点的に取り扱われる。他の変形の実施形態においては、フレームを、異なる処理要素に対応して、異なるキューに記憶しても良い。16個のパターンのうちの少なくとも1つによってパターン・マッチが検出された場合には、フローは、判定852から、例示した「判定なし」フロー・チャート・ノードを通って、前述のハッシュ/無差別判定855に進む。これまで説明した図7および8の要素は、メディア・アクセス制御機能に対応する。
ハッシュ/無差別判定855において、パターン・マッチはあるが判定がない(たとえば容認がなく拒否もない)場合、またはパターン・マッチがない場合には、データ・リンク機能が実施される。受信部180(たとえば、ADF230内のステート・マシーン)において、完全なハッシュ・ヒットが起きているか否か、および/または無差別モードが有効であるか否かが判定される。1つのアドレスのみに一意的に対応するハッシュ・ヒットおよびパターン・マッチの両方が起きた場合に、完全なハッシュ・ヒットが起きる。対照的に、低い数のアドレスだが複数のアドレスに対応するハッシュ・ヒットおよびパターン・マッチの両方が起きた場合に、信頼度の高いハッシュ・ヒットが起きる。ハッシュ・ヒットの信頼度が高ければ、パターン・マッチングを用いることによって従来のアドレス・フィルタリングよりも性能が高まる。なぜならば、信頼度の高いアドレスが実際に、探しているアドレスである確率が、パターン・マッチングによって高まるからである。システムおよび/またはネットワーク特性を用いてパターンを注意深く選択することによって、ハッシュ・ヒットが完全である確率を高めることができる。完全なハッシュ・ヒットが起きているかあるいは無差別モードが有効である場合には、受信フレームは、フレーム容認処理860において容認される。完全なハッシュ・ヒットが起きておらず無差別モードも有効ではない場合には、フローは、フル・アドレス・マッチング判定865に進む。
フル・アドレス・マッチング判定855において、プロセッサ110は、フル・アドレス・マッチングが起きているか否かを判定する。システム100は、アドレスを、システム100に既知であるアドレスと直接比較する。システム100は、受信アドレスを優先度キューなどに記憶することで、容認されると予測される可能性が高いアドレス(信頼度の高いフレーム)の処理を、容認されると予測される可能性が低いアドレス(信頼度の低いフレーム)の前に行なうようにしても良い。このような完全な直接比較は、システム100の処理リソースの点でコストがかかる。そのため、本明細書で説明したパターン・マッチングおよびハッシングでは、このようなコストのかかる直接的なアドレス比較を回避しようとしている。このようにして、システム100は、できるだけ直接的なアドレス比較を行なうことなくパターン・マッチングを用いることで、システムの性能を高めることができ、フル・アドレス・マッチングは最後の手段となる。フル・アドレス・マッチングが起きた場合には、受信フレームは、フレーム容認処理860において容認される。フル・アドレス・マッチングが起きない場合には、受信フレームは、フレーム拒否処理870において拒否される。
図9は、システム100が受信したメッセージ・アドレスに対してパターン・マッチングを行なうための方法を例示するフロー・チャートである。フレームは、パターン・マッチが起きているか否かに応じて、容認しても良いし拒否しても良い。メッセージ・フレームの任意の部分を、IPアドレスを含むマッチについてチェックしても良い。図9の処理は、パターン・マッチングが有効である場合(PMEN=1)に、対応するパターン・マッチ・アクセプタ・インディケータが許可する(たとえばPMAC=1)各パターンに対して行なわれる。ただし、あるパターン・マッチが、別のパターン・マッチが試みられる前に起きることによって、最終的な処置(容認または拒否)が命じられる場合を除く。パターン・データ・セットが有効である場合に、メッセージ・データは、パターン・マッチについてチェックされる。パターン・マッチ・データ・セットが有効でない場合、またはパターン・マッチが見出されない場合には、次のパターンが選択されてプロセスが繰り返される。連続検索が有効である場合には、マッチとは関係なく、続けて次のパターンが検索される。
受信処理935を参照すると、到着フレームのバイトを受信して一時的なキュー234に入れ、到着フレームを容認するか拒否するかについて判定がされるまで、一時的に記憶する。到着フレームのバイトは、パターン・マッチング・ロジック232、ならびにアドレス認識およびハッシュ・ロジック238にも与えられる。その結果、このような判定を、バイトが一時的なキュー234によって受信されている間に行なうことができる。受信処理935においてバイトを受信した後で、フローは、パターン・マッチ判定処理905に進む。
パターン・マッチ判定処理905を参照すると、パターン・マッチング・ロジック232によって、PMレジスタ233に記憶されているパターン・マッチ・データが受信フレーム内のデータにマッチするか否かが判定される。たとえばパターン・マッチング・ロジックは、PMレジスタ233の最初の1つにおけるPMデータを、到着フレーム・データと、到着データが一時的なキュー234に記憶されるときに比較する。一時的なキュー234を用いて、フレームを、判定がされるまで記憶する。たとえば、PMデータ(最大4バイト)の各ビットが、メッセージ・インデックスMIに従って配置されたメッセージ・データの各ビットにマッチした場合、パターン・マッチが起きる。マッチングは、フレーム内に最大256バイトの深さまで、最大252バイトのオフセットを伴って、起きても良い。PMデータの一部を、対応するPMマスクによってマスキングしても良い。たとえば、PMデータの各ビットは、対応するPMマスク・ビットがクリアされている場合には、マッチについてチェックしなくても良い。前のパターンの連結パターン(CP)フィールドが設定されている場合には、マッチが起きるのは、両方のPMデータ・フィールド(現在のPMデータおよび前のPMレジスタのPMデータ)がフレーム内に見出される場合のみである。PMACフィールドは、対応するPMデータが有効であるか否かを判定し、有効である場合には、マッチ時に取るべき行動計画を判定する。処理905は、処理935と並行して行なっても良い。
パターン・マッチ判定905を参照すると、パターン・マッチングが無効(たとえば、PMAC=00)である場合には、フローは、フレームの終わり(EOF:End Of Frame)またはキュー満杯判定930に進む。パターン・マッチ判定処理905においてパターン・マッチが見出されない場合にも、フローは、EOFまたはキュー満杯判定930に進む。判定910において、パターン・マッチが起きてパターン・マッチングが無効ではない(たとえばPMAC≠00)場合には、フローは、フレーム容認判定915に進む。
EOF/キュー満杯判定930を参照すると、一時的なキュー234が満杯ではなくフレームの終わりがまだ受信されていない(かつ、フレームが拒否されていない)場合には、受信処理935においてさらなるバイトを続けて受信して一時的なキュー234に入れ、フローは、パターン・マッチ判定処理905に進んで、さらなる受信フレーム情報に対してパターン・マッチングを開始する。フレームの終わりが受信されているか、あるいは一時的なキュー234が満杯である場合には、フローは、全モード拒否判定940に進む。
全モード拒否判定940を参照すると、ADF230が全モード拒否にあると判定された場合には、フレームは拒否されて、処理フローは、どの対応フローが図9に例示するパターン・マッチング・フローを開始したかに応じて、図7または8に例示するように続く。ADF230が全モード拒否にない場合には、フレームに関する判定はなされず、フローは、どのフローが図9に例示するパターン・マッチングを開始したかに応じて、図7または8に例示するように続く。
フレーム容認判定915を参照すると、ADF230が、パターンに対するフレームを容認している場合(たとえば特定のPMデータに対してPMAC=10)には、フレームは、条件付きで容認されて、フローは連続検索判定945に進む。ADF230が、パターンに対するフレームを容認していない場合(たとえば、特定のPMデータに対してPMAC≠10)には、フローは、フレーム拒否判定920に進む。
フレーム拒否判定920を参照すると、ADF230が、パターンに対するフレームを拒否している場合(たとえば、特定のPMデータに対してPMAC=11)には、到着フレームは拒否される。なぜならば、到着フレームには、拒否PMAC値に付随するPMデータが含まれているからである(そうでない場合には、PMマスク、CPなどの他の因子を考慮してマッチが起きる)。そしてフローは、どのフローが図9に例示するパターン・マッチングを開始したかに応じて、図7または8に例示するように続く。ADF230が、パターンに対するフレームを拒否していない場合(たとえば、特定のPMデータに対してPMAC≠11、この場合にはPMAC=01)には、フローは、連続検索判定925に進む。
連続検索判定925を参照すると、パターンに対する連続検索が有効である場合(たとえばCSE=1)には、フローは、EOFまたはキュー満杯判定930に進む。連続検索判定925において、連続検索が有効でない場合(たとえばCSE=0)には、前述のパターン・マッチに対する判定はされず、フローは、全モード拒否判定940に進む。
連続検索判定945を参照すると、パターンに対する連続検索が有効である場合(たとえば、CSE=1)には、フローは、EOFまたはキュー満杯判定950に進む。連続検索判定945において、連続検索が有効でない場合(たとえばCSE=0)には、到着フレームは容認される。フレームが容認される理由は、フレームにPMデータが含まれており(そうでない場合には、PMマスク、CPなどの他の因子を考慮してマッチが起きる)、パターン・マッチングが有効(PMAC=10)であり、かつさらなる検索を行なう必要がない(CSE=0)からである。次にフローは、どのフローが図9に例示するパターン・マッチングを開始したかに応じて、図7または8に例示するように続く。
EOF/キュー満杯判定950を参照すると、フレームの終わりが受信されているかまたは一時的なキュー234が満杯である場合には、到着フレームが容認される。フレームが容認される理由は、パターン・マッチが起きており、パターン・マッチングが有効(PMAC=10)であり、かつフレームの終わりに達しているかあるいは一時的なキューが満杯であるためにさらなるパターン・マッチングは起こり得ないからである。次にフローは、どのフローが図9に例示するパターン・マッチングを開始したかに応じて、図7または8に例示するように続く。
EOF/キュー満杯判定950において、一時的なキュー234が満杯ではなくフレームの終わりがまだ受信されていない場合には、受信処理955においてさらなるバイトを受信して一時的なキュー234に入れる。そしてフローは、パターン・マッチ判定処理960に進んで、次のパターン(たとえば、連続した次のPMレジスタ233内のPMデータ)に対するさらなる受信フレーム情報に対して、パターン・マッチングを開始する。パターン・マッチ判定処理960の機能は、前述した処理905と同様である。処理955は、処理960と並行して行なっても良い。パターン・マッチング処理960の後、フローは、パターン・マッチ判定965に進む。
パターン・マッチ判定965を参照すると、現時点で選択されているパターン(たとえば、現時点で選択されているPMレジスタ233内のPMデータ)に対して、パターン・マッチングが無効である場合(たとえばPMAC=00)には、フローは、EOF/キュー満杯判定950に進む。パターン・マッチ判定処理965においてパターン・マッチが見出されない場合にも、フローは、EOF/キュー満杯判定950に進む。判定965において、パターン・マッチが起きてパターン・マッチングが無効でない場合(たとえば、PMAC≠00)には、フローは、フレーム否拒否判定970に進む。
フレーム否拒否判定970を参照すると、ADF230が次のパターン(たとえば、対応するPMデータ)に対して、フレームを拒否していない場合(たとえば、PMAC=01またはPMAC=10)には、フローは、EOF/キュー満杯判定950に進む。そうでない場合には、到着フレームは拒否される。なぜならば、拒否パターン(PMAC=11)が検出されているからである。次にフローは、どのフローが図9に例示するパターン・マッチングを開始したかに応じて、図7または8に例示するように続く。
図10を参照すると、図1のシステム内において容認されたメッセージを処理するための方法である。例示した実施形態の優位性の1つは、パケット内の重大なデータに対するシステム・アクセスの向上が、そのデータを受信したときにデータの検出を高レベルのリソースを用いることなく行なうことによって、データを記述子情報とともにキャッシュ内に配置してその後に速いアクセスができるようにすることによって、可能であることである。
例示したフローは、パターン・ステータス受信処理1005において、パターン・ステータスがDMA210に送られてステータス・レジスタ215内に配置されたときに開始される。一般的に、その後、フレーム・データは、パターン・ステータス情報に応じて、メモリ130内にファイルされ、かつ/あるいはキャッシュ120内に隠蔽される。ファイリングには、パケット署名に基づいてメモリ内のパケットをグループ分けすることが含まれ、取り出しには、パケットの特定部分を位置決めすることが含まれ(たとえば、取り出しインデックスおよび長さ値を用いることによって)、隠蔽することには、取り出したデータをプロセッサ・キャッシュ・スペースにコピーすることが含まれる。取り出しによって、プロセッサ・キャッシュ・メモリの割り当ておよびロックを行なうことができるが、ソフトウェアは、取り出しの間にDMAによってロックされたキャッシュ内のすべてのデータをアンロックする役割を果たす。取り出したデータがフレーム・データから取り除かれることはない。むしろ、すべてのフレーム・データがメモリに記憶されて、取り出しデータのみがプロセッサ・キャッシュにコピーされる。このようなファイリングおよび隠蔽することについては、以下で詳細に説明する。
バッファ記述子選択処理1010を参照すると、DMA210のBDFP214が、パターン・ステータスとパターン・マッチ属性レジスタ213内のキュー分類(QC)フィールドとに基づいて、バッファ記述子を選択する。QCフィールドでは、どのバッファ記述子キュー122/132を用いるべきかを判定する。パターン・ステータスには、適切なQCフィールドに対するポインタが含まれる。またパターン・ステータスはまた、どのパターン・マッチが起きたかを(もしあれば)示す。パターン・マッチが起きた場合には、マッチしたパターンによって、データをフレームから取り出して、取り出したデータ124としてキャッシュ120内に隠蔽しても良い。こうして、バッファ記述子キュー132に加えて、バッファ記述子キューが選択される122。パターン・マッチが起きない場合には、取り出しは行なわれず、その結果、バッファ記述子キュー132のみが用いられる。バッファ記述子選択処理1010の後、フローは、取り出し準備処理1015に進む。
取り出し準備処理1015において、パターン・ステータスがパターン・マッチを示す場合には、取り出しエンジン212が、取り出しインデックス(EI)および取り出し長さ(EL)をパターン属性レジスタ213から得る。取り出し準備処理1015の後、フローは、BDQ利用可能判定1020に進む。
BDQ利用可能判定1020を参照すると、BDFP214が、選択されたバッファ記述子キュー(BDQ)が利用可能であるか否かを判定する。すなわち、BDFP214は、選択されたBDQ内に空のスペースがあるか否かを判定する。選択されたBDQが利用可能である場合には、フローは、フロー・チャート・ノード「A」を通って、BDQポインタ更新処理1030に進む。選択されたBDQが利用可能でない場合には、フローはフラッシュ処理1025に進む。すると直ちに、フレームおよびステータス・フレーム長が、受信FIFO220からフラッシュされ、そしてフローは、パターン・ステータス受信処理1005に進む。
BDQポインタ更新処理1030を参照すると、BDFP214は、バッファ記述子キュー現在ポインタ(BDQ_CURRENT)を更新して、次のバッファ記述子キューを示すようにする(BDQ_CURRENT=BDQ_NEXT)。現在のBDQポインタが更新された後、フローは、BDQ空判定1035に進む。
BDQ空判定1035を参照すると、BDFP214は、BDQ_CURRENTによって示されるエントリが空であるか否かを判定する。現在のBDQエントリが空でない場合には、利用不可能マーク処理1040において、選択されたバッファ記述子キューを利用不可能としてマーキングして、フローはラッシュ処理1025に進む。現在のBDQエントリが空である場合には、フローは転送処理1045に進む。
転送処理1045を参照すると、BDFP214は、フレーム・データを受信FIFO220から受信バッファ211に転送する。転送は、フレームの終わり(EOF)が受信されるかあるいは受信バッファ211が満杯になるまで続く。フレーム・データが転送された後、フローは、EOF判定1050に進む。
EOF判定1050を参照すると、処理1045においてフレームの終わりが受信されなかった場合には、フローは、選択的な取り出しおよび隠蔽処理1060に進む。処理1045においてフレームの終わりが受信された場合には、フローは、ステータス・フレーム長取得処理1055に進む。この処理において、取り出しエンジン212は、ステータス・レジスタ215からステータス・フレーム長を得る。処理1055の後、フローは、選択的な取り出しおよび隠蔽処理1060に進む。
データは、選択的な取り出しおよび隠蔽処理1060において、キャッシュ120内に隠蔽するために受信フレームから制御可能に取り出される。選択的な取り出しおよび隠蔽処理1060については、図11を参照して、後に十分に説明する。選択的な取り出しおよび隠蔽処理1060の後、フローは、EOF判定1065に進む。
EOF判定1065を参照すると、選択的な取り出しおよび隠蔽処理1060においてフレームの終わりが受信された場合には、フローは、EOF更新処理1080に進む。選択的な取り出しおよび隠蔽処理1060においてフレームの終わりが受信されなかった場合には、フローは、バッファの終わり(EOB)判定1070に進む。
EOF更新処理1080を参照すると、BDFP214は、現在のバッファ記述子キューのステータスおよび制御情報を更新する。たとえばBDFP214は、取り出しが行なわれたビットを現在のBDQ122内で設定して、取り出したデータ124がキャッシュ120に記憶されていることを示す。次のBDQポインタ(BDQ_NEXT)を、選択されたBDQ内の次の箇所を示すように設定する。現在のBDQの内容を、BDLWTに従ってキャッシュにコピーする。たとえば、パターン・マッチが起きた場合およびBDLWTが00である場合には割り当ては行なわれず、BDLWTが10である場合にはキャッシュ120ラインが割り当てられ、BDLWTが11である場合にはキャッシュ120ラインが割り当てられてロックされる。EOF更新処理1080の後、フローはパターン・ステータス受信1005に進むことによって、より多くのデータを次のフレームから処理しても良い。
EOB判定1070を参照すると、選択的な取り出しおよび隠蔽処理1060においてメモリ130内のデータ・バッファの終わり134が出現した場合には、フローはEOB更新処理1075に進む。選択的な取り出しおよび隠蔽処理1060においてデータ・バッファの終わりが出現した場合には、フローは、前述した転送処理1045に進む。
EOB更新処理1075を参照すると、BDFP214は、現在のバッファ記述子キューのステータスおよび制御情報を更新する。たとえばBDFP214は、取り出しが行なわれたビットを現在のBDQ122内で設定して、取り出したデータ124がキャッシュ120に記憶されていることを示す。次のBDQポインタ(BDQ_NEXT)を、選択されたBDQ内の次の箇所を示すように設定する。現在のBDQの内容を、BDLWTに従ってキャッシュにコピーする。EOB更新処理1075の後、フローはノードAに進むことによって、より多くのデータを同じフレームから処理することができる。
図11は、64バイト・バッファを用いて図1のシステムによるメッセージの一部を取り出して隠蔽するための方法を例示するフロー・チャートである。図11に例示する方法は、図10の選択的な取り出しおよび隠蔽処理1060によって呼び出される。
図11を参照すると、取り出し要求判定1105において、取り出しエンジン212が、与えられたパターン・マッチに対して取り出しが要求されているか否かを判定する。また取り出しエンジン212は、種々の取り出しフィールド、たとえば取り出し追加(EX_ADD)フィールドおよび取り出し長さ(EL)フィールドをチェックする。取り出し追加フィールドは、取り出し長さに、対応する取り出しインデックスを加えたものに等しい(たとえば、EX_ADD=EL+EI[11:15])。取り出しが要求され(PME=1)、取り出し追加値がゼロよりも大きく、かつ取り出し長さがゼロよりも大きい場合には、フローはEI≦64判定1125に進む。取り出しが要求されないか、取り出し追加値がゼロであるか、あるいは取り出し長さがゼロである場合には、フローはアライメント判定1110に進む。
アライメント判定1110を参照すると、ターゲット・アドレスが、64バイトのアライメントされたアドレスではない場合には、フローはMAX(32B)送信処理1120に進む。ここでは、通常のデータの最大32バイトがメモリ130に送られる。MAX(32B)は、最大で32バイト(この値を含む)のバイトの数である(たとえば、xをバイトの数とすると、MAX(xB)≦xバイトである)。ターゲット・アドレスが、64バイトのアライメントされたアドレスである場合には、フローはMAX(64B)送信処理1120に進む。ここでは、通常のデータのMAX(64B)がメモリ130に送られる。MAX(32B)送信処理1115またはMAX(64B)送信処理1120のどちらの後も、取り出しフローは終了して、フローは図10のEOF判定1065に進む。
EI≦64判定1125を参照すると、取り出しインデックスが64よりも大きい場合には、取り出すべきデータがまだ届いておらず、フローは、MAX(64B)送信処理1130に進む。ここでは、通常のデータのMAX(64B)がメモリ130に送られる。MAX(64B)送信処理1130の後、EI減少処理1135において取り出しインデックスが64だけ減らされ(たとえばEI=EI−64)、取り出しフローは終了して、フローは図10のEOF判定1065に進む。
再びEI≦64判定1125を参照すると、取り出しインデックスが64以下である場合には、フローは、相対的EI記憶処理1140に進む。相対的取り出しインデックスは、取り出したデータが始まるメモリ130のデータ・バッファ内の箇所に対するインデックスである。相対的取り出しインデックスは、BDFP214によってDMA210内部に記憶される。記憶は、インデックスがその後に、処理1075または1080(図10)においてメモリ130および/またはキャッシュ120の適切なBDQに書き込まれるまで行なわれる。相対的EI記憶処理1140の後、フローは、EI≦32判定1145に進む。
EI≦32判定1145を参照すると、取り出しエンジン212は、取り出しインデックスとの比較を行ない、DMA210に(たとえば取り出しエンジン212内に)内部記憶されている取り出しデータ・フラッグをチェックする。たとえば、取り出しインデックスが32よりも大きく、取り出しデータ・フラッグが真ではない場合には、フローは、MAX(32B)送信処理1150に進む。ここでは、通常のデータのMAX(32B)がメモリ130に送られる。MAX(32B)送信処理1150の後、取り出しデータ・フラッグが真に設定されて、取り出しフローが終了し、フローは図10のEOF判定1065に進む。
再びE≦32判定1145を参照すると、取り出しインデックスが32以下であるか、あるいは取り出しデータ・フラッグが真である場合には、フローは、32B未満判定1160に進む。受信フレームから取り出すべきデータが少なくとも32バイトである場合(たとえば、EX_ADD≧32B)には、フローは32B送信処理1170に進む。ここでは、取り出しデータの32バイトがメモリ130に送られ、ELCWTに従ってキャッシュ120にコピーされる。たとえば、ELCWTが00である場合には割り当てが行なわれず、ELCWTが01である場合には取り出しが行なわれ、ELCWTが10である場合にはキャッシュ・ラインが割り当てられ、ELCWTが11である場合にはキャッシュ・ラインが割り当てられてロックされる。受信フレームから取り出すべきデータが32バイト未満である場合(たとえば、EX_ADD<32B)には、フローは切り上げ処理1165に進んで、EX_ADDが32の値に切り上げられ、フローはさらに32B送信処理1170に進む。
32B送信処理1170の後、フローは減少処理1175に進む。この処理において、取り出し追加フィールドは、取り出した32バイト・セグメントの数だけ減らされる(たとえば、EX_ADD=EX_ADD−32)。減少処理1175の後、クリア処理1180において、フレームの終わり(EOF)に到達しているかあるいはEX−ADD=0である場合に、取り出しデータ・フラッグはクリアされる。クリア処理1180の後、取り出しフローは終了して、フローは、図10のEOF判定1065に進む。
一実施形態においては、パケット・コントローラ160のMAC190におけるシステム100によって、メッセージ・フレームの一部が受信される(図1および図6、処理610を参照)。メッセージ・フレームの受信部分(「受信フレーム」)は、図2のアドレス/データ・フィルタ230の一時的なキュー234に送られる。フレームはアドレス/データ・フィルタ230によって処理されて、このフレームを容認すべきかまたは拒否すべきかが判定される(図6、処理620を参照)。アドレス認識およびハッシュ・ロジック238とパターン・マッチング・ロジック232とによって、受信フレーム上で、アドレス認識、ハッシング、完全なハッシングに対するパターン・マッチングを伴うハッシング、およびパターン・マッチング(図7〜9)が行なわれる。アドレス認識およびハッシュ・ロジック238は、ハッシングおよび何らかの必要なフル直接アドレス比較を行なう。PMレジスタ233には、マッチすべき多くのパターンに対応する多くのレジスタが含まれている。パターン・マッチング・ロジック232は、PMレジスタ233に記憶されている構成値に基づいて、パターン・マッチングを行なう(たとえば、連続検索および/または連結能力によって)。パターン・マッチングおよびハッシングまたは他のフェイル・セーフ条件の後に容認された場合、受信フレームおよびパターン・ステータス情報(パターン・マッチ結果)は、受信FIFO220に転送される(図6、処理630を参照)。
そして受信フレームは、受信バッファ211に転送され、パターン・ステータス情報は、DMA210のステータス・レジスタ215に転送される(図6、処理640を参照)。取り出しエンジン212は、パターン属性レジスタ213およびステータス・レジスタ215にアクセスして、受信バッファ211内の受信フレームからデータを取り出すべきか否かを判定し、当該データの取り出しを制御する(図10および11を参照)。BDFPは、ステータス・レジスタ215およびバッファ記述子アドレス・レジスタにアクセスし、メモリ130および/またはキャッシュ120に書き込むべきアドレスおよびデータ情報を生成する。BDFP214からのアドレス情報には、フレーム・データに対するデータ・バッファ内のデータ・バッファ・ポインタ(たとえば、データ・バッファ・ポインタ456)、またはバッファ記述子キュー内の次のエントリの1つに対するポインタ(たとえば、BDQ_BASE,BDQ_CURRENT,BDQ_NEXT)が含まれる。データ情報には、ステータスおよび制御452、データ長454、データ・バッファ・ポインタ456、パターン・マッチ・ステータス458、相対的取り出しインデックス460、取り出し長さ462、およびバイト・カウント464(図4に示す)が含まれる。
次いで、フレームの全部または一部を、メモリ130にファイルし(「通常のデータ」)および/またはキャッシュ120に隠蔽する(「取り出したデータ」)ことが、対応するバッファ記述子キュー132/122内の対応する記述的情報とともに行なわれる(図6、処理650、および図10および11を参照)。より具体的には、受信バッファ211は、通常のまたは取り出したフレーム・データを、バス・インターフェース・ユニット(BIU)170に送り、取り出しエンジンは、フレーム・データを通常または取り出したものとして識別する属性をBIU170に送り、BDFP214は、アドレス情報とバッファ記述子アドレス・レジスタ216からのバッファ記述子データとをBIU170に送る。BIU170は、キャッシュ120および/またはメモリ130に記憶するために、フレーム・データをバス140に送る。通常のフレーム・データは、少なくとも1つのデータ・バッファ134に記憶され、通常のフレーム・データに関する記述子データは、バッファ記述子キュー132に記憶される。取り出しが行なわれた場合、取り出したフレーム・データは、キャッシュ部分124に記憶され(「隠蔽される」)、取り出したフレーム・データに関する記述子データは、バッファ記述子キュー122に記憶される。
前述の説明は、本発明の少なくとも一つの実施形態を説明することが意図されている。前述の説明は、本発明の範囲を規定することは意図されてはいない。むしろ本発明の範囲は、添付の請求項において規定される。したがって本発明の他の実施形態には、前述の説明に対する他の変形、変更、付加、および/または改良が含まれる。
一実施形態では、ユーザが最大16個の4バイト・パターンをプログラムすることができる新しい形式のパターン・マッチングを取り入れている。この4バイト・パターンは連結して、より長いパターンを形成することができ、かつこのパターンを用いて、最初の256バイト内のフレームの一部とマッチングすることができる。各パターンには、属性の組が付随している。属性の組をプログラムして、フレームを容認/拒否すること、フレームをメモリの4つのキューのうちの1つにファイルすること、取り出したフレーム・データをプロセッサのキャッシュに書き込むことができる。パターン・マッチング能力には、最大16個の4バイトの固有のパターンに対するサポート、ビットごとベースでのパターン・マッチング、フレーム内への最大256バイトの深さのマッチング範囲、最大252バイトのオフセット、最大64バイトまでの4バイト増分でのプログラマブル・パターン・サイズ、マッチが検出されたときの容認または拒否フレーム、および正確なマッチに対する最大8ユニキャストのアドレスが含まれる。
この実施形態では、パターン・マッチングの能力をハッシュ・フィルタリングを用いることと組み合わせることで、アドレス認識方法として、ポスト・フィルタリングを必要とせずにMACレベルで行なうことができ、ロジック・リンク・コントローラ・レベルでのさらなるソフトウェア介入を必要としないものが得られる。フレームの処理を加速する方法の1つは、ハッシュ・テーブル上で偶然ヒットを得たいかなる送信先アドレスも、確かにシステムが探しているアドレスの1つであるという信頼度を増加させることである。複数のアドレスのCRCが、8個の同じ最上位ビットを有することになるため、ハッシュ・テーブルをパターン・マッチングとともに用いることによって、ハッシュ・ヒットの際に行なわなければならない余分な処理(アドレスを回収して、有効な送信先アドレスのリストと比較すること)が無駄な努力ではなくなる可能性を著しく高くする方法が得られる。これは、意図しないハッシュ・テーブル・ヒットによって生じる余分なメモリ・バスの利用が減るため貴重である。またハッシュすることができるアドレスの数は、アドレスの数が増加するとハッシュ・テーブルの有効性が低下するという事実によって、制限されている。ユーザはハッシュ・テーブルを最初に構築するため、かつハッシュすべきアドレスの数は通常、比較的少ない(32〜64)ため、大部分(たとえユーザのアドレスの全部ではなくても)をカバーすることができる共通のパターンを見つけることは比較的容易である。ユーザは、小数のパターン・マッチ・レジスタを用いることで、所望のキューにファイルされるものは何でもヒットであり、比較テーブルを必要とすることなく処理できるということを保証することができる。
一実施形態においては、CRCチェックサムによって、グループ/個々のハッシュ・テーブル内で設定されるビットが選択される場合には、フレームは単に、パターン・マッチ結果が出るまで条件付きで容認される。たとえばベンダのコードを、マッチングすべきパターンとして非常に高い有効性で用いることができる。パターンが選択的であるほど(用いるビットが少ないほど)、信頼度の高いハッシュ・ヒット・キュー方法は効果的になる。非常に選択的なパターンを用いれば、ハッシュ・テーブル内で使用できるアドレスの数を増やすことができるにもかかわらず、有効性は保たれる。この実施形態の他の優位性は、以下の通りである。すなわちハッシング単独では、これを用いて、良好なフレームを拒否する危険を伴わずにフレームを拒否することはできないが、パターン・マッチングとハッシュ・フィルタリングとを組み合わせて用いることで、「ハッシングによるフレーム拒否」を行なうことができる。なぜならばハッシュ衝突の不確実さが取り除かれるからである。さらなる適応性は、「マッチ・キューが存在しない確率が高い」状態でパターン・マッチングおよびハッシュが拒否したフレームを、ユーザがファイルできるということであり、その結果、フレームを検査して本方法の有効性をさらに確認することができる。
本明細書で説明したように、ADF230の種々の制御ロジックが、ADF230の前述した要素間に分散され、別個のロジック・ブロックとして例示されている。あるいは、別個の制御ロジック・ブロックが、たとえばADF230の全体的な処理(パターン・マッチングおよびハッシング機能を含む)を制御するためのステート・マシーンを表わすものとして含まれていても良い。このようなステート・マシーンには、本明細書で説明した機能を実施するための多くの状態が含まれていても良い。たとえばステート・マシーンは、データが受信され、フレームが容認されたら直ちに、アイドル状態からパターン・ステータス状態に移行しても良い。パターン・ステータス状態では、パターン・ステータス情報を、受信FIFO220に対して利用できるようにしても良い。そしてステート・マシーンは、受信フレームが一時的なキュー234から転送される一時的なキュー・データ・フェーズに移行することができる。そして、ステート・マシーンは、送信先アドレス・フィルタリングに付随するフレーム長およびステータス(たとえば、ブロードキャスト・アドレス、グループ/単一のアドレス、無差別モード)が受信FIFO220に転送されるフレーム・ステータス状態に入る。他の状態およびステート・マシーンを本明細書で説明した機能に従って実施しても良い。
一実施形態においては、情報処理システム内でメッセージを処理するための方法が提供される。情報処理システムは、メモリ、キャッシュ、およびパケット・コントローラを有する。メモリおよびキャッシュはそれぞれ、パケット・コントローラに結合されている。本方法には、メッセージを受信すること、メッセージ上でパターン・マッチングを行なって、受信メッセージが第1のパターンを含むか否かを示し第1のパターンに対応するパターン・マッチ属性を与えるパターン・マッチ結果を与えることが含まれる。本方法にはさらに、メッセージを容認すること、パターン・マッチ結果に基づいて/バッファ記述子キュー(BDQ)を選択することが含まれる。選択されたBDQに従ってメッセージはメモリに記憶され、容認されたメッセージの少なくとも一部はキャッシュに選択的に記憶され、容認されたメッセージの一部はパターン・マッチ属性によって示される。
さらなる実施形態においては、パターン・マッチ属性は、第1のパターンと選択されたBDQとに対応する複数のBDQのうちの1つを示す。他のさらなる実施形態においては、第1のパターンに対応するパターン・マッチ属性は、選択されたBDQとしてデフォルトBDQを示す。他のさらなる実施形態においては、メッセージは、パターン・マッチ結果に基づいて容認される。
他のさらなる実施形態においては、パターン・マッチ属性はパターン・マッチ取り出しインディケータを与え、パターン・マッチ取り出しインディケータに基づいて、容認されたメッセージの一部をキャッシュに選択的に記憶する。パターン・マッチ取り出しインディケータは、取り出しが第1のパターンに対して有効および/または無効であると示す場合に、容認されたメッセージの一部をキャッシュに記憶しても良い。パターン・マッチ属性は、取り出しインデックスおよび取り出し長さを与えて、キャッシュに記憶される容認されたメッセージの一部を示しても良い。またパターン・マッチ属性は、容認されたメッセージの一部をキャッシュに記憶するために行なう、第1のパターンに対応するキャッシュ書き込み形式を示しても良い。
他のさらなる実施形態においては、情報処理システムは、メモリおよびキャッシュに結合された複数のプロセッサを含み、各プロセッサは、割り当てられたBDQを有している。パターン・マッチ結果は、メッセージを処理するための複数のプロセッサのうちの1つを示す。他のさらなる実施形態においては、パターン・マッチ結果は、メッセージに対応する優先度を示す。
他のさらなる実施形態においては、選択されたBDQの少なくとも一部をキャッシュに記憶する。パターン・マッチ属性は、選択されたBDQの少なくとも一部をキャッシュに記憶するために行なう、第1のパターンに対応するキャッシュ書き込み形式を示しても良い。
他のさらなる実施形態においては、メッセージ上でパターン・マッチングを行なうステップは、第1のパターンがメッセージ内に存在するか否かを判定することであって、第1のパターンはパターン・マッチ・データによって示され、パターン・マッチ・データは、対応するパターン・マッチ制御を有する、判定すること、第1のパターンが存在するか否かの判定に応答して、パターン・マッチ制御に基づいてパターン・マッチ結果を与えることを含む。パターン・マッチ制御は、第1のパターンが複数のパターンの連結か否かを示す連結インディケータを含んでいても良い。パターン・マッチ制御は、連続検索が有効であるか否かを示す連続検索インディケータを含んでいても良い。パターン・マッチ制御が逆パターン・インディケータを含み、かつ逆パターン・インディケータが第1の値を有する場合には、パターン・マッチ結果はメッセージ内に第1のパターンが存在するか否かを示し、逆パターン・インディケータが第2の値を有する場合には、パターン・マッチ結果は第1のパターンがメッセージ内に存在しないか否かを示しても良い。
他の実施形態においては、情報処理システムは、メモリと、キャッシュと、メモリおよびキャッシュに結合されるパケット・コントローラとを含む。パケット・コントローラは、メッセージを受信するための入力と、複数のパターンを記憶する/パターン・マッチ・レジスタと、複数のパターンのうちのそれぞれに対応するパターン・マッチ属性を記憶するパターン属性レジスタと、メッセージ上でパターン・マッチングを行なうために、かつ受信メッセージが複数のパターンのうちの第1のパターンを含むか否かを示すパターン・マッチ結果を与えるために結合されるパターン・マッチング・ロジックと、容認された場合に受信メッセージを記憶するために結合される受信バッファと、容認されたメッセージを受信バッファからメモリに与えるために、かつ容認されたメッセージの少なくとも一部をキャッシュに与えるために結合されるメモリ・コントローラとを含む。容認されたメッセージの一部は、第1のパターンに対応するパターン・マッチ属性によって示される。
他のさらなる実施形態においては、容認されたメッセージは、選択されたBDQに従ってメモリに与えられる。選択されたBDQは、複数のBDQのうちの1つであり、第1のパターンに対応するパターン・マッチ属性によって示されても良い。メモリ・コントローラは、選択されたBDQの少なくとも一部をキャッシュに与えるために結合されても良い。パターン・マッチ属性は、選択されたBDQの少なくとも一部をキャッシュに記憶するために行なう、第1のパターンに対応するキャッシュ書き込み形式を示しても良い。
他のさらなる実施形態においては、第1のパターンに対応するパターン・マッチ属性は、取り出しインデックスおよび取り出し長さを与えて、キャッシュに与えられた容認されたメッセージの一部を示す。他のさらなる実施形態においては、第1のパターンに対応するパターン・マッチ属性は、容認されたメッセージの一部をキャッシュ内に記憶するために行なうキャッシュ書き込み形式を示す。
他の実施形態においては、本方法は、メッセージを受信すること、第1のパターンに対応する第1のパターン・マッチが受信メッセージ内で検出されるか否かを判定することを含む。第1のパターンは、パターン・マッチ・データによって示されるとともに、対応するパターン・マッチ容認インディケータおよび対応する連続検索有効インディケータを有する。第1のパターン・マッチが検出され、かつ対応するパターン・マッチ容認インディケータが、検出された第1のパターンを有する受信メッセージの容認を示す場合に、対応する連続検索有効インディケータに基づいて受信メッセージを選択的に容認する。
他のさらなる実施形態においては、メッセージを受信することは、パケットの少なくとも一部を受信することを含む。パケットはさらに、イーサネット・パケットとして特徴付けられても良い。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、受信メッセージを容認することを、第1のパターンに対応する連続検索インディケータが連続検索を示さないときに行なう。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、受信メッセージを容認することを、第1のパターンに対応する連続検索インディケータが連続検索を示し、かつ受信メッセージの拒否を示さない対応するパターン・マッチ容認インディケータを有する第2のパターンに対応する第2のパターン・マッチが検出されるときに行なう。第2のパターンはパターン・マッチ・データによって示されても良く、第2のパターンに対応するパターン・マッチ容認インディケータは、受信メッセージを容認すること、受信メッセージを容認も拒否もしないことのうちの一方を示しても良い。第2のパターンに対応するパターン・マッチ容認インディケータは、受信メッセージを容認すること、受信メッセージを容認も拒否もしないことのうちの一方を示しても良く、パターン・マッチングは第2のパターンに対して無効であっても良い。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、受信メッセージを容認しないことを、第1のパターンに対応する連続検索インディケータが連続検索を示し、かつ受信メッセージの拒否を示す対応するパターン・マッチ容認インディケータを有する第2のパターンに対応する第2のパターン・マッチが検出されるときに行なう。
他のさらなる実施形態においては、対応するパターン・マッチ容認インディケータは、受信メッセージを容認すること、拒否すること、容認も拒否もしないことのうちの1つを示す。他のさらなる実施形態においては、本方法はさらに、第1のパターン・マッチが検出され、第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの拒否を示す場合に、メッセージを拒否することを含む。
他のさらなる実施形態においては、第1のパターンが対応する逆パターン・インディケータを有し、かつ逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第1のパターンを含むときに第1のパターン・マッチは検出され、逆パターン・インディケータが第2の値を有する場合には、受信メッセージが第1のパターンを含まないときに第1のパターン・マッチは検出される。
他のさらなる実施形態においては、第1のパターンは、第1のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の箇所を示す対応するマッチ・インデックスを有する。
他のさらなる実施形態においては、第1のパターンは、対応する連結インディケータを有する。本方法はさらに、第2のパターン・マッチが受信メッセージ内で検出されるか否かを判定することを含む。第1のパターン・マッチおよび第2のパターン・マッチが検出され、第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示し、かつ第1のパターンに対応する連結インディケータが第1および第2のパターンの連結を示す場合には、対応する連続検索有効インディケータに基づいてメッセージを選択的に容認する。第2のパターン・マッチが検出されず、第1のパターンに対応する連結インディケータが第1および第2のパターンの連結を示す場合には、第1のパターン・マッチは検出されないとみなす。
他のさらなる実施形態においては、本方法は、ハッシュ・ヒットが起きたか否かを判定するためにハッシュ関数を実行することであって、ハッシュ・ヒットが起き、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、対応する連続検索有効インディケータに基づいてメッセージを選択的に容認する、実行することを含む。
他の実施形態においては、本方法は、メッセージを受信すること、複数のパターンのうちの第1のパターンに対応する第1のパターン・マッチが受信メッセージ内で検出されるか否かを判定することを含む。第1のパターンは、対応するパターン・マッチ容認インディケータを有する。本方法はさらに、第1のパターン・マッチが検出される場合に、複数のパターンのうちの少なくとも1つに対応する連結インディケータが連結を示すか否かを判定することを含む。本方法はさらに、第1のパターン・マッチが検出され、複数のパターンのうちの少なくとも1つのパターンの連結インディケータが連結を示す場合に、複数のパターンのうちの第2のパターンに対応する第2のパターン・マッチが受信メッセージ内で検出されるか否かを判定することを含む。連結インディケータは、第1および第2のパターンのうちの一方に対応し、第2のパターンは、対応するパターン・マッチ容認インディケータを有する。第1のパターン・マッチが検出され、第1および第2のパターンのうちの一方に対応する連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、第1のパターンに対応するパターン・マッチ容認インディケータと第2のパターンに対応するパターン・マッチ容認インディケータとのうちの少なくとも一方に基づいて、受信メッセージを選択的に容認する。
他のさらなる実施形態においては、第1のパターンに対応するパターン・マッチ容認インディケータは、第1のパターンを用いて処理されるメッセージを容認すること、拒否すること、容認も拒否もしないことのうちの1つを示し、第2のパターンに対応するパターン・マッチ容認インディケータは、第2のパターンを用いて処理されるメッセージを容認すること、拒否すること、容認も拒否もしないことのうちの1つを示す。
他のさらなる実施形態においては、連結インディケータ、および受信メッセージを選択的に容認するために用いられるパターン・マッチ容認インディケータのうちの1つの両方が、第1のパターンおよび第2のパターンのうちの同じ一方に対応する。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、第1および第2のパターンのうちの一方に対応する連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、第1のパターンに対応するパターン・マッチ容認インディケータと第2のパターンに対応するパターン・マッチ容認インディケータとのうちの少なくとも一方に基づいて、受信メッセージを拒否する。
他のさらなる実施形態においては、第1のパターンが対応する逆パターン・インディケータを有し、第2のパターンが対応する逆パターン・インディケータを有し、かつ第1のパターンに対応する逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第1のパターンを含まないときに第1のパターン・マッチは検出され、第1のパターンに対応する逆パターン・インディケータが第2の値を有する場合には、受信メッセージが第1のパターンを含むときに第1のパターン・マッチは検出され、第2のパターンに対応する逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第2のパターンを含まないときに第2のパターン・マッチは検出され、第2のパターンに対応する逆パターン・インディケータが第2の値を有する場合には、受信メッセージが第2のパターンを含むときに第2のパターンは検出される。
他のさらなる実施形態においては、第1のパターン・マッチおよび第2のパターン・マッチが検出される場合、受信メッセージ内で第2のパターンの後に第1のパターンが生じる。他のさらなる実施形態においては、メッセージを受信することが、パケットの少なくとも一部を受信することを含む。他のさらなる実施形態においては、パケットはさらに、イーサネット・パケットとして特徴付けられる。
他のさらなる実施形態においては、第1のパターンは、受信メッセージ内で第1のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の第1の箇所を示す対応するマッチング・インデックスを有し、第2のパターンは、受信メッセージ内で第2のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の第2の箇所を示す対応するマッチング・インデックスを有する。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、複数のパターンのうちの少なくとも1つのパターンの連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、受信メッセージは容認される。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、複数のパターンのうちの少なくとも1つのパターンの連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、受信メッセージは、連続検索を行なうか否かを示す連続検索インディケータに基づいて選択的に容認される。
他の実施形態においては、パケット・コントローラは、メッセージを受信する入力と、パターン・マッチング・ロジックと、制御ロジックとを備える。パターン・マッチング・ロジックは、メッセージの受信に対応して、第1のパターンに対応する第1のパターン・マッチが受信メッセージ内で検出されるか否かを判定する。パターン・マッチ・ロジックは、少なくとも1つのパターン・マッチ・レジスタを含み、パターン・マッチ・レジスタは、第1のパターンを示すパターン・マッチ・データを記憶するように構成されるとともに、第1のパターンに対応するパターン・マッチ容認インディケータと第1のパターンに対応する連続検索有効インディケータとを含むパターン・マッチング制御を記憶する。制御ロジックは、パターン・マッチング・ロジックに結合されている。動作中、制御ロジックは、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、第1のパターンに対応する連続検索有効インディケータに基づいて受信メッセージを選択的に容認する。
他のさらなる実施形態においては、第1のパターンに対応する連続検索インディケータが連続検索を示さず、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、制御ロジックは受信メッセージを容認する。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、制御ロジックが受信メッセージを容認することを、第1のパターンに対応する連続検索インディケータが連続検索を示し、かつパターン・マッチ・データによって示されるとともに、受信メッセージの拒否を示さないパターン・マッチ制御によって示される対応するパターン・マッチ容認インディケータを有する第2のパターンに対応する第2のパターン・マッチが検出されるときに行なう。
他のさらなる実施形態においては、第1のパターン・マッチが検出され、かつ第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示す場合に、制御ロジックが受信メッセージを容認しないことを、第1のパターンに対応する連続検索インディケータが連続検索を示し、かつパターン・マッチ・データによって示されるとともに、受信メッセージの拒否を示すパターン・マッチ制御によって示される対応するパターン・マッチ容認インディケータを有する第2のパターンに対応する第2のパターン・マッチが検出されるときに行なう。
他のさらなる実施形態においては、対応するパターン・マッチ容認インディケータは、受信メッセージを容認すること、拒否すること、容認も拒否もしないことのうちの1つを示す。
他のさらなる実施形態においては、パターン・マッチング制御は、第1のパターンに対応する逆パターン・インディケータを含み、逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第1のパターンを含むときに第1のパターン・マッチは検出され、逆パターン・インディケータが第2の値を有する場合には、受信メッセージが第1のパターンを含まないときに第1のパターン・マッチは検出される。
他のさらなる実施形態においては、パターン・マッチ制御は、第1のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の箇所を示す第1のパターンに対応するマッチ・インデックスを含む。
他のさらなる実施形態においては、パターン・マッチ制御は、第1のパターンに対応する連結インディケータを含み、パターン・マッチング・ロジックは、受信メッセージ内で第2のパターン・マッチが検出されるか否かを判定し、制御ロジックは、第1のパターン・マッチおよび第2のパターン・マッチが検出され、第1のパターンに対応するパターン・マッチ容認インディケータが受信メッセージの容認を示し、かつ第1のパターンに対応する連結インディケータが第1および第2のパターンの連結を示す場合には、対応する連続検索有効インディケータに基づいてメッセージを選択的に容認し、第2のパターン・マッチが検出されず、かつ第1のパターンに対応する連結インディケータが第1および第2のパターンの連結を示す場合には、第1のパターン・マッチは検出されていないとみなす。
一実施形態においては、パケット・コントローラは、メッセージを受信する入力と、パターン・マッチング・ロジックと、制御ロジックとを含む。パターン・マッチング・ロジックは、第1のパターンに対応する第1のパターン・マッチが受信メッセージ内で検出されるか否か、および第2のパターンに対応する第2のパターン・マッチが検出されるか否かを判定する。パターン・マッチ・ロジックは、少なくとも1つのパターン・マッチ・レジスタを含む。パターン・マッチ・レジスタは、第1のパターンおよび第2のパターンを示すパターン・マッチ・データを記憶する。またパターン・マッチ・レジスタは、第1のパターンに対応するパターン・マッチ容認インディケータと、第2のパターンに対応するパターン・マッチ容認インディケータと、第1のパターンに対応する連結インディケータと、第2のパターンに対応する連結インディケータとを含むパターン・マッチ制御情報を記憶する。制御ロジックは、パターン・マッチング・ロジックに結合されて、第1のパターン・マッチが検出され、第2のパターン・マッチが検出され、かつ第1および第2のパターンのうちの一方に対応する連結インディケータが連結を示す場合に、第1のパターンに対応するパターン・マッチ容認インディケータと第2のパターンに対応するパターン・マッチ容認インディケータとのうちの少なくとも一方に基づいて、受信メッセージを選択的に容認する。
他のさらなる実施形態においては、第1のパターンに対応するパターン・マッチ容認インディケータと第2のパターンに対応するパターン・マッチ容認インディケータとのうちの一方と、第1および第2のパターンのうちの一方に対応する連結インディケータとの両方が、第1のパターンおよび第2のパターンのうちの同じ一方に対応する。他のさらなる実施形態においては、第1のパターン・マッチが検出され、第2のパターン・マッチが検出されず、かつ第1および第2のパターンの一方に対応する連結インディケータが連結を示す場合に、制御ロジックは受信メッセージを容認しない。
他のさらなる実施形態においては、パターン・マッチ制御は、第1のパターンに対応する逆パターン・インディケータと、第2のパターンに対応する逆パターン・インディケータとを含み、第1のパターンに対応する逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第1のパターンを含まないときに第1のパターン・マッチは検出され、第1のパターンに対応する逆パターン・インディケータが第2の値を有する場合には、受信メッセージが第1のパターンを含むときに第1のパターン・マッチは検出され、第2のパターンに対応する逆パターン・インディケータが第1の値を有する場合には、受信メッセージが第2のパターンを含まないときに第2のパターン・マッチは検出され、第2のパターンに対応する逆パターン・インディケータ第2の値を有する場合には、受信メッセージが第2のパターンを含むときに第2のパターンは検出される。
他のさらなる実施形態においては、パターン・マッチ制御は、受信メッセージ内で第1のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の第1の箇所を示す第1のパターンに対応するマッチ・インデックスと、受信メッセージ内で第2のパターン・マッチが検出されるか否かを判定するための受信メッセージ内の第2の箇所を示す第2のパターンに対応するマッチ・インデックスとを含む。他のさらなる実施形態においては、第1のパターン・マッチが検出され、第1および第2のパターンのうちの一方に対応する連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、制御ロジックは受信メッセージを容認する。他のさらなる実施形態においては、パターン・マッチ制御は、第1のパターンおよび第2のパターンのうちの一方に対応する連続検索有効インディケータを含んでおり、第1のパターン・マッチが検出され、複数のパターンのうちの少なくとも1つのパターンの連結インディケータが連結を示し、かつ第2のパターン・マッチが検出される場合に、制御ロジックが受信メッセージを選択的に容認することを、連続検索有効インディケータに基づいて、かつ第1のパターンに対応するパターン・マッチ容認インディケータと第2のパターンに対応するパターン・マッチ容認インディケータとのうちの少なくとも一方に基づいて行なう。
本明細書で示したアーキテクチャは単に典型であり、実際には同じ機能を実現する他の多くのアーキテクチャを実施できることを理解されたい。抽象的ではあるがそれでも明確な意味において、同じ機能を実現するためのコンポーネントのどのような配置も、所望の機能が実現されるように効果的に「関連」している。したがって、特定の機能を実現するように組み合わせた本明細書におけるどのような2つのコンポーネントも、アーキテクチャまたは中間コンポーネントとは関係なく、所望の機能を実現するように互いに「関連している」と考えることができる。同様に、そのように関連するどんな2つのコンポーネントも、所望の機能を実現するために、互いに「動作可能に接続されている」か、あるいは「動作可能に結合されている」と考えることができる。
当業者であれば、ロジック・ブロック間の境界は単に例示的なものであり、代替的な実施形態においては、ロジック・ブロックまたは回路要素を結合しても良いし、種々のロジック・ブロックまたは回路要素に対して機能を交互に分割することを課しても良いことを、認めるであろう。さらに、代替的な実施形態においては、特定のコンポーネントの複数の例を組み合わせても良い。
さらに、当業者であれば、前述した動作の機能間の境界は単に例示的なものであることを認めるであろう。複数の動作の機能を組み合わせて単一の動作にしても良く、および/または単一の動作の機能を分散してさらなる動作にしても良い。さらに代替的な実施形態には、特定の動作の複数の例が含まれていても良く、動作順序は、変更しても良いし、種々の他の実施形態と並行して行なってさえも良い。
前述の説明は典型であるため、「一実施形態」について説明がなされている場合、それは典型的な実施形態である。したがって、このような文脈において用語「1つ」を用いることは、1つおよび1つだけの実施形態が、説明した特徴を有し得るということを示すことを意図してはいない。むしろ、多くの他の実施形態が、典型的な「一実施形態」の説明した特徴を有していても良く、多くの場合有している。したがって、前述で用いたように、本発明を一実施形態との関連で説明するときには、一実施形態は本発明の多くの可能な実施形態のうちの1つである。
詳細な説明において用語「一実施形態」を用いることについての前述の注意にもかかわらず、特定の数の請求項要素を導入することが添付の特許請求の範囲において意図される場合には、このような意図は請求項において明白に説明されていること、このような説明がない場合にはこのような限定は存在もせず意図もされないことが、当業者によって理解される。たとえば、添付の特許請求の範囲において、請求項要素が「1つの」特徴を有すると説明される場合には、要素は、説明した特徴の1つおよび1つだけに限定されることが意図される。
本発明の特定の実施形態について図示し説明してきたが、本明細書で請求される本発明から逸脱することなく、本明細書で教示されたものに基づいて種々の変更、代替的な構成、および均等物を用いても良いことが、当業者には明らかである。その結果、添付の特許請求の範囲は、その範囲にこのようなすべての変化、変更などを包含するとともに、本発明の真の技術思想および範囲の中にある。さらに、本発明は添付の請求項のみによって規定されることを理解されたい。前述の説明は、本発明の実施形態の網羅的なリストを示すことが意図されているものではない。特に断らない限り、本明細書において示される各例は、非限定または非排他的な例であり、用語が非限定であるか否かにかかわらず、非排他的または類似の用語が、各例によって同時に示されている。いくつかの典型的な実施形態およびそれらに対する典型的な変形について概要を述べるように試みてきたが、他の実施形態および/または変形も、添付の特許請求の範囲において規定される本発明の範囲内である。