1@node Zebra Protocol 2@appendix Zebra Protocol 3@appendixsection Overview of the Zebra Protocol 4 5Zebra Protocol is used by protocol daemons to communicate with the 6zebra daemon. 7 8Each protocol daemon may request and send information to and from the 9zebra daemon such as interface states, routing state, 10nexthop-validation, and so on. Protocol daemons may also install routes 11with zebra. The zebra daemon manages which route is installed into the 12forwarding table with the kernel. 13 14Zebra Protocol is a streaming protocol, with a common header. Two 15versions of the header are in use. Version 0 is implicitely versioned. 16Version 1 has an explicit version field. Version 0 can be distinguished 17from all other versions by examining the 3rd byte of the header, which 18contains a marker value for all versions bar version 0. The marker byte 19corresponds to the command field in version 0, and the marker value is 20a reserved command in version 0. 21 22We do not anticipate there will be further versions of the header for 23the foreseeable future, as the command field in version 1 is wide 24enough to allow for future extensions to done compatibly through 25seperate commands. 26 27Version 0 is used by all versions of GNU Zebra as of this writing, and 28versions of Quagga up to and including Quagga 0.98. Version 1 will be 29used as of Quagga 1.0. 30 31@appendixsection Zebra Protocol Definition 32@appendixsubsec Zebra Protocol Header (version 0) 33@example 34@group 350 1 2 3 360 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 37+-------------------------------+---------------+ 38| Length (2) | Command (1) | 39+-------------------------------+---------------+ 40@end group 41@end example 42 43@appendixsubsec Zebra Protocol Common Header (version 1) 44@example 45@group 460 1 2 3 470 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 48+-------------------------------+---------------+-------------+ 49| Length (2) | Marker (1) | Version (1) | 50+-------------------------------+---------------+-------------+ 51| Command (2) | 52+-------------------------------+ 53@end group 54@end example 55 56@appendixsubsec Zebra Protocol Header Field Definitions 57@table @samp 58@item Length 59Total packet length including this header. The minimum length is 3 60bytes for version 0 messages and 6 bytes for version 1 messages. 61 62@item Marker 63Static marker with a value of 255 always. This is to allow version 0 64Zserv headers (which do not include version explicitely) to be 65distinguished from versioned headers. Not present in version 0 66messages. 67 68@item Version 69Version number of the Zserv message. Clients should not continue 70processing messages past the version field for versions they do not 71recognise. Not present in version 0 messages. 72 73@item Command 74The Zebra Protocol command. 75@end table 76 77@appendixsubsec Zebra Protocol Commands 78@multitable {ZEBRA_REDISTRIBUTE_DEFAULT_DELETE_WHATEVER} {99999} 79@headitem Command @tab Value 80@item ZEBRA_INTERFACE_ADD 81@tab 1 82@item ZEBRA_INTERFACE_DELETE 83@tab 2 84@item ZEBRA_INTERFACE_ADDRESS_ADD 85@tab 3 86@item ZEBRA_INTERFACE_ADDRESS_DELETE 87@tab 4 88@item ZEBRA_INTERFACE_UP 89@tab 5 90@item ZEBRA_INTERFACE_DOWN 91@tab 6 92@item ZEBRA_IPV4_ROUTE_ADD 93@tab 7 94@item ZEBRA_IPV4_ROUTE_DELETE 95@tab 8 96@item ZEBRA_IPV6_ROUTE_ADD 97@tab 9 98@item ZEBRA_IPV6_ROUTE_DELETE 99@tab 10 100@item ZEBRA_REDISTRIBUTE_ADD 101@tab 11 102@item ZEBRA_REDISTRIBUTE_DELETE 103@tab 12 104@item ZEBRA_REDISTRIBUTE_DEFAULT_ADD 105@tab 13 106@item ZEBRA_REDISTRIBUTE_DEFAULT_DELETE 107@tab 14 108@item ZEBRA_IPV4_NEXTHOP_LOOKUP 109@tab 15 110@item ZEBRA_IPV6_NEXTHOP_LOOKUP 111@tab 16 112@end multitable 113