ユーザログイン

XENでethのMAC address FE:FF:FF:FF:FF:FF 問題の解決

夫です。
D945GCLFのNICにはRealtek RTL8101E/RTL8102E が使用されています。
Kernelを2.6.18-128.1.14.el5xenにあげることで、カーネル付属ドライバである、r8169で認識されました。
しかし、xenカーネルで立ち上げ、xendサービスが開始されると、通信できなくなる事象が発生。
よくよくチェックすると、なぜかeth0のMAC addressがFE:FF:FF:FF:FF:FFになり、xend開始のタイミングで、xenbr, virbrのMACアドレスと重複して通信NGとなっていました。

$ /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet addr:XX.XX.XX.XX  Bcast:XX.XX.XX.XX  Mask:XX.XX.XX.XX
          inet6 addr: XXXX:XXX:XXX:XXX:fcff:ffff:feff:ffff/64 Scope:Global
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:592188 errors:0 dropped:85279190990616 overruns:0 frame:0
          TX packets:715234 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:64758444 (61.7 MiB)  TX bytes:546716986 (521.3 MiB)
          Interrupt:20

本来のMACアドレスをeth0に設定してあげることで、この問題が解決できました。自動的にやるには以下のような形も1つかと思います。

/etc/init.d/network
start処理の最終箇所に ip link setで、HW本来のMACアドレスを設定します。
--- /etc/init.d/network.org     2009-07-01 23:03:20.000000000 +0900
+++ /etc/init.d/network 2009-07-01 23:07:10.000000000 +0900
@@ -167,6 +167,8 @@
         touch /var/lock/subsys/network

        [ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY}
+
+       /sbin/ip link set eth0 addr 本来のMACアドレス
         ;;
   stop)
        # Don't shut the network down if root is on NFS or a network

 

いろいろと調べているいると、この問題はRealtekのEtherコントローラが、再起動時にMACアドレスをリセットしないのが原因のようです。(ハードの仕様)
元のMACアドレスがわからない場合には、いったん電源を落とし、電源ケーブルも抜き、マザーボード上の電流か完全に消えるまで、10秒程度待って再度電源を入れなおすと、Etherコントローラがリセットされるとのこと。