PC カード NIC を追加する


インストール時に PC カードを利用しない設定でセットアップすると、PC カードを使うための各種呪文が入っていないままの状態でインストールが完了します。具体的に変更しないと使えない点について触れていきます。

とりあえず使えるようにするには(正統派)

まず、pccard を有効にする設定がそもそも入っていませんので、/stand/sysinstall の [C] 設定 で、[S] スタートアップ を開きます。ここにある [p] PC カード にチェックを入れます。

たとえば、MELCO LPC2-T を利用したいという場合、/etc/defaults/pccard.conf を見ると
                                                                                
# MELCO LPC2-T
card "MELCO" "LPC2-T"
	config	auto "ed" ?
	insert	/etc/pccard_ether $device start
	remove	/etc/pccard_ether $device stop
と書かれています。このカードは ed を利用しますので、お使いのカーネルに ed ドライバが含まれているか確認します。またここから、カード挿入時に /etc/pccard_ether ed が実行されることも分かります。(4.x-RELEASE からはかなりのドライバが動的にロードされるようになりました。無線LAN の wi ドライバなどもそうです。この場合にはカーネルの再構築は必要ありません。)

そこで、/etc/rc.conf に
                                                                                
……………………
pccard_ifconfig="inet 192.168.22.202  netmask 255.255.255.0"
……………………

という行を追加しておきます。必要なら、defaultroute なども設定します。これでカードが入ればインターフェースを有効にするための処理が実行されます。

とりあえず使えるようにするには(手抜き編)

まず pccardd が動いてくれないことにはどうしようもないので、/stand/sysinstall で pccard を有効にし、一旦電源を切ります。そして、使いたい NIC をスロットに挿入して電源を入れます。起動したら /stand/sysinstall で、「N ネットワーク」から「I インターフェース」でデバイスを選択して設定ができます。ここで、使いたいデバイスが選択できないのであれば、
  1. 使いたいカードのドライバがカーネル・モジュールに含まれていない
  2. カードがちゃんと刺さっていない
  3. そもそも pccardd が動いていない
  4. 実は勘違いをしているだけ
というあたりを疑ってみましょう。

なお。このままだと再起動した時にはうまくないのと、default route や static route が設定されないので、それではヤダって方は、手で /etc/rc.conf の中にある
ifconifig_ed0="なんとか"
という部分を
pccard_ifconfig="なんとか"

と書き換えて、ついでに必要なら
defaultrouter="かんとか"
を追加しておくと次回からは幸せになれます。

実行のしくみ

カードを抜き挿ししたときに実行される /etc/pccard_ether とやらを覗くと、インターフェース名が $interface、start または stop というフラグが $startstop にセットされています。そして、rc.conf で定義された $pccard_ifconfig が NO や 空白であった場合には処理をスキップし、そうでなければ $ifconfig_${interface} に $pccard_ifconfig の内容を代入します。

ネットワークカードを start する場合には、まず /etc/start_if.${interface} があればその内容を実行します。次に $ifconfig_${interface} の内容を $ifconfig_args という変数にセットして、DHCP を使用するよう指定されていれば start_dhcp を実行します。固定で割り当てる場合には ifconfig ${interface} ${ifconfig_args} $* を実行します。このあと、インターフェースの alias が定義されていればそれをループで実行します。

つまり、ifconfig コマンドに与える具体的なパラメータは $pccard_ifconfig に渡すということになります。

最後にデフォルトルートを設定します。rc.conf で定義された $defaultdouter の値を参照し、その他の static route とまとめて route add します。

さて、実際にどうなっているか見てみましょう。デスクトップパソコンなどで、最初から ifconfig することが分かっているインターフェースの場合には例えば以下のようになっているはずです。
                                                                                
……………………
network_interfaces="ed3 lo0"
ifconfig_ed3="inet 192.168.22.201  netmask 255.255.255.0"
defaultrouter="192.168.22.1"
hostname="mypc.mydomain.jp"
……………………
ここでの、${network_interfaces} でセットした値で ifconfig を繰り返し実行させているのは /etc/rc.network なのですが、これは起動時にしか動きませんから、PC カードとは無関係です。よって例えば、
                                                                                
……………………
pccard_ifconfig="inet 192.168.22.202  netmask 255.255.255.0"
……………………

という行を追加してあげればよいことが分かります。


複数のネットワークカードを使い分けたい場合

ところが、現在のリリースでは2つ問題があって複数の NIC に別々の IP を与えたい場合や、複数の NIC を持っていて使い分けたい場合には非常に不便です。

実は 4.2R までは直接 rc.conf や pccard_ether を触らなければ解決できなかったのですが、4.3R では PAO3 の pccard_ether がマージされて若干状況がマシになりました。

たとえば、ed ドライバを使うカードと ep なカードと wi なカードを持っていて、ed と ep は同時に使わない(同じアドレスにしたい)けれども wi は別のネットワークとしてルーティングしたいとしましょう。

まず、ed なカードは insert 時に /etc/pccard_ether ed0 start という形で起動されます。このとき、$pccard_ifconfig という変数に値がセットされていれば、どのカードが来ても同じパラメータで処理されてしまうのでうまくありません。回避するには2つ方法があって、
  1. start_if.$ifconfig で $pccard_ifconfig に値をセットする
  2. ifconfig_ed0 に直接 inet 192.168.22.202 などと定義する
という方法があります。まあ、前者の方がきれいな対応方法でしょうか。

1の方法だと、start_if.ed0, start_if.ep0(どちらかが実体で、もう一方はシンボリックリンクでもよい), start_if.wi0 を用意すればよいことになり、そこでは単純に変数をセットするだけです。

2の方法であれば、/etc/rc.conf に
                                                                                
……………………
ifconfig_ed0="inet 192.168.22.202  netmask 255.255.255.0"
ifconfig_ep0="inet 192.168.22.202  netmask 255.255.255.0"
ifconfig_wi0="inet 192.168.25.201  netmask 255.255.255.0"
……………………
とすればよさそうです。もちろん、ルーティングしたいのであればそれに応じた設定を追加しなければなりません。

残された問題

いまの仕組みではできないことがいくつかあります。

・同じドライバを利用するカードを複数同時に使えない。

認識される順番によって ed0 か ed1 かが決まるので難しい。

・/stand/sysinstall から複数のカードの設定ができない

/stand/sysinstall にはメッセージと設定する内容がくいちがっている部分もあるので、根本的な修正が必要です。スタートアップサービスの「pccard ifconfig」には、その名の通り $pccard_ifconfig (PC カード NIC 共通のパラメータ)に設定する値を入力するのですが、ガイドでは「設定する PC カードイーサネットデバイスのリスト」という、PAO 時代のガイドのままになっています。



前のページに戻る