Tengo una tabla. Esta placa tiene dos interfaces una eth0
y otra usb0
. eth0
El puerto está conectado a la red. y usb0
el puerto está conectado a otro dispositivo
Con la ayuda de bridge-utils, puedo configurar un software bridge(br0)
sobre el tablero con eth0
y usb0
como sus elementos.
Ahora mi problema es si usb0
el lado está abajo o no está funcionando, entonces ¿hay alguna forma de saber que usb0 está inactivo o no está funcionando o no está funcionando?
Traté de usar SIOCGIFCONF
comando ioctl y SIOCGIFFLAGS(IFF_UP and IFF_RUNNING)
para saber si alguna interfaz está inactiva o no se está ejecutando. Pero con SIOCGIFCONF
Recibo información sobre una sola interfaz br0 y no sobre usb0
o eth0
y br0
está arriba y funcionando y funcionando.
Cualquier sugerencia sera apreciada.
ip link show eth0
(igual para usb0)?brctl show
y luego consulta cada interfaz.Respuestas:
Creo que el estado del sistema de archivos sysfs de usb0 podría ser detectado.
Hoy vi el código fuente de bride-utilities, donde encontré eso. brctl show comando recopila información sobre sus interfaces usando el sistema de archivos sysfs (sys / class / net / br0 / brif /).
Entonces, atravesé ese sistema de archivos sysfs y verifiqué el valor en / sys / class / net / br0 / brif / usb0 / state expediente. Cuando la interfaz usb0 se está ejecutando, en ese caso la salida de
En caso de que la interfaz usb0 no se esté ejecutando, entonces:
Entonces, ahora puedo conocer el estado de la interfaz usb0 que forma parte del puente br0 analizando el valor de / sys / class / net / br0 / brif / usb0 / state expediente.
Ahora tengo las siguientes formas de conocer el estado de la interfaz usb0:
1.Cuestione continuamente este ... / valor del archivo de estado y luego tome una decisión (no me gusta esta idea).
2. Abra un socket de enlace de red y escuche los grupos de multidifusión RTMGRP_LINK (interfaz de red crear / eliminar / subir / bajar) y luego, con la notificación del kernel, podría determinar el estado de usb0.
3.Utilizando udev: http://www.signal11.us/oss/udev/ (libudev - Interfaz de monitorización) podríamos monitorear la notificación del evento de cambio de estado y luego actuar.
Estoy tratando de usar udev. E intentaré publicar una solución completa después de que la implementé.
fuente