ネットワークアダプタ及び通信装置
【課題】 汎用ネットワーク機能及びDRM機能を発揮し、ホスト機器の負担を軽減させる。
【解決手段】 ホスト機器2とNFE1との間のバス通信を行うためのデバイスドライバを、両アプリケーション用の専用ドライバのかわりに、ネットワークデバイスドライバの形式で実装し、両アプリケーションは、中間層として、ソケットインターフェース、NAPIなどを利用する。
【解決手段】 ホスト機器2とNFE1との間のバス通信を行うためのデバイスドライバを、両アプリケーション用の専用ドライバのかわりに、ネットワークデバイスドライバの形式で実装し、両アプリケーションは、中間層として、ソケットインターフェース、NAPIなどを利用する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、PCI(Peripheral Component Interconnect)等の汎用バスによりホスト機器と結合可能なネットワークアダプタ及び通信装置に関する。
【背景技術】
【0002】
近年、ディジタルコンテンツには、著作権保護のため、「10回のみ複製可」や「複製不可(視聴可)」等の属性が与えられている。また、家庭内において、DNLA(Digital Living Network Alliance)などの規格に対応した録画機器をホームネットワーク(LAN:Local Area Network)に接続し、ディジタルコンテンツを配信することが可能となっている。
【0003】
このようなネットワークにおいて、著作権保護されたディジタルコンテンツを転送する際には、機器間の認証、コンテンツの暗号化等のディジタル著作権管理(DRM:Digital Rights Management)が必要となる。このDRM機能は、比較的処理負荷が高いため、ホスト機器に結合されるネットワークフロントエンド(NFE:Network Front End)に持たせることが提案されている(例えば、特許文献1参照。)。
【0004】
【特許文献1】特開2006−148451号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、上述のようにNFEがDRM機能を担う場合、一般に、PCI(Peripheral Component Interconnect)などの汎用バスを用いてNFEとホスト機器との間の通信を行うための専用ドライバを両者に実装する。この場合、NFE側の専用ドライバ及びDRMアプリケーション、並びにホスト機器側の専用ドライバ及びDRMアプリケーションは、それぞれ独自のAPI(Application Program Interface)を備えるものとなる。
【0006】
このため、ホスト機器は、ネットワークに接続する場合、NFEのネットワーク機能を使うのとは別に、汎用ネットワーク機能を用いてアクセスする必要があった。
【0007】
ホスト機器に独自に汎用ネットワークインターフェースを設けることも可能であるが、物理的コスト、ネットワーク処理に要するホストCPU(Central Processing Unit)の負荷コストが無視できなかった。
【0008】
また、ホスト機器において、汎用ネットワークのためのドライバをDRM機能の専用ドライバとは別に実装することも考えられるが、両者を2重に開発しなくてはならないことや、両者が1つのPCIデバイスを共有するために生じる競合などの問題を解決する必要があった。
【0009】
本発明は、このような従来の実情に鑑みて提案されたものであり、汎用ネットワーク機能及びDRM機能を発揮し、ホスト機器の負担を軽減させるネットワークアダプタ及び通信装置を提供する。
【課題を解決するための手段】
【0010】
本発明に係るネットワークアダプタは、ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行する制御部とを備え、上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、上記制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部のデータ及び制御情報の送受信を制御する。
【0011】
また、本発明に係る通信装置は、ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するネットワーク制御部とを備えるネットワークアダプタと、上記バスを介して上記ネットワークアダプタに接続するデバイス接続部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するホスト制御部とを備えるホスト機器とを有し、上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、上記ネットワーク制御部及び上記ホスト制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部と上記デバイス接続部との間のデータ及び制御情報の送受信を制御する。
【発明の効果】
【0012】
本発明によれば、ネットワークアダプタ及びホスト機器の両側にデバイスドライバとしてネットワークデバイスドライバを実装し、ネットワークアダプタとホスト機器との間のバス通信を制御することにより、DRMアプリケーション間の通信と汎用ネットワークアクセスとを両立し、ホスト機器の負担を軽減させることができる。
【発明を実施するための最良の形態】
【0013】
以下、本発明の具体的な実施の形態について、図面を参照しながら下記順序で詳細に説明する。
【0014】
1.全体構成 図1
2.通信方法
2−1.イーサネット通信 図2
2−2.DMA転送 図3〜図17
【0015】
[1.全体構成]
図1は、ネットワーク全体の構成例を示す図である。このネットワークには、ネットワークフロントエンド(NFE:Network Front End)1が結合されたホスト機器2と、ウェブサーバ3と、DRM(Digital Rights Management)サーバ/クライアント4とが接続されている。
【0016】
ホスト機器2は、NFE1を結合し、DRMサーバ、DRMクライアント、及びウェブクライアントとして機能する。そして、ホスト機器2は、ウェブサーバ3から情報の提供を受け、また、DRMサーバ/クライアント4に対しコンテンツを送受信する。
【0017】
ウェブサーバ3は、HTTP(HyperText Transfer Protocol)に則り、クライアントソフトウェアのウェブブラウザに対して、HTML(HyperText Markup Language)や画像などのオブジェクトの表示を提供するサービスプログラムを実行する。
【0018】
DRMサーバ/クライアント4は、サーバ機能としてクライアントに対してDRM再生キーを発行し、また、DRMによる暗号化をDTCP−IP(Digital Transmission Content Protection over Internet Protocol)による暗号化に変換する。
【0019】
続いて、NFE1及びホスト機器2の各構成について説明する。
【0020】
NFE1は、ネットワークに接続するネットワーク接続部11と、バスに接続し、データ及び制御情報を送受信するバス接続部12と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号処理部13とを備えている。
【0021】
ネットワーク接続部11は、例えば、イーサネット(商標)規格のLAN(Local Area Network)に有線又は無線により接続する。イーサネットは、OSI(Open Systems Interconnect)参照モデルにおける物理層及びデータリンク層を規定する。イーサネットでは、元の送信すべき通信データをまず一定の長さ以下に分割して、MACフレーム(Media Access Control Frame)を作成し、MACフレームの形で情報を伝送路に流す。
【0022】
バス接続部12は、例えば、PCI(Peripheral Component Interconnect)バス等の汎用バスに接続され、ホスト機器2とデータ及び制御情報を送受信する。バスは、一つ以上の周辺機器(デバイス)を同時に接続することができる線又は線の組で、共有リソースとして扱われる。バスに接続されたデバイスは、いずれも規約に従った行動を強いられる。例えば、PCIバスに接続されたデバイスは、名称、機能チップの型と番号、優先IRQ(Interrupt ReQuest)ライン、DMA(Direct Memory Access)能力などの情報をバスマスタに示さなければならない。また、PCIシステムは、一つのマスターと一つのスレーブとの間でだけデータ転送をする。マスターが会話を開始し、スレーブがデータ又はリクエストで応答する。
【0023】
暗号復号処理部13は、著作権保護技術(DRM)により保護されるコンテンツを暗号復号処理する。例えば、DTCP−IPでは、コンテンツを配信元(DRMサーバ)からダウンロードした時点で配信元固有のDRMによる暗号化をDTCP−IPによる暗号化に変換する。これにより、家庭内LANにあるDTCP−IP対応のディジタル機器(DRMクライアント)に配信可能となる。
【0024】
また、NFE1は、ROM(Read Only Memory)、RAM(Random Access Memory)、CPU(Central Processing Unit)等を有する制御部を備え、後述する組み込みソフトウェアを実行する。これにより、ネットワーク接続部11、バス接続部12、及び暗号復号処理部13の各機能の動作が最適化される。
【0025】
ホスト機器2は、NFE1とバスを介して物理的に接続されるデバイス接続部31と、AV(Audio Visual)デコーダ32とを備える。デバイス接続部31は、例えば、PCIバス等の汎用バスに接続され、NFE1とデータ及び制御情報を送受信する。AVデコーダ32は、例えば、H.264/AVCと呼ばれるMPEG(Moving Picture Experts Group)方式符号化されたデータを復号する。
【0026】
また、ホスト機器2は、グラフィカルユーザインタフェース(Graphical User Interface)等のUI(User Interface)33を提供する表示制御部と、光ディスク34の情報記録又は情報再生を行う記録再生制御部とを備える。また、ホスト機器2は、ROM、RAM、CPU等を有する制御部を備え、後述する組み込みソフトウェアを実行する。これにより、ウェブサーバ3から情報の提供を受け、また、DRMにより保護されたコンテンツの記録又は再生を行う。
【0027】
次に、NFE1及びホスト機器2の制御部にて実行されるソフトウェアについて説明する。ここで、ソフトウェアは、上位層から順番にユーザプログラム、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層で構成されているものとする。なお、以下、OS(Operating System)としてLinux(商標)を想定して説明するが、これに限られるものではなく、Windows(商標)などのOSを用いても構わない。
【0028】
ユーザプログラムの階層は、DRMアプリケーション30、ウェブブラウザ45、DRM機能付きBD(Blu-ray Disc(登録商標))のライティングソフト46等で構成される。ユーザプログラムは、送信対象となる元データを用意して下位層へと渡す。元データは、送信側と受信側とで同一プロトコルに従って処理され、そのプロトコルに応じたデータ処理が下位層で実施される。
【0029】
ソケットインターフェース26,44は、論理的な通信口であり、データの送受信を行うための仮想的な経路の確立や解放を行う。
【0030】
プロトコルスタックの階層は、IP(Internet Protocol)24,42、netfilter23、TCP(Transport Control Protocol)25,43等で構成される。プロトコルスタックの階層は、TCP/IP通信を行うための主要部で、相手側とのコネクションの管理、データパケットの生成、タイムアウト、再処理などを行う。また、渡されたデータに対して、MACヘッダやIPヘッダの付加を行う。
【0031】
デバイスドライバの階層は、イーサネットドライバ21,22,41、DRMドライバ29等で構成される。イーサネットドライバ21はネットワーク接続部11を、イーサネットドライバ22はバス接続部12を、イーサネットドライバ41はデバイス接続部31を、DRMドライバ29は暗号復号処理部13をそれぞれ制御する。
【0032】
本実施の形態では、NFE1とホスト機器2の両側に、両者間の通信を行うイーサネットドライバ21、41を実装する。このネットワークデバイスドライバは、カーネルインターフェースを持つデバイスドライバとして実装され、NFE1及びホスト機器2のぞれぞれのIP層の下位レイヤとして働く。このようにNFE1とホスト機器2と間のPCIバスの通信を行うためのデバイスドライバを、両アプリケーション用の専用ドライバの代わりに、イーサネットデバイスドライバの形式で実装することで、両アプリケーションは中間層として、ソケットインターフェース、NAPI(New API)などを利用することができる。NAPIは、ネットワークに高負荷が掛かった時点でドライバの動作を割り込み駆動からポーリング駆動に切り替えることで、ネットワーク負荷に伴うシステム全体の応答性能の低下を防ぐことができる。
【0033】
ホスト機器2のウェブブラウザ45とウェブサーバ3とが通信する場合、ホスト機器2は、ソケットインターフェース44、TCP43、IP42、イーサネットドライバ41の各層、及びデバイス接続部31を介してPCIバス通信を行う。そして、NFE1側では、PCIバス、バス接続部12、イーサネットドライバ21、netfilter23、イーサネットドライバ22、及びネットワーク接続部11を介してウェブサーバ3とホスト機器2とが通信する。
【0034】
ここで、netfilter23等の機能によりIPパケット転送、IPアドレス変換等が行われる。IPパケット転送機能としては、例えばLinuxのnetfilter23/IPTABLES27を利用することができる。これによってホスト機器2は、外部のネットワークと通信することができる。また、netfilter23等のNAT(Network address transration)機能を利用することで、ホスト機器は、固定のプライベートIPアドレスを用いて外部ネットワークと通信することができる。また、外部向けのIPアドレスをホスト機器2に通知したり、ホスト機器2からNFE1側を設定する必要がある場合でも、上述のような仮想ネットワークの通信を通じて簡単に行うことができる。また、IPフィルタリング機能など用いることにより、NFE内にセキュリティー機能等を実装することができる。
【0035】
ホスト機器2のDRM機能付きAVデコーダ32やライティングソフト46とDRMサーバ/クライアント4とが通信する場合、ホスト機器2は、ソケットインターフェース44、TCP43、IP42、イーサネットドライバ41の各層、及びデバイス接続部31を介してPCIバス通信を行う。NFE1側では、PCIバス、バス接続部12、イーサネットドライバ21、IP24、TCP25、ソケットインターフェース26を介してDRMアプリケーション30とホスト機器2とが通信する。そして、DRMアプリケーション30、DRMドライバ29、暗号復号処理部13によってコンテンツデータの暗号化又は復号化が行われる。
【0036】
ここで、DRMアプリケーション30がマルチプロセスアプリケーションであることなどから、ソケットインターフェース26の使用部分をカーネルモードドライバ内に遮蔽して、DRM通信を行う仮想デバイスドライバ28とすることができる。これにより、カーネルオブジェクトを使った相互排除などが簡単に行うことができる。
【0037】
また、NFE1のDRMアプリケーション30は、ソケットインターフェース26、TCP25、IP24、netfilter23、イーサネットドライバ22、及びネットワーク接続部11を介してDRMサーバ/クライアント4と通信する。
【0038】
このようにPCI等の汎用バスで結合されるNFE1とホスト機器2の両側に、データリンク層インターフェース用デバイスドライバをイーサネットデバイスドライバとして実装し、NFE1内にIP転送、NATなどの機能を持たせる。これにより、NFE本来のDRMオフロード機能と、汎用ネットワークアクセスを両立し、効率的にホスト機器2に提供することができる。すなわち、DRMアプリ間の通信と汎用ネットワークアクセスとを簡単に両立することができる。
【0039】
[2.通信方法]
次に、ネットワークデバイスドライバの通信について説明する。ここでは、先ず、一般的なイーサネット通信について説明し、続いて、DMA転送について説明する。
【0040】
[2−1.イーサネット通信]
ネットワークデバイスドライバは、ネットワーク用のプロトコルスタックの下位レイヤとしてソフトウェアの最下層に位置し、上位のプロトコルレイヤからのデータ、または物理層のデバイスからのデータをその間で受け渡しをする。Linuxでは、ソケットバッファ(SKB)によりネットワークデバイスドライバと上位のプロトコルレイヤとの間で、データの受け渡しを実現する。
【0041】
上位のプロトコルから渡される、又は上位に渡すバッファには、Linux独自のフォーマットがあり、このバッファのことをソケットバッファと呼ぶ。ソケットバッファは構造体で、データ部分と属性を保持するメンバからなる。ドライバで行うデータフローは、このソケットバッファとデバイス間でのデータ移動が主たる仕事になる。
【0042】
ソケットバッファの保持する情報で、ネットワークデバイスドライバにとって重要なものは、ヘッダポインタ(head)、データポインタ(data)、テイルポインタ(tail)である。ヘッダポインタは、ソケットバッファが保持するフレームヘッダの先頭に当たる。また、データとは、フレームのデータの先頭を指し、テイルとは、ソケットバッファが保持するフレームの最後を指す。これらのポインタを操作することで、送信するデータ又は受信したデータの長さを指定し、シンプルなインターフェースを実現する。
【0043】
図2A及び図2Bは、イーサネットの通信方法を示す図である。送信する際には、図2Aに示すように上位のIPレイヤでイーサネットのフレームが作成される。ネットワークデバイスドライバは、デバイス上の送信バッファに空きがあるか否かを調べ、空きがない場合、そのデータは後で処理することをマークする。空きがある場合、フレームをデバイスにコピーし、送信要求をデバイスに対して出す。ネットワークデバイスは、送信完了、またはエラーのときにドライバへの割り込みを発生させる。
【0044】
一方、受信の際には、図2Bに示すようにデバイス上にフレームが受信されたとすると、デバイスによりネットワークデバイスドライバへの割り込みが発生する。ネットワークデバイスドライバは、その割り込みにより受信SKBを確保し、PHY受信バッファからのフレームを受信SKBにコピーする。コピーの後、そのフレームを上位のプロトコルへと渡し、受信が完了する。
【0045】
本実施の形態では、NFE1とホスト機器2の両者は近接して直結されており、外来ノイズなどの影響を無視できる環境とすることができる。例えば、IPヘッダ、TCPなどの各種チェックサム計算を省くことができる。これらはカーネルに対してチェックサムを用いないと宣言することなどで、容易に実現することができる。
【0046】
また、NFE1とホスト機器2の両者は近接して直結されているため、ソケットバッファや、パケットのサイズを可能なかぎり大きくして、単位バイトあたりのネットワーク処理に要するCPU負荷を低減することができる。一般に、パケットの通過するネットワーク上のハブ、ルーターなどの機器や相手のホスト機器が扱えるサイズの上限を定める必要から、実際の実ネットワークインターフェースには、経験的にMTU(Maximum Transmission Unit)として1500バイト等の値が用いられている。しかし、本実施の形態では、外来ノイズなどの影響を無視できる環境とすることができるため、カーネル資源の許す限りMTUを巨大化することができる。
【0047】
このようにNFE1とホスト機器とを結合するネットワークデバイスドライバを実装することにより、それ自体がCPU負荷となることを防止し、さらにホスト機器2のネットワーク処理負荷を軽減させることができる。
【0048】
[2−2.DMA転送]
また、本実施の形態では、NFE1とホスト機器2とが直結しているため、DMA転送により自ら設定したMTUを超える送受信を行うことが可能である。DMA機能とは、DMAコントローラがバスに付随するメモリ空間上の特定のアドレスから、同じバスに付随するメモリ空間上の特定のアドレスへのデータ移動(データ転送)を、CPUの介在なしに行うものである。
【0049】
後述するDMA処理の際には、データ転送に関する属性情報であるデータ転送アドレスや転送サイズ等のディスクリプタ(descriptor:記述子)を、外部メモリのディスクリプタ格納領域からDMAコントローラ内のDMAレジスタブロックに読み込んで、メモリ領域との間のデータ転送を制御する。DMAが起動されると、DMAコントローラは、DMAレジスタブロックに書き込まれたデータ(メモリアドレス及び転送データサイズ)を読み出し、メモリ領域の転送元アドレスから転送データサイズ分のデータを読み出し制御して、PCIバスを介し、転送先のメモリに送る。
【0050】
Linux等のカーネルには、通常、TSO(TCP Segmentation offloading)をサポートするとの宣言を行うフラグ等が用意されている。こうすることで、カーネルは、MTUサイズを越えるソケットバッファをイーサネットデバイスドライバに渡して、このイーサネットデバイスドライバにそれを分割送信させることができる。
【0051】
また、ホスト機器2側のイーサネットデバイスドライバは、TSOをサポートするとカーネルに宣言し、実際のNFE1への送信時において、MTUサイズを無視して分割処理(セグメント化)せずに送信を行うことができる。これにより、TCPチェックサム再計算やDMAディスクリプタの再構築に要する単位バイト当たりのCPU負荷を軽減することができる。
【0052】
また、NFE1側のイーサネットデバイスドライバも、TSOをサポートするとカーネルに宣言し、実際のホスト機器2への送信時において、ホスト機器2側の処理と同様に、パケットの分割を行わずに送信することができる。
【0053】
なお、ホスト機器2への送信時において、「外部ネットワークからnetfilterを経由してくる小さなパケット」を集めて1つの大きなパケットにすることも有効である。しかし、本来TCP層の働きが必要なことなどから、現在のところnetfilterには、この機能が実装されていない。将来netfilterやイーサネットデバイスドライバが協調して、スキャッタ/ギャザーDMAを利用して、これを行うときは、IPヘッダ、TCPチェックサム再計算が必要となるので、DMAと同時に再計算できるハードウェアを利用する。
【0054】
また、特にNFE1側のイーサネットドライバには、セグメント化をNFE1とホスト機器2との間の通信と同時に一度に行うようにしてもよい。ホスト機器2からの受信時においては、外部向けの実ネットワークインターフェースのMTUに合わせて、パケットの分割を行う。具体的には、PCIバスを介した受信時に同時に、スキャッタ/ギャザーDMAを使い、DMAディスクリプタの生成などの簡単な処理で、受信と同時にパケットを分割する。このとき、IPヘッダ、TCPチェックサム再計算が必要となるので、DMAと同時に再計算できるハードウェアを利用する。
【0055】
次に、DMA転送について詳細に説明する。図3は、NFEとホスト機器とのバス通信の構成例を示すブロック図である。この構成例は、NFE制御部50と、ホスト制御部60とがPCIバスで接続されている。NFE制御部50は、プロセッサ51と、ローカルメモリ52とがローカルバスで接続され、プロセッサ51で実行されたディスクリプタに基づいてローカルメモリ52にデータを格納する。このようなプロセッサ51として、例えばFreescale Semiconductor社のPowerPCプロセッサ「MPC8349」を使用することができる。また、ホスト制御部60も、NFE制御部50と同様に、プロセッサ(ホストCPU)61と、ローカルメモリ62とがローカルバスで接続されている。
【0056】
また、図4は、DMAディスクリプタの記述例を示す図である。ホスト制御部60からNFE制御部50へデータを転送する場合、CPUコア51aがDMAコントローラ51bにDMAディスクリプタ52aのアドレスを通知し、DMA開始を要求する。DMAコントローラ51bは、DMAディスクリプタを読み出し、ソースアドレス、及びディスティネーションアドレスに基づいてローカルメモリ62のデータソース62aのデータをローカルメモリ52のデータディスティネーション52bに移動させる。転送完了後、DMAコントローラ51bは、DMAディスクリプタに記述された次のディスクリプタアドレスに基づいて、次のDMAディスクリプタを読み出す。
【0057】
なお、図3に示す例では、ディスクリプタをNFE制御部50側のローカルメモリ52に持っているが、ホスト制御部60側のローカルメモリ62に持ってもよい。この場合、DMA開始時にディスクリプタの位置としてローカルメモリ52のアドレスではなく、ホスト制御部60側のローカルメモリ62内のアドレスを指定すればよい。
【0058】
本実施の形態では、PCI通信をネットワーク通信に見せかけるため、ホスト制御部60側は、ローカルメモリ62上にPCI通信用DMAディスクリプタではなく、ネットワーク通信用TxBD/RxBD(Tx/Rxバッファディスクリプタ)を作成し、通常のイーサネットデバイスドライバに近い形で実現する。一方、NFE制御部50は、ローカルメモリ52上にPCI通信用DMAディスクリプタを作成し、自分のバッファのアドレスは、自身でそれを書く。ホスト側のローカルメモリ62のアドレスは、ホスト制御部60が作成したTxBD/RxBDを読み出して書く。これによりNFE側のデバイスドライバは、ホスト側イーサネットデバイスドライバと矛盾なく処理(PHYの動作を模倣)する一方、ホスト制御部60のネットワーク層とも整合を取りつつ、DMA処理を行うことができる。
【0059】
ここでは、先ず初期化処理を説明し、続いてシンプルDMA転送及びマルチプル転送について説明する。
【0060】
図5A及び図5Bは、DMA転送の初期化処理を示す図である。ホスト制御部60側のプロセッサ61がPCIマスターで、NFE制御部50側のプロセッサ51がスレーブである。すなわち、NFE1のDMAコントローラ51bにDMAを仕掛ける。なお、以下では、ホスト制御部60側のプロセッサ61をIOP(入出力プロセッサ)と呼び、NFE制御部50側のプロセッサ51をNFEと呼ぶ。
【0061】
図6は、DMAディスクリプタ定義の記述例を示す図である。このDMAディスクリプタ定義によれば、「Next desc」を用いることにより、リングバッファを構成することができる。また、DMAチェーンモードを用いることにより、効率よく転送することができる。
【0062】
図7(A)〜(C)は、Tx/Rxバッファディスクリプタ定義の記述例を示す図である。このTx/Rxバッファディスクリプタ定義によれば、Tx/RxバッファディスクリプタはIOP側に構成し、NFE側がPCIバス経由で読み書きする。
【0063】
ここで、NFEからIOPへは、outbound doorbell -> INTAで通知し、メッセージの種類はdoorbellの番号で区別する。また、IOPからNFEへは、inbound doorbellで通知し、割り込みの種類はdoorbellの番号で区別する。
【0064】
また、図8は、IOPの固有データの一例を示す図であり、図9は、NFEの固有データの一例を示す図である。初期化時において、IOPは、図8に示すようなIOP固有データに基づいてTxバッファディスクリプタを確保し、NFEは、図9に示すようなNFE固有データに基づいて、受信用固定DMAディスクリプタリングバッファを確保する。このリングバッファは、IOPからはアクセスされない。
【0065】
IOPは、確保したTxバッファディスクリプタのアドレスをNFEに通知し、NFEがIOPのTxバッファディスクリプタを読み出し、これを完成させる。また、NFEは送信用固定DMAディスクリプタリングバッファを確保し、割り込みメッセージである初期化要求(out door->INTA)をIOPに通知する。IOPは、割り込みメッセージの初期化(in msg)をNFEに通知し、Rxバッファディスクリプタを確保する。NFEは、初期化(in msg)に対して、「Set remote_tx/rx_base」をセットし、初期化完了(out door->INTA)をIOPに通知する。以上により初期化が完了する。
【0066】
図10A及び図10Bは、シンプルDMA転送の処理を示す図である。ここで、IOPのドライバのfeature設定において、NETIF_F_TSO,NETIF_F_SG,NETIF_F_FRAGLISTをOFFとする。すなわち、カーネルにTSO(TCP Segmentation offloading)をサポートしないとの宣言を行う。
【0067】
送信側の上位層のプロトコルは、受信ソケットバッファ(SKB)を確保し、送信データを書き込み、IOPドライバに送信要求する。送信データには、SKBのdataポインタとサイズを含んでいる。
【0068】
IOPドライバは、図11(A)に示すIOPの固有データ例によりTxBDバッファを確保している。IOPドライバは、送信要求に対し、図12に示すようにSKBのdataポインタをTxBDバッファポインタとしてセットする。また、TxBDにサイズをセットし、TxBDのstatusを送信Ready状態にする。そして、IOPドライバは、DMA開始指示を行い、送信要求完了を上位層に通知する。
【0069】
一方、NFEのドライバは、図11(B)に示すNFEの固有データ例によりDMAディスクリプタバッファを確保している。そして、DMA開始指示を受け、IOPのディスクリプタを読み出し、ソースアドレスを取得する。
【0070】
具体的には、IOPのTxBDstatusの送信Ready状態のものに対して、図13に示すような設定を行う。IOPのTxBDからバッファポインタを読み出し、DMAディスクリプタのsrc addrにセットする。次に、初期化時に確保したSKBポインタをDMAディスクリプタのdst addrにセットする。次に、TxBDから読み出したサイズをDMAディスクリプタのlengthにセットし、次のDMAディスクリプタへのポインタをnext descにセットする。そして、最後のDMAディスクリプタのnext descにEOTD flagを立てる。
【0071】
次に、NFEのドライバは、他のDMA転送が行われていなければDMA転送が開始される。ここで、remote_tx->ready flag=1 & dirtyrx < cur_rxのすべてのSKBを転送する。
【0072】
転送終了後、IPICよりDMA完了がNFEドライバに割り込み通知される。NFEドライバは、ディスクリプタを更新し(remote_dirtytx->status->ready)、IOPドライバに送信完了を通知する(remote_dirtytx=+N)。ここで、dirtyrx == cur_rx-1の場合は受信バッファを確保した後に通知する。
【0073】
NFEドライバは、上位層のプロトコルにコピー完了通知を行う。NFE側の上位層のプロトコルは、コピー完了通知を受け、受信用ソケットバッファからデータを受け取り、その後ソケットバッファを破棄する。NFEドライバは、破棄した分の受信用ソケットバッファを確保する。これらは、受信済みのすべてのソケットバッファについて繰り返し処理する。
【0074】
IOPドライバは、NFEドライバから送信完了の通知を受けると、送信完了(dirtytx->status->ready = 0)のソケットバッファをすべて破棄する。
【0075】
このようにシンプルDMA転送を行うことにより、1パケットのデータを1DMAディスクリプタとして送信し、PCI通信をネットワーク通信に見せかけることができる。
【0076】
次に、マルチプル転送について説明する。マルチプル転送では、1パケットのデータを複数DMAディスクリプタのchain modeで送信する。TSO(TCP Segmentation offloading)がオンの場合、上位層から渡されるバッファは、1つの大きなバッファではなく、複数のFragmentバッファに分割されている。ただし、TCP/IPヘッダはMTUを超える大きなバッファ全体で一つである。
【0077】
図14(A)〜(C)は、Tx/Rxバッファディスクリプタ定義の記述例を示す図である。このTx/Rxバッファディスクリプタは、IOPからNFEへの情報伝達として利用するが、一部statusは対応しない。このTx/Rxバッファディスクリプタは、IOP側に構成され、NFE側がPCI経由で読み書きする。また、図14(B)に示すようにTxBDにパケット終了フラグ(EOP)が追加される。
【0078】
先ず、IOPのドライバのfeature設定において、TSO,SG,FRAGLISTをONとする。すなわち、カーネルにTSO(TCP Segmentation offloading)をサポートするとの宣言を行う。
【0079】
このTSOは、後述するように、例えば、ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)と、netfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)とで、NFE側のSKB受信バッファの大きさが異なる。
【0080】
ユースケース1では、できるだけ大きいままNFE側のDRMアプリケーションに渡したいので、TSOで渡されたデータサイズを受信バッファサイズとする。なお、あまりに大きなバッファを一気に確保することは逆にパフォーマンスの低下を招く場合もあるので、固定の上限値を設けてもよい。
【0081】
また、ユースケース2では、Netfilter23ではMTUサイズの変更(分割、合体)は行わず、そのまま外部に転送したいので、MTUサイズを受信バッファサイズとする。すなわち、外部イーサネット通信のMTUサイズとPCI通信のMTUサイズとを同じ値に設定する。
【0082】
送信側の上位層のプロトコルは、受信ソケットバッファ(SKB)を確保し、送信データを書き込み、IOPドライバに送信要求する。送信データには、SKBのdataポインタとサイズを含んでいる。また、図15に示すように、データは、fragmentに分割されている。
【0083】
IOPドライバは、SKBの全データを転送するため、図16に示す動作をTxBDの作成が完了するまで繰り返す。先ず、IOPドライバは、ヘッダ用TxBDを作成する。具体的には、最初のSKB dataポインタからヘッダ情報を読み出し、別領域(headp)にコピーし、Headpのうちサイズ・チェックサムを分割後のパケットに合わせて書き換える。次に、HeadpをTxBDバッファポインタとしてセットする。そして、TxBDにヘッダサイズをセットし、TxBDのstatusを送信Ready状態にする。
【0084】
次に、IOPドライバは、payload用TxBDを作成する。具体的には、図16に示すように以下の動作を分割後のパケットサイズ分のTxBDの作成完了まで繰り返す。先ず、最初のみrest_size=分割後パケットサイズとする。rest_sizeは分割後パケットデータのうち転送未終了分のサイズである。
【0085】
ここで、fragの残データの方がrest_sizeより小さい場合、つまり、この分割後パケットのデータを完成させるには次のfragのデータが必要)場合、一つ前のTxBDにしかけたデータの次のアドレスをTxBDバッファポインタとしてセットする(大半は次のfragの先頭)。fragの残りのデータサイズをTxBDのlengthにセットし、TxBD statusを送信Ready状態にする。また、Rest_sizeからlengthを引く。
【0086】
一方、fragの残データの方がrest_sizeより大きい場合、つまり、この分割後パケットの最後のTxBDの場合、一つ前のTxBDにしかけたデータの次のアドレスをTxBDバッファポインタとしてセットする(大半は次のfragの先頭)。そして、このfragの残りのデータサイズをTxBDのlengthにセットし、TxBD status送信Ready状態にすると共にEOP flagを立てる。また、Rest_sizeからlengthを引く。
【0087】
このようにして分割後1パケット分の繰り返しが終了する。また、SKB全データについて上述した転送を繰り返す。
【0088】
次に、NFEの受信動作について説明する。NFEのドライバは、IOPのTxBD statusの送信Ready状態のものに対して図17に示すような処理を繰り返す。初回のみoffset=0とする。ここで、offsetは受信用SKBの使用済サイズである。
【0089】
先ず、IOPのTxBDからバッファポインタを読み出し、DMAディスクリプタのsrc addrにセットする。また、初期化時などに確保したSKBポインタ+offsetをDMAディスクリプタのdst addrにセットする。次にTxBDから読み出したサイズをDMAディスクリプタのlengthにセットする。そして、次のDMAディスクリプタへのポインタをnext descにセットする(Offset+=length)。TxBD statusのEOPがセットされていれば、offset=0とし、受信用SKBポインタを次に進める。このようにして最後のDMAディスクリプタのnext descにEOTD flagを立てる。その後、DMA開始指示を行う。
【0090】
このようにTSO(TCP Segmentation offloading)をサポートするとの宣言をすることで、カーネルがMTUサイズを越えるソケットバッファをイーサネットデバイスドライバに渡し、イーサネットデバイスドライバがそれを分割送信することができる。
【0091】
次に、マルチプル転送における2つのユースケースについて説明する。上述したように、ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)と、netfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)とで、NFE側のSKB受信バッファの大きさが異なる。
【0092】
ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)は、できるだけDMA単位を大きくして一気に転送することが望まれる。
【0093】
MTUサイズ ≦ DMA転送サイズ ≦ TSOデータサイズ
【0094】
ここで、DMA転送サイズはDMA chain modeで連結された合計の転送サイズである。なお、1つのDMAディスクリプタで転送されるサイズはこれより小さい。
【0095】
通常、イーサネットデバイスドライバの受信バッファサイズは、MTUサイズによって決まるが、この場合、転送サイズがMTUサイズを超えるため、通常の方法では十分なサイズの受信バッファを確保できない。そこで、これに対応するためにイーサネットデバイスドライバは、MTUサイズではなく、TSOのデータサイズを使って受信バッファを確保する。ただし、あまりに大きなバッファを一気に確保することは逆にパフォーマンスの低下を招く場合もあるので、固定の上限値を置いても構わない。
【0096】
一方、ホスト機器2がnetfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)は、外部通信側のイーサネットドライバのMTUサイズに合わせてTCP/IPヘッダを作成してDMA転送を行う。この場合、外部通信用イーサネットのMTUサイズと同じMTUサイズをPCI通信間ドライバにも設定する。これにより、受信側では通常の方法で(MTUサイズを元に)受信バッファサイズを決定すればよいため、ホスト機器2側で外部通信用イーサネットデバイスドライバまで大きなデータサイズで渡すことができる。なお、TCP/IPヘッダは、NFE1側で付与してもホスト機器2側で付与してもよい。また、チェックサム計算などを行うハードウェア等を利用して、より高速化させてもよい。
【0097】
上述した2つのユースケース1、2を同時に実現する場合には、それぞれのユースケースに対応する2組のドライバを実装し、NFE1とホスト機器2の両側でそれぞれネットワークインターフェースを2つ持つことで使い分けることができる。
【0098】
具体的には、下記の4つのドライバを実装する。
ホスト機器側ドライバ iop1(for UseCase1), iop2(for UseCase2)
NFE側ドライバ nfe1(for UseCase1), nfe2(for UseCase2)
【0099】
これらをLinuxにインストールすると、インターフェースが2つ追加される。例えばもともと下記の2つのインターフェースしかないとする。
> ifconfig
eth0 XXXXXXX(通常のetherインターフェース)
lo0 YYYYYY (local loopインターフェース)
【0100】
これにユースケース1、2用のドライバを実装する。
> insmod iop1.ko
> insmod iop2.ko
> ifconfig eth1 AAA.AAA.AAA.AAA
> ifconfig eth2 BBB.BBB.BBB.BBB
> ifconfig
eth0 XXXXXXX(通常のetherインターフェース)
eth1 AAAAAAA(UseCase1用PCI通信インターフェース)
eth2 BBBBBBB(UseCase2用PCI通信インターフェース)
lo0 YYYYYY (local loopインターフェース)
【0101】
また、NFE側にも同様にユースケース1、2用のドライバを実装する。そして、eth1,eth2にそれぞれ異なるネットワークIPアドレスを割り当てることで、ユースケース1、2の使い分けを簡単に実現することができる。
【0102】
すなわち、ユースケース毎にネットワークデバイスドライバを両側それぞれ実装し、ホスト機器2が各ネットワークデバイスドライバの仮想インターフェースに割り当てられたネットワークIPアドレスを指定することで、ネットワークに接続された外部機器との通信と、暗号復号アプリケーションとの通信とを選択することができる。
【0103】
以上説明したように、NFEが特定のネットワーク機能、DRM機能を代行するため、ホスト機器におけるネットワーク処理やDTCP−IP、MarlinなどのDRM(暗号)の符号化、復号化、変換などに要するメインCPUの負荷を低減させることができる。したがって、高速化処理が実現し、ハイビジョンコンテンツの複数同時処理などを行えるようになる。
【0104】
また、ホスト機器は、実ネットワークデバイスのためのドライバ等を備えなくても,仮想ネットワークインターフェースを通じて、外部との汎用ネットワーク通信と、DRM通信とを同時に行うことができる。
【0105】
また、NFEは、ホスト機器から一般的なNIC(ネットワークカード)に見え、あるいは似ているように、ハードウェア(レジスタ構成等)、及びNFE側ソフトウェアを構成することができる。これによって、ホスト側のドライバは、通常のネットワークカード用ドライバと似たような構成とすることができ、コード流用が図れるため、開発コストを下げることができる。
【0106】
以上、実施形態の一例を示したが、上述の実施形態に限定される物ではなく、この発明の技術的思想に基づく各種の変形が可能である。例えば、上述した実施の形態では、汎用バスとしてPCIバスを用いることとして説明したが、例えば、ISA(Industry Standard Architecture)バスやEISA(Extended Industry Standard Architecture)バスを用いても構わない。また、NFEに複数のネットワークIFを持ち、ルーティングを行わせるなど、独自の機能を複合的に持たせてもかまわない。
【図面の簡単な説明】
【0107】
【図1】ネットワーク全体の構成例を示す図である。
【図2A】イーサネットの通信方法を示す図である。
【図2B】イーサネットの通信方法を示す図である。
【図3】NFEとホスト機器とのバス通信の構成例を示すブロック図である。
【図4】DMAディスクリプタの記述例を示す図である。
【図5A】DMA転送の初期化処理を示す図である。
【図5B】DMA転送の初期化処理を示す図である。
【図6】DMAディスクリプタ定義の記述例を示す図である。
【図7】Tx/Rxバッファディスクリプタ定義の記述例を示す図である。
【図8】IOPの固有データの一例を示す図である。
【図9】NFEの固有データの一例を示す図である。
【図10A】シンプルDMA転送の処理を示す図である。
【図10B】シンプルDMA転送の処理を示す図である。
【図11】IOP及びNFEの固有データの一部を示す図である。
【図12】ヘッダ用TxBDの作成処理を説明するための図である。
【図13】TxBDの作成処理を説明するための図である。
【図14】Tx/Rxバッファディスクリプタ定義の記述例を示す図である。
【図15】ヘッダ用TxBDの作成処理を説明するための図である。
【図16】TxBDの作成処理を説明するための図である。
【図17】NFEの受信処理を説明するための図である。
【符号の説明】
【0108】
1 NFE、 2 ホスト機器、 3 ウェブサーバ、 4 クライアント、 11 ネットワーク接続部、 12 バス接続部、 13 暗号復号処理部、 21,22 イーサネットドライバ、 23 netfilter、 24 IP、 25 TCP、 26 ソケットインターフェース、 27 IPテーブル、 28 仮想デバイスドライバ、 29 DRMドライバ、 30 アプリケーション、 31 デバイス接続部、 32 AVデコーダ、 34 光ディスク、 41 イーサネットドライバ、 44 ソケットインターフェース、 45 ウェブブラウザ、 46 ライティングソフト
【技術分野】
【0001】
本発明は、PCI(Peripheral Component Interconnect)等の汎用バスによりホスト機器と結合可能なネットワークアダプタ及び通信装置に関する。
【背景技術】
【0002】
近年、ディジタルコンテンツには、著作権保護のため、「10回のみ複製可」や「複製不可(視聴可)」等の属性が与えられている。また、家庭内において、DNLA(Digital Living Network Alliance)などの規格に対応した録画機器をホームネットワーク(LAN:Local Area Network)に接続し、ディジタルコンテンツを配信することが可能となっている。
【0003】
このようなネットワークにおいて、著作権保護されたディジタルコンテンツを転送する際には、機器間の認証、コンテンツの暗号化等のディジタル著作権管理(DRM:Digital Rights Management)が必要となる。このDRM機能は、比較的処理負荷が高いため、ホスト機器に結合されるネットワークフロントエンド(NFE:Network Front End)に持たせることが提案されている(例えば、特許文献1参照。)。
【0004】
【特許文献1】特開2006−148451号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、上述のようにNFEがDRM機能を担う場合、一般に、PCI(Peripheral Component Interconnect)などの汎用バスを用いてNFEとホスト機器との間の通信を行うための専用ドライバを両者に実装する。この場合、NFE側の専用ドライバ及びDRMアプリケーション、並びにホスト機器側の専用ドライバ及びDRMアプリケーションは、それぞれ独自のAPI(Application Program Interface)を備えるものとなる。
【0006】
このため、ホスト機器は、ネットワークに接続する場合、NFEのネットワーク機能を使うのとは別に、汎用ネットワーク機能を用いてアクセスする必要があった。
【0007】
ホスト機器に独自に汎用ネットワークインターフェースを設けることも可能であるが、物理的コスト、ネットワーク処理に要するホストCPU(Central Processing Unit)の負荷コストが無視できなかった。
【0008】
また、ホスト機器において、汎用ネットワークのためのドライバをDRM機能の専用ドライバとは別に実装することも考えられるが、両者を2重に開発しなくてはならないことや、両者が1つのPCIデバイスを共有するために生じる競合などの問題を解決する必要があった。
【0009】
本発明は、このような従来の実情に鑑みて提案されたものであり、汎用ネットワーク機能及びDRM機能を発揮し、ホスト機器の負担を軽減させるネットワークアダプタ及び通信装置を提供する。
【課題を解決するための手段】
【0010】
本発明に係るネットワークアダプタは、ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行する制御部とを備え、上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、上記制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部のデータ及び制御情報の送受信を制御する。
【0011】
また、本発明に係る通信装置は、ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するネットワーク制御部とを備えるネットワークアダプタと、上記バスを介して上記ネットワークアダプタに接続するデバイス接続部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するホスト制御部とを備えるホスト機器とを有し、上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、上記ネットワーク制御部及び上記ホスト制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部と上記デバイス接続部との間のデータ及び制御情報の送受信を制御する。
【発明の効果】
【0012】
本発明によれば、ネットワークアダプタ及びホスト機器の両側にデバイスドライバとしてネットワークデバイスドライバを実装し、ネットワークアダプタとホスト機器との間のバス通信を制御することにより、DRMアプリケーション間の通信と汎用ネットワークアクセスとを両立し、ホスト機器の負担を軽減させることができる。
【発明を実施するための最良の形態】
【0013】
以下、本発明の具体的な実施の形態について、図面を参照しながら下記順序で詳細に説明する。
【0014】
1.全体構成 図1
2.通信方法
2−1.イーサネット通信 図2
2−2.DMA転送 図3〜図17
【0015】
[1.全体構成]
図1は、ネットワーク全体の構成例を示す図である。このネットワークには、ネットワークフロントエンド(NFE:Network Front End)1が結合されたホスト機器2と、ウェブサーバ3と、DRM(Digital Rights Management)サーバ/クライアント4とが接続されている。
【0016】
ホスト機器2は、NFE1を結合し、DRMサーバ、DRMクライアント、及びウェブクライアントとして機能する。そして、ホスト機器2は、ウェブサーバ3から情報の提供を受け、また、DRMサーバ/クライアント4に対しコンテンツを送受信する。
【0017】
ウェブサーバ3は、HTTP(HyperText Transfer Protocol)に則り、クライアントソフトウェアのウェブブラウザに対して、HTML(HyperText Markup Language)や画像などのオブジェクトの表示を提供するサービスプログラムを実行する。
【0018】
DRMサーバ/クライアント4は、サーバ機能としてクライアントに対してDRM再生キーを発行し、また、DRMによる暗号化をDTCP−IP(Digital Transmission Content Protection over Internet Protocol)による暗号化に変換する。
【0019】
続いて、NFE1及びホスト機器2の各構成について説明する。
【0020】
NFE1は、ネットワークに接続するネットワーク接続部11と、バスに接続し、データ及び制御情報を送受信するバス接続部12と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号処理部13とを備えている。
【0021】
ネットワーク接続部11は、例えば、イーサネット(商標)規格のLAN(Local Area Network)に有線又は無線により接続する。イーサネットは、OSI(Open Systems Interconnect)参照モデルにおける物理層及びデータリンク層を規定する。イーサネットでは、元の送信すべき通信データをまず一定の長さ以下に分割して、MACフレーム(Media Access Control Frame)を作成し、MACフレームの形で情報を伝送路に流す。
【0022】
バス接続部12は、例えば、PCI(Peripheral Component Interconnect)バス等の汎用バスに接続され、ホスト機器2とデータ及び制御情報を送受信する。バスは、一つ以上の周辺機器(デバイス)を同時に接続することができる線又は線の組で、共有リソースとして扱われる。バスに接続されたデバイスは、いずれも規約に従った行動を強いられる。例えば、PCIバスに接続されたデバイスは、名称、機能チップの型と番号、優先IRQ(Interrupt ReQuest)ライン、DMA(Direct Memory Access)能力などの情報をバスマスタに示さなければならない。また、PCIシステムは、一つのマスターと一つのスレーブとの間でだけデータ転送をする。マスターが会話を開始し、スレーブがデータ又はリクエストで応答する。
【0023】
暗号復号処理部13は、著作権保護技術(DRM)により保護されるコンテンツを暗号復号処理する。例えば、DTCP−IPでは、コンテンツを配信元(DRMサーバ)からダウンロードした時点で配信元固有のDRMによる暗号化をDTCP−IPによる暗号化に変換する。これにより、家庭内LANにあるDTCP−IP対応のディジタル機器(DRMクライアント)に配信可能となる。
【0024】
また、NFE1は、ROM(Read Only Memory)、RAM(Random Access Memory)、CPU(Central Processing Unit)等を有する制御部を備え、後述する組み込みソフトウェアを実行する。これにより、ネットワーク接続部11、バス接続部12、及び暗号復号処理部13の各機能の動作が最適化される。
【0025】
ホスト機器2は、NFE1とバスを介して物理的に接続されるデバイス接続部31と、AV(Audio Visual)デコーダ32とを備える。デバイス接続部31は、例えば、PCIバス等の汎用バスに接続され、NFE1とデータ及び制御情報を送受信する。AVデコーダ32は、例えば、H.264/AVCと呼ばれるMPEG(Moving Picture Experts Group)方式符号化されたデータを復号する。
【0026】
また、ホスト機器2は、グラフィカルユーザインタフェース(Graphical User Interface)等のUI(User Interface)33を提供する表示制御部と、光ディスク34の情報記録又は情報再生を行う記録再生制御部とを備える。また、ホスト機器2は、ROM、RAM、CPU等を有する制御部を備え、後述する組み込みソフトウェアを実行する。これにより、ウェブサーバ3から情報の提供を受け、また、DRMにより保護されたコンテンツの記録又は再生を行う。
【0027】
次に、NFE1及びホスト機器2の制御部にて実行されるソフトウェアについて説明する。ここで、ソフトウェアは、上位層から順番にユーザプログラム、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層で構成されているものとする。なお、以下、OS(Operating System)としてLinux(商標)を想定して説明するが、これに限られるものではなく、Windows(商標)などのOSを用いても構わない。
【0028】
ユーザプログラムの階層は、DRMアプリケーション30、ウェブブラウザ45、DRM機能付きBD(Blu-ray Disc(登録商標))のライティングソフト46等で構成される。ユーザプログラムは、送信対象となる元データを用意して下位層へと渡す。元データは、送信側と受信側とで同一プロトコルに従って処理され、そのプロトコルに応じたデータ処理が下位層で実施される。
【0029】
ソケットインターフェース26,44は、論理的な通信口であり、データの送受信を行うための仮想的な経路の確立や解放を行う。
【0030】
プロトコルスタックの階層は、IP(Internet Protocol)24,42、netfilter23、TCP(Transport Control Protocol)25,43等で構成される。プロトコルスタックの階層は、TCP/IP通信を行うための主要部で、相手側とのコネクションの管理、データパケットの生成、タイムアウト、再処理などを行う。また、渡されたデータに対して、MACヘッダやIPヘッダの付加を行う。
【0031】
デバイスドライバの階層は、イーサネットドライバ21,22,41、DRMドライバ29等で構成される。イーサネットドライバ21はネットワーク接続部11を、イーサネットドライバ22はバス接続部12を、イーサネットドライバ41はデバイス接続部31を、DRMドライバ29は暗号復号処理部13をそれぞれ制御する。
【0032】
本実施の形態では、NFE1とホスト機器2の両側に、両者間の通信を行うイーサネットドライバ21、41を実装する。このネットワークデバイスドライバは、カーネルインターフェースを持つデバイスドライバとして実装され、NFE1及びホスト機器2のぞれぞれのIP層の下位レイヤとして働く。このようにNFE1とホスト機器2と間のPCIバスの通信を行うためのデバイスドライバを、両アプリケーション用の専用ドライバの代わりに、イーサネットデバイスドライバの形式で実装することで、両アプリケーションは中間層として、ソケットインターフェース、NAPI(New API)などを利用することができる。NAPIは、ネットワークに高負荷が掛かった時点でドライバの動作を割り込み駆動からポーリング駆動に切り替えることで、ネットワーク負荷に伴うシステム全体の応答性能の低下を防ぐことができる。
【0033】
ホスト機器2のウェブブラウザ45とウェブサーバ3とが通信する場合、ホスト機器2は、ソケットインターフェース44、TCP43、IP42、イーサネットドライバ41の各層、及びデバイス接続部31を介してPCIバス通信を行う。そして、NFE1側では、PCIバス、バス接続部12、イーサネットドライバ21、netfilter23、イーサネットドライバ22、及びネットワーク接続部11を介してウェブサーバ3とホスト機器2とが通信する。
【0034】
ここで、netfilter23等の機能によりIPパケット転送、IPアドレス変換等が行われる。IPパケット転送機能としては、例えばLinuxのnetfilter23/IPTABLES27を利用することができる。これによってホスト機器2は、外部のネットワークと通信することができる。また、netfilter23等のNAT(Network address transration)機能を利用することで、ホスト機器は、固定のプライベートIPアドレスを用いて外部ネットワークと通信することができる。また、外部向けのIPアドレスをホスト機器2に通知したり、ホスト機器2からNFE1側を設定する必要がある場合でも、上述のような仮想ネットワークの通信を通じて簡単に行うことができる。また、IPフィルタリング機能など用いることにより、NFE内にセキュリティー機能等を実装することができる。
【0035】
ホスト機器2のDRM機能付きAVデコーダ32やライティングソフト46とDRMサーバ/クライアント4とが通信する場合、ホスト機器2は、ソケットインターフェース44、TCP43、IP42、イーサネットドライバ41の各層、及びデバイス接続部31を介してPCIバス通信を行う。NFE1側では、PCIバス、バス接続部12、イーサネットドライバ21、IP24、TCP25、ソケットインターフェース26を介してDRMアプリケーション30とホスト機器2とが通信する。そして、DRMアプリケーション30、DRMドライバ29、暗号復号処理部13によってコンテンツデータの暗号化又は復号化が行われる。
【0036】
ここで、DRMアプリケーション30がマルチプロセスアプリケーションであることなどから、ソケットインターフェース26の使用部分をカーネルモードドライバ内に遮蔽して、DRM通信を行う仮想デバイスドライバ28とすることができる。これにより、カーネルオブジェクトを使った相互排除などが簡単に行うことができる。
【0037】
また、NFE1のDRMアプリケーション30は、ソケットインターフェース26、TCP25、IP24、netfilter23、イーサネットドライバ22、及びネットワーク接続部11を介してDRMサーバ/クライアント4と通信する。
【0038】
このようにPCI等の汎用バスで結合されるNFE1とホスト機器2の両側に、データリンク層インターフェース用デバイスドライバをイーサネットデバイスドライバとして実装し、NFE1内にIP転送、NATなどの機能を持たせる。これにより、NFE本来のDRMオフロード機能と、汎用ネットワークアクセスを両立し、効率的にホスト機器2に提供することができる。すなわち、DRMアプリ間の通信と汎用ネットワークアクセスとを簡単に両立することができる。
【0039】
[2.通信方法]
次に、ネットワークデバイスドライバの通信について説明する。ここでは、先ず、一般的なイーサネット通信について説明し、続いて、DMA転送について説明する。
【0040】
[2−1.イーサネット通信]
ネットワークデバイスドライバは、ネットワーク用のプロトコルスタックの下位レイヤとしてソフトウェアの最下層に位置し、上位のプロトコルレイヤからのデータ、または物理層のデバイスからのデータをその間で受け渡しをする。Linuxでは、ソケットバッファ(SKB)によりネットワークデバイスドライバと上位のプロトコルレイヤとの間で、データの受け渡しを実現する。
【0041】
上位のプロトコルから渡される、又は上位に渡すバッファには、Linux独自のフォーマットがあり、このバッファのことをソケットバッファと呼ぶ。ソケットバッファは構造体で、データ部分と属性を保持するメンバからなる。ドライバで行うデータフローは、このソケットバッファとデバイス間でのデータ移動が主たる仕事になる。
【0042】
ソケットバッファの保持する情報で、ネットワークデバイスドライバにとって重要なものは、ヘッダポインタ(head)、データポインタ(data)、テイルポインタ(tail)である。ヘッダポインタは、ソケットバッファが保持するフレームヘッダの先頭に当たる。また、データとは、フレームのデータの先頭を指し、テイルとは、ソケットバッファが保持するフレームの最後を指す。これらのポインタを操作することで、送信するデータ又は受信したデータの長さを指定し、シンプルなインターフェースを実現する。
【0043】
図2A及び図2Bは、イーサネットの通信方法を示す図である。送信する際には、図2Aに示すように上位のIPレイヤでイーサネットのフレームが作成される。ネットワークデバイスドライバは、デバイス上の送信バッファに空きがあるか否かを調べ、空きがない場合、そのデータは後で処理することをマークする。空きがある場合、フレームをデバイスにコピーし、送信要求をデバイスに対して出す。ネットワークデバイスは、送信完了、またはエラーのときにドライバへの割り込みを発生させる。
【0044】
一方、受信の際には、図2Bに示すようにデバイス上にフレームが受信されたとすると、デバイスによりネットワークデバイスドライバへの割り込みが発生する。ネットワークデバイスドライバは、その割り込みにより受信SKBを確保し、PHY受信バッファからのフレームを受信SKBにコピーする。コピーの後、そのフレームを上位のプロトコルへと渡し、受信が完了する。
【0045】
本実施の形態では、NFE1とホスト機器2の両者は近接して直結されており、外来ノイズなどの影響を無視できる環境とすることができる。例えば、IPヘッダ、TCPなどの各種チェックサム計算を省くことができる。これらはカーネルに対してチェックサムを用いないと宣言することなどで、容易に実現することができる。
【0046】
また、NFE1とホスト機器2の両者は近接して直結されているため、ソケットバッファや、パケットのサイズを可能なかぎり大きくして、単位バイトあたりのネットワーク処理に要するCPU負荷を低減することができる。一般に、パケットの通過するネットワーク上のハブ、ルーターなどの機器や相手のホスト機器が扱えるサイズの上限を定める必要から、実際の実ネットワークインターフェースには、経験的にMTU(Maximum Transmission Unit)として1500バイト等の値が用いられている。しかし、本実施の形態では、外来ノイズなどの影響を無視できる環境とすることができるため、カーネル資源の許す限りMTUを巨大化することができる。
【0047】
このようにNFE1とホスト機器とを結合するネットワークデバイスドライバを実装することにより、それ自体がCPU負荷となることを防止し、さらにホスト機器2のネットワーク処理負荷を軽減させることができる。
【0048】
[2−2.DMA転送]
また、本実施の形態では、NFE1とホスト機器2とが直結しているため、DMA転送により自ら設定したMTUを超える送受信を行うことが可能である。DMA機能とは、DMAコントローラがバスに付随するメモリ空間上の特定のアドレスから、同じバスに付随するメモリ空間上の特定のアドレスへのデータ移動(データ転送)を、CPUの介在なしに行うものである。
【0049】
後述するDMA処理の際には、データ転送に関する属性情報であるデータ転送アドレスや転送サイズ等のディスクリプタ(descriptor:記述子)を、外部メモリのディスクリプタ格納領域からDMAコントローラ内のDMAレジスタブロックに読み込んで、メモリ領域との間のデータ転送を制御する。DMAが起動されると、DMAコントローラは、DMAレジスタブロックに書き込まれたデータ(メモリアドレス及び転送データサイズ)を読み出し、メモリ領域の転送元アドレスから転送データサイズ分のデータを読み出し制御して、PCIバスを介し、転送先のメモリに送る。
【0050】
Linux等のカーネルには、通常、TSO(TCP Segmentation offloading)をサポートするとの宣言を行うフラグ等が用意されている。こうすることで、カーネルは、MTUサイズを越えるソケットバッファをイーサネットデバイスドライバに渡して、このイーサネットデバイスドライバにそれを分割送信させることができる。
【0051】
また、ホスト機器2側のイーサネットデバイスドライバは、TSOをサポートするとカーネルに宣言し、実際のNFE1への送信時において、MTUサイズを無視して分割処理(セグメント化)せずに送信を行うことができる。これにより、TCPチェックサム再計算やDMAディスクリプタの再構築に要する単位バイト当たりのCPU負荷を軽減することができる。
【0052】
また、NFE1側のイーサネットデバイスドライバも、TSOをサポートするとカーネルに宣言し、実際のホスト機器2への送信時において、ホスト機器2側の処理と同様に、パケットの分割を行わずに送信することができる。
【0053】
なお、ホスト機器2への送信時において、「外部ネットワークからnetfilterを経由してくる小さなパケット」を集めて1つの大きなパケットにすることも有効である。しかし、本来TCP層の働きが必要なことなどから、現在のところnetfilterには、この機能が実装されていない。将来netfilterやイーサネットデバイスドライバが協調して、スキャッタ/ギャザーDMAを利用して、これを行うときは、IPヘッダ、TCPチェックサム再計算が必要となるので、DMAと同時に再計算できるハードウェアを利用する。
【0054】
また、特にNFE1側のイーサネットドライバには、セグメント化をNFE1とホスト機器2との間の通信と同時に一度に行うようにしてもよい。ホスト機器2からの受信時においては、外部向けの実ネットワークインターフェースのMTUに合わせて、パケットの分割を行う。具体的には、PCIバスを介した受信時に同時に、スキャッタ/ギャザーDMAを使い、DMAディスクリプタの生成などの簡単な処理で、受信と同時にパケットを分割する。このとき、IPヘッダ、TCPチェックサム再計算が必要となるので、DMAと同時に再計算できるハードウェアを利用する。
【0055】
次に、DMA転送について詳細に説明する。図3は、NFEとホスト機器とのバス通信の構成例を示すブロック図である。この構成例は、NFE制御部50と、ホスト制御部60とがPCIバスで接続されている。NFE制御部50は、プロセッサ51と、ローカルメモリ52とがローカルバスで接続され、プロセッサ51で実行されたディスクリプタに基づいてローカルメモリ52にデータを格納する。このようなプロセッサ51として、例えばFreescale Semiconductor社のPowerPCプロセッサ「MPC8349」を使用することができる。また、ホスト制御部60も、NFE制御部50と同様に、プロセッサ(ホストCPU)61と、ローカルメモリ62とがローカルバスで接続されている。
【0056】
また、図4は、DMAディスクリプタの記述例を示す図である。ホスト制御部60からNFE制御部50へデータを転送する場合、CPUコア51aがDMAコントローラ51bにDMAディスクリプタ52aのアドレスを通知し、DMA開始を要求する。DMAコントローラ51bは、DMAディスクリプタを読み出し、ソースアドレス、及びディスティネーションアドレスに基づいてローカルメモリ62のデータソース62aのデータをローカルメモリ52のデータディスティネーション52bに移動させる。転送完了後、DMAコントローラ51bは、DMAディスクリプタに記述された次のディスクリプタアドレスに基づいて、次のDMAディスクリプタを読み出す。
【0057】
なお、図3に示す例では、ディスクリプタをNFE制御部50側のローカルメモリ52に持っているが、ホスト制御部60側のローカルメモリ62に持ってもよい。この場合、DMA開始時にディスクリプタの位置としてローカルメモリ52のアドレスではなく、ホスト制御部60側のローカルメモリ62内のアドレスを指定すればよい。
【0058】
本実施の形態では、PCI通信をネットワーク通信に見せかけるため、ホスト制御部60側は、ローカルメモリ62上にPCI通信用DMAディスクリプタではなく、ネットワーク通信用TxBD/RxBD(Tx/Rxバッファディスクリプタ)を作成し、通常のイーサネットデバイスドライバに近い形で実現する。一方、NFE制御部50は、ローカルメモリ52上にPCI通信用DMAディスクリプタを作成し、自分のバッファのアドレスは、自身でそれを書く。ホスト側のローカルメモリ62のアドレスは、ホスト制御部60が作成したTxBD/RxBDを読み出して書く。これによりNFE側のデバイスドライバは、ホスト側イーサネットデバイスドライバと矛盾なく処理(PHYの動作を模倣)する一方、ホスト制御部60のネットワーク層とも整合を取りつつ、DMA処理を行うことができる。
【0059】
ここでは、先ず初期化処理を説明し、続いてシンプルDMA転送及びマルチプル転送について説明する。
【0060】
図5A及び図5Bは、DMA転送の初期化処理を示す図である。ホスト制御部60側のプロセッサ61がPCIマスターで、NFE制御部50側のプロセッサ51がスレーブである。すなわち、NFE1のDMAコントローラ51bにDMAを仕掛ける。なお、以下では、ホスト制御部60側のプロセッサ61をIOP(入出力プロセッサ)と呼び、NFE制御部50側のプロセッサ51をNFEと呼ぶ。
【0061】
図6は、DMAディスクリプタ定義の記述例を示す図である。このDMAディスクリプタ定義によれば、「Next desc」を用いることにより、リングバッファを構成することができる。また、DMAチェーンモードを用いることにより、効率よく転送することができる。
【0062】
図7(A)〜(C)は、Tx/Rxバッファディスクリプタ定義の記述例を示す図である。このTx/Rxバッファディスクリプタ定義によれば、Tx/RxバッファディスクリプタはIOP側に構成し、NFE側がPCIバス経由で読み書きする。
【0063】
ここで、NFEからIOPへは、outbound doorbell -> INTAで通知し、メッセージの種類はdoorbellの番号で区別する。また、IOPからNFEへは、inbound doorbellで通知し、割り込みの種類はdoorbellの番号で区別する。
【0064】
また、図8は、IOPの固有データの一例を示す図であり、図9は、NFEの固有データの一例を示す図である。初期化時において、IOPは、図8に示すようなIOP固有データに基づいてTxバッファディスクリプタを確保し、NFEは、図9に示すようなNFE固有データに基づいて、受信用固定DMAディスクリプタリングバッファを確保する。このリングバッファは、IOPからはアクセスされない。
【0065】
IOPは、確保したTxバッファディスクリプタのアドレスをNFEに通知し、NFEがIOPのTxバッファディスクリプタを読み出し、これを完成させる。また、NFEは送信用固定DMAディスクリプタリングバッファを確保し、割り込みメッセージである初期化要求(out door->INTA)をIOPに通知する。IOPは、割り込みメッセージの初期化(in msg)をNFEに通知し、Rxバッファディスクリプタを確保する。NFEは、初期化(in msg)に対して、「Set remote_tx/rx_base」をセットし、初期化完了(out door->INTA)をIOPに通知する。以上により初期化が完了する。
【0066】
図10A及び図10Bは、シンプルDMA転送の処理を示す図である。ここで、IOPのドライバのfeature設定において、NETIF_F_TSO,NETIF_F_SG,NETIF_F_FRAGLISTをOFFとする。すなわち、カーネルにTSO(TCP Segmentation offloading)をサポートしないとの宣言を行う。
【0067】
送信側の上位層のプロトコルは、受信ソケットバッファ(SKB)を確保し、送信データを書き込み、IOPドライバに送信要求する。送信データには、SKBのdataポインタとサイズを含んでいる。
【0068】
IOPドライバは、図11(A)に示すIOPの固有データ例によりTxBDバッファを確保している。IOPドライバは、送信要求に対し、図12に示すようにSKBのdataポインタをTxBDバッファポインタとしてセットする。また、TxBDにサイズをセットし、TxBDのstatusを送信Ready状態にする。そして、IOPドライバは、DMA開始指示を行い、送信要求完了を上位層に通知する。
【0069】
一方、NFEのドライバは、図11(B)に示すNFEの固有データ例によりDMAディスクリプタバッファを確保している。そして、DMA開始指示を受け、IOPのディスクリプタを読み出し、ソースアドレスを取得する。
【0070】
具体的には、IOPのTxBDstatusの送信Ready状態のものに対して、図13に示すような設定を行う。IOPのTxBDからバッファポインタを読み出し、DMAディスクリプタのsrc addrにセットする。次に、初期化時に確保したSKBポインタをDMAディスクリプタのdst addrにセットする。次に、TxBDから読み出したサイズをDMAディスクリプタのlengthにセットし、次のDMAディスクリプタへのポインタをnext descにセットする。そして、最後のDMAディスクリプタのnext descにEOTD flagを立てる。
【0071】
次に、NFEのドライバは、他のDMA転送が行われていなければDMA転送が開始される。ここで、remote_tx->ready flag=1 & dirtyrx < cur_rxのすべてのSKBを転送する。
【0072】
転送終了後、IPICよりDMA完了がNFEドライバに割り込み通知される。NFEドライバは、ディスクリプタを更新し(remote_dirtytx->status->ready)、IOPドライバに送信完了を通知する(remote_dirtytx=+N)。ここで、dirtyrx == cur_rx-1の場合は受信バッファを確保した後に通知する。
【0073】
NFEドライバは、上位層のプロトコルにコピー完了通知を行う。NFE側の上位層のプロトコルは、コピー完了通知を受け、受信用ソケットバッファからデータを受け取り、その後ソケットバッファを破棄する。NFEドライバは、破棄した分の受信用ソケットバッファを確保する。これらは、受信済みのすべてのソケットバッファについて繰り返し処理する。
【0074】
IOPドライバは、NFEドライバから送信完了の通知を受けると、送信完了(dirtytx->status->ready = 0)のソケットバッファをすべて破棄する。
【0075】
このようにシンプルDMA転送を行うことにより、1パケットのデータを1DMAディスクリプタとして送信し、PCI通信をネットワーク通信に見せかけることができる。
【0076】
次に、マルチプル転送について説明する。マルチプル転送では、1パケットのデータを複数DMAディスクリプタのchain modeで送信する。TSO(TCP Segmentation offloading)がオンの場合、上位層から渡されるバッファは、1つの大きなバッファではなく、複数のFragmentバッファに分割されている。ただし、TCP/IPヘッダはMTUを超える大きなバッファ全体で一つである。
【0077】
図14(A)〜(C)は、Tx/Rxバッファディスクリプタ定義の記述例を示す図である。このTx/Rxバッファディスクリプタは、IOPからNFEへの情報伝達として利用するが、一部statusは対応しない。このTx/Rxバッファディスクリプタは、IOP側に構成され、NFE側がPCI経由で読み書きする。また、図14(B)に示すようにTxBDにパケット終了フラグ(EOP)が追加される。
【0078】
先ず、IOPのドライバのfeature設定において、TSO,SG,FRAGLISTをONとする。すなわち、カーネルにTSO(TCP Segmentation offloading)をサポートするとの宣言を行う。
【0079】
このTSOは、後述するように、例えば、ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)と、netfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)とで、NFE側のSKB受信バッファの大きさが異なる。
【0080】
ユースケース1では、できるだけ大きいままNFE側のDRMアプリケーションに渡したいので、TSOで渡されたデータサイズを受信バッファサイズとする。なお、あまりに大きなバッファを一気に確保することは逆にパフォーマンスの低下を招く場合もあるので、固定の上限値を設けてもよい。
【0081】
また、ユースケース2では、Netfilter23ではMTUサイズの変更(分割、合体)は行わず、そのまま外部に転送したいので、MTUサイズを受信バッファサイズとする。すなわち、外部イーサネット通信のMTUサイズとPCI通信のMTUサイズとを同じ値に設定する。
【0082】
送信側の上位層のプロトコルは、受信ソケットバッファ(SKB)を確保し、送信データを書き込み、IOPドライバに送信要求する。送信データには、SKBのdataポインタとサイズを含んでいる。また、図15に示すように、データは、fragmentに分割されている。
【0083】
IOPドライバは、SKBの全データを転送するため、図16に示す動作をTxBDの作成が完了するまで繰り返す。先ず、IOPドライバは、ヘッダ用TxBDを作成する。具体的には、最初のSKB dataポインタからヘッダ情報を読み出し、別領域(headp)にコピーし、Headpのうちサイズ・チェックサムを分割後のパケットに合わせて書き換える。次に、HeadpをTxBDバッファポインタとしてセットする。そして、TxBDにヘッダサイズをセットし、TxBDのstatusを送信Ready状態にする。
【0084】
次に、IOPドライバは、payload用TxBDを作成する。具体的には、図16に示すように以下の動作を分割後のパケットサイズ分のTxBDの作成完了まで繰り返す。先ず、最初のみrest_size=分割後パケットサイズとする。rest_sizeは分割後パケットデータのうち転送未終了分のサイズである。
【0085】
ここで、fragの残データの方がrest_sizeより小さい場合、つまり、この分割後パケットのデータを完成させるには次のfragのデータが必要)場合、一つ前のTxBDにしかけたデータの次のアドレスをTxBDバッファポインタとしてセットする(大半は次のfragの先頭)。fragの残りのデータサイズをTxBDのlengthにセットし、TxBD statusを送信Ready状態にする。また、Rest_sizeからlengthを引く。
【0086】
一方、fragの残データの方がrest_sizeより大きい場合、つまり、この分割後パケットの最後のTxBDの場合、一つ前のTxBDにしかけたデータの次のアドレスをTxBDバッファポインタとしてセットする(大半は次のfragの先頭)。そして、このfragの残りのデータサイズをTxBDのlengthにセットし、TxBD status送信Ready状態にすると共にEOP flagを立てる。また、Rest_sizeからlengthを引く。
【0087】
このようにして分割後1パケット分の繰り返しが終了する。また、SKB全データについて上述した転送を繰り返す。
【0088】
次に、NFEの受信動作について説明する。NFEのドライバは、IOPのTxBD statusの送信Ready状態のものに対して図17に示すような処理を繰り返す。初回のみoffset=0とする。ここで、offsetは受信用SKBの使用済サイズである。
【0089】
先ず、IOPのTxBDからバッファポインタを読み出し、DMAディスクリプタのsrc addrにセットする。また、初期化時などに確保したSKBポインタ+offsetをDMAディスクリプタのdst addrにセットする。次にTxBDから読み出したサイズをDMAディスクリプタのlengthにセットする。そして、次のDMAディスクリプタへのポインタをnext descにセットする(Offset+=length)。TxBD statusのEOPがセットされていれば、offset=0とし、受信用SKBポインタを次に進める。このようにして最後のDMAディスクリプタのnext descにEOTD flagを立てる。その後、DMA開始指示を行う。
【0090】
このようにTSO(TCP Segmentation offloading)をサポートするとの宣言をすることで、カーネルがMTUサイズを越えるソケットバッファをイーサネットデバイスドライバに渡し、イーサネットデバイスドライバがそれを分割送信することができる。
【0091】
次に、マルチプル転送における2つのユースケースについて説明する。上述したように、ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)と、netfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)とで、NFE側のSKB受信バッファの大きさが異なる。
【0092】
ホスト機器2がNFE1内のDRMアプリケーション30と通信する場合(ユースケース1)は、できるだけDMA単位を大きくして一気に転送することが望まれる。
【0093】
MTUサイズ ≦ DMA転送サイズ ≦ TSOデータサイズ
【0094】
ここで、DMA転送サイズはDMA chain modeで連結された合計の転送サイズである。なお、1つのDMAディスクリプタで転送されるサイズはこれより小さい。
【0095】
通常、イーサネットデバイスドライバの受信バッファサイズは、MTUサイズによって決まるが、この場合、転送サイズがMTUサイズを超えるため、通常の方法では十分なサイズの受信バッファを確保できない。そこで、これに対応するためにイーサネットデバイスドライバは、MTUサイズではなく、TSOのデータサイズを使って受信バッファを確保する。ただし、あまりに大きなバッファを一気に確保することは逆にパフォーマンスの低下を招く場合もあるので、固定の上限値を置いても構わない。
【0096】
一方、ホスト機器2がnetfilter23を介してウェブサーバ3等と通信する場合(ユースケース2)は、外部通信側のイーサネットドライバのMTUサイズに合わせてTCP/IPヘッダを作成してDMA転送を行う。この場合、外部通信用イーサネットのMTUサイズと同じMTUサイズをPCI通信間ドライバにも設定する。これにより、受信側では通常の方法で(MTUサイズを元に)受信バッファサイズを決定すればよいため、ホスト機器2側で外部通信用イーサネットデバイスドライバまで大きなデータサイズで渡すことができる。なお、TCP/IPヘッダは、NFE1側で付与してもホスト機器2側で付与してもよい。また、チェックサム計算などを行うハードウェア等を利用して、より高速化させてもよい。
【0097】
上述した2つのユースケース1、2を同時に実現する場合には、それぞれのユースケースに対応する2組のドライバを実装し、NFE1とホスト機器2の両側でそれぞれネットワークインターフェースを2つ持つことで使い分けることができる。
【0098】
具体的には、下記の4つのドライバを実装する。
ホスト機器側ドライバ iop1(for UseCase1), iop2(for UseCase2)
NFE側ドライバ nfe1(for UseCase1), nfe2(for UseCase2)
【0099】
これらをLinuxにインストールすると、インターフェースが2つ追加される。例えばもともと下記の2つのインターフェースしかないとする。
> ifconfig
eth0 XXXXXXX(通常のetherインターフェース)
lo0 YYYYYY (local loopインターフェース)
【0100】
これにユースケース1、2用のドライバを実装する。
> insmod iop1.ko
> insmod iop2.ko
> ifconfig eth1 AAA.AAA.AAA.AAA
> ifconfig eth2 BBB.BBB.BBB.BBB
> ifconfig
eth0 XXXXXXX(通常のetherインターフェース)
eth1 AAAAAAA(UseCase1用PCI通信インターフェース)
eth2 BBBBBBB(UseCase2用PCI通信インターフェース)
lo0 YYYYYY (local loopインターフェース)
【0101】
また、NFE側にも同様にユースケース1、2用のドライバを実装する。そして、eth1,eth2にそれぞれ異なるネットワークIPアドレスを割り当てることで、ユースケース1、2の使い分けを簡単に実現することができる。
【0102】
すなわち、ユースケース毎にネットワークデバイスドライバを両側それぞれ実装し、ホスト機器2が各ネットワークデバイスドライバの仮想インターフェースに割り当てられたネットワークIPアドレスを指定することで、ネットワークに接続された外部機器との通信と、暗号復号アプリケーションとの通信とを選択することができる。
【0103】
以上説明したように、NFEが特定のネットワーク機能、DRM機能を代行するため、ホスト機器におけるネットワーク処理やDTCP−IP、MarlinなどのDRM(暗号)の符号化、復号化、変換などに要するメインCPUの負荷を低減させることができる。したがって、高速化処理が実現し、ハイビジョンコンテンツの複数同時処理などを行えるようになる。
【0104】
また、ホスト機器は、実ネットワークデバイスのためのドライバ等を備えなくても,仮想ネットワークインターフェースを通じて、外部との汎用ネットワーク通信と、DRM通信とを同時に行うことができる。
【0105】
また、NFEは、ホスト機器から一般的なNIC(ネットワークカード)に見え、あるいは似ているように、ハードウェア(レジスタ構成等)、及びNFE側ソフトウェアを構成することができる。これによって、ホスト側のドライバは、通常のネットワークカード用ドライバと似たような構成とすることができ、コード流用が図れるため、開発コストを下げることができる。
【0106】
以上、実施形態の一例を示したが、上述の実施形態に限定される物ではなく、この発明の技術的思想に基づく各種の変形が可能である。例えば、上述した実施の形態では、汎用バスとしてPCIバスを用いることとして説明したが、例えば、ISA(Industry Standard Architecture)バスやEISA(Extended Industry Standard Architecture)バスを用いても構わない。また、NFEに複数のネットワークIFを持ち、ルーティングを行わせるなど、独自の機能を複合的に持たせてもかまわない。
【図面の簡単な説明】
【0107】
【図1】ネットワーク全体の構成例を示す図である。
【図2A】イーサネットの通信方法を示す図である。
【図2B】イーサネットの通信方法を示す図である。
【図3】NFEとホスト機器とのバス通信の構成例を示すブロック図である。
【図4】DMAディスクリプタの記述例を示す図である。
【図5A】DMA転送の初期化処理を示す図である。
【図5B】DMA転送の初期化処理を示す図である。
【図6】DMAディスクリプタ定義の記述例を示す図である。
【図7】Tx/Rxバッファディスクリプタ定義の記述例を示す図である。
【図8】IOPの固有データの一例を示す図である。
【図9】NFEの固有データの一例を示す図である。
【図10A】シンプルDMA転送の処理を示す図である。
【図10B】シンプルDMA転送の処理を示す図である。
【図11】IOP及びNFEの固有データの一部を示す図である。
【図12】ヘッダ用TxBDの作成処理を説明するための図である。
【図13】TxBDの作成処理を説明するための図である。
【図14】Tx/Rxバッファディスクリプタ定義の記述例を示す図である。
【図15】ヘッダ用TxBDの作成処理を説明するための図である。
【図16】TxBDの作成処理を説明するための図である。
【図17】NFEの受信処理を説明するための図である。
【符号の説明】
【0108】
1 NFE、 2 ホスト機器、 3 ウェブサーバ、 4 クライアント、 11 ネットワーク接続部、 12 バス接続部、 13 暗号復号処理部、 21,22 イーサネットドライバ、 23 netfilter、 24 IP、 25 TCP、 26 ソケットインターフェース、 27 IPテーブル、 28 仮想デバイスドライバ、 29 DRMドライバ、 30 アプリケーション、 31 デバイス接続部、 32 AVデコーダ、 34 光ディスク、 41 イーサネットドライバ、 44 ソケットインターフェース、 45 ウェブブラウザ、 46 ライティングソフト
【特許請求の範囲】
【請求項1】
ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、
バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、
コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、
ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行する制御部とを備え、
上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、
上記制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部のデータ及び制御情報の送受信を制御するネットワークアダプタ。
【請求項2】
上記ソケットインターフェースと上記暗号復号アプリケーションとの間には、上記ソケットインターフェースを隠蔽する仮想デバイスドライバが介在する請求項1記載のネットワークアダプタ。
【請求項3】
上記ネットワークデバイスドライバは、送信データをセグメント化して上記ホスト機器へ送信する請求項1記載のネットワークアダプタ。
【請求項4】
上記ネットワークドライバは、TSO(TCP Segmentation offloading)をサポートするとの宣言を行い、送信データをセグメント化せずに上記ホスト機器へ送信する請求項1記載のネットワークアダプタ。
【請求項5】
上記ネットワークドライバは、1500バイト以上のMTU(Maximum Transmission Unit)値を用いて上記ホスト機器と通信を行う請求項1記載のネットワークアダプタ。
【請求項6】
ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するネットワーク制御部とを備えるネットワークアダプタと、
上記バスを介して上記ネットワークアダプタに接続するデバイス接続部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するホスト制御部とを備えるホスト機器とを有し、
上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、
上記ネットワーク制御部及び上記ホスト制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部と上記デバイス接続部との間のデータ及び制御情報の送受信を制御する通信装置。
【請求項7】
上記ネットワーク制御部及び上記ホスト制御部は、それぞれ上記ネットワークデバイスドライバとして上記ネットワークに接続された外部機器通信用の第1のドライバと、上記暗号復号アプリケーション通信用の第2のドライバとを実装し、
上記ホスト制御部は、上記ネットワーク制御部に実装された第1のドライバ及び第2のドライバに割り当てられたネットワークIPアドレスを指定して上記外部機器の通信と上記暗号復号アプリケーションの通信とを選択する請求項6記載の通信装置。
【請求項1】
ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、
バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、
コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、
ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行する制御部とを備え、
上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、
上記制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部のデータ及び制御情報の送受信を制御するネットワークアダプタ。
【請求項2】
上記ソケットインターフェースと上記暗号復号アプリケーションとの間には、上記ソケットインターフェースを隠蔽する仮想デバイスドライバが介在する請求項1記載のネットワークアダプタ。
【請求項3】
上記ネットワークデバイスドライバは、送信データをセグメント化して上記ホスト機器へ送信する請求項1記載のネットワークアダプタ。
【請求項4】
上記ネットワークドライバは、TSO(TCP Segmentation offloading)をサポートするとの宣言を行い、送信データをセグメント化せずに上記ホスト機器へ送信する請求項1記載のネットワークアダプタ。
【請求項5】
上記ネットワークドライバは、1500バイト以上のMTU(Maximum Transmission Unit)値を用いて上記ホスト機器と通信を行う請求項1記載のネットワークアダプタ。
【請求項6】
ネットワークに接続し、パケットデータを送受信するネットワーク接続部と、バスに接続し、データ及び制御情報をホスト機器に送受信するバス接続部と、コンテンツを暗号化し、又は暗号化コンテンツを復号する暗号復号アプリケーションを実行する暗号復号処理部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するネットワーク制御部とを備えるネットワークアダプタと、
上記バスを介して上記ネットワークアダプタに接続するデバイス接続部と、ソケットインターフェース、プロトコルスタック、及びデバイスドライバの各階層をなすソフトウェアを実行するホスト制御部とを備えるホスト機器とを有し、
上記暗号復号アプリケーションは、上記ソケットインターフェースを介して上記ネットワーク接続部又は上記バス接続部と通信し、
上記ネットワーク制御部及び上記ホスト制御部は、上記デバイスドライバとしてネットワークデバイスドライバを用いて、上記バス接続部と上記デバイス接続部との間のデータ及び制御情報の送受信を制御する通信装置。
【請求項7】
上記ネットワーク制御部及び上記ホスト制御部は、それぞれ上記ネットワークデバイスドライバとして上記ネットワークに接続された外部機器通信用の第1のドライバと、上記暗号復号アプリケーション通信用の第2のドライバとを実装し、
上記ホスト制御部は、上記ネットワーク制御部に実装された第1のドライバ及び第2のドライバに割り当てられたネットワークIPアドレスを指定して上記外部機器の通信と上記暗号復号アプリケーションの通信とを選択する請求項6記載の通信装置。
【図1】
【図2A】
【図2B】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2A】
【図2B】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2010−68155(P2010−68155A)
【公開日】平成22年3月25日(2010.3.25)
【国際特許分類】
【出願番号】特願2008−231546(P2008−231546)
【出願日】平成20年9月9日(2008.9.9)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
【公開日】平成22年3月25日(2010.3.25)
【国際特許分類】
【出願日】平成20年9月9日(2008.9.9)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
[ Back to top ]