以下に添付図面を参照して、このデータ処理装置及びデータ処理方法の好適な実施の形態を詳細に説明する。以下の各実施例の説明においては、同様の構成要素には同一の符号を付して、重複する説明を省略する。
・データ処理装置の一例
図1は、実施の形態にかかるデータ処理装置の一例を示す図である。図2は、図1に示すデータ処理装置における信号の流れを示す図である。図1及び図2に示すように、データ処理装置は、監視バッファ101、監視部102、アドレス払出部103、返却アドレス受付部104及び共有バッファ105を有する。
共有バッファ105はアドレス払出部103、データ入力端子106、データ出力端子107及び読出アドレス入力端子108に接続されている。データ入力端子106は、図示しない複数のポートから入力される書き込み対象のデータ(以下、書込データと称する)を受け取る。データ入力端子106から入力される書込データは、アドレス払出部103から払い出される書込アドレスによって指定される共有バッファ105の領域に書き込まれる。つまり、共有バッファ105は、図示しない複数のポートから入力されるデータを保持する。
読出アドレス入力端子108は、共有バッファ105に対する読出アドレスを、例えば読出アドレスを保持する図示しないキューから受け取る。データ出力端子107からは、読出アドレス入力端子108に入力される読出アドレスによって指定される共有バッファ105の領域に保持されている読み出し対象のデータ(以下、読出データと称する)が出力される。
アドレス払出部103は返却アドレス受付部104に接続されている。アドレス払出部103は、共有バッファ105に書込データを書き込むときに空きアドレスの中から共有バッファ105に対する書込アドレスを払い出す。すなわち、アドレス払出部103は共有バッファ105に対する書込アドレスを出力する。アドレス払出部103は、返却アドレス受付部104から渡される空きアドレスを保持する。
返却アドレス受付部104は読出アドレス入力端子108に接続されている。返却アドレス受付部104は、共有バッファ105からデータを読み出すときに、読み出されるデータに対する読出アドレスの返却を受け付ける。返却アドレス受付部104は、返却を受け付ける読出アドレスを空きアドレスとして管理し、アドレス払出部103へ渡す。
監視バッファ101は監視部102に接続されている。監視バッファ101は、共有バッファ105に対するアドレスの使用状態を示す情報を保持する。データ処理装置の電源がオンにされるか、またはデータ処理装置がリセットされると、監視バッファ101は初期状態となる。監視バッファ101の初期状態においては、共有バッファ105に対するアドレスの使用状態を示す情報は、全アドレスに対して未使用状態となる。
監視部102はアドレス払出部103に接続されている。監視部102は、アドレス払出部103による書込アドレスの払い出しを監視する。監視部102は、アドレス払出部103によって書込アドレスが払い出されるときに、払い出し対象の書込アドレスに対応する監視バッファ101の情報を未使用状態から使用状態に変更する。監視部102は、アドレス払出部103によって書込アドレスが払い出されるときに、払い出し対象の書込アドレスに対応する監視バッファ101の情報が使用状態である場合、共有バッファ105に対するアドレスが重複すると判定する。
監視部102は読出アドレス入力端子108に接続されている。監視部102は、返却アドレス受付部104による読出アドレスの返却を監視する。返却アドレス受付部104によって読出アドレスの返却が受け付けられるときに、返却対象の読出アドレスに対応する監視バッファ101の情報を使用状態から未使用状態に変更する。監視部102は、返却アドレス受付部104によって読出アドレスの返却が受け付けられるときに、返却対象の読出アドレスに対応する監視バッファ101の情報が未使用状態である場合、共有バッファ105に対するアドレスが重複すると判定してもよい。
図1に示すデータ処理装置において、監視バッファ101、監視部102、アドレス払出部103、返却アドレス受付部104及び共有バッファ105がそれぞれハードウェアによって実現されていてもよい。あるいは、監視部102、アドレス払出部103及び返却アドレス受付部104はソフトウェアの処理によって実現されてもよい。監視部102、アドレス払出部103及び返却アドレス受付部104がソフトウェアの処理によって実現される場合のハードウェア構成の一例について説明する。
・ハードウェア構成の一例
図3は、実施の形態にかかるデータ処理装置のハードウェア構成の一例を示す図である。図3に示すように、データ処理装置は例えばプロセッサ201、インタフェース202、不揮発性メモリ203及び揮発性メモリ204を有する。プロセッサ201、インタフェース202、不揮発性メモリ203及び揮発性メモリ204はバス205に接続されていてもよい。
プロセッサ201は、後述するデータ処理方法を実現するプログラムを処理する。それによって、図1に示すデータ処理装置における監視部102、アドレス払出部103及び返却アドレス受付部104が実現される。プロセッサ201の一例として、例えばCPU(Central Processing Unit、中央処理装置)、DSP(Digital Signal Processor、デジタルシグナルプロセッサ)、ASIC(Application Specific Integrated Circuit、エーシック)、またはFPGA(Field Programmable Gate Array、フィールドプログラマブルゲートアレイ)などのプログラマブルロジックデバイスが挙げられる。
不揮発性メモリ203は、ブートプログラムや後述するデータ処理方法を実現するプログラムを記憶している。プロセッサ201がプログラマブルロジックデバイスである場合には、不揮発性メモリ203はプログラマブルロジックデバイスの回路情報を記憶していてもよい。不揮発性メモリ203の一例として、マスクROM(マスクロム)、EEPROM(Electrically Erasable Programmable Read Only Memory、イーイーピーロム)またはフラッシュメモリなどのROM(Read Only Memory、ロム)が挙げられる。
揮発性メモリ204はプロセッサ201の作業領域として用いられる。揮発性メモリ204は、不揮発性メモリ203から読み出されたプログラムや回路情報を保持する。監視バッファ101は揮発性メモリ204によって実現されてもよい。共有バッファ105は揮発性メモリ204によって実現されてもよい。揮発性メモリ204の一例としてDRAM(Dynamic Random Access Memory、ディーラム)やSRAM(Static Random Access Memory、エスラム)などのRAM(Random Access Memory、ラム)が挙げられる。
インタフェース202は、書込データの入力及び読出データの出力を司る。
・データ処理方法の一例
データ処理方法は、図1に示すデータ処理装置において実施されてもよい。本実施例では、データ処理方法が、図1に示すデータ処理装置において実施されるとして説明する。
図4は、実施の形態にかかるデータ処理方法におけるデータ書き込み時の処理の一例を示す図である。図4に示すように、データ入力端子106から入力されるデータを共有バッファ105に書き込むときに、アドレス払出部103は空きアドレスの中から共有バッファ105に対する書込アドレスを払い出す。監視部102は、アドレス払出部103から払い出される書込アドレスを取得する(ステップS1)。
次いで、監視部102は、ステップS1で取得する書込アドレスの使用状態を示す情報を監視バッファ101から取得する(ステップS2)。監視部102は、ステップS2で取得する書込アドレスの使用状態を示す情報が未使用状態であるか否かを判断する(ステップS3)。
書込アドレスの使用状態を示す情報が未使用状態である場合(ステップS3:Yes)、監視部102は、書込アドレスの使用状態を示す情報を使用状態に変更し(ステップS4)、一連のデータ書き込み時の処理を終了する。書込アドレスの使用状態を示す情報が未使用状態である場合(ステップS3:Yes)、書込アドレスによって指定される共有バッファ105の領域に、データ入力端子106から入力されるデータを書き込むことができる。
一方、書込アドレスの使用状態を示す情報が未使用状態でない場合(ステップS3:No)、ステップS1で取得する書込アドレスによって指定される共有バッファ105の領域には、未だ読み出されていないデータ、すなわち有効なデータが保持されていることになる。そのため、監視部102は、書込アドレスが重複すると判定し(ステップS5)、一連のデータ書き込み時の処理を終了する。
書込アドレスが重複するという判定の場合、アドレス払出部103は、払い出す書込アドレスを破棄してもよい。そうすることによって、重複すると判定される書込アドレスによって指定される共有バッファ105の領域に対してデータが上書きされないため、共有バッファ105から読み出されていないデータが上書きされるのを防ぐことができる。つまり、データの欠落を防ぐことができる。
図5は、実施の形態にかかるデータ処理方法におけるデータ読み出し時の処理の一例を示す図である。図5に示すように、読出アドレス入力端子108から入力される読出アドレスによって指定される共有バッファ105の領域に保持されているデータを読み出すときに、監視部102は、読出アドレス入力端子108から入力される読出アドレスを取得する(ステップS11)。
次いで、監視部102は、ステップS11で取得する読出アドレスの使用状態を示す情報を監視バッファ101から取得する(ステップS12)。監視部102は、ステップS12で取得する読出アドレスの使用状態を示す情報が使用状態であるか否かを判断する(ステップS13)。
読出アドレスの使用状態を示す情報が使用状態である場合(ステップS13:Yes)、監視部102は、読出アドレスの使用状態を示す情報を未使用状態に変更し(ステップS14)、一連のデータ読み出し時の処理を終了する。読出アドレスの使用状態を示す情報が使用状態である場合(ステップS13:Yes)、読出アドレスによって指定される共有バッファ105の領域からデータを読み出し、データ出力端子107へ出力することができる。
一方、読出アドレスの使用状態を示す情報が使用状態でない場合(ステップS13:No)、読出アドレスによって指定される共有バッファ105の領域には、読み出されていないデータ、すなわち有効なデータが保持されていないことになる。
そのため、監視部102は、読出アドレスが重複すると判定し(ステップS15)、一連のデータ読み出し時の処理を終了する。読出アドレスが重複するという判定の場合、返却アドレス受付部104は、重複すると判定される読出アドレスの返却を受け付けなくてもよい。そうすることによって、共有バッファ105に対するアドレスの重複状態が継続するのを防ぐことができる。
また、読出アドレスが重複するという判定の場合、監視部102は、重複すると判定される読出アドレスによって指定される共有バッファ105の領域から読み出されるデータを破棄してもよい。そうすることによって、重複すると判定される読出アドレスによって指定される共有バッファ105の領域から読み出されるデータが、そのデータの本来の宛先とは異なる宛先の情報に基づいて転送されるのを防ぐことができる。つまり、データの誤配を防ぐことができる。
図1に示すデータ処理装置または図4〜図5に示すデータ処理方法によれば、共有バッファ105にデータを書き込む際に書込アドレスが重複しているか否かを検出し、重複する場合に書込アドレスを破棄することによって、データの欠落を防ぐことができる。また、共有バッファ105からデータを読み出す際に読出アドレスが重複しているか否かを検出し、重複する場合に読出アドレスの返却を受け付けないことによって、アドレスの重複状態が継続するのを防ぐことができる。さらに、共有バッファ105からデータを読み出す際に読出アドレスが重複する場合、共有バッファ105から読み出されるデータを破棄することによって、データの誤配を防ぐことができる。
図1に示すデータ処理装置は、例えばL2スイッチやL3スイッチにおいてデータ転送処理を行うスイッチカードに適用できる。以下に、一例として、図1にデータ処理装置をL2スイッチにおけるスイッチカードに適用する場合について説明する。
・L2スイッチの一例
図6は、L2スイッチの一例を示す図である。図6に示すように、L2スイッチSWは複数、例えば4個のラインインタフェースユニットカードC#0〜C#3及びスイッチカードSWCを有する。各ラインインタフェースユニットカードC#0〜C#3及びスイッチカードSWCは、それぞれ独立したプリント基板ユニットで構成されていてもよい。各プリント基板ユニットはバックボードなどの基板上の配線によって相互に接続されていてもよい。以下の説明においては、ラインインタフェースユニットカードをLIUカードと表記することがある。LIUカードの数は3個以下でもよいし、5個以上でもよい。
LIUカードC#0〜C#3は、伝送路から入力されるL2フレームデータをスイッチカードSWCへ出力する。LIUカードC#0〜C#3は、スイッチカードSWCから入力されるL2フレームデータを伝送路へ出力する。LIUカードC#0〜C#3は例えば4個のポートP0〜P3を有する。LIUカードC#0〜C#3におけるポートP0〜P3は例えば図示しない伝送路に接続されてもよい。各LIUカードC#0〜C#3においてポートの数は3個以下でもよいし、5個以上でもよい。
LIUカードC#0〜C#3はそれぞれL2フレーム終端/生成部TG#0〜TG#3を有する。L2フレーム終端/生成部TG#0〜TG#3はそれぞれLIUカードC#0〜C#3におけるポートP0〜P3に接続されている。L2フレーム終端/生成部TG#0〜TG#3は、それぞれLIUカードC#0〜C#3におけるポートP0〜P3から入力されるL2フレームデータを、当該L2フレームデータに転送先のカード情報及びポート情報を付加してスイッチカードSWCへ出力する。
L2フレーム終端/生成部TG#0〜TG#3はそれぞれフォワーディングデータベースFDB(Forwarding Data Base)を有する。フォワーディングデータベースFDBには、LIUカードC#0〜C#3におけるポートP0〜P3から入力されるL2フレームデータ中の宛先アドレス(DA:Destination Address)と転送先のカード情報及びポート情報との対応関係が格納されている。L2フレーム終端/生成部TG#0〜TG#3は、L2フレームデータ中の宛先アドレスを用いてそれぞれのフォワーディングデータベースFDBを検索することによって、転送先のカード情報及びポート情報を得る。
L2フレームデータ中の宛先アドレスがフォワーディングデータベースFDBに登録されていない場合がある。その場合には、L2フレーム終端/生成部TG#0〜TG#3は、全てのLIUカードC#0〜C#3へL2フレームデータを転送(Flooding)するように、L2フレームデータにカード情報及びポート情報を付加する。このように、LIUカードC#0〜C#3とスイッチカードSWCとの間のインタフェースにおいて、装置内部転送を目的としてカード情報及びポート情報がL2フレームデータに付加される。
L2フレーム終端/生成部TG#0〜TG#3は、スイッチカードSWCから入力されるL2フレームデータを、当該L2フレームデータから転送先のカード情報及びポート情報を削除して、それぞれLIUカードC#0〜C#3における転送先のポート情報に対応するポートP0〜P3へ出力する。
スイッチカードSWCは、LIUカードC#0〜C#3から入力されるL2フレームデータを、転送先のカード情報に対応するLIUカードC#0〜C#3へ出力する。スイッチカードSWCは共有バッファSB及びスイッチ部SPを有する。共有バッファSBは、LIUカードC#0〜C#3からスイッチ部SPに入力されるL2フレームデータを保持する。共有バッファSBは、L2フレームデータを格納する複数のページを有している。直前にL2フレームデータが読み出されたページには新たなL2フレームデータが最後に書き込まれることによって、各ページが順番に使用されるようになっている。
スイッチ部SPはLIUカードの数に対応する数のポートを有する。図6に示す例では、スイッチカードSWC例えば4個のポートP0〜P3を有し、スイッチ部SPのポートP0〜P3はそれぞれLIUカードC#0〜C#3に接続されている。スイッチ部SPにおいてポートの数は3個以下でもよいし、5個以上でもよい。
スイッチ部SPは、スイッチ部SPにおけるポートP0〜P3から、転送先のカード情報及びポート情報付きのL2フレームデータを受け取る。スイッチ部SPは、L2フレームデータに付加されている転送先のカード情報に基づいて当該L2フレームデータの転送先を、転送先のカード情報に対応するLIUカードC#0〜C#3へ切り替える。そして、スイッチ部SPは、当該L2フレームデータを共有バッファSBから読み出して、転送先のカード情報に対応するLIUカードC#0〜C#3へ出力する。
図6に示すL2スイッチSWにおいて、L2フレームデータは以下のようにして所望の転送先へ転送される。LIUカードC#0〜C#3におけるポートP0〜P3から入力されるL2フレームデータは、それぞれL2フレーム終端/生成部TG#0〜TG#3によって転送先のカード情報及びポート情報が付加されて、スイッチカードSWCへ転送される。スイッチカードSWCに入力されるL2フレームデータは、一旦、共有バッファSBに保持され、スイッチ部SPによって共有バッファSBから読み出されて転送先のカード情報に対応するLIUカードC#0〜C#3へ転送される。
スイッチカードSWCからLIUカードC#0〜C#3に入力されるL2フレームデータは、それぞれL2フレーム終端/生成部TG#0〜TG#3によって転送先のポート情報に対応するポートP0〜P3から出力される。その際、L2フレーム終端/生成部TG#0〜TG#3によってL2フレームデータから転送先のカード情報及びポート情報が削除される。
・スイッチカードの一例
図7は、実施の形態にかかるスイッチカードの一例を示す図である。図7に示すように、スイッチカードSWCにおいてスイッチ部SPはフレーム多重部1、書込アドレスFifo(WAF:Write Address Fifo)5、WAF読出制御部2、WAF書込制御部11、WAF監視バッファ15及びWAF監視部16を有する。
書込アドレスFifo5はWAF読出制御部2及びWAF書込制御部11に接続されている。書込アドレスFifo5は、共有バッファSBの空き領域に対応するアドレスを格納する。以下の説明においては、共有バッファSBの空き領域に対応するアドレスを空きアドレスと称することがある。
書込アドレスFifo5は、WAF読出制御部2により指定される巡回アドレスに対応する書込アドレスFifo5の記憶領域から、共有バッファSBの空きアドレスをWAF読出制御部2へ払い出す。書込アドレスFifo5は、WAF書込制御部11により指定される巡回アドレスに対応する書込アドレスFifo5の記憶領域に、WAF書込制御部11から与えられる共有バッファSBの空きアドレスを格納する。
フレーム多重部1は、図6に示すスイッチ部SPにおける各ポートP0〜P3に接続されている。フレーム多重部1は、図6に示すスイッチ部SPにおける各ポートP0〜P3から入力されるL2フレームデータを多重化する。
WAF読出制御部2はフレーム多重部1、WAF監視部16及び共有バッファSBに接続されている。WAF読出制御部2は、フレーム多重部1からL2フレームデータを受け取ると、書込アドレスFifo5に対して巡回アドレスを指定する。書込アドレスFifo5のアドレスの範囲が例えば“0”〜“1023”であるとする。この場合、WAF読出制御部2は、書込アドレスFifo5に対して最初の値である“0”から順番に“0”、“1”、“2”、・・・と指定していき、最後の値である“1023”に達すると最初に戻って再び“0”から順番に指定していく。
WAF読出制御部2は、書込アドレスFifo5から、WAF読出制御部2が指定する巡回アドレスに対応する共有バッファSBの空きアドレスを取得する。WAF読出制御部2は、WAF監視部16から重複なしのW側重複判定通知を受け取ると、書込アドレスFifo5から取得する空きアドレスを共有バッファSBに対する書込アドレスとして払い出す。
WAF読出制御部2は、WAF監視部16から重複ありのW側重複判定通知を受け取ると、書込アドレスFifo5から取得する空きアドレスを破棄する。WAF読出制御部2及び書込アドレスFifo5はアドレス払出部の一例である。
WAF書込制御部11は後述する読出制御部10及びWAF監視部16に接続されている。WAF書込制御部11は書込アドレスFifo5に対して、WAF読出制御部2と同様に巡回アドレスを指定する。
WAF書込制御部11は、共有バッファSBからL2フレームデータを読み出す際に用いられる読出アドレスを、読出制御部10から返却アドレスとして取得する。WAF書込制御部11は、WAF監視部16から重複なしのR側重複判定通知を受け取ると、WAF書込制御部11により指定される巡回アドレスに対応する書込アドレスFifo5の記憶領域に、読出制御部10から取得する返却アドレスを共有バッファSBの空きアドレスとして格納する。
WAF書込制御部11は、WAF監視部16から重複ありのR側重複判定通知を受け取ると、読出制御部10から取得する返却アドレスを破棄する。WAF書込制御部11は返却アドレス受付部の一例である。
WAF監視バッファ15はWAF監視部16に接続されている。WAF監視バッファ15は、共有バッファSBに対するアドレスの使用状態を示す情報を保持する。共有バッファSBに対するアドレスの使用状態を示す情報は、例えばアドレスが未使用状態であるときに“0”となり、アドレスが使用状態であるときに“1”となるフラグであってもよい。以下の説明においては、アドレスの使用状態を示す情報をフラグとし、このフラグを監視フラグと称することがある。
WAF監視バッファ15のアドレスの値は共有バッファSBのアドレスの値と同じである。例えばWAF監視バッファ15の“0”のアドレスに対応する記憶領域に保持されている監視フラグの値が“1”である場合、共有バッファSBの“0”のアドレスは使用状態であり、空きアドレスではない。従って、共有バッファSBの“0”のアドレスに対応する記憶領域には有効なL2フレームデータが格納されていることになる。
それに対して、例えばWAF監視バッファ15の“1”のアドレスに対応する記憶領域に保持されている監視フラグの値が“0”である場合、共有バッファSBの“1”のアドレスは未使用状態、すなわち空きアドレスである。従って、共有バッファSBの“1”のアドレスに対応する記憶領域には有効なL2フレームデータが格納されていないことになる。WAF監視バッファ15は監視バッファの一例である。
WAF監視部16は書込アドレスFifo5、WAF監視バッファ15及び後述する読出制御部10に接続されている。WAF監視部16は、書込アドレスFifo5からWAF読出制御部2へ払い出される共有バッファSBの空きアドレスを取得し、この空きアドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域から監視フラグの値を読み出す。
WAF監視バッファ15から読み出される監視フラグの値が“0”である場合、監視フラグは、書込アドレスFifo5からWAF読出制御部2へ払い出される空きアドレスが未使用状態であることを示している。従って、WAF監視部16は、共有バッファSBのアドレスが重複しないと判定する。
重複なしの判定の場合、WAF監視部16は、書込アドレスFifo5から払い出される空きアドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域に保持されている監視フラグの値を“1”に変更する。それによって、書込アドレスFifo5から空きアドレスとして払い出される共有バッファSBのアドレスは空きアドレスではなく、使用中の状態となる。また、WAF監視部16は、WAF読出制御部2へ重複なしのW側重複判定通知を送る。
WAF監視バッファ15から読み出される監視フラグの値が“1”である場合、監視フラグは、書込アドレスFifo5からWAF読出制御部2へ払い出される空きアドレスが使用状態であることを示している。従って、WAF監視部16は、共有バッファSBのアドレスが重複すると判定する。
重複ありの判定の場合、WAF監視部16は、書込アドレスFifo5から払い出される空きアドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域に保持されている監視フラグの値を変更せずに“1”のままとする。つまり、書込アドレスFifo5から空きアドレスとして払い出される共有バッファSBのアドレスは使用中の状態のままとなる。また、WAF監視部16は、WAF読出制御部2へ重複ありのW側重複判定通知を送る。
WAF監視部16は読出制御部10から返却アドレスを取得し、この返却アドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域から監視フラグの値を読み出す。
WAF監視バッファ15から読み出される監視フラグの値が“1”である場合、監視フラグは、返却アドレスが使用状態であることを示している。つまり、返却アドレスに対応する共有バッファSBの記憶領域には、読み出し可能なL2フレームデータが格納されていることになる。従って、WAF監視部16は、共有バッファSBから読み出し可能なL2フレームデータが読み出される際に用いられる読出アドレス、すなわち返却アドレスは重複しないと判定する。
重複なしの判定の場合、WAF監視部16は、返却アドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域に保持されている監視フラグの値を“0”に変更する。それによって、返却アドレスに対応する共有バッファSBのアドレスは空きアドレスとなり、未使用状態となる。また、WAF監視部16は、WAF書込制御部11及び後述するデータ廃棄判定部13へ重複なしのR側重複判定通知を送る。
WAF監視バッファ15から読み出される監視フラグの値が“0”である場合、監視フラグは、返却アドレスが未使用状態であることを示している。つまり、返却アドレスに対応する共有バッファSBの記憶領域には一度もL2フレームデータが書き込まれていないか、返却アドレスが既に返却済みであることになる。従って、WAF監視部16は、返却アドレスが重複すると判定する。
重複ありの判定の場合、WAF監視部16は、返却アドレスの値と同じ値のアドレスに対応するWAF監視バッファ15の記憶領域に保持されている監視フラグの値を変更せずに“0”のままとする。つまり、返却アドレスに対応する共有バッファSBのアドレスは未使用状態のままとなる。また、WAF監視部16は、WAF書込制御部11及び後述するデータ廃棄判定部13へ重複ありのR側重複判定通知を送る。WAF監視部16は監視部の一例である。
また、スイッチ部SPはパリティ生成部3、パリティチェック部12、データ廃棄判定部13及びフレーム分離部14を有する。パリティ生成部3はフレーム多重部1に接続されている。パリティ生成部3は、フレーム多重部1から出力されるL2フレームデータに対して故障検出用にパリティ演算を行い、演算結果であるパリティビットを共有バッファSBへ出力する。
共有バッファSBはフレーム多重部1、パリティ生成部3、WAF読出制御部2及び後述する読出制御部10に接続されている。共有バッファSBは、WAF読出制御部2から払い出される書込アドレスに対応する記憶領域に、フレーム多重部1から出力されるL2フレームデータとともにパリティ生成部3から出力されるパリティビットを格納する。共有バッファSBは、読出制御部10によって読出アドレスが与えられると、この読出アドレスに対応する記憶領域からL2フレームデータ及びパリティビットを出力する。
パリティチェック部12は共有バッファSBに接続されている。パリティチェック部12は、共有バッファSBから出力されるL2フレームデータに対してパリティ演算を行い、演算結果であるパリティビットの値と、パリティ生成部3から出力されるパリティビットの値とを比較する。比較の結果、両パリティビットの値が一致する場合にはパリティチェック部12はデータ廃棄判定部13へエラーなしを通知し、両パリティビットの値が一致しない場合にはエラーありを通知する。
データ廃棄判定部13は共有バッファSB、パリティチェック部12及びWAF監視部16に接続されている。データ廃棄判定部13は、パリティチェック部12からエラーなしの通知を受け取るとともに、WAF監視部16から重複なしのR側重複判定通知を受け取ると、共有バッファSBから出力されるL2フレームデータをフレーム分離部14へ出力する。データ廃棄判定部13は、パリティチェック部12からエラーありの通知を受け取るか、またはWAF監視部16から重複ありのR側重複判定通知を受け取ると、共有バッファSBから読み出されるL2フレームデータを廃棄する。
フレーム分離部14はデータ廃棄判定部13及び後述する読出制御部10に接続されている。フレーム分離部14は、データ廃棄判定部13からL2フレームデータを受け取るとともに、読出制御部10から出力ポート情報を受け取る。フレーム分離部14は、フレーム多重部1によって多重化されているL2フレームデータを個々のL2フレームデータに分離し、個々のL2フレームデータを出力ポート情報によって指定されるポートP0〜P3からそれぞれ出力する。
またスイッチ部SPは宛先情報・優先制御情報抽出部4、書込制御部6、パリティ生成部7_1〜7_4、読出キュー8_1〜8_4、パリティチェック部9_1〜9_4及び読出制御部10を有する。図7には4個の読出キュー8_1〜8_4が示されているが、例えば宛先α−高優先の読出キュー8_1及び宛先α−低優先の読出キュー8_2がLIUカードC#1に対応し、宛先β−高優先の読出キュー8_3及び宛先β−低優先の読出キュー8−4がLIUカードC#2に対応している。従って、図6に示す例のように4個のLIUカードC#0〜C#3が存在する場合には、8個の読出キューが存在することになるが、図7には便宜上4個の読出キューが示されている。
宛先情報・優先制御情報抽出部4はフレーム多重部1に接続されている。宛先情報・優先制御情報抽出部4は、フレーム多重部1から出力されるL2フレームデータに付加されている宛先情報及び優先制御情報を抽出し、宛先情報及び優先制御情報を書込制御部6へ転送する。
書込制御部6はWAF読出制御部2、宛先情報・優先制御情報抽出部4及び読出制御部10に接続されている。書込制御部6は、WAF読出制御部2から払い出される共有バッファSBに対する書込アドレスを、宛先情報・優先制御情報抽出部4から受け取る宛先情報及び優先制御情報に対応する読出キュー8_1〜8_4へ、当該読出キュー8_1〜8_4に対する巡回アドレスとともに転送する。また、書込制御部6は、転送先の読出キュー8_1〜8_4に対する書込フラグWFLGを読出制御部10へ転送する。
パリティ生成部7_1〜7_4は書込制御部6に接続されている。パリティ生成部7_1〜7_4は、書込制御部6から出力される書込アドレスに対して故障検出用にパリティ演算を行い、演算結果であるパリティビットを対応する読出キュー8_1〜8_4へ出力する。
読出キュー8_1〜8_4は書込制御部6、パリティ生成部7_1〜7_4及び読出制御部10に接続されている。読出キュー8_1〜8_4は、書込制御部6から出力される巡回アドレスに対応する記憶領域に、書込制御部6から出力される書込アドレスを、対応するパリティ生成部7_1〜7_4から出力されるパリティビットとともに格納する。読出キュー8_1〜8_4は、読出制御部10から巡回アドレスが与えられると、この巡回アドレスに対応する記憶領域から書込アドレス及びパリティビットを出力する。
パリティチェック部9_1〜9_4は、対応する読出キュー8_1〜8_4及び読出制御部10に接続されている。パリティチェック部9_1〜9_4は、対応する読出キュー8_1〜8_4から出力される書込アドレスに対してパリティ演算を行い、演算結果であるパリティビットの値と、対応するパリティ生成部7_1〜7_4から出力されるパリティビットの値とを比較する。比較の結果、両パリティビットの値が一致する場合にはパリティチェック部9_1〜9_4は読出制御部10へエラーなしを通知し、両パリティビットの値が一致しない場合にはエラーありを通知する。
読出制御部10は、読出キュー8_1〜8_4ごとに図示しない容量カウンタを有し、書込制御部6から書込フラグWFLGを受け取るたびに対応する容量カウンタをカウントアップする。読出制御部10は、各容量カウンタによって各読出キュー8_1〜8_4に格納されている書込アドレスの容量を監視する。共有バッファSBからL2フレームデータが読み出される際に、読出制御部10は、L2フレームデータが共有バッファSB内に蓄積されているか否かを各容量カウンタの値によって判断する。
読出制御部10は、容量カウンタの値が0でない場合には、読出キュー8_1〜8_4の優先制御及び例えばラウンドロビンなどの公平性制御を行い、その結果選択される読出キュー8_1〜8_4に対して巡回アドレスを指定して書込アドレスを読み出す。読出制御部10は、読出キュー8_1〜8_4から読み出される書込アドレスに対してパリティチェック部9_1〜9_4からエラーありが通知されると、その書込アドレスを破棄し、共有バッファSBへ転送しない。この場合、共有バッファSBに読出アドレスが与えられないため、共有バッファSBからL2フレームデータが読み出されることはない。
読出制御部10は、パリティチェック部9_1〜9_4からエラーなしが通知されると、読出キュー8_1〜8_4から読み出される書込アドレスを共有バッファSBに対する読出アドレスとして共有バッファSBへ転送するとともに、返却アドレスとしてWAF書込制御部11へ転送する。また、読出制御部10は、選択される読出キュー8_1〜8_4の情報を出力ポート情報としてフレーム分離部14へ転送する。例えば宛先αがLIUカードC#1に対応するのであれば、出力ポート情報として、LIUカードC#1への出力に対応するスイッチ部SPのポートP1を示す情報P1がフレーム分離部14へ転送されることになる。
図7に示すスイッチ部SPにおいて、WAF監視バッファ15、WAF監視部16、WAF読出制御部2、WAF書込制御部11、書込アドレスFifo5及び共有バッファSBがそれぞれハードウェアによって実現されていてもよい。あるいは、WAF監視部16、WAF読出制御部2及びWAF書込制御部11はソフトウェアの処理によって実現されてもよい。WAF監視部16、WAF読出制御部2及びWAF書込制御部11がソフトウェアの処理によって実現される場合のハードウェア構成は、例えば図3に示す構成と同様であってもよい。WAF監視バッファ15、共有バッファSBまたは書込アドレスFifo5は例えばRAMなどの揮発性メモリによって実現されてもよい。
また、フレーム多重部1、パリティ生成部3、パリティチェック部12、データ廃棄判定部13及びフレーム分離部14がそれぞれハードウェアによって実現されていてもよい。また、宛先情報・優先制御情報抽出部4、書込制御部6、パリティ生成部7_1〜7_4、読出キュー8_1〜8_4、パリティチェック部9_1〜9_4及び読出制御部10がそれぞれハードウェアによって実現されていてもよい。
あるいは、フレーム多重部1、パリティ生成部3、パリティチェック部12、データ廃棄判定部13、フレーム分離部14、宛先情報・優先制御情報抽出部4、書込制御部6、パリティ生成部7_1〜7_4、パリティチェック部9_1〜9_4及び読出制御部10はソフトウェアの処理によって実現されてもよい。これらの各部1,3,4,6,7_1〜7_4,9_1〜9_4,10,12〜14がソフトウェアの処理によって実現される場合のハードウェア構成は、例えば図3に示す構成と同様であってもよい。読出キュー8_1〜8_4は例えばRAMなどの揮発性メモリによって実現されてもよい。
・WAF監視バッファの初期化動作の一例
図8は、WAF監視バッファの初期化動作の一例を示す図である。スイッチカードSWC、もしくはスイッチカードSWC及びLIUカードC#0〜C#3を有する装置の電源が投入されるか、またはリセット解除によって当該装置の立上げが開始されると、WAF監視バッファ15の初期化が始まる。
図8に示すように、WAF監視バッファ15の初期化が始まると、WAF監視部16は、まず、WAF監視バッファ15にデータを書き込むための書込アドレスを0に設定する(ステップS21)。次いで、WAF監視部16は、書込アドレスに対応するWAF監視バッファ15の記憶領域に監視フラグの値として“0”を書き込む(ステップS22)。
次いで、WAF監視部16は、WAF監視バッファ15に対する現在の書込アドレスがWAF監視バッファ15に対するアドレスの最大アドレスであるか否かを判断する(ステップS23)。WAF監視バッファ15に対する現在の書込アドレスがWAF監視バッファ15に対する最大のアドレスでない場合(ステップS23:No)、WAF監視部16は、WAF監視バッファ15に対する現在の書込アドレスに1を加算して新たに現在の書込アドレスとする。つまり、WAF監視バッファ15に対する書込アドレスがインクリメントされる(ステップS24)。
そして、ステップS22に戻り、監視フラグの値を“0”にする動作が、WAF監視バッファ15に対する最大のアドレスに達するまで繰り返される(ステップS22〜S24)。WAF監視バッファ15に対する現在の書込アドレスがWAF監視バッファ15に対する最大のアドレスに達すると(ステップS23:Yes)、WAF監視バッファ15に格納される全ての監視フラグの値が“0”になるため、一連の初期化動作を終了する。全ての監視フラグの値が“0”であることは、共有バッファSB内のアドレス空間が未使用状態であることを示す。
・共有バッファへのデータ書込動作の一例
図9は、共有バッファへのデータ書込動作の一例を示す図である。スイッチカードSWCがL2フレームデータを受信すると、共有バッファへのデータ書込動作が始まる。
図9に示すように、共有バッファへのデータ書込動作が始まると、WAF読出制御部2は、書込アドレスFifo5に対して巡回アドレスを指定する。そして、WAF読出制御部2は、その巡回アドレスに対応する書込アドレスFifo5の記憶領域に保持されている空きアドレス(Add1とする)を取得する(ステップS31)。
また、WAF監視部16もその空きアドレスAdd1を取得する。次いで、WAF監視部16は、WAF監視バッファ15に対して空きアドレスAdd1を指定する。そして、WAF監視部16は、空きアドレスAdd1に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグ(FL1とする)を取得する(ステップS32)。
次いで、WAF監視部16は、監視フラグFL1が“0”であるか否かを判断する(ステップS33)。監視フラグFL1が“0”である場合(ステップS33:Yes)、WAF監視部16は、空きアドレスAdd1は未使用状態であり、重複して使用されていないと判定し、WAF読出制御部2へ重複なしのW側重複判定通知を送る。
そして、WAF監視部16は、空きアドレスAdd1に対応するWAF監視バッファ15の記憶領域に“1”を書き込み、空きアドレスAdd1に対応する監視フラグFL1の値を“1”に変更する(ステップS34)。それによって、空きアドレスAdd1に対応する共有バッファSBの記憶領域が使用状態であることが示される。
次いで、WAF読出制御部2は共有バッファSBへ空きアドレスAdd1を転送する。それによって、共有バッファSBは、空きアドレスAdd1に対応する記憶領域にL2フレームデータを格納する(ステップS35)。そして、一連のデータ書込動作が終了する。
一方、ステップS33において監視フラグFL1が“0”でない、すなわち“1”である場合(ステップS33:No)、WAF監視部16は、空きアドレスAdd1が使用状態であり、重複して使用されていると判定し、WAF読出制御部2へ重複ありのW側重複判定通知を送る(ステップS36)。
次いで、WAF読出制御部2は空きアドレスAdd1を破棄する。それによって、L2フレームデータは共有バッファSBに格納されずに破棄される(ステップS37)。そして、一連のデータ書込動作が終了する。
・共有バッファからのデータ読出動作の一例
図10は、共有バッファからのデータ読出動作の一例を示す図である。図10に示すように、共有バッファからのデータ読出動作が始まると、読出制御部10は、優先制御や公平性制御を行って読み出し対象の読出キュー8_1〜8_4を判定する(ステップS41)。
次いで、読出制御部10は、読み出し対象の読出キュー8_1〜8_4に対して巡回アドレスを指定し、その巡回アドレスに対応する読出キュー8_1〜8_4の記憶領域に保持されている書込アドレス(Add2とする)を取得する(ステップS42)。書込アドレスAdd2に対してパリティチェック部9_1〜9_4からエラーありが通知されると、読出制御部10はその書込アドレスAdd2を破棄する。
エラーなしが通知されると、読出制御部10は、書込アドレスAdd2を共有バッファSBに対する読出アドレス(書込アドレスAdd2と同じものであるためAdd2とする)として共有バッファSBへ転送する。それによって、読出アドレスAdd2に対応する共有バッファSBの記憶領域からL2フレームデータが読み出される。
また、WAF監視部16及びWAF書込制御部11も読出アドレスAdd2を返却アドレス(読出アドレスAdd2と同じものであるためAdd2とする)として取得する。次いで、WAF監視部16は、WAF監視バッファ15に対して返却アドレスAdd2を指定する。そして、WAF監視部16は、返却アドレスAdd2に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグ(FL2とする)を取得する(ステップS43)。
次いで、WAF監視部16は、監視フラグFL2が“1”であるか否かを判断する(ステップS44)。監視フラグFL2が“1”である場合(ステップS44:Yes)、WAF監視部16は、返却アドレスAdd2は使用状態であり、空きアドレスではないため、重複して使用されていないと判定し、WAF書込制御部11及びデータ廃棄判定部13へ重複なしのR側重複判定通知を送る。
そして、WAF監視部16は、返却アドレスAdd2に対応するWAF監視バッファ15の記憶領域に“0”を書き込み、返却アドレスAdd2に対応する監視フラグFL2の値を“0”に変更する(ステップS45)。それによって、返却アドレスAdd2が空きアドレスとして受け付けられ、返却アドレスAdd2に対応する共有バッファSBの記憶領域が未使用状態であることが示される。
WAF書込制御部11は、重複なしのR側重複判定通知を受け取ると、書込アドレスFifo5に対して巡回アドレスを指定し、その巡回アドレスに対応する書込アドレスFifo5の記憶領域に返却アドレスAdd2を空きアドレスとして格納する。また、データ廃棄判定部13は、重複なしのR側重複判定通知及びパリティチェック部12からのエラーなしの通知を受け取ると、共有バッファSBから転送されるL2フレームデータをフレーム分離部14へ転送する。それによって、読出制御部10から出力される出力ポート情報に基づいてL2フレームデータが転送される(ステップS46)。そして、一連のデータ読出動作が終了する。
一方、ステップS44において監視フラグFL2が“1”でない、すなわち“0”である場合(ステップS44:No)、WAF監視部16は、返却アドレスAdd2が空きアドレスであるため、重複して使用されていると判定し、WAF書込制御部11及びデータ廃棄判定部13へ重複ありのR側重複判定通知を送る(ステップS47)。
WAF書込制御部11は、重複ありのR側重複判定通知を受け取ると、返却アドレスAdd2を破棄する。また、データ廃棄判定部13は、重複ありのR側重複判定通知またはパリティチェック部12からのエラーありの通知を受け取ると、共有バッファSBから転送されるL2フレームデータを廃棄する(ステップS48)。そして、一連のデータ読出動作が終了する。
以下に、共有バッファSBに対するL2フレームデータの書き込みまたは読み出しの動作について、共有バッファSB、書込アドレスFifo5、WAF監視バッファ15及び読出キュー8_1〜8_4の具体例を示して説明する。
・正常時のデータ書込動作の一例
図11は、正常時のデータ書込動作の一例を示す図である。図11には、連続するL2フレームデータA〜Dが既に共有バッファSBに格納されている状態が示されている。
電源投入直後またはリセット解除直後の状態においては、例えば図8に示すフローチャートの動作によって、WAF監視バッファ15の全アドレス空間の値は“0”に初期化される。書込アドレスFifo5の全アドレス空間の値は、書込アドレスFifo5に対するアドレスの値と同じになる。つまり、書込アドレスFifo5に対するアドレスの値が“0”であれば、“0”のアドレスに対応する書込アドレスFifo5の記憶領域の値は“0”となり、“1023”の記憶領域の値は“1023”となる。
そして、書込アドレスFifo5内に同じ値は存在しない。つまり、共有バッファSBに対するアドレスの値が書込アドレスFifo5内に格納されるため、初期状態においては、共有バッファSBに対するアドレスが重複していない状態となる。また、共有バッファSB及び読出キュー8_1〜8_4はFIFO(First−In First−Out)であるため、初期化する必要はない。
図11に示すように、例えばL2フレームデータがA、B、C及びDの順でスイッチカードSWCに到着する場合について説明する。L2フレームデータAの到着によって、WAF読出制御部2は、書込アドレスFifo5に対して巡回アドレス“0”を指定し、巡回アドレス“0”に対応する書込アドレスFifo5の記憶領域に保持されている空きアドレス“0”を取得する。
WAF監視部16は、WAF監視バッファ15に対して空きアドレス“0”を指定し、空きアドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“0”に初期化されているため、WAF監視部16は、空きアドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値を“1”に変更する。
また、WAF読出制御部2は、空きアドレス“0”を書込アドレスとして共有バッファSBへ払い出す(ステップS51)。共有バッファSBは、書込アドレス“0”に対応する記憶領域にL2フレームデータAを格納する(ステップS52)。また、書込制御部6は、例えば読出キュー8_4に書込アドレス“0”を格納する(ステップS53)。
L2フレームデータB、C及びDの到着による動作も同様である。ただし、L2フレームデータBの到着に際しては、WAF読出制御部2が書込アドレスFifo5に対して指定する巡回アドレスは“1”であり、書込アドレスFifo5から取得する空きアドレスは“1”である。また、共有バッファSBは、空きアドレス“1”すなわち書込アドレス“1”に対応する記憶領域にL2フレームデータBを格納する。また、書込制御部6は、例えば読出キュー8_3に書込アドレス“1”を格納する。
L2フレームデータCの到着に際しては、巡回アドレスは“2”であり、空きアドレスは“2”である。書込アドレス“2”に対応する共有バッファSBの記憶領域にL2フレームデータCが格納され、例えば読出キュー8_2に書込アドレス“2”が格納される。
L2フレームデータDの到着に際しては、巡回アドレスは“3”であり、空きアドレスは“3”である。書込アドレス“3”に対応する共有バッファSBの記憶領域にL2フレームデータDが格納され、例えば読出キュー8_1に書込アドレス“3”が格納される。図11には、ここまでの状態が示されている。
・正常時のデータ読出動作の一例
図12は、正常時のデータ読出動作の一例を示す図である。図12には、L2フレームデータA〜Dが既に共有バッファSBから読み出されている状態が示されている。
図12に示すように、例えばL2フレームデータをD、C、B及びAの順でスイッチカードSWCからLIUカードC#0〜C#3へ転送する場合について説明する。なお、正常時の読出動作であるため、パリティチェック部9_1〜9_4及びパリティチェック部12ではエラーが検出されない。
読出制御部10の優先制御や公平性制御によって、読出制御部10は読出キュー8_1から書込アドレス“3”を取得する。読出制御部10は、書込アドレス“3”を、それぞれ読出アドレス“3”として共有バッファSBへ転送し、返却アドレスとしてWAF書込制御部11及びWAF監視部16へ転送する(ステップS61)。
読出アドレス“3”に対応する共有バッファSBの記憶領域からL2フレームデータDが読み出される(ステップS62)。また、WAF監視部16は、WAF監視バッファ15に対して返却アドレス“3”を指定し、返却アドレス“3”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“1”であるため、WAF監視部16は、返却アドレス“3”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値を“0”に変更する。
WAF書込制御部11は、書込アドレスFifo5に対して例えば巡回アドレス“0”を指定し、巡回アドレス“0”に対応する書込アドレスFifo5の記憶領域に返却アドレス“3”を空きアドレスとして格納する(ステップS63)。また、共有バッファSBから読み出されるL2フレームデータDは、データ廃棄判定部13を経由してフレーム分離部14からLIUカードC#0〜C#3へ転送される。
L2フレームデータC、B及びAを読み出す動作も同様である。ただし、L2フレームデータCの読み出しに際しては、読出制御部10は読出キュー8_2から書込アドレス“2”を取得する。そのため、共有バッファSBへ転送される読出アドレスは“2”となり、WAF書込制御部11及びWAF監視部16へ転送される返却アドレスは“2”となる。
従って、読出アドレス“2”に対応する共有バッファSBの記憶領域からL2フレームデータCが読み出される。また、返却アドレス“2”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値が“1”から“0”に変更される。WAF書込制御部11が書込アドレスFifo5に対して指定する巡回アドレスは例えば“1”であり、巡回アドレス“1”に対応する書込アドレスFifo5の記憶領域に返却アドレス“2”が空きアドレスとして格納される。
L2フレームデータBの読み出しに際しては、書込アドレス、読出アドレス及び返却アドレスは、読出キュー8_3から読み出される“1”である。従って、L2フレームデータBは、読出アドレス“1”に対応する共有バッファSBの記憶領域から読み出される。また、返却アドレス“1”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値が“1”から“0”に変更される。WAF書込制御部11が書込アドレスFifo5に対して指定する巡回アドレスは例えば“2”であり、巡回アドレス“2”に対応する書込アドレスFifo5の記憶領域に返却アドレス“1”が空きアドレスとして格納される。
L2フレームデータAの読み出しに際しては、書込アドレス、読出アドレス及び返却アドレスは、読出キュー8_4から読み出される“0”である。従って、L2フレームデータAは、読出アドレス“0”に対応する共有バッファSBの記憶領域から読み出される。また、返却アドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値が“1”から“0”に変更される。WAF書込制御部11が書込アドレスFifo5に対して指定する巡回アドレスは例えば“3”であり、巡回アドレス“3”に対応する書込アドレスFifo5の記憶領域に返却アドレス“0”が空きアドレスとして格納される。図12には、ここまでの状態が示されている。
・読出キューで発生するビットエラーを検出できない場合の読出動作の一例
図13は、読出キューで発生するビットエラーを検出できない場合の読出動作の一例を示す図である。図13には、ビットエラーが発生した状態でL2フレームデータA〜Cが既に共有バッファSBから読み出されている状態が示されている。
図13に示すように、正常に書込動作が終了して図11に示す状態となった後に、例えば読出キュー8_1でビットエラーが発生し、このビットエラーをパリティチェック部9_1で検出できない場合について説明する。なお、パリティチェック部12ではエラーが検出されないとする。
読出制御部10の優先制御や公平性制御によって、読出制御部10は読出キュー8_1から書込アドレスを取得する。読出キュー8_1から読み出される書込アドレスの値は、本来“3”であるが、ビットエラーの発生によって“0”になっているとする。読出制御部10は、書込アドレス“0”を、それぞれ読出アドレス“0”として共有バッファSBへ転送し、返却アドレスとしてWAF書込制御部11及びWAF監視部16へ転送する(ステップS61)。
読出アドレス“0”に対応する共有バッファSBの記憶領域からL2フレームデータAが読み出される(ステップS62)。また、WAF監視部16は、WAF監視バッファ15に対して返却アドレス“0”を指定し、返却アドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“1”であるため、R側重複判定は重複なしとなる。WAF監視部16は、返却アドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値を“0”に変更する。
WAF書込制御部11は、書込アドレスFifo5に対して例えば巡回アドレス“0”を指定し、巡回アドレス“0”に対応する書込アドレスFifo5の記憶領域に返却アドレス“0”を空きアドレスとして格納する(ステップS63)。また、共有バッファSBから読み出されるL2フレームデータAは、データ廃棄判定部13を経由してフレーム分離部14からLIUカードC#0〜C#3へ転送される。
次いで、読出キュー8_2から書込アドレス“2”が読み出され、共有バッファSBからL2フレームデータCが読み出される。また、返却アドレス“2”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値が“0”に変更され、巡回アドレス“1”に対応する書込アドレスFifo5の記憶領域に返却アドレス“2”が空きアドレスとして格納される。L2フレームデータCは、データ廃棄判定部13を経由してフレーム分離部14からLIUカードC#0〜C#3へ転送される。
次いで、読出キュー8_3から書込アドレス“1”が読み出され、共有バッファSBからL2フレームデータBが読み出される。また、返却アドレス“1”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値が“0”に変更され、巡回アドレス“2”に対応する書込アドレスFifo5の記憶領域に返却アドレス“1”が空きアドレスとして格納される。L2フレームデータBは、データ廃棄判定部13を経由してフレーム分離部14からLIUカードC#0〜C#3へ転送される。
次いで、読出キュー8_4から書込アドレス“0”が読み出され、共有バッファSBからL2フレームデータAが読み出される。WAF監視部16は、WAF監視バッファ15に対して返却アドレス“0”を指定し、返却アドレス“0”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“0”であるため、R側重複判定は重複ありとなる。
従って、今回、共有バッファSBから読み出されるL2フレームデータAはデータ廃棄判定部13によって廃棄されるため、LIUカードC#0〜C#3へは転送されない。また、共有バッファSBに対するアドレス“3”が空きアドレスとして書込アドレスFifo5に返却されないため、WAF監視バッファ15のアドレス“3”に対応する記憶領域の監視フラグの値は“1”のままとなる。
・書込アドレスFifoでビットエラーが発生する場合の書込動作の一例
図14は、書込アドレスFifoでビットエラーが発生する場合の書込動作の一例を示す図である。図14には、例えば連続するL2フレームデータがE、F、G及びHの順でスイッチカードSWCに到着し、L2フレームデータE〜Gが既に共有バッファSBに格納されている状態が示されている。
図14に示すように、図12に示す読出動作によってL2フレームデータA〜Dの読出動作が正常に終了した後に、書込アドレスFifo5でビットエラーが発生する場合について説明する。ビットエラー発生前の状態では、巡回アドレス“0”、“1”、“2”及び“3”に対応する書込アドレスFifo5の記憶領域には、それぞれ“3”、“2”、“1”及び“0”が格納されているとする。また、アドレス“0”、“1”、“2”及び“3”に対応するWAF監視バッファ15の監視フラグの値は全て“0”であるとする。巡回アドレス“3”に対応する書込アドレスFifo5の記憶領域においてビットエラーが発生し、本来“0”である空きアドレスの値が“3”になっているとする。
L2フレームデータEの到着によって、WAF読出制御部2は、書込アドレスFifo5に対して巡回アドレス“0”を指定し、巡回アドレス“0”に対応する書込アドレスFifo5の記憶領域に保持されている空きアドレス“3”を取得する。
WAF監視部16は、WAF監視バッファ15に対して空きアドレス“3”を指定し、空きアドレス“3”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“0”に戻っているため、WAF監視部16は、空きアドレス“3”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグの値を“1”に変更する。
また、WAF読出制御部2は、空きアドレス“3”を書込アドレスとして共有バッファSBへ払い出す(ステップS51)。共有バッファSBは、書込アドレス“3”に対応する記憶領域にL2フレームデータEを格納する(ステップS52)。また、書込制御部6は、例えば読出キュー8_1に書込アドレス“3”を格納する(ステップS53)。
L2フレームデータF及びGの到着による動作も同様である。ただし、L2フレームデータFの到着に際しては、WAF読出制御部2が書込アドレスFifo5に対して指定する巡回アドレスは“1”であり、書込アドレスFifo5から取得する空きアドレスは“2”である。また、共有バッファSBは、空きアドレス“2”すなわち書込アドレス“2”に対応する記憶領域にL2フレームデータFを格納する。また、書込制御部6は、例えば読出キュー8_2に書込アドレス“2”を格納する。
L2フレームデータGの到着に際しては、巡回アドレスは“2”であり、空きアドレスは“1”である。書込アドレス“1”に対応する共有バッファSBの記憶領域にL2フレームデータGが格納され、例えば読出キュー8_3に書込アドレス“1”が格納される。
L2フレームデータHが到着すると、WAF読出制御部2は、書込アドレスFifo5に対して巡回アドレス“3”を指定し、巡回アドレス“3”に対応する書込アドレスFifo5の記憶領域に保持されている空きアドレス“3”を取得する。
WAF監視部16は、WAF監視バッファ15に対して空きアドレス“3”を指定し、空きアドレス“3”に対応するWAF監視バッファ15の記憶領域に格納されている監視フラグを取得する。監視フラグの値が“1”であるため、W側重複判定は重複ありとなる。従って、今回、共有バッファSBから払い出される空きアドレス“3”は共有バッファSB及び読出キュー8_1〜8−4へ転送されずに破棄される。また、L2フレームデータHは共有バッファSBに書き込まれずに破棄される。
スイッチ部SPは、重複すると判定されて破棄された共有バッファSBに対するアドレスを復活させてもよい。例えば、共有バッファSBからL2フレームデータが必ず読み出される一の監視周期内で共有バッファSBにL2フレームデータを書き込んだ後、共有バッファSBからL2フレームデータが読み出されなかったアドレス空間を次の監視周期で検出する。そして、このアドレス空間を共有バッファSBの空きアドレスとして開放してもよい。
図7に示すスイッチカードSWCによれば、共有バッファSBにL2フレームデータを書き込む際に、書込アドレスとして払い出される空きアドレスが重複しているか否かを検出し、重複する場合に、払い出される空きアドレスを破棄することによって、L2フレームデータの欠落を防ぐことができる。また、共有バッファSBからL2フレームデータを読み出す際に読出アドレスが重複しているか否かを検出し、重複する場合に読出アドレスの返却を受け付けないことによって、共有バッファSBに対するアドレスの重複状態が継続するのを防ぐことができる。さらに、共有バッファSBからL2フレームデータを読み出す際に読出アドレスが重複する場合、共有バッファSBから読み出されるL2フレームデータを破棄することによって、L2フレームデータの誤配を防ぐことができる。
上述した各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)複数のポートから入力されるデータを保持する共有バッファと、前記ポートから入力されるデータを前記共有バッファに書き込むときに空きアドレスの中から前記共有バッファに対する書込アドレスを払い出すアドレス払出部と、前記共有バッファからデータを読み出すときに前記読み出されるデータに対する読出アドレスの返却を受け付けて空きアドレスとして管理する返却アドレス受付部と、前記共有バッファに対するアドレスの使用状態を示す情報を保持する監視バッファと、前記アドレス払出部による書込アドレスの払い出し及び前記返却アドレス受付部による読出アドレスの返却を監視し、前記アドレス払出部によって書込アドレスが払い出されるときに払い出し対象の書込アドレスに対応する前記監視バッファの情報を未使用状態から使用状態に変更し、前記返却アドレス受付部によって読出アドレスの返却が受け付けられるときに返却対象の読出アドレスに対応する前記監視バッファの情報を使用状態から未使用状態に変更する監視部と、を備え、前記監視部は、前記アドレス払出部によって書込アドレスが払い出されるときに払い出し対象の前記書込アドレスに対応する前記監視バッファの情報が使用状態である場合、前記共有バッファに対するアドレスが重複すると判定することを特徴とするデータ処理装置。
(付記2)前記監視部によって払い出し対象の書込アドレスが重複すると判定される場合、前記アドレス払出部は払い出し対象の前記書込アドレスを破棄することを特徴とする付記1に記載のデータ処理装置。
(付記3)前記監視部は、前記返却アドレス受付部によって読出アドレスの返却が受け付けられるときに返却対象の前記読出アドレスに対応する前記監視バッファの情報が未使用状態である場合、前記共有バッファに対するアドレスが重複すると判定し、前記監視部によって返却対象の読出アドレスが重複すると判定される場合、前記返却アドレス受付部は返却対象の前記読出アドレスを破棄することを特徴とする付記1または2に記載のデータ処理装置。
(付記4)前記監視部は、前記返却アドレス受付部によって読出アドレスの返却が受け付けられるときに返却対象の前記読出アドレスに対応する前記監視バッファの情報が未使用状態である場合、前記共有バッファに対するアドレスが重複すると判定し、前記共有バッファの返却対象の前記読出アドレスに対応する領域から読み出されるデータを破棄することを特徴とする付記1乃至3のいずれか一つに記載のデータ処理装置。
(付記5)複数のポートから入力されるデータを保持する共有バッファに前記ポートから入力されるデータを書き込むときに空きアドレスの中から前記共有バッファに対する書込アドレスを取得し、前記共有バッファに対するアドレスの使用状態を示す情報を保持する監視バッファから前記書込アドレスの使用状態を示す情報を取得し、前記書込アドレスの前記使用状態を示す情報が未使用状態である場合に、前記書込アドレスの前記使用状態を示す情報を使用状態に変更し、前記書込アドレスの前記使用状態を示す情報が使用状態である場合に、前記書込アドレスが重複すると判定することを特徴とするデータ処理方法。
(付記6)前記書込アドレスが重複すると判定する場合、前記書込アドレスを破棄することを特徴とする付記5に記載のデータ処理方法。
(付記7)複数のポートから入力されるデータを保持する共有バッファからデータを読み出すときに前記読み出されるデータに対する読出アドレスを取得し、前記共有バッファに対するアドレスの使用状態を示す情報を保持する監視バッファから前記読出アドレスの使用状態を示す情報を取得し、前記読出アドレスの前記使用状態を示す情報が使用状態である場合に、前記読出アドレスの前記使用状態を示す情報を未使用状態に変更し、前記読出アドレスの前記使用状態を示す情報が未使用状態である場合に、前記読出アドレスが重複すると判定することを特徴とするデータ処理方法。
(付記8)前記読出アドレスが重複すると判定する場合、前記読出アドレスを破棄することを特徴とする付記7に記載のデータ処理方法。
(付記9)前記読出アドレスが重複すると判定する場合、前記共有バッファの前記読出アドレスに対応する領域から読み出されるデータを破棄することを特徴とする付記7または8に記載のデータ処理方法。