El Protocolo Zebra

Zebra (https://www.quagga.net/) es uno de los módulos de distintos Routers que andan por ahí en Internet, es el componente que hace de interfaz con el Kernel y su sistema de ruteo, las placas de red del sistema y provee decisiones de ruteo en base a los eventos que le presentan los módulos que se comunican con él.

Como parte de mi investigación para construir un router BGPSec, decidí incorporar Zebra como módulo, solo para encontrarme que el protocolo para comunicarse con el Zebra está muy pobremente documentado, y prácticamente podría afirmarse que “el código es la documentación”. Así que hice exactamente eso, fui al código del Zebra y me puse a deducir el protocolo.

Estructura básica del protocolo Zebra

La estructura básica del Zebra está documentada y se puede obtener de una manera relativamente simple (para lo que es encontrar documentación sobre Zebra, claro). Hagamos una descripción breve.

El Zebra se comunica usando un Socket, configurable, normalmente /var/run/zserv.api. Cuando uno abre este socket, está listo para enviar y recibir mensajes hacia o desde el demonio Zebra.

El protocolo se consume como un Stream de datos binarios. A continuación se lista la estructura básica.

Protocolo Zebra versión 0

Campo Longitud (octetos) Valor
Longitud 2 Longitud del mensaje
Comando 1 Comando a enviar/recibir
Parámetros Variable Parámetros requeridos

Protocolo Zebra versión 1 o superior

Campo Tipo Longitud (octetos) Valor
Longitud unsigned integer 2 Longitud del mensaje
Marker unsigned byte 1 255 para GNU Zebra, 254 para el Zebra de FRR
Version unsigned byte 1 Versión del protocolo
Comando unsigned short 2 Comando a enviar/recibir
Parámetros Variable Parámetros para el comando

Lista de comandos de Zebra

Hasta aquí, es lo que está documentado en todos lados. A continuación, hablo de lo que no está documentado en ningún lado. A medida que vaya deduciendo los comandos, los voy a ir listando.

Comandos y sus parámetros

ZEBRA_INTERFACE_UP (4)
ZEBRA_INTERFACE_DOWN (5)

Be the first to comment

Leave a Reply

Your email address will not be published.


*