понедельник, 10 сентября 2007 г.

nVidia nForce2 Ethernet Controller MAC 00:00:00:00:00:00, Linux и Udev

Обнаружилась проблема с MAC адресом встроенной сетевухи материнки Abit NF7 - он состоит их одних нулей что, понятное дело, недопустимо.

Проявилось под Linux'ом это так: после очередной перезагрузки номер сетевого интерфейса соответствующего карте увеличивался на единицу - т.е. особо при загрузке интерфейсы не поподнимаешь.

Дело оказалось в том, что ядро, обнаруживая при загрузке недопустимый MAC присваивала сетевухе случайный адрес, а udev идентифицируя карточку как раз по мак-адресу, думала, что это новая сетевуха и создавала для нее новый интерфейс.
Вылечилось методом добавления udev правила, которое привязывало бы интерфейс не к мак, а к модели сетевухи (учитывая, что она встроенная, второй такой в системе быть не может):

В /etc/udev/rules.d/ я создал новый файл, который назвал 71-persistent-net.rules (В каталоге уже был файл 70-persistent-net.rules, в котором и содержалась немеряная куча правил о присвоении больной сетевухе новых интерфейсов, а также запись о моей второй карточке. Инфу о второй карточке оставил - остальное удалил.) и добавил в него строку:
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{device}=="0x0066", NAME="eth0"
Это означает, что если есть сетевое устройство, под него есть драйвера и оно имеет ID 0x0066, то нужно привязать его к eth0.

Узнать ID можно так:
> cat /sys/class/net/eth{Номер интерфейса в данный момент}/device/device

например:
> cat /sys/class/net/eth12/device/device

По поводу правил udev - читаем man udev