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

パケットの転送開始後、イーサネットアダプタが 転送の通知 (成功または失敗) を返しませんでした。 ハードウェアが動けなくなってしまっているようなのでリセットしています。

関連項目
lpt(4), ifconfig(8)

作者
このドライバは ReakTek による 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 ドライバの上位に位置するべきです。またローダブルモジュールと することによって、ポケットイーサネットアダプタが実際に取り付けられてから デバイスを検出できるようにするべきです。