1: @node Zebra Protocol
2: @appendix Zebra Protocol
3: @appendixsection Overview of the Zebra Protocol
4:
5: Zebra Protocol is used by protocol daemons to communicate with the
6: zebra daemon.
7:
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.
13:
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)
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
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
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
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
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>