JP6938399B2 - 通信装置、通信方法およびプログラム - Google Patents

通信装置、通信方法およびプログラム Download PDF

Info

Publication number
JP6938399B2
JP6938399B2 JP2018024189A JP2018024189A JP6938399B2 JP 6938399 B2 JP6938399 B2 JP 6938399B2 JP 2018024189 A JP2018024189 A JP 2018024189A JP 2018024189 A JP2018024189 A JP 2018024189A JP 6938399 B2 JP6938399 B2 JP 6938399B2
Authority
JP
Japan
Prior art keywords
transfer
descriptor
communication
data
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018024189A
Other languages
English (en)
Other versions
JP2019139638A (ja
Inventor
松本 仁
仁 松本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2018024189A priority Critical patent/JP6938399B2/ja
Publication of JP2019139638A publication Critical patent/JP2019139638A/ja
Application granted granted Critical
Publication of JP6938399B2 publication Critical patent/JP6938399B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Bus Control (AREA)

Description

本発明は、通信装置、通信方法およびプログラムに関する。
近年、急速に増加しているスマートデバイスと呼ばれる多機能端末では、ネットワーク経由で配信される高解像度動画(8K/4K)の閲覧が可能である。こうした高解像度動画を閲覧するニーズの増加に伴って、動画配信のためのデータトラフィックが増大している。また、Ethernet(登録商標)による10Gbps通信、移動体通信の5G通信などのネットワークの高速化に伴って、TCP/UDP/IPなどの通信プロトコル処理のCPUにかかる負荷が大きくなっている。こうした通信プロトコルを用いた高速データ通信を実現するために、多機能端末内におけるデータ転送の制御により高速に通信パケットを生成する技術が提案されている。
高速に通信パケットを生成する技術として、DMA(Direct Memory Access)方式を活用した技術がある。DMA方式では、DMAコントローラと呼ばれるデータ転送専用のコントローラを用いて、CPUを介さずにデータを転送することができる。
特許文献1には、DMAコントローラを用いた通信パケットの生成方法が開示されている。まず、CPUは、ソフトウェア処理により通信ヘッダとディスクリプタとをそれぞれ1つずつ生成する。次にCPUは、DMAコントローラ付のMAC(Media Access Control)を起動し、MACは、ディスクリプタに従って通信ヘッダとペイロードとを取得する。そして、MACは、ペイロードに通信ヘッダを付加して1つの通信パケットを生成し、ネットワークに転送する。この通信パケットの生成方法を用いて複数の通信パケットをネットワークに転送する場合、上記のディススクリプタの生成とDMAコントローラの制御とを含む一連の処理を繰り返し実行する必要がある。
特開2009−116386号公報
上記特許文献1の通信パケットの生成方法では、複数の通信パケットをネットワークに転送する場合、1パケットごとにDMAコントローラを制御しなければならない。
DMAコントローラの制御には、以下の3つの処理時間が必要である。(1)ディスクリプタに記述する情報を準備する時間、(2)準備した情報をディスクリプタに記述する時間、(3)1パケットごとにDMAコントローラを起動する時間、である。通信処理の高速化のためには、上記の処理時間の短縮が必要である。
そこで、本発明は、複数のデータの転送に係る処理時間を低減し、通信処理を高速化することを目的としている。
上記課題を解決するために、本発明に係る通信装置の一態様は、DMA(Direct Memory Access)転送を実行する転送手段と、前記転送手段によるDMA転送が、複数の第1のデータの転送であるか、前記第1のデータおよび第2のデータの転送であるかに関する情報を取得する取得手段と、前記取得手段により取得された情報が、前記DMA転送が前記複数の第1のデータの転送であることを示す情報である場合、前記転送手段が前記第1のデータを転送するためのディスクリプタから、前記転送手段が異なる前記第1のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、前記取得手段により取得された情報が、前記DMA転送が前記第1のデータおよび前記第2のデータの転送であることを示す情報である場合、前記転送手段が前記第1のデータを転送するためのディスクリプタから、前記転送手段が前記第2のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成する生成手段と、前記生成手段により生成された前記ディスクリプタに基づいて前記転送手段によるDMA転送を実行することにより生成された複数の通信パケットを送信する送信手段と、を備える。
本発明によれば、複数のデータの転送に係る処理時間を低減し、通信処理を高速化することができる。
本実施形態に係る通信装置の構成例を示すブロック図である。 通信装置の送信動作を説明するフローチャートである。 通信プロトコル処理を示すフローチャートである。 ディスクリプタ処理部の入出力情報を示す図である。 転送元アドレスからデータを転送するディスクリプタチェーンの仕組み。 転送先アドレスへデータを転送するディスクリプタチェーンの仕組み。
以下、添付図面を参照して、本発明を実施するための形態について詳細に説明する。なお、以下に説明する実施の形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正または変更されるべきものであり、本発明は以下の実施の形態に限定されるものではない。
本実施形態における通信装置は、DMA(Direct Memory Access)方式を活用して通信パケットを生成し、外部機器に対してネットワーク経由で送信すべきデータ(以下、「送信データ」という。)を転送する。DMA方式では、DMAコントローラと呼ばれるデータ転送専用のコントローラを用いて、CPUを介さずにデータを転送することができる。DMAコントローラは、ディスクリプタに記述されている内容に従ってデータを入力(リード)および出力(ライト)することで、転送元装置と転送先装置との間、例えば通信装置内のメモリ間において直接データを転送することができる。ディスクリプタは、ソフトウェアにより生成される。
本実施形態における通信装置は、DMAコントローラが、ディスクリプタを連続して読み込み、連続してDMA転送を実行するように、チェーン先アドレスを含むディスクリプタを生成する。ここで、チェーン先アドレスとは、DMAコントローラが次にリードするディスクリプタのアドレスである。これにより、通信装置が外部機器に対してネットワーク経由で送信データを複数の通信パケットにより転送する場合、DMAコントローラを一度起動させるだけで、複数の通信パケットを生成することができる。つまり、DMAコントローラの制御にかかる処理時間を低減することができる。
図1は、本実施形態に係る通信装置100のハードウェア構成および機能構成の一例を示す図である。
通信装置100の各機能モジュールのうち、ソフトウェアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがROM等のメモリに記憶され、RAMに読み出してCPUが実行することにより実現される。ハードウェアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからFPGA上に自動的に専用回路を生成すればよい。FPGAとは、Field Programmable Gate Arrayの略である。また、FPGAと同様にしてGate Array回路を形成し、ハードウェアとして実現するようにしてもよい。また、ASIC(Application Specific Integrated Circuit)により実現するようにしてもよい。
なお、図1に示した機能ブロックの構成は一例であり、複数の機能ブロックが1つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
通信装置100は、メインCPU10と、メインメモリ20と、サブシステム30と、を備える。サブシステム30は、通信プロトコル処理を実行する。メインCPU10、メインメモリ20およりサブシステム30は、システムバス40を介して相互に接続されている。
メインCPU10は、通信装置100上で稼働するアプリケーションソフトウェアを実行するとともに、通信装置100全体の制御を実行する。具体的には、メインCPU10は、アプリケーションソフトウェアを実行する上で必要となるデータやプログラムなどをメインメモリ20の内部に記憶し、必要に応じてシステムバス40を介して読み出しや書き込みを行う。
メインメモリ20は、システムバス40を介して、通信装置100内の各機能ブロックが共有して利用可能なメモリであり、DRAM(Dynamic Random Access Memory)等の半導体メモリにより構成することができる。メインメモリ20内部の領域は、プログラムを格納する領域やアプリケーションソフトウェアが使用するアプリケーションバッファ領域などに分けられる。
サブシステム30は、サブCPU31と、ローカルメモリ32と、通信インタフェース(通信I/F)33と、DMAコントローラ34と、ディスクリプタ処理部35と、を備える。サブCPU31、ローカルメモリ32、通信I/F33、DMAコントローラ34およびディスクリプタ処理部35は、ローカルバス36を介して相互に接続されている。
サブシステム30は、上述したように、通信装置100における通信プロトコル処理を実行するシステムであり、特に、サブシステム30は、TCP/IPプロトコル等の通信プロトコル処理に特化して外部機器とネットワークを介したデータ転送処理を担う。本実施形態において、サブシステム30は、通信プロトコル処理専用のハードウェア(ハードウェアアクセラレータ)を搭載して、通信プロトコル処理の一部をメインCPU10に替えて高速で実行する。なお、TCP/IPプロトコルは、説明を行うために示す一例であり、サブシステム30は、その他の通信プロトコルの通信プロトコル処理を実行することができる。
サブCPU31は、サブシステム30による通信プロトコル処理全体の実行を制御する。具体的には、サブCPU31は、IPv4(IPバージョン4)、IPv6(IPバージョン6)、TCP、UDP等の各通信プロトコル処理を実行する。サブCPU31が実行する通信プロトコル処理は、送信シーケンス制御、輻輳制御、通信エラー制御等を含む。なお、サブCPU31は、1つのプロセッサとして構成してもよいし、複数のプロセッサによるマルチプロセッサ構成としてもよい。さらに、サブCPU31は、プロセッサと一部の機能をアクセラレートするハードウェア(ハードウェアアクセラレータ)とで構成してもよい。
ローカルメモリ32は、サブシステム30のサブCPU31が利用可能なメモリであり、SRAM(Static Random Access Memory)等の半導体メモリにより構成することができる。また、ローカルメモリ32は、メインCPU10からもシステムバス40およびローカルバス36を介してアクセス可能である。
通信I/F33は、LAN(Local Area Network)等により構成されるネットワーク37とのインタフェースであり、外部装置との通信における物理層(PHY層)とデータリンク層(MAC層)の通信制御を担っている。
通信I/F33は、内部に送受信データを一時的に蓄積するバッファメモリを装備し、DMAコントローラ34のDMA転送によって、送受信データの入出力が行われる。なお、図1のDMAコントローラ34とは別に、通信I/F33がDMAコントローラを内蔵して、その内蔵DMAコントローラを用いてDMA転送による送受信データの入出力を行ってもよい。
DMAコントローラ34は、転送レジスタ部341と、リード転送部342と、ライト転送部343と、演算部344と、を備える。
DMAコントローラ34は、ディスクリプタに記述された内容に従ってソース側からディスティネーション側へデータ転送(DMA転送)を実行する。このディスクリプタには、データ転送元となるソース側のメモリ等のアドレス情報、データ転送先となるディスティネーション側のメモリ等のアドレス情報、およびデータ転送の転送サイズ等の情報が記述される。また、DMAコントローラ34は、DMA転送が完了すると、完了通知をディスクリプタ処理部35へ出力する機能を有する。
転送レジスタ部341は、リード転送部342、ライト転送部343および演算部344を制御するための設定情報の入力機能を有する。ここで、転送レジスタ部341が入力する設定情報は、ディスクリプタが記憶されているメモリ等のアドレス情報や、演算部344の動作モードを決定する情報を含む。また、転送レジスタ部341は、リード転送部342およびライト転送部343のステータス情報を表示する出力機能を有する。
リード転送部342は、転送レジスタ部341にセットされた設定情報をもとにディスクリプタを読み込む。そして、リード転送部342は、読み込んだディスクリプタに記述された内容に従って、メインメモリ20、あるいはローカルメモリ32、あるいは後述する内部メモリ352からデータをリードすることができる。
ライト転送部343は、転送レジスタ部341にセットされた設定情報をもとにディスクリプタを読み込む。そして、ライト転送部343は、読み込んだディスクリプタに記述された内容に従って、データをローカルメモリ32や内部メモリ352へライトすることができる。さらに、ライト転送部343は、データを通信I/F33が装備するバッファメモリへライトすることもできる。
演算部344は、転送レジスタ部341にセットされた設定情報に従って、リード転送部342から受け取ったデータに対する演算を実行する。具体的には、演算部344は、インターネットチェックサム演算やペイロードサム演算を行う。ここで、インターネットチェックサムとは、TCP/UDP/IP通信パケット内のチェックサム値を指し、16ビット毎の1の補数和を取り、さらにそれの1の補数を取ることで計算できる。また、ペイロードサムとは、ペイロードの総和であり、16ビットワード毎の1の補数和である。
なお、演算部344は、演算をスルーする動作モードで動作することもできる。この場合、DMAコントローラ34は、演算を実施せず単純なメモリ間のデータコピーとして使用することができる。
ディスクリプタ処理部35は、DMAコントローラ34がDMA転送するためのディスクリプタを生成する。
ディスクリプタ処理部35は、生成レジスタ部351と、内部メモリ352と、コア部353と、を備える。ディスクリプタ処理部35は、サブCPU31が実行する通信プロトコル処理を担っており、具体的には、通信プロトコル処理の中のディスクリプタ生成処理と、DMAコントローラ34の制御処理を肩代わりして実行する。
生成レジスタ部351は、コア部35を制御するための設定情報の入力機能と、コア部353の状態を確認するためのステータス情報を表示する出力機能と、を有する。ここで、生成レジスタ部351が入力する設定情報は、ディスクリプタの生成に必要な情報であり、生成するディスクリプタの数やDMA転送するデータの通信プロトコル種別などを判断する情報等を含む。この設定情報については、後で詳述する。
内部メモリ352は、コア部353やサブCPU31が利用可能なメモリであり、SRAM等の半導体メモリにより構成することができる。内部メモリ352は、コア部353によって生成されたディスクリプタを記憶する領域を持つ。
コア部353は、コア制御部353aと、ディスクリプタ生成部353bと、DMAコントローラ制御部353cと、を備える。
コア部353は、生成レジスタ部351にセットされた設定情報によりディスクリプタ生成処理を実行し、内部メモリ352にディスクリプタを保存する。さらに、コア部353は、内部メモリ352へのディスクリプタの保存を完了すると、DMA転送要求をDMAコントローラ34へ出力する機能を有する。
コア制御部353aは、生成レジスタ部351にセットされた設定情報に従って、ディスクリプタ生成部353bとDMAコントローラ制御部353cとを制御する。具体的には、コア制御部353aは、ディスクリプタ生成部353bに対してディスクリプタ生成を要求したり、DMAコントローラ制御部353bに対してディスクリプタ生成の完了通知を出力したりする。
ディスクリプタ生成部353bは、コア制御部353aからのディスクリプタ生成の要求を受け取ると、生成レジスタ部351にセットされた設定情報をもとにディスクリプタに記述する情報を計算して、ディスクリプタを生成する。
ディスクリプタ生成部353bが生成するディスクリプタのサイズは、固定値である。ディスクリプタ生成部353bは、生成したディスクリプタを内部メモリ352に保存する。また、ディスクリプタ生成部353bは、生成したディスクリプタを内部メモリ352に書き込んだ数をカウントする機能も有する。
DMAコントローラ制御部353cは、コア制御部353aからのディスクリプタ生成の完了通知を受け取ると、リード転送部342、ライト転送部343および演算部344の設定情報をそれぞれ転送レジスタ部341にセットする。これにより、DMAコントローラ制御部353cは、DMAコントローラ34に対してDMA転送を実行するように要求する。つまり、DMAコントローラ制御部353cは、転送レジスタ部341に、ディスクリプタが記憶されている内部メモリ352のアドレスを設定することで、DMAコントローラ34に対してDMA転送の開始を指示する。そして、DMAコントローラ制御部353cは、DMAコントローラ34からDMA転送の完了通知を受け取ると、生成レジスタ部351に通知情報をセットする。
なお、DMA転送の完了通知は、DMAコントローラ34がディスクリプタ処理部35に対して割り込み信号で通知する方法がある。もしくは、DMAコントローラ制御部353cが転送レジスタ部341をポーリングすることで、DMA転送の完了通知を受け取る方法もある。
次に、通信装置100がネットワーク37を介して外部機器へ通信パケットを送信する際の通信装置100の送信動作について説明する。
図2は、通信装置100が実行する通信パケット送信処理の一例を示すフローチャートである。この図2に示す処理は、例えば、通信装置100の通信機能が起動され、通信装置100がネットワーク37を介して外部機器と通信状態となったことを契機に開始される。ただし、図2に示す処理の開始タイミングは上記に限定されない。
以下では、通信装置100が外部機器との間でデータ転送する際に使用する通信プロトコルとして、TCP/IPプロトコルを使用する例を説明する。なお、通信プロトコルは、TCP/IPプロトコル以外の通信プロトコルであってもよい。
まずS1において、メインCPU10で実行されるアプリケーションソフトウェアは、外部機器へ送信すべき送信データを、メインメモリ20に設けられたアプリケーションバッファ領域に準備する。そして、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、メインCPU10で実行されるアプリケーションソフトウェアは、サブCPU31に対して、外部機器へ送信する送信データの準備が完了したことを通知する。
ここで、サブCPU31に対して発行される通知には、現在の通信状態を示す情報が含まれる。現在の通信状態を示す情報は、例えば、TCPプロトコルを使用した通信の接続を開始することを示す情報、TCPプロトコルを使用したデータ転送を開始することを示す情報、TCPプロトコルを使用した通信の切断を開始する情報等を含む。
次にS2において、サブCPU31は、メインCPU10で実行されるアプリケーションソフトウェアが外部機器へ送信すべき送信データの準備を完了したか否かを判定する。具体的には、サブCPU31は、S1において発行された通知を受け取ったか否かを判定し、当該通知を受け取っている場合、送信データの準備が完了したと判定する。そして、サブCPU31は、送信データの準備が完了したと判定した場合はS3に移行し、送信データの準備が完了していないと判定した場合はS1へ戻る。
S3では、サブCPU31は、外部機器へ通信プロトコルに従った通信パケットの送信を実行するために、送信データをメインメモリ20からサブシステム30の内部バッファであるローカルメモリ32へ移動する。このS3では、サブCPU31は、DMAコントローラ34に、メインメモリ20からローカルメモリ32へ送信データを移動するDMA転送を実行させる。
DMA転送の設定では、まず、サブCPU31がDMA転送の内容を記述したディスクリプタを生成してローカルメモリ32に保存する。次に、サブCPU31は、このディスクリプタを保存したローカルメモリ32のアドレス情報をDMAコントローラ34にセットする。このようにして、サブCPU31は、DMAコントローラ34にDMA転送を実行させる。このDMA転送の完了をもって、サブCPU31による通信プロトコルに従った送信処理の準備が完了したことになる。
S4では、サブCPU31は、S3においてローカルメモリ32に保存された送信データを所定のサイズに分割し、複数の通信パケットのペイロード部分を確定させ、通信パケットの数に対応した通信ヘッダを内部メモリ352に生成する。また、DMAコントローラ34は、通信ヘッダを完成させるために必要となるチェックサム値を演算し、その演算結果を内部メモリ352に生成された通信ヘッダの所定の位置に書き込むことで通信ヘッダを完成させる。または、DMAコントローラ34は、ローカルメモリ32に通信パケットを書き込み、当該通信パケットの通信ヘッダの所定の位置に上記演算結果を書き込むことで通信パケットを完成させる。このS4における通信プロトコル処理の詳細については後述する。
S5では、サブCPU31は、S4において確定されたペイロードに、S4において内部メモリ352に完成された通信ヘッダを付加して通信パケットを生成し、通信I/F33を介して外部機器へ送信する処理を行う。あるいは、サブCPU31は、S4においてDMAコントローラ34がローカルメモリ32に完成させた通信パケットを、通信I/F33を介して外部機器へ送信する処理を行う。
前者の場合、まず、サブCPU31は、ローカルメモリ32内の送信データをペイロード単位で切り出し、内部メモリ352内の通信ヘッダと結合して1つの通信パケットとして通信I/F33に転送するDMA転送設定を実施する。後者の場合、まず、サブCPU31は、ローカルメモリ32に書き込まれた通信パケットを通信I/F33に転送するDMA転送設定を実施する。次に、サブCPU31は、DMAコントローラ34を起動し、上記のDMA転送設定に従って、通信ヘッダとペイロード、あるいは通信パケットを通信I/F33へDMA転送させる。これにより、通信I/F33は、データリンク層(MAC層)や物理層(PHY層)の通信処理を行った後、ネットワーク37を介して外部機器へ通信パケットを送信する。
S6では、サブCPU31は、通信装置100と外部機器との通信を終了させる事象が発生したか否かを判定する。そして、サブCPU31は、外部機器との通信を終了させる事象が発生したと判定した場合はS7に移行し、外部機器との通信を終了させる事象が発生していないと判定した場合はS1に戻る。
例えば、メインCPU10で実行しているアプリケーションソフトウェアが、ユーザからの操作などで通信装置100と外部機器との接続を終了させる指示を検知した場合、外部機器との通信を終了させる事象となる。また、ユーザがネットワークケーブルを通信装置100から抜くなどして通信回線が断絶したことを通信I/F33が検知した場合も、外部機器との通信を終了させる事象となる。さらに、通信相手である外部機器から通信回線を切断する旨の通知を含んだ通信パケットを受信した場合も、同様に外部機器との通信を終了させる事象となる。
S7では、サブCPU31は、通信装置100と外部機器の通信を終了させる処理を実行する。具体的には、サブCPU31が担っている通信プロトコル処理に従って、外部機器との通信回線を正常に切断する。そして、サブCPU31は、ローカルメモリ32やディスクリプタ処理部35内の内部メモリ352に一時的に保存している関連情報を削除する。
その後、サブCPU31からメインCPU20へ、通信回線の切断完了の通知が伝達されると、アプリケーションソフトウェアで通信回線が切断したことをユーザなどへ示す表示を行うことができる。なお、このとき、ディスクリプタ生成部353bが持つ後述するカウンタの値も“0”にクリアされる。
次に、S4において実行される通信プロトコル処理の詳細について説明する。
図3は、S4において実行される通信プロトコル処理を示すフローチャートである。以下、主にディスクリプタ生成部353bによるディスクリプタに記述する情報の計算処理について説明する。
まずS41において、サブCPU31は、ディスクリプタ生成情報として、ディスクリプタ生成に必要な設定情報を準備する。また、このS41では、サブCPU31は、通信パケットの通信ヘッダを生成し、ディスクリプタ処理部35内の生成レジスタ部351にディスクリプタ生成に必要な設定情報をセットする処理を実行する。ここで、上記設定情報は、図4の「生成レジスタ部へセットする情報」に示す設定情報401〜406である。これらの情報401〜406の内容について、以下に説明する。
設定情報401は、生成する通信パケットの種別であり、生成する通信パケットに使用される通信プロトコルがTCP、UDPのどちらであるかを判断するための情報である。設定情報401は、使用する通信プロトコルの通信ヘッダのサイズを示す情報であってもよい。ここで、通信ヘッダのサイズとは、MACヘッダ長、IPv4/v6ヘッダ長、TCP/UDPヘッダ長の各ヘッダ長のことである。
設定情報402は、転送元情報に対して実行される演算種別である。ここで転送元情報は、DMAコントローラ34が転送元から入力するデータ(リード転送するデータ)である。この設定情報402は、リード転送部342がリードするデータに対して演算部344が実行する演算種別が、インターネットチェックサムであるか、インターネットチェックサムとペイロードサムとであるかを判断する情報である。
設定情報403は、生成する通信パケットの数であり、ディスクリプタ生成部353bが内部メモリ352に生成するディスクリプタの数を決定するための情報である。つまり、この設定情報403は、ディスクリプタチェーンするかを判断するための情報である。
設定情報404は、転送元アドレスであり、内部メモリ352に配置されている通信ヘッダの位置、もしくはローカルメモリ32に配置されているペイロードの位置を特定するための情報である。ここで、設定情報404には、通信ヘッダが配置されているアドレスとしては、先頭アドレスのみ、ペイロードが配置されているアドレスとしては、全てのアドレスがセットされている。
設定情報405は、転送元情報のサイズであり、ローカルメモリ32に配置されているペイロードのサイズを特定するための情報である。なお、内部メモリ352に配置されている通信ヘッダのサイズは、設定情報401の各ヘッダ長より計算することができるため、設定情報405には含まれない。
設定情報406は、最終的に生成する通信パケットを記憶するアドレスであり、ライト転送部343が、内部メモリ352、もしくはローカルメモリ32、もしくは通信I/F33のバッファメモリに転送するデータの種別を判断するための情報である。ここで、転送する情報は、チェックサム値の演算結果もしくは通信パケットである。この設定情報406のアドレスは、演算結果もしくは通信パケットをDMA転送するための情報でもある。
図3に戻って、S41では、サブCPU31は、ローカルメモリ32に移動された送信データを所定のサイズに分割し、生成する通信パケットの数と各通信パケットのペイロードサイズとを決定する。例えば、サブCPU31は、送信データをMSS(Maximum Segment Size)単位で分割する。ここで、MSSは、TCP/UDPにおける1セグメントで転送可能なデータ長である。
次に、サブCPU31は、生成する通信パケットの数と同数の通信ヘッダをディスクリプタ処理部35内の内部メモリ352に生成する。ここで、サブCPU31は、内部メモリ352の連続した領域に複数の通信ヘッダを生成する。サブCPU31は、通信ヘッダを生成した後、図4に示すディスクリプタ生成に必要な設定情報をディスクリプタ処理部35内の生成レジスタ部351にセットする。
なお、通信ヘッダを完成させるために必要なチェックサム値は、DMAコントローラ34の演算部344がDMA転送と同時に演算する。そのため、このS41では、サブCPU31はチェックサム値の演算を行わない。つまり、サブCPU31は、チェックサム値の演算結果を除く通信ヘッダを生成する。
S42では、サブCPU31は、内部メモリ352に通信ヘッダを生成して、生成レジスタ部351に設定情報を準備したか否かを判定する。そして、サブCPU31は、生成レジスタ部351に全ての設定情報が準備されたと判定すると、S43に移行し、通信ヘッダの生成が完了していない、または全ての設定情報が準備されていないと判定するとS41に戻る。
S43では、サブCPU31は、ディスクリプタ生成要求をディスクリプタ処理部35内の生成レジスタ部351にセットすることで、ディスクリプタ処理部35を起動する。
S44以降の処理では、ディスクリプタ生成部353bは、図4に示す設定情報401〜406をもとに、ディスクリプタに記述する情報として、図4に示す出力情報411〜415を計算する。
出力情報411は、DMAコントローラ34が連続してディスクリプタをリードする場合の、現在リードしているディスクリプタの次にリードするディスクリプタのアドレス情報である。本実施形態では、ディスクリプタは、内部メモリ352に記憶される。したがって、出力情報411は、内部メモリ352内のディスクリプタが記憶されている位置を示す情報となる。
出力情報412は、転送元情報のアドレスを示す転送元アドレスである。転送元情報は、通信ヘッダのみの場合と、通信ヘッダとペイロードの両方である場合とがある。したがって、出力情報412は、通信ヘッダが配置されているアドレス情報、あるいは通信ヘッダとペイロードとが配置されているアドレス情報となる。このアドレス情報は、通信ヘッダとペイロードとのそれぞれに対して、設定情報403に示される生成する通信パケットの数だけ用意される。
出力情報413は、転送元情報のサイズであり、通信ヘッダ、あるいは通信ヘッダとペイロードとのサイズ情報である。このサイズ情報は、通信ヘッダとペイロードとのそれぞれに対して、設定情報403に示される生成する通信パケットの数だけ用意される。
出力情報414は、転送先へ転送する情報のアドレスを示す転送先アドレスである。転送先へ転送する情報は、DMAコントローラ34が転送先へ出力するデータ(ライト転送するデータ)であり、チェックサム値の演算結果のみの場合と、演算結果と通信パケットの両方である場合とがある。したがって、出力情報414は、演算結果を保存するアドレス情報、あるいは通信パケットと演算結果とを保存するアドレス情報となる。このアドレス情報は、内部メモリ352、ローカルメモリ32、通信I/F33のバッファメモリのいずれかのアドレスである。
出力情報415は、転送先へ転送する情報のサイズであり、通信パケットのサイズ情報である。ここで、出力情報415は、チェックサム値の演算結果のサイズ情報は含まない。演算結果は、常に2バイトの固定値であり、計算の必要がないためである。
図3に戻って、S44では、ディスクリプタ生成部353bは、DMAコントローラ34のリード転送部342およびライト転送部343がディスクリプタを連続して使用するか否か、つまり、ディスクリプタをチェーンするか否かを判定する。
具体的には、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、通信パケットを複数生成すると判定した場合、ディスクリプタをチェーンすると判定してS45に移行する。一方、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、通信パケットを1つのみ生成すると判定した場合、S46に移行する。このS44では、ディスクリプタ生成部353bは、図4の設定情報403をもとにディスクリプタをチェーンするか否かを判定する。
S45では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、DMAコントローラ34が次に読み込むディスクリプタのアドレスであるチェーン先アドレスを計算する。このS45において計算されるチェーン先アドレスは、図4の「ディスクリプタ生成部が出力する情報」に含まれる出力情報411である。なお、チェーン先アドレス(出力情報411)の計算方法については、後述する。
S46では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、DMAコントローラ34のリード転送部342が読み込む通信ヘッダの転送元アドレスと転送サイズとを計算する。このS46において計算される転送元アドレスは、図4の出力情報412であり、転送サイズは、図4の出力情報413である。なお、転送元アドレス(出力情報412)および転送サイズ(出力情報413)の計算方法については、後述する。
S47では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、演算部344が演算する演算種別がインターネットチェックサムとペイロードサムとであるか否かを判定する。そして、ディスクリプタ生成部353bは、演算種別がインターネットチェックサムとペイロードサムとであると判定すると、S48に移行し、そうでない場合はS49へ移行する。このS47では、ディスクリプタ生成部353bは、図4の設定情報402をもとに演算種別を判定する。
S48では、ディスクリプタ生成部353bは、DMAコントローラ34のリード転送部342が転送するペイロードの転送元アドレスと転送サイズとを計算する。このS48において計算される転送元アドレスは、図4の出力情報412であり、転送サイズは、図4の出力情報413である。なお、転送元アドレス(出力情報412)および転送サイズ(出力情報413)の計算方法については、後述する。
S49では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、ライト転送部343が転送先へ転送する情報の種別を判定し、ライト転送部343がローカルメモリ32に通信パケットを出力するか否かを判定する。このS49では、ディスクリプタ生成部353bは、図4の設定情報406をもとにライト転送部343が出力するデータの種別を判定する。そして、ディスクリプタ生成部353bは、ライト転送部343が出力するデータに通信パケットが含まれると判定した場合はS50に移行し、そうでない場合はS52に移行する。
S50では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、ライト転送部343がローカルメモリ32に転送する通信パケットの転送先アドレスと、当該通信パケットの転送サイズとを計算する。このS50において計算される転送先アドレスは、図4の出力情報414であり、転送サイズは、図4の出力情報415である。なお、転送先アドレス(出力情報414)および転送サイズ(出力情報415)の計算方法については、後述する。
S51では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、演算部344がローカルメモリ32に出力する演算結果の転送先アドレスを計算する。このS51において計算される転送先アドレスは、図4の出力情報414であり、その計算方法については後述する。
S52では、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報をもとに、演算部344が内部メモリ352に出力する演算結果の転送先アドレスを計算する。このS52において計算される転送先アドレスは、図4の出力情報414であり、その計算方法については後述する。
S53では、ディスクリプタ生成部353bは、上記の処理により計算された計算結果をディスクリプタに記述して内部メモリ352に記憶する。なお、ディスクリプタ生成部353bは、複数のディスクリプタを内部メモリ352に連続するように書き込む。
S54では、ディスクリプタ生成部353bは、最小単位のカウントアップのみを実行し、S55に移行する。例えば、ディスクリプタ生成部353bは、S53から移行したときに最初のカウントアップを実行してカウンタ値を「1」とする。その後、ディスクリプタ生成部353bは、S53から移行する度にカウントアップを実施して、カウンタ値を「2」、「3」、…のようにカウントアップする。このカウントアップ処理は、ディスクリプタ生成部353bが内部メモリ352に書き込んだディスクリプタの個数をカウントする意味をもっている。
S55では、ディスクリプタ生成部353bは、S54においてカウントアップされたカウンタ値、つまり生成されたディスクリプタの総数が、生成レジスタ部351にセットされた値と合致しているか否かを判定する。カウンタ値がセットされた値と合致している場合にはS56に移行し、合致していない場合はS44に戻る。なお、カウンタ値とディスクリプタの総数との対応付けは、予めサブCPU31によって設定されている。
S56では、コア部353のDMAコントローラ制御部353cは、DMAコントローラ34に対してDMA転送を要求する。これにより、DMAコントローラ34は、ディスクリプタに従ってDMA転送を実行する。
具体的には、S56においてDMAコントローラ制御部353cは、S55までの処理において生成されたディスクリプタが配置されているアドレスをセットする。これにより、DMAコントローラ制御部353cは、DMAコントローラ34に対してDMA転送を要求する。DMAコントローラ34は、DMAコントローラ制御部353cからDMA転送要求を受け取ることで起動され、セットされたディスクリプタの配置アドレスをもとにディスクリプタをリードする。そして、DMAコントローラ34は、リードしたディスクリプタの内容に従って、DMA転送を実行する。
次に、演算部344は、リード転送部342によって連続してリードされた通信ヘッダ、あるいは通信ヘッダとペイロードとに対して、転送レジスタ部341にセットされた設定情報に従って、インターネットチェックサム演算やペイロードサム演算を実行する。演算部344が演算を完了すると、DMAコントローラ34は、演算結果を内部メモリ352に保存されている通信ヘッダの所定の位置に書き込み、演算結果を含む通信ヘッダを完成させる。あるいは、DMAコントローラ34は、通信ヘッダをペイロードに結合した通信パケットをローカルメモリ32に書き込み、さらに演算結果を当該通信パケットの通信ヘッダの所定の位置に書き込むことで、通信パケットを完成させる。このように、DMAコントローラ34は、ディスクリプタに従ってDMA転送を実行し、内部メモリ352に通信ヘッダを完成させるか、もしくはローカルメモリ32に通信パケットを完成させる。
通信ヘッダもしくは通信パケットが完成すると、図3の処理を終了し、図2のS5へ移行する。
以下、上記の出力情報411〜415を計算するアルゴリズムについて、詳細に説明する。
(出力情報411の計算アルゴリズム)
まず、出力情報411であるチェーン先アドレスを計算するアルゴリズムについて説明する。出力情報411は、設定情報402、403および406に基づいて計算することができる。この出力情報411は、図3のS45において計算される。
出力情報411の計算の中の、転送元アドレスから転送元情報を転送するディスクリプタ、つまりリード用ディスクリプタのチェーン先アドレスの計算アルゴリズムは、以下のとおりである。
ディスクリプタ生成部353bは、設定情報402をもとに、転送元情報が通信ヘッダであるか、通信ヘッダとペイロードとであるかを判断し、生成するディスクリプタの種別を決定する。ここで、生成するディスクリプタの種別は、通信ヘッダをDMA転送するためのディスクリプタ、もしくは通信ヘッダとペイロードとをDMA転送するためのディスクリプタである。
ディスクリプタ生成部353bは、ディスクリプタの種別を通信ヘッダと決定すると、設定情報403と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、通信ヘッダ用ディスクリプタのチェーン先アドレスを計算する。ここで、ディスクリプタの先頭アドレスは、内部メモリ352内のディスクリプタを保存する領域の先頭アドレスを指す。また、ディスクリプタのサイズは、固定値である。
出力情報411のチェーン先アドレスの計算式は、次式により表される。
(通信ヘッダ用ディスクリプタのチェーン先アドレス[N])=(通信ヘッダ用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×(N+1) ………(1)
なお、上記Nは、カウント値であり、0から(生成する通信パケットの数(設定情報403)−1)の範囲の値である。ディスクリプタ生成部353bは、N=0から1、2、3・・・とカウントアップし、チェーン先アドレスを計算する。以降のカウント値Nについても同様である。
このように、転送元情報が通信ヘッダのみの場合、通信ヘッダを転送するための通信ヘッダ用ディスクリプタには、次にリードする通信ヘッダ用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信ヘッダ用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
一方、ディスクリプタ生成部353bは、ディスクリプタの種別を通信ヘッダとペイロードと決定すると、設定情報403と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、チェーン先アドレスを計算する。このとき、ディスクリプタ生成部353bは、通信ヘッダ用ディスクリプタのチェーン先アドレスと、ペイロード用ディスクリプタのチェーン先アドレスとを計算する。計算式は以下のとおりである。
(通信ヘッダ用ディスクリプタのチェーン先アドレス[N])=(ペイロード用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×N ………(2)
(ペイロード用ディスクリプタのチェーン先アドレス[N])=(通信ヘッダ用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×(N+1) ………(3)
このように、転送元情報が通信ヘッダとペイロードとである場合、通信ヘッダ用ディスクリプタには、次にリードするペイロード用ディスクリプタのアドレスがチェーン先アドレスとして記述される。また、ペイロード用ディスクリプタには、次にリードする通信ヘッダ用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信ヘッダ用ディスクリプタからペイロード用ディスクリプタへチェーンし、さらにペイロード用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
次に、出力情報411の計算の中の、転送先アドレスへデータを転送するディスクリプタ、つまりライト用ディスクリプタのチェーン先アドレスの計算アルゴリズムについて説明する。
まず、ディスクリプタ生成部353bは、設定情報406をもとに、出力情報414の転送先アドレスへ転送するデータが、演算結果であるか、通信パケットと演算結果とであるかを判断し、生成するディスクリプタの種別を決定する。ここで、生成するディスクリプタの種別は、演算結果をDMA転送するためのディスクリプタ、もしくは通信パケットと演算結果とをDMA転送するためのディスクリプタである。
ディスクリプタ生成部353bは、生成するディスクリプタの種別を演算結果と決定すると、設定情報403と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、演算結果用ディスクリプタのチェーン先アドレスを計算する。計算式は以下のとおりである。
(演算結果用ディスクリプタのチェーン先アドレス[N])=(演算結果用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×(N+1) ………(4)
このように、転送先アドレスへ転送するデータが演算結果のみの場合、演算結果を転送するための演算結果用ディスクリプタには、次にリードする演算結果用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、演算結果用ディスクリプタから演算結果用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
一方、ディスクリプタ生成部353bは、生成するディスクリプタの種別を通信パケットと演算結果と決定すると、設定情報403と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズともとに、チェーン先アドレスを計算する。ここで、ディスクリプタ生成部353bは、通信パケット用ディスクリプタのチェーン先アドレスと、演算結果用ディスクリプタのチェーン先アドレスとを計算する。計算式は以下のとおりである。
(通信パケット用ディスクリプタのチェーン先アドレス[N])=(演算結果用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×N ………(5)
(演算結果用ディスクリプタのチェーン先アドレス[N])=(通信パケット用ディスクリプタの先頭アドレス)+(ディスクリプタのサイズ)×(N+1) ………(6)
このように、転送先アドレスへ転送するデータが通信パケットと演算結果とである場合、通信パケット用ディスクリプタには、次にリードする演算結果用ディスクリプタのアドレスがチェーン先アドレスとして記述される。また、演算結果用ディスクリプタには、次にリードする通信パケット用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信パケット用ディスクリプタから演算結果用ディスクリプタへチェーンし、さらに演算結果用ディスクリプタから通信パケット用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
(出力情報412、413の計算アルゴリズム)
次に、出力情報412および出力情報413の計算アルゴリズムについて説明する。
出力情報412の転送元アドレスは、設定情報403と、設定情報404とをもとに計算することができる。ここで、設定情報404は、連続する領域の先頭に配置されている通信ヘッダのアドレス、または転送する各ペイロードが配置されている全てのアドレスを指している。この出力情報412は、図3のS46、S48において計算される。
また、出力情報413の転送元情報のサイズは、設定情報401と、設定情報403と、設定情報405とから計算することができる。ここで、設定情報405は、転送する各ペイロードのサイズを指している。この出力情報413は、出力情報412と同様に、図3のS46、S48において計算される。
以下、出力情報412と出力情報413との計算の中の、通信ヘッダの転送元アドレスと、通信ヘッダの転送サイズとの計算アルゴリズムについて詳細に説明する。
通信ヘッダは、ディスクリプタ処理部35の内部メモリ352の連続する領域に記憶されている。ディスクリプタ生成部353bは、設定情報401をもとに、使用する通信プロトコルのヘッダを判断し、各ヘッダ長から通信ヘッダのサイズを計算する。ここで、各ヘッダ長とは、MACヘッダ、IPv4/v6ヘッダ、TCP/UDPヘッダの長さを指す。通信ヘッダのサイズの計算式は以下のとおりである。次式により計算される通信ヘッダのサイズが出力情報413となる。
(通信ヘッダのサイズ)=(MACヘッダ長)+(IPv4/v6ヘッダ長)+(TCP/UDPヘッダ長) ………(7)
また、ディスクリプタ生成部353bは、設定情報403、404および出力情報413をもとに、通信ヘッダの転送元アドレスを計算する。ここで、転送元アドレスは、通信ヘッダが配置されている先頭アドレスを指す。通信ヘッダの転送元アドレスの計算式は、以下のとおりである。次式により計算される通信ヘッダの転送元アドレスが出力情報412となる。
(通信ヘッダの転送元アドレス[N])=(転送元アドレス)+(通信ヘッダのサイズ)×N ………(8)
例えば、上記(7)式により通信ヘッダのサイズが54byte(0x36)、生成レジスタ部351にセットされた設定情報404の転送元アドレスが0x0、設定情報403の生成する通信パケットの数が3とする。
この場合、一つ目の通信ヘッダの転送元アドレスは、
(通信ヘッダの転送元アドレス[0])=0x0+0x36×0=0x0
と計算できる。また、二つ目の通信ヘッダの転送元アドレスは、
(通信ヘッダの転送元アドレス[1])=0x0+0x36×1=0x36
と計算できる。さらに、三つ目の通信ヘッダの転送元アドレスは、
(通信ヘッダの転送元アドレス[2])=0x0+0x36×2=0x6C
と計算できる。
次に、出力情報412と出力情報413の計算の中の、ペイロードの転送元アドレスと、ペイロードの転送サイズの計算アルゴリズムについて説明する。
ディスクリプタ生成部353bは、設定情報403と、設定情報404と、設定情報405と、MSSとにより、ペイロードの転送元アドレスを計算する。ここで、MSSは、TCP/UDPにおける1セグメントで転送可能なデータ長である。また、設定情報404は、各ペイロードが配置されているアドレスを指し、設定情報405は、各ペイロードの転送サイズを指す。
そして、ディスクリプタ生成部353bは、設定情報405のサイズがMSSより大きい場合、つまりペイロードのサイズがMSSより大きい場合、ペイロードをMSS単位で分割して転送するためのディスクリプタを生成する。このため、ペイロードの転送サイズはMSSであり、ペイロードサイズとMSSの剰余が最後のペイロードサイズとなる。ペイロードの転送元アドレスと、最後のペイロードの転送サイズとの計算式は、以下のとおりである
(ペイロードの転送元アドレス[N])=(ペイロードの先頭アドレス)+MSS×N ………(9)
(最後のペイロードの転送サイズ)=(セットされたペイロードの転送サイズ)−MSS×(生成する通信パケットの数−1) ………(10)
例えば、設定情報403の生成する通信パケットの数が3、設定情報404の転送元アドレスが0x0、設定情報405の転送元情報のサイズが4000byte(0xFA0)、MSSが1460byte(0x5B4)であるとする。この場合、転送元情報のサイズはMSSよりも大きいため、上記(9)式によりペイロードの転送元アドレスを計算する。
一つ目のペイロードの転送元アドレスは、
(ペイロードの転送元アドレス[0])=0x0+0x5B4×0=0x0
と計算できる。また、二つ目のペイロードの転送元アドレスは、
(ペイロードの転送元アドレス[1])=0x0+0x5B4×1=0x5B4
と計算できる。さらに、三つ目のペイロードの転送元アドレスは、
(ペイロードの転送元アドレス[2])=0x0+0x5B4×2=0xB68
と計算できる。
さらに、ペイロードの転送サイズは、MSS単位で分割されるため、一つ目、二つ目のペイロードの転送サイズは、それぞれ0x5B4(1460byte)となる。そして、三つ目のペイロードの転送サイズは、上記(10)式により、
(最後のペイロードの転送サイズ)=0xFA0−0x5B4×(3−1)=0x438(1080byte)
と計算できる。
一方、設定情報405の転送元情報のサイズがMSS以下である場合、つまりペイロードの転送サイズがMSS以下である場合、ディスクリプタ生成部353bは、以下のとおりペイロードの転送元アドレスと転送サイズとを計算する。つまり、ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報403、403および405をもとに、ペイロードの転送元アドレスと転送サイズとを計算する。ここで、設定情報404と設定情報405とは、設定情報404の生成する通信パケットの数だけ用意される。ペイロードの転送元アドレスと転送サイズの計算式は、以下のとおりである。
(ペイロードの転送元アドレス[N])=(セットされた転送元アドレス[N]) ………(11)
(ペイロードの転送サイズ[N])=(セットされたペイロードの転送サイズ[N]) ………(12)
(出力情報414、415の計算アルゴリズム)
次に、出力情報414および出力情報415の計算アルゴリズムについて説明する。
出力情報414の転送先アドレスは、設定情報403と、設定情報404と、設定情報406とから計算することができる。この出力情報414は、図3のS50、S51、S52において計算される。
また、出力情報415の転送先へ転送する情報のサイズは、設定情報401と、設定情報403と、設定情報405とから計算することができる。この出力情報415は、図3のS50において計算される。
ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報401をもとに、どのように通信パケットを生成するかを判断し、転送先へ転送する情報の種別を決定する。ここで、転送先へ転送する情報の種別は、チェックサム値の演算結果、または通信パケットと演算結果である。
ディスクリプタ生成部353bは、転送先へ転送する情報の種別を通信パケットと演算結果と決定すると、通信パケットと演算結果のそれぞれについて、転送先アドレスと情報のサイズとを計算する。
まず、ディスクリプタ生成部353bは、通信パケットの転送先アドレスを計算する。ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報406を、出力情報414の転送先アドレスとする。ここで、設定情報406は、設定情報403の生成する通信パケットの数だけ用意される。
(転送先アドレス[N])=(最終的に生成する通信パケットを記憶するアドレス[N]) ………(13)
次に、ディスクリプタ生成部353bは、設定情報401と、設定情報403と、設定情報405と、MSSとにより、通信パケットのサイズを計算する。具体的には、ディスクリプタ生成部353bは、設定情報401をもとに、使用する通信プロトコルを判断し、各ヘッダ長から通信ヘッダのサイズを計算する。これは、前述した出力情報413の計算と同様である。
そして、設定情報405のサイズがMSSより大きい、つまりMSSよりもペイロードのサイズが大きい場合、ディスクリプタ生成部353bは、通信パケットのサイズを以下の通り計算する。
(通信パケットのサイズ[N])=(通信ヘッダのサイズ)+MSS ………(14)
(最後の通信パケットのサイズ)=(通信ヘッダのサイズ)+(セットされたペイロードのサイズ)−MSS×(生成する通信パケットの数−1) ……..(15)
例えば、設定情報403の生成する通信パケットの数が3、設定情報405の転送元情報のサイズが4000byte(0xFA0)、MSSが1460byte(0x5B4)とする。また、通信ヘッダのサイズを54byte(0x36)とする。この場合、設定情報405の転送元情報のサイズがMSSよりも大きいため、ディスクリプタ生成部353bは、上記(14)式により通信パケットのサイズを計算する。一つ目、二つ目の通信パケットのサイズは、
(通信パケットのサイズ)=0x36+0x5B4=0x5EA
と計算できる。そして、三つ目の通信パケットのサイズは、上記(15)式により、
(最後の通信パケットのサイズ)=0x36+0xFA0−0x5B4×(3−1)=0x46E(1134byte)
と計算できる。
一方、設定情報405の転送元情報のサイズがMSS以下である場合、つまりペイロードの転送サイズがMSS以下である場合、ディスクリプタ生成部353bは、以下のとおり通信パケットのサイズを計算する。
(通信パケットのサイズ[N])=(通信ヘッダのサイズ)+(セットされたペイロードのサイズ[N]) ………(16)
例えば、設定情報403の生成する通信パケットの数が3、設定情報405の転送元情報のサイズが256byte(0x100)、512byte(0x200)、1024byte(0x400)とする。また、通信ヘッダのサイズが54byte(0x36)、MSSが1460byteとする。この場合、設定情報405の転送元情報のサイズがMSS以下であるため、ディスクリプタ生成部353bは、上記(16)式により通信パケットのサイズを計算する。一つ目の通信パケットのサイズは、
(通信パケットのサイズ[0])=0x36+0x100=0x136(310byte)
と計算できる。また、二つ目の通信パケットのサイズは、
(通信パケットのサイズ[1])=0x36+0x200=0x236(566byte)
と計算できる。さらに、三つ目の通信パケットのサイズは、
(通信パケットのサイズ[2])=0x36+0x400=0x436(1078byte)
と計算できる。
次に、演算結果の転送先アドレスの計算アルゴリズムについて説明する。ここで説明する転送先アドレスの計算は、図3のS51において実行される。なお、演算結果のサイズは、2バイトの固定値であるため、演算結果のサイズの計算は実施する必要がない。
ディスクリプタ生成部353bは、設定情報401と、設定情報403と、設定情報406とをもとに、以下のとおり演算結果の転送先アドレスを計算する。ここで、設定情報401の生成する通信パケットの種別は、MACヘッダ長、IPv4/v6ヘッダ長を指し、設定情報406の最終的に生成する通信パケットを記憶するアドレスは、ローカルメモリ32内の通信パケットの先頭アドレスを指す。
(転送先アドレス[N])=(最終的に生成する通信パケットを記憶するアドレス[N])+(MACヘッダ長)+(IPv4/v6ヘッダ長)+(TCP/UDPオフセット) ………(17)
ここで、TCP/UDPオフセットは、TCP/UDPヘッダの先頭アドレスから演算結果を挿入するアドレスまでのオフセット値である。具体的には、TCPオフセットは0x10、UDPオフセットは0x6である。
例えば、設定情報403の生成する通信パケットの数が3、設定情報406の最終的に生成する通信パケットを記憶するアドレスが0x100、0x400、0x800とする。また、設定情報401の生成する通信パケットの種別より、MACヘッダ長は14byte(0xE)、IPv4ヘッダ長は20byte(0x14)として、TCPヘッダを使用するものとする。これらの場合、一つ目の演算結果の転送先アドレスは、
(転送先アドレス[0])=0x100+0xE+0x14+0x10=0x132
と計算できる。また、二つ目の演算結果の転送先アドレスは、
(転送先アドレス[1])=0x400+0xE+0x14+0x10=0x432
と計算できる。さらに、三つ目の演算結果の転送先アドレスは、
(転送先アドレス[2])=0x800+0xE+0x14+0x10=0x832
と計算できる。
一方、ディスクリプタ生成部353bは、転送先へ転送する情報の種別を演算結果と決定すると、以下のとおり演算結果の転送先アドレスを計算する。ここで説明する転送先アドレスの計算は、図3のS52において実行される。なお、演算結果のサイズは、2バイトの固定値であるため、当該演算結果のサイズの計算は実施する必要がない。
ディスクリプタ生成部353bは、生成レジスタ部351にセットされた設定情報403と、設定情報404とにより、演算結果の転送先アドレスを計算する。ここで、設定情報404の転送元アドレスは、内部メモリ352内の通信ヘッダの先頭アドレスを指す。演算結果の転送先アドレスの計算式は、以下のとおりである。
(転送先アドレス[N])=(通信ヘッダの先頭アドレス[N])+(MACヘッダ長)+(IPv4/v6ヘッダ長)+(TCP/UDPオフセット) ………(18)
例えば、設定情報403の生成する通信パケットの数が3、設定情報404の通信ヘッダの先頭アドレスが0x0、0x0x80、0x100、TCPオフセットが0x10とする。また、設定情報401の生成する通信パケットの種別より、MACヘッダ長は14byte(0xE)、IPv4ヘッダ長は20byteとして(0x14)、TCPヘッダを使用するものとする。これらの場合、一つ目の演算結果の転送先アドレスは、
(転送先アドレス[0])=0x0+0xE+0x14+0x10=0x32
と計算できる。また、二つ目の演算結果の転送先アドレスは、
(転送先アドレス[1])=0x80+0xE+0x14+0x10=0xB2
と計算できる。さらに、三つ目の演算結果の転送先アドレスは、
(転送先アドレス[2])=0x100+0xE+0x14+0x10=0x196
と計算できる。
図5は、転送元アドレスから転送元情報を転送するディスクリプタチェーンの仕組みを示す図である。この図5では、DMAコントローラ34が3つの通信パケットを転送する場合で、演算部344がインターネットチェックサムとペイロードサムとを演算する場合のディスクリプタチェーンの仕組みについて示している。
この場合、リード転送部342は、3つの通信ヘッダ501、503および505と、3つのペイロード502、504および506とを転送元アドレスから転送する。なお、図5では一例として、通信ヘッダは、MACヘッダ、IPv4ヘッダ、TCPヘッダにより構成されているが、IPv6ヘッダ、UDPヘッダにより構成されていてもよい。
ディスクリプタ生成部353bは、リード転送部342によるリード転送を制御するために、通信ヘッダ用ディスクリプタ511、512および513と、ペイロード用ディスクリプタ514、515および516とを生成する。リード転送部342がデータを転送する順番は、1st Packetの通信ヘッダ501、ペイロード502、2nd Packetの通信ヘッダ503、ペイロード504、3rd Packetの通信ヘッダ505、ペイロード506の順である。
図5において、通信ヘッダ用ディスクリプタ1(511)は、通信ヘッダ501をリードするためのディスクリプタであり、通信ヘッダ用ディスクリプタ2(512)は、通信ヘッダ503をリードするためのディスクリプタである。通信ヘッダ用ディスクリプタ3(513)は、通信ヘッダ505をリードするためのディスクリプタである。また、ペイロード用ディスクリプタ1(514)は、ペイロード502をリードするためのディスクリプタであり、ペイロード用ディスクリプタ2(515)は、ペイロード504をリードするためのディスクリプタである。ペイロード用ディスクリプタ3(516)は、ペイロード506をリードするためのディスクリプタである。
リード転送部342が上記の順番で通信ヘッダおよびペイロードをDMA転送するためには、リード転送部342は、図5の矢印で示す順に各ディスクリプタ511〜516を読み込む必要がある。したがって、各ディスクリプタに記述されるチェーン先アドレス(出力情報411)は、以下のとおりとなる。
通信ヘッダ用ディスクリプタ1(511)には、チェーン先アドレスとして、ペイロード用ディスクリプタ1(514)のアドレスが記述される。ペイロード用ディスクリプタ1(514)には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ2(512)のアドレスが記述される。そして、通信ヘッダ用ディスクリプタ2(512)には、チェーン先アドレスとして、ペイロード用ディスクリプタ2(515)のアドレスが記述される。以下同様に、ペイロード用ディスクリプタ2(515)には、通信ヘッダ用ディスクリプタ3(513)のアドレス、通信ヘッダ用ディスクリプタ3(513)には、ペイロード用ディスクリプタ3(516)のアドレスが記述される。そして、ディスクリプタチェーンの最後であるペイロード用ディスクリプタ3(516)については、チェーン先アドレスの記述は行われない。各ディスクリプタに記述されるチェーン先アドレスは、前述した計算式(2)(3)により計算される。
これにより、DMAコントローラ34に対する一度の起動命令によって、DMAコントローラ34は通信ヘッダおよびペイロードを連続してリードすることができる。
なお、リード転送部342が通信ヘッダ501、503および505のみをDMA転送する場合には、ディスクリプタ生成部353bは、通信ヘッダ用ディスクリプタのみを生成する。この場合、通信ヘッダ用ディスクリプタ1(511)には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ2(512)のアドレスが記述される。また、通信ヘッダ用ディスクリプタ2(512)には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ3(513)のアドレスが記述され、通信ヘッダ用ディスクリプタ3(513)には、チェーン先アドレスの記述は行われない。つまり、リード転送部342は、図5の破線の矢印で示す順に各ディスクリプタ511〜513を読み込むことになる。
図6は、転送先アドレスへデータを転送するディスクリプタチェーンの仕組みを示す図である。この図6では、DMAコントローラ34のライト転送部343が3つの通信パケットを転送する場合のディスクリプタチェーンの仕組みについて示している。
この場合、ライト転送部343は、通信ヘッダとペイロードとで構成された3つの通信パケット601、603および605と、3つの演算結果602、604および606とを転送先アドレスへ転送する。なお、図6では一例として、通信パケット601、603および605に含まれる通信ヘッダは、MACヘッダ、IPv4ヘッダ、TCPヘッダにより構成されているが、IPv6ヘッダ、UDPヘッダにより構成されていてもよい。
このとき、ディスクリプタ生成部353bは、ライト転送部343のライト転送を制御するために、通信パケット用ディスクリプタ611、612および613と、演算結果用ディスクリプタ614、615および616とを生成する。ライト転送部343がデータを転送する順番は、1st Packetの通信パケット601、演算結果602、2nd Packetの通信パケット603、演算結果604、3rd Packetの通信パケット605、演算結果606の順である。
図6において、通信パケット用ディスクリプタ1(611)は、通信パケット601をリードするためのディスクリプタであり、通信パケット用ディスクリプタ2(612)は、通信パケット603をリードするためのディスクリプタである。通信パケット用ディスクリプタ3(613)は、通信パケット605をリードするためのディスクリプタである。また、演算結果用ディスクリプタ1(614)は、演算結果602をリードするためのディスクリプタであり、演算結果用ディスクリプタ2(615)は、演算結果604をリードするためのディスクリプタである。演算結果用ディスクリプタ3(616)は、演算結果606をリードするためのディスクリプタである。
ライト転送部343が上記の順番で通信パケットおよび演算結果をDMA転送するためには、ライト転送部343は、図6の矢印で示す順に各ディスクリプタ611〜616を読み込む必要がある。したがって、各ディスクリプタに記述されるチェーン先アドレス(出力情報411)は、以下のとおりとなる。
通信パケット用ディスクリプタ1(611)には、チェーン先アドレス(出力情報411)として、演算結果用ディスクリプタ1(614)のアドレスが記述される。演算結果用ディスクリプタ1(614)には、チェーン先アドレス(出力情報411)として、通信パケット用ディスクリプタ2(612)のアドレスが記述される。そして、通信パケット用ディスクリプタ2(612)には、チェーン先アドレス(出力情報411)として、演算結果用ディスクリプタ2(615)のアドレスが記述される。以下同様に、演算結果用ディスクリプタ2(615)には、通信パケット用ディスクリプタ3(613)のアドレス、通信パケット用ディスクリプタ3(613)には、演算結果用ディスクリプタ3(616)のアドレスが記述される。そして、ディスクリプタチェーンの最後である演算結果用ディスクリプタ3(616)については、チェーン先アドレス(出力情報411)の記述は行われない。各ディスクリプタに記述するチェーン先アドレス(出力情報411)は、前述した計算式(5)(6)により計算される。
これにより、DMAコントローラ34に対する一度の起動命令によって、DMAコントローラ34は通信パケットおよび演算結果を連続してライトすることができる。
なお、ライト転送部343が演算結果602、604および606のみをDMA転送する場合には、ディスクリプタ生成部353bは、演算結果用ディスクリプタのみを生成する。この場合、演算結果用ディスクリプタ1(614)には、チェーン先アドレスとして、演算結果用ディスクリプタ2(615)のアドレスが記述される。また、演算結果用ディスクリプタ2(615)には、チェーン先アドレスとして、演算結果用ディスクリプタ3(616)のアドレスが記述され、演算結果用ディスクリプタ3(616)には、チェーン先アドレスの記述は行われない。つまり、ライト転送部343は、図6の破線の矢印で示す順に各ディスクリプタ614〜615を読み込むことになる。
以上説明したように、通信装置100は、DMAコントローラ34と、ディスクリプタ処理部35と、を備える。ディスクリプタ処理部35は、DMAコントローラ34のDMA転送を制御するためのディスクリプタを生成する。
本実施形態では、ディスクリプタ処理部35は、DMAコントローラ34がデータを入力するデータ転送(リード転送)が、複数の通信ヘッダの転送であるか、通信ヘッダとペイロードとの転送であるかに関する情報を取得する。そして、ディスクリプタ処理部35は、DMAコントローラ34が通信ヘッダのみをデータ転送する場合、通信ヘッダ用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするように、ディスクリプタを生成する。一方、ディスクリプタ処理部35は、DMAコントローラ34が通信ヘッダとペイロードとをデータ転送する場合は、通信ヘッダ用ディスクリプタからペイロード用ディスクリプタへチェーンするように、ディスクリプタを生成する。
また、ディスクリプタ処理部35は、DMAコントローラ34がデータを出力するデータ転送(ライト転送)が、複数の演算結果の転送であるか、演算結果と通信パケットとの転送であるかに関する情報を取得する。そして、ディスクリプタ処理部35は、DMAコントローラ34が演算結果のみをデータ転送する場合、演算結果用ディスクリプタから演算結果用ディスクリプタへチェーンするように、ディスクリプタを生成する。一方、ディスクリプタ処理部35は、DMAコントローラ34が演算結果と通信パケットとをデータ転送する場合は、通信パケット用ディスクリプタから演算結果用ディスクリプタへチェーンするように、ディスクリプタを生成する。
そして、ディスクリプタ処理部35は、生成されたディスクリプタが記憶されている内部メモリ352のアドレスをDMAコントローラ34に設定することで、DMAコントローラ34にデータ転送の開始を指示する。これにより、DMAコントローラ34は起動され、DMAコントローラ34は、ディスクリプタ処理部35によって生成されたディスクリプタに従ってデータ転送(DMA転送)を実行する。
このように、ディスクリプタ処理部35は、DMAコントローラ34がDMA転送する情報の種別を判定し、連続する複数のディスクリプタを生成する。これにより、DMAコントローラ34は、一度起動されると、ディスクリプタを連続して読み込み、連続してDMA転送を実行することになる。具体的には、DMAコントローラ34は、通信ヘッダ、もしくは通信ヘッダとペイロードとを入力し、入力した上記データに対して実行した演算の演算結果、もしくは通信パケットと演算結果とを出力するDMA転送を実行する。
したがって、通信装置100が外部機器に対してネットワーク経由で送信データを複数の通信パケットにより転送する場合、DMAコントローラ34を一度起動させるだけで、複数の通信パケットを生成することができる。つまり、DMAコントローラ34の制御にかかる処理時間を低減し、通信装置100の送信処理能力を向上させることができる。
また、ディスクリプタ処理部35は、DMAコントローラ34が出力するデータの種別に基づいて、DMAコントローラ34がデータを入力するリード転送が、通信ヘッダのみの転送であるか、通信ヘッダとペイロードとの転送であるかを判定する。
例えば、DMAコントローラ34が出力するデータがチェックサム値の演算結果である場合、演算の種別がインターネットチェックサムの演算である場合、ディスクリプタ処理部35は、リード転送が複数の通信ヘッダの転送であると判定する。そして、演算の種別がインターネットチェックサムとペイロードサムとの演算である場合には、ディスクリプタ処理部35は、リード転送が通信ヘッダとペイロードとの転送であると判定する。
このように、ディスクリプタ処理部35は、DMAコントローラ34が出力するデータの種別に基づいて、リード転送の種別を適切に判定することができる。したがって、DMAコントローラ34が複数のデータを適切に入力するためのディスクリプタを適切に生成することができる。
さらに、ディスクリプタ処理部35は、ディスクリプタの生成に際し、ディスクリプタの生成に必要な設定情報を取得し、取得された設定情報に基づいてディスクリプタに記述する情報を計算する。ここで、設定情報は、生成する通信パケットの種別、最終的に生成する通信パケットを記憶するアドレス、生成する通信パケットの数、DMAコントローラ34が入力するデータの転送元アドレスおよび転送元情報のサイズの少なくとも1つを含む。そして、ディスクリプタ処理部35は、上記設定情報に基づいて、ディスクリプタに記述する情報として、チェーン先のディスクリプタのアドレスであるチェーン先アドレス、DMAコントローラ34が転送するデータのアドレス情報およびサイズ情報を計算する。
チェーン先アドレスは、生成すべき通信パケットの数と、内部メモリ352における複数のディスクリプタの先頭アドレスと、ディスクリプタのサイズとに基づいて計算することができる。ここで、内部メモリ352は、チェーンさせる複数のディスクリプタを連続する領域に記憶する。
このように、ディスクリプタ処理部35は、DMAコントローラ34が次にリードするディスクリプタのアドレスであるチェーン先アドレスを適切に計算し、チェーン先アドレスが記述されたディスクリプタを生成することができる。したがって、DMAコントローラ34は、複数のデータを適切な順番で転送元から連続して入力することができる。
また、DMAコントローラ34が入力するペイロードの転送元のアドレスは、生成すべき通信パケットの数と、ローカルメモリ32における送信すべきデータの先頭アドレスと、所定のサイズ(本実施形態では、MSS)とに基づいて計算することができる。ここで、生成すべき通信パケットの数は、送信すべきデータを上記所定のサイズで分割したペイロードの数である。
このように、ディスクリプタ処理部35は、DMAコントローラ34がリードするペイロードの転送元のアドレスを適切に計算し、当該アドレスを、ペイロードをリード転送するためのディスクリプタに記述することができる。したがって、DMAコントローラ34は、MSSよりも大きなデータを転送する場合、所定のサイズで分割された複数のペイロードを適切な順番で転送元から連続して入力することができる。
さらに、DMAコントローラ34が出力する演算結果の転送先のアドレスは、生成すべき通信パケットの数と、内部メモリ352もしくはローカルメモリ32における複数の通信ヘッダの先頭アドレスと、通信ヘッダのサイズとに基づいて計算することができる。ここで、内部メモリ352は、複数のペイロードにそれぞれ対応する複数の通信ヘッダを連続する領域に記憶する。
このように、ディスクリプタ処理部35は、DMAコントローラ34がライトする演算結果の転送先のアドレスを適切に計算し、当該アドレスを、演算結果をライト転送するためのディスクリプタに記述することができる。したがって、DMAコントローラ34は、演算結果を通信ヘッダの適切な位置に書き込むことができる。
なお、上記実施形態においては、ディスクリプタ処理部35は、図3のS47において、チェックサム値の演算の種別にペイロードサムの演算が含まれるか否かを判定し、その判定結果をもとにリード転送の種別を判定する場合について説明した。しかしながら、ディスクリプタ処理部35は、DMAコントローラ34が出力するデータに通信パケットが含まれると判定した場合、リード転送が通信ヘッダとペイロードとの転送であると判定してもよい。つまり、上記の演算の種別にペイロードサムの演算が含まれない場合であっても、DMAコントローラ34が通信パケットを出力する場合には、リード転送が通信ヘッダとペイロードとの転送であると判定するようにしてもよい。
また、上記実施形態においては、DMAコントローラ34が入力する転送元情報が通信ヘッダとペイロードである場合について説明したが、転送元情報は上記に限定されない。また、DMAコントローラ34が転送先へ転送する情報も、演算結果と通信パケットに限定されない。ディスクリプタ処理部35は、DMAコントローラ34によるDMA転送が第1のデータのみの転送であるか、第1のデータと第2のデータとの転送であるかを判定し、DMA転送の種別に応じてディスクリプタチェーンを生成するようにしてもよい。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記録媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
10…メインCPU、20…メインメモリ、30…サブシステム、31…サブCPU、32…ローカルメモリ、33…通信I/F、34…DMAコントローラ、35…ディスクリプタ処理部、100…通信装置

Claims (15)

  1. DMA(Direct Memory Access)転送を実行する転送手段と、
    前記転送手段によるDMA転送が、複数の第1のデータの転送であるか、前記第1のデータおよび第2のデータの転送であるかに関する情報を取得する取得手段と、
    前記取得手段により取得された情報が、前記DMA転送が前記複数の第1のデータの転送であることを示す情報である場合、前記転送手段が前記第1のデータを転送するためのディスクリプタから、前記転送手段が異なる前記第1のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、
    前記取得手段により取得された情報が、前記DMA転送が前記第1のデータおよび前記第2のデータの転送であることを示す情報である場合、前記転送手段が前記第1のデータを転送するためのディスクリプタから、前記転送手段が前記第2のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成する生成手段と、
    前記生成手段により生成された前記ディスクリプタに基づいて前記転送手段によるDMA転送を実行することにより生成された複数の通信パケットを送信する送信手段と、
    を備えることを特徴とする通信装置。
  2. 前記DMA転送が、前記転送手段がデータを入力するリード転送である場合、
    前記第1のデータは通信ヘッダであり、前記第2のデータはペイロードであることを特徴とする請求項1に記載の通信装置。
  3. 前記DMA転送が、前記転送手段がデータを出力するライト転送である場合、
    前記第1のデータは、前記転送手段が入力したデータに対して実行した演算の演算結果であり、前記第2のデータは、前記通信ヘッダを前記ペイロードに付加した通信パケットであることを特徴とする請求項2に記載の通信装置。
  4. 前記取得手段は、
    前記転送手段が出力するデータの種別に基づいて、前記リード転送が、複数の前記通信ヘッダの転送であるか、前記通信ヘッダと前記ペイロードとの転送であるかを判定することを特徴とする請求項3に記載の通信装置。
  5. 前記取得手段は、前記転送手段が出力するデータの種別として前記演算の種別を取得し、
    前記演算の種別がインターネットチェックサムの演算である場合、前記リード転送が、複数の前記通信ヘッダの転送であると判定し、
    前記演算の種別が前記インターネットチェックサムとペイロードサムとの演算である場合、前記リード転送が、前記通信ヘッダと前記ペイロードとの転送であると判定することを特徴とする請求項3または4に記載の通信装置。
  6. 前記取得手段は、
    前記転送手段が出力するデータの種別に基づいて、前記転送手段が出力するデータに前記通信パケットが含まれると判定した場合、前記リード転送が、前記通信ヘッダと前記ペイロードとの転送であると判定することを特徴とする請求項3から5のいずれか1項に記載の通信装置。
  7. 前記ディスクリプタの生成に必要な設定情報として、前記通信パケットの種別、前記通信パケットを記憶するアドレス情報、生成すべき前記通信パケットの数、前記転送手段が入力するデータの転送元のアドレス情報およびサイズ情報の少なくとも1つを取得する第2の取得手段をさらに備え、
    前記生成手段は、
    前記第2の取得手段により取得された設定情報に基づいて、前記ディスクリプタに記述する情報を計算し、前記ディスクリプタを生成することを特徴とする請求項3から6のいずれか1項に記載の通信装置。
  8. 前記生成手段は、
    前記第2の取得手段により取得された設定情報に基づいて、前記ディスクリプタに記述する情報として、チェーン先のディスクリプタのアドレス情報、前記転送手段が転送するデータのアドレス情報およびサイズ情報を計算することを特徴とする請求項7に記載の通信装置。
  9. チェーンさせる複数の前記ディスクリプタを連続する領域に記憶する第1のメモリをさらに備え、
    前記生成手段は、
    前記生成すべき通信パケットの数と、前記第1のメモリにおける前記複数のディスクリプタの先頭アドレスと、前記ディスクリプタのサイズとに基づいて、前記チェーン先のディスクリプタのアドレスを計算し、前記ディスクリプタに記述することを特徴とする請求項8に記載の通信装置。
  10. 送信すべきデータを記憶する第2のメモリをさらに備え、
    前記生成すべき通信パケットの数は、送信すべきデータを所定のサイズで分割した前記ペイロードの数であり、
    前記生成手段は、
    前記生成すべき通信パケットの数と、前記第2のメモリにおける前記送信すべきデータの先頭アドレスと、前記所定のサイズとに基づいて、前記転送するデータのアドレス情報として、前記ペイロードの転送元のアドレスを計算し、前記ペイロードをリード転送するための前記ディスクリプタに記述することを特徴とする請求項8または9に記載の通信装置。
  11. 前記通信ヘッダを記憶する第3のメモリをさらに備え、
    前記生成手段は、
    前記生成すべき通信パケットの数と、前記第3のメモリにおける前記通信ヘッダの先頭アドレスと、前記通信ヘッダのサイズとに基づいて、前記転送するデータのアドレス情報として、前記演算結果の転送先のアドレスを計算し、前記演算結果をライト転送するための前記ディスクリプタに記述することを特徴とする請求項8から10のいずれか1項に記載の通信装置。
  12. 前記生成手段により生成された前記ディスクリプタが記憶されているアドレスを前記転送手段に設定することで、前記転送手段に前記DMA転送の開始を指示する制御手段をさらに備えることを特徴とする請求項1から11のいずれか1項に記載の通信装置。
  13. 使用される通信プロトコルが、IPv4またはIPv6、もしくはTCPまたはUDPであることを特徴とする請求項1から12のいずれか1項に記載の通信装置。
  14. DMA(Direct Memory Access)転送を実行するステップと、
    前記DMA転送が、複数の第1のデータの転送であるか、前記第1のデータおよび第2のデータの転送であるかに関する情報を取得するステップと、
    取得された前記情報が、前記DMA転送が前記複数の第1のデータの転送であることを示す情報である場合、前記DMA転送により前記第1のデータを転送するためのディスクリプタから、前記DMA転送により異なる前記第1のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、
    取得された前記情報が、前記DMA転送が前記第1のデータおよび前記第2のデータの転送であることを示す情報である場合、前記DMA転送により前記第1のデータを転送するためのディスクリプタから、前記DMA転送により前記第2のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成するステップと、
    生成された前記ディスクリプタに基づいて前記DMA転送を実行することにより生成された複数の通信パケットを送信するステップと、を含むことを特徴とする通信方法。
  15. コンピュータを、請求項1から13のいずれか1項に記載された通信装置の各手段として機能させるためのプログラム。
JP2018024189A 2018-02-14 2018-02-14 通信装置、通信方法およびプログラム Active JP6938399B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018024189A JP6938399B2 (ja) 2018-02-14 2018-02-14 通信装置、通信方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018024189A JP6938399B2 (ja) 2018-02-14 2018-02-14 通信装置、通信方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2019139638A JP2019139638A (ja) 2019-08-22
JP6938399B2 true JP6938399B2 (ja) 2021-09-22

Family

ID=67695429

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018024189A Active JP6938399B2 (ja) 2018-02-14 2018-02-14 通信装置、通信方法およびプログラム

Country Status (1)

Country Link
JP (1) JP6938399B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4344576B2 (ja) * 2003-09-26 2009-10-14 株式会社ルネサステクノロジ パケット通信装置
JP4612821B2 (ja) * 2004-09-10 2011-01-12 キヤノン株式会社 通信制御装置及び方法
US20060221953A1 (en) * 2005-04-01 2006-10-05 Claude Basso Method and apparatus for blind checksum and correction for network transmissions
JP2009116386A (ja) * 2007-11-01 2009-05-28 Sony Corp 情報処理装置および方法、並びにプログラム
JP2013102556A (ja) * 2013-03-05 2013-05-23 Renesas Electronics Corp 通信装置及び方法
JP6433146B2 (ja) * 2014-04-22 2018-12-05 キヤノン株式会社 情報処理装置、システム、情報処理方法、コンピュータプログラム

Also Published As

Publication number Publication date
JP2019139638A (ja) 2019-08-22

Similar Documents

Publication Publication Date Title
JP6433146B2 (ja) 情報処理装置、システム、情報処理方法、コンピュータプログラム
TWI406133B (zh) 資料處理設備及資料傳送方法
WO2009070324A1 (en) A method for setting parameters and determining latency in a chained device system
US10956347B2 (en) Data transfer device, arithmetic processing device, and data transfer method
JP5482230B2 (ja) 通信装置、情報処理装置、通信装置の制御方法及び制御プログラム
US8990422B1 (en) TCP segmentation offload (TSO) using a hybrid approach of manipulating memory pointers and actual packet data
WO2016202158A1 (zh) 一种报文传输方法、装置及计算机可读存储介质
US8230137B2 (en) Network processor, reception controller and data reception processing method performing direct memory access transfer
JP2005167965A (ja) パケット処理方法および装置
US11336297B2 (en) DMA transfer apparatus, method of controlling the same, communication apparatus, method of controlling the same, and non-transitory computer-readable storage medium
JP6938399B2 (ja) 通信装置、通信方法およびプログラム
US9137167B2 (en) Host ethernet adapter frame forwarding
JP2004207891A (ja) データ通信装置、データ通信方法、データ通信プログラム及びデータ通信プログラムを記録した記録媒体
JP2019016054A (ja) 情報処理システム、情報処理装置、及び情報処理システムの制御方法
JP5391449B2 (ja) 記憶装置
US9544401B2 (en) Device and method for data communication using a transmission ring buffer
CN115550442A (zh) 数据包传输方法、装置、电子设备及存储介质
JP2020088517A (ja) 通信装置、通信装置の制御方法およびプログラム
CN113438097B (zh) 一种网络加速的实现方法及装置
JP5360594B2 (ja) Dma転送装置及び方法
JP7027145B2 (ja) 通信装置、通信装置の制御方法およびプログラム
US11102150B2 (en) Communication apparatus and control method for communication apparatus
JP7005303B2 (ja) 通信装置、パケット生成装置およびそれらの制御方法
JP2012049883A (ja) 通信装置およびパケット処理方法
JP2008059452A (ja) 画像処理装置、画像処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210721

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210803

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210901

R151 Written notification of patent or utility model registration

Ref document number: 6938399

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151