1 votos

Linux bridge_slave cambia automáticamente al estado de reenvío

Estoy tratando de cambiar el estado del puente de los esclavos en Linux brigde sistema y tiene muy extraño comportamiento, cambiando todo el tiempo el estado de puerto de reenvío.

I. E:

Crear un puente con un maniquí de la interfaz como un esclavo (ocurre con otro tipo de interfase)

$ 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

Comprobar el estado de la puente esclavo:

$ brctl showstp br

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

Intentar cambiar a estado de bloqueo

$ 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

Por qué kernel es el cambio de puente esclavo estado de reenvío? ¿Hay algún puente de la flag para configurar este comportamiento?

Gracias de antemano

1voto

Anton Danilov Puntos 36

En resumen, este comportamiento se debe a la comprobación periódica del estado del puerto del puente y del stp por el temporizador, incluso si el stp está completamente deshabilitado. Puedes investigar el código fuente para descubrir por qué sucede esto. He encontrado la solución para ejecutar su deseo. El kernel de Linux es compatible con un demonio stp del espacio de usuario y puede escribirlo o simplemente vincularlo a / dev / true para administrar los estados de la STP de forma manual.

Demostración corta:

 # 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
 

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: