Next: Packet Binary Dump Format, Previous: SNMP Support, Up: Top [Contents][Index]
Zebra Protocol is used by protocol daemons to communicate with the zebra daemon.
Each protocol daemon may request and send information to and from the zebra daemon such as interface states, routing state, nexthop-validation, and so on. Protocol daemons may also install routes with zebra. The zebra daemon manages which route is installed into the forwarding table with the kernel.
Zebra Protocol is a streaming protocol, with a common header. The protocol is versioned to allow for incompatible changes. Version 0 is implicitely versioned. Version 1 onwards has an explicit version field. Version 0 can be distinguished from all other versions by examining the 3rd byte of the header, which contains a marker value of 255 for all versions bar version 0. The marker byte corresponds to the command field in version 0, and the marker value is a reserved command in version 0.
Version 0 is used by all versions of GNU Zebra as of this writing, and versions of Quagga up to and including Quagga 0.98. The version 1 header was introduced with Quagga 0.99.3. The version 3 header was introduced with Quagga 1.0.20160309.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-------------------------------+---------------+ | Length (2) | Command (1) | +-------------------------------+---------------+
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-------------------------------+---------------+-------------+ | Length (2) | Marker (1) | Version (1) | +-------------------------------+---------------+-------------+ | Command (2) | +-------------------------------+
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-------------------------------+---------------+-------------+ | Length (2) | Marker (1) | Version (1) | +-------------------------------+---------------+-------------+ | VRF ID (2) | Command (2) | +-------------------------------+-----------------------------+
Total packet length including this header. The minimum length is 3 bytes for version 0 messages, 6 bytes for version 1 and 2 messages, and 8 bytes for version 3.
Static marker with a value of 255 always. This is to allow version 0 Zserv headers (which do not include version explicitely) to be distinguished from versioned headers. Not present in version 0 messages.
Version number of the Zserv message. Clients should not continue processing messages past the version field for versions they do not recognise. Not present in version 0 messages.
Virtual Routing/Forwarding context ID, to which the message applies. Only present from version 3 onwards.
The Zebra Protocol command.
Command | Value |
---|---|
ZEBRA_INTERFACE_ADD | 1 |
ZEBRA_INTERFACE_DELETE | 2 |
ZEBRA_INTERFACE_ADDRESS_ADD | 3 |
ZEBRA_INTERFACE_ADDRESS_DELETE | 4 |
ZEBRA_INTERFACE_UP | 5 |
ZEBRA_INTERFACE_DOWN | 6 |
ZEBRA_IPV4_ROUTE_ADD | 7 |
ZEBRA_IPV4_ROUTE_DELETE | 8 |
ZEBRA_IPV6_ROUTE_ADD | 9 |
ZEBRA_IPV6_ROUTE_DELETE | 10 |
ZEBRA_REDISTRIBUTE_ADD | 11 |
ZEBRA_REDISTRIBUTE_DELETE | 12 |
ZEBRA_REDISTRIBUTE_DEFAULT_ADD | 13 |
ZEBRA_REDISTRIBUTE_DEFAULT_DELETE | 14 |
ZEBRA_IPV4_NEXTHOP_LOOKUP | 15 |
ZEBRA_IPV6_NEXTHOP_LOOKUP | 16 |
Next: Packet Binary Dump Format, Previous: SNMP Support, Up: Top [Contents][Index]