(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-19
(45)【発行日】2024-01-29
(54)【発明の名称】通信装置
(51)【国際特許分類】
H04L 69/16 20220101AFI20240122BHJP
【FI】
H04L69/16
(21)【出願番号】P 2019158064
(22)【出願日】2019-08-30
【審査請求日】2022-07-28
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】100109380
【氏名又は名称】小西 恵
(74)【代理人】
【識別番号】100109036
【氏名又は名称】永岡 重幸
(72)【発明者】
【氏名】松本 仁
【審査官】安藤 一道
(56)【参考文献】
【文献】特開2018-142853(JP,A)
【文献】米国特許出願公開第2006/0173970(US,A1)
【文献】特開2006-005878(JP,A)
【文献】特開2008-092082(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 69/16
(57)【特許請求の範囲】
【請求項1】
メインプロセッサとメインメモリを少なくとも含む第1システムと、
サブプロセッサとハードウエアアクセラレータを少なくとも含むサブシステムと、内部バッファを備え当該内部バッファに格納された通信パケットを外部へ送信する通信インタフェースと、を備える通信装置であって、
前記第1システム
の前記メインプロセッサは、
送信データを生成する生成手段と、
前記サブシステムに対して通信パケットのペイロード分割を引き起こさせる指示を伝達する伝達手段と、
として機能し、
前記サブシステム
の前記ハードウエアアクセラレータは、
前記送信データをペイロード分割し、複数の通信パケットを生成する生成手段と
して機能し、
前記サブシステムの前記サブプロセッサは、
前記複数の通信パケットを、前記通信インタフェースの前記内部バッファへ転送するよう制御する転送制御手段と、
前記生成手段により生成された前記複数の通信パケットのうち、前記通信インタフェースの前記内部バッファへ転送すべき通信パケットの転送サイズを、前記転送制御手段により前記通信パケットを転送する際の、前記通信インタフェースの前記内部バッファの空き状態に基づいて決定する決定手段と、
として機能し、
前記サブシステムの前記転送制御手段は、所定のデータ転送プロトコルを用いて、前記決定手段により決定された前記転送サイズで、前記複数の通信パケットが前記内部バッファへ転送されるよう制御する
ことを特徴とする通信装置。
【請求項2】
前記サブシステムの前記生成手段は、生成した前記複数の通信パケットを送信キューに追加し、
前記転送制御手段は、前記送信キューから、前記転送サイズで、前記複数の通信パケットが、前記通信インタフェースの前記内部バッファへ転送されるよう制御する
ことを特徴とする請求項1に記載の通信装置。
【請求項3】
前記サブシステムは、前記生成手段
として機能する前記ハードウエアアクセラレータからなる第1サブシステムと、前記転送制御手段
としての機能を提供する前記通信インタフェースの制御ドライバ
を実行する前記サブプロセッサを含む第2サブシステムとに更に区分され、
前記送信キューは前記第1サブシステムと前記第2サブシステムとがアクセス可能な記憶領域であり、
前記第1サブシステムは、前記送信キューへの通信パケットの追加が完了したことを示すイベントを前記第2サブシステムに対して通知する通知手段をさらに備え、
前記第2サブシステムの前記転送制御手段は、前記通知を受信したことに従って前記決定手段により決定された前記転送サイズで、前記送信キューに格納された前記複数の通信パケットを前記通信インタフェースの内部バッファに対して所定の伝送方式で転送する
ことを特徴とする請求項2に記載の通信装置。
【請求項4】
前記第1サブシステムの前記通知手段は、前記生成手段により生成された前記複数の通信パケットのそれぞれについて、後続する通信パケットの有無を示すフラグを判定し、後続する通信パケットが無いことを示すフラグが判定された際に、前記イベントを前記第2サブシステムに対して通知する
ことを特徴とする請求項3に記載の通信装置。
【請求項5】
前記サブシステム
の前記サブプロセッサは、前記通信インタフェースの仕様に応じて、前記生成手段により生成された前記複数の
通信パケットを前記送信キューに追加するか否かを切り替える切り替え手段
としてさら
機能する
ことを特徴とする請求項2から4のいずれか1項に記載の通信装置。
【請求項6】
前記サブシステムの前記決定手段は、前記転送サイズを、前記転送制御手段により前記通信パケットを転送する際の、前記通信インタフェースの前記内部バッファの空き容量に基づいて決定することを特徴とする請求項1から5のいずれか1項に記載の通信装置。
【請求項7】
前記サブシステムの前記決定手段は、前記通信インタフェースの前記内部バッファの前記空き容量が、前記転送制御手段が一度に転送可能な通信パケットの数の上限以下である場合に、前記内部バッファの前記空き容量を前記転送サイズとして決定する
ことを特徴とする請求項6に記載の通信装置。
【請求項8】
前記サブシステムの前記生成手段は、生成された前記複数の通信パケットを送信キューに追加し、
前記サブシステムの前記決定手段は、前記通信インタフェースの前記内部バッファの前記空き容量が、前記送信キューに追加された通信パケットの数以下である場合に、前記内部バッファの前記空き容量を前記転送サイズとして決定する
ことを特徴とする請求項6または7に記載の通信装置。
【請求項9】
前記サブシステムの前記転送制御手段は、前記複数の通信パケットが、Secure Digital Input Output(SDIO)、Peripheral Component Interconnect express(PCIe)、またはUniversal Serial Bus(USB)のいずれかに対応する前記所定のデータ転送プロトコルを使用して、前記通信インタフェースの前記内部バッファへ転送されるように制御する
ことを特徴とする請求項1から8のいずれか1項に記載の通信装置。
【請求項10】
前記サブシステムの前記生成手段は、TCP Segmentation Offload(TSO)を使用して前記複数の通信パケットを生成する、
ことを特徴とする請求項1から9のいずれか1項に記載の通信装置。
【請求項11】
DMA(Direct Memory Access)コントローラをさらに備え、
前記DMAコントローラは、前記第1システムのメインメモリと前記サブシステムの内部メモリ間のデータ転送及び、前記内部メモリと、前記通信インタフェースとの間のデータ転送を行うことが可能に構成され、
前記サブシステムの前記転送制御手段は、前記DMAコントローラにDMA転送開始指示を行うことにより、前記決定手段により決定された前記転送サイズで、前記内部メモリに記憶された複数の通信パケットを前記内部バッファへ転送するよう制御する
ことを特徴とする請求項1から10のいずれか1項に記載の通信装置。
【請求項12】
前記通信インタフェースは、無線通信を行う通信インタフェースである
ことを特徴とする請求項1から4のいずれか1項に記載の通信装置。
【請求項13】
前記通信インタフェースは、IEEE802.11規格シリーズに準拠した無線通信を行う通信インタフェースである
ことを特徴とする請求項12に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信プロトコル処理により生成された通信パケットを送信可能な通信装置に関する。
【背景技術】
【0002】
近年、ネットワークの高速化に伴って、各通信プロトコルで規定された処理である通信プロトコル処理の効率化が要請されている。こうした通信プロトコルにはTCP(Transmission Control Protocol)/IP(Internet Protocol)やUDP(User Datagram Protocol)等がある。
【0003】
通信プロトコル処理の効率化のため、TCPに係る通信プロトコル処理の一部をハードウエアへオフロードする、TSO(TCP Segmentation Offload)という技術がある。特許文献1は、TCPに係る通信プロトコル処理の一部であるTCPセグメント処理をハードウエアへオフロードする通信装置を開示する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1のハードウエアは、TCP/IPスタックが決定した送信データサイズを用いて、複数の送信フレームを一括して生成し、生成された複数の送信フレームを一括して通信インタフェースに転送する。ここで、TCP/IPスタックやハードウエアにおいて送信データサイズが決定され送信フレームが一括生成されている間にも、通信インタフェースの内部バッファに存在する送信フレームはネットワークに送信されていく。
【0006】
このため、TCP/IPスタックが送信データサイズを決定する際に取得した通信インタフェースの内部バッファのサイズと、ハードウエアが送信フレームを通信インタフェースの内部バッファに転送する際に転送可能な内部バッファのサイズとに乖離が生ずる。例えば、送信フレームを通信インタフェースの内部バッファに転送する際には、内部バッファの空き容量が増大しており、より多くの送信フレームを転送可能であるにもかかわらず、送信フレームが生成されていないため内部バッファに転送できない。これにより、内部バッファに空きが生じて通信インタフェースを効率的に利用できず、パケット送信における通信性能が低下するおそれがあった。
【0007】
本発明は、上述の課題に鑑みてなされたものであり、その目的は、通信インタフェースをより効率的に利用して、パケット送信における通信性能を向上させることにある。
【課題を解決するための手段】
【0008】
上記課題を解決するため、本発明に係る通信装置のある態様によれば、メインプロセッサとメインメモリを少なくとも含む第1システムと、サブプロセッサとハードウエアアクセラレータを少なくとも含むサブシステムと、内部バッファを備え当該内部バッファに格納された通信パケットを外部へ送信する通信インタフェースと、を備える通信装置であって、前記第1システムの前記メインプロセッサは、送信データを生成する生成手段と、前記サブシステムに対して通信パケットのペイロード分割を引き起こさせる指示を伝達する伝達手段と、として機能し、前記サブシステムの前記ハードウエアアクセラレータは、
前記送信データをペイロード分割し、複数の通信パケットを生成する生成手段として機能し、前記サブシステムの前記サブプロセッサは、前記複数の通信パケットを、前記通信インタフェースの前記内部バッファへ転送するよう制御する転送制御手段と、前記生成手段により生成された前記複数の通信パケットのうち、前記通信インタフェースの前記内部バッファへ転送すべき通信パケットの転送サイズを、前記転送制御手段により前記通信パケットを転送する際の、前記通信インタフェースの前記内部バッファの空き状態に基づいて決定する決定手段と、として機能し、前記サブシステムの前記転送制御手段は、所定のデータ転送プロトコルを用いて、前記決定手段により決定された前記転送サイズで、前記複数の通信パケットが前記内部バッファへ転送されるよう制御する通信装置が提供される。
【発明の効果】
【0009】
本発明によれば、通信インタフェースをより効率的に利用して、パケット送信における通信性能を向上させることができる。
【図面の簡単な説明】
【0010】
【
図1】本実施形態に係る通信装置1のハードウエアおよび機能構成の一例を示すブロック図
【
図2】
図1の通信装置1の通信パケット生成および送信における機能構成および動作の一例を説明する図
【
図3】通信装置1の通信パケット送信処理の処理手順の一例を示すフローチャート
【
図4】実施形態1における
図2の通信プロトコル処理および通信パケット転送処理(S4)の詳細処理手順の一例を示すフローチャート
【
図5】通信装置1が使用するパケット管理構造体のレイアウトの一例を示す図
【
図6】実施形態2における
図2の通信プロトコル処理および通信パケット転送処理(S4)の詳細処理手順の一例を示すフローチャート
【発明を実施するための形態】
【0011】
以下、添付図面を参照して、本発明を実施するための実施形態について詳細に説明する。なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に必ずしも限定されるものではない。また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
【0012】
(実施形態1)
本実施形態においては、通信装置は、通信プロトコル処理により一括生成した複数の通信パケットを通信インタフェースに転送する際に、通信インタフェースの内部バッファの状態に基づいて通信パケットの転送サイズを決定する。
ここで、通信装置において、アプリケーションから転送される送信データから複数の通信パケットを生成する処理は、例えば、TSO(TCP Segmentation Offload)技術を使用してオフロード実行されてよい。
以下、通信装置が、TCP(Transmission Control Protocol)/IP(Internet Protocol)通信プロトコルで通信パケットを生成する例を説明するが、本実施形態の通信プロトコルはこれに限定されない。
【0013】
<本実施形態のハードウエア構成>
図1は、本実施形態に係る通信装置のハードウエアおよび機能構成の一例を示す図である。
通信装置1は、サブシステム2、メインCPU3、およびメインメモリ4を備える。サブシステム2は、各種通信プロトコルで規定された処理である通信プロトコル処理を実行する。サブシステム2、メインCPU3、およびメインメモリ4は、システムバス5を介して相互に接続されている。
【0014】
メインCPU3は、OSI参照モデルで定義されるアプリケーション層でアプリケーションソフトウエアを実行するとともに、通信装置1全体の制御を実行する。具体的には、メインCPU3は、アプリケーションソフトウエアを実行する上で必要となるデータやプログラムなどをメインメモリ4の内部に記憶し、必要に応じてシステムバス5を介して読み出しや書き込みを行う。
メインメモリ4は、システムバス5を介して、通信装置1内の各機能ブロックが共有して利用可能なメモリであり、例えば主としてDRAM(Dynamic Random Access Memory)等の半導体メモリで構成されてよい。メインメモリ4内部の領域は、プログラムを格納する領域やアプリケーションソフトウエアが使用するアプリケーションバッファ領域などに分けられる。
【0015】
サブシステム2は、サブCPU21、ローカルメモリ22、DMA(Direct Memory Access)コントローラ23、通信インタフェース(以下、「I/F」という)24、およびパケット生成処理部25を備える。サブCPU21、ローカルメモリ22、DMAコントローラ23、通信I/F24およびパケット生成処理部25は、ローカルバス26を介して相互に接続されている。
【0016】
サブシステム2は、通信装置1における通信プロトコル処理を実行するサブシステムであり、特に、サブシステム2は、TCP/IPプロトコル等の通信プロトコル処理に特化して外部機器とネットワークを介したデータ転送処理を実行する。
本実施形態において、サブシステム2は、通信プロトコル処理専用のハードウエア(ハードウエアアクセラレータ)を搭載して、通信プロトコル処理の一部をメインCPU3に代えて高速で実行してよい。
なお、サブシステム2は、TCP/IPプロトコルに替えて、その他の通信プロトコルで通信プロトコル処理を実行することができる。以下、TCP/IPプロトコルは、別段の定義のない限り、UDPプロトコルを含むものとして説明する。
【0017】
サブCPU21は、サブシステム2による通信プロトコル処理全体の実行を制御する。具体的には、サブCPU21は、IPv4(IPバージョン4)、IPv6(IPバージョン6)、UDP、TCP等の各通信プロトコル処理を実行する。サブCPU21が実行する通信プロトコル処理は、送信シーケンス制御、輻輳制御、通信エラー制御等を含む。
サブCPU21は、1つのプロセッサとして構成してもよいし、複数のプロセッサによるマルチプロセッサ構成としてもよい。さらに、サブCPU21は、プロセッサと一部の機能をアクセラレートするハードウエアアクセラレータとで構成してもよい。
なお、サブCPU21に替えて、メインCPU3が通信プロトコル処理の全部または一部を実行してもよい。
【0018】
ローカルメモリ22は、サブシステム2のサブCPU21が利用可能なメモリであり、例えば、主としてSRAM(Static Random Access Memory)等の半導体メモリで構成されてよい。
また、ローカルメモリ22へは、メインCPU3からもシステムバス5およびローカルバス26を介してアクセス可能である。ローカルメモリ22は、通信プロトコル処理を実行する上で必要となる送受信データを格納するネットワークバッファ221の領域を備える。ネットワークバッファ221は、アプリケーションソフトウエアにより準備され、メインメモリ4から転送された送信データを格納する送信バッファである。ローカルメモリ22へは、必要に応じてサブシステム2の各機能モジュールが、ローカルバス26を介して読み出しや書き込みを実行する。
【0019】
DMAコントローラ23は、サブCPU21およびパケット生成処理部25双方から直接制御可能であり、ローカルメモリ22へのアクセスを提供し、サブCPU21からの指示により、DMA転送を実行する。
DMAコントローラ23は、ディスクリプタに記述された内容に従ってソース側からディスティネーション側へデータ転送を実行する。このディスクリプタには、データ転送元となるソース側のメモリ等のアドレス情報、データ転送先となるディスティネーション側のメモリ等のアドレス情報、およびデータ転送の転送サイズ等の情報が記述される。
【0020】
具体的には、サブCPU21は、ローカルメモリ22にディスクリプタを書き込み、ディスクリプタの書き込み完了後、DMAコントローラ23に対してDMA転送開始指示を通知する。このDMA転送開始指示を通知するには、例えばディスクリプタを保存しているローカルメモリ22のアドレス情報を設定すればよい。
このDMA転送開始指示の通知を受けたDMAコントローラ23は、メインメモリ4とローカルメモリ22との間、内部メモリ253とローカルメモリ22との間のDMA転送処理を実行する。さらにDMAコントローラ23は、内部メモリ253と通信I/F24との間、ローカルメモリ22と通信I/F24との間のDMA転送処理も実行する。
【0021】
通信I/F24は、LAN(Local Area Network)等で構成されるネットワーク6とのインタフェースであり、外部装置との通信における物理層(PHY層)とデータリンク層(MAC層)の通信制御を担っている。
通信I/F24は、内部に送受信データを一時的に蓄積するバッファメモリである内部バッファ241を装備し、DMAコントローラ23のDMA転送によって、送受信データの入出力が行われる。内部バッファ241は、外部機器に送信すべき通信パケットを格納する。
なお、
図1の構成に替えて、通信I/F24がDMAコントローラ23を内蔵して、この内蔵DMAコントローラ23を使用してもよい。
【0022】
通信I/F24は、無線接続であってよく、あるいは有線接続であってもよい。無線接続のインタフェースは、例えば、IEEE802.11シリーズに準拠した無線通信(Wi-Fi(登録商標)通信)を行う無線LANのデバイス(モジュール)であってよい。あるいは、Ethernet(登録商標)に準拠した有線通信を行う有線LANのデバイス(モジュール)であってよい。以下、本実施形態では、通信I/F24が無線LANデバイスに実装される例を説明する。
【0023】
パケット生成処理部25は、レジスタ部251、コア部252、および内部メモリ253を備える。このパケット生成処理部25は、通信プロトコル処理におけるペイロード分割処理および通信ヘッダの生成処理を実行する。
本実施形態において、パケット生成処理部25は、ハードウエアアクセラレータに実装することができ、サブCPU21が実行する通信プロトコル処理のうち、その一部であるペイロード分割処理および通信ヘッダの生成処理を肩代わりして実行する。
【0024】
レジスタ部251は、通信ヘッダ生成処理のひな形となるヘッダ情報251a(以下、「ひな形ヘッダ」という)、ペイロード分割および通信ヘッダ生成のためのパケット生成処理情報251bを記憶する。レジスタ部251はさらに、コア部252を制御するために必要となるパケット生成制御情報251cをそれぞれ記憶する。
サブCPU21は、ひな形ヘッダ251aおよびパケット生成処理情報251bをレジスタ部251に設定し、またパケット生成制御情報251cをレジスタ部251に設定することで、コア部252を起動して、複数の通信ヘッダを生成させる。
【0025】
ひな形ヘッダ251aは、パケット生成処理部25により複製されて複数の通信ヘッダ253aを生成する際に複製元となるヘッダ情報である。ひな形ヘッダ251aは、サブCPU21により実行されるソフトウエアにより設定される。このひな形ヘッダ251aの内部構成は、例えばOSI参照モデルに規定されるトランスポート層のTCPヘッダとネットワーク層のIPヘッダとに分けられる。TCPヘッダとIPヘッダは、各層における通信プロトコル処理を実行する際に使用される。なお、ひな形ヘッダ251aは、TCPヘッダおよびIPヘッダ(IPv4ヘッダ、IPv6ヘッダ)だけでなく、Etherヘッダを含んでよい。Etherヘッダとは、送信先のMACアドレスや送信元のMACアドレスが記述されているOSI参照モデルに規定されるデータリンク層で使用される通信ヘッダである。あるいは、ひな形ヘッダ251aには、TCPヘッダに替えてUDPヘッダを使用してもよい。
【0026】
パケット生成処理情報251bは、ローカルメモリ22に保存されているペイロードを分割するための分割情報、および通信ヘッダを作成して編集するための編集情報を含み、サブCPU21により実行されるソフトウエアにより設定される。
具体的には、パケット生成処理情報251bは、分割情報として、ローカルメモリ22に保存されているペイロードのデータサイズ、先頭アドレス、および分割サイズ等を保持する。また、パケット生成処理情報251bは、編集情報として、ひな形ヘッダ251aを複製する回数、作成する通信ヘッダの種別、およびひな形ヘッダ251aを複製して作成した通信ヘッダの編集箇所等を保持する。
パケット生成制御情報251cは、コア部252のペイロード分割処理および通信ヘッダ生成動作を制御するために必要となる情報であり、サブCPU21により実行されるソフトウエアにより設定される。
【0027】
コア部252は、ペイロード分割処理および通信ヘッダ生成処理を実行する機能モジュールである。コア部252は、レジスタ部251に設定されたパケット生成処理情報251bおよびパケット生成制御情報251cに基づいて、アプリケーションデータのペイロード(送信データ)を分割し、通信ヘッダを生成する。具体的には、コア部252は、パケット生成処理情報251bに記述された分割情報を参照して、ローカルメモリ22中のペイロードの先頭アドレスからペイロードを読み出し、読み出したペイロードを分割サイズで区切ってセグメント化する。
【0028】
コア部252はまた、パケット生成処理情報251bに記述された編集情報を参照し、複製回数、すなわち生成すべき通信パケットの数に基づいてひな形ヘッダ251aを複製する。そして、コア部252は、複製した複数の通信ヘッダのそれぞれをパケット生成処理情報251bに基づいて編集する。これによりコア部252は、複数の通信ヘッダ253aを生成し、生成された複数の通信ヘッダ253aを内部メモリ253に保存する。コア部252はまた、分割後の各ペイロードの先頭アドレスおよびサイズ等を、ペイロード分割情報として内部メモリ253に保存する。
内部メモリ253は、パケット生成処理部25のコア部252およびサブCPU21からアクセス可能なメモリであり、例えば主としてSRAM(Static Random Access Memory)等の半導体メモリで構成される。内部メモリ253は、コア部252により生成された複数の通信ヘッダ253aを記憶する。
【0029】
<通信装置1の通信パケット生成および送信における機能構成および動作>
図2は、通信装置1の通信パケット生成および送信における機能構成および動作の一例を示す図である。
図2に示す通信装置1の各機能モジュールのうち、ソフトウエアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがROM等のメモリに記憶され、RAMに読み出してCPUが実行することにより実現される。ハードウエアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからFPGA上に自動的に専用回路を生成すればよい。FPGAとは、Field Programmable Gate Arrayの略である。また、FPGAと同様にしてGate Array回路を形成し、ハードウエアとして実現するようにしてもよい。また、ASIC(Application Specific Integrated Circuit)により実現するようにしてもよい。なお、
図2に示した機能ブロックの構成は一例であり、複数の機能ブロックが1つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
パケット送信において、通信装置1は、アプリケーション201、プロトコル処理部202、パケット生成部203、送信キュー204、イベント通知部205、無線LANドライバ206、および無線LANデバイス207を備える。
図2を参照して、アプリケーション201は、送信すべきアプリケーションデータをメインメモリ4のユーザバッファに書き込んで、プロトコル処理部202に受け渡す。
【0030】
プロトコル処理部202は、TCP/IPプロトコル処理を実行し、パケット生成部203を必要に応じて起動して、送信データから複数のパケットを生成して、送信キュー204に追加する。
具体的には、プロトコル処理部202はまず、メインメモリ4からローカルメモリ22のネットワークバッファ221に転送されたアプリケーションデータを送信データとして送信する際の送信データサイズを決定する。具体的には、プロトコル処理部202は、アプリケーション201から受け取ったアプリケーションデータのサイズ、およびTCPウィンドウサイズから、パケット生成部203に入力すべき送信データサイズを決定する。TCPウィンドウサイズとは、受信確認応答(以下、「ACK」という)パケットの受信を待たずに送信可能なデータ量であり、通信パケットの受信側装置のネットワークバッファの空き容量である。
プロトコル処理部202はさらに、通信I/F24の仕様に基づく制限サイズ、例えば、通信I/F24の内部バッファ241のサイズに基づいて、送信データサイズを決定してもよい。
【0031】
プロトコル処理部202は、決定された送信データサイズでアプリケーションデータを区切り、送信データとしてローカルメモリ22のネットワークバッファ221からパケット生成部203に入力する。
プロトコル処理部202はまた、ひな形ヘッダ251a、パケット生成処理情報251b、およびパケット生成制御情報251cをレジスタ部251に設定して、パケット生成部203を起動する。
パケット生成部203は、レジスタ部251に設定されたパケット生成処理情報251bに基づいて、入力された送信データを複数のペイロードに分割し、通信ヘッダを生成する。プロトコル処理部202は、パケット生成部203を介して、分割されたペイロード(パケットデータ)のそれぞれに生成された通信ヘッダを付加することにより、複数の通信パケットを一括で生成する。
図2では、パケットデータ3をペイロードとする通信パケットで、後続する通信パケットが存在しないことを示すフラグ(後続無フラグ)が付与されている。
【0032】
プロトコル処理部202は、パケット生成部203を介して、後続無フラグを確認するまで、一括生成された複数の通信パケットを、送信キュー204に追加していく。
プロトコル処理部202は、パケット生成部203により、送信キュー204に送信データのすべての通信パケットの追加が完了した際に、イベント通知部205を起動する。
イベント通知部205は、送信キュー204への通信パケットの追加が完了した旨のイベントを、無線LANドライバ206に通知する。これにより、無線LANドライバ206に処理が遷移する。
【0033】
無線LANドライバ206は、送信キュー204に追加された通信パケットを、無線LANデバイス207の内部バッファ241に転送するパケット転送処理を実行するタスクである。無線LANドライバ206は、例えばSecure Digital Input Output(SDIO)プロトコルに準拠するSD転送により、送信キュー204から無線LANデバイス207の内部バッファ241に通信パケットを転送してよい。
【0034】
本実施形態では、無線LANドライバ206は、送信キュー204から無線LANデバイス207の内部バッファ241へ一括転送される通信パケットの転送サイズを決定する。
具体的には、無線LANドライバ206は、送信キュー204に追加された通信パケット数、SD転送可能なパケット数の上限(例えば、16パケット)、内部バッファ241の状態から、SD転送すべき通信パケットの数(転送サイズ)を決定してよい。
SD転送すべき通信パケットの数を決定するための内部バッファ241の状態は、例えば、内部バッファ241の空き容量(例えば、31~32パケット)を含んでよい。内部バッファ241の状態はまた、通信I/F24が通信パケットを送信する際のフレームアグリゲーション機能の利用状態、例えば、フレームアグリゲーション機能の有効もしくは無効、モードの情報を含んでよい。内部バッファ241の状態はまた、TCPヘッダサイズ、IPヘッダサイズ、MACヘッダサイズ等の通信プロトコルオーバーヘッダサイズを含んでよい。なお、SD転送可能なパケット数の上限は、無線チップ、無線規格、SDの規格により変わりうる。
【0035】
無線LANデバイス207は、外部ネットワーク6を介して通信パケットを送受信する通信インタフェースであり、内部バッファ241に転送された通信パケットをネットワーク6に送出する。なお、無線LANドライバ206および無線LANデバイス207は、ネットワーク6が無線LANで構成される場合の構成例であり、本実施形態が通信パケットを送受信するためのネットワーク6は、上述のとおり、無線LANに限定されない。
【0036】
<通信装置1の通信パケット送信処理>
図3は、本実施形態において通信装置1が、ネットワーク6を介して外部機器と接続し、外部機器へ通信パケットを送信する通信パケット送信処理の処理手順の一例を示すフローチャートである。以下では通信装置1が受信側通信装置との間でデータ転送する際に通信プロトコルとしてTCP/IPを使用する例を説明するが、本実施形態はTCP/IPプロトコル以外のプロトコルにも適用可能である。
図3のパケット送信処理は、例えば、アプリケーションからユーザデータの送信を指示されたことを契機に起動されてよいが、これに限定されない。
【0037】
S1で、通信機器1は、ネットワーク6を介して外部機器と通信状態となり、メインCPU3により実行されるアプリケーションソフトウエアが外部へ送信するための送信データをメインメモリ4のアプリケーションバッファ領域に準備する。アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、アプリケーションソフトウエアは、メインCPU3を介してサブCPU21に対して受信側通信装置へ送信すべき送信データの準備が完了したことを通知する。
サブCPU21へ通知される送信データ準備完了の通知は、現在の通信状態を示す情報を含む。この現在の通信状態を示す情報は、例えばTCPプロトコルを使用した通信接続の開始を示す情報、TCPプロトコルを使用したデータ転送の開始を示す情報、あるいはTCPプロトコルを使用した通信の切断処理の開始を示す情報であってよい。
【0038】
S2で、通信装置1のサブCPU21は、メインCPU3で実行されるアプリケーションソフトウエアにより外部機器へ送信するための送信データの準備が完了したか否かを判定する。具体的には、サブCPU21は、S1で送信データ準備完了の通知を受信した場合、メインメモリ4のアプリケーションバッファ領域に外部機器へ送信するための送信データが蓄積完了していると判定し(S2:Yes)、S3へ進む。一方、送信データ準備完了の通知を受信しない場合、アプリケーションバッファ領域に外部機器へ送信するための送信データが蓄積完了していないと判定して(S2:No)、S1へ戻ってS1の処理を繰り返す。
【0039】
アプリケーションバッファ領域に外部機器へ送信するための送信データが蓄積完了していると判定された場合、S3で、サブCPU21は、外部機器に対して通信プロトコルに従ったデータ送信処理を開始する。具体的には、サブCPU21はまず、DMAコントローラ23を介して、送信データを、メインメモリ4のアプリケーションバッファ領域からサブシステム2内のローカルメモリ22のネットワークバッファ221へ転送する。
【0040】
S3では、サブCPU21は、S1でメインCPU3から受信した送信データ準備完了の通知に基づいて、DMA転送により、送信データをメインメモリ4からローカルメモリ22のネットワークバッファ221へ転送する。このDMA転送を設定するには、まず、サブCPU21がDMA転送の内容を記述するディスクリプタを生成してローカルメモリ22に保存する。そして、サブCPU21がこのディスクリプタを保存したローカルメモリ22のアドレス情報をDMAコントローラ23に設定することで、DMA転送が実行される。このDMA転送の完了を以って、サブCPU21による通信プロトコルに従った送信処理の準備が完了したことになる。
【0041】
S4で、サブCPU21およびパケット生成処理部25は、通信プロトコル処理を実行する。サブCPU21は、一括生成された複数の通信ヘッダと分割されたペイロードから、複数の通信パケットを生成して送信キュー204に追加していき、送信キューに追加された通信パケットを通信I/F24の内部バッファ241に転送する。
ここで、アプリケーションから受け取ったアプリケーションデータのデータサイズがMSS(Maximum Segment Size)を超えている場合、パケット生成処理部25がペイロード分割処理を実行する。一方、アプリケーションデータのデータサイズがMSS以下に既に分割されている場合、パケット生成処理部25は、通信ヘッダを生成するためのチェックサム計算のみを実行する。
【0042】
まず、サブCPU21は、ローカルメモリ22のネットワークバッファ221に転送された送信データから、生成すべき通信パケットのサイズおよび数を決定する。
次に、サブCPU21は、パケット生成処理部25が通信パケットの通信ヘッダを生成するために必要となる各種情報(251a~251c)をレジスタ部251に設定して、パケット生成処理部25を起動する。起動されたパケット生成処理部25は、生成すべき通信パケットの数と同数の通信ヘッダを、パケット生成処理部25内の内部メモリ253に生成する。パケット生成処理部25はまた、通信ヘッダを付加すべきペイロードのペイロード分割情報を、パケット生成処理部25内の内部メモリ253に生成する。これにより、通信パケットのペイロードの確定と、ペイロードに付加すべき通信ヘッダの生成が完了する。
【0043】
サブCPU21は、確定した通信パケットのペイロードと一括生成された通信ヘッダとを合成して通信パケットを生成し、DMAコントローラ23を介して、生成された通信パケットを、通信I/F24の内部バッファ241に転送する。
具体的には、サブCPU21は、ローカルメモリ22のネットワークバッファ221内の送信データをペイロード分割情報を参照してペイロード単位で切り出し、内部メモリ253に生成された各通信ヘッダ253aと結合して1つの通信パケットを生成する。そしてサブCPU21は、DMAコントローラ23にDMA転送を設定することにより、DMAコントローラ23によるDMA転送を起動して、生成された通信パケットを、通信I/F24の内部バッファ241へ転送させる。サブCPU21は、S4で決定された通信パケットの数分の複数の通信パケットにつき、DMA転送を実行する。
【0044】
本実施形態では、サブCPU21は、パケット生成処理部25を介して一括生成された通信パケットを送信キュー204に追加していく。そして、サブCPU21は、送信キュー204への通信パケットの追加が完了した際に、すなわち、送信キュー204から内部バッファ241への通信パケット転送の際に、通信I/F24の内部バッファ241へ転送すべき通信パケットの転送サイズを決定する。なお、S4における通信I/F24の内部バッファ241への通信パケットの転送処理の詳細は、
図4および
図5を参照して後述する。
S5で、通信I/F24は、通信I/F24の内部バッファ241に転送された通信パケットを、データリンク層(MAC層)や物理層(PHY層)の通信プロトコル処理の実行を経て、ネットワーク6を介して外部機器へ送信する。
【0045】
S6で、通信装置1は、通信装置1と外部機器との通信状態を終了させる事象が発生したか否かを判定する。外部機器との通信状態を終了させる事象が発生した場合(S6:Yes)、S7に進み、一方、外部機器との通信状態を終了させる事象が発生していない場合(S6:No)、S1に戻ってS1からS6の処理を繰り返す。
S6で判断される外部機器との通信状態を終了させる事象は、例えば、メインCPU3で実行されているアプリケーションソフトウエアからユーザからの操作等で通信装置1と外部機器との接続を終了させる指示入力を検知したことを含む。外部機器との通信状態を終了させる事象はまた、ユーザがネットワークケーブルを通信装置1から引き抜く等して通信回線が断絶したことを通信I/F24が検知したことを含む。外部機器との通信状態を終了させる事象はさらに、通信相手である外部機器側から通信回線を切断する旨の通知を含んだ通信パケットを受信したことを含む。
【0046】
S7で、通信装置1は、外部機器との通信状態を終了させる処理を実行する。
具体的には、通信装置1のサブCPU21は、サブCPU21が担う通信プロトコル処理に従って、外部機器との通信回線を切断し、ローカルメモリ22やパケット生成処理部25の内部メモリ253に保存している関連情報を削除する。その後、サブCPU21は、メインCPU3へ通信回線の切断が完了した旨を通知する。通信回線の切断が完了した旨の通知を受信したメインCPU3は、アプリケーションソフトウエアの制御の下、通信回線が切断した旨をユーザに通知すべく表示装置を介して表示してもよい。
【0047】
<本実施形態における通信プロトコル処理および通信パケット転送処理>
図4は、
図3のS4の通信プロトコル処理および通信I/F24の内部バッファ241への通信パケット転送処理の詳細処理手順の一例を示すフローチャートである。
図4を参照して、サブCPU21が通信プロトコル処理を開始してから通信I/F24の内部バッファ241へ通信パケットを転送するまでの処理を一例として説明する。
S401で、サブCPU21は、通信プロトコルに従った送信処理を開始し、通信装置1が外部機器に送信した通信パケットに応答する受信確認応答(ACK)パケットを受信したか否かを判定する。ACKパケットを受信した場合(S401:Yes)、S402に進み、一方、ACKパケットを受信しない場合(S401:No)、S403に進む。
【0048】
S402で、サブCPU21は、通信プロトコル処理における通信パケットの受信処理を実行し、ACKパケットを送信した外部機器のネットワークバッファの空き情報を更新して、S403に進む。具体的には、サブCPU21は、S401で受信されたACKパケットに含まれるTCPウィンドウサイズを参照して、通信パケットの送信先となる外部機器のネットワークバッファの空き情報を更新する。
S403で、サブCPU21は、現在のTCPウィンドウサイズを参照し、外部機器のネットワークバッファ221に、通信パケットを受信できるだけの空きがあるか否かを判定する。外部機器のネットワークバッファに空きがある場合(S403:Yes)、S404に進み、一方、外部機器のネットワークバッファに空きがない場合(S403:No)、S401に戻ってACKパケット受信判定を繰り返す。
【0049】
S404で、サブCPU21は、パケット生成処理部25のレジスタ部251に、ひな形ヘッダ251a、パケット生成処理情報251b、およびパケット生成制御情報251cをセットして、パケット生成処理部25を起動する。パケット生成処理部25が起動されると、パケット生成処理部25のコア部252は、送信データをペイロードに分割するとともに、分割された複数のペイロードに付加すべき複数の通信ヘッダを一括で生成する。
パケット生成処理部25の実行結果である一括生成された通信ヘッダ253aおよびペイロード分割情報は、
図1に示すように、内部メモリ253に書き込まれもよく、あるいはローカルメモリ22に書き込まれてもよい。サブCPU21は、内部メモリ253に書き込まれた実行結果により、通信パケットのペイロードを確定し、一括生成された通信ヘッダを確定したペイロードに付加することにより、複数の通信パケットを一括生成する。
【0050】
S405で、サブCPU21は、S404で生成された通信パケットを送信キュー204に追加していく。送信キュー204は、サブCPU21が実行中の異なるタスク間でデータの受け渡しを行うためのデータ保管領域として機能する。
S406で、サブCPU21は、S405で送信キュー204に追加された通信パケットに、後続無フラグが付与されているか否か(各フラグがオンにセットされている場合を含む)を判定する。送信キュー204に追加された通信パケットに後続無フラグが付与されている場合(S406:Yes)、S407に進む。一方、送信キューに追加された通信パケットに後続無フラグが付与されていない場合(S406:No)、S405に戻って、送信キューへの通信パケットの追加および後続無フラグの有無判定を繰り返す。
【0051】
図5は、通信装置1において使用されるパケット管理構造体の構成の一例を示す図である。
図5に示すパケット管理構造体は、サブCPU21のタスクとしてそれぞれ実行される
図2に示すプロトコル処理部202と無線LANドライバ205との間で、送信キュー204を介して受け渡される、通信パケットのフォーマットの一例である。
図5を参照して、パケット管理構造体51は、プロトコルヘッダ51a、ペイロード51b、および後続無フラグ51cを含む。プロトコルヘッダ51aは、パケット生成処理部25により一括生成された通信ヘッダである。ペイロード51bは、パケット生成処理部25により生成されたペイロード分割情報に基づいて、サブCPU21により確定したユーザデータであるペイロードである。後続無フラグ51cは、送信データから生成された通信パケット群において、後続する通信パケットが存在しないことを示すフラグである。
【0052】
図4に戻り、S407で、サブCPU21が実行している通信プロトコル処理のタスクが、通信I/F24のドライバに対して、送信キューに、通信I/F24の内部バッファ241へ転送可能な通信パケットがある旨のイベントを通知する。このイベント通知の完了により、サブCPU21が通信I/F24のドライバのタスクに切り替わる。
以下、
図2に示すように、通信I/F24が無線LANデバイス207であり、送信キューから通信I/F24の内部バッファ241へ通信パケットを転送するタスクが無線LANドライバ206であるものとして説明する。
【0053】
S408で、サブCPU21は、無線LANデバイス207の内部バッファ241の空き容量と、SDIOプロトコルにより転送可能なパケット数の上限とを比較する。
なお、
図4では無線LANデバイス207への通信パケットの転送方式として、
図2に示すようにSDIOプロトコルを用いたデータ転送(以下、「SD転送」という)を使用する例を説明するが、本実施形態で使用可能なデータ転送方法はこれに限定されない。例えば、SDIOに替えて、PCIe(Peripheral Component Interconnect express)、USB(Universal Serial Bus)などの転送方式を用いてもよい。SD転送では、一度の送信命令で複数の通信パケットを転送するアグリゲーション転送が可能である。このアグリゲーション転送可能な通信パケット数の上限(例えば、16パケット)が、SD転送可能な通信パケット数の上限となる。なお、アグリゲーション転送可能な通信パケット数の上限は、無線チップ、無線規格、SDの規格により変わりうる。
【0054】
S408で、無線LANデバイス207の内部バッファ241の空き容量が、SD転送可能な通信パケット数の上限より大きい場合(S408:Yes)、S409に進む。一方、無線LANデバイス207の内部バッファ241の空き容量が、SD転送可能な通信パケット数の上限以下の場合(S408:No)、S410に進む。
S409で、サブCPU21は、送信キュー204に追加された通信パケット数と、SD転送可能な通信パケット数の上限とを比較する。
送信キューに追加された通信パケット数が、SD転送可能な通信パケット数の上限より大きい場合(S409:Yes)、S411に進む。一方、送信キューに追加された通信パケット数が、SD転送可能な通信パケット数の上限以下の場合(S409:No)、S412に進む。
【0055】
S410で、サブCPU21は、送信キュー204に追加された通信パケット数と、無線LANデバイス207の内部バッファ241の空き容量とを比較する。
送信キュー204に追加された通信パケット数が、無線LANデバイス207の内部バッファ241の空き容量より大きい場合(S410:Yes)、S413に進む。すなわち、無線LANデバイス107の内部バッファ241の空き容量が送信キュー204に追加された通信パケット数以下である場合、S413に進む。一方、送信キューに追加された通信パケット数が、無線LANデバイス207の内部バッファ241の空き容量以下の場合(S410:No)、S412に進む。
【0056】
S411で、サブCPU21は、送信キュー204に追加した通信パケットのうち、SD転送可能な通信パケットの上限数だけ、無線LANデバイス207の内部バッファ241に、SD転送する。
S412で、サブCPU21は、送信キュー204に追加した通信パケットの数どおりで、無線LANデバイス207の内部バッファ241に、SD転送する。
S413で、サブCPU21は、送信キュー204に追加した通信パケットのうち、無線LANデバイス207の内部バッファ241に転送可能な数だけ、無線LANデバイス207の内部バッファ241に、SD転送する。
このように、本実施形態では、サブCPU21は、送信キューから無線LANデバイス207の内部バッファ241に通信パケットを転送する際に、内部バッファ241の空き容量に基づいて、転送すべき通信パケットの転送サイズ(数)を決定する。
【0057】
S414で、サブCPU21は、送信キュー204にあるすへての通信パケットを無線LANデバイス207の内部バッファ241に転送したか否かを判定する。送信キュー204にあるすべての通信パケットが無線LANデバイス207の内部バッファ241に転送された場合(S414:Yes)、S417に進む。一方、送信キュー204に未だ送信すべき通信パケットが残っている場合(S414:No)、S415に進む。
S415で、サブCPU21は、無線LANデバイス207の内部バッファ241に空きがあれば(S415;Yes)、S408に戻り、S408~S414の処理を繰り返す。一方、内部バッファ241に空きがなければ、サブCPU21は、S416で待機しS415に戻って、無線LANデバイス207の内部バッファ241に転送された通信パケットが外部機器に送信されて内部バッファ241に空きが生ずるまで処理を繰り返す。
S417で、サブCPU21が実行している無線LANドライバ206のタスクが、例えばローカルメモリ22に送信キュー204として確保しているバッファの開放を、プロトコル処理のタスクに通知し、処理が終了する。
【0058】
以上説明したように、本実施形態によれば、通信装置は、送信すべき複数の通信パケットを一括生成して送信キューに追加する。さらに、通信装置は、送信キューから通信I/Fの内部バッファに通信パケットを転送する際に、通信I/Fの内部バッファの状態に基づいて、転送すべき通信パケットの転送サイズを決定し、決定された転送サイズで内部バッファに転送する。
これにより、通信I/Fの内部バッファに通信パケットを転送する際に内部バッファが格納可能な通信パケットの数に、通信パケットの転送サイズを最適化でき、通信I/Fの内部バッファをより効率的に使用することができる。
また、通信パケットに付与された後続無フラグを判定し、後続無フラグが付与された通信パケットが送信キューに追加された際に、通信プロトコル処理を実行するタスクから通信パケットを通信I/Fの内部バッファに転送するタスクにイベントを通知する。
このイベント通知によるタスクスイッチで、複数の通信パケットを一括生成する通信プロトコル処理と、通信I/Fの内部バッファへ一括生成された複数の通信パケットを転送する処理とのそれぞれの待機時間を低減することができる。したがって、本実施形態は、パケット送信における通信性能の向上に資する。
【0059】
(実施形態2)
以下、本発明の実施形態2を、実施形態1と異なる点につき説明する。
実施形態1では、通信I/Fに無線LANデバイスを使用して通信パケットを送信する例を説明した。これに対して本実施形態では、通信I/Fに有線LANデバイス(以下、「PHYデバイス」という)もしくは無線LANデバイスのいずれかを使用して、または双方を選択的に使用して通信パケットを送信する。
実施形態2において、通信装置は、通信I/Fの仕様により、通信I/Fの内部バッファへの通信パケットの転送処理を切り替える。具体的には、通信装置は、通信I/Fに無線LANデバイスを使用した場合に、一括して生成した通信パケットを送信キューに追加し、一方、PHYデバイスを使用した場合には、送信キューは使用しない。
【0060】
実施形態2に係る通信装置のハードウエア構成は、
図1に示す実施形態1と同様である。
図1の通信I/F24は、実施形態2において、PHYデバイスもしくは無線LANデバイス207である。あるいは、通信I/F24は、PHYデバイスと無線LANデバイスの207双方を備えるハードウエア構成であってよい。
図6は、実施形態2に係る通信装置1が実行する
図3のS4の通信プロトコル処理および通信I/F24の内部バッファ241への通信パケット転送処理の詳細処理手順の一例を示すフローチャートである。
図4を参照して、サブCPU21が通信プロトコル処理を開始してから通信I/F24の内部バッファ241へ通信パケットを転送するまでの処理を一例として説明する。
なお、以下では、実施形態1と同様に、サブCPU21が通信プロトコル処理を実行する例を説明するが、サブCPU21に替えてメインCPU3が通信プロトコル処理を実行してもよい。
【0061】
S401~S404の処理は、
図4のS401~S404の処理と同様である。
S404で複数の通信パケットが一括して生成された後、S601で、サブCPU21は、通信装置1が備える通信I/F24が無線接続であるか否かを判定する。
通信I/F24が無線接続である場合(S601:Yes)、S405に進み、一方、、通信I/F24が有線接続である場合(S601:No)、S602に進む。
無線接続の場合、サブCPU21が実行する通信プロトコル処理のタスクと無線LANドライバ処理のタスクとを切り替える必要がある。このため、通信装置1に送信キュー204を備えて、異なるタスク間でデータの受け渡しを行う。これに対して、有線接続の場合、サブCPU21は、通信パケットの生成から外部機器への送信までを同一タスクで実行するため、通信パケット送信に際してタスクを切り替える必要がない。
このため、本実施形態では、通信I/F24の仕様により、通信I/F24の内部バッファ241への転送処理を切り替える。
【0062】
通信I/F24が有線接続である場合、S602で、サブCPU21は、PHYデバイスに応じた通信パケット転送処理を実行する。具体的には、PHYデバイスの仕様に依存するが、サブCPU21は、PHYデバイスが備える内部バッファ241に通信パケット転送用のディスクリプタをセットしてよい。あるいは、サブCPU21は、PHYデバイスの内部バッファ241に、通信パケットを直接格納してもよい。
S603で、PHYデバイスは、内部バッファ241に格納された通信パケットを、外部機器に送信して、S417に進む。例えば、S602でセットされた転送用のディスクリプタに従って、通信I/F24であるPHYデバイスは、通信パケットを外部機器へ送信する。あるいは、PHYデバイスは、内部バッファ241にセットされた通信パケットごとに、通信パケットを外部機器へ送信してよい。
【0063】
一方、通信I/F24が無線接続である場合、S405で、
図4のS405と同様、S404で一括生成された複数の通信パケットを送信キューに追加して、S604に進む。
S604で、サブCPU21は、送信キュー204に追加された通信パケットの所定の条件を満たすか否かを判定する。
具体的には、送信キュー204に追加された通信パケットの数が、S404で一括生成された通信パケットの数、SD転送可能な上限数、または無線LANデバイス207の内部バッファ241に追加可能な通信パケット数のいずれかに達した場合、S407に進む。あるいは、サブCPU21は、
図4のS406と同様、通信パケットに付与された後続無フラグがある場合にS407に進んでもよい。
【0064】
S407で、
図4のS407と同様、サブCPU21が実行している通信プロトコル処理のタスクは、無線LANドライバ206のタスクに対して、送信キューに送信すべき通信パケットがある旨のイベントを通知する。これにより、通信プロトコル処理のタスクは、無線LANドライバ206のタスクに切り替わる。
S408~S417の処理は、
図4のS408~S417の処理と同様である。なお、実施形態1と同様、無線LANデバイスへの通信パケットの転送方式は、SD転送に限定されない。例えば、PCIe、USB等の他の転送方式を使用してもよい。
【0065】
以上説明したように、本実施形態によれば、通信装置は、通信I/Fの仕様を判定し、通信I/Fが有線接続の場合には、送信キューを介さずに、一括生成された複数の通信パケットを通信I/Fの内部バッファに転送する。これにより、有線接続で通信パケットを送信する際に、CPUの処理負荷が低減され、通信パケットをより効率的に送信することができる。
【0066】
なお、上述した各実施形態は、その複数を組み合わせて実現することが可能である。
また、本発明は、上述の実施形態の一部または1以上の機能を実現するプログラムによっても実現可能である。すなわち、そのプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータ(またはCPUやMPU等)における1つ以上のプロセッサがプログラムを読出し実行する処理により実現可能である。また、そのプログラムをコンピュータ可読な記録媒体に記録して提供してもよい。
また、コンピュータが読み出したプログラムを実行することにより、実施形態の機能が実現されるものに限定されない。例えば、プログラムの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって上記した実施形態の機能が実現されてもよい。
【符号の説明】
【0067】
1…通信装置、2…サブシステム、3…メインCPU、4…メインメモリ、5…システムバス、6…ネットワーク、21…サブCPU、22…ローカルメモリ、23…DMAコントローラ、24…通信I/F、25…パケット生成処理部、26…ローカルバス、221…ネットワークバッファ、251…レジスタ部、252…コア部、253…内部メモリ、241…内部バッファ