Kenichi Maehashi's Blog
脳内コアダンプ

network interface の名称を一意に決定する
Sunday | June 29, 2008
ということで、普通は Linux がモジュールを読み込む順番(= PCI の順番?)になっていると思われる NIC の名称(eth0, eth1, ...)ですが、たとえばカードを差し替えたりして順番が変わったりすると色々と嫌ですね(デーモンの config で特定のインターフェースのみにバインドするように設定しているケースとか)。自分の場合、オンボードの NIC と PCI バスにある NIC、FireWire の 3 つを利用しているのですが、オンボードの Marvell Yukon のドライバは CentOS の標準ドライバとして入っていないので、カーネルをアップデートすると認識されなくなります(つまり、番号が一つずれてしまう)。

で、これを解決するべく ifrename を使うことに。
ifrename は予め /etc/iftab に書いておいたルールに従って network interface をリネームしてくれる賢いソフトウェアです。

ルールは、こんな感じ。

/etc/iftab
# eth0 - PCI NIC (r8169)
eth0 mac 00:00:00:ほげほげ
# eth1 - On-board NIC (sk98lin)
eth1 mac 00:00:00:ほげほげ
# eth2 - FireWire (eth1394)
eth2 driver eth1394

FireWire については MAC アドレスを利用できないので、ドライバによる指定を使いました。これは簡単。

あと、ifrename を起動時に自動実行するべく、起動スクリプトをつらつらと書きます。
ポイントは network(起動プライオリティ 10)の前に(again, 前に!)実行すること。
終了時は何もしませんが、とりあえず network(終了プライオリティ 90)の後にしました。

/etc/init.d/ifrename
#! /bin/bash
#
# ifrename Rename network interfaces
#
# chkconfig: 2345 9 91
# description: Renames network interfaces by the rule specified in iftab(5)
#

# Source function library.
. /etc/init.d/functions

IFRENAME=/sbin/ifrename
OPTIONS=-t
RETVAL=0

# See how we were called.
case "$1" in
start)
echo -n $"Renaming Network Interfaces: "
$IFRENAME $OPTIONS && success || failure
RETVAL=$?
echo
;;
stop)
# do nothing
;;
*)
echo $"Usage: $0 {start|stop}"
RETVAL=1
esac

exit $RETVAL

最後に、
# chkconfig --add ifrename
とかやると、runlevel 2/3/4/5 で勝手に実行するようになります。めでたしめでたし。

追記
FireWire とか、普通じゃないデバイスを使っていない場合(普通の Ethernet NIC のみで構成している場合)は、ifcfg-ethX に HWADDR を書いたほうが圧倒的に楽です。(コメントを参照)
コメント (4)
コメント
by 寿
2008/06/29
ifcfg-ethXにHWADDRでMACアドレス書いとくのは上手くいかないのかな?
by Kenichi Maehashi
2008/06/29
最初そのようにしてみたのですが、dev12345 というような乱数付きのインターフェース名になってしまいました(CentOS 5.1)。
が、今 CentOS 5.2 で試してみたところ、HWADDR の指定で問題なく指定できているようです...

原因は良く分からないのですが、新環境には FireWire のドライバをまだ入れていないので、それが怪しいのかも知れません。

by 寿
2008/06/30
なるほど、FireWireがあるとHWADDRがないからそっちが先にeth0で認識されちゃうってことね。
てなわけで、偽装HWADDRを振れば良いかもね。
(試したことないので動くかは知らない。)

insmod eth1394 hwaddr=0x12345678
http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Ether-1394-34556.shtml

by Kenichi Maehashi
2008/06/30
# insmod /lib/modules/2.6.18-92.1.6.el5/kernel/drivers/ieee1394/eth1394.ko hwaddr=0x12345678
# dmesg | tail
...
eth1394: Unknown parameter `hwaddr'

残念ながらエラーでした...
でも偽装 MAC アドレスが振れればブリッジも組めるかもしれませんね。

後日ここらへんを漁ってみたいと思います。
http://news.gmane.org/gmane.linux.kernel.firewire.user



<< 前ページ[1]

トップページに戻る
Copyright © 2006-2021 Kenichi Maehashi, All Rights Reserved.