Next: , Previous: , Up: Top   [Contents][Index]


Appendix A Zebra Protocol

A.1 Overview of the Zebra Protocol

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.

A.2 Zebra Protocol Definition

A.2.1 Zebra Protocol Header (version 0)

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) |
+-------------------------------+---------------+

A.2.2 Zebra Protocol Common Header (version 1 and 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) |
+-------------------------------+---------------+-------------+
|          Command (2)          |
+-------------------------------+

A.2.3 Zebra Protocol Common Header (version 3)

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)          |
+-------------------------------+-----------------------------+

A.2.4 Zebra Protocol Header Field Definitions

Length

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.

Marker

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

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.

VRF ID

Virtual Routing/Forwarding context ID, to which the message applies. Only present from version 3 onwards.

Command

The Zebra Protocol command.

A.2.5 Zebra Protocol Commands

CommandValue
ZEBRA_INTERFACE_ADD1
ZEBRA_INTERFACE_DELETE2
ZEBRA_INTERFACE_ADDRESS_ADD3
ZEBRA_INTERFACE_ADDRESS_DELETE4
ZEBRA_INTERFACE_UP5
ZEBRA_INTERFACE_DOWN6
ZEBRA_IPV4_ROUTE_ADD7
ZEBRA_IPV4_ROUTE_DELETE8
ZEBRA_IPV6_ROUTE_ADD9
ZEBRA_IPV6_ROUTE_DELETE10
ZEBRA_REDISTRIBUTE_ADD11
ZEBRA_REDISTRIBUTE_DELETE12
ZEBRA_REDISTRIBUTE_DEFAULT_ADD13
ZEBRA_REDISTRIBUTE_DEFAULT_DELETE14
ZEBRA_IPV4_NEXTHOP_LOOKUP15
ZEBRA_IPV6_NEXTHOP_LOOKUP16

Next: , Previous: , Up: Top   [Contents][Index]