Назад | Перейти на главную страницу

Linux bridge_slave автоматически переходит в состояние пересылки

Я пытаюсь изменить состояние подчиненных мостов в системе Linux brigde, и у него очень странное поведение, постоянно меняя состояние порта на пересылку.

I.E:

Создайте мост с фиктивным интерфейсом в качестве ведомого (это происходит с другим типом взаимодействия)

$ ip link add dev midummy type dummy
$ ip link add dev br type bridge
$ ip link set dev midummy master br
$ ip link set dev br up
$ ip link set dev midummy up

Проверьте состояние подчиненного моста:

$ brctl showstp br

...
midummy (1)
 port id        8001            state            forwarding
...

Попробуйте перейти в состояние блокировки

$ ip link set dev midummy type bridge_slave state 4
...
midummy (1)
 port id        8001            state            forwarding
...

$dmesg
[ 2414.108892] br: port 1(midummy) entered blocking state
[ 2414.108898] br: port 1(midummy) entered forwarding state

Почему ядро ​​меняет состояние ведомого моста на пересылку? Есть ли какой-либо флаг моста для настройки этого поведения?

заранее спасибо

Короче говоря, такое поведение происходит из-за stp и периодической проверки статуса порта моста по таймеру, даже если stp полностью отключен. Вы можете изучить исходный код, чтобы выяснить, почему это происходит. Я нашел обходной путь для выполнения вашего желания. Ядро Linux поддерживает демон stp в пользовательском пространстве, и вы можете написать его или просто связать его с / dev / true для управления состояниями stp вручную.

Краткая демонстрация:

# create the fake stp daemon and disable in-kernel stp handling.
# should return success exit code
ln -s /bin/true /sbin/bridge-stp

# start the fake stp daemon
brctl stp br on

# bring up the interface to the blocking state
ip link set dev midummy type bridge_slave state 4

# check the interface state again and again. state aren't changing
# except the transactions between disabled and blocking state, 
# that depends on bridge port status (UP or DOWN)
# use 'bridge monitor' to realtime monitoring of state changes

# !!! stop the fake stp before removing the symlink /bin/bridge-stp !!!
brctl stp br off

# and then remove the symbolic link to prevent future effects
rm /sbin/bridge-stp