[bridge][bonding] Не создаются «вложенные» интерфейсы. [SOLVED]

Здравствуйте.

Вкратце опишу задачу: имеется несколько физических сетевых, к примеру, две: eth1 и eth2. Их надо объединить средствами bonding и создать канал с протоколом 802.3ad (может и другим, не суть важно). Поверх этого канала нужны несколько VLANs, некоторые из них надо засунуть в bridge, чтобы можно было отдать виртуальной машине.

Файл /etc/conf.d/net :

config_eth1="null"
config_eth2="null"

rc_need_bond0="net.eth1 net.eth2"  
slaves_bond0="eth1 eth2"
config_bond0="null"

mode_bond0="802.3ad"
xmit_hash_policy_bond0="layer2"
lacp_rate_bond0="fast"
miimon_bond0="100"

mtu_bond0="2369"
mtu_eth1="2369"
mtu_eth2="2369"

txqueuelen_eth1="5000"
txqueuelen_eth2="5000"

vlans_bond0="2 20 21" 
vlan2_flags="reorder_hdr off gvrp on loose_binding on" 
vlan20_flags="reorder_hdr off gvrp on loose_binding on" 
vlan21_flags="reorder_hdr off gvrp on loose_binding on" 

config_bond0_2="172.16.0.1/29"
config_bond0_20="null"
config_bond0_21="null"

rc_need_br2="net.bond0"

bridge_br2="bond0.20"
brctl_br2="setfd 1
sethello 2
stp on"
config_br2="null"

Сетевые карты eth1 и eth2 одинаковые от Realtek, используют драйвер r8192.

Запуск интерфейсов разнесён по уровням:

Runlevel: boot
 net.bond0

Dynamic Runlevel: hotplugged
 net.eth0
 net.eth1
 net.eth2

Runlevel: default
 net.br2

При загрузке я получаю kernel panic с таким текстом:

BUG: unable to handle kernel NULL pointer dereference at           (null)
IP: [<          (null)>]           (null)
…

Если я пробую в конфиге добавить строку bridge_add_bond0_20="br2" вместо bridge_br2="bond0.20", то на этапе загрузки получаю

fs_1 kernel: [ 5109.712340] Call Trace:
<IRQ>  [<ffffffff8103cb8f>] warn_slowpath_common+0x80/0x98
…
---[ end trace 4afefdaed4665755 ]---
r8169 0000:03:00.0: eth2: link up
r8169 0000:02:00.0: eth1: link up

, видимо, из-за того, что bonding не успевает подняться.

Если убрать из моей конфигурации один из шагов, к примеру, создание VLANов, создавая бридж на bond0 или создавая VLANы без бриджа, то работает нормально.

Ядро 2.6.39-gentoo-r1.

Описанное — баг или я что-то неправильно делаю?

Похоже, что баг. Дома, на

Похоже, что баг.

Дома, на Marvell Technology Group Ltd. 88E8056 , указанная желаемая конфигурация на 39 ядре взлетела как положено. Даже после перезагрузки. Соответственно, жду, когда придут сервера с нормальными сетевухами. Надеюсь, Интел не подведёт.

Реалтек же реально бажные сетевухи делает или драйвера для него не ок. Как минимум, через раз сетевые при загрузке просто не запускаются. Вообще. Приходится перезагружаться. Ввиду этого, я не удивляюсь тому, что в каких-то режимах наблюдается вышеописанное.

реалтек конечно не самая

реалтек конечно не самая крутая сетевуха, но все таки не должно так быть. Чем вызвана необходимость запуска сети в boot ? почему eth* в хотплаге - их выдергивают при работе сершака ?
версия ядра ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

slepnoga написал(а): реалтек

slepnoga написал(а):
реалтек конечно не самая крутая сетевуха, но все таки не должно так быть.

Не должно, а есть. Вот не знаю, почему так. Затем и задал здесь вопрос.

slepnoga написал(а):
Чем вызвана необходимость запуска сети в boot ?

Потому что кое-какие службы, требующие сеть, запускаются ещё на этапе boot. Плюс, это исключает влияние всяких переходных режимов текущих интерфейсов на последующие интерфейсы. Например, при включении интерфейса bond0, должно пройти какое-то время, чтобы сетевые карты синхронизировались. Этот момент я отметил в самом первом сообщении. В логах ядра видно же.

slepnoga написал(а):
почему eth* в хотплаге - их выдергивают при работе сершака ?

Потому что в хотплаг их засовывает udev. А когда драйвер или железка глючит, то он их никуда не засовывает, потому что они не запускаются. К слову, на этих же компьютерах стоят старые 100Мбитные сетевые карты от 3com. Почему-то они себя так не ведут. Но я не расстраиваюсь, т.к. ковыряю тестовую конфигурацию. В работу эти риалтеки не пойдут.

slepnoga написал(а):
версия ядра ?

А внимательней пару постов посмотреть? Многие вопросы уйдут.

Потому что кое-какие службы,

Потому что кое-какие службы, требующие сеть, запускаются ещё на этапе boot. Плюс, это исключает влияние всяких переходных режимов текущих интерфейсов на последующие интерфейсы. Например, при включении интерфейса bond0, должно пройти какое-то время, чтобы .............

специально для таких любителей странного придуман файлик /etc/rc.conf

сорри за "сершак", но таки сетевые не хотплаг, и гадать потом за сотню километров, поднялась оно или нет весьма странно.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Ну вот, сегодня приехало

Ну вот, сегодня приехало железо. Сервера от supermicro и дискретные сетевые карты от интел. Сперва, попробовал поставить такую сетевую на вышеописанные проблемные хосты. Получил те же самые ошибки. Соответственно, претензии к Realtek снимаются.

На новый сервер поставил гентушечку с абсолютно тем же ядром и конфигом (разве что, сменил модели сетевых карт и дисковой подсистемы в драйверах). И всё… заработало.

Ещё, в интернетах наткнулся на такое: http://www.spinics.net/lists/linux-net/msg16854.html — как раз мой случай, те же сообщения выскакивали. Однако, за столько времени не поправили? Или, может быть, на конкретном железе такие проблемы? Странно, в общем.

Самое главное, что на железе в продакшн такое не вылезло, а то был бы эпик фейл.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".