(57)【要約】可変長パケットが蓄積されるバッファの使用効率を高めながら、ブロッキングの発生が防止されたネットワークスイッチ装置を提供する。受信したパケットは、パケット分割回路（２）によって１つ以上の固定長のデータブロックに分割されて、バッファ（１）に供給される。また、バッファ制御回路（３）の制御により、パケットの転送先のネットワークごとに一定数のデータブロックを登録可能な送信キュー（４−１〜ｎ、ｎは１以上の整数）が形成され、バッファ（１）に書き込まれたデータブロックは、宛先に対応する送信キューにパケット単位で順次登録される。このとき、各パケット内のデータブロック間の連結と、各送信キュー内のパケット間の連結とが、各データブロックのバッファにおける書き込み位置に基づく連結リスト構造として管理される。
2004066571.tif 000002
【特許請求の範囲】
【請求項１】
可変長のパケットを複数のネットワーク間で転送するネットワークスイッチ装置において、
受信したパケットのデータおよび送信するパケットのデータの各格納領域として共用されるバッファと、
受信した前記パケットを１つ以上の固定長のデータブロックに分割して前記バッファに供給するパケット分割回路と、
前記パケットの転送先の前記ネットワークごとに一定数の前記データブロックを登録可能な送信キューを形成して、分割された前記データブロックを前記バッファに書き込んだ後、その宛先に対応する前記送信キューに前記パケット単位で順次登録し、かつ、前記各パケット内の前記データブロック間の連結と、前記各送信キュー内の前記パケット間の連結とを、前記各データブロックの前記バッファにおける書き込み位置に基づく連結リスト構造として管理するバッファ制御回路と、
を有することを特徴とするネットワークスイッチ装置。
【請求項２】
前記バッファ制御回路は、前記各送信キューに登録された前記データブロックを前記連結リスト構造に従って順次読み出すことを特徴とする請求の範囲第１項記載のネットワークスイッチ装置。
【請求項３】
前記バッファ制御回路は、前記各送信キューへの前記データブロックの登録数が登録可能数を超えた場合は、この時点で登録処理中の前記データブロックを含む前記パケットを廃棄することを特徴とする請求の範囲第１項記載のネットワークスイッチ装置。
【請求項４】
前記バッファ制御回路は、１つの前記パケット当たりで許容される最大数の前記データブロックが登録可能な受信キューを、受信元の前記ネットワークごとに形成し、前記各受信キューに対する１つの前記パケット分の前記データブロックの登録が完了すると、対応する受信キューを宛先に対応する前記送信キューに連結することを特徴とする請求の範囲第１項記載のネットワークスイッチ装置。
【請求項５】
前記バッファ制御回路は、前記バッファにおける前記データブロックの書き込み位置を指し示すポインタを一元的に保持するポインタスタックを具備し、
前記バッファへの前記データブロックの書き込み時に前記ポインタスタックから前記ポインタを取得し、取得した前記ポインタを用いて前記各パケット内の前記データブロック間の連結と、前記各送信キュー内の前記パケット間の連結とを管理することを特徴とする請求の範囲第１項記載のネットワークスイッチ装置。
【請求項６】
前記バッファ制御回路は、
受信元の前記ネットワークごとに設けられて、前記パケットの受信時に前記ポインタスタックから取得したポインタが順次格納されるとともに、格納されているポインタ数をカウントする受信中ポインタカウンタと、
転送先の前記ネットワークごとに設けられて、前記各送信キューに登録された前記データブロックに対応するポインタ数をカウントする送信キューポインタカウンタと、
転送先の前記ネットワークごとに設けられて、前記送信キューから送信される前記パケットに対応する前記ポインタが順次格納されるとともに、格納されているポインタ数をカウントする送信中ポインタカウンタと、
を具備し、受信した前記パケットを宛先に対応する前記送信キューに登録する際に、対応する前記受信中ポインタカウンタのカウント値を宛先に対応する前記送信キューポインタカウンタのカウント値に合算し、前記パケットを前記送信キューから送信する際に、対応する前記送信キューポインタカウンタを順次カウントダウンするとともに、対応する前記送信中ポインタカウンタを順次カウントアップすることを特徴とする請求の範囲第５項記載のネットワークスイッチ装置。
【請求項７】
前記バッファ制御回路は、前記送信キューからの前記パケットの送信時に前記ポインタを前記ポインタスタックにＰＵＳＨして返却することを特徴とする請求の範囲第６項記載のネットワークスイッチ装置。
【請求項８】
前記バッファ制御回路は、前記送信キューからの前記パケットの送信後に、さらに他の前記ネットワークへの転送を行う場合には、送信済みの前記送信キューに対応する送信中ポインタカウンタのカウント値を、転送先の前記ネットワークに対応する前記キューポインタカウンタのカウント値に合算することを特徴とする請求の範囲第６項記載のネットワークスイッチ装置。
【請求項９】
前記バッファ制御回路は、受信した前記パケットを宛先に対応する前記送信キューに登録する際に、宛先に対応する前記キューポインタカウンタのカウント値が一定値を超えた場合には、登録処理中の前記パケットを廃棄するとともに、対応する前記受信中ポインタカウンタに格納されていた前記ポインタを前記ポインタスタックにＰＵＳＨして返却することを特徴とする請求の範囲第６項記載のネットワークスイッチ装置。
【請求項１０】
前記バッファ制御回路は、前記各パケット内の後続の前記データブロックの書き込み位置を示す前記ポインタを、前記データブロックとともに付属データとして前記バッファに書き込むことを特徴とする請求の範囲第５項記載のネットワークスイッチ装置。
【請求項１１】
前記バッファ制御回路は、同一の前記送信キューに複数の前記パケットが登録された場合に、後続パケットの先頭に位置する前記データブロックを指し示すポインタを、先行パケットの先頭に位置する前記データブロックの前記付属データとしてさらに前記バッファに書き込むことを特徴とする請求の範囲第１０項記載のネットワークスイッチ装置。
【請求項１２】
前記バッファ制御回路は、前記各送信キュー内に登録されたうち、次に送信が予定されている前記パケットの先頭に位置する前記データブロックを指し示すポインタと、次に送信が予定されている前記データブロックを指し示すポインタとを、それぞれ次送信パケットアドレスレジスタおよび送信ブロックアドレスレジスタに保持し、前記各レジスタを参照して前記バッファからの前記データブロックの読み出しアドレスを指定することを特徴とする請求の範囲第１１項記載のネットワークスイッチ装置。
【請求項１３】
前記バッファ制御回路は、前記各送信キューから前記データブロックを読み出すたびに、読み出した前記データブロックの前記付属データに基づいて前記送信ブロックアドレスレジスタを更新し、前記パケットを読み出すたびに、読み出した前記パケットの先頭に位置する前記データブロックの前記付属データに基づいて前記次送信パケットアドレスレジスタを更新することを特徴とする請求の範囲第１２項記載のネットワークスイッチ装置。
【請求項１４】
前記バッファ制御回路は、前記各送信キューに登録した前記データブロックの書き込み位置を指し示す前記ポインタを格納するための送信用ブロック位置メモリを送信先の前記ネットワークごとに具備し、
前記送信用ブロック位置メモリを参照して前記バッファからの前記データブロックの読み出しアドレスを指定することを特徴とする請求の範囲第５項記載のネットワークスイッチ装置。
【請求項１５】
前記バッファ制御回路は、分割した前記データブロックが前記バッファに書き込まれた後、同一パケット内の後続の前記データブロックの書き込み位置を指し示す前記ポインタが順次格納される受信用ブロック位置メモリをさらに具備し、
前記送信キューに対する前記パケットの登録時に、前記受信用ブロックメモリに格納されていた該当する前記ポインタを登録先の前記送信キューに対応する前記送信用ブロック位置メモリに格納することを特徴とする請求の範囲第１４項記載のネットワークスイッチ装置。
【請求項１６】
可変長のパケットを複数のネットワーク間で転送するネットワークスイッチ装置において、
受信したパケットのデータおよび送信するパケットのデータの各格納領域として共用されるバッファと、
受信した前記パケットを１つ以上の固定長のデータブロックに分割して前記バッファに供給するパケット分割回路と、
前記バッファにおける前記データブロックの書き込み位置を指し示すポインタを一元的に保持するポインタスタックと、
前記ポインタスタックから取得した前記ポインタを用いて、前記バッファに対する前記データブロックの書き込み動作および読み出し動作を制御するバッファ制御回路と、
を有し、前記バッファ制御回路は、前記バッファへの前記データブロックの書き込み時に、前記ポインタスタックから前記ポインタを取得して前記バッファに対する書き込みアドレスとして指定するとともに、前記各パケット内の後続の前記データブロックの書き込み位置を示す前記ポインタを、前記データブロックとともに付属データとして前記バッファに書き込むことを特徴とするネットワークスイッチ装置。
【請求項１７】
前記バッファ制御回路は、同一の前記送信キューに複数の前記パケットが登録された場合に、後続パケットの先頭に位置する前記データブロックを指し示すポインタを、先行パケットの先頭に位置する前記データブロックの前記付属データとしてさらに前記バッファに書き込むことを特徴とする請求の範囲第１６項記載のネットワークスイッチ装置。
【請求項１８】
前記バッファ制御回路は、前記各送信キュー内に登録されたうち、次に送信が予定されている前記パケットの先頭に位置する前記データブロックを指し示すポインタと、次に送信が予定されている前記データブロックを指し示すポインタとを、それぞれ送信済パケットアドレスレジスタおよび送信ブロックアドレスレジスタに保持し、前記各レジスタを参照して前記バッファからの前記データブロックの読み出しアドレスを指定することを特徴とする請求の範囲第１７項記載のネットワークスイッチ装置。
【請求項１９】
前記バッファ制御回路は、前記各送信キューから前記データブロックを読み出すたびに、読み出した前記データブロックの前記付属データに基づいて前記送信ブロックアドレスレジスタを更新し、前記各送信キューから前記パケットを読み出すたびに、読み出した前記パケットの先頭に位置する前記データブロックの前記付属データに基づいて前記送信済パケットアドレスレジスタを更新することを特徴とする請求の範囲第１８項記載のネットワークスイッチ装置。
【請求項２０】
可変長のパケットを１つのバッファに一旦蓄積しながら複数のネットワーク間で転送するネットワークスイッチ方法において、
受信した前記パケットを１つ以上の固定長のデータブロックに分割して前記バッファに供給し、
前記パケットの転送先の前記ネットワークごとに一定数の前記データブロックを登録可能な送信キューを形成して、分割された前記データブロックを前記バッファに書き込んだ後、その宛先に対応する前記送信キューに前記パケット単位で順次登録し、かつ、前記各パケット内の前記データブロック間の連結と、前記各送信キュー内の前記パケット間の連結とを、前記各データブロックの前記バッファにおける書き込み位置に基づく連結リスト構造として管理する、
ことを特徴とするネットワークスイッチ方法。
【請求項２１】
可変長のパケットを１つのバッファに一旦蓄積しながら複数のネットワーク間で転送するネットワークスイッチ方法において、
受信した前記パケットを１つ以上の固定長のデータブロックに分割して前記バッファに供給し、
前記バッファにおける前記データブロックの書き込み位置を指し示すポインタを一元的に保持するポインタスタックから、前記ポインタを取得して前記バッファに対する書き込みアドレスとして指定するとともに、前記各パケット内の後続の前記データブロックの書き込み位置を示す前記ポインタを、前記データブロックとともに付属データとして前記バッファに書き込む、
ことを特徴とするネットワークスイッチ方法。
【発明の詳細な説明】
【技術分野】  本発明は、可変長のパケットを複数のネットワーク間で転送するネットワークスイッチ装置およびネットワークスイッチ方法に関し、特に、パケットの格納領域として共有バッファを使用したネットワークスイッチ装置およびネットワークスイッチ方法に関する。
【背景技術】  インターネット等のように多数のネットワークが互いに接続されている場合、それらの接続にはネットワークスイッチ装置が用いられることが多い。中でも、受信したパケットを内部のバッファに一旦蓄積した後、目的の送信ポートに転送するスイッチ方式はストア＆フォワード方式と言われ、このようなスイッチ方式を採用したネットワークスイッチ装置が広く使用されている。
また、近年のネットワーク上での通信では、転送単位とするパケットのデータ量が可変とされていることが多い。例えば、インターネットプロトコル（ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）では、ＩＰデータグラムと呼ばれる可変長パケットを転送単位として、メッセージ転送が行われる。
図１５は、従来のネットワークスイッチ装置の構成例を示す図である。
図１５に示すネットワーク装置は、複数のネットワーク２０１〜２０４の間でパケットの転送を行う。このネットワーク装置は、各ネットワーク２０１〜２０４に対応する受信インタフェース２１１〜２１４および受信バッファ２２１〜２２４と、各ネットワーク２０１〜２０４に対応する送信インタフェース２３１〜２３４および送信バッファ２４１〜２４４と、データ転送回路２５０によって構成される。なお、図１５では、理解を容易にするために、受信インタフェース２１１〜２１４と送信インタフェース２３１〜２３４とを別々の要素として示している。
受信インタフェース２１１〜２１４は、ネットワーク２０１〜２０４に対してそれぞれ接続されている。また、同様に、送信インタフェース２３１〜２３４も、ネットワーク２０１〜２０４に対してそれぞれ接続されている。各受信インタフェース２１１〜２１４がネットワーク２０１〜２０４から受信したパケットは、対応する受信バッファ２２１〜２２４において一旦蓄積される。データ転送回路２５０は、受信バッファ２２１〜２２４に蓄積されたパケットの宛先に基づいて、その宛先ポートに対応する送信バッファに対してパケットを転送する。各送信バッファ２４１〜２４４に蓄積されたパケットは、対応する送信インタフェース２３１〜２３４からの送信要求に従って読み出され、ネットワーク２０１〜２０４に送信される。
この図１５に示したようなネットワークスイッチ装置では、受信ポートおよび送信ポートごとにバッファを備えていることから、バッファを多数確保する必要があり、メモリ容量が大きくなるという欠点を有している。これに対して、受信したパケットと送信するパケットをすべて一つの共有バッファに格納する方法を採ることで、メモリ容量を削減したネットワークスイッチ装置が知られている。
図１６は、共有バッファを具備する従来のネットワークスイッチ装置の構成例を示す図である。
図１６では、図１５と同様に、複数のネットワーク３０１〜３０４の間でパケットの転送を行うネットワーク装置を示している。このネットワーク装置は、各ネットワーク３０１〜３０４に対応する受信インタフェース３１１〜３１４と、各ネットワーク３０１〜３０４に対応する送信インタフェース３２１〜３２４と、受信パケットおよび送信パケットにそれぞれ対応するデータ転送回路３３０および３４０と、共有バッファ３５０とによって構成される。なお、図１６では、理解を容易にするために、受信側に対応する受信インタフェース３１１〜３１４およびデータ転送回路３３０と、送信側に対応する送信インタフェース３２１〜３２４およびデータ転送回路３４０とを別々の要素として示している。
各受信インタフェース３１１〜３１４がネットワーク３０１〜３０４から受信したパケットは、データ転送回路３３０によって、共有バッファ３５０に順次蓄積される。データ転送回路３４０は、各送信インタフェース３２１〜３２４からの送信要求を受けると、共有バッファ３５０に蓄積されたパケットの宛先に基づいて、その宛先ポートに対応する送信インタフェースに対してパケットを転送する。各送信インタフェース３２１〜３２４は、共有バッファ３５０から転送されたパケットを、接続されたネットワーク３０１〜３０４に送信する。
また、上記の図１５および図１６のようなネットワークスイッチ装置では、送信予定のパケットは、宛先ポートごとにポインタで連結した連結リスト構造のキューとして制御されることが一般的である。ここで、可変長のパケットが扱われる場合、各パケットが格納されるバッファは最大パケット長を単位として構成されることが多く、このようなバッファに格納されたパケットが、ポインタを用いて管理される。このようなアーキテクチャの利点は、例えばエラーの発生等により受信したパケットを廃棄する場合に、該当するパケットへのポインタを削除するだけで済む等、制御が容易であることが挙げられる。しかし、その反面、格納したいパケット数に最大パケット長を乗じただけのメモリ容量がバッファに対して必要となる。この場合、例えば最大パケット長より小さい容量のパケットばかりを受信すると、バッファ内においてパケットに占有されない領域が増えてしまい、メモリ使用効率が低くなることが欠点であった。
従来、共通バッファメモリを具備して可変長パケットを取り扱い、かつ、この共通バッファメモリの使用効率を高めたパケットスイッチとして、例えば以下のようなものがあった。このパケットスイッチは、各入力回線から受信した可変長パケットを、固定長のデータブロック単位で共通バッファメモリに書き込む。この書き込み時に、バッファ制御部が入力回線別の入力キューを形成し、可変長パケットの最終データブロックが入力キューに登録された時、この入力キューのリンクド・アドレスリストを転送先出力回線と対応した出力キューにリンクする。
各入力キューは、共通バッファメモリへの書き込みの際に、次の固定長データブロックの書き込みアドレスを次アドレスメモリに記憶することにより形成される。また、各出力キューは、次に読み出すべきデータブロックを示す次読出しアドレスと、最後のデータブロックを示す最終読出しアドレスとを記憶するアドレステーブルからなり、バッファ制御部の入力キュー制御部が、各可変長パケットの先頭データブロックの書き込みアドレスと、最終データブロックの書き込みアドレスとを、それぞれ転送先出力回線と対応するアドレステーブルの次読出しアドレスおよび最終読出しアドレスに移すことによって、出力キューへの入力キューリンクを完了する。さらに、先行する可変長パケットの最終読出しアドレスがすでに登録された状態である場合には、次アドレスメモリから後続可変長パケットの先頭データブロックの書き込みアドレスを抽出して、このアドレスを最終読出しアドレスにリンクさせる。このような制御により、バッファメモリの使用効率を高めるとともに、スイッチング動作を高速化している。例えば、特開２００２−１５２２４７号公報（段落番号〔００２５〕〜〔００４０〕、第３図）参照。
また、上記と同様に、各入力回線から受信した可変長パケットを、固定長のデータブロック単位で共通バッファメモリに書き込むパケットスイッチとして、データ書き込み時に、バッファ制御部が入力回線別の入力キューを形成し、可変長パケットの最終データブロックが入力キューに登録された時点で、この入力キューのリンクド・アドレスリストをパケット転送先出力回線と対応する待機バッファを備えた出力キューに登録する構成とされたパケットスイッチがあった。このパケットスイッチにおいては、各出力キューは、可変長パケットの先頭データブロックの書き込みアドレスと、最終データブロックの書き込みアドレスとを一時的に記憶するための待機バッファと、次に読み出すべきデータブロックを示す次読出しアドレスと、最後のデータブロックを示す最終読出しアドレスとを記憶するアドレスメモリとからなり、バッファ制御部の入力キュー制御部が、各可変長パケットの先頭データブロックの書き込みアドレスと、最終データブロックの書き込みアドレスとを、それぞれ転送先出力回線と対応する待機バッファに登録し、これに付随するアドレスメモリが空き状態となった時、出力キュー制御部が、待機バッファから取り出した１対のアドレスを、新たなデータブロック群の次読出しアドレスおよび最終読出しアドレスとしてアドレスメモリに設定する。これにより、バッファメモリの使用効率を高めるとともに、スイッチング動作を高速化している。例えば、特開２００２−１８５４９５号公報（段落番号〔００２５〕〜〔００３７〕、第３図）参照。
ところで、上記の図１６で示したような共有バッファを用いたネットワークスイッチ装置では、特定のポート宛の受信パケットが集中する等により輻輳が発生した場合、これらの受信パケットや同じポート宛の送信パケットによって共有バッファ内が占有され、輻輳が発生したポートと無関係なポートにおいてスループットが低下してしまうことがあった。このような現象は一般にブロッキング（ｂｌｏｃｋｉｎｇ）等と呼ばれる。特に、上述したように、可変長パケットを扱う場合は、共有バッファ内の使用効率が低いにもかかわらず、ブロッキングが発生する場合がある。
これに対して、上記の図１５のように、受信パケット用の受信バッファと送信パケット用の送信バッファとを、それぞれ受信ポート数および送信ポート数ごとに設けた場合には、ブロッキングによるスループットの低下は発生しない。しかし、上述したように、このような構成の場合は、各バッファの容量を大きくする必要が生じ、部品コストが高くなってしまう。
また、上記の特開２００２−１５２２４７号公報および特開２００２−１８５４９５号公報に示したパケットスイッチでは、可変長パケットを受信した場合に、共通バッファメモリ内の使用効率を向上させることが可能となっているが、ブロッキングを防止する手段が講じられてはいなかった。
【発明の開示】
本発明はこのような課題に鑑みてなされたものであり、可変長パケットが蓄積されるバッファの使用効率を高めながら、ブロッキングの発生が防止されたネットワークスイッチ装置を提供することを目的とする。
本発明では上記課題を解決するために、図１に示すようなネットワークスイッチ装置が提供される。このネットワークスイッチ装置は、可変長のパケットを複数のネットワーク間で転送するものであり、受信したパケットのデータおよび送信するパケットのデータの各格納領域として共用されるバッファ１と、受信した前記パケットを１つ以上の固定長のデータブロックに分割して前記バッファ１に供給するパケット分割回路２と、前記パケットの転送先の前記ネットワークごとに一定数の前記データブロックを登録可能な送信キュー４−１〜ｎ（ただし、ｎはｎ＞０の整数）を形成して、分割された前記データブロックを前記バッファ１に書き込んだ後、その宛先に対応する前記送信キューに前記パケット単位で順次登録し、かつ、前記各パケット内の前記データブロック間の連結と、前記各送信キュー内の前記パケット間の連結とを、前記各データブロックの前記バッファ１における書き込み位置に基づく連結リスト構造として管理するバッファ制御回路３とを有することを特徴とする。
このようなネットワークスイッチ装置では、１つのバッファ１が、受信したパケットのデータおよび送信するパケットのデータの各格納領域として共用される。また、受信したパケットは、パケット分割回路２によって１つ以上の固定長のデータブロックに分割されて、バッファ１に供給される。また、バッファ制御回路３の制御により、パケットの転送先のネットワークごとに一定数のデータブロックを登録可能な送信キュー４−１〜ｎが形成され、バッファ１に書き込まれたデータブロックは、宛先に対応する送信キューにパケット単位で順次登録される。このとき、各パケット内のデータブロック間の連結と、各送信キュー内のパケット間の連結とが、各データブロックのバッファにおける書き込み位置に基づく連結リスト構造として管理される。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】  図１は、本発明の原理を説明するための原理図である。
図２は、本発明の第１の実施の形態に係るネットワークスイッチ装置の接続例を示す図である。
図３は、本発明の第１の実施の形態に係るネットワークスイッチ装置の内部構成を示すブロック図である。
図４は、共有バッファ内におけるデータ格納の様子を模式的に示す図である。
図５は、ポインタ制御回路およびポインタカウンタ群の内部構成例を示すブロック図である。
図６は、ＰＯＰ制御部の処理の流れを示すフローチャートである。
図７は、パケット送信時におけるＰＵＳＨ制御部の処理の流れを示すフローチャートである。
図８は、第１の管理方法において、共有バッファ内に格納されたデータブロックの構造を模式的に示す図である。
図９は、第１の連結リスト管理例において、書き込み／読み出し制御回路が具備するレジスタ群の構成を示す図である。
図１０は、第１の連結リスト管理例において、パケットの受信時における書き込み／読み出し制御回路の処理の流れを示すフローチャートである。
図１１は、第１の連結リスト管理例において、パケットの送信時における書き込み／読み出し制御回路の処理の流れを示すフローチャートである。
図１２は、第２の連結リスト管理例において、書き込み／読み出し制御回路が具備するメモリの構成を示す図である。
図１３は、第２の連結リスト管理例において、パケットの受信時における書き込み／読み出し制御回路の処理の流れを示すフローチャートである。
図１４は、第２の連結リスト管理例において、パケットの送信時における書き込み／読み出し制御回路の処理の流れを示すフローチャートである。
図１５は、従来のネットワークスイッチ装置の構成例を示す図である。
図１６は、共有バッファを具備する従来のネットワークスイッチ装置の構成例を示す図である。
【発明を実施するための最良の形態】  以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明の原理を説明するための原理図である。
本発明のネットワークスイッチ装置は、可変長のパケットを用いて通信が行われる複数のネットワークに接続して、これらのネットワーク間でパケットを転送する装置である。このネットワークスイッチ装置は、図１に示すように、バッファ１と、パケット分割回路２と、バッファ制御回路３とを有している。
バッファ１は、受信したパケットを格納するための記憶装置であり、例えば半導体メモリ等によって構成される。
パケット分割回路２は、受信したパケットを１つ以上の固定長のデータブロックに分割してバッファ１に供給する。従って、１つのデータブロックの容量は、１パケット内に許容される最大のデータ量よりも小さく設定される。
バッファ制御回路３は、バッファ１におけるデータブロックの書き込みおよび読み出しの動作を制御する。バッファ制御回路３は、パケット分割回路２によって分割されたデータブロックを用いて、宛先となるネットワークごとに送信キュー４−１〜ｎ（ただしｎはｎ＞１の整数）を形成し、分割されたデータブロックをバッファ１に書き込んだ後、その宛先に対応する送信キューにパケット単位で順次登録する。ここで、各送信キュー４−１〜ｎには、一定数のデータブロックを登録することが可能とされる。従って、バッファ１内には通常、転送先のネットワークごとに同一容量の送信キュー４−１〜ｎの格納領域が用意される。
また、バッファ制御回路３は、バッファ１内に格納した各データブロックを、各データブロックのバッファ１における書き込み位置に基づく連結リスト構造として管理する。以下の説明では、例として、バッファ制御回路３は、バッファ１内の書き込み位置を指し示すポインタを一元的に保持するポインタスタック５を具備して、データブロックの書き込み時にこのポインタスタック５からポインタをＰＯＰして取得し、取得したポインタを用いて連結リスト構造を構築するものとする。
このような構成のネットワーク装置は、以下のように動作する。
所定のネットワークからパケットを受信すると、このパケットはパケット分割回路２により固定長のデータブロックに分割され、バッファ制御回路３の制御によってバッファ１に格納される。このとき、バッファ制御回路３は、例えば、データブロックの書き込み動作ごとに、ポインタスタック５からポインタをＰＯＰして、このポインタの示すアドレスに対してデータブロックを書き込む。また、１パケットの中で分割されたデータブロック間の連結を、ポインタを用いた連結リスト構造として管理する。
１パケット分のデータブロックがバッファ１に格納されると、バッファ制御回路３は、このパケットの宛先に対応する送信キュー４−１〜ｎのいずれかに対して登録する。ここで、バッファ制御回路３は、各送信キュー４−１〜ｎにおいて、登録されたパケット間の連結を、それらに対応するポインタを用いた連結リスト構造として管理する。
各送信キュー４−１〜ｎからは、登録されたデータブロックが順次出力され、対応するネットワークに送信される。ここで、各送信キュー４−１〜ｎにおいて、登録されたデータブロック間およびパケット間が上記のようなポインタを用いた連結リスト構造として管理されていることから、ポインタの指し示す書き込み位置からデータブロックを読み出すことで、容易に元のパケットを再編集することができる。
以上のネットワークスイッチ装置では、パケットの転送先のネットワークごとに一定数のデータブロックを登録可能な送信キュー４−１〜ｎが形成され、バッファ１に書き込まれた各データブロックが、パケットの宛先に対応する送信キューにパケット単位で順次登録される。このような手順を用いることにより、受信元および転送先のネットワークにかかわらず、パケットの格納領域として１つのバッファ１のみ具備すればよいことになる。また、各送信キュー４−１〜ｎの容量が宛先のネットワークごとに限定されるため、１つの宛先に対するパケットが集中して受信された場合にも、それらのパケットがバッファ１内の他の宛先に対するパケットの転送動作に影響を与えることがない。従って、パケットの格納領域として１つのバッファ１を具備する構成でありながら、ブロッキングの発生が防止される。
また、受信したパケットは１つ以上の固定長のデータブロックに分割されてバッファ１に書き込まれる。これとともに、各パケット内のデータブロック間の連結と、各送信キュー４−１〜ｎ内のパケット間の連結とが、各データブロックのバッファにおける書き込み位置に基づく連結リスト構造として管理される。このため、バッファ１内における未使用領域が小さくなり、バッファ１の使用効率が高められる。従って、バッファ１の容量を抑制することができ、部品コストが低減される。
なお、例えば、送信キュー４−１〜ｎへのデータブロックの登録時に、その登録数が登録可能な数を超えた場合は、この時点で登録処理中のデータブロックを含むパケットを廃棄してもよい。このとき、各送信キュー４−１〜ｎへのデータブロックの登録数は、例えば、使用されているポインタ数としてカウントすればよい。
また、パケットの廃棄時や、送信キュー４−１〜ｎからのパケットの出力時には、廃棄あるいは出力したパケットで使用されていたポインタを、ポインタスタック５に対して返却すればよい。これにより、バッファ１内におけるデータブロックの書き込みを効率よく制御することができる。
次に、本発明の第１の実施の形態について、具体的に説明する。
図２は、本発明の第１の実施の形態に係るネットワークスイッチ装置の接続例を示す図である。
図２に示すように、ネットワークスイッチ装置１００には、複数の通信ポートが設けられており、各通信ポートにネットワーク２１〜２４が接続されている。各ネットワーク２１〜２４には、例えば端末装置２１ａ、２２ａ、２３ａおよび２４ａが接続されている。
ネットワークスイッチ装置１００は、接続されたネットワーク２１〜２４の間におけるパケットの転送を行う。例えば、端末装置２１ａから端末装置２２ａ宛てに送信されたパケットは、ネットワーク２１を通じてネットワークスイッチ装置１００に入力され、このネットワークスイッチ装置１００の処理によってネットワーク２２に転送される。これにより、転送されたパケットが、ネットワーク２２を通じて端末装置２２ａにおいて受信される。また、ネットワークスイッチ装置１００は、可変長のパケットを転送することが可能となっている。
図３は、ネットワークスイッチ装置１００の内部構成を示すブロック図である。
図３に示すように、ネットワークスイッチ装置１００は、送受信インタフェース１１１〜１１４、データ転送回路１２０、共有バッファ１３０、書き込み／読み出し制御回路１４０、ポインタスタック１５０、ポインタ制御回路１６０、およびポインタカウンタ群１７０を具備する。また、書き込み／読み出し制御回路１４０、ポインタスタック１５０およびポインタカウンタ群１７０は、ポインタが伝送されるポインタ用バス１８０に接続されている。
送受信インタフェース１１１〜１１４は、外部のネットワークとのデータ送受信を行う通信インタフェースであり、それぞれネットワーク２１〜２４に接続されている。
各送受信インタフェース１１１〜１１４は、ネットワーク２１〜２４から可変長のパケットを受信し、このパケットを順次固定長のデータブロックに分割するとともに、データ転送回路１２０に対して受信要求を通知する。そして、この要求に対する応答を受信すると、分割したデータブロックをデータ転送回路１２０に出力する。このとき、出力したデータブロックが、パケット中の先頭のものであるか、あるいは最終のものであるかを示すブロック位置情報を通知する。また、パケットの宛先を示す情報を抽出して、この情報もデータ転送回路１２０に通知する。さらに、受信エラー等が発生したときは、該当するパケットのデータを廃棄するとともに、廃棄信号をポインタ制御回路１６０に対して出力する。
一方、送受信インタフェース１１１〜１１４は、データ転送回路１２０から送信用のデータブロックを順次受け取り、これらのデータブロックをネットワーク２１〜２４に対して送信する。
データ転送回路１２０は、各送受信インタフェース１１１〜１１４からの受信要求に応じて、該当する送受信インタフェース１１１〜１１４からデータブロックを受け取り、共有バッファ１３０に格納する。このとき、受け取ったデータブロックの受信ポートと、このデータブロックの宛先に対応する送信ポートと、データブロックがパケット中の先頭のものか、あるいは最終のものかを示すブロック位置情報とを含むインタフェース情報を、書き込み／読み出し制御回路１４０およびポインタ制御回路１６０に対して出力する。
また、データ転送回路１２０は、各送受信インタフェース１１１〜１１４からの送信要求に応じて、共有バッファ１３０からパケットのデータブロックを順次取り出し、そのパケットの宛先の端末装置が接続された送受信インタフェースに順次出力する。このとき、出力したデータブロックの宛先を参照して、送信すべき宛先が残り１つとなったときに、このことをポインタ制御回路１６０に通知する。
共有バッファ１３０は、転送されるパケットのデータを、データブロックとして一時的に格納するためのバッファメモリである。この共有バッファ１３０には、受信ポートごとに１パケット分のデータブロックを格納する領域と、送信ポートごとに形成された送信キューが格納される領域とが確保される。また、共有バッファ１３０におけるデータブロックの書き込みアドレスおよび読み出しアドレスは、書き込み／読み出し制御回路１４０によって指定される。
書き込み／読み出し制御回路１４０は、共有バッファ１３０におけるデータブロックの書き込み動作および読み出し動作を管理する。具体的には、分割されたデータブロックごとにポインタスタック１５０から順次ポインタを受け取り、このポインタに基づいて共有バッファ１３０におけるデータブロックの書き込みアドレスを指定する。このとき、受け取ったポインタを、ポインタ用バス１８０を通じてポインタカウンタ群１７０に出力する。また、共有バッファ１３０内に格納されたデータブロックを、上記のポインタを用いた連結リスト構造として管理し、このポインタの連結に基づいて、共有バッファ１３０からの読み出しアドレスを指定する。このとき、読み出しに用いたポインタを、ポインタ用バス１８０を通じてポインタカウンタ群１７０に出力する。
この書き込み／読み出し制御回路１４０は、共有バッファ１３０内に、送信ポートごとの送信キューを形成する。各送信キューは、一定数のデータブロックを格納可能とされている。書き込み／読み出し制御回路１４０は、データブロックを共有バッファ１３０に格納させた後、その宛先に対応する送信キューに、データブロックを登録する。この際に、以前に登録されていたパケットと、新たに登録するパケットとの連結を、これらを構成するデータブロックに対応するポインタを用いた連結リスト構造として管理し、各送信キューからデータブロックを順次、データ転送回路１２０に出力させる。
ポインタスタック１５０には、共有バッファ１３０におけるデータブロックの書き込みアドレスを指し示すポインタが格納されている。ポインタスタック１５０は、共有バッファ１３０内のすべてのパケット格納領域における書き込みアドレスに対応するポインタを一元的に保持しており、これによって共有バッファ１３０内の領域を効率的に使用することが可能となっている。
ポインタスタック１５０は、送受信インタフェース１１１〜１１４のいずれかでパケットが受信され、このパケットが分割されて生成されたデータブロックが共有バッファ１３０に格納される際に、ポインタ制御回路１６０からの制御信号に基づいてＰＯＰ動作を行い、ＰＯＰされたポインタを書き込み／読み出し制御回路１４０に対して、ポインタ用バス１８０を通じて出力する。また、データブロックが共有バッファ１３０から取り出される際に、ポインタ制御回路１６０からの制御信号に基づいて、ポインタカウンタ群１７０が保持しているポインタをポインタ用バス１８０を通じて受け取り、スタックにＰＵＳＨして格納する。
ポインタ制御回路１６０は、データ転送回路１２０におけるデータブロックの転送動作や、パケットを廃棄するように通知する廃棄信号の受信に応じて、ポインタスタック１５０におけるポインタのＰＯＰ動作およびＰＵＳＨ動作を制御する。また、ポインタカウンタ群１７０に対して制御信号を出力して、ポインタ用バス１８０を通じたポインタのポインタカウンタ群１７０内における書き込み動作および読み出し動作を制御する。
ポインタカウンタ群１７０は、共有バッファ１３０に書き込まれたデータブロックのポインタやその使用数、送信キューに登録されたポインタ数等を、受信ポートごと、および送信ポートごとに管理する複数のカウンタを具備する。また、ポインタカウンタ群１７０は、後述するように、使用されているポインタを、データブロックの共有バッファ１３０への書き込み時と、共有バッファ１３０からの読み出し時とに分割して管理する。そして、ポインタ制御回路１６０からの制御信号に基づき、転送が完了したデータブロックに対応するポインタをポインタ用バス１８０に出力し、ポインタスタック１５０に返却する。また、送信キューに登録するポインタ数をカウントし、ポインタ数が許容値を超えた場合には、登録処理中のパケットを廃棄するように通知する廃棄信号をポインタ制御回路１６０に出力する。
このような構成を有するネットワークスイッチ装置１００により、１つの共有バッファ１３０を使用したパケットのスイッチング処理が行われる。例えば、ネットワーク２１からネットワーク２２に転送すべきパケットを受信した場合には、送受信インタフェース１１１において受信されたパケットは、固定長のデータブロックに分割され、データ転送回路１２０を介して共有バッファ１３０に格納される。共有バッファ１３０における書き込みアドレスは、ポインタスタック１５０からＰＯＰされたポインタに基づいて、書き込み／読み出し制御回路１４０により指定される。
書き込み／読み出し制御回路１４０は、共有バッファ１３０内に各送信ポートに対応する送信キューを形成し、データブロックを共有バッファ１３０に格納した後、その宛先に対応する送信キューにデータブロックを登録する。このとき、パケット内でのデータブロック間の連結と、送信キュー内でのパケット間の連結とを、ポインタを用いた連結リスト構造として管理する。例えば、送信キュー内では、以前に登録されていたパケットの最終データブロックと、新たに登録された先頭データブロックとが、ポインタにより連結される。
そして、この連結リスト構造に従ってポインタを順次指定することにより、送信キューからデータブロックが順次読み出される。読み出されたデータブロックは、データ転送回路１２０を介して、宛先に対応する送受信インタフェース１１２に転送され、ネットワーク２２に順次送出される。
ここで、共有バッファ１３０におけるデータブロックの書き込みアドレスは、そのアドレスを指し示すポインタとしてポインタスタック１５０から一元的に与えられる。書き込み／読み出し制御回路１４０は、ポインタスタック１５０からＰＯＰされたポインタを用いて、共有バッファ１３０内に格納したデータブロック間の連結状態を連結リスト構造として管理する。このような管理方法により、受信ポートおよび送信ポートにかかわらず、パケットの受信から宛先のネットワークに対する送信までの間、そのパケットに含まれるデータを１つの共有バッファ１３０内に格納しておくことが可能となる。また、受信したパケットは固定長のデータブロックに分割されて共有バッファ１３０に格納されるので、共有バッファ１３０内の使用効率を高め、共有バッファ１３０の容量を小さくすることが可能となる。
さらに、ポインタカウンタ群１７０において、使用中のポインタやその使用数が管理されるとともに、送信キューに登録されるデータブロックに対して使用されたポインタ数が、送信ポートごとに管理される。このような管理方法により、使用されているポインタの管理が容易になるとともに、送信キューに登録されるデータブロック数が一定数以内に留められ、ブロッキングの発生が防止される。
次に、図４は、共有バッファ１３０内におけるデータ格納の様子を模式的に示す図である。
図４に示すように、共有バッファ１３０内には、各受信ポートに対応する受信パケット専用バッファ領域１３１ａ〜１３１ｄと、各送信ポートに対応する送信キュー専用バッファ領域１３２ａ〜１３２ｄとが形成される。なお、この図に示す領域はあくまでも論理的なバッファ領域を示しており、実際の物理的なバッファ領域は必ずしもこの通りにはならない。
受信パケット専用バッファ領域１３１ａ〜１３１ｄは、それぞれ送受信インタフェース１１１〜１１４に対応しており、各送受信インタフェース１１１〜１１４によって受信されたパケットがデータブロックに分割され、データ転送回路１２０により共有バッファ１３０に転送されたときに、これらのデータブロックが格納される領域である。
送信キュー専用バッファ領域１３２ａ〜１３２ｄは、パケットの宛先に対応する送信キューに登録されたデータブロックが格納される領域である。各送信キュー専用バッファ領域１３２ａ〜１３２ｄは有限の容量を有し、一定数のデータブロックを格納することが可能とされている。各送信キュー専用バッファ領域１３２ａ〜１３２ｄの容量は、送信キューに格納されたデータブロックに対して使用されているポインタの数が、ポインタカウンタ群１７０においてカウントされることにより管理される。
上記のように、ネットワーク２１からネットワーク２２に転送すべきパケットを受信した場合には、まず、受信パケット専用バッファ領域１３１ａに対して１パケット分に相当するデータブロックが格納される。そして、格納が完了すると、書き込み／読み出し制御回路１４０の制御により、宛先の送信ポートに対応する送信キューに、これらのデータブロックが連結される。
このとき、書き込み／読み出し制御回路１４０により、パケット内でのデータブロック間の連結と、送信キュー内でのパケット間の連結とが、ポインタを用いた連結リスト構造として管理される。従って、共有バッファ１３０内においては、格納されたパケットのデータの物理的な格納位置が変化することなく、受信パケット専用バッファ領域１３１ａが、送信キュー専用バッファ領域１３２ｂの一部に移行する。
また、送信キューへの登録動作が終了した後、送信キュー専用バッファ領域１３２ｂから、データブロックが順次読み出される。この読み出しは、書き込み／読み出し制御回路１４０の制御により、連結リスト構造に従ってポインタを順次指定することにより行われる。また、読み出されたデータブロックが格納されていた送信キュー専用バッファ領域１３２ｂは、この領域を指し示していたポインタが返却されることにより論理上フラッシュされ、新たなデータブロックを格納することが可能となる。
次に、ポインタ制御回路１６０およびポインタカウンタ群１７０の構成について詳しく説明する。
図５は、ポインタ制御回路１６０およびポインタカウンタ群１７０の内部構成例を示すブロック図である。なお、図５では、各部の接続関係の理解を容易にするために、ポインタ制御回路１６０およびポインタカウンタ群１７０の周囲の機能ブロックについても、必要に応じて示している。
図５に示すように、ポインタ制御回路１６０は、ＰＯＰ制御部１６１、ＰＵＳＨ制御部１６２および廃棄制御部１６３を具備している。また、ポインタカウンタ群１７０は、受信ポートごとに設けられた受信中ポインタカウンタ１７１ａ〜１７１ｄと、それぞれ送信ポートごとに設けられた送信中ポインタカウンタ１７２ａ〜１７２ｄおよび送信キューポインタカウンタ１７３ａ〜１７３ｄを具備している。
ポインタ制御回路１６０において、ＰＯＰ制御部１６１は、データブロックが共有バッファ１３０に格納される際に、データ転送回路１２０からのインタフェース情報に基づいてデータブロックの転送開始を判断すると、ポインタスタック１５０に対してポインタをＰＯＰするように指示するとともに、受信ポートに対応する受信中ポインタカウンタに対して、ポインタの書き込みを指示するための制御信号を出力する。
ＰＵＳＨ制御部１６２は、共有バッファ１３０に格納されたデータブロックが読み出される際に、データ転送回路１２０からのインタフェース情報に基づいて、送信ポートに対応する送信中ポインタカウンタに対して、ポインタの書き込みを指示するための制御信号を出力する。
また、１パケット分のデータブロックの読み出し処理が終了し、かつすべての宛先への出力が完了すると、ポインタスタック１５０に対して、ポインタ用バス１８０に出力されたポインタをＰＵＳＨするように指示する。そして、書き込みを指示していた送信中ポインタカウンタのポインタをフラッシュする。
廃棄制御部１６３は、送受信インタフェース１１１〜１１４、および送信キューポインタカウンタ１７３ａ〜１７３ｄから廃棄信号を受信すると、ＰＵＳＨ制御部１６２に制御信号を出力して、ポインタスタック１５０においてＰＵＳＨ動作を行わせるように依頼する。また、受信中ポインタカウンタ１７１ａ〜１７１ｄおよび送信中ポインタカウンタ１７２ａ〜１７２ｄに対して、保持しているポインタを読み出すように指示する制御信号を出力する。
なお、受信中ポインタカウンタ１７１ａ〜１７１ｄおよび送信中ポインタカウンタ１７２ａ〜１７２ｄでは、ポインタの書き込み、あるいはカウント制御信号の出力を行うように指定されているカウンタが、廃棄制御部１６３からの制御信号を受け取る。
一方、ポインタカウンタ群１７０において、受信中ポインタカウンタ１７１ａ〜１７１ｄおよび送信中ポインタカウンタ１７２ａ〜１７２ｄは、それぞれポインタ用バス１８０に接続されて、ポインタの送受信を行うことが可能となっている。また、受信中ポインタカウンタ１７１ａ〜１７１ｄおよび送信中ポインタカウンタ１７２ａ〜１７２ｄはそれぞれ、カウント値の増減を指示するためのカウント制御信号を、送信キューポインタカウンタ１７３ａ〜１７３ｄに出力する。
受信中ポインタカウンタ１７１ａ〜１７１ｄは、ポインタ制御回路１６０のＰＯＰ制御部１６１からの制御信号に基づいて、ポインタスタック１５０からＰＯＰされてポインタ用バス１８０を通じて伝送されるポインタを取得して保持するとともに、取得したポインタの数をカウントする。
また、１パケット分のポインタの格納およびポインタ数のカウントが終了すると、このときのカウント数を、指定された送信ポートに対応する送信キューポインタカウンタのカウント数に加算するように、カウント制御信号を出力する。カウント制御信号の出力後、保持していたポインタおよびカウント数をクリアする。
さらに、廃棄制御部１６３からの制御信号を受信すると、保持しているポインタを読み出してポインタ用バス１８０に対して送出し、ポインタスタック１５０に返却する。このとき、カウント数をクリアする。
送信中ポインタカウンタ１７２ａ〜１７２ｄは、書き込み／読み出し制御回路１４０からポインタ用バス１８０を通じて伝送されるポインタを取得して保持するとともに、取得したポインタの数をカウントする。このとき、取得したポインタ数を、同じ送信ポートに対応する送信キューポインタカウンタ１７３ａ〜１７３ｄのカウント数から順次減算するように、カウント制御信号を出力する。
また、読み出されるパケットについて他の宛先が指定されていない場合は、共有バッファ１３０からのデータブロックの読み出し時に、対応するポインタが、書き込み／読み出し制御回路１４０からポインタ用バス１８０に順次出力され、ポインタスタック１５０に返却される。このとき、対応する送信中ポインタカウンタは、カウント数をクリアする。また、他の宛先が指定されている場合は、このときのカウント数を、指定された送信ポートに対応する送信キューポインタカウンタのカウント数に加算するように、カウント制御信号を出力する。カウント制御信号の出力後、保持していたポインタおよびカウント数をクリアする。
また、廃棄制御部１６３からの制御信号を受信した場合は、保持しているポインタを読み出してポインタ用バス１８０に対して送出し、ポインタスタック１５０に返却する。このとき、カウント数をクリアする。
送信キューポインタカウンタ１７３ａ〜１７３ｄは、受信中ポインタカウンタ１７１ａ〜１７１ｄおよび送信中ポインタカウンタ１７２ａ〜１７２ｄからのカウント制御信号に基づいて、カウント動作を行うことにより、各送信キューに登録されているデータブロックに対して使用されているポインタの数をカウントする。そして、各送信キューでのカウント数が所定の値を超えた場合に、廃棄制御部１６３に対して廃棄信号を出力する。
ここで、ポインタ制御回路１６０内の動作と、ポインタカウンタ群１７０内の動作とを併せて説明する。まず、ＰＯＰ制御部１６１の処理を示すフローチャートを示し、パケット受信時の動作について説明する。
図６は、ＰＯＰ制御部１６１の処理の流れを示すフローチャートである。以下、図６に示す処理をステップ番号に沿って説明する。
［ステップＳ６０１］データ転送回路１２０からは、送受信インタフェース１１１〜１１４からのデータブロックを共有バッファ１３０に格納する際に、各データブロックに関するインタフェース情報がＰＯＰ制御部１６１に対して出力される。ＰＯＰ制御部１６１は、データ転送回路１２０からのインタフェース情報に基づいて、データブロックの共有バッファ１３０への格納処理が開始したか否かを判断する。そして、開始したと判断した場合にステップＳ６０２に進む。
［ステップＳ６０２］ポインタスタック１５０に対して、ポインタをＰＯＰするように指示する。ＰＯＰされたポインタは、ポインタ用バス１８０を通じて書き込み／読み出し制御回路１４０に出力され、さらに、ポインタカウンタ群１７０に出力される。
［ステップＳ６０３］指定された受信ポートに対応する受信中ポインタカウンタに対して、ポインタの書き込みを指示するための制御信号を出力する。これにより、ポインタスタック１５０からＰＯＰされたポインタが、受信ポートに対応する受信中ポインタカウンタに格納され、この受信中ポインタカウンタのカウント値がカウントアップされる。
［ステップＳ６０４］ブロック位置情報に基づいて、格納処理中のデータブロックがパケットの最終のものであるか否かを判断する。最終でない場合はステップＳ６０１に戻り、最終である場合はステップＳ６０５に進む。
以上のステップＳ６０１〜Ｓ６０４が繰り返されることにより、１パケット分のデータブロックが共有バッファ１３０に格納されるとともに、これらのデータブロックに対して使用されたポインタが、対応する受信中ポインタカウンタに格納される。この受信中ポインタカウンタは、格納されたポインタ数をカウント数として保持する。
［ステップＳ６０５］上記のステップＳ６０１〜Ｓ６０４の処理で制御していた受信中ポインタカウンタに対して、ポインタの書き込みの終了を指示する。このとき、インタフェース情報に含まれる送信ポートが１つ選択され、この送信ポートが制御中の受信中ポインタカウンタに対して通知される。なお、送信ポートが複数指定されている場合、この処理で選択される送信ポートは、書き込み／読み出し制御回路１４０において選択されるものと同一となるように、あらかじめ規則を定めておく必要がある。
通知を受けた受信中ポインタカウンタは、保持しているカウント数を、通知された送信ポートに対応する送信キューポインタカウンタに加算するように、カウント制御信号を出力する。これにより、対応する送信キューにおいて使用されているポインタ数、すなわち、登録されたデータブロック数が、送信キューポインタカウンタのカウント数として保持される。
ここで、カウント制御信号を受信した送信キューポインタカウンタにおいて、カウント値が許容値を超え、廃棄信号が廃棄制御部１６３に出力された場合には、廃棄制御部１６３からＰＵＳＨ制御部１６２に対して制御信号が出力される。これとともに、上記の制御対象となっていた受信中ポインタカウンタに対して、ポインタを読み出すように指示する制御信号が出力される。また、廃棄制御部１６３から書き込み／読み出し制御回路１４０に対して制御信号が出力されるので、書き込み／読み出し制御回路１４０は、送信キューへのデータブロックの登録処理を行わない。ただし、他の宛先が存在し、この宛先に対応する送信キューに格納可能である場合は、この送信キューに登録する処理が行われる。
次に、パケット送信時の動作について説明する。
図７は、パケット送信時におけるネットワークスイッチ装置１００における処理の流れを示すフローチャートである。このフローチャートでは、１つの送信ポートに対するパケットの転送が行われる場合の処理を示している。以下、図７に示す処理をステップ番号に沿って説明する。
［ステップＳ７０１］データ転送回路１２０が、送受信インタフェースから送信要求を受信する。
［ステップＳ７０２］データ転送回路１２０から、読み出しを行う送信ポートが書き込み／読み出し制御回路１４０に通知され、書き込み／読み出し制御回路１４０が、読み出しアドレスを指定する。これにより、対応する送信キューからデータブロックが読み出され、データ転送回路１２０によって宛先に対応する送受信インタフェースに対して転送される。
［ステップＳ７０３］書き込み／読み出し制御回路１４０からは、読み出しに使用したポインタが、ポインタ用バス１８０に出力される。このとき、対応する送信中ポインタカウンタに対しては、ポインタの書き込みを指示するための制御信号が出力され、この送信中ポインタカウンタには、書き込み／読み出し制御回路１４０からのポインタが格納されるとともに、カウント値がカウントアップされる。さらに、この送信中ポインタカウンタから、対応する送信キューポインタカウンタに対してカウント制御信号が出力され、カウント制御信号を受信した送信キューポインタカウンタがカウントダウンされる。
［ステップＳ７０４］データ転送回路１２０は、読み出したデータブロックの内容から、転送すべき宛先が他に存在するか否かを判断している。ここで、宛先が他に存在しない場合のみ、このことがＰＵＳＨ制御部１６２に対して通知される。ＰＵＳＨ制御部１６２は、この通知に応じて、ポインタスタック１５０に対して、ＰＵＳＨ動作を開始させるように制御する。これにより、書き込み／読み出し制御回路１４０からポインタ用バス１８０に出力されたポインタが、ポインタスタック１５０に返却される。
［ステップＳ７０５］読み出したデータブロックがパケット内の最終のものであるか否かが判断される。最終でない場合はステップＳ７０２に戻り、次のデータブロックの読み出しおよび転送が行われる。また、最終のものである場合は、ステップＳ７０６に進む。
以上のステップＳ７０１〜Ｓ７０５が繰り返されることにより、１パケット分のデータブロックが１つの送信ポートを通じて送信されるとともに、これらのデータブロックに対して使用されたポインタが、対応する送信中ポインタカウンタに格納される。この送信中ポインタカウンタは、格納されたポインタ数をカウント数として保持する。また、この送信中ポインタカウンタの保持するカウント数分だけ、同じ送信ポートに対応する送信キューポインタカウンタのカウント値が減算される。
［ステップＳ７０６］すべての宛先に対する転送が終了したか否かが判断される。終了した場合はステップＳ７０７に進み、終了していない場合はステップＳ７０８に進む。
［ステップＳ７０７］ポインタの格納先の送信中ポインタカウンタをクリアする。これにより、１パケット分のデータブロックの転送処理が終了される。
［ステップＳ７０８］宛先が他に存在する場合には、データ転送回路１２０により次の宛先に対応する送信ポートが指定される。ポインタカウンタ群１７０では、新たに指定された宛先に対応する送信キューポインタカウンタにカウント制御信号が出力され、送信が終了した送信ポートに対応する送信中ポインタカウンタのカウント値が加算される。
［ステップＳ７０９］ここで、カウント値が加算された送信キューポインタカウンタにおいて、カウント値が許容値を超える場合には、廃棄信号が廃棄制御部１６３に出力される。このとき、送信キューポインタカウンタでは、カウント値の加算を行わない。廃棄信号が出力された場合にはステップＳ７１０に進む。
また、廃棄信号が出力されなかった場合にはステップＳ７０７に進み、送信が終了した送信ポートに対応する送信中ポインタカウンタがクリアされ、処理が終了される。これにより、同じパケットの次の送信先に対応する送信キューポインタカウンタに、送信中ポインタカウンタのカウント数が加算された状態となる。また、書き込み／読み出し制御回路１４０の制御により、新たな宛先に対応する送信キューに対して、パケットが連結される。
［ステップＳ７１０］他の宛先があるか否かが判断される。宛先がある場合はステップＳ７０８に戻り、データ転送回路１２０によって他の送信ポートが指定される。また、宛先がない場合は、ステップＳ７１１に進む。
このステップでは、送信キューポインタカウンタからの廃棄信号を受信した廃棄制御部１６３は、ＰＵＳＨ制御部１６２に対してＰＵＳＨ動作の開始を要求する。このとき、ＰＵＳＨ制御部１６２には、データ転送回路１２０から、他に宛先があるか否かについての情報が通知されている。他に宛先がある場合には、その宛先に対してパケットの転送を行う必要があるため、ＰＵＳＨ制御部１６２はポインタスタック１５０に対してＰＵＳＨ動作を行うように指示しない。
［ステップＳ７１１］このステップでは、ＰＵＳＨ制御部１６２には、データ転送回路１２０から、他に宛先がないことが通知されている。従って、ＰＵＳＨ制御部１６２は、廃棄制御部１６３からの要求に応じて、ポインタスタック１５０に対してＰＵＳＨ動作を行うように指示する。このとき、廃棄制御部１６３からは、送信が終了した送信ポートに対応する送信中ポインタカウンタに対して、保持しているポインタをポインタ用バス１８０に出力するように指示する制御信号が出力されている。この制御信号を受けた送信中ポインタカウンタは、保持しているポインタをポインタ用バス１８０に出力する。これにより、このポインタがポインタスタック１５０に返却される。さらにこの後にステップＳ７０７に進み、送信中ポインタカウンタをクリアして、処理が終了する。
以上の図６および図７において説明した処理が実行されることにより、共有バッファ１３０におけるデータブロックの書き込みアドレス管理を、効率よく行うことが可能となる。例えば、パケットを廃棄する場合には、ポインタ制御回路１６０からの指示に基づいて、受信中ポインタカウンタ１７１ａ〜１７１ｄ、または送信中ポインタカウンタ１７２ａ〜１７２ｄのうちの必要なものからポインタが読み出され、ポインタスタック１５０に返却される。これにより、返却されたポインタに対応して、共有バッファ１３０内に空き領域が形成され、それらのポインタが再び利用されることにより、後続のデータブロックを共有バッファ１３０に確実に格納することが可能となる。
また、送信キューポインタカウンタ１７３ａ〜１７３ｄにおいて、送信キューに登録されているデータブロック数が管理されるので、送信キューが格納される送信キュー専用バッファ領域１３２ａ〜１３２ｄは常に一定容量以下に制限される。従って、例えば特定の送信ポート宛のパケットが集中して受信された場合に、格納しきれないパケットが廃棄されるため、この送信ポートにおける送信処理が他の送信ポートにおける送信処理に影響を与えず、ブロッキングが容易に防止される。
次に、共有バッファ１３０内に格納されたデータブロックに対する連結リスト構造を用いた管理について説明する。ここでは、以下のような２通りの管理方法を例示する。
〔第１の連結リスト管理例〕
連結リスト構造を用いた第１の管理例では、共有バッファ１３０内にデータブロックごとに対応する付属セル領域が設けられる。そして、書き込み／読み出し制御回路１４０は、１パケット内のデータブロック間の連結、および各送信キュー内におけるパケット間の連結を管理するための付属情報を生成して、付属セル領域に格納する。また、書き込み／読み出し制御回路１４０は、データブロック間の連結を受信ポートごとおよび送信ポートごとに管理するための各種レジスタ群を具備して、このレジスタ群を順次書き換えることにより、共有バッファ１３０内におけるデータブロックの書き込みおよび読み出しを制御する。
図８は、共有バッファ１３０内に格納されたデータブロックの構造を模式的に示す図である。なお、図８では、連結された各データブロックおよび各パケットが連続して配置されているが、共有バッファ１３０上の実際の物理的な書き込み位置は、この通りにはならない。
各送受信インタフェース１１１〜１１４においてパケットが受信され、データブロックに分割されると、これらのデータブロックは、ポインタによって指し示される共有バッファ１３０上のアドレスに格納される。このとき、各データブロックについて、付属セル領域１３３ａとデータブロック領域１３３ｂとが形成され、分割されたデータブロックはデータブロック領域１３３ｂに格納される。
ここで、例えば、ネットワーク２１からネットワーク２２に転送すべきパケットを受信した場合を考えると、送受信インタフェース１１１から、データ転送回路１２０によって共有バッファ１３０に供給された１パケット分のデータブロックは、共有バッファ１３０内の対応する受信パケット専用バッファ領域１３１ａに格納される。また、このとき、各データブロックの付属セル領域１３３ａには、先頭のデータブロックから順に、それに続くデータブロックの位置を指し示すポインタが格納される。図８では、このようなポインタを“ポインタＰ１”として示している。１パケット分のデータブロックの格納が完了した時点では、最終データブロックを除くすべてのデータブロックの付属セル領域１３３ａに、後続のデータブロックに使用されたポインタＰ１が格納される。これにより、パケット内においてデータブロック間が連結される。
続いて、これらのデータブロックは、ネットワーク２２に対応する送信キューに登録される。このとき、後述するレジスタ群を用いて、送信キュー内に登録されたうちの最終パケットを常に認識しておき、送信キューにすでに登録されているパケットがあった場合には、この最終パケットの先頭データブロックの付属セル領域１３３ａに、新たに登録するパケットの先頭データブロックの位置を指し示すポインタを格納する。図８では、このようなポインタを“ポインタＰ２”として示している。これにより、送信キュー内においてパケット間が連結される。
また、書き込み／読み出し制御回路１４０では、送信キュー内のデータブロックを読み出すためのポインタを、レジスタ群において常に保持しており、データブロックの読み出し動作ごとに、読み出したデータブロックの付属セル領域１３３ａを参照して、次に読み出すべきデータブロックのポインタを抽出し、レジスタ群の格納データを更新していく。
次に、図９は、書き込み／読み出し制御回路１４０が具備するレジスタ群の構成を示す図である。
図９に示すように、書き込み／読み出し制御回路１４０は、各受信ポートに対応した受信先頭アドレスレジスタ１４１ａ〜１４１ｄ、および受信最終アドレスレジスタ１４２ａ〜１４２ｄと、各送信ポートに対応した送信済パケットアドレスレジスタ１４３ａ〜１４３ｄ、送信ブロックアドレスレジスタ１４４ａ〜１４４ｄ、送信最終アドレスレジスタ１４５ａ〜１４５ｄ、および次送信パケットアドレスレジスタ１４６ａ〜１４６ｄを具備する。
受信先頭アドレスレジスタ１４１ａ〜１４１ｄは、受信したパケットを共有バッファ１３０に格納している際に、このパケット中の先頭データブロックを指し示すポインタを保持する。受信最終アドレスレジスタ１４２ａ〜１４２ｄは、このパケット中の最終データブロックを指し示すポインタを保持する。
送信済パケットアドレスレジスタ１４３ａ〜１４３ｄは、共有バッファ１３０内に登録されている各送信キューにおいて、現在送信中または送信が終了したパケットの先頭データブロックを指し示すポインタを保持する。送信ブロックアドレスレジスタ１４４ａ〜１４４ｄは、各送信キューにおいて、次に送信が予定されているデータブロックを指し示すポインタを保持する。送信最終アドレスレジスタ１４５ａ〜１４５ｄは、各送信キューにおいて最後に登録されたパケットの先頭データブロックを指し示すポインタを保持する。次送信パケットアドレスレジスタ１４６ａ〜１４６ｄは、次に送信が予定されているパケットの先頭データブロックを指し示すポインタを保持する。
次に、これらのレジスタ群と、各データブロックの付属セル領域１３３ａに格納された情報に基づく書き込み／読み出し制御回路１４０の処理について説明する。なお、以下の図１０および図１１に示すフローチャートの説明では、必要に応じて、ネットワークスイッチ装置１００内の他の要素における処理についての説明も加える。
図１０は、パケットの受信時における書き込み／読み出し制御回路１４０の処理の流れを示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
［ステップＳ１００１］例えば、送受信インタフェース１１１においてパケットが受信され、データ転送回路１２０に対して受信要求が通知されると、データ転送回路１２０は、分割されたデータブロックのインタフェース情報を、書き込み／読み出し制御回路１４０に出力する。書き込み／読み出し制御回路１４０は、インタフェース情報の受信を監視し、これを受信すると、共有バッファ１３０に対するデータブロックの格納処理が開始されたと判断して、ステップＳ１００２に進む。
［ステップＳ１００２］ポインタスタック１５０からポインタがＰＯＰされ、書き込み／読み出し制御回路１４０は、ポインタ用バス１８０を通じてこのポインタを取得する。そして、このポインタの指し示す共有バッファ１３０内のアドレスを基に、データブロックの書き込みアドレスを指定する。これにより、データブロックが共有バッファ１３０に格納される。
［ステップＳ１００３］ステップＳ１００２で取得したポインタを、以下の条件に従って付属セル領域１３３ａや、受信先頭アドレスレジスタ１４１ａ、受信最終アドレスレジスタ１４２ａに対して書き込む。これらの条件は、インタフェース情報に含まれるブロック位置情報に基づいて判断される。
（Ｓ１００３−１）共有バッファ１３０に格納したデータブロックが、パケットの先頭データブロックである場合は、取得したポインタを対応する受信先頭アドレスレジスタ１４１ａおよび受信最終アドレスレジスタ１４２ａに書き込む。
（Ｓ１００３−２）格納したデータブロックが、パケット内の先頭および最終以外のデータブロックである場合、受信最終アドレスレジスタ１４２ａに格納されたポインタを参照する。このポインタは、直前のデータブロックの書き込みアドレスを指し示すものであり、書き込み／読み出し制御回路１４０は、このデータブロックの付属セル領域１３３ａに、ステップＳ１００２で取得したポインタを格納する。これにより、同一パケットにおける直前のデータブロックとが連結される。
また、ステップＳ１００２で取得したポインタを用いて、受信最終アドレスレジスタ１４２ａを更新する。
（Ｓ１００３−３）格納したデータブロックが、パケット内の最終データブロックである場合、受信最終アドレスレジスタ１４２ａに格納されたポインタを参照する。そして、このポインタが指し示すアドレスに書き込まれたデータブロックの付属セル領域１３３ａに、ステップＳ１００２で取得したポインタを格納し、直前のデータブロックとを連結させる。また、格納したデータブロックの付属セル領域１３３ａに、後続のデータブロックが存在しないことを示す情報を書き込む。
［ステップＳ１００４］ブロック位置情報に基づいて、転送処理中のデータブロックがパケット内の最終データブロックであるか否かを判断する。最終データブロックでない場合は、ステップＳ１００１に戻り、後続データブロックの格納処理の開始を待機する。また、最終データブロックである場合は、ステップＳ１００５に進む。
以上のステップＳ１００１〜Ｓ１００４の処理が繰り返されることにより、１パケット分のデータブロックが、共有バッファ１３０内に格納される。このとき、このパケット内の先頭データブロックの書き込みアドレスが、受信先頭アドレスレジスタ１４１ａに保持され、最終データブロック、またはこの直前のデータブロックの書き込みアドレスが、受信最終アドレスレジスタ１４２ａに保持される。
なお、以上のステップＳ１００１〜Ｓ１００４の処理は、図６で示したステップＳ６０１〜Ｓ６０５の処理に対応する。すなわち、この時点において、パケットの格納に使用されたポインタとその数が受信中ポインタカウンタ１７１ａに保持される。
次に、送信キューへの登録処理が行われる。
［ステップＳ１００５］インタフェース情報に基づいて、宛先の送信ポートを選択する。なお、ここでは、宛先としてネットワーク２２が選択されたものとして説明する。また、このとき、受信中ポインタカウンタ１７１ａのカウント数が、送信キューポインタカウンタ１７３ｂのカウント値に加算される。
［ステップＳ１００６］送信キューポインタカウンタ１７３ｂにおいて、カウント値が許容値を超え、かつ他の宛先が存在しない場合、廃棄制御部１６３から書き込み／読み出し制御回路１４０に対して制御信号が出力される。書き込み／読み出し制御回路１４０は、この制御信号を受信した場合はステップＳ１００８に進み、受信しなかった場合はステップＳ１００７に進む。
［ステップＳ１００７］受信したパケットを、宛先に対応する送信キューに登録する処理を行う。ここでは、選択した送信ポートに対応する次送信パケットアドレスレジスタ１４６ｂを参照して、このレジスタにデータが格納されているか否かによって、宛先の送信キューに先行するパケットが登録されているか否かを判断する。そして、受信先頭アドレスレジスタ１４１ａに格納されたポインタを、送信用の各種レジスタや付属セルに書き込むことにより、パケットを送信キューに連結する。
（Ｓ１００７−１）宛先に対応する送信キューに、先行するパケットが登録されている場合、受信先頭アドレスレジスタ１４１ａに格納されているポインタを抽出する。そして、宛先に対応する送信最終アドレスレジスタ１４５ｂに格納されたポインタを参照して、送信キュー内にすでに登録されていたうちの最終パケットの先頭データブロックの書き込み位置を抽出し、このデータブロックの付属セル領域１３３ａに、受信先頭アドレスレジスタ１４１ａから抽出したポインタを格納する。これにより、送信キュー内の先行するパケットにおいて、その先頭データブロックの付属セル領域１３３ａに、後続のデータブロックを指し示すポインタと、後続のパケットの先頭データブロックを指し示すポインタとが格納され、先行するパケットと新たに登録するパケットとの間が連結される。
また、送信最終アドレスレジスタ１４５ｂには、受信先頭アドレスレジスタ１４１ａに格納されていたポインタを書き込む。これにより、送信キュー内の最終パケットの先頭位置を指し示すポインタが更新される。
（Ｓ１００７−２）宛先に対応する送信キューに、先行するパケットが登録されていない場合、受信先頭アドレスレジスタ１４１ａに格納されているポインタを、宛先に対応する送信済パケットアドレスレジスタ１４３ｂ、送信ブロックアドレスレジスタ１４４ｂ、送信最終アドレスレジスタ１４５ｂ、および次送信パケットアドレスレジスタ１４６ｂにそれぞれ格納する。これにより、書き込み／読み出し制御回路１４０は、対応する送信キューから先行して読み出すパケットの読み出し位置を認識する。
［ステップＳ１００８］ステップＳ１００６において廃棄制御部１６３からの制御信号を受信した場合は、インタフェース情報を参照して、宛先として他の送信ポートが指定されているか否かを判断する。他の宛先が存在する場合は、ステップＳ１００５に戻り、新たな宛先の送信ポートを選択する。
以上の処理により、共有バッファ１３０上の送信キューにパケットが正しく登録された場合には、この送信キュー上のデータブロックが、ポインタを用いた連結リスト構造として管理されることになる。次に、この連結リスト構造に従ってポインタを順次抽出することにより、送信キューからデータブロックを順次読み出し、宛先のネットワークに対して送信する。
図１１は、パケットの送信時における書き込み／読み出し制御回路１４０の処理の流れを示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
［ステップＳ１１０１］例えば、ネットワーク２２に対するパケットの送信が行われる場合、送受信インタフェース１１２からデータ転送回路１２０に対して送信要求が通知されると、データ転送回路１２０は、これに対応する送信ポート情報を含むインタフェース情報を、書き込み／読み出し制御回路１４０に出力する。書き込み／読み出し制御回路１４０は、インタフェース情報の受信を監視し、これを受信すると、共有バッファ１３０からのデータブロックの転送が開始されたと判断して、ステップＳ１１０２に進む。
［ステップＳ１１０２］送信ポートに対応する送信ブロックアドレスレジスタ１４４ｂに格納されているポインタを参照し、このポインタに基づいて共有バッファ１３０の読み出しアドレスを指定する。これにより、対応する送信キューの先頭データブロックと、その付属セル領域１３３ａに格納されたポインタとが読み出され、データブロックはデータ転送回路１２０を通じて送受信インタフェース１１２に転送される。
［ステップＳ１１０３］読み出された付属セル領域１３３ａに格納されたポインタと、送信ブロックアドレスレジスタ１４４ｂのポインタとを用いて、以下の条件に従って、送信済パケットアドレスレジスタ１４３ｂ、送信ブロックアドレスレジスタ１４４ｂ、送信最終アドレスレジスタ１４５ｂ、および次送信パケットアドレスレジスタ１４６ｂのポインタを更新する。
（Ｓ１１０３−１）まず、送信ブロックアドレスレジスタ１４４ｂに格納されているポインタを、送信済パケットアドレスレジスタ１４３ｂに書き込む。これにより、読み出し中のパケットの先頭データブロックを指し示すポインタが保持される。
そして、読み出したデータブロックがパケット中の先頭であり、付属セル領域１３３ａ内に、後続パケットへのポインタ（図１０のステップＳ１００７−１で格納されたポインタ）が格納されていた場合は、このポインタを次送信パケットアドレスレジスタ１４６ｂに格納する。これにより、送信キュー内に次のパケットが登録されていた場合に、このパケットの先頭アドレスを認識することが可能となる。
また、付属セル領域１３３ａに格納された後続パケットへのポインタ（図１０のステップＳ１１０２−２またはＳ１１０２−３で格納されたポインタ）を、送信ブロックアドレスレジスタ１４４ｂに格納する。これにより、次に読み出すべきデータブロックのアドレスを認識することが可能となる。
（Ｓ１１０３−２）読み出したデータブロックがパケット中の先頭および最終でない場合、付属セル領域１３３ａに格納されていた後続データブロックへのポインタを、送信ブロックアドレスレジスタ１４４ｂに格納する。
（Ｓ１１０３−３）読み出したデータブロックがパケット中の最終である場合、次送信パケットアドレスレジスタ１４６ｂに格納されていたポインタを、送信ブロックアドレスレジスタ１４４ｂに格納する。
［ステップＳ１１０４］ステップＳ１１０２で参照したポインタを、ポインタ用バス１８０に対して出力する。この処理は、図７のステップＳ７０２に対応し、出力されたポインタは、対応する送信中ポインタカウンタ１７２ｂに格納されてカウントアップが行われるとともに、対応する送信キューポインタカウンタ１７３ａがカウントダウンされる。
［ステップＳ１１０５］読み出したデータブロックがパケット中の最終のものであるか否かを判定する。最終でない場合は、ステップＳ１１０１に戻り、次のデータブロックの転送が開始されるのを待機する。以後、１パケット分のデータブロックが読み出されるまで、ステップＳ１１０１〜Ｓ１１０５の処理が繰り返され、処理が終了する。
なお、以上の処理が終了した時点では、読み出された１パケット分のデータブロックに使用されていたポインタが、すべて送信中ポインタカウンタ１７２ｂに格納され、このポインタ数が保持される。また、このポインタ数分だけ送信キューポインタカウンタ１７３ｂのカウント数が減算されている。
また、この後、インタフェース情報に他の宛先の送信ポートが含まれている場合には、他の送信ポートを選択して、この送信ポートに対応する送信キューに、パケットを連結する。このとき、新たな送信キューに対応する送信キューポインタカウンタに、送信中ポインタカウンタ１７２ｂのカウント値が加算され、このカウント値が許容値以内である場合に、パケットの登録が許可される。
パケットの登録のためには、送信済パケットアドレスレジスタ１４３ｂに格納されているポインタを取り出す。これとともに、新たな送信キュー内に格納されていた最終パケットの先頭データブロックを抽出して、その付属セル領域１３３ａに、送信済パケットアドレスレジスタ１４３ｂからのポインタを格納して、パケット間の連結を行う。
以上説明した連結データ構造を用いた第１の管理方法では、データブロックとともに付属セル領域１３３ａが共有バッファ１３０内に形成され、この付属セル領域１３３ａに後続のデータブロックやパケットの先頭部のポインタが格納される。これにより、パケット内のデータブロック、および送信キュー内のパケットが、容易に連結される。また、受信ポートおよび送信ポートごとに設けられた合計５種類のレジスタを用いて、送信キューの登録処理、および送信キューからの読み出し処理が制御される。このため、安価な装置構成で、共有バッファ１３０に対する書き込みおよび読み出しの処理が効率よく管理される。
〔第２の連結リスト管理例〕
連結リスト構造を用いた第２の管理例では、書き込み／読み出し制御回路１４０に、受信ポートごと、および送信ポートごとにメモリ領域を設け、これらのメモリ領域に、データブロックの書き込みアドレスを指し示すポインタを順次格納することにより、データブロック間の連結を管理する。
図１２は、書き込み／読み出し制御回路１４０が具備するメモリの構成を示す図である。
図１２に示すように、書き込み／読み出し制御回路１４０は、各受信ポートに対応した受信用アドレスメモリ１４７ａ〜１４７ｄと、各送信ポートに対応した送信用アドレスメモリ１４８ａ〜１４８ｄを具備する。
受信用アドレスメモリ１４７ａ〜１４７ｄは、受信したパケットを分割したデータブロックを、共有バッファ１３０に格納する際に、後続のデータブロックを指し示すポインタが順次格納されるメモリである。また、送信用アドレスメモリ１４８ａ〜１４８ｄは、パケットが送信キューに登録される際に、後続のデータブロックを指し示すポインタが順次格納されるメモリである。
これらのメモリはＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）制御により、ポインタの格納および取り出しができるようになっている。また、ＦＩＦＯ制御に加えてＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）制御が可能となっていてもよい。
次に、これらのメモリを使用した書き込み／読み出し制御回路１４０の処理について説明する。なお、以下の図１３および図１４に示すフローチャートの説明では、必要に応じて、ネットワークスイッチ装置１００内の他の要素における処理についての説明も加える。
図１３は、パケットの受信時における書き込み／読み出し制御回路１４０の処理の流れを示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。
［ステップＳ１３０１およびＳ１３０２］これらのステップの処理は、それぞれ図１０に示したステップＳ１００１およびＳ１００２と同じである。すなわち、例えば、送受信インタフェース１１１からデータ転送回路１２０に対して受信要求が通知されると、データ転送回路１２０は、分割されたデータブロックのインタフェース情報を、書き込み／読み出し制御回路１４０に出力する。書き込み／読み出し制御回路１４０は、インタフェース情報を受信した後、ポインタスタック１５０からＰＯＰされたポインタを取得して、このポインタの指し示す共有バッファ１３０内のアドレスを、データブロックの書き込みアドレスとして指定する。これにより、データブロックが共有バッファ１３０に格納される。
［ステップＳ１３０３］取得したポインタを、受信ポートに対応する受信用アドレスメモリ１４７ａにＦＩＦＯ方式で格納する。
［ステップＳ１３０４］転送処理中のデータブロックがパケット内の最終データブロックであるか否かを判断し、最終データブロックでない場合は、ステップＳ１３０１に戻る。そして、以上のステップＳ１３０１〜Ｓ１３０４の処理が繰り返されることにより、１パケット分のデータブロックが、共有バッファ１３０内に格納される。これとともに、格納したデータブロックを指し示すポインタが、受信用アドレスメモリ１４７ａに順次格納され、パケット内のデータブロック間が連結される。
なお、このとき、受信用アドレスメモリ１４７ａに格納されたものと同じポインタが、受信中ポインタカウンタ１７１ａに格納されている。この後、格納したパケットを、例えばネットワーク２２に対応する送信キューに登録する処理が行われる。
［ステップＳ１３０５］宛先の送信ポートを選択する。このとき、受信中ポインタカウンタ１７１ａのカウント数が、宛先に対応する送信キューポインタカウンタ１７３ｂに加算される。
［ステップＳ１３０６］送信キューポインタカウンタ１７３ｂにおいてカウント値が許容値を超えた場合、廃棄制御部１６３から制御信号が出力される。この制御信号が出力された場合はステップＳ１３０９に進み、出力されなかった場合はステップＳ１３０７に進む。
［ステップＳ１３０７］受信用アドレスメモリ１４７ａに格納されていたポインタを、宛先に対応する送信用アドレスメモリ１４８ｂに対して、ＦＩＦＯ方式で格納する。これにより、宛先に対応する送信キュー内でのパケット間の連結が行われる。
［ステップＳ１３０８］受信用アドレスメモリ１４７ａをクリアし、処理を終了する。
［ステップＳ１３０９］他の宛先が指定されているか否かを判定し、指定されている場合はステップＳ１３０５に戻って、新たな送信ポートを選択する。
また、指定されていない場合は、ステップＳ１３０８に進む。このとき、受信中ポインタカウンタ１７１ａに保持されていたポインタが、ポインタスタック１５０に返却される。なお、受信用アドレスメモリ１４７ａ〜１４７ｄにおいてＬＩＦＯ制御が可能である場合は、受信中ポインタカウンタ１７１ａの代わりに、受信用アドレスメモリ１４７ａに格納されていたポインタを、ポインタスタック１５０に返却するようにしてもよい。
次に、図１４は、パケットの送信時における書き込み／読み出し制御回路１４０の処理の流れを示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
［ステップＳ１４０１］例えば、ネットワーク２２に対するパケットの送信が行われる場合、図１１のステップＳ１１０１と同様に、送受信インタフェース１１２からデータ転送回路１２０に対して送信要求が通知され、データ転送回路１２０から、これに対応する送信ポート情報を含むインタフェース情報が、書き込み／読み出し制御回路１４０に出力される。書き込み／読み出し制御回路１４０は、インタフェース情報を受信すると、データブロックの転送開始と判断して、ステップＳ１４０２に進む。
［ステップＳ１４０２］送信ポートに対応する送信用アドレスメモリ１４８ｂに格納されているポインタをＦＩＦＯ方式で取り出し、このポインタに基づいて共有バッファ１３０の読み出しアドレスを指定する。これにより、対応する送信キューの先頭データブロックが読み出され、データ転送回路１２０を通じて送受信インタフェース１１２に転送される。
［ステップＳ１４０３］送信用アドレスメモリ１４８ｂから取り出したポインタを、ポインタ用バス１８０に出力する。出力されたポインタは、対応する送信中ポインタカウンタ１７２ｂに格納されてカウントアップが行われるとともに、対応する送信キューポインタカウンタ１７３ａがカウントダウンされる。
［ステップＳ１４０４］読み出したデータブロックがパケット中の最終のものであるか否かを判定し、最終でない場合はステップＳ１４０１に戻る。以後、１パケット分のデータブロックが読み出されるまで、ステップＳ１４０１〜Ｓ１４０４の処理が繰り返され、処理が終了される。
なお、以上の処理が終了した時点では、図１１の場合と同様に、読み出された１パケット分のデータブロックに使用されていたポインタが、すべて送信中ポインタカウンタ１７２ｂに格納され、このポインタ数が保持される。また、このポインタ数分だけ送信キューポインタカウンタ１７３ｂのカウント数が減算されている。
また、この後、インタフェース情報に他の宛先の送信ポートが含まれている場合には、他の送信ポートを選択して、この送信ポートに対応する送信キューに、パケットを連結する。送信キューへの連結の可不可については、対応する送信キューポインタカウンタのカウント数、および対応する宛先ポートに対する廃棄信号のアサートの有無に基づいて判定される。
パケットの登録のためには、例えば、送信中ポインタカウンタ１７２ｂに格納されていたポインタを、ポインタ用バス１８０を通じて受け取り、新たな送信キューに対応する送信用アドレスレジスタに対して格納する。また、送信用アドレスメモリ１４８ａ〜１４８ｂにおいてＬＩＦＯ制御が可能である場合は、送信中ポインタカウンタ１７２ｂの代わりに、送信用アドレスメモリ１４８ｂからＬＩＦＯ方式でポインタを取り出して、宛先の送信用アドレスレジスタに格納してもよい。このような処理により、新たな送信キューに対してパケットが容易に連結される。
以上説明した連結データ構造を用いた第２の管理例では、データブロックの書き込み時に、使用されているポインタがメモリに順次格納される。そして、メモリに格納されたポインタを順に取り出すことにより、読み出しアドレスを指定する。このような処理により、パケット内のデータブロック間の連結、および送信キュー内のパケット間の連結が効率よく管理される。
ここで、以上の第２の連結リスト管理例では、第１の管理例と比較して、使用されているポインタを格納する処理が非常に単純になる。その反面、第２の管理例では、共有バッファ１３０に格納するデータブロック数分のポインタを格納可能なメモリが必要となり、第１の管理例で使用されたレジスタ群と比較して、大容量のメモリを用意する必要がある。このため、部品コストが上昇し、メモリの設置面積が大きくなる。また、ＦＩＦＯ制御だけでなく、ＬＩＦＯ制御を可能とした場合、メモリのコストはさらに上昇する。
以上説明したように、本発明のネットワーク装置では、パケットの転送先のネットワークごとに一定数のデータブロックを登録可能な送信キューが形成され、バッファに書き込まれたデータブロックが、宛先に対応する送信キューにパケット単位で順次登録されるため、データブロックの書き込みに１つのバッファが用いられながらも、ブロッキングの発生が防止される。また、受信したパケットは１つ以上の固定長のデータブロックに分割されてバッファに書き込まれるとともに、各パケット内のデータブロック間の連結と、各送信キュー内のパケット間の連結とが、各データブロックのバッファにおける書き込み位置に基づく連結リスト構造として管理されるため、バッファの使用効率を高めることができる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【図１】
2004066571.tif 000003
【図２】
2004066571.tif 000004
【図３】
2004066571.tif 000005
【図４】
2004066571.tif 000006
【図５】
2004066571.tif 000007
【図６】
2004066571.tif 000008
【図７】
2004066571.tif 000009
【図８】
2004066571.tif 000010
【図９】
2004066571.tif 000011
【図１０】
2004066571.tif 000012
【図１１】
2004066571.tif 000013
【図１２】
2004066571.tif 000014
【図１３】
2004066571.tif 000015
【図１４】
2004066571.tif 000016
【図１５】
2004066571.tif 000017
【図１６】
2004066571.tif 000018
【国際調査報告】
2004066571.tif 000019
2004066571.tif 000020
2004066571.tif 000021
2004066571.tif 000022