ED(4)

名称
ed - 高性能イーサネットデバイスドライバ

書式
device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 device ed1 at isa? port 0x300 net irq 5 iomem 0xd8000 device ed2 at isa? port 0x320 net irq 10 flags 0x4 iosiz 16384 iomem 0xd8000

解説
ed ドライバは、National Semiconductor の DS8390 に基づく 8 または 16 ビットの ISA イーサネットカードと、 他の会社が製造した同様の NIC (訳注: ネットワークインタフェースカード) をサポートします。

このドライバは Western Digital が製造したすべての 80x3 シリーズの ISA イーサネットカードと SMC, SMC Ultra, 3Com 3c503, Novell NE1000/NE2000, HP PC Lan+ をサポートします。

ed ドライバは独特のマルチバッファ機構を用いて、高い伝送性能を達成しています。 16 ビット ISA カードを使ったときに、IEEE 802.3 CSMA イーサネットの 理論最大性能の 97% が実現できます。

標準の、ポートや IRQ の指定機能に加え、 8/16 ビットモードの強制機能、 マルチバッファの有効化/無効化機能、そして デフォルトインタフェースタイプの選択機能 (AUI/BNC、ツイストペアを持つカードでは AUI/10BaseT) をサポートする、いくつもの flags を ed ドライバはサポートしています。

flags はビットフィールドであり、まとめると次のようになります:

0x01
    トランシーバを無効にします。トランシーバをサポートするカードでは、このフラグ はトランシーバを無効にして、デフォルトで AUI 接続が使われます。

0x02
    強制的に 8 ビットモードにします。このフラグは、カードが自分をどのように 認識したとしても、強制的に 8 ビットモードにします。このフラグは、 8 ビットインタフェースしか持っていないにもかかわらず、自分自身を 16 ビットであると誤認識するいくつかのクローンのカードで必要になります。

0x04
    強制的に 16 ビットモードにします。このフラグは、カードが自分をどのように 認識したとしても、強制的に 16 ビットモードにします。このフラグは、 16 ビット ISA インタフェースを持っているにもかかわらず、自分自身を 8 ビットであると誤認識するいくつかのクローンのカードで必要になります。

0x08
    マルチバッファによる転送を無効にします。このフラグは、複数の転送バッファ の使用を禁止します。 送り先のマシンが扱えるよりも速くパケットを送るときに発生する 競合状態 (重大なパケット損失により分かります) で必要になるかもしれません。 いくつかの (FreeBSD でない :-)) マシンは、ひどいイーサネット性能で、単なる 1100K+ データ転送さえも 対処できません。 このフラグを使うことは、受信バッファをパケット 1 個分増やす価値もあります。 また、8 ビットカード上では、受信損失を減らす助けになるかもしれません。

3c503 カードを使うとき、 ifconfig(8) に link2 オプションを指定することによって、 AUI 接続を選択してもかまいません (BNC がデフォルト)。

診断

ed%d: kernel configured irq %d doesn't match board configured irq %d. カーネル設定ファイルの中で指定され (カーネルに組み込まれ) た IRQ 番号が、インタフェースカードに設定された IRQ と異なっています。

ed%d: failed to clear shared memory at %x - check configuration. システムブートの際にカードがプローブされたときに、 ed ドライバがカードの共有メモリをクリアできないことが判明しました。 これは大抵、BIOS の拡張 ROM がイーサネットカードの共有メモリと 同じアドレスに設定されている場合に起こります。 ぶつかっているカードをみつけて、 BIOS ROM を衝突しないアドレスに変更してください。 または、カードの共有メモリが衝突しないアドレスにマップされるように、 カーネル設定ファイル内の iomem オプションを変更して下さい。

ed%d: Invalid irq configuration (%d) must be 2-5 for 3c503. カーネル設定ファイル内で指定されている IRQ 番号が 3Com 3c503 カードにとって不正です。 3x503 には、IRQ 2 から 5 までのみ割り当て可能です。

ed%d: Cannot find start of RAM.

ed%d: Cannot find any RAM, start : %d, x = %d. カードのパケットメモリの設定中に、Gateway 製カードのプローブに失敗しました。 これは、誤ってカードを Gateway 製であると認識したか、 カードが壊れていることを示している可能性が高いです。

ed: packets buffered, but transmitter idle. ドライバの論理的な問題を示しています。これはまず起こらないでしょう。

ed%d: device timeout 予期された転送割り込みが生じなかったことを示しています。通常、ISA バスの 他のカードとの割り込みの衝突によって起こります。

ed%d: NIC memory corrupt - invalid packet length %d. IEEE 802.3 規格で許されている最大長より大きなサイズ または最小長より短いサイズのパケットが受信されたことを示しています。 通常、ISA バスの他のカードとの衝突により起こりますが、場合によっては 間違ったケーブルの引き回しを示していることもあります。

ed%d: remote transmit DMA failed to complete. これは、NE1000 や NE2000 の型のカードへのプログラム I/O 転送を正しく完了 できなかったことを示しています。 通常、ISA バス速度の設定が速過ぎた場合に起こります。

警告
DS8390 チップの初期リビジョンには問題があります。 受信リングバッファが溢れると固まってしまうのです。 ときにはパケットリングヘッダ内の長さフィールドのバイト順を切り替えてしまい (この原因として off-by-one アラインメントに関連したものが いくつかあります)、"NIC memory corrupt - invalid packet length" というメッセージを出力します。 このような問題が起こるとカードはリセットされますが、 この状態からの回復に関するその他の問題はありません。

NIC メモリのアクセスは、 3Com や Novell のカードでは WD/SMC のカードより非常に遅いです。 8 ビットボードでは 1MB/秒以下、16 ビットカードでは 2MB/秒以下となります。 著しいネットワークトラフィックがある場合に、リングバッファがあふれて パケットを落すことになるかもしれません。

16 ビット Compex カードは自分が 8 ビットであると認識します。 このカードは 8 ビットモードでも動作しますが、カーネル設定ファイルに flags 0x04 (16 ビットモードを強制する) を指定すると、より高い性能が得られます。 さらに 16 ビットモードが提供する追加の 8k の共有メモリを利用するために、 iosize 16384 も指定した方が良いでしょう。

バグ
ed ドライバは、不正なパケットを受信したときには、少々積極的にカードを リセットし過ぎるきらいがあります。 結果として、受信した正当なパケットで、 カードから主メモリに転送していないものを、捨ててしまうかもしれません。

関連項目
arp(4), netintro(4), ifconfig(8)

歴史
ed デバイスドライバは、 FreeBSD 1.0 で最初に登場しました。

作者
ed デバイスドライバと本マニュアルは David Greenman が書きました。