  Mini-HowTo on using multiple Ethercards with Linux
  Don Becker, becker@cesdis.gsfc.nasa.gov
  v2.00
  中野武雄, nakano@apm.seikei.ac.jp
  v2.00j3 22 May 1999

  これは Linux に 2 枚以上のイーサネットアダプタを認識させる方法を解説し
  た文書です。【訳注: 本文書は <http://ces-
  dis.gsfc.nasa.gov/linux/misc/multicard.html> の翻訳です】

  1.  クイックスタート: ドライバモジュールの場合

  1.1.  PCI ドライバ

  PCI デバイスでは安全に自動検知 (probe) が行えるので、以下のような行を
  /etc/modules.conf に追加するだけで OK です。【訳注: 原文では
  /etc/conf.modules でしたが、現在は /etc/modules.conf の方が推奨されて
  いるので、訳文では全て書き換えました。】

       alias eth1 tulip

  `tulip' は使っているイーサーカードドライバの名前に変えてください。

  1.2.  ISA ドライバ

  ISA デバイスの自動検知は危ないことが多いので、カードの I/O アドレスを
  指定しなければなりません。複数のカードを一つのドライバで利用する場合
  は、すべての I/O アドレスを指定する必要があります。以下の行を
  /etc/modules.conf に追加してください。

        alias eth0 ne
        alias eth1 ne
        alias eth2 ne
        options ne io=0x280,0x300,0x220

  `ne' は使っているイーサーカードドライバの名前に変えてください。

  2.  クイックスタート: カーネル組み込みのドライバ

  標準的な Linux ディストリビューションが動いているシステムで、デバイス
  ドライバがカーネルに組み込まれている場合には、 /etc/lilo.conf に以下の
  行を加えて lilo コマンドを実行すれば OK です。

       append = "ether=0,0,eth1 ether=0,0,eth2 ether=0,0,eth3"

  以上、これだけです。次にブートしたときから Linux は 2 枚目のイーサカー
  ドを認識してくれるはずです。

  3.  ドライバモジュール

  RedHat のようなディストリビューションでは、ロード可能なデバイスドライ
  バモジュールを排他的に利用しています。このような場合は少々やっかいで、
  解はディストリビューションによって異なります。お使いのディストリビュー
  ションがネットワークドライバをモジュールで利用しているかどうかを調べる
  には、 /proc/modules を見てください。ロードされているモジュールが全て
  レポートされるので、ネットワークモジュールがあるか探してみてください。

  デバイスドライバモジュールは、次の 2つのいずれかによってロードされま
  す。ひとつは kerneld というプロセスです。これはカーネルからのネットワ
  ークデバイスに対する要求を扱います。もう一つは modprobe です。こちら
  は、要求されたデバイス全てをロードしようとするものです (もちろん正しい
  デバイスがあれば、ですが)。

  kerneld プロセスは設定ファイル /etc/modules.conf を参照します。ここに
  は特定の機能に対する要求があったときにロードすべきデバイスドライバが記
  述してあります。イーサーネットドライバの場合は、機能の名前はインター
  フェースの名前です。つまり "eth0" とか "eth1" とかです。正しいドライバ
  をロードするためには、これらの "eth*" をドライバの名前にマップする (エ
  イリアスする) 必要があります。 (3c509 以外の) ISA デバイスでは、 I/O
  アドレスも必ず与えてください。

  /etc/modules.conf の例を示します。プライマリのインターフェースとして
  WD8013 を I/O 0x300 に持ち、 2 枚の NE2000 アダプタ (I/O はそれぞれ
  0x280 と 0x240) を追加したシステムに対して、それぞれ `wd' と `ne' デバ
  イスドライバモジュールをロードするような設定です。

       alias eth0 wd
       options wd io=0x300
       alias eth1 ne
       alias eth2 ne
       options ne io=0x280,0x240

  4.  組み込みドライバ: やったこととその仕組み

  デフォルトでは、Linux のカーネルはイーサカードを 1 枚認識するとそれ以
  上の自動検知を行いません。複数のイーサカードを認識させるには 3 つの方
  法があります。以下、やさしい順に並べます。

  o  ブート時にカーネルにパラメータを渡す

  o  起動時に常にパラメータを渡すようにブートローダを設定する

  o  drivers/net/Space.c 内にある、カーネルのネットカード検索テーブルを
     変更する。

  普通は２番目の方法が良いでしょう。上で書いたのがこれです。

  5.  ブートローダを使ってパラメータを渡す

  この節では、あなたが Linux の標準ブートローダである LILO を使っている
  ものとみなして話を進めます。

  Linux のカーネルは、ブート時にパラメータを受け取ることができます。ブー
  ト時には決められない設定をカーネルに渡すためです。ネットワークアダプタ
  に関しては、以下のパラメータが認識されます。

       ether=<IRQ>,<IO-ADDR>,<PARAM1>,<PARAM2>,<NAME>

  数字の指定には、10 進数, 8 進数 ('0'で始まる数字), 16 進数 ('0x'で始ま
  る数字) を使うことができます。最初に現われた数字以外の引数は、<NAME>
  (デバイス名) とみなされます。空白の引数は 0 とされます。省略された引数
  は、デフォルトの設定のままになります。

     IRQ
        ここには IRQ を書きます。ソフト的に IRQ 指定が可能なカードの場合
        は、書いた値に設定されます。ジャンパスイッチなどを使って指定する
        カードの場合には、指定した値を書いてください。 '0' を書くとカー
        ドへIRQ を読みに行きますが、それが不可能な場合は autoIRQ を使い
        ます。

     IO-ADDR
        このエントリには、検知させたい I/O アドレスを書きます。ここに
        '0' を書くと、イーサカードで通常使われるアドレスを全て探索しま
        す。

        通常は I/O アドレス領域の予約マップを使って探索するアドレスを決
        めます。 I/O アドレスを指定した場合にはこのマップは無視されま
        す。他のデバイスからこの IO 領域を探索されないようにするには、
        "reserve=<IO-ADDR>,<EXTENT>" パラメタを使用します。

     PARAM1,PARAM2
        もともとこれらのパラメタは、共有メモリ型のアダプタ (WD8013など)
        で、メモリアドレスを指定するために使われていました。今では、ドラ
        イバ固有のパラメタを指定することができるように拡張されています。

     NAME
        定義されているデバイス名を入れてください。標準的な kernel では、
        eth0, eth1, eth2, eth3 が定義されています。ほかのデバイス名 (PPP
        とか SLIP など) も定義されているかもしれませんが、それらは他の用
        途で用います。

  LILO でこれらのブートパラメータをカーネルに渡すには、2 つの方法があり
  ます。ひとつはブートイメージの名前に続けて書く方法です。次の例では 4
  つのカードを一気に指定しています。

       linux ether=0,0,eth1 ether=0,0,eth2 ether=0,0,eth3

  これらをブートの度に入力するのは面倒ですし、またこの方法では無人リブー
  トができなくなってしまいます。上記のパラメータを常に有効にすることもで
  きます。 LILO のコンフィギュレーションファイル /etc/lilo.conf 中で
  append 行によってこれらを指定し、 lilo を実行して変更を有効にします。

       append = "ether=0,0,eth1 ether=0,0,eth2 ether=0,0,eth3"

  6.  カーネルを変更する

  いままでの方法でシステムの設定ができるのでしたら、カーネルの変更はしな
  い方が良いでしょう。ソースを変えたことは他からわからないですし、カーネ
  ルをアップデートする時の混乱の元にもなりかねません。しかしそれでも、こ
  の方法をとるしかない場合もあります。

  o  ４つ以上のデバイスを有効にする必要がある (古いカーネルの
     drivers/net/Space.c には eth0...eth3 のエントリしかありません)

  o  自動検知の対象とするアダプタの種類を制限したい (そのままではカード
     を認識する時に別のカードと間違ってしまう場合など)

  o  ethN 以外のデバイス名 (N は数字) を使いたい場合

  カーネルを変更する場合は drivers/net/Space.c を編集して、必要な値を挿
  入します。新しいデバイスを加える場合には chain を切らないように注意し
  てください。ソース中に既にあるリストを参考にしてください。

  7.  特定のデバイスに対する注意

  7.1.  PCI カード

  PCI (および EISA) のカードでは、自動検知は安全かつ適切に行われます。し
  たがってほとんどの PCI デバイスドライバは、特にパラメータを追加指定し
  なくてもサポートされているカードを全て見つけてくれます。例外は ISA と
  PCI の両方のカードをサポートするデバイスドライバです。具体的には
  NE2000 と昔の LANCE/PCnet ドライバです。

  7.2.  LANCE/PCnet のカード

  v1.2.13 以前のカーネルでは、 LANCE ドライバはメモリの低位アドレスに特
  殊な DMA バッファを必要としていました。したがって LANCE の自動検知は他
  のネットワークデバイスに先立って行われました。このカードの利点は、複数
  枚の LANCE カードの検知が自動的に行われることです (つまり、この文書は
  もともと不要なわけです)。欠点は、LANCE のドライバは LILO から渡される
  パラメタ (IRQ など) を受け取れないことです。

  7.3.  ISA モードの 3c509

  3c509 は独特の仕様になっており、ISA バス上の探索を非常に安全に行なうこ
  とができます。 ISA Plug-and-Play に似た (そしてより進んだ)、
  activation メカニズムを用いています。これは素晴らしいものですが、しか
  し残念ながらこの探索手法は他のカードの手法とうまく共存させることができ
  ません。

  このカードでは以下のことに注意してください：どのカードが『一番目』に認
  識されるのかは、簡単にはわかりません。認識される順番はイーサネットの
  HW アドレスによります。つまり最も小さいイーサネットアドレスを持つカー
  ドが eth0 になり、次が eth1... というようになるわけです。 eth0 のカー
  ドが抜かれれば、それぞれの番号がひとつずつ減ることになります。

  関連しますが、先に探索されるカードを差したまま無効にすることはできませ
  ん。また EEPROM での設定と違う I/Oアドレス／IRQ でカードを有効にした
  り、特定のアドレスで有効にすることもできません。

  [翻訳者謝辞]

  本文書を 2.0 に更新するにあたって、早川さんをはじめ JF-ML の皆さまに有
  益なコメントをいただきました。ありがとうございました。

