paul | 76b89b4 | 2004-11-06 17:13:09 +0000 | [diff] [blame] | 1 | @node Zebra Protocol |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 2 | @appendix Zebra Protocol |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 3 | @appendixsection Overview of the Zebra Protocol |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 4 | |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 5 | Zebra Protocol is used by protocol daemons to communicate with the |
| 6 | zebra daemon. |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 7 | |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 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. |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 13 | |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 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. |
| 21 | |
| 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 |
| 25 | seperate commands. |
| 26 | |
| 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 1 will be |
| 29 | used as of Quagga 1.0. |
| 30 | |
| 31 | @appendixsection Zebra Protocol Definition |
| 32 | @appendixsubsec Zebra Protocol Header (version 0) |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 33 | @example |
| 34 | @group |
| 35 | 0 1 2 3 |
| 36 | 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 |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 37 | +-------------------------------+---------------+ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 38 | | Length (2) | Command (1) | |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 39 | +-------------------------------+---------------+ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 40 | @end group |
| 41 | @end example |
| 42 | |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 43 | @appendixsubsec Zebra Protocol Common Header (version 1) |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 44 | @example |
| 45 | @group |
| 46 | 0 1 2 3 |
| 47 | 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 |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 48 | +-------------------------------+---------------+-------------+ |
| 49 | | Length (2) | Marker (1) | Version (1) | |
| 50 | +-------------------------------+---------------+-------------+ |
| 51 | | Command (2) | |
| 52 | +-------------------------------+ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 53 | @end group |
| 54 | @end example |
Paul Jakma | ab2416a | 2006-04-03 21:24:27 +0000 | [diff] [blame] | 55 | |
| 56 | @appendixsubsec Zebra Protocol Header Field Definitions |
| 57 | @table @samp |
| 58 | @item Length |
| 59 | Total packet length including this header. The minimum length is 3 |
| 60 | bytes for version 0 messages and 6 bytes for version 1 messages. |
| 61 | |
| 62 | @item Marker |
| 63 | Static marker with a value of 255 always. This is to allow version 0 |
| 64 | Zserv headers (which do not include version explicitely) to be |
| 65 | distinguished from versioned headers. Not present in version 0 |
| 66 | messages. |
| 67 | |
| 68 | @item Version |
| 69 | Version number of the Zserv message. Clients should not continue |
| 70 | processing messages past the version field for versions they do not |
| 71 | recognise. Not present in version 0 messages. |
| 72 | |
| 73 | @item Command |
| 74 | The 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 |