(57)【特許請求の範囲】
【請求項１】
複数個のハッシュ表を含み、複数個のハッシュ表のうちの個々のハッシュ表は複数個の記憶場所を含み、複数個の記憶場所の個々の記憶場所はインデックスによってアクセス可能であるエントリを記憶することができ、さらに、
キーを受けるとともに、キーから複数個のハッシュ表のうちの個々のハッシュ表の中に別個のインデックスを計算し、それによって複数個のハッシュ表のうちの個々のハッシュ表内の少なくとも１つの可能性のある記憶場所へキーを対応付けるように構成され、キーの数は複数個のハッシュ表における場所の合わせた数よりも大きく、さらに、
いずれの可能性のある記憶場所もすでに有効なエントリを有していることが認識されたことに応答して、有効なエントリの１つを、第２の別個のインデックスを用いて、可能性のある記憶場所から、有効なエントリの１つが利用可能な異なった記憶場所へ移動するように構成された挿入論理を含む、ネットワークスイッチ。
【請求項２】
エントリ挿入論理は、移動されるべき有効なエントリのうちの１つから、複数個のハッシュ表のうちの個々のハッシュ表の中に、第２の別個のインデックスを計算するとともに、計算された第２の別個のインデックスの１つによって示された、異なった記憶場所へ、移動されるべき有効なエントリの１つを移動する、請求項１に記載のネットワークスイッチ。
【請求項３】
エントリ挿入論理は、計算された第２の別個のインデックスによって示された場所の１つが使用されていないことの検出に応答して、移動されるべき有効なエントリの１つを、その使用されていない場所へ移動する、請求項２に記載のネットワークスイッチ。
【請求項４】
計算されたインデックスによって識別される記憶場所を第２のために検索し、有効なマッチするエントリを見つけたことに応答して、有効なマッチするエントリを回収するキーマッチ論理をさらに含む、請求項１に記載のネットワークスイッチ。
【請求項５】
ハッシュ関数論理は、キーのためのＣＲＣを生成し、かつ複数個のハッシュ表の中でインデックスとしてＣＲＣの変化する下位の一部を対応付けることにより、インデックスを計算する、請求項１に記載のネットワークスイッチ。
【請求項６】
複数個のハッシュ表を含み、複数個のハッシュ表の個々のハッシュ表は複数個の記憶場所を含み、個々の記憶場所はインデックスによってアクセス可能な１つのエントリを記憶することができ、さらに、
キーを受けるとともに、キーから複数個のハッシュ表のうちの個々のハッシュ表の中に別個のインデックスを計算し、それによって複数個のハッシュ表のうちの個々のハッシュ表内の少なくとも１つの可能性のある記憶場所へキーを対応付けるための手段を含み、可能性のあるキーの数は、複数個のハッシュ表における場所の合わせた数より大きく、さらに
いずれの可能性のある記憶場所もすでに有効なエントリを有していることを認識するとともに、有効エントリの１つを第２の別個のインデックスを用いて、可能性のある記憶場所から、有効なエントリの１つが利用可能な異なった記憶場所に移動するための手段を含む、ネットワークスイッチ。
【請求項７】
認識するとともに移動するための手段は、移動されるべき有効なエントリのうちの１つから、複数個のハッシュ表のうちの個々のハッシュ表の中に、第２の別個のインデックスを計算するとともに、計算された第２の別個のインデックスの１つによって示された、異なった記憶場所へ、移動されるべき有効なエントリの１つを移動する、請求項６に記載のネットワークスイッチ。
【請求項８】
認識するとともに移動するための手段は、計算された第２の別個のインデックスによって示された場所の１つが使用されていないことの検出に応答して、移動されるべき有効なエントリの１つを、その使用されていない場所へ移動する、請求項７に記載のネットワークスイッチ。
【請求項９】
計算されたインデックスによって識別される記憶場所を第２のために検索し、有効なマッチするエントリを見つけたことに応答して、有効なマッチするエントリを回収するための手段をさらに含む、請求項６に記載のネットワークスイッチ。
【請求項１０】
計算するための手段は、キーのためのＣＲＣを生成し、かつ複数のハッシュ表の中でインデックスとしてＣＲＣの変化する下位の一部を対応付けることによりインデックスを計算する、請求項６に記載のネットワークスイッチ。
【請求項１１】
ハッシュ表の数は４個である、請求項１または６のいずれかに記載のネットワークスイッチ。
【請求項１２】
複数個のハッシュ表を設けるステップを含み、複数のハッシュ表のうちの個々のハッシュ表は複数個の記憶場所を含み、複数個の記憶場所のうちの個々の記憶場所はインデックスによってアクセス可能なエントリを記憶することができ、さらに、
複数個のハッシュ表に記憶する前のキーを受けるステップと、
キーから複数個のハッシュ表のうちの個々のハッシュ表の中に別個のインデックスを計算するステップとを含み、それによって複数個のハッシュ表のうちの個々のハッシュ表内の少なくとも１つの可能性のある記憶場所へキーを対応付けるように構成され、キーの数は、複数個のハッシュ表における場所の合わせた数よりも大きく、さらに、
いずれの可能性のある記憶場所もすでに有効なエントリを有していることを認識するとともに有効なエントリのうちの１つを移動するステップを含む、ネットワークスイッチにおいて転送エントリを記憶するための方法。
【請求項１３】
移動されるべき有効なエントリのうちの１つから、複数個のハッシュ表のうちの個々のハッシュ表の中に、第２の別個のインデックスを計算するとともに、計算された第２の別個のインデックスの１つによって示された、異なった記憶場所へ、移動されるべき有効なエントリの１つを移動するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
計算された第２の別個のインデックスによって示された場所の１つが使用されていないことの検出に応答して、移動されるべき有効なエントリの１つを、その使用されていない場所へ移動するステップをさらに含む、請求項１３に記載の方法。
【請求項１５】
計算されたインデックスによって識別される記憶場所を第２のために検索し、有効なマッチするエントリを見つけたことに応答して、有効なマッチするエントリを回収するステップとをさらに含む、請求項１２に記載の方法。
【請求項１６】
計算するステップはさらに、
キーのためのＣＲＣを生成するとともに、複数のハッシュ表の中でインデックスとしてＣＲＣの変化する下位の一部を対応付けるステップを含む、請求項１２に記載の方法。
【請求項１７】
ハッシュ表の数は４個である、請求項１２に記載の方法。
【請求項１８】
複数個のハッシュ表を含み、複数個のハッシュ表のうちの個々のハッシュ表は複数個の記憶場所を含み、複数個の記憶場所の個々の記憶場所はインデックスによってアクセス可能であるエントリを記憶することができ、さらに、
キーを受けるとともに、キーから複数個のハッシュ表のうちの個々のハッシュ表の中に別個のインデックスを計算し、それによって複数個のハッシュ表のうちの個々のハッシュ表内の少なくとも１つの可能性のある記憶場所へキーを対応付けるように構成され、キーの数は複数個のハッシュ表における場所の合わせた数よりも大きく、さらに、
複数個のハッシュ表にキーを挿入し、いずれの可能性のある記憶場所もすでに有効なエントリを有していることが認識されたことに応答して、上書きするための記憶場所として有効なエントリの１つを選択し、選択された有効な記憶場所のエントリを新しいエントリで上書きするように構成された挿入論理を含む、ネットワークスイッチ。
【請求項１９】
挿入論理は、上書きするための記憶場所として有効なエントリの１つをランダムに選択する、請求項１８に記載のネットワークスイッチ。
【請求項２０】
複数個のハッシュ表を設けるステップを含み、複数のハッシュ表のうちの個々のハッシュ表は複数個の記憶場所を含み、複数個の記憶場所のうちの個々の記憶場所はインデックスによってアクセス可能なエントリを記憶することができ、さらに、
複数個のハッシュ表に記憶する前のキーを受けるステップと、
キーから複数個のハッシュ表のうちの個々のハッシュ表の中に別個のインデックスを計算するステップを含み、それによって複数個のハッシュ表のうちの個々のハッシュ表内の少なくとも１つの可能性のある記憶場所へキーを対応付けるように構成され、キーの数は、複数個のハッシュ表における場所の合わせた数よりも大きく、さらに、
いずれの可能性のある記憶場所もすでに有効なエントリを有していることが認識されたことに応答して、上書きするための記憶場所として有効なエントリの１つを選択するとともに、選択された有効な記憶場所のエントリを新しいエントリで上書きするステップを含む、ネットワークスイッチにおいて転送エントリを記憶するための方法。
【請求項２１】
上書きするための記憶場所として有効なエントリの１つを選択するステップは、上書きするための記憶場所として有効なエントリの１つをランダムに選択するステップを含む、請求項２０に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
コンピュータネットワークにおいては、ネットワーキングスイッチが、スイッチに接続される多数の入来ポートからデータパケットを受信し、スイッチに接続される多数の出口ポートにデータパケットを転送する。スイッチは、入来ポートの１つで受信されるデータパケットに含まれる宛先アドレスに依存して、データパケットが転送される出口ポートを決定する。
【０００２】
データパケットが宛先アドレスに基づいて転送されるべき出口ポートは、ネットワーキングスイッチにおける転送テーブル中の転送エントリに記憶される。転送テーブルは、特定の宛先アドレスと関連付けられる転送エントリのために検索される。
【０００３】
一般的に、スイッチを介してアクセス可能である可能性ある宛先アドレスの各々について転送テーブルにエントリを設けることは実行可能でない。たとえば、４８ビットのイーサネット（Ｒ）宛先アドレス、すなわち、メディアアクセスコントロール（“ＭＡＣ”）アドレスについて、２48個の転送エントリが、可能性あるＭＡＣアドレスのすべてのための転送情報を記憶するために転送テーブルに必要とされる。代わりに、ＭＡＣアドレスの一部のみがハッシュ表に記憶される。ハッシュ機能を宛先アドレスに対して行ってより少ない数を設け、これを用いてハッシュ表をインデックス付けする。
【０００４】
宛先アドレスに対してハッシュ機能を行う結果として、複数の宛先アドレスが同じインデックスに対応付けられ得る、すなわち、エイリアシングが起こり得る。したがって、ハッシュ表のある場所へのエントリの挿入は、もしその場所が既に別の宛先のための転送エントリを記憶しているのであれば、妨げられる可能性がある。
【０００５】
エイリアシングの問題に対するアプローチの１つは、転送エントリが第１のインデックスで見つからないならば第２のインデックスを設けるために宛先アドレスのための第２のハッシュ関数を生成することである。しかしながら、複数のレベルのハッシングの結果、転送エントリの検索に遅れを加えることにより非決定的な検索をもたらしてしまう。
【０００６】
エイリアシングを低減し決定的な検索を提供するための周知の技術の１つは、各インデックスごとに２つ以上の場所を与えることである。これは複数バケット技術とも呼ばれる。複数バケットを実現するハッシュ表において、予め定められた数の場所またはバケットが各インデックスごとに設けられる。
【０００７】
図１Ａは、先行技術の複数バケットハッシュ表１３６のブロック図を示す。ハッシュ表１３６は、２15個のインデックス（インデックスビット１４：０による）１３４を含む。各インデックス１３４ごとに４個のバケット１３８Ａ−Ｄがある。バケット１３４Ａ−Ｄの各々は、１つの転送エントリを記憶する。ハッシュ表１３６のサイズは、場所１３８Ａ−Ｄのサイズおよびインデックス１３４の合計数によって決定される。たとえば、各バケット１３８Ａ−Ｄが１バイト幅であるならば、１２８キロバイト（３２キロバイト×４）のハッシュ表が必要とされる。
【０００８】
しかしながら、複数バケットハッシュ表はメモリの非効率的な使用をもたらし、インデックスのすべての場所が使用されているならば、転送エントリの挿入は阻止され得る。したがって、使用されていない場所がハッシュ表中の他のインデックスで利用可能であったとしても、インデックスに対応付けられる宛先アドレスのためのさらなる転送エントリが、ハッシュ表中のそのインデックスで記憶されることができない。
【０００９】
【発明の概要】
ネットワークスイッチは、複数個のハッシュ表を含み、その各々が異なった計算されたインデックスで同時にアクセスされる。インデックスは、宛先アドレスに依存してキーからハッシュ関数論理によって計算される。キーのための転送エントリが、そのキーのための計算されたインデックスによって識別される場所の１つに挿入される。パケットが受信されると、４個のハッシュ表にアクセスするためにインデックスが計算され、マッチングキーを有するもののために、位置決めされた転送エントリが検索される。挿入プロセス中の転送エントリの適切な記憶により、マッチ検索は、１検索サイクルで完了可能である。
【００１０】
転送エントリは、好ましくは、使用されていない場所を検出した後、挿入選択論理によって、計算されたインデックスによって識別される使用されていない場所に挿入される。しかしながら、挿入選択論理が、キーのための計算されたインデックスによって識別される場所のすべてが使用されていると決定したならば、挿入選択論理は、使用されている場所の１つを上書きし得る。
【００１１】
好ましい実施例では、キーのための計算されたインデックスによって識別される場所のすべてが使用されていると決定すると、挿入選択論理は、別のキーを有する転送エントリの１つを、他のキーに利用可能な別の場所に移動させ、新しい転送エントリを挿入する。そのエントリの移動が、さらに別のエントリの移動をもたらし得るので、転送エントリは再帰的（recursively）に再順序付け（reorder）され得る。
【００１２】
パケットが受信されると、キーマッチ論理が、計算されたインデックスによって特定される場所の１つにおける転送エントリに記憶された検索キーのためにハッシュ表を検索し、マッチング転送エントリを与える。挿入プロセスにおける再順序付けのために、インデックス付けされた場所の１つにおける適切な転送エントリを保証することができる。
【００１３】
ハッシュ関数論理は、好ましくは、キーのためのＣＲＣを生成し、インデックスとしてＣＲＣの一部を選択することにより、ハッシュ表ごとにインデックスを計算する。ハッシュ表および対応するインデックスの数は、好ましくは、４個である。
【００１４】
この発明の以上および他の目的、特徴ならびに利点は、添付の図面に説明されるこの発明の好ましい実施例の以下のより特定的な説明から明らかとなり、同様の参照文字は異なった図を通じて同じ部分を指す。図面は縮尺どおりであるとは限らず、代わりに、この発明の原理を説明することに重きが置かれる。
【００１５】
【詳細な説明】
図１Ｂは、この発明の原理に従う転送エントリを記憶するための、ネットワークスイッチにおけるハッシュ表１９０Ａ−Ｄを示すブロック図である。ハッシュ表１９０Ａ−Ｄの各々は、２13個のインデックスを設けており、転送エントリを記憶するために各インデックスごとに１つの場所がある。組合されたハッシュ表１９０Ａ−Ｄは、１２15（２13×２2）個のインデックスを有する。したがって、４つのハッシュ表１９０Ａ−Ｄは、先行技術の複数バケットハッシュ表のサイズの４分の１であるハッシュ表中に、図１Ａに示す先行技術の複数バケットハッシュ表と同じ数のインデックスを設けている。各インデックスごとの場所の数および１場所当りのビットの数は、設計選択であり、この発明を限定するものではない。
【００１６】
４つの異なったインデックスが、宛先アドレスに依存してハッシュ関数論理によって同時に計算される。ハッシュ関数論理は、図３を参照してさらに記載される。計算されたインデックスの各々は、異なったハッシュ表１９０Ａ−Ｄに与えられる。たとえば、Ｋｅｙ＿Ａに依存して４個の異なったインデックス、すなわち、Ｋｅｙ＿Ａインデックス１−４  １７２Ａ−Ｄが生成される。キーのための転送エントリは、４つの計算されたインデックスの１つによって識別される場所の１つに挿入され、そのため、その後のそのキーの検索の際、キーは１検索サイクルで位置決めされる。
【００１７】
たとえば、１検索サイクルでＫｅｙ＿Ａのための転送エントリを与えるために、Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａインデックス１−４  １７６Ａ−Ｄによって識別される場所１３８、１４６、１５６、１６４の１つに記憶されなければならない。場所１３８、１４６、１５６、１６４のすべてが他の挿入キーのための転送エントリを記憶しているならば、Ｋｅｙ＿Ａを記憶するための場所１３８、１４６、１５６、１６４の１つを与えるために、転送キーの１つが、ハッシュ表１９０Ａ−Ｄの１つの別の場所に移動される。ハッシュ表１９０Ａ−Ｄに記憶される転送エントリを再順序付けするための方法は、図８と関連付けられて記載される。
【００１８】
図示のとおり、４個のＫｅｙ＿Ａインデックス１７２Ａ−Ｄは、ハッシュ表＿１  １９０Ａ中の場所１３８、ハッシュ表＿２  １９０Ｂ中の場所１４６、ハッシュ表＿３  １９０Ｃ中の場所１５６およびハッシュ表＿４  １９０Ｄ中の場所１６４を識別する。場所１３８、１４６、１５６、１６４のすべては、Ｋｅｙ＿Ａ以外のキーのための転送エントリを記憶している。Ｋｅｙ＿Ｂは場所１３８に記憶され、Ｋｅｙ＿Ｃは場所１４６に記憶され、Ｋｅｙ＿Ｄは場所１５６に記憶され、Ｋｅｙ＿Ｅは場所１６４に記憶される。使用されていないまたは空の場所がハッシュ表において利用可能である；たとえば、場所１４０、１４２、１４４はハッシュ表１  １９０Ａにおいて使用されていない。
【００１９】
決定的な検索、すなわち、待合せなしの切換を提供するために、Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａのためのインデックス１７２Ａ−Ｄによって識別される場所の１つに記憶されなければならない。したがって、Ｋｅｙ＿Ａのための転送エントリが空にされた場所に記憶可能となるように、場所１３８、１４６、１５６、１６４に記憶されるキーの１つが使用されていない場所に移動されなければならず、移動されたキーのための転送エントリは、移動されたキーの他のインデックスの１つによって識別される場所に記憶される。
【００２０】
ＫｅｙＡは、ＫｅｙＢと場所１３８を共有する。場所１３８に記憶されるＫｅｙＢのためのエントリは、したがって、Ｋｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄのいずれかによって識別される空の場所に移動され得る。図示のとおり、Ｋｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄによって識別される他の場所１４８、１５８、１６６は使用されている；したがって、Ｋｅｙ＿Ｂは、他の場所１４８、１５８、１６６の１つに移動することができない。しかしながら、Ｋｅｙ＿Ｃのための他のインデックスの２つ１７６Ａ、１７６Ｄによって識別される場所の２つ１４０、１６８は空である。したがって、Ｋｅｙ＿Ｃのための転送エントリは、場所１４６から場所１６８または１４０に移動され得る。Ｋｅｙ＿Ｃのための転送エントリを移動した後、Ｋｅｙ＿Ａのための転送エントリが、ｋｅｙ＿Ａインデックス＿２  １７２Ｂによって識別される場所１４６に挿入される。Ｋｅｙ＿ＡまたはＫｅｙ＿Ｃのための転送エントリのための検索は決定的である、すなわち、検索の各々は１検索サイクルで完了可能である。同様に、Ｋｅｙ＿Ｄのための転送エントリは、Ｋｅｙ＿Ａを挿入するための場所１５６を与えるために場所１５６から場所１４２、１５０または１７０に移動されているかもしれず、または、Ｋｅｙ＿Ｅのための転送エントリは、Ｋｅｙ＿Ａを挿入するための場所１６４を与えるために場所１６４から場所１４４、１５２または１６２に移動されているかもしれない。
【００２１】
したがって、ハッシュ表１９０Ａ−Ｄに記憶された各転送エントリごとに決定的な検索を行うために、宛先アドレスのための転送エントリが宛先アドレスのための計算されたインデックスの１つのいずれかで記憶されるように、ハッシュ表１９０Ａ−Ｄに記憶された転送エントリは再順序付けされる。
【００２２】
図１Ａに表わされる先行技術の手法に対するこの発明の手法の比較は、各々が図１Ａに表わされる４個のバケット各々を含むように図１Ｂの個々のインデックス場所の拡張を考慮することにより促進される。そのような構成は、図１Ａと同じ３２Ｋ×４メモリを使用する。ハッシュ表への各インデックスは、宛先アドレスへの適切なマッチであり得る４個の転送エントリを提供するが、図１Ａの単一インデックスとは対照的に、各キーごとにハッシュ表への４個のインデックスがある。
【００２３】
この発明では、他の宛先アドレスとの各インデックスの共有がより大きくなる。図１Ｂの手法において転送エントリを挿入する際、共有がより大きくなるために任意の１つのインデックスでの競合がより起こりやすくなるが、全体として見ると、１キー当りの複数のインデックスおよび複数のバケットを有する図１Ｂの手法では、挿入プロセスにおいてもはや初期競合はない。有利には、この手法はさらにシフトの可能性を提供するが、他の態様では特定のキーと共有されない他の場所への転送エントリを妨げてしまい、そのため挿入プロセスにおける実行可能性がより大きくなる。特定のインデックスで競合しているであろういかなるキーも、転送エントリが移動され得る任意の他のインデックスでは競合しにくくなるであろう。この利点は、複数のバケットが使用されるかどうかに関係なく得られ、図１Ｂの単一バケット手法は、４倍だけの必要とされるメモリ領域の低減とともにこれを達成する。
【００２４】
挿入プロセスは、実現化例に依存する再帰のレベルと比例して再配置のためのさらなる処理時間を必要とし得るが、挿入を処理するために必要とされる時間は、ルーティングプロセス中に単一サイクルでマッチを見つけるための必要性ほど重大ではない。この発明では、そのようなマッチは実質的により確実である。実際には、マッチは、全体のメモリサイズの範囲内でほぼ確かである。
【００２５】
図１Ｃは、図１Ｂに示すハッシュ表が使用使用され得る共通メモリスイッチ１００のブロック図である。入来ポート１０２で受信されるすべてのデータは、１つ以上の出口ポート１１２に切換えられるより前にセグメントバッファメモリ１０８に記憶される。パケット記憶マネージャ１０６は、セグメントバッファメモリ１０８への書込および読出アクセスを制御する。
【００２６】
スイッチ１００は、入来ポートエンジン１０４および出口ポートエンジン１１０を含む。データパケットは、入来ポート１０２で直列に受信される。入来ポートエンジン１０４は、受信されたデータパケットのヘッダを検出し処理し、入来ポートエンジン１０４の転送論理１２８においてデータパケットのための転送エントリに記憶される転送ベクトル１１４を選択する。転送ベクトル１１４は、ビットマップであり、１ビットが複数個の出口ポート１１２の各々に対応し、データパケットがヘッダの宛先アドレスに依存してその出口ポート１１２に転送されるべきかどうかを示す。転送ベクトル１１４は、パケット記憶マネージャ１０６に転送される。たとえば、転送アドレスＸを有するデータパケットは、出口ポート＿１  １１２Ａを介して宛先アドレス１３６Ａを有するネットワークノードに転送され、宛先アドレスＹを有するデータパケットは、出口ポート＿Ｎ  １１２Ｎを介して宛先アドレスＹ１３６Ｃを有するネットワークノードに転送され、宛先アドレスＺを有するデータパケットは、出口ポート＿Ｎ  １１２Ｎを介して宛先アドレスＺ  １３６Ｂを有するネットワークノードに転送される。
【００２７】
パケット記憶マネージャ１０６は、セグメントバッファメモリ１０８へのアクセスを与える。パケット記憶マネージャ１０６は、セグメントバッファ１０８に読出動作および書込動作のためのセグメントバッファメモリアドレス１２２を与え、記憶された各データパケットのセグメントバッファメモリ１０８中の場所をマネージャ１０６内に記憶する。出口エンジン１１０は、どれでデータパケットを伝送すべきか、選択制御信号１２０により複数個の出口ポート１１２の１つを選択し、記憶されたデータパケットを選択された出口ポート１１２に与える。
【００２８】
セグメントバッファメモリ１０８は、すべての入来ポート１０２および出口ポート１１２によって共有される共通メモリである。スイッチ１００は非阻止性であり、すなわち、入来ポート１０２のいずれかに到着したデータパケットは、出口ポート１１２のいずれかに転送されることを阻止されない。スイッチ１００は、入来ポート１０２で受信されたデータパケットの入来ポートエンジン１０４による処理と、出口ポート１１２のための出口ポートエンジン１１０による記憶されたデータパケットの処理とを同時に行う。
【００２９】
図１Ｄは、入来ポート１０２で受信され得る先行技術のイーサネット（Ｒ）データパケット１２０を例示するブロック図である。イーサネット（Ｒ）データパケットは、ヘッダ１２２と、データフィールド１３４と、フレームチェックシーケンス１３２とを含む。ヘッダ１２２は、宛先アドレス１２４と、発信元アドレス１２６と、長さまたはタイプフィールド１３０とを含む。発信元アドレス１２６および宛先アドレス１２４は、それぞれ発信元および宛先の物理的装置を識別する一意の４８ビットのアドレスである。データパケットは、１２ビットのＶＬＡＮ識別子（“ＶＩＤ”）（図示せず）も含んでよい。データパケット１２０のサイズは、４６バイトから１５００バイトまでさまざまであり得る、データフィールド１３４のサイズに依存する。
【００３０】
図２は、この発明の原理に従う図１Ｃにおける非阻止性の共通メモリスイッチ１００の入来ポートエンジン１０４に示される転送論理１２８の検索論理２１６のブロック図である。検索論理２１６は、４個のハッシュ表１９０Ａ−Ｄを含む。ハッシュ表１９０Ａ−Ｄの数は、設計選択でありこの発明を限定するものではない。
【００３１】
検索論理２１６は、ハッシュ関数論理２００およびキーマッチ論理２０４も含む。ハッシュ関数論理２００は、検索キー２０６に依存して４個のインデックス２０８Ａ−Ｄを同時に生成する。検索キー２０６は、キャッシュメモリのタグと同様である。キーマッチ論理２０４は、インデックス２０８Ａ−Ｄによって識別される４個の場所のうちどれが検索キー２０６と関連付けられる転送エントリを記憶するかを決定する。マッチング転送エントリを見つけると、マッチング転送エントリの転送ベクトル１１４部分は、パケット記憶マネージャ１０６に転送される（図１Ｃ）。
【００３２】
データパケットのヘッダの宛先アドレスに対応する転送エントリを検索するために、データパケットが入来ポート１０２（図１Ｃ）の１つから受信されると、入来ポートエンジン１０４はデータパケット１２０のヘッダ１２２（図１Ｄ）を調べる。４８ビット宛先アドレス１２４（図１Ｄ）のコピーが１２ビットＶＬＡＮ識別子（“ＶＤＩ”）と連結され、６０ビット検索キー２０６を形成する。宛先アドレスとＶＤＩの連結は、設計選択でありこの発明を限定するものではなく、そのため、検索キーは宛先アドレス１２４（図１Ｄ）であってもよい。検索キー２０６は、ハッシュ関数論理２００に転送される。ハッシュ関数論理２００は、検索キー２０６に対してハッシュ機能を行うことの結果として、４個の１３ビットのインデックス２０８Ａ−Ｄを与える。
【００３３】
この発明は、図１Ｄに示すイーサネット（Ｒ）データパケット１２０について記載される。しかしながら、この発明はイーサネット（Ｒ）データパケットに限られるものでなく、任意の他のタイプのデータパケットのための転送エントリを挿入し検索するために使用されてもよい。
【００３４】
図３は、図２に示すハッシュ関数論理２００を例示するブロック図である。ハッシュ関数論理２００は、サイクリックリダンダンシチェック（“ＣＲＣ”）生成論理３００およびハッシュ表インデックス論理３０２を含む。ハッシュ関数は、ＣＲＣ生成論理３００において検索キー２０６に対して行なわれるＣＲＣ関数である。ＣＲＣ生成論理は、当業者には周知である。ハッシュ関数はＣＲＣ生成に限られるものでなく、使用されるハッシュ関数は、当業者によって使用されるいずれのハッシュ関数であってもよい。ＣＲＣ生成論理３００は、６０ビット検索キー２０６から３２ビットＣＲＣ３０４を生成する。
【００３５】
３２ビットＣＲＣ３０４は、ハッシュ表インデックス論理３０２に転送される。ハッシュ表インデックス論理３０２は、３２ビットＣＲＣ３０４から４個のインデックス２０８Ａ−Ｄを生成する。４個のインデックス２０８Ａ−Ｄの各々は、１３ビットを有し、したがって、ハッシュ表１９０Ａ−Ｄの各々における８Ｋ場所をアドレスするために８Ｋアドレスを与える。４個のインデックス２０８Ａ−Ｄは、３２ビットＣＲＣ３０４のビットを以下のとおり４個のインデックス２０８Ａ−Ｄに対応付けることにより生成される：ＣＲＣ３０４のビット１２：０は、インデックス＿１  ２０８Ａのビット１２：０に対応付けられ；ＣＲＣ３０４のビット１８：６は、インデックス＿２  ２０８Ｂのビット１２：０に対応付けられ；ＣＲＣ３０４のビット２５：１３は、インデックス＿３  ２０８Ｃのビット１２：０に対応付けられ、ＣＲＣ３０４のビット３１：１９は、インデックス＿４  ２０８Ｄのビット１２：０に対応付けられる。
【００３６】
図２に戻って、インデックス２０８Ａ−Ｄが、ハッシュ関数論理２００によって生成された後、インデックス２０８Ａ−Ｄによって特定されるハッシュ表１９０Ａ−Ｄの場所に記憶されるエントリ２１０Ａ−Ｄは、キーマッチ論理２０４に転送される。検索キー２０６もキーマッチ論理２０４に転送される。
【００３７】
図４は、図２に示すハッシュ表１９０Ａ−Ｄの場所のいずれか１つに記憶される転送エントリ２１０のフォーマットを示すブロック図である。転送エントリ２１０は、データパケットがどこに転送されるべきかを示すフィールドを含む。転送エントリ２１０は以下のフィールドを含む：古さフラグ４０２、遠隔キャッシュリフレッシュフラグ４０４、学習ポート番号４０６、アドレス関連ＱｏＳ有効４０８、アドレス関連ＱｏＳ４１０、論理的ポート転送ベクトル４１２、静的エントリ標識フラグ４１４、タイプフラグ４１６、有効エントリ標識フラグ４１８、およびキー４２０を含む。
【００３８】
１ビットの古さフラグ４０２は、転送エントリ２１０の古さを示す。１ビットの遠隔キャッシュリフレッシュフラグ４０４は、タイムアウトが可能化されるかどうかを示す。学習ポート番号４０６は、どのインターフェイス上で、転送エントリのキー４２０に記憶されたＭＡＣアドレスが学習されたかを示す。たとえば、ＭＡＣアドレスがローカルな外部アクセスポート上で学習されたならば、これは、物理的な入来ポート番号１０４である。アドレス関連クオリティ・オブ・サービス（“ＱｏＳ”）フィールド４１０は、アドレスのための管理割当ての質を示す。１ビットのアドレスＱｏＳ関連有効４０８フラグは、ＱｏＳフィールド４１０が将来の待合せを考慮して使用されるべきかどうかを示す。３２ビットの論理的ポート転送ベクトル４１２は、データパケットがどのポートに転送されるべきかを示す。１ビットの静的エントリ標識フラグ４１４は、転送エントリ２１０が静的かまたは動的であるかを示す。１ビットのタイプフラグ４１６は、転送エントリ２１０がレベル２転送エントリについて使用可能であるかどうかを示す。１ビットの有効エントリ標識フラグ４１８は、転送エントリ２１０が有効であるかどうかを示す。６０ビットのキー４２０は、転送エントリ２１０と関連付けられる検索キー２０６を記憶する。
【００３９】
図２に戻って、キーマッチ論理２０４は、ハッシュ表１９０Ａ−Ｄから転送された転送エントリ２１０Ａ−Ｄの各々に記憶されるキーエントリ４２０を検索キー２０６と比較する。マッチしていれば、その転送エントリからの３２ビットの論理的ポート転送ベクトル４１２（図４）が、転送ベクトル１１４でパケット記憶マネージャ１０６（図１）に転送される。マッチしていなければ、ミス信号２１４が生成され、ミスは、入来ポートエンジン１０４においてノーマッチファウンド論理（図示せず）によって処理される。
【００４０】
図５は、ハッシュ表１９０Ａ−Ｄの１つにおいて検索キー２０６とマッチする転送エントリ２１０を検索するための検索論理２１６のステップを例示する流れ図である。
【００４１】
ステップ５００で、検索論理２１６は検索要求を待つ。検索要求があれば、処理はステップ５０２に続く。なければ、検索論理２１６は引続き検索要求を待つ。
【００４２】
ステップ５０２で、ハッシュ関数論理２００は、検索キー２０６から４個のインデックス２０８Ａ−Ｄを生成し、４個のインデックス２０８Ａ−Ｄをハッシュ表１９０Ａ−Ｄに転送する。処理はステップ５０４に続く。
【００４３】
ステップ５０４で、インデックス２０８Ａ−Ｄによって特定されるハッシュ表２１０Ａ−Ｄ中の場所に記憶される転送エントリ２１０Ａ−Ｄは、キーマッチ論理２０４に転送される。ステップ５０６に続く。
【００４４】
ステップ５０６で、キーマッチ論理２０４は、転送エントリ２１０Ａ−Ｄの各々に記憶されるキー４２０（図４）を検索キー２０６と比較し、マッチするかどうかを決定する。マッチしていれば、処理はステップ５０８に続く。していなければ、処理はステップ５１０に続く。
【００４５】
ステップ５０８で、検索キー２０６のための転送エントリ２１０Ａ−Ｄが見つけられる。転送エントリ２１０に記憶される論理的ポート転送ベクトル４１２（図４）は、転送ベクトル１１４（図１Ｃ）でパケット記憶マネージャ１０６（図１Ｃ）に転送される。データパケットは、パケット記憶マネージャ１０６、セグメントバッファメモリ１０８および出口ポートエンジン１１０を介して予め定められた出口ポート１１２に転送される。処理はステップ５００に続く。
【００４６】
ステップ５１０で、検索キー２０６とマッチする転送エントリ２１０Ａ−Ｄが見つけられなかった。入来ポートエンジン１０４は、たとえば、データパケットを出口ポート１１２のすべてにフラッド（flood）する、すなわち、送ることによりミスを処理する。この処理は、ブリッジングプロトコルの一部である。処理はステップ５００に続く。
【００４７】
図６は、ハッシュ表１９０Ａ−Ｄの１つにおける場所に転送エントリ２１０を挿入するための転送論理１２８（図１Ｃ）における挿入論理２０８を例示するブロック図である。４８ビット宛先アドレス１２４（図１Ｄ）のコピーが１２ビットＶＬＡＮ識別子（“ＶＩＤ”）と連結され６０ビット挿入キー６０６を形成する。宛先アドレスとＶＩＤの連結は、設計選択でありこの発明を限定するものではない。検索キー２０６に対して行なわれたのと同じハッシュ機能が挿入キー６０６に対して行なわれる。ハッシュ関数は、図３と関連付けて検索キー２０６について既に記載された。４個のインデックス２０８Ａ−Ｄがハッシュ関数の結果として生成される。インデックスの各々は、挿入キー６０６が挿入され得るそれぞれのハッシュ表１９０Ａ−Ｄ中の場所を識別する。
【００４８】
インデックス２０８Ａ−Ｄによって識別されるハッシュ表１９０Ａ−Ｄ中の場所に記憶された転送エントリ２１０Ａ−Ｄの内容は、転送エントリ挿入論理６００に転送される。転送エントリ挿入論理６００は、転送エントリ２１０Ａ−Ｄの内容および上書き信号６０２の状態に依存して、インデックス２０８Ａ−Ｄによって識別されるどの場所に挿入キー６０６を挿入すべきかを決定する。
【００４９】
転送エントリ挿入論理６００は、インデックス２０８Ａ−Ｄによって識別される場所のうちどれが使用されていないかを決定する。使用されていない場所が見つかると、挿入キー６０６を含む転送エントリ２１０が、使用されていない場所へのインデックス２０８によって識別される使用されていない場所に挿入される。使用されていない場所が見つからず、かつ上書き信号６０２が上書きが可能化されることを示すならば、インデックス２０８Ａ−Ｄの１つがランダムに選択され、挿入キー６０６を含む転送エントリが、選択されたインデックス２０８によって識別される場所に挿入される。
【００５０】
すべての場所が使用されており、かつ上書き信号６０２が上書きが可能化されないことを示すのであれば、インデックス２０８Ａ−Ｄによって識別される使用されていない場所を与えて挿入キー６０６を含む転送エントリを挿入するために、ハッシュ表１９０Ａ−Ｄに記憶される転送エントリの再順序付けが行なわれる。ハッシュ表１９０Ａ−Ｄにおいて転送エントリ２１０Ａ−Ｄを再順序付けするための方法は、図８と関連付けて記載される。
【００５１】
図７は、ハッシュ表１９０Ａ−Ｄの１つの場所に挿入キー６０６を含む転送エントリ２１０を挿入するための図６に示す挿入論理６０８のステップを例示する流れ図である。
【００５２】
ステップ７００で、ハッシュ関数論理２００は、ハッシュ表１９０Ａ−Ｄの１つにおける場所に転送エントリを挿入する要求を受取る。処理はステップ７０２に続く。
【００５３】
ステップ７０２で、ハッシュ関数論理２００は、挿入キー６０６から４個のインデックス２０８Ａ−Ｄを並列に同時に生成する。インデックス２０８Ａ−Ｄの生成は、図３と関連付けて既に記載された。処理はステップ７０４に続く。
【００５４】
ステップ７０４で、生成されたインデックス２０８Ａ−Ｄによって識別されるハッシュ表１９０Ａ−Ｄ中の場所の内容が、転送エントリ挿入論理６００に転送される。処理はステップ７０６に続く。
【００５５】
ステップ７１６で、挿入キー６０６が、生成されたインデックス２０８Ａ−Ｄによって識別される場所に既に記憶されているならば、転送エントリ挿入がその場所で上書きされる。
【００５６】
ステップ７０６で、転送エントリ挿入論理６００（図６）は、場所が使用されていないかどうかを、転送された内容から判断する。たとえば、転送エントリ２１０中の有効エントリフィールド４１８（図４）を調べることによる。場所の１つが使用されていなければ、処理はステップ７０８に続く。生成されたインデックス２０８Ａ−Ｄによって識別される場所のすべてが使用されているならば、処理はステップ７１０に続く。
【００５７】
ステップ７０８で、転送エントリ挿入論理６００（図６）は、使用されていない場所を識別する生成されたインデックス１９０Ａ−Ｄの１つによって識別される場所に挿入キー６０６を含む転送エントリ２１０を挿入する。
【００５８】
ステップ７１０で、転送エントリ挿入論理６００（図６）は、上書き信号６０２（図６）の状態に依存して上書きが可能化されるかどうか判断する。単一サイクルの挿入が必要とされ、かつハッシュ表の転送エントリが連続的に更新されているならば、たとえば、ハッシュ表１９０Ａ−Ｄがイーサネット（Ｒ）ブリッジに使用されるのであれば、上書きが設定される。上書きが可能化されるならば、処理はステップ７１２に続く。上書きが可能化されなければ、処理はステップ７１４に続く。
【００５９】
ステップ７１２で、転送エントリ挿入論理６００（図６）は、挿入キー６０６を含む転送エントリをどこに上書きすべきか、生成されたインデックス２０８Ａ−Ｄのいずれか１つによって識別される使用されている場所を選択する。
【００６０】
ステップ７１４で、転送エントリ挿入論理６００（図６）は、転送エントリの１つをハッシュ表１９０Ａ−Ｄの１つにおける別のインデックスによって特定される場所に移動するために、生成されたインデックス２０８Ａ−Ｄによって識別される場所に記憶された転送エントリ２１０Ａ−Ｄの再順序付けを行なう。再順序付けするための方法は、図８と関連付けて記載される。再順序付けが完了し、かつ、生成されたインデックス２０８Ａ−Ｄによって識別される場所の１つに使用されていない場所が与えられた後、挿入キー６０６を含む転送エントリ２１０が使用されていない場所に挿入される。
【００６１】
図８は、Ｋｅｙ＿Ａのためのインデックス１７２Ａ−Ｄによって識別される場所にＫｅｙ＿Ａを挿入するために図１Ｂに示すハッシュ表１９０Ａ−Ｄ中の転送エントリを再順序付けするための図６に示す転送エントリ挿入論理６００のステップを例示する流れ図である。
【００６２】
ステップ８００で、Ｋｅｙ＿ＡがＫｅｙ＿Ａのためのインデックス１７２Ａ−Ｄによって識別される場所に記憶されていないことを判断すると、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ａのためのインデックス１７２Ａ−Ｄによって識別される場所のいずれかが使用されていないかどうかを判断する。使用されていない場所があれば、転送エントリの再順序付けは必要とされず、処理がステップ８１４に続く。すべての場所が使用されているならば、Ｋｅｙ＿Ａを記憶すべき、Ｋｅｙ＿Ａのためのインデックス１７２Ａ−Ｄの１つによって識別される使用されていない場所を与えるために、再順序付けが必要とされ、処理はステップ８０２に続く。
【００６３】
ステップ８０２で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ａインデックス＿１  １７２ＡおよびＫｅｙ＿Ｂインデックス＿１  １７４Ａによって識別される場所１３８に記憶されるＫｅｙ＿Ｂから、Ｋｅｙ＿Ｂが記憶され得るＫｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄを決定する。転送エントリ挿入論理６００は、Ｋｅｙ＿Ｂに対してハッシュ機能を行なってＫｅｙ＿Ｂのためのインデックス１７４Ｂ−Ｄを生成することにより、または、Ｋｅｙ＿Ｂを用いて、Ｋｅｙ＿Ｂが場所１３８に挿入されたときＫｅｙ＿Ｂのためのインデックス１７４Ｂ−Ｄが記憶された再帰的インデックス表（図示せず）をインデックス付けすることにより、Ｋｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄを決定し得る。Ｋｅｙ＿Ｂと関連付けられる他のインデックス１７４Ｂ−Ｄを決定すると、処理はステップ８０４に続く。
【００６４】
ステップ８０４で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｂのためのインデックス１７４Ｂ−Ｃによって識別される場所１４８、１５８、１６６に記憶される転送エントリを調べる。図１Ｂに示すように、Ｋｅｙ＿Ｆが、Ｋｅｙ＿Ｂインデックス＿２  １７４ＢおよびＫｅｙ＿Ｆインデックス＿２  １８２Ｂによって識別される場所１４８に記憶され、Ｋｅｙ＿Ｈが、Ｋｅｙ＿Ｂインデックス＿３  １７４ＣおよびＫｅｙ＿Ｈインデックス＿３  １８６Ｃによって識別される場所１５８に記憶され、Ｋｅｙ＿Ｉが、Ｋｅｙ＿Ｂインデックス＿４  １７４ＤおよびＫｅｙ＿Ｉインデックス＿４  １８８Ｄによって識別される場所１６６に記憶される。Ｋｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄによって識別される場所１４８、１５８、１６６のすべてが図１Ｂに示すように使用中であれば、処理はステップ８０６に続く。転送エントリ挿入論理６００（図６）が、Ｋｅｙ＿Ｂのための他のインデックス１７４Ｂ−Ｄによって識別される場所１４８、１５８、１６６の１つが使用されていないことを見出すならば、処理はステップ８１６に続く。
【００６５】
ステップ８０６で、転送エントリ挿入論理６００（図６）は、場所１４６に記憶されたＫｅｙ＿Ｃから、Ｋｅｙ＿Ｃが記憶され得る、Ｋｅｙ＿Ａインデックス＿２  １７２ＢおよびＫｅｙ＿Ｃインデックス＿２  １７６Ｂによって識別される場所以外のＫｅｙ＿Ｃのための他のインデックス８０６Ａ、８０６Ｃ−Ｄを決定する。Ｋｅｙ＿Ｃと関連付けられる他のインデックスを決定すると、処理はステップ８０８に続く。
【００６６】
ステップ８０８で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｃのためのインデックス１７６Ａ、１７６Ｄ−Ｃによって識別される場所に記憶される転送エントリを調べる。図８に示すように、Ｋｅｙ＿Ｃインデックス＿１  １７６Ａによって識別される場所１４０は使用されておらず、Ｋｅｙ＿Ｇは、Ｋｅｙ＿Ｃインデックス＿３  １７６ＣおよびＫｅｙ＿Ｇインデックス＿３  １８４Ｃによって識別される場所１６０に記憶され、Ｋｅｙ＿Ｃインデックス＿４  １７６Ｄによって識別される場所１６８は使用されていない。Ｋｅｙ＿Ｃのためのインデックス１７６Ａ、１７６Ｃ−Ｄによって識別される場所１４０、１６０、１６８のいずれかが図８に示すように使用されていないならば、処理はステップ８１０に続く。転送エントリ挿入論理６００（図６）が、Ｋｅｙ＿Ｃのためのインデックス１７６Ａ、１７６Ｃ−Ｄによって識別される場所１４２、１６０、１６８のいずれも不使用でないことを見出すならば、処理はステップ８１８に続く。
【００６７】
ステップ８１０で、転送エントリ挿入論理（図６）は、Ｋｅｙ＿Ｃを、Ｋｅｙ＿Ｃインデックス＿２  １７２ＢおよびＫｅｙ＿Ａインデックス＿２  １７２Ｂによって識別される場所１４６から、Ｋｅｙ＿Ｃインデックス＿１  １７６Ａによって識別される場所１４０に移動する。Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａインデックス＿２  １７２Ｂによって識別される場所１４６に挿入される。
【００６８】
ステップ８１４で、Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａインデックス１７２Ａ−Ｄの１つによって識別される使用されていない場所に挿入される。
【００６９】
ステップ８１６で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｂを、Ｋｅｙ＿Ａインデックス＿１  １７２ＡおよびＫｅｙ＿Ｂインデックス＿１  １７４Ａによって識別される場所１３８から、Ｋｅｙ＿Ｂのためのインデックス１７４Ｂ−Ｄの１つによって識別される使用されていない場所に移動する。Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａインデックス１  １７２ＡおよびＫｅｙ＿Ｂインデックス＿１  １７４Ａによって識別される場所１３８に挿入される。
【００７０】
ステップ８１８で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ａインデックス＿３  １７２ＣおよびＫｅｙ＿Ｄインデックス＿３  １７８Ｄによって識別される場所１５６に記憶されるＫｅｙ＿Ｄから、Ｋｅｙ＿Ｄが記憶され得る、Ｋｅｙ＿Ｄのための他のインデックス８０６Ａ−Ｂ、８０６Ｄを決定する。Ｋｅｙ＿Ｄのための他のインデックスを決定すると、処理はステップ８２０に続く。
【００７１】
ステップ８２０で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｄのための他のインデックス８０６Ａ−Ｂ、８０６Ｄによって識別される場所に記憶されるキーを調べる。図１Ｂに示すように、Ｋｅｙ＿Ｄインデックス８０６Ａ−Ｂ、８０６Ｄによって識別される場所１４２、１５０、１７０のすべてが使用されていない。Ｋｅｙ＿Ｄのためのインデックス８０６Ａ−Ｂ、８０６Ｄによって識別される場所１４２、１５０、１７０のいずれかが、図８に示すように使用されていないならば、処理はステップ８２２に続く。転送エントリ挿入論理６００（図６）が、Ｋｅｙ＿Ｄのためのインデックス８０６Ａ−Ｂ、８０６Ｄによって識別される場所１４２、１５０、１７０のいずれも不使用でないことを見出すならば、処理はステップ８２４に続く。
【００７２】
ステップ８２２で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｄを、Ｋｅｙ＿Ａインデックス＿３  １７２Ｃによって識別される場所１５６から、Ｋｅｙ＿Ｄインデックス８０６Ａ−Ｂ、８０６Ｄによって識別される使用されていない場所１４２、１５０、１７０の１つに移動する。Ｋｅｙ＿Ａが、Ｋｅｙ＿Ｄインデックス３  １７８Ｃによって識別される場所１５６に挿入される。
【００７３】
ステップ８２４で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ａインデックス＿４  １７２ＤおよびＫｅｙ＿Ｅインデックス＿４  １８０Ｄによって識別される場所１６４に記憶されるＫｅｙ＿Ｅから、Ｋｅｙ＿Ｅが記憶され得る、Ｋｅｙ＿Ｅのための他のインデックス１８０Ａ−Ｃ、１８０Ｄを決定する。Ｋｅｙ＿Ｅと関連付けられる他のインデックスを決定すると、処理はステップ８２６に続く。
【００７４】
ステップ８２６で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｅのための他のインデックス１８０Ａ−Ｃによって識別される場所に記憶されるキーを調べる。図１Ｂに示すように、Ｋｅｙ＿Ｅのためのインデックス１８０Ａ−Ｃによって識別される場所１４４、１５２、１６２は使用されていない。Ｋｅｙ＿Ｅのためのインデックス１８０Ａ−Ｃによって識別される場所１４４、１５２、１６２のいずれかが、図１Ｂに示すように使用されていなければ、処理はステップ８２８に続く。転送エントリ挿入論理６００（図６）が、Ｋｅｙ＿Ｅのためのインデックス１８０Ａ−Ｃによって識別される場所１４４、１５２、１６８のいずれも不使用でないことを見出すと、処理はステップ８３０に続く。
【００７５】
ステップ８２８で、転送エントリ挿入論理６００（図６）は、Ｋｅｙ＿Ｅを、Ｋｅｙ＿Ａインデックス＿４  １７２ＤおよびＫｅｙ＿Ｅインデックス＿４  １８０Ｄによって識別される場所１６４から、Ｋｅｙ＿Ｅのための他のインデックス１８０Ａ−Ｃによって識別される場所１４４、１５２、１６２の１つに移動する。好ましくは、Ｋｅｙ＿Ｅは、検出された最初の空の場所、すなわち、Ｋｅｙ＿Ｅのためのインデックス１８０Ａ−ＣがＡ−Ｃの順に検索されるならば場所１４４に挿入される。Ｋｅｙ＿Ａは、Ｋｅｙ＿Ａインデックス＿４  １７２Ｄによって識別される場所１６４に挿入される。
【００７６】
ステップ８３０で、インデックス選択論理６００（図６）は、Ｋｅｙ＿Ａインデックス１７２Ａ−Ｄの１つでの転送エントリが空にされ、かつＫｅｙ＿Ａが挿入されるまで、Ｋｅｙ＿Ｆ、Ｋｅｙ＿Ｇ、Ｋｅｙ＿ＨおよびＫｅｙ＿Ｉと関連付けられる転送エントリのすべてを調べることにより、Ｋｅｙ＿Ｂ、Ｋｅｙ＿Ｃ、Ｋｅｙ＿ＤおよびＫｅｙ＿Ｅ転送エントリによって共有される他の場所に記憶される転送エントリを調べることにより、使用されていない場所を検索し続ける。
【００７７】
一般的に、キーのためのインデックスによって識別される場所は、予め定められた順序、たとえばＡ−Ｄの順序で検索される。キーは、見出された最初の空の場所に挿入される。したがって、エントリは、インデックス＿１  ２０８Ａによって識別される場所に挿入され、その後に、インデックス＿２  ２０８Ｂ、インデックス＿３  ２０８Ｃおよびインデックス＿４  ２０８Ｄによって識別される場所が続く。
【００７８】
ハッシュ表において転送エントリを再順序付けすることは、ハッシュ表の効率的な利用をもたらし、ハッシュ表がほぼ一杯であるとき転送エントリがハッシュ表に挿入可能である確率を増大させる。
【００７９】
この発明は、その好ましい実施例を参照して特定的に示され記載されたが、前掲の特許請求の範囲によって含まれるこの発明の範囲から逸脱することなしに、形態および詳細のさまざまな変更がこれになされ得ることが、当業者には理解される。
【図面の簡単な説明】
【図１Ａ】  転送エントリを与えるための先行技術の複数バケットハッシュ表のブロック図である。
【図１Ｂ】  この発明の原理に従う転送エントリを与えるためのハッシュ表を示すブロック図である。
【図１Ｃ】  図１Ｂのハッシュ表が使用可能である非阻止性の共通メモリスイッチのブロック図である。
【図１Ｄ】  入来ポートで受信され得る先行技術のイーサネット（Ｒ）データパケットのブロック図である。
【図２】  図１Ｃの非阻止性の共通メモリスイッチに示される転送論理におけるハッシュ表を含む検索論理を示すブロック図である。
【図３】  図２に示すハッシュ関数論理を示すブロック図である。
【図４】  図１Ｂに示すハッシュ表のいずれか１つに記憶される転送エントリのフォーマットを示すブロック図である。
【図５】  ハッシュ表の１つに検索キーとマッチする転送エントリを検索するための検索論理のステップを示す流れ図である。
【図６】  ハッシュ表の１つにおいて新しいエントリを挿入するための挿入論理を示すブロック図である。
【図７】  使用されているエントリを上書きすることによりハッシュ表の１つに転送エントリを挿入するための図６に示す挿入論理のステップを示す流れ図である。
【図８】  ハッシュ表中の場所を空けて転送エントリを挿入するためにハッシュ表に記憶される転送エントリを再帰的に再順序付けするための図６に示す挿入論理のステップを示す流れ図である。
【図１Ａ】
0004482259.tif 000002
【図１Ｂ】
0004482259.tif 000003
【図１Ｃ】
0004482259.tif 000004
【図１Ｄ】
0004482259.tif 000005
【図２】
0004482259.tif 000006
【図３】
0004482259.tif 000007
【図４】
0004482259.tif 000008
【図５】
0004482259.tif 000009
【図６】
0004482259.tif 000010
【図７】
0004482259.tif 000011
【図８】
0004482259.tif 000012