(57)【特許請求の範囲】
【請求項１】
パケットを構成するデータを入力する入力手段と、
前記入力手段に入力されたデータに含まれるチェックサム演算を行うべき複数の演算領域を指定する設定情報を保持する保持手段と、
前記設定情報により指定された複数の演算領域を占めるデータの各々に対して、演算を行う演算手段と、
前記演算手段による前記複数の演算領域を占めるデータの各々に対する演算結果と前記設定情報の一部のデータに基づいて、前記パケットのチェックサム演算の結果を取得する取得手段と、
前記チェックサム演算の結果を出力する出力手段と
を備え、
前記設定情報の一部のデータとして、前記設定情報には前記入力手段に入力されるデータの長さの情報が含まれ、
前記取得手段は、前記複数の演算領域を占めるデータの各々に対する演算結果と前記長さの情報とを加算した結果をビット反転したものを、前記チェックサム演算の結果として取得することを特徴とする演算装置。
【請求項２】
前記演算手段は、前記入力手段に入力されたデータを所定のビット長のブロックに分割し、各ブロックを加算する演算を行うことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記入力手段に入力されたデータは、ＩＰヘッダ、及び、チェックサム領域が０に設定されたＴＣＰヘッダ、及び、ＴＣＰペイロードを連結したデータであり、
前記設定情報は、前記ＩＰヘッダに含まれるプロトコル番号を示す領域と、前記ＩＰヘッダに含まれる送信元ＩＰアドレス及び宛先ＩＰアドレスを示す領域と、前記ＴＣＰヘッダ及び前記ＴＣＰペイロードを連結した領域と、を前記複数の演算領域として設定し、
前記データの長さは、前記ＴＣＰヘッダ及び前記ＴＣＰペイロードを連結した領域の長さを示し、
前記取得手段は、前記チェックサム演算の結果としてＴＣＰチェックサムを取得する
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記出力手段は、ＩＰヘッダ、前記取得手段により取得されたＴＣＰチェックサムが設定されたＴＣＰヘッダ、及び、ＴＣＰペイロードを出力することを特徴とする請求項３に記載の演算装置。
【請求項５】
前記演算手段は、前記複数の演算領域に対応する複数の演算器を備えることを特徴とする請求項１から４のいずれか１項に記載の演算装置。
【請求項６】
請求項１から５のいずれか１項に記載の演算装置を備えることを特徴とする通信装置。
【請求項７】
演算装置の演算方法であって、
パケットを構成するデータを入力する入力工程と、
入力されたデータに含まれるチェックサム演算を行うべき複数の演算領域を指定する設定情報を保持する保持工程と、
前記設定情報により指定された複数の演算領域を占めるデータの各々に対して、演算を行う演算工程と、
前記複数の演算領域を占めるデータの各々に対する演算結果と前記設定情報の一部のデータに基づいて、前記パケットのチェックサム演算の結果を取得する取得工程と、
前記チェックサム演算の結果を出力する出力工程と
を備え、
前記設定情報の一部のデータとして、前記設定情報には前記入力工程において入力されるデータの長さの情報が含まれ、
前記取得工程では、前記複数の演算領域を占めるデータの各々に対する演算結果と前記長さの情報とを加算した結果をビット反転したものを、前記チェックサム演算の結果として取得することを特徴とする演算方法。
【請求項８】
コンピュータに、請求項７に記載の各工程を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算装置及び演算方法、通信装置に関し、特に、チェックサム演算を行う技術に関する。
【背景技術】
【０００２】
通信処理において行われるチェックサム演算は、一般にプロセッサへの負荷が大きいため、単純に実装すると通信のスループットが低下する可能性がある。そこで、チェックサム演算をハードウェアで、かつＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送中に行い、データ転送とチェックサム演算の処理を並列化させることが知られている。
【０００３】
また、ＴＣＰ／ＩＰ通信において利用されるＴＣＰヘッダを生成するには、ＴＣＰチェックサムを演算する必要がある。ＴＣＰチェックサムの演算においては、疑似ヘッダと呼ばれるデータに対してもチェックサム演算を実施する必要がある。そこで、疑似ヘッダに対するチェックサム演算をいかに効率的に行うかが課題となる。
【０００４】
特許文献１には、汎用のＣＰＵの制御に基づき疑似ヘッダを作成し、作成した疑似ヘッダをチェックサム処理部へ送ることにより、この疑似ヘッダに基づくチェックサムを計算することが記載されている。
【０００５】
特許文献２には、ＩＰヘッダ及びＴＣＰヘッダに基づき疑似ヘッダを専用のハードウェアにより作成し、この疑似ヘッダに基づきチェックサムを計算することが記載されている。
【０００６】
特許文献３には、疑似ヘッダのチェックサム計算に必要な制御情報をチェックサムヘッダとしてネットワークアダプタ外で生成し、それをネットワークアダプタに転送することで、ネットワークアダプタ内でチェックサム演算を行うことが記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−１０２５５６号公報
【特許文献２】特開２００６−３０３７６５号公報
【特許文献３】特開平６−７８０２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１の構成のように、汎用のＣＰＵの制御に基づき疑似ヘッダを外部で作成し、それをチェックサム演算器に転送する場合、その疑似ヘッダ作成と転送のそれぞれに処理時間が必要となる。このため、チェックサム演算の高速化が困難であるという課題があった。
【０００９】
特許文献２の構成のように、専用のハードウェアによりＩＰヘッダ及びＴＣＰヘッダに基づき疑似ヘッダを作成する場合、ＴＣＰヘッダ及びＩＰヘッダを解析する処理をハードウェアにより実装する必要がある。このため、回路規模が大きくなり、ＬＳＩコストや消費電力コストの面で不利になるという課題があった。
【００１０】
特許文献３のように、疑似ヘッダのチェックサム演算のための制御情報を作成し、チェックサム演算器にその制御情報を転送する場合にも、同様に、制御情報の作成と転送とのそれぞれに処理時間が必要となる。このため、チェックサム演算の高速化が困難であるという課題があった。
【００１１】
本発明は上記課題に鑑みなされたものであり、大きなハードウェア資源を要せずに、高速にチェックサムを計算する技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明による演算装置は以下の構成を備える。即ち、
パケットを構成するデータを入力する入力手段と、
前記入力手段に入力されたデータに含まれるチェックサム演算を行うべき複数の演算領域を指定する設定情報を保持する保持手段と、
前記設定情報により指定された複数の演算領域を占めるデータの各々に対して、演算を行う演算手段と、
前記演算手段による前記複数の演算領域を占めるデータの各々に対する演算結果と前記設定情報の一部のデータに基づいて、前記パケットのチェックサム演算の結果を取得する取得手段と、
前記チェックサム演算の結果を出力する出力手段と
を備え、
前記設定情報の一部のデータとして、前記設定情報には前記入力手段に入力されるデータの長さの情報が含まれ、
前記取得手段は、前記複数の演算領域を占めるデータの各々に対する演算結果と前記長さの情報とを加算した結果をビット反転したものを、前記チェックサム演算の結果として取得する。
【発明の効果】
【００１３】
本発明によれば、大きなハードウェア資源を要せずに、高速にチェックサムを計算する技術を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】チェックサム演算装置を具備した通信装置の構成を示すブロック図。
【図２】通信装置における処理シーケンスを示す図。
【図３】チェックサム演算前のＴＣＰ／ＩＰパケットの構成例を示す図。
【図４】レジスタの設定情報の構成例を示す図。
【図５】レジスタの設定情報の内容を説明する図。
【図６】ＴＣＰ／ＩＰパケットの演算領域と疑似ヘッダを示す図。
【図７】通信装置における処理シーケンスの詳細を示す図。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１６】
＜実施形態１＞
（通信装置の構成）
以下、本発明の一実施形態（実施形態１）を説明する。図１は、本実施形態に係るチェックサム演算装置１００／１６０を具備した通信装置００１の構成を示すブロック図である。図１のように、通信装置００１は、インターフェース部１４３を介してネットワーク１５０との間でパケットデータを送受信する。本実施形態では、ＩＰヘッダ、ＴＣＰヘッダ、及び、ＴＣＰペイロードを連結したデータであるＴＣＰ／ＩＰパケットを対象データとしてチェックサム演算を行う構成例を説明する。
【００１７】
図１のように、通信装置００１のシステムバス１４２には、ＣＰＵ１４０、メモリ１４１、ライト転送装置１２０、チェックサム演算装置１００／１６０、及び、リード転送装置１３０の６つのモジュールが接続されている。
【００１８】
ＣＰＵ１４０は、通信装置００１で実行される通信処理全般の処理・制御を担う。具体的には、ＣＰＵ１４０が担う処理・制御には、ＴＣＰ通信を行うためのプロトコル処理や、各種モジュールの制御が含まれる。
【００１９】
メモリ１４１は書き込み可能メモリであり、ネットワーク１５０と通信装置００１との間で送受信されるパケットデータや、ＣＰＵ１４０や各種モジュールが処理を行うために必要な一時データが格納される。
【００２０】
ライト転送装置１２０は、チェックサム演算装置１６０のデータ出力バス１６１から受信したデータをメモリ１４１へ転送する処理を担うモジュールである。ライト転送装置１２０は、ライト部１２１、ライト制御部１２２、及び、レジスタ部１２３を備える。ライト部１２１は、システムバス１４２とデータ出力バス１６１との間でデータの受け渡しを行う。レジスタ部１２３は、ＣＰＵ１４０が、ライト転送装置１２０へ命令をセットしたり、ステータスを確認したりするために用いられる。ライト制御部１２２は、ライト転送装置１２０の全体制御を担う。
【００２１】
リード転送装置１３０は、メモリ１４１に格納されたデータをチェックサム演算装置１００へ転送する処理を担うモジュールである。リード転送装置１３０は、リード部１３１、リード制御部１３２、及び、レジスタ部１３３を備える。リード部１３１は、システムバス１４２とデータ入力バス１０３との間でデータの受け渡しを行う。レジスタ部１３３は、ＣＰＵ１４０が、リード転送装置１３０へ命令をセットしたり、ステータスを確認したりするために用いられる。リード制御部１３２は、リード転送装置１３０の全体制御を担う。
【００２２】
インターフェース部１４３は、通信装置００１におけるネットワーク１５０とのインターフェースである。
【００２３】
チェックサム演算装置１００は、以下の機能を持つ。すなわち、データ入力バス１０３から入力されたＴＣＰ／ＩＰパケットについてＴＣＰチェックサムを計算し、ＴＣＰヘッダの所定の場所に格納する。そして、ＴＣＰチェックサムを格納したＴＣＰ／ＩＰパケットをインターフェース部１４３へ送信する機能を持つ。このような機能を実現するために、チェックサム演算装置１００は、チェックサム制御部１０４、加算器１０５、レジスタ部１０６、バッファ部１０７、演算器１（１０８）、演算器２（１０９）、及び、演算器３（１１０）を備える。さらに、チェックサム演算装置１００は、チェックサム演算装置１００内外の機能要素間でデータを送受信するために、データ出力バス１０１、レジスタアクセスバス１０２、及び、データ入力バス１０３を備える。
【００２４】
データ出力バス１０１は、インターフェース部１４３と接続され、チェックサム演算装置１００が、ＴＣＰ／ＩＰパケットを出力する際に使用するバスである。レジスタ部１０６は、ＣＰＵ１４０が、チェックサム演算装置１００へ命令をセットしたり、ステータスを確認したりするためのレジスタである。レジスタ部１０６にセットされたデータが、設定信号１１６により、チェックサム制御部１０４に通知される。また、チェックサム制御部１０４から、チェックサム演算装置１００のステータスや処理結果が、通知信号１１７を使用してレジスタ部に通知される。ＣＰＵ１４０のレジスタ部１０６へのアクセスの際には、レジスタアクセスバス１０２が使用される。
【００２５】
チェックサム制御部１０４は、チェックサム演算装置１００の全体の制御を担う。チェックサム制御部１０４は、その全体をハードウェアの構成により実現してもよいし、あるいは、ＣＰＵとそのＣＰＵが実行する処理コード等を含む構成により実現してもよい。
【００２６】
加算器１０５は、入力Ａ１１３、入力Ｂ１１４をもとに、加算結果１１５を出力する。入力Ａ１１３が１６ビットの信号で、入力Ｂも１６ビットの信号である場合に、加算結果１１５は、以下のように算出される。
（１）入力Ａ１１３と入力Ｂ１１４を加算する。
（２）加算結果１１５の１７ビット目が‘１’になった場合は、加算結果の１７ビット目を‘０’にし、加算結果に‘１’を足す。
バッファ部１０７は、リード転送装置１３０からデータを受信した際や、チェックサム制御部１０４からのデータをネットワークへ送信する際に、一時的にデータを保持するものである。チェックサム制御部１０４からのバッファ制御信号１１３により、チェックサム出力バス１１８と、データ入力バス１０３とのどちらのバスからのデータをバッファリングするのかを特定する制御情報が送信される。また、バッファの状態（例えば、Ｆｕｌｌ／Ｅｍｐｔｙ）情報がチェックサム制御部１０４へ送られる。
【００２７】
演算器１（１０８）、演算器２（１０９）、演算器３（１１０）は、チェックサム演算の処理部になる。各演算器内部には、１６ビットのデータが記憶されている（演算器に記憶されているデータを、以下、「記憶値」という）。各演算器は以下の計算を行う。
（１）記憶値とデータ入力バスの所定データ（１６ビット）を加算し、記憶値を上書きする。
（２）上記上書きされた記憶値の１７ビット目が‘１’になった場合は、１７ビット目を‘０’にし、記憶値に‘１’を足したものを新たな記憶値とする。
これは、ＴＣＰヘッダのチェックサム演算においては、演算対象のデータを所定のビット長（１６ビット）のブロックに分割し、各ブロックを加算する演算をすることに対応したものである。上記記憶値が、演算結果信号１１２により、チェックサム制御部１０４へ送られる。また、チェックサム制御部１０４から、記憶値の初期化要求や、演算データ範囲等の制御情報が各演算値について送信される。制御情報の送信には、演算制御信号１１１が使用される。以上がチェックサム演算装置１００の機能概要である。
【００２８】
チェックサム演算装置１６０は、チェックサム演算装置１００と同一の機能構成を有するが、データの送受信の向きが異なる。
【００２９】
（データ送信処理）
次に、通信装置００１のデータ送信時における処理について、図２を用いて説明する。図２は、通信装置００１内部の各モジュール間におけるデータ／制御情報の送受信におけるフローを表している。
【００３０】
まず、ＣＰＵ１４０は、メモリ１４１へ送信するパケットを生成する（Ｓ２０１）。ＴＣＰ／ＩＰｖ４を使用した場合における、ＣＰＵ１４０によるパケット作成の一例について図３を参照して説明する。図３は１５００Ｂｙｔｅｓからなる、ＴＣＰ／ＩＰｖ４パケットの構成を示したものである。ＩＰｖ４ヘッダ３００は２０Ｂｙｔｅｓ、ＴＣＰヘッダは２０Ｂｙｔｅｓ、ペイロードは１４６０Ｂｙｔｅｓで構成される。ここで、ＴＣＰヘッダに含まれるＣｈｅｃｋｓｕｍフィールド（チェックサム領域）３０３は空、つまり、ゼロ（０）データでよい。これは、チェックサム演算装置１００で、チェックサム演算を実行し、結果を本フィールドに上書きするためである。このようなパケットをＣＰＵ１４０は、メモリ１４１に作成しておく。
【００３１】
パケットを作成したＣＰＵ１４０は、チェックサム演算装置１００に対して、チェックサム演算のための命令をセット（設定）する（Ｓ２０２）。ここでチェックサム演算装置１００のレジスタ部１０６の詳細について、図４を用いて説明する。レジスタ部１０６は全８個のフィールドを備えている。各フィールドそれぞれについて説明する。
・Ｆ＿ＳＴＡＲＴ４０１…ＣＰＵ１４０は、本フィールド以外の全てのフィールドの設定が終了した際に、本フィールドに開始トリガーとしてあらかじめ定められた値をセットする。チェックサム演算装置１００は、そのセットにおけるライト（書込み）を検知し、演算を開始する。
・Ｆ＿ＰＫＴ＿ＬＥＮ４０２…データ入力バスから入力されるパケット長を指定するフィールド
・Ｆ＿Ａ１＿ＨＥＡＤ４０３…演算領域１の開始位置をセットするフィールド。
・Ｆ＿Ａ１＿ＬＥＮ４０４…演算領域１の範囲をセットするフィールド。
・Ｆ＿Ａ２＿ＨＥＡＤ４０５…演算領域２の開始位置をセットするフィールド。
・Ｆ＿Ａ２＿ＬＥＮ４０６…演算領域２の範囲をセットするフィールド。
・Ｆ＿Ａ３＿ＨＥＡＤ４０７…演算領域３の開始位置をセットするフィールド。
・Ｆ＿Ａ３＿ＬＥＮ４０８…演算領域３の範囲をセットするフィールド。
・Ｆ＿ＣＨＥＣＫＳＵＭ４０９…ＴＣＰフィールドのＣＨＡＣＫＳＵＭフィールドの位置を指定するフィールド。
ＣＰＵ１４０は、チェックサム演算装置１００に対し上記の各フィールド４０１〜４０８のセットを行い、その後、開始をセットする（Ｓ２０３）。これは、Ｆ＿ＳＴＡＲＴ４０１に所定の値をライトすることにより行われる。開始をセットされたチェックサム演算装置１００は、データ入力バス１０３からのデータ待ち続ける状態になる（Ｓ２０４）。
【００３２】
ＣＰＵ１４０は、リード転送装置１３０にパケット転送命令をセットする（Ｓ２０５）。詳細については割愛するが、メモリ１４１に用意されたＴＣＰ／ＩＰｖ４パケットをチェックサム演算装置１００へ転送するように制御情報をセットする。その後、開始をセットする（Ｓ２０６）。開始をセットされたリード転送装置１３０は、メモリ１４１からＴＣＰ／ＩＰｖ４パケットをリードし（Ｓ２０７）、チェックサム演算装置１００への送信を開始する（Ｓ２０８）。
【００３３】
ＴＣＰ／ＩＰｖ４パケットを受信したチェックサム演算装置１００は、先にＳ２０２でセットされた内容に従って、チェックサム処理を実行する（Ｓ２０９）。チェックサム処理が完了すると（Ｓ２１０）、インターフェース部１４３に対し、ＴＣＰヘッダのＣＨＥＣＫＳＵＭフィールドに正しい値の格納されたＴＣＰ／ＩＰｖ４パケットを送信する（Ｓ２１１）。
【００３４】
リード転送装置１３０、チェックサム演算装置１００は、各々処理が完了したら、ＣＰＵ１４０に対し割り込み信号などを利用して完了通知（それぞれ、Ｓ２１２、Ｓ２１３）を行ってもよい。以上が、大まかな処理フローである。
【００３５】
次に、チェックサム演算装置１００の内部処理フローについて、図３のパケットを送信する場合を例に詳細に説明する。まず、レジスタ部１０６にセットする値について図５を用いて説明する。
【００３６】
Ｆ＿ＰＫＴ＿ＬＥＮ４０２には、パケット長をセットする。図３の例では、パケット長１５００Ｂｙｔｅｓであるので、‘１５００’をセットする。Ｆ＿Ａ１＿ＨＥＡＤ４０３には、ＩＰｖ４ヘッダのＰｒｏｔｏｃｏｌフィールドの位置をセットする。パケット先頭から数えて、先頭データを０Ｂｙｔｅ目とすると、９Ｂｙｔｅｓ目にあるので、‘９’を入力する。
【００３７】
Ｆ＿Ａ１＿ＬＥＮ４０４には、上記Ｐｒｏｔｏｃｏｌフィールドの長さである‘１’（Ｂｙｔｅ）を設定する。Ｆ＿Ａ２＿ＨＥＡＤ４０５には、ＩＰｖ４ヘッダのＳｏｕｒｃｅ  ＩＰ  Ａｄｄｒｅｓｓフィールドの位置（‘１２’）をセットする。Ｆ＿Ａ２＿ＬＥＮ４０６には、Ｓｏｕｒｃｅ  ＩＰ  Ａｄｄｒｅｓｓ  フィールド（４Ｂｙｔｅｓ）と、Ｄｅｓｔｉｎａｔｉｏｎ  ＩＰ  Ａｄｄｒｅｓｓフィールド（４Ｂｙｔｅｓ）を足し合わせた長さ（‘８’Ｂｙｔｅｓ）をセットする。Ｓｏｕｒｃｅ  ＩＰ  Ａｄｄｒｅｓｓフィールドは送信元ＩＰアドレスフィールドであり、Ｄｅｓｔｉｎａｔｉｏｎ  ＩＰ  Ａｄｄｒｅｓｓフィールドは宛先ＩＰアドレスフィールドである。
【００３８】
Ｆ＿Ａ３＿ＨＥＡＤ４０７には、ＴＣＰヘッダの位置（‘２０’）をセットする。Ｆ＿Ａ３＿ＬＥＮ４０８には、ＴＣＰヘッダの長さ（２０Ｂｙｔｅｓ）とペイロードの長さ（１４６０Ｂｙｔｅｓ）の合計（‘１４８０’Ｂｙｔｅｓ）をセットする。Ｆ＿ＣＨＥＣＫＳＵＭ４０９には、ＴＣＰチェックサムの位置である‘３６’をセットする。
【００３９】
各パケットのフィールドの詳細は、ＲＦＣ７９１、および、ＲＦＣ７９３に記載されている。各演算領域を図３のパケット上に示すと、図６の（Ａ）ようになる。また、図６の（Ｂ）にＩＰｖ４を使用したＴＣＰ通信における疑似ヘッダフォーマットを示す。演算領域１（６０１）は、疑似ヘッダのＰｒｏｔｏｃｏｌ（６０７）フィールド（プロトコル番号を示す領域）に該当する。演算領域２（６０２）は、Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ（６０４）フィールド（送信元アドレスフィールド）と、Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ（６０５）フィールド（宛先アドレスフィールド）に該当する。演算領域３（６０３）は、ＴＣＰヘッダ及びＴＣＰペイロードを連結した領域にあたる。したがって、演算領域１（６０１）と演算領域２（６０２）を図６の（Ａ）のようにセットすることにより、疑似ヘッダの一部が計算できることになる。以上が、レジスタ部１０６にセットする値に関する説明である。
【００４０】
図３のパケットがメモリ１４１に配置され、図５の値がレジスタ部１０６セットされた場合のチェックサム演算装置１００の詳細処理フローについて、図７を用いて説明する。なお、図７では、メモリ１４１にＴＣＰヘッダのチェックサムフィールドのみ未完成のパケットがすでに用意されている場合の例について説明する。
【００４１】
まず、ＣＰＵ１４０は、レジスタ部１０６にチェックサム演算命令をセットする（Ｓ２０２，図２のＳ２０２と同様）。チェックサム制御部１０４は、レジスタ部から演算命令を受け取り（Ｓ６０１）、演算器１（１０８）、演算器２（１０９）、演算器３（１１０）のそれぞれに対し、演算制御情報をセットする（Ｓ６０２）。ここで、演算器１（１０８）には演算領域１（６０１）、演算器２（１０９）には演算領域２（６０２）、演算器３（１１０）には演算領域３（６０３）がそれぞれ割り当てられる。演算命令セット後、ＣＰＵ１４０はレジスタ部１０６に開始をセットする（Ｓ２０３）。具体的には、Ｆ＿ＳＴＡＲＴ（４０１）にライトアクセスを実行する。これにより、チェックサム制御部１０４に伝わった開始指示（Ｓ６０３）が、各演算器まで通知され（Ｓ６０４）、各演算器はデータの待機状態となる（Ｓ６０５）。
【００４２】
次に、ＣＰＵ１４０は、リード転送装置１３０に対し、パケット転送命令のセット（Ｓ２０５）と開始（Ｓ２０６）指示を行う。それにより、リード転送装置１３０は、チェックサム演算装置１００に対し、図３に示したパケットの転送を実行する（Ｓ２０７）。チェックサム演算装置１００へ送られたパケットデータは、各演算器（１０８〜１１０）とバッファ部１０７へ送られる。
【００４３】
演算領域１（６０１）のデータが到着すると、演算器１（１０８）は、該当領域のデータをもとに演算を実行し、結果をチェックサム制御部１０４へ出力する。同様に演算器２（１０９）も演算領域２（６０２）に対する演算結果をチェックサム制御部１０４へ出力し（Ｓ６０７）、演算器３（１１０）も演算領域３（６０３）に対する演算結果をチェックサム制御部１０４へ出力する（Ｓ６０９）。演算器１〜３（１０８〜１１０）の演算結果を受信したチェックサム制御部１０４は、まず演算器１、２（１０８、１０９）の出力した演算領域１、２（６０１、６０２）についての演算結果を送信し（Ｓ６１０）、中間演算結果１を得る（Ｓ６１１）。次に、中間演算結果１と演算器３（１１０）が出力した演算領域３（６０３）に対する演算結果を加算器１０５へ送信し（Ｓ６１２）、中間演算結果２を得る（Ｓ６１３）。そして、中間演算結果２とＦ＿Ａ３＿ＬＥＮ４０８にセットされた値を送信し（Ｓ６１４）、中間演算結果３を得る（Ｓ６１５）。
【００４４】
ここで、Ｆ＿Ａ３＿ＬＥＮ４０８の値を加算器１０５へ送信する理由について説明する。図６の（Ｂ）で、ＩＰｖ４を使用した時のＴＣＰ疑似ヘッダについて説明したが、ＴＣＰ疑似ヘッダには、Ｌｅｎｇｔｈ６０８が含まれる。この情報は、ＴＣＰヘッダの長さとＴＣＰのペイロード長を足した値、すなわち、ＴＣＰヘッダ及びＴＣＰペイロードを連結した領域の長さを示す値がセットされる。チェックサム演算装置１００を適切に使用すると、Ｌｅｎｇｔｈ６０８とＦ＿Ａ３＿ＬＥＮ４０８にセットされた値が一致する。よって、Ｆ＿Ａ３＿ＬＥＮ４０８の値を演算対象とすることにより疑似ヘッダに対する演算が可能となる。これは、チェックサム演算装置１００内に、Ｌｅｎｇｔｈ６０８に相当する値をパケットから計算するための処理（ロジック）を必要としないことを示す。一方、ＣＰＵ１４０はプロトコル処理を担っているので、Ｆ＿Ａ３＿ＬＥＮ４０８の値を、プロトコル処理を行う上で容易にセットできる。以上がＦ＿Ａ３＿ＬＥＮ４０８を演算に含む理由である。
【００４５】
中間演算結果３を得たチェックサム制御部１０４は、中間演算結果３の各々のビット情報をビット反転し、Ｆ＿ＣＨＥＣＫＳＵＭ４０９に示された場所に値を上書きする（Ｓ６１６）。チェックサムにかかる処理が全て完了したので、バッファ部１０７から、インターフェース部１４３へ完成されたＴＣＰ／ＩＰパケットを送信する（Ｓ２１１）。パケット中のデータを全て送ったことを例えばバッファ部１０７のステータスで確認後、チェックサム制御部１０４は、レジスタ部１０６に完了ステータスを示す情報を送信する。以上が、チェックサム処理の詳細である。
【００４６】
上記のように、本実施形態では、チェックサム演算の対象データに含まれるチェックサム演算を行うべき複数の演算領域を指定する設定情報をレジスタ部１０６に保持する。そして、設定情報により指定された複数の演算領域を占めるデータの各々に対して、演算部が部分的なチェックサム演算を行う。さらに、各演算領域についての演算結果に基づいて、チェックサム制御部１０４の制御に基づき対象データの全体のチェックサム演算の結果を取得する。
【００４７】
このように、本実施形態では、汎用的なＣＰＵの制御に基づくのではなく、専用のハードウェアによりチェックサム演算を行うことにより、処理を高速化することが可能である。また、本実施形態では、レジスタ部１０６に設定された演算領域についての演算結果を集めることで、疑似ヘッダを直接生成することなく、ＴＣＰ／ＩＰパケット全体のチェックサムを計算している。本実施形態では、ヘッダ解析を一般的に行うための汎用的な構成は不要であるため、不必要に過大なハードウェア資源は不要である。したがって、大きなハードウェア資源を要せずに、高速にチェックサムを計算することが可能である。
【００４８】
また、ペイロードサイズが一定であれば、チェックサム演算の対象となる領域に変化はないため、レジスタ部１０６の設定情報をパケットごとに変更する必要がない。したがって、ペイロードサイズが一定の間は設定情報を書き換えることなく、高速にチェックサム演算を行うことが可能である。
【００４９】
＜実施形態２＞
実施形態１では、演算領域毎に独立した演算器１〜３（１０８、１０９、１１０）を用いる構成について説明したが、演算器１つでも機能は実現できる。この場合、ゲート規模を削減することができる。
【００５０】
実施形態１では、ＩＰｖ４を用いた例を示したが、ＩＰｖ６でも実現できる。ＩＰｖ６では、ＩＰヘッダのフォーマットとＴＣＰ疑似ヘッダのフォーマットが異なるが、チェックサム演算装置１００へのセット手順を変更するのみでチェックサム演算が可能である。すなわち、ＩＰｖ６を用いてＴＣＰ／ＩＰパケットを構成する場合には、そのパケット構成においてチェックサム演算を行うべき領域を設定情報に設定することで、同様の処理によりチェックサムを計算することができる。
【００５１】
また、実施形態１では、ＴＣＰチェックサムについて記載したが、ＵＤＰチェックサムにおいても演算可能である。ＵＤＰチェックサムを計算する場合は、中間演算結果３の値が、０ｘＦＦＦＦ（１０進数で６５５３５）であった場合にビット反転せずに書き込む必要がある。そこで、レジスタ部１０６に、ＴＣＰかＵＤＰをセットするフィールドを用意し、ＣＰＵ１４０がそのフィールドに指示を設定するようにすれば、ＴＣＰとＵＤＰとの間で処理を切り替えることができる。
【００５２】
また、実施形態１では、パケット送信時におけるチェックサム演算装置１００の処理について説明したが、パケット受信時も基本的には同等の機能を持つチェックサム演算装置１６０を利用し、効率的なチェックサム演算ができる。ただし、送信時と異なり、受信時は一般的にどのようなパケットが到着したかわからない。そのため受信パケットを予測したチェックサム演算装置１６０が求められる。また、予測が異なる場合があるのであれば、ＣＰＵ１４０による再計算処理等を実装しておくとよい。
【００５３】
チェックサム演算装置１００におけるチェックサム演算処理を無効にできる、すなわち、リード転送装置１３０から受信したパケットをそのままインターフェース部１４３へ送信するモードを具備してもよい。その場合、パケット毎に有効無効情報をセット可能な方式でも、処理する全パケットに対し一括で有効モード／無効モードを切り替える方式にしてもよい。
【００５４】
パケットサイズが小さく、ＣＰＵ１４０でチェックサム演算処理を実行しても処理時間が性能的に許容できるのであれば、チェックサム演算装置１００のチェックサム演算処理を無効とする等の切り替えを行ってもよい。受信時（チェックサム演算装置１６０）も同様である。
【００５５】
また、実施形態１では、チェックサム処理の終了後（Ｓ６１６）、インターフェース部１４３からデータを出力している（Ｓ２１１）。しかし、Ｆ＿ＣＨＥＣＫＳＵＭ４０９の位置より前のデータに対してはチェックサム処理の終了前に出力することが可能である。すなわち、チェックサム処理の開始前に、Ｆ＿ＣＨＥＣＫＳＵＭ４０９の解析をチェックサム制御部１０４で実施し、解析結果をもとにバッファ部１０７を制御することにより実現できる。
【００５６】
また、レジスタ部１０６の設定情報は、チェックサム演算の結果を出力する出力先を示す出力先情報を含み、インターフェース部１４３はこの出力先に対して結果を出力するようにしてもよい。これにより、ＣＰＵ１４０からレジスタ部１０６の設定情報を設定するだけで、チェックサムの出力先を切り替えることが可能となる。
【００５７】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５８】
１００：チェックサム演算装置、１０６：レジスタ部、１０８，１０９，１１０：演算器、１３０：リード転送装置、１４３：インターフェース部、１６０：チェックサム演算装置、１２０：ライト転送装置、１４０：ＣＰＵ、１４１：メモリ
【図１】
0006614948.tif 000002
【図２】
0006614948.tif 000003
【図３】
0006614948.tif 000004
【図４】
0006614948.tif 000005
【図５】
0006614948.tif 000006
【図６】
0006614948.tif 000007
【図７】
0006614948.tif 000008