9 Overview of the Zebra Protocol
10 ==============================
12 The Zebra protocol (or ``ZAPI``) is used by protocol daemons to
13 communicate with the **zebra** daemon.
15 Each protocol daemon may request and send information to and from the
16 **zebra** daemon such as interface states, routing state,
17 nexthop-validation, and so on. Protocol daemons may also install
18 routes with **zebra**. The **zebra** daemon manages which routes are
19 installed into the forwarding table with the kernel. Some daemons use
20 more than one ZAPI connection. This is supported: each ZAPI session is
21 identified by a tuple of: ``{protocol, instance, session_id}``. LDPD
22 is an example: it uses a second, synchronous ZAPI session to manage
23 label blocks. The default value for ``session_id`` is zero; daemons
24 who use multiple ZAPI sessions must assign unique values to the
27 The Zebra protocol is a streaming protocol, with a common header. Version 0
28 lacks a version field and is implicitly versioned. Version 1 and all subsequent
29 versions have a version field. Version 0 can be distinguished from all other
30 versions by examining the 3rd byte of the header, which contains a marker value
31 of 255 (in Quagga) or 254 (in FRR) for all versions except version 0. The
32 marker byte corresponds to the command field in version 0, and the marker value
33 is a reserved command in version 0.
40 Used by all versions of GNU Zebra and all version of Quagga up to and
41 including Quagga 0.98. This version has no ``version`` field, and so is
42 implicitly versioned as version 0.
46 Added ``marker`` and ``version`` fields, increased ``command`` field to 16
47 bits. Used by Quagga versions 0.99.3 through 0.99.20.
51 Used by Quagga versions 0.99.21 through 0.99.23.
55 Added ``vrf_id`` field. Used by Quagga versions 0.99.23 until FRR fork.
59 Change marker value to 254 to prevent people mixing and matching Quagga and
60 FRR daemon binaries. Used by FRR versions 2.0 through 3.0.3.
64 Increased VRF identifier field from 16 to 32 bits. Used by FRR versions 4.0
69 Removed the following commands:
71 * ZEBRA_IPV4_ROUTE_ADD
72 * ZEBRA_IPV4_ROUTE_DELETE
73 * ZEBRA_IPV6_ROUTE_ADD
74 * ZEBRA_IPV6_ROUTE_DELETE
76 Used since FRR version 6.0.
79 Zebra Protocol Definition
80 =========================
82 Zebra Protocol Header Field Definitions
83 ---------------------------------------
86 Total packet length including this header.
89 Static marker. The marker value, when it exists, is 255 in all versions of
90 Quagga. It is 254 in all versions of FRR. This is to allow version 0 headers
91 (which do not include version explicitly) to be distinguished from versioned
95 Zebra protocol version number. Clients should not continue processing
96 messages past the version field for versions they do not recognise.
99 The Zebra protocol command.
110 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
111 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
112 | Length | Marker | Version |
113 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
115 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
117 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
128 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
129 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
131 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
138 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
139 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
140 | Length | Marker | Version |
141 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
143 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
151 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
152 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
153 | Length | Marker | Version |
154 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
156 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
159 Zebra Protocol Commands
160 -----------------------
162 +------------------------------------+-------+
164 +====================================+=======+
165 | ZEBRA_INTERFACE_ADD | 0 |
166 +------------------------------------+-------+
167 | ZEBRA_INTERFACE_DELETE | 1 |
168 +------------------------------------+-------+
169 | ZEBRA_INTERFACE_ADDRESS_ADD | 2 |
170 +------------------------------------+-------+
171 | ZEBRA_INTERFACE_ADDRESS_DELETE | 3 |
172 +------------------------------------+-------+
173 | ZEBRA_INTERFACE_UP | 4 |
174 +------------------------------------+-------+
175 | ZEBRA_INTERFACE_DOWN | 5 |
176 +------------------------------------+-------+
177 | ZEBRA_INTERFACE_SET_MASTER | 6 |
178 +------------------------------------+-------+
179 | ZEBRA_INTERFACE_SET_PROTODOWN | 7 |
180 +------------------------------------+-------+
181 | ZEBRA_ROUTE_ADD | 8 |
182 +------------------------------------+-------+
183 | ZEBRA_ROUTE_DELETE | 9 |
184 +------------------------------------+-------+
185 | ZEBRA_ROUTE_NOTIFY_OWNER | 10 |
186 +------------------------------------+-------+
187 | ZEBRA_REDISTRIBUTE_ADD | 11 |
188 +------------------------------------+-------+
189 | ZEBRA_REDISTRIBUTE_DELETE | 12 |
190 +------------------------------------+-------+
191 | ZEBRA_REDISTRIBUTE_DEFAULT_ADD | 13 |
192 +------------------------------------+-------+
193 | ZEBRA_REDISTRIBUTE_DEFAULT_DELETE | 14 |
194 +------------------------------------+-------+
195 | ZEBRA_ROUTER_ID_ADD | 15 |
196 +------------------------------------+-------+
197 | ZEBRA_ROUTER_ID_DELETE | 16 |
198 +------------------------------------+-------+
199 | ZEBRA_ROUTER_ID_UPDATE | 17 |
200 +------------------------------------+-------+
202 +------------------------------------+-------+
203 | ZEBRA_CAPABILITIES | 19 |
204 +------------------------------------+-------+
205 | ZEBRA_NEXTHOP_REGISTER | 20 |
206 +------------------------------------+-------+
207 | ZEBRA_NEXTHOP_UNREGISTER | 21 |
208 +------------------------------------+-------+
209 | ZEBRA_NEXTHOP_UPDATE | 22 |
210 +------------------------------------+-------+
211 | ZEBRA_INTERFACE_NBR_ADDRESS_ADD | 23 |
212 +------------------------------------+-------+
213 | ZEBRA_INTERFACE_NBR_ADDRESS_DELETE | 24 |
214 +------------------------------------+-------+
215 | ZEBRA_INTERFACE_BFD_DEST_UPDATE | 25 |
216 +------------------------------------+-------+
217 | ZEBRA_IMPORT_ROUTE_REGISTER | 26 |
218 +------------------------------------+-------+
219 | ZEBRA_IMPORT_ROUTE_UNREGISTER | 27 |
220 +------------------------------------+-------+
221 | ZEBRA_IMPORT_CHECK_UPDATE | 28 |
222 +------------------------------------+-------+
223 | ZEBRA_BFD_DEST_REGISTER | 29 |
224 +------------------------------------+-------+
225 | ZEBRA_BFD_DEST_DEREGISTER | 30 |
226 +------------------------------------+-------+
227 | ZEBRA_BFD_DEST_UPDATE | 31 |
228 +------------------------------------+-------+
229 | ZEBRA_BFD_DEST_REPLAY | 32 |
230 +------------------------------------+-------+
231 | ZEBRA_REDISTRIBUTE_ROUTE_ADD | 33 |
232 +------------------------------------+-------+
233 | ZEBRA_REDISTRIBUTE_ROUTE_DEL | 34 |
234 +------------------------------------+-------+
235 | ZEBRA_VRF_UNREGISTER | 35 |
236 +------------------------------------+-------+
237 | ZEBRA_VRF_ADD | 36 |
238 +------------------------------------+-------+
239 | ZEBRA_VRF_DELETE | 37 |
240 +------------------------------------+-------+
241 | ZEBRA_VRF_LABEL | 38 |
242 +------------------------------------+-------+
243 | ZEBRA_INTERFACE_VRF_UPDATE | 39 |
244 +------------------------------------+-------+
245 | ZEBRA_BFD_CLIENT_REGISTER | 40 |
246 +------------------------------------+-------+
247 | ZEBRA_BFD_CLIENT_DEREGISTER | 41 |
248 +------------------------------------+-------+
249 | ZEBRA_INTERFACE_ENABLE_RADV | 42 |
250 +------------------------------------+-------+
251 | ZEBRA_INTERFACE_DISABLE_RADV | 43 |
252 +------------------------------------+-------+
253 | ZEBRA_IPV3_NEXTHOP_LOOKUP_MRIB | 44 |
254 +------------------------------------+-------+
255 | ZEBRA_INTERFACE_LINK_PARAMS | 45 |
256 +------------------------------------+-------+
257 | ZEBRA_MPLS_LABELS_ADD | 46 |
258 +------------------------------------+-------+
259 | ZEBRA_MPLS_LABELS_DELETE | 47 |
260 +------------------------------------+-------+
261 | ZEBRA_MPLS_LABELS_REPLACE | 48 |
262 +------------------------------------+-------+
263 | ZEBRA_IPMR_ROUTE_STATS | 49 |
264 +------------------------------------+-------+
265 | ZEBRA_LABEL_MANAGER_CONNECT | 50 |
266 +------------------------------------+-------+
267 | ZEBRA_LABEL_MANAGER_CONNECT_ASYNC | 51 |
268 +------------------------------------+-------+
269 | ZEBRA_GET_LABEL_CHUNK | 52 |
270 +------------------------------------+-------+
271 | ZEBRA_RELEASE_LABEL_CHUNK | 53 |
272 +------------------------------------+-------+
273 | ZEBRA_FEC_REGISTER | 54 |
274 +------------------------------------+-------+
275 | ZEBRA_FEC_UNREGISTER | 55 |
276 +------------------------------------+-------+
277 | ZEBRA_FEC_UPDATE | 56 |
278 +------------------------------------+-------+
279 | ZEBRA_ADVERTISE_DEFAULT_GW | 57 |
280 +------------------------------------+-------+
281 | ZEBRA_ADVERTISE_SVI_MACIP | 58 |
282 +------------------------------------+-------+
283 | ZEBRA_ADVERTISE_SUBNET | 59 |
284 +------------------------------------+-------+
285 | ZEBRA_ADVERTISE_ALL_VNI | 60 |
286 +------------------------------------+-------+
287 | ZEBRA_LOCAL_ES_ADD | 61 |
288 +------------------------------------+-------+
289 | ZEBRA_LOCAL_ES_DEL | 62 |
290 +------------------------------------+-------+
291 | ZEBRA_VNI_ADD | 63 |
292 +------------------------------------+-------+
293 | ZEBRA_VNI_DEL | 64 |
294 +------------------------------------+-------+
295 | ZEBRA_L3VNI_ADD | 65 |
296 +------------------------------------+-------+
297 | ZEBRA_L3VNI_DEL | 66 |
298 +------------------------------------+-------+
299 | ZEBRA_REMOTE_VTEP_ADD | 67 |
300 +------------------------------------+-------+
301 | ZEBRA_REMOTE_VTEP_DEL | 68 |
302 +------------------------------------+-------+
303 | ZEBRA_MACIP_ADD | 69 |
304 +------------------------------------+-------+
305 | ZEBRA_MACIP_DEL | 70 |
306 +------------------------------------+-------+
307 | ZEBRA_IP_PREFIX_ROUTE_ADD | 71 |
308 +------------------------------------+-------+
309 | ZEBRA_IP_PREFIX_ROUTE_DEL | 72 |
310 +------------------------------------+-------+
311 | ZEBRA_REMOTE_MACIP_ADD | 73 |
312 +------------------------------------+-------+
313 | ZEBRA_REMOTE_MACIP_DEL | 74 |
314 +------------------------------------+-------+
315 | ZEBRA_DUPLICATE_ADDR_DETECTION | 75 |
316 +------------------------------------+-------+
317 | ZEBRA_PW_ADD | 76 |
318 +------------------------------------+-------+
319 | ZEBRA_PW_DELETE | 77 |
320 +------------------------------------+-------+
321 | ZEBRA_PW_SET | 78 |
322 +------------------------------------+-------+
323 | ZEBRA_PW_UNSET | 79 |
324 +------------------------------------+-------+
325 | ZEBRA_PW_STATUS_UPDATE | 80 |
326 +------------------------------------+-------+
327 | ZEBRA_RULE_ADD | 81 |
328 +------------------------------------+-------+
329 | ZEBRA_RULE_DELETE | 82 |
330 +------------------------------------+-------+
331 | ZEBRA_RULE_NOTIFY_OWNER | 83 |
332 +------------------------------------+-------+
333 | ZEBRA_TABLE_MANAGER_CONNECT | 84 |
334 +------------------------------------+-------+
335 | ZEBRA_GET_TABLE_CHUNK | 85 |
336 +------------------------------------+-------+
337 | ZEBRA_RELEASE_TABLE_CHUNK | 86 |
338 +------------------------------------+-------+
339 | ZEBRA_IPSET_CREATE | 87 |
340 +------------------------------------+-------+
341 | ZEBRA_IPSET_DESTROY | 88 |
342 +------------------------------------+-------+
343 | ZEBRA_IPSET_ENTRY_ADD | 89 |
344 +------------------------------------+-------+
345 | ZEBRA_IPSET_ENTRY_DELETE | 90 |
346 +------------------------------------+-------+
347 | ZEBRA_IPSET_NOTIFY_OWNER | 91 |
348 +------------------------------------+-------+
349 | ZEBRA_IPSET_ENTRY_NOTIFY_OWNER | 92 |
350 +------------------------------------+-------+
351 | ZEBRA_IPTABLE_ADD | 93 |
352 +------------------------------------+-------+
353 | ZEBRA_IPTABLE_DELETE | 94 |
354 +------------------------------------+-------+
355 | ZEBRA_IPTABLE_NOTIFY_OWNER | 95 |
356 +------------------------------------+-------+
357 | ZEBRA_VXLAN_FLOOD_CONTROL | 96 |
358 +------------------------------------+-------+
359 | ZEBRA_VXLAN_SG_ADD | 97 |
360 +------------------------------------+-------+
361 | ZEBRA_VXLAN_SG_DEL | 98 |
362 +------------------------------------+-------+
363 | ZEBRA_VXLAN_SG_REPLAY | 99 |
364 +------------------------------------+-------+
365 | ZEBRA_MLAG_PROCESS_UP | 100 |
366 +------------------------------------+-------+
367 | ZEBRA_MLAG_PROCESS_DOWN | 101 |
368 +------------------------------------+-------+
369 | ZEBRA_MLAG_CLIENT_REGISTER | 102 |
370 +------------------------------------+-------+
371 | ZEBRA_MLAG_CLIENT_UNREGISTER | 103 |
372 +------------------------------------+-------+
373 | ZEBRA_MLAG_FORWARD_MSG | 104 |
374 +------------------------------------+-------+
375 | ZEBRA_CLIENT_CAPABILITIES | 105 |
376 +------------------------------------+-------+