(57)【要約】【課題】ソフトウェア処理とハードウェア処理との間のタイミングのずれによるフレームの誤転送をなくし、高信頼なフレーム転送処理を実現する。【解決手段】フロー番号探索回路１と転送情報取得回路３との間に、フロー番号探索回路１から転送情報取得回路３へ送られるフレームを蓄積することでソフトウェア処理の遅延を吸収するバッファ回路２を設ける。【選択図】  図１
2019050536.tif 000002
【特許請求の範囲】
【請求項１】
入力されたフレームからフロー識別子を抽出し、この抽出したフロー識別子に対応するフロー番号をフロー識別子−フロー番号テーブルから探索するフロー番号探索回路と、
前記フロー番号探索回路によって探索された前記フロー番号に対応する転送情報をフロー番号−転送情報テーブルから読み取り、この読み取った転送情報を前記フレームに付与して出力する転送情報取得回路と、
前記フロー番号探索回路に前記フレームが入力されてから前記転送情報取得回路から前記フレームが出力されるまでのフレーム転送処理にソフトウェア処理を介在させるソフトウェア部と、
前記フロー番号探索回路から前記転送情報取得回路へ送られる前記フレームを蓄積することで前記ソフトウェア処理の遅延を吸収するバッファ回路と
を備えることを特徴とするフレーム転送処理装置。
【請求項２】
請求項１に記載されたフレーム転送処理装置において、
前記フロー識別子−フロー番号テーブルは、
第１のフロー識別子−フロー番号テーブルと第２のフロー識別子−フロー番号テーブルとに冗長化されており、
前記第１および第２のフロー識別子−フロー番号テーブルは、
そのテーブルに保持されているフロー識別子に誤り検出符号または誤り訂正符号が付与されている
ことを特徴とするフレーム転送処理装置。
【請求項３】
請求項１に記載されたフレーム転送処理装置において、
前記フロー番号−転送情報テーブルは、
第１のフロー番号−転送情報テーブルと第２のフロー番号−転送情報テーブルとに冗長化されており、
前記第１および第２のフロー番号−転送情報テーブルは、
そのテーブルに保持されている転送情報に誤り検出符号または誤り訂正符号が付与されている
ことを特徴とするフレーム転送処理装置。
【請求項４】
請求項１〜３の何れか１項に記載されたフレーム転送処理装置において、
前記バッファ回路は、
前記フロー番号探索回路から送られてくる前記フレームに付与されている前記フロー番号を含む識別子を生成するとともに、この識別子に対して誤り検出符号または誤り訂正符号を付与する識別子生成部と、
前記フロー番号探索回路から送られてくる前記フレームを蓄積する際、このフレームを蓄積するメモリ領域の手前に、前記識別子生成部で生成される前記識別子を蓄積するメモリ領域を予約する識別子／フレーム書込部と
を備えることを特徴とするフレーム転送処理装置。
【請求項５】
入力されたフレームからフロー識別子を抽出し、この抽出したフロー識別子に対応するフロー番号をフロー識別子−フロー番号テーブルから探索する処理をフロー番号探索回路で行わせるステップと、
前記フロー番号探索回路によって探索された前記フロー番号に対応する転送情報をフロー番号−転送情報テーブルから読み取り、この読み取った転送情報を前記フレームに付与して出力する処理を転送情報取得回路で行わせるステップと、
前記フロー番号探索回路に前記フレームが入力されてから前記転送情報取得回路から前記フレームが出力されるまでのフレーム転送処理にソフトウェア処理を介在させるステップと、
前記フロー番号探索回路から前記転送情報取得回路へ送られる前記フレームを蓄積することで前記ソフトウェア処理の遅延を吸収するステップと
を備えることを特徴とするフレーム転送処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークの仮想化で想定されるソフトウェア処理の介在による多様なフレームに対する転送処理に際し、ソフトウェア処理とハードウェア処理との間のタイミングのずれをなくし、フレームの誤転送を防止するフレーム転送処理装置および方法に関するものである。
【背景技術】
【０００２】
近年、インターネット上でＳＮＳ（Social Networking Service）やＩＰ電話など様々なサービスが進展している。このような状況の中、様々なサービスに柔軟に対応するため、汎用のコンピュータリソースを用いてソフトウェア上で仮想的なネットワークを構成するネットワークの仮想化に向けた検討が進められている。
【０００３】
ネットワークの仮想化で行われるデータ処理において、従来の通信用途向け大規模集積回路で行われるハードウェアでのフレーム処理と同程度の処理を行うためには、複数の命令や処理手順を超高速で実行する必要がある。このため、超微細な最先端のデザインルールで作製された高速なＣＰＵ（Central Processing Unit）等が必要となってくる。
【０００４】
一方で、ネットワークの基本機能であるフレーム転送機能において、フレームを高速に目的の転送先へ転送するため、ハードウェア処理により転送情報を格納したテーブルを処理することが多い。例えば、特許文献１では、転送情報を取得するため、転送に必要な情報に関する検索キーを別途照合情報として持つことで、高速なフレーム転送処理を実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−１１７１７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ネットワークの仮想化におけるフレーム転送処理では、柔軟にネットワークを構築できるため、さまざまな属性のフレームをソフトウェアと連携して処理する必要がある。図７に従来のフレーム転送処理装置の一例を示す。
【０００７】
このフレーム転送処理装置２００は、フレーム転送処理部２０１とソフトウェア部２０２とを備えており、フレーム転送処理部２０１にはフロー番号テーブル２０３と転送情報テーブル２０４が設けられている。このフレーム転送処理装置２００では、フレーム転送処理部２０１でハードウェア処理が行われ、ソフトウェア部２０２でソフトウェア処理が行われる。
【０００８】
このフレーム転送処理装置２００において、フレーム転送処理部２０１でのフレーム転送処理（ハードウェア処理）にソフトウェア部２０２でのソフトウェア処理（例えば、転送情報テーブル２０４に対するソフトウェア処理）が介在した場合、ソフトウェア部２０２として高速なＣＰＵ等を用いても、ソフトウェア処理とハードウェア処理との間にタイミングのずれが生じ、フレームの転送先に必要な正しい転送情報を取得することができないという問題があった。これにより、誤った転送先へフレームを送付してしまうという課題があった。
【０００９】
本発明は、このような課題を解決するためになされたもので、その目的とするところは、従来のフレーム転送処理装置で課題となっていた、ソフトウェア処理とハードウェア処理との間のタイミングのずれによるフレームの誤転送をなくし、高信頼なフレーム転送処理を実現することが可能なフレーム転送処理装置および方法を提供することにある。
【課題を解決するための手段】
【００１０】
このような目的を達成するために、本発明に係るフレーム転送処理装置は、入力されたフレームからフロー識別子を抽出し、この抽出したフロー識別子に対応するフロー番号をフロー識別子−フロー番号テーブル（１８）から探索するフロー番号探索回路（１）と、フロー番号探索回路によって探索されたフロー番号に対応する転送情報をフロー番号−転送情報テーブル（３８）から読み取り、この読み取った転送情報をフレームに付与して出力する転送情報取得回路（３）と、フロー番号探索回路にフレームが入力されてから転送情報取得回路からフレームが出力されるまでのフレーム転送処理にソフトウェア処理を介在させるソフトウェア部（４）と、フロー番号探索回路から転送情報取得回路へ送られるフレームを蓄積することでソフトウェア処理の遅延を吸収するバッファ回路（２）とを備えることを特徴とする。
【００１１】
また、本発明において、フロー識別子−フロー番号テーブル（１８）は、第１のフロー識別子−フロー番号テーブル（１８−１）と第２のフロー識別子−フロー番号テーブル（１８−２）とに冗長化されており、第１および第２のフロー識別子−フロー番号テーブルは、そのテーブルに保持されているフロー識別子に誤り検出符号または誤り訂正符号が付与されていることを特徴とする。
【００１２】
また、本発明において、フロー番号−転送情報テーブル（３８）は、第１のフロー番号−転送情報テーブル（３８−１）と第２のフロー番号−転送情報テーブル（３８−２）とに冗長化されており、第１および第２のフロー番号−転送情報テーブルは、そのテーブルに保持されている転送情報に誤り検出符号または誤り訂正符号が付与されていることを特徴とする。
【００１３】
また、本発明において、バッファ回路（２）は、フロー番号探索回路から送られてくるフレームに付与されているフロー番号を含む識別子を生成するとともに、この識別子に対して誤り検出符号または誤り訂正符号を付与する識別子生成部（２１−２）と、フロー番号探索回路から送られてくるフレームを蓄積する際、このフレームを蓄積するメモリ領域の手前に、識別子生成部で生成される識別子を蓄積するメモリ領域を予約する識別子／フレーム書込部（２２−１）とを備えることを特徴とする。
【００１４】
この発明において、フロー番号探索回路は、入力されたフレームからフロー識別子を抽出し、この抽出したフロー識別子に対応するフロー番号をフロー識別子−フロー番号テーブルから探索する。転送情報取得回路は、フロー番号に対応する転送情報をフロー番号−転送情報テーブルから読み取り、この読み取った転送情報をフレームに付与して出力する。本発明では、このフロー番号探索回路と転送情報取得回路との間に、フロー番号探索回路から転送情報取得回路へ送られるフレームを蓄積することでソフトウェア処理の遅延を吸収するバッファ回路を設ける。このバッファ回路へのフレームの蓄積によって、ネットワークの仮想化で想定されるソフトウェア処理の介在による多様なフレームに対する転送処理に際し、ソフトウェア処理とハードウェア処理との間のタイミングのずれをなくすことが可能となる。
【００１５】
なお、上記説明では、一例として、発明の構成要素に対応する図面上の構成要素を、括弧を付した参照符号によって示している。
【発明の効果】
【００１６】
以上説明したように、本発明によれば、フロー番号探索回路と転送情報取得回路との間に、フロー番号探索回路から転送情報取得回路へ送られるフレームを蓄積することでソフトウェア処理の遅延を吸収するバッファ回路を設けるようにしたので、ネットワークの仮想化で想定されるソフトウェア処理の介在による多様なフレームに対する転送処理に際し、ソフトウェア処理とハードウェア処理との間のタイミングのずれをなくすようにして、フレームの誤転送を防止することが可能となる。
【図面の簡単な説明】
【００１７】
【図１】図１は、本発明に係るフレーム転送処理装置の一実施の形態の要部の構成を示す図である。
【図２】図２は、このフレーム転送処理装置におけるフレーム転送処理手順の大枠を示すフローチャートである。
【図３】図３は、フレーム転送処理手順１（フロー番号探索処理）を説明するためのフローチャートである。
【図４】図４は、バッファ回路のより詳細な要部の構成を示す図である。
【図５】図５は、フレーム転送処理手順２（バッファリング処理）を説明するためのフローチャートである。
【図６】図６は、フレーム転送処理手順３（転送情報取得処理）を説明するためのフローチャートである。
【図７】図７は、従来のフレーム転送処理装置の一例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。まず初めに、図１を用いて、本発明に係るフレーム転送処理装置の一実施の形態の構成と動作を説明する。
【００１９】
図１は、本発明に係るフレーム転送処理装置の一実施の形態の要部の構成を示す図である。このフレーム転送処理装置１００は、フロー番号探索回路１と、バッファ回路２と、転送情報取得回路３と、ソフトウェア部（ＣＰＵ等）４とを備えており、ソフトウェア部４は保守網５を介して外部のサーバ６に接続されている。
【００２０】
フロー番号探索回路１は、フレーム先頭処理部１１と、テーブル処理部１２と、メモリ部１３と、誤り検出・訂正部１４と、テーブル回復判定部１５と、テーブル更新部１６と、テーブル処理停止・再開部１７とを備えている。
【００２１】
バッファ回路２は、バッファメモリ部２１と、バッファメモリ制御監視部２２とを備えている。なお、バッファ回路２におけるバッファメモリ部２１およびバッファメモリ制御監視部２２の具体的な構成については、図４を用いて後述する。
【００２２】
転送情報取得回路３は、フレーム先頭処理部３１と、テーブル処理部３２と、メモリ部３３と、誤り検出・訂正部３４と、テーブル回復判定部３５と、テーブル更新部３６と、テーブル処理停止・再開部３７とを備えている。
【００２３】
フロー番号探索回路１において、フレーム先頭処理部１１は、フレームが入力されると、フレームの先頭から所定の長さまで読み取りを行って、この読み取った情報からフロー識別子を抽出する。
【００２４】
例えば、フレーム先頭処理部１１は、フレームが先頭に８バイトの内部識別子と６４バイトのイーサネット（登録商標）フレームの構成を取っている場合、先頭から２０バイトまでの内部識別子と宛先ＭＡＣアドレス及び送信元ＭＡＣアドレスを読み取る。そして、例えば、宛先ＭＡＣアドレス及び送信元ＭＡＣアドレスの下位３バイトずつを結合した６バイトをフロー識別子として抽出する。
【００２５】
メモリ部１３には、フロー識別子をエントリとして、フロー識別子とフロー番号とを関連付けたテーブル（フロー識別子−フロー番号テーブル）１８が用意されている。フレームが入力されると、テーブル処理部１２は、メモリ部１３のテーブル１８を検索する。
【００２６】
このテーブル１８は、主テーブル（第１のフロー識別子−フロー番号テーブル）１８−１と従テーブル（第２のフロー識別子−フロー番号テーブル）１８−２とに分かれており、主テーブル１８−１と従テーブル１８−２とは同じ内容が書き込まれたテーブルとされている。すなわち、テーブル１８は、主テーブル１８−１と従テーブル１８−２とに冗長化（二重化）されている。
【００２７】
また、テーブル１８には、ワード単位でエントリ（フロー識別子）が保持されており、エントリには誤り検出符号または誤り訂正符号が付与されている。テーブル１８を検索する際にはエントリを読み込む必要がある。この際、テーブル処理部１２は、誤り検出・訂正部１４において誤り検出または誤り訂正処理を行わせながら、テーブル１８に保持されているエントリを読み込む。
【００２８】
このテーブル１８に保持されているエントリの読み込みに際し、ケースとしては、「誤り検出なし」（ケース１）、「誤り検出あり、訂正可」（ケース２）、「誤り検出あり、訂正不可」（ケース３）が考えられる。
【００２９】
例えば、主テーブル１８−１にてケース１の場合、誤り検出がないので、テーブル処理部１２は、エントリの読み取り値（フロー識別子の読取値）とフレーム先頭処理部１１で抽出されたフロー識別子（フロー識別子の抽出値）とを突合して、一致しなければ、次のエントリを読み込む。
【００３０】
ケース２の場合、テーブル処理部１２は、フロー識別子の読取値の誤りを訂正した結果とフロー識別子の抽出値とを突合する。
【００３１】
ケース３の場合、テーブル処理部１２は、従テーブル１８−２内の対応するエントリの読み込みを行い、フロー識別子の読取値に誤りがなければ、フロー識別子の読取値とフロー識別子の抽出値とを突合する。
【００３２】
ケース３の場合、フロー識別子の読取値に誤りがあり、その誤りが訂正可能であれば、テーブル処理部１２は、フロー識別子の読取値の誤りを訂正した結果とフロー識別子の抽出値とを突合する。誤り訂正不可の場合、テーブル処理部１２は、エントリの突合を中止し、次のエントリの読み取りを行う。
【００３３】
誤り検出・訂正部１４での誤り検出、誤り訂正の結果はテーブル１９としてテーブル回復判定部１５に保持される。この場合、テーブル回復判定部１５には、主テーブル１８−１、従テーブル１８−２のエントリ毎の誤り検出、訂正の有無が保持される。
【００３４】
誤りが検出された場合は、テーブル１８（１８−１，１８−２）にはあらかじめエントリが書かれていたことから、ソフトエラーによるビット反転の可能性がある。このため、ビット反転のあったエントリを正常なエントリに検出毎に書き換えることが望ましい。
【００３５】
しかし、テーブル１８を高速で検索するため、テーブルの書き込み処理といった手順は極力減らす必要がある。このため、一度、ある一つのフレームに対して誤り検出を行った場合は、結果を他のテーブル１９に保持し、誤りが検出された部分を避けて、フロー識別子の抽出値と読取値との突合処理を行うことで、検索の効率化、すなわち、処理遅延の低減が図れる。
【００３６】
また、大量のフレームに対して、検索結果の蓄積が行われた結果、ソフトエラーの蓄積によって、特定のユーザに対するエントリの検索が不可能となった場合は、ユーザへのサービス断などの影響が考えられる。
【００３７】
このため、テーブル回復判定部１５ではエントリ全体の状態を監視し、特定の閾値で、テーブル全体の回復を行う判断を行い、テーブル更新部１６に保持されているエントリをテーブル１８に書き込む。この場合、メモリ部１３にある主テーブル１８−１のエントリの書き換えを行い、更に従テーブル１８−２における主テーブル１８−１と同じエントリを書き換える。
【００３８】
なお、テーブル更新部１６に保持されているエントリは、テーブル更新部１６を保守網５にソフトウェア部４を介して接続することにより、必要な場合に、ソフトウェア処理により書き換え可能とされている。このように、保守網５を通し、外部のサーバ６からエントリを取得してから、メモリ部１３のテーブル１８を更新するようにしてもよい。
【００３９】
また、テーブル更新部１６からメモリ部１３のテーブル１８を書き換える際は、テーブル処理停止・再開部１７からテーブル処理部１２に対して処理停止指示を行い、従テーブル１８−２までの書き換えを完了したら、処理再開指示をテーブル処理部１２に行い、処理を再開させる。
【００４０】
一連のテーブル処理において、ソフトエラー発生により誤りが検出されても、前述の外部のサーバ６からのテーブル１８の更新やテーブル処理停止・再開部１７からの処理停止指示によるテーブル１８の書き換えなどのテーブル書き戻し処理をなしとすることも、検索処理を高速化し、処理遅延を低減する手法として好適である。なお、検索方法は、本記載の方法に限定されることなく、適宜実装可能である。
【００４１】
テーブル処理部１２は、このように検索され、一致したエントリからフレーム属性を決める情報としてフロー番号を取得し、取得したフロー番号を、フレームの先頭の内部識別子に、取得したフロー番号の誤り訂正符号を付与して、埋め込む。このフロー番号探索回路１で処理（ハードウェア処理）されたフレーム（イーサネットフレーム＋内部識別子）は、次段のバッファ回路２へ送られ、バッファメモリ部２１に蓄積される。
【００４２】
バッファ回路２の詳細については、後述するフレーム転送処理手順で説明するが、予めバッファメモリ部２１に識別子の格納領域を確保した上で、フレームがバッファメモリ部２１に蓄積されるように、バッファメモリ制御監視部２２がフレーム蓄積の制御を行う。蓄積されたフレームは、次段の転送情報取得回路３からの要求があった際に、バッファ回路２から読み出され、転送される。
【００４３】
また、ソフトウェア部４は、フロー番号探索回路１へのフレームの入力をソフトウェア処理の処理開始の契機として、フロー番号探索回路１にフレームが入力されてから転送情報取得回路３からそのフレームが出力されるまでのフレーム転送処理に介在するソフトウェア処理を行う。
【００４４】
なお、フレーム先頭処理部１１では、先頭から２０バイトまでの宛先ＭＡＣアドレスや送信元ＭＡＣアドレスに限定されるのではなく、例えば、イーサネットタイプやVLAN ID/priority、宛先／送信元ＩＰアドレス等、イーサネットフレームの階層の深いフィールドの組合せを選択できることは言うまでもない。
【００４５】
また、誤り検出や誤り訂正の符号種類としては、どのようなものでも良く、誤り検出であれば、パリティ符号やＣＲＣ（Cyclic Redundancy Check）等の巡回冗長検査符号、誤り訂正であれば、単一エラー訂正、２つエラー検知を行うＳＥＣＤＥＤ（single error correction double error detection）符号や、リードソロモン符号であってもよい。
【００４６】
ここで、フロー番号探索回路１から転送情報取得回路３へのフレームの転送時間について、説明する。
【００４７】
フロー番号探索回路１からのフレーム（内部識別子＋イーサネットフレーム）は、バッファ回路２の遅延を無視すると、ワイヤレートに近い短い遅延で転送情報取得回路３へ転送される。一方で、ソフトウェア部４でのソフトウェア処理（テーブル３８に対するソフトウェア処理）は、それよりも遅れる。
【００４８】
ネットワークの仮想化では、処理するバーチャルマシンの増大や設定変更によるテーブルの書き換えなど、ソフトウェア処理に負荷がかかり、ソフトウェア処理の遅延が変動する場合がある。この場合、テーブルの検索処理の遅延などにより、ハードウェアによるフレーム処理（ハードウェア処理）とソフトウェア処理との間でタイミングのずれが発生する。
【００４９】
バッファ回路２は、ソフトウェア部４でのソフトウェア処理の遅延を吸収することによって、フロー番号探索回路１からのフレーム（内部識別子＋イーサネットフレーム）の転送情報取得回路３への転送タイミングとソフトウェア部４でのテーブル３８に対するソフトウェア処理が完了するタイミングとのずれを吸収する。
【００５０】
転送情報取得回路３は、転送されてきたフレーム（内部識別子＋イーサネットフレーム）の内部識別子からフロー番号を抽出し（フレーム先頭処理部３１）、ソフトウェア処理の結果としてメモリ部３３のテーブル（フロー番号−転送情報テーブル）３８に記載されたフロー番号の抽出値と同じエントリの情報（転送情報）を読み取り、内部識別子を書き換える（テーブル処理部３２）。例えば、ＶＬＡＮ−ＩＤなどの転送方路を決定するＩＤを取得し、内部識別子を書き換える。これにより、転送情報取得回路３から所望の転送方路へフレームが転送される。
【００５１】
このようにして、本実施の形態では、転送情報取得回路３の手前のバッファ回路２でフレームの転送を待機することで、ハードウェア処理とソフトウェア処理との間のタイミングのずれが吸収され、適切なソフトウェア処理が行われ、内部識別子内に適切な転送情報が格納され、この結果、出力されたフレームは、適切な転送処理が行われることになる。
【００５２】
図２は、このフレーム転送処理装置１００におけるフレーム転送処理手順の大枠を示すフローチャートである。フレーム転送処理装置１００におけるフレーム転送処理手順は、大枠は３つの手順からなる。
【００５３】
すなわち、入力されたフレームは、まず、フロー番号探索処理が行われ（ステップＳ１００）、探索結果が付与されたフレームはバッファ回路２に入力され、ソフトエラーに対する対策処理が行われた後（ステップＳ２００）、転送情報取得処理により（ステップＳ３００）、フレームの転送情報が付与され、一連の転送処理が行われる。このことによって、ソフトエラーが発生しても、誤った処理が行われず、正常な宛先へフレームが転送される。
【００５４】
〔フレーム転送処理手順１（フロー番号探索処理）〕
まず、フレーム転送処理手順１として、最初のフロー番号探索処理の手順について、図３に示すフローチャートを用いて説明する。
【００５５】
このフローチャートにおいて、ステップＳ１０１，Ｓ１０２の処理はフレーム先頭処理部１１で行われ、ステップＳ１０３の処理はテーブル処理部１２および誤り検出・訂正部１４で行われ、ステップＳ１０４の処理はテーブル処理部１２で行われ、ステップＳ１０５，Ｓ１０６の処理はテーブル回復判定部１５で行われ、ステップＳ１０７，Ｓ１０９の処理はテーブル処理停止・再開部１７で行われ、ステップＳ１０８の処理はテーブル更新部１６で行われる。
【００５６】
〔ステップＳ１０１〕
ステップＳ１０１は、フレームの先頭の情報を取得する工程である。即ち、例えば、フレームが８バイトの内部識別子と６４バイトのイーサネットフレームとの組み合わせにおいて、先頭から、２０バイトを読み込む場合を考えてみる。内部識別子の中には例えば、内部識別子に続くフレームの長さ情報が格納されているとする。そうすると、ステップＳ１０１では、フレームの長さ情報、宛先ＭＡＣアドレス及び送信元ＭＡＣアドレスの３つの情報が読み取られる。
【００５７】
なお、内部識別子は、長さ情報だけではなく、前述したフロー識別子や、ユーザＩＤ情報などを格納することで、これらの情報を読み取ることも可能である。この情報は、次ステップ以降で用いるため、バッファメモリ等に格納する等を行うが、ステップＳ１０１には詳細は記載しない。
【００５８】
〔ステップＳ１０２〕
ステップＳ１０２は、ステップＳ１０１で取得した情報からフロー識別子を抽出する工程である。フロー識別子の抽出すなわち、演算方法は、任意であるが、例えば、６バイト長の情報として、宛先ＭＡＣアドレス、送信元ＭＡＣアドレスの末尾３バイトをつなぎ合わせ６バイトの情報とする演算を採用したとする。
【００５９】
より、具体的には、送信ＭＡＣアドレスが「００：００：００：００：００：０１」、宛先ＭＡＣアドレスが「００：００：００：１１：１１：０１」とする。すると、演算結果は、「００：００：０１：１１：１１：０１」となる。これをフロー識別子として抽出する。なお、演算方法や演算に用いた情報は例であり、ＶＬＡＮタグの値や長さ情報を用いても良く、任意に指定することが可能である。
【００６０】
〔ステップＳ１０３〕
ステップＳ１０３は、ステップＳ１０２で得たフロー識別子と一致するエントリを検索する工程である。メモリ部１３には、フロー識別子とフロー番号との関係を示すテーブル１８が保持されている。このテーブル１８において、フロー識別子には、誤り検出、または誤り訂正演算を行い計算した符号が付与されている。
【００６１】
フロー番号に紐付けたエントリの具体的な値であるフロー識別子と、ステップＳ１０２で得たフロー識別子とが一致するかどうか、検索するため、テーブル１８からエントリとしてフロー識別子を読みとる必要がある。
【００６２】
この時、テーブル１８から読み取ったフロー識別子（フロー識別子の読取値）の誤り検出・訂正を行うことによって、誤り検出がない場合、または誤りがあっても訂正可能な場合は、得られたフロー識別子を用いて、ステップＳ１０２で得たフロー識別子（フロー識別子の抽出値）と突合し、一致するエントリを探索する。
【００６３】
〔ステップＳ１０４〕
ステップＳ１０４は、フロー番号を取得する工程である。ステップＳ１０４では、ステップＳ１０３でフロー識別子が一致したエントリからフロー番号を取得する。例えば、テーブルの５１２行目において、フロー識別子「００：００：０１：１１：１１：０１」が一致したとすると、５１２番がフロー番号として取得される。
【００６４】
〔ステップＳ１０５〕
ステップＳ１０５は、ステップＳ１０３で得られた誤り検出または誤り訂正の結果から、エントリの品質情報を得る工程である。より、詳細には、ステップＳ１０３で得られる結果には、以下の４種類が考えられる。
【００６５】
すなわち、「誤り検出のみ（訂正可能かは不明）」（ケース１）、「誤り検出、且つ、訂正可能」（ケース２）、「誤り検出、且つ、誤り訂正不可（ケース３）」、「誤り検出なし」（ケース４）が考えられる。
【００６６】
これに加え、テーブル１８は冗長化されており、主テーブル１８−１でケース３の誤り検出が発生しても、従テーブル１８−２の同番号を参照することで、エントリの検索を続行することが可能である。
【００６７】
テーブル回復判定部１５は、これらの情報を保持し、ソフトウェア部（ＣＰＵ等）４へ情報を通知する。ソフトウェア部４側へ通知された場合、例えば、テーブル１８の冗長側のテーブル（従テーブル１８−２）へアクセスするタイミングで、ソフトウェア部４側では取得した情報を元に、誤りが発生したテーブル（主テーブル１８−１）におけるエントリを書き換えることで、検索に影響を与えずに、主テーブル１８−１を健全化することができる。なお、誤りのないテーブルのエントリ情報を、外部のサーバ６等で保持することも可能である。
【００６８】
〔ステップＳ１０６〕
ステップＳ１０６は、テーブル回復判定部１５において、エントリ毎のテーブル処理結果を基に、テーブル全体の回復が必要か否かを判定する工程である。例えば、ステップＳ１０５でケース３の検出が発生した場合、従テーブル１８−２を参照することが考えられるが、検出されたエントリではノイズやソフトエラー等様々な要因で検出されている可能性がある。
【００６９】
また、他のエントリでも同時多発的に発生している可能性がある。例えば、メモリの物理的に近い位置にエラー領域が波及している場合は、テーブル１８全体を速やかに回復させる必要がある。このように、エラーの発生状況によって、テーブル全体の回復要否を判定する工程である。１つのエントリでケース３の誤りを検出したら、直ちに、テーブル１８の回復を行うといった、回復の閾値は任意に設定可能である。
【００７０】
〔ステップＳ１０７〕
ステップＳ１０７は、ステップＳ１０６にて、テーブル回復必要と判定された場合の工程であって、テーブル１８の検索処理（テーブル処理）を停止する。停止するモードは「主テーブルのみ停止」（ケース１）、「従テーブルのみ停止」（ケース２）、「主従テーブル同時に停止」（ケース３）とする。
【００７１】
ケース１，２では、テーブル検索を、動作中のテーブルのみで行うため、誤りのあるエントリの検索は不可になるが、検索は継続することができる。
【００７２】
ケース３の場合は、主従テーブルを同時に停止するため、検索ができなく、このタイミングのみ、ユーザ疎通ができなくなる。しかし、テーブルの書き換えを複数回に分けて実施することで、１回当たりのテーブル書換え時間がユーザデータのバッファに蓄積可能な時間内であれば、音声や放送などリアルタイムな配信が必要な場合でも、サービス影響を最小限に抑えることができる。例えば、１０Ｍｂｐｓ程度の映像配信場合は、１ＫＢ程度のバッファが有れば、１ｍｓ以内の書換え時間が許容される。
【００７３】
〔ステップＳ１０８〕
ステップＳ１０８は、テーブルを更新するプロセスである。ステップＳ１０７で説明したように、更新するプロセスも３通り考えられる。「従テーブルのみ更新」（ケース１）、「主テーブルのみ更新」（ケース２）、「主従テーブル両方更新」（ケース３）である。これらの更新によって、蓄積したビット誤りを元のデータに戻せる。
【００７４】
〔ステップＳ１０９〕
最後に、検索処理であるテーブル処理を再開して、フロー番号探索手順の一通りの動作が完了する。なお、ステップＳ１０６でテーブル回復処理が不要な場合は、本フロー番号探索処理が完了する。
【００７５】
以上説明したように、フロー番号を探索する場合、テーブル１８にエントリとして保持するフロー識別子に誤り検出符号、または誤り訂正符号を付与し、尚且つ、テーブル１８を冗長化することによって、また、２面のテーブル検索の際に、エラー訂正不可となった場合に、従テーブル１８−２を参照するタイミングで主テーブル１８−１の書き換えを行う、或いは、エラーを検出しても、エラー発生のテーブル１９を別途持っておき、テーブル１９の内容によって、テーブル１８の一部、または全体を分割的に更新することで、検索速度を犠牲にすることなく、フロー番号を誤りなく、取得することが可能となる。
【００７６】
内部識別子に格納されたフレーム長と宛先情報を保護するためには、内部識別子に対する誤り訂正技術の適応が重要になる。誤り訂正符号はいくつかあるが、本実施の形態では宇宙線によるビット反転という発生頻度が極めて小さいエラーを対象とするため、単一エラー訂正、２つエラー検知を行うＳＥＣＤＥＤを行うことが回路インパクト上も大きくなく好適である。
【００７７】
本構成例の８バイトの内部識別子（［３１：０］）において計算したＳＥＣＤＥＤ符号を内部識別子の特定領域、例えば、内部識別子の［２３：１６］に埋め込むことによって、内部識別子内にソフトエラーが１ビット発生した場合は、誤り訂正が可能となる。この為、フレームの長さ情報及びフレームの宛先情報を確実に保護でき、後段の処理で誤りなくフレーム処理することが期待できる。詳細は後段で説明を付け加える。
【００７８】
〔フレーム転送処理手順２（バッファリング処理）〕
次に、フレーム転送処理手順２として、バッファ回路２におけるバッファリング処理の手順について説明する。正しいフロー番号が取得された情報は、入力されたフレームの内部識別子（例えばフレーム先頭の８バイトの領域）に格納され、バッファ回路２へ出力される。
【００７９】
図４に、バッファ回路２のより詳細な要部の構成を示す。バッファ回路２において、バッファメモリ部２１は、入力フレーム初段処理部２１−１と、識別子生成部２１−２と、バッファメモリ２１−３と、誤り検知部２１−４と、誤り訂正部２１−５とを備えている。また、バッファメモリ制御監視部２２は、識別子／フレーム書込部２２−１と、識別子／フレーム読出部２２−２とを備えている。
【００８０】
図５は、バッファ回路２内の処理を示すフローチャートである。このフローチャートにおいて、ステップＳ２０１の処理は入力フレーム初段処理部２１−１で行われ、ステップＳ２０２の処理は識別子生成部２１−２で行われる。また、ステップＳ２０３，Ｓ２０４，Ｓ２０５の処理は識別子／フレーム書込部２２−１で行われ、ステップＳ２０６の処理は識別子／フレーム読出部２２−２で行われる。また、ステップＳ２０７の処理は誤り検知部２１−４で行われ、ステップＳ２０８，Ｓ２０９の処理は誤り訂正部２１−５で行われる。
【００８１】
〔ステップＳ２０１〕
ステップＳ２０１は、誤り検出処理によってフレーム内にエラーのないことが確認されたフレームについて、フレームを特定し、フレーム処理を誤りなく行うために、フレームの属性をフレームと確実に関連付けを行う最初の重要な工程である。
【００８２】
このステップＳ２０１では、入力されたフレームが備える固有の情報を入力フレームの属性情報として取得する。この例では、入力フレームの属性情報として、入力されたフレームの長さ情報と入力されたフレームの宛先情報を取得する。以下、フレームの長さ情報を＃１とし、フレームの宛先情報を＃２とする。また、入力されたフレームをＦとする。
【００８３】
この例において、フレームの長さ情報＃１は、入力されたフレームＦの長さを計測することによって取得する。また、フレームの宛先情報＃２は、例えば、入力されたフレームＦに埋め込まれている宛先ＭＡＣアドレスと通信装置が保有しているユーザ情報と照らし合わせるなどして、フレームＦの送信先を特定する番号が割り当てられるので、この割り当てられる番号をフレームの宛先情報＃２として取得する。この例では、内部識別子に埋め込まれているフロー番号を宛先情報＃２として取得する。
【００８４】
また、ステップＳ２０１では、後段のステップでフレームＦに誤りが重畳した場合に検出できるように、フレーム全体に対して誤り検出符号を算出し、この算出した誤り検出符号をフレームＦの末尾に付与する。この例では、ＣＲＣ８（Cyclic Redundancy Check 8）を誤り検出符号として付与する。なお、フレーム全体に対して算出する誤り検出符号はＣＲＣ８に限らず、類似の様々な誤り検出符号形式が適応可能である。
【００８５】
〔ステップＳ２０２〕
ステップＳ２０２は、ステップＳ２０１で得られた入力フレームの属性情報（＃１、＃２）とフレームＦとを紐付けるための識別子を生成する工程である。
【００８６】
この識別子の生成工程では、固定長の識別子を用意して、この識別子にステップＳ２０１で得られた入力フレームの属性情報（＃１，＃２）を埋め込む。この際、入力フレームの属性情報（＃１，＃２）を割り当てる識別子内の領域を予め決めおくとよい。この入力フレームの属性情報（＃１，＃２）を識別子に埋め込むことによって、入力されたフレームＦと入力フレームの属性情報（＃１，＃２）との紐付が行われる。以下、このステップＳ２０２で生成する識別子をＳとする。
【００８７】
識別子Ｓへの入力フレームの属性情報（＃１，＃２）の埋め込みが完了すると、識別子全体或いは入力フレームの属性情報（＃１，＃２）が埋め込まれた領域に対して誤り訂正可能なように、識別子Ｓの全体で、誤り訂正符号の計算を行う。
【００８８】
例えば、誤り訂正符号として、単一エラー訂正、２つエラー検出を行うＳＥＣＤＥＤ符号を適応すれば、実際に発生するソフトエラーの誤りパタンをカバーすることが可能である。
【００８９】
そして、この算出した誤り訂正符号を、識別子Ｓ内の特定領域に埋め込む。なお、識別子Ｓに埋め込む誤り訂正符号はＳＥＣＤＥＤ符号に限られるものではなく、要件によって別の種類の誤り訂正符号を適宜設定可能である。
【００９０】
〔ステップＳ２０３〕
ステップＳ２０３は、フレームＦのバッファメモリ２１−３へのバッファリング工程である。先のステップＳ２０２では、フレームＦから取得する情報を元に識別子Ｓを生成するため、識別子Ｓのバッファメモリ２１−３へのバッファリングがフレームＦよりも遅れる。
【００９１】
このため、ステップＳ２０３では、フレームＦのバッファリングを行う前に、識別子Ｓをバッファリングするバッファメモリ２１−３内の領域を予約（確保）する。そして、この予約した領域を避けて、フレームＦをバッファメモリ２１−３に蓄積させる。
【００９２】
〔ステップＳ２０４〕
ステップＳ２０４は、識別子Ｓのバッファメモリ２１−３へのバッファリング工程である。ここでは、ステップＳ２０３で予約したバッファメモリ２１−３内の領域に、ステップＳ２０２で生成した識別子Ｓを蓄積させる。
【００９３】
〔ステップＳ２０５〕
ステップＳ２０５は、フレームＦと識別子Ｓのバッファリング状態を制御監視する工程である。ここでは、例えばフレームＦが全てバッファリングされているか否かを監視し、状態を保持し、後工程の指示が開始されるまで、蓄積されたフレームＦをバッファメモリ２１−３内に待機させるといった制御などを担う。
【００９４】
〔ステップＳ２０６〕
ステップＳ２０６では、バッファメモリ２１−３に対して出力指示を出すことにより、バッファメモリ２１−３から識別子Ｓの全体を少なくとも含むフレーム（識別子Ｓ＋フレームＦ）の一部を取り出す。
【００９５】
フレーム処理が必要になった際には、バッファメモリ２１−３に対して、出力指示を出す。バッファメモリ２１−３がＦＩＦＯ（first in first out）方式の場合、出力指示があると、バッファメモリ２１−３に最初に格納されたフレームが最初に出力される。
【００９６】
すなわち、フレームが出力される際は、最初に格納されたフレームの識別子Ｓから出力されることになる。この際、バッファメモリ２１−３のビット幅が識別子Ｓのビット数より大きく、尚且つ、バッファメモリ２１−３の１層目先頭から識別子Ｓが格納されている場合は、少なくとも、バッファメモリ２１−３の１層目のみ取り出せば、取り出したフレームの一部には、識別子Ｓを全て含むことになる。
【００９７】
〔ステップＳ２０７〕
ステップＳ２０７では、読み出した識別子Ｓに埋め込まれている誤り訂正符号（ＳＥＣＤＥＤ符号）を読み取り、この読み取った誤り訂正符号を用いて識別子Ｓの誤りの検知を行い、誤りが検知された場合、その検知された識別子Ｓの誤りが訂正可能であるか否かの判断を行う。
【００９８】
この場合、ソフトエラー等によって、識別子Ｓ内のビット誤りが１箇所であれば、誤りが訂正可能であると判断する。ソフトエラー等によって、識別子Ｓ内のビット誤りが２箇所以上であれば、誤りが訂正不能であると判断する。ここで、誤りが訂正可能である場合にはステップＳ２０８へ進み、誤りが訂正不能である場合にはステップＳ２０９へ進む。
【００９９】
〔ステップＳ２０８〕
ステップＳ２０８では、ステップＳ２０７で読み出した誤り訂正符号を用いて、識別子Ｓの誤り訂正を行う。この誤り訂正によって、バッファメモリ２１−３から読み出された識別子Ｓに含まれているフレームの長さ情報＃１とフレームの宛先情報＃２は、誤りのない正しい情報であることが担保されることになる。
【０１００】
また、バッファメモリ２１−３からフレームＦの末尾まで読み出して処理するのではなく、識別子Ｓに入力フレームの属性情報（＃１，＃２）を格納し、尚且つ、識別子Ｓに誤り訂正符号を付与するだけで、バッファメモリ２１−３の１層目のみ読み出すといった簡易な処理で、バッファメモリ２１−３に蓄積されているフレームＦに対する誤りのない正しい情報が取得できるというメリットが生まれる。
【０１０１】
〔ステップＳ２０９〕
ステップＳ２０７において、誤りが訂正不能であると判断された場合、識別子Ｓ内のフレームの長さ情報＃１とフレームの宛先情報＃２には信頼性がないと判断される。これらの情報の中でフレームの長さ情報＃１が間違っている場合は、バッファメモリ２１−３に他のフレームが格納されている場合、フレームＦの末尾と他のフレームの識別子Ｓの先頭との境目が不明瞭になり、逐次処理されるフレームＦは全て間違って処理されてしまう。このため、バッファメモリ２１−３に格納されているフレームは、速やかにクリアされなければならない。
【０１０２】
また、フレーム処理中にソフトエラーによる実装した誤り訂正可能なビットエラーが発生しても、フレームの長さ情報＃１、フレームの宛先情報＃２の誤りを訂正する簡易な処理によって、フレーム処理を停止させることなく、処理を行うことができる。
【０１０３】
また、実装した誤り訂正では訂正できないエラーであっても、バッファメモリ２１−３やバッファメモリ２１−３の制御に対して、廃棄命令を行うステップを処理に設けることで、バッファメモリ２１−３に蓄積されたフレームを犠牲にするだけで、その後のフレーム処理には全く影響を与えることがない。
【０１０４】
〔フレーム転送処理手順３（転送情報取得処理）〕
最後の全体手順（フレーム転送処理手順３）として、転送情報取得処理の手順について、図６に示すフローチャートを用いて説明する。
【０１０５】
このフローチャートにおいて、ステップＳ３０１，Ｓ３０２の処理はフレーム先頭処理部３１で行われ、ステップＳ３０３の処理はテーブル処理部３２および誤り検出・訂正部３４で行われ、ステップＳ３０４の処理はテーブル処理部３２で行われ、ステップＳ３０５，Ｓ３０６の処理はテーブル回復判定部３５で行われ、ステップＳ３０７，Ｓ３０９の処理はテーブル処理停止・再開部３７で行われ、ステップＳ３０８の処理はテーブル更新部３６で行われる。
【０１０６】
この転送情報取得処理は、最終的に、フロー番号が付与されたフレームが転送される際に、フロー番号から転送情報を取得する処理である。この転送情報取得処理は、最終的に、誤りなく、取得したフロー番号を用いて、誤りなく、転送情報を取得する処理となる。
【０１０７】
〔ステップＳ３０１〕
ステップＳ３０１では、フレームの先頭の情報（本例では８バイト長とする。また、ここでは、識別子として、フロー番号を保持し、フロー番号は、誤り訂正符号が付与されている）を読み取る。読み取る際に、誤り検出が行われ、誤りが検出された場合は訂正を行う。
〔ステップＳ３０２〕
ステップＳ３０２では、取得した情報からフロー番号を抽出する。
【０１０８】
〔ステップＳ３０３〕
ステップＳ３０３では、メモリ部３３の主テーブル（第１のフロー番号−転送情報テーブル）３８−１のエントリ内にあるフロー番号を誤り検出または誤り訂正を行いながら、読み込み、ステップＳ３０２で得たフロー番号、例えば、テーブルの２５６行目であればフロー番号２５６番として、主テーブル３８−１にある転送情報を読み取る。
【０１０９】
ここで、誤り検出が行われた場合は、訂正可能であれば、訂正し、正しい転送情報を取得し、訂正不可であれば、テーブル３８が冗長化されているので、従テーブル（第２のフロー番号−転送情報テーブル）３８−２に対して読み取りを行い、正しい転送情報を取得する。
【０１１０】
〔ステップＳ３０４〕
転送情報は、全体、または個別に誤り検出符号または誤り訂正符号が付与されており、ソフトエラーによる誤りを訂正し、それらの情報が取得される。取得した情報は、転送先を示すヘッダとして、ＶＬＡＮ−ＩＤ等の情報がフレームの先頭部分及びフレームのヘッダ部に付与される。
【０１１１】
〔ステップＳ３０５〕
ステップＳ３０５では、転送情報を読み取った際に、誤り検出や訂正の情報を保持し、ソフトウェア部（ＣＰＵ等）４へ通知する。
【０１１２】
〔ステップＳ３０６〕
ステップＳ３０６では、ステップＳ３０５で保持した誤り情報やソフトウェア部４へ通知された情報毎に、テーブル全体の回復が必要か否かを判定する。もし、テーブル回復が不要な場合、転送処理は完了する。
【０１１３】
〔ステップＳ３０７〜Ｓ３０９〕
ステップＳ３０７〜Ｓ３０９は、ステップＳ３０６でテーブル回復必要な場合の動作である。本動作は、テーブル３８を回復する際に、テーブル処理の全体、または一部を停止するフローである。
【０１１４】
更新のモードにより、テーブル更新部３６がテーブル３８を更新する。更新後は、停止したテーブル３８からの転送情報の読み取りを開始し、転送情報の取得は完了する。なお、その処理動作は、図３に示したステップＳ１０７〜Ｓ１０９と類似しており、詳細な説明は割愛する。また、テーブル３８の回復についても、同じ手順で回復が可能であるので、詳細な説明は割愛する。
【０１１５】
以上説明したように、本実施の形態のフレーム転送処理方法では、入力したフレームに対するフロー番号探索処理において、フレームから抽出した識別情報と照らし合わせるテーブル処理を行う場合、テーブルのエントリ情報にソフトエラーによる誤りが発生しても、テーブルが冗長化され、尚且つ、誤り検出符号または誤り訂正符号によるパリティがエントリ毎（ワード単位）で付与されているので高いソフトエラー耐性がある。すなわち、ソフトエラーが発生しても、正しい転送先へフレームを転送することが可能である。
【０１１６】
加えて、誤り検知有無や訂正可否情報を別途テーブルに設けることで、ソフトエラーによるテーブル全体の回復要否判断によりテーブル全体の書き換えをソフトエラーが蓄積してから行うことによって、検索中のテーブル更新を回避でき、テーブル処理速度の高速化、並びに、処理遅延低減が可能となる。
【０１１７】
更には、ネットワークの仮想化では、フロー番号抽出回路や後段の転送情報取得回路でのテーブルに対するソフトウェア処理も介在するため、中間にバッファ回路を設け、尚且つ、フレーム先頭に付与されるフロー番号に誤り訂正符号を付与し、尚且つ、フレームがバッファリングされる前にバッファメモリにフロー番号を含む識別子が蓄積される領域を予約することによって、バッファ回路での処理遅延を低下させ、尚且つ、フレーム書き込みのための余計なフレームバッファが不要となり、回路規模を削減することもできる。
【０１１８】
〔実施の形態の拡張〕
以上、実施の形態を参照して本発明を説明したが、本発明は上記の実施の形態に限定されるものではない。本発明の構成や詳細には、本発明の技術思想の範囲内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１１９】
１…フロー番号探索回路、２…バッファ回路、３…転送情報取得回路、４…ソフトウェア部（ＣＰＵ等）、５…保守網、６…サーバ、１１…フレーム先頭処理部、１２…テーブル処理部、１３…メモリ部、１４…誤り検出・訂正部、１５…テーブル回復判定部、１６…テーブル更新部、１７…テーブル処理停止・再開部、１８…テーブル（フロー識別子−フロー番号テーブル）、１８−１…主テーブル（第１のフロー識別子−フロー番号テーブル）、１８−２…従テーブル（第２のフロー識別子−フロー番号テーブル）、２１…バッファメモリ部、２１−１…入力フレーム初段処理部、２１−２…識別子生成部、２１−３…バッファメモリ、２１−４…誤り検知部、２１−５…誤り訂正部、２２…バッファメモリ制御監視部、２２−１…識別子／フレーム書込部、２２−２…識別子／フレーム読出部、３１…フレーム先頭処理部、３２…テーブル処理部、３３…メモリ部、３４…誤り検出・訂正部、３５…テーブル回復判定部、３６…テーブル更新部、３７…テーブル処理停止・再開部、３８…テーブル（フロー番号−転送情報テーブル）、３８−１…主テーブル（第１のフロー番号−転送情報テーブル）、３８−２…従テーブル（第２のフロー番号−転送情報テーブル）、１００…フレーム転送処理装置。
【図１】
2019050536.tif 000003
【図２】
2019050536.tif 000004
【図３】
2019050536.tif 000005
【図４】
2019050536.tif 000006
【図５】
2019050536.tif 000007
【図６】
2019050536.tif 000008
【図７】
2019050536.tif 000009