2 @appendix Zebra Protocol
3 @appendixsection Overview of the Zebra Protocol
5 Zebra Protocol is used by protocol daemons to communicate with the
8 Each protocol daemon may request and send information to and from the
9 zebra daemon such as interface states, routing state,
10 nexthop-validation, and so on. Protocol daemons may also install routes
11 with zebra. The zebra daemon manages which route is installed into the
12 forwarding table with the kernel.
14 Zebra Protocol is a streaming protocol, with a common header. Two
15 versions of the header are in use. Version 0 is implicitely versioned.
16 Version 1 has an explicit version field. Version 0 can be distinguished
17 from all other versions by examining the 3rd byte of the header, which
18 contains a marker value for all versions bar version 0. The marker byte
19 corresponds to the command field in version 0, and the marker value is
20 a reserved command in version 0.
22 We do not anticipate there will be further versions of the header for
23 the foreseeable future, as the command field in version 1 is wide
24 enough to allow for future extensions to done compatibly through
27 Version 0 is used by all versions of GNU Zebra as of this writing, and
28 versions of Quagga up to and including Quagga 0.98. Version 2 was created
29 for 0.99.21 of Quagga. Version 3 designates VRF compatibility and was
30 released in 1.0. Version 4 will be used as of Frr 2.0 to indicate that
31 we are a different Routing Suite now and to hopefully prevent accidental
32 Quagga <-> FRR issues.
34 @appendixsection Zebra Protocol Definition
35 @appendixsubsec Zebra Protocol Header (version 0)
39 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
40 +-------------------------------+---------------+
41 | Length (2) | Command (1) |
42 +-------------------------------+---------------+
46 @appendixsubsec Zebra Protocol Common Header (version 1)
50 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
51 +-------------------------------+---------------+-------------+
52 | Length (2) | Marker (1) | Version (1) |
53 +-------------------------------+---------------+-------------+
55 +-------------------------------+
59 @appendixsubsec Zebra Protocol Header Field Definitions
62 Total packet length including this header. The minimum length is 3
63 bytes for version 0 messages and 6 bytes for version 1 messages.
66 Static marker with a value of 255 always. This is to allow version 0
67 Zserv headers (which do not include version explicitely) to be
68 distinguished from versioned headers. Not present in version 0
72 Version number of the Zserv message. Clients should not continue
73 processing messages past the version field for versions they do not
74 recognise. Not present in version 0 messages.
77 The Zebra Protocol command.
80 @appendixsubsec Zebra Protocol Commands
81 @multitable {ZEBRA_REDISTRIBUTE_DEFAULT_DELETE_WHATEVER} {99999}
82 @headitem Command @tab Value
83 @item ZEBRA_INTERFACE_ADD
85 @item ZEBRA_INTERFACE_DELETE
87 @item ZEBRA_INTERFACE_ADDRESS_ADD
89 @item ZEBRA_INTERFACE_ADDRESS_DELETE
91 @item ZEBRA_INTERFACE_UP
93 @item ZEBRA_INTERFACE_DOWN
95 @item ZEBRA_IPV4_ROUTE_ADD
97 @item ZEBRA_IPV4_ROUTE_DELETE
99 @item ZEBRA_IPV6_ROUTE_ADD
101 @item ZEBRA_IPV6_ROUTE_DELETE
103 @item ZEBRA_REDISTRIBUTE_ADD
105 @item ZEBRA_REDISTRIBUTE_DELETE
107 @item ZEBRA_REDISTRIBUTE_DEFAULT_ADD
109 @item ZEBRA_REDISTRIBUTE_DEFAULT_DELETE
111 @item ZEBRA_IPV4_NEXTHOP_LOOKUP
113 @item ZEBRA_IPV6_NEXTHOP_LOOKUP