RDP(4) FreeBSD/i386 カーネルインタフェースマニュアル RDP(4)
名称
rdp − RealTek RTL 8002 ポケットイーサネットのためのイーサネットドライバ |
書式
device rdp0 at isa? port 0x378 net irq 7 |
device rdp0 at isa? port 0x378 net irq 7 flags 0x2 |
解説 |
rdp デバイスドライバは、標準パラレルポートに接続される RealTek RTL 8002 ベースのポケットイーサネットアダプタをサポートします。 これらアダプタはポケットイーサネットアダプタのうちで安価なものに属すると 考えられます。RTL 8002 はその中心部で、標準パラレルプリンタアダプタと通信 するようにデザインされたホストインタフェースだけでなく、 BNC および UTP (10 Mbit/s) メディアへのインタフェースも含むものです。完全なイーサネット アダプタとして動くためには、送信および受信パケットバッファ (RTL 8002 では 16 K x 4) として使われる外部 RAM と、割り当てられたイーサネットハードウェ アアドレスを保持してくための EEPROM が必要です。 RTL 8002 では、EEPROM は 標準 93C46 シリアル EEPROM (一般にこれが選択されるようです) または 74S288 パラレル EEPROM を使うことができます。後者の変種を動かすためには、デバイ スコンフィギュレーションにフラグ 0x1 が必要です。 標準的なプリンタアダプタは、タイミングの要求仕様に関して大幅なばらつきが あるようなので、ポケットイーサネットアダプタとプリンタインタフェースとの 間でデータを交換する方法が現在 2 つ存在します。デフォルトでは RTL 8002 が サポートする最も高速なモードです。もし使用するプリンタアダプタが特に低速 であれば (パケットが損なわれたり、正しくパケットが受信されていないかどう かを観察することで知ることができます) rdp ドライバを減速させるためにコン フィギュレーションフラグに 0x2 をセットすることができます。高速モードでは データ転送速度は非対称で、送信のほうが受信よりもやや高速 (最大 2 倍) で す。送信が 150 KB/s で受信が 80 KB/s というのが一般的です。低速モードでは 双方の転送速度は等しく、 50KB/s から 70KB/s の範囲になりますが、もちろん 場合によって異なります。 ブート時にアダプタが認識されない場合、 bootverbose フラグ (‘−v’) をセット することでその原因を診断する助けになるでしょう。 RTL 8002 アダプタは ( lpt(4) とは違い) プリンタアダプタに動作する割り込みが利用できることを要求 するので、イーサネットアダプタが検出時に割り込みを表明できない場合、 rdp ドライバはアタッチに失敗します。 RTL 8002 は (ハードウェア) マルチキャストをサポートしません。 rdp ドライバはきわめて初期に検出されるようにするためフラグを内部でセット します。このため、同一のカーネルで rdp ドライバと lpt(4) の両方を設定する ことが可能です。もし RTL 8002 が存在しなければ最終的にプリンタドライバが 検出されるでしょう。 |
診断
rdp0: configured IRQ (7) cannot be asserted by device |
プリンタアダプタを通して割り込みをアサートする RTL 8002 を、検出ルーチン は見付けられませんでした。 |
rdp0: failed to find a valid hardware address in EEPROM |
EEPROM の中のハードウェアアドレスが格納されている標準的な場所が存在しない と推測される場合、 rdp ドライバは IEEE の OUI による割り当てを元に正しい と思われるイーサネットハードウェアアドレスを見つけるまで (シリアル) EEPROM 全体を見回ります。この診断はドライバがアドレスを見つけることができ なかったことを示しています。注: これはアダプタが 74S288 EEPROM を搭載して いることによるまれな場合かもしないので、 ‘flags 0x1’ を試すべきです。 |
rdp0: Device timeout |
パケットの転送開始後、イーサネットアダプタが転送の通知 (成功または失敗) を返しませんでした。ハードウェアが動けなくなってしまっているようなのでリ セットしています。 |
関連項目
作者
このドライバは RealTek による RTL 8002 のための パケットドライバと、 RealTek が提供していてくれた RTL 8012 (RTL 8002 の後継です) に関するいく つかの情報を元に Joerg Wunsch が書きました。 |
バグ
もちろんたくさんあります。 rdp ドライバはブート時にハードウェアを検出する必要があるので、その時に存 在していなければなりません。 RealTek のパケットドライバが扱うことができる 8 つの速度モードのうち、2つ しか実装されていません。したがって現在の低速モードでさえ、ハードウェアに とって速過ぎる場合があるかもしれません。 利用可能なモードを自動的に認識する検出ルーチンの中に DMA 転送テストが存在 するべきです。 データ交換のために標準プリンタインタフェースを酷使することは、エラーにな りやすい傾向にあります。偶発的なハードウェアの停止はそれほど驚くことでは なく、タイムアウトルーチンがそのような状態を捕捉してくれるでしょう。 ping の洪水 (flood-pinging) はこの問題を引き起こすよい例です。同様に、BPF はも ちろんサポートされていますが、無差別 (promiscuous) モードを使って混雑して いるイーサネットを覗こうとするのは悪いアイデアです。 RTL 8002 は 受信バッファ空間が 4 KB しかないので (2 x 2 KB は送信バッファ に使われます)、 rdp ドライバを使ったマシンが NFS の標準的なブロックサイズ である 8 KBで高速のサーバをマウントした場合、大きなパケットが到着すること で発生する、よくある NFS のデットロックが起こるかもしれません。 (NFS は パケット全体を再送することしかできないので、同じパケットが何度も転送され ることになるでしょう。) EEPROM からイーサネットハードウェアアドレスを見つけ出す発見的な手法は最悪 ですが、EEPROM の中の実際の場所に依存しない唯一の賢い一般的な方法はないよ うです。 RealTek によるサンプルドライバでは直接アドレス 0 に定めていまし た。他のベンダは、たとえば 15 のような正しいイーサネットアドレスと混同し てはならないゴミとともに拾い上げていました。 後継のチップである RTL 8012 をサポートするべきです。これは近ごろ入手可能 になり、使われているようです。 (RTL 8002 はすでにいくぶん歳をとってお り、1992 年または 93 年のものです。) RTL 8012 は転送をかなり高速化するこ とができるであろう、双方向の SPP または EPP のような進化したプリンタアダ プタハードウェアをサポートしています。また、RTL 8012 はハードウェアマルチ キャストをサポートしており、パケットバッファ RAM は 64K x 4 のアドレス空 間を扱うことができます。 このドライバはスタンドアロンで動作するのではなく、 ppc ドライバの上位に位 置するべきです。またローダブルモジュールとすることによって、ポケットイー サネットアダプタが実際に取り付けられてからデバイスを検出できるようにする べきです。 FreeBSD 10.0 December 21, 1998 FreeBSD 10.0 |