1

Тема: фиксированные имена сетевых интерфейсов

Когда-то давно имена сетевым интерфейсам выдавались в порядке их появления в системе.  То есть в порядке загрузки ядерных модулей с драйверами сетевых карт.  Если они были в ядре, а не модулями, то порядок их инициализации было трудно угадать.  Также, если в компе стояли несколько (больше одной) сетевых карт одного типа (например, две 3Com), то трудно угадать кто из них будет под каким номером.  Вообщем, были трудности.

В Дебиане сейчас, если есть udev, имена сетевых карт привязываются к их MAC адресам.  Это гораздо лучше, но всё же далеко от идеала.  Например, была сетевая карта, и звали её eth0.  Потом она поломалась, её заменили.  Но в системе осталась запись о ней.  Новая сетевая карта получит имя eth1.

IMHO лучшее решение -- это привязать имя сетевого интерфейса к номеру PCI слота.  Средствами udev это возможно.

В Дебиане это пишется в файле /etc/udev/rules.d/z25_persistent-net.rules.
Вместо такого:

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:13:d4:26:94:e3", NAME="eth0"

Пишем так:

SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:05:01.0", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:05:02.0", NAME="eth1"
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:02:00.0", NAME="eth2"

В параметре KERNELS ставятся номера PCI устройств, как их показывает команда lspci.

Теперь имя сетевого интерфейса зависит только от того, куда воткнута сетевая карта.  И не зависит от её типа, от порядка загрузки и инициализации драйверов и прочих посторонних вещей.  Если карточку заменить, то все имена останутся на своих местах.


PS. А ещё есть http://etcnet.org/ smile  Его родной дом -- Alt Linux.

2

Re: фиксированные имена сетевых интерфейсов

подскажите как мне сделать правильно. дано. дебиан 5.0 ленни
вот мои lspci

01:08.0 Ethernet controller: D-Link System Inc DGE-528T Gigabit Ethernet Adapter (rev 10)
01:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

у меня 5 пси слотов. первая Длинк стоит в 3 слоте. планируется еще такая же в 4.
Реалтек это встроенная в мамку сетевая.
далее. файл /etc/udev/rules.d/z80_persistent-net.rules  (25 нету тама)

# PCI device 0x1186:0x4300 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1e:58:26:d7:e2", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:61:22:0b:0f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

у вас адрес сетевой 0000:02:00.0 а у меня в lspci они как 01:0b.0 допустим.
пробовал так

SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="01:08.0", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="01:0b.0", NAME="eth1"

после ребута эти не завелись. а карты определились как eth2 и eth3.
потом удалил все. вернул как было.. стало как раньше (правильно как).
длинк eth0
реалтек eth1
так вот где копать подскажите?

Отредактировано arenkir (2010-03-23 13:43:42)

Debian 5.0

3

Re: фиксированные имена сетевых интерфейсов

Практика показала, что такая привязка к PCI слоту не всегда работает. sad  Мы вернулись к привязке по MAC-у (ATTR{address}==...).