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