blob: 6d42c04e795b998d9ede5e0ef7c799578256729c [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001@node Zebra
paul718e3742002-12-13 20:15:29 +00002@chapter Zebra
3
4@c SYNOPSIS
5@command{zebra} is an IP routing manager. It provides kernel routing
6table updates, interface lookups, and redistribution of routes between
7different routing protocols.
8
9@menu
10* Invoking zebra:: Running the program
11* Interface Commands:: Commands for zebra interfaces
12* Static Route Commands:: Commands for adding static routes
David Lamparter3a27aae2015-01-30 01:44:25 +010013* Multicast RIB Commands:: Commands for controlling MRIB behavior
Paul Jakma7514fb72007-05-02 16:05:35 +000014* zebra Route Filtering:: Commands for zebra route filtering
Avneesh Sachdevb9c24cd2012-11-13 22:49:00 +000015* zebra FIB push interface:: Interface to optional FPM component
paul718e3742002-12-13 20:15:29 +000016* zebra Terminal Mode Commands:: Commands for zebra's VTY
17@end menu
18
19
paul76b89b42004-11-06 17:13:09 +000020@node Invoking zebra
paul718e3742002-12-13 20:15:29 +000021@section Invoking zebra
22
23Besides the common invocation options (@pxref{Common Invocation Options}), the
24@command{zebra} specific invocation options are listed below.
25
26@table @samp
27@item -b
28@itemx --batch
29Runs in batch mode. @command{zebra} parses configuration file and terminates
30immediately.
31
32@item -k
33@itemx --keep_kernel
34When zebra starts up, don't delete old self inserted routes.
35
paul718e3742002-12-13 20:15:29 +000036@item -r
37@itemx --retain
38When program terminates, retain routes added by zebra.
39
40@end table
41
paul76b89b42004-11-06 17:13:09 +000042@node Interface Commands
paul718e3742002-12-13 20:15:29 +000043@section Interface Commands
44
Olivier Dugeonec04b9f2016-04-19 19:18:18 +020045@menu
46* Standard Commands::
47* Link Parameters Commands::
48@end menu
49
50@node Standard Commands
51@subsection Standard Commands
52
paul718e3742002-12-13 20:15:29 +000053@deffn Command {interface @var{ifname}} {}
54@end deffn
55
56@deffn {Interface Command} {shutdown} {}
57@deffnx {Interface Command} {no shutdown} {}
58Up or down the current interface.
59@end deffn
60
paul971a4492003-06-20 01:18:07 +000061@deffn {Interface Command} {ip address @var{address/prefix}} {}
Denis Ovsienkoe6844aa2011-03-18 20:20:53 +030062@deffnx {Interface Command} {ipv6 address @var{address/prefix}} {}
paul971a4492003-06-20 01:18:07 +000063@deffnx {Interface Command} {no ip address @var{address/prefix}} {}
Denis Ovsienkoe6844aa2011-03-18 20:20:53 +030064@deffnx {Interface Command} {no ipv6 address @var{address/prefix}} {}
paul971a4492003-06-20 01:18:07 +000065Set the IPv4 or IPv6 address/prefix for the interface.
66@end deffn
67
68@deffn {Interface Command} {ip address @var{address/prefix} secondary} {}
69@deffnx {Interface Command} {no ip address @var{address/prefix} secondary} {}
70Set the secondary flag for this address. This causes ospfd to not treat the
71address as a distinct subnet.
paul718e3742002-12-13 20:15:29 +000072@end deffn
73
74@deffn {Interface Command} {description @var{description} ...} {}
75Set description for the interface.
76@end deffn
77
78@deffn {Interface Command} {multicast} {}
79@deffnx {Interface Command} {no multicast} {}
80Enable or disables multicast flag for the interface.
81@end deffn
82
83@deffn {Interface Command} {bandwidth <1-10000000>} {}
84@deffnx {Interface Command} {no bandwidth <1-10000000>} {}
Olivier Dugeonec04b9f2016-04-19 19:18:18 +020085Set bandwidth value of the interface in kilobits/sec. This is for
86calculating OSPF cost. This command does not affect the actual device
paul971a4492003-06-20 01:18:07 +000087configuration.
88@end deffn
89
90@deffn {Interface Command} {link-detect} {}
91@deffnx {Interface Command} {no link-detect} {}
Olivier Dugeonec04b9f2016-04-19 19:18:18 +020092Enable/disable link-detect on platforms which support this. Currently
Paul Jakmac3eab602006-07-28 04:42:39 +000093only Linux and Solaris, and only where network interface drivers support reporting
94link-state via the IFF_RUNNING flag.
paul718e3742002-12-13 20:15:29 +000095@end deffn
96
Olivier Dugeonec04b9f2016-04-19 19:18:18 +020097@node Link Parameters Commands
98@subsection Link Parameters Commands
99
100@deffn {Interface Command} {link-params} {}
101@deffnx {Interface Command} {no link-param} {}
102Enter into the link parameters sub node. At least 'enable' must be set to activate the link parameters,
103and consequently Traffic Engineering on this interface. MPLS-TE must be enable at the OSPF (@ref{OSPF Traffic Engineering})
104or ISIS (@ref{ISIS Traffic Engineering}) router level in complement to this.
105Disable link parameters for this interface.
106@end deffn
107
108Under link parameter statement, the following commands set the different TE values:
109
110@deffn link-params {enable}
111Enable link parameters for this interface.
112@end deffn
113
114@deffn link-params {metric <0-4294967295>} {}
115@deffnx link-params {max-bw @var{bandwidth}} {}
116@deffnx link-params {max-rsv-bw @var{bandwidth}} {}
117@deffnx link-params {unrsv-bw <0-7> @var{bandwidth}} {}
118@deffnx link-params {admin-grp @var{bandwidth}} {}
119These commands specifies the Traffic Engineering parameters of the interface in conformity to RFC3630 (OSPF)
120or RFC5305 (ISIS).
121There are respectively the TE Metric (different from the OSPF or ISIS metric), Maximum Bandwidth (interface speed
122by default), Maximum Reservable Bandwidth, Unreserved Bandwidth for each 0-7 priority and Admin Group (ISIS) or
123Resource Class/Color (OSPF).
124
125Note that @var{bandwidth} are specified in IEEE floating point format and express in Bytes/second.
126@end deffn
127
128@deffn link-param {delay <0-16777215> [min <0-16777215> | max <0-16777215>]} {}
129@deffnx link-param {delay-variation <0-16777215>} {}
130@deffnx link-param {packet-loss @var{percentage}} {}
131@deffnx link-param {res-bw @var{bandwidth}} {}
132@deffnx link-param {ava-bw @var{bandwidth}} {}
133@deffnx link-param {use-bw @var{bandwidth}} {}
134These command specifies additionnal Traffic Engineering parameters of the interface in conformity to
135draft-ietf-ospf-te-metrics-extension-05.txt and draft-ietf-isis-te-metrics-extension-03.txt. There are
136respectively the delay, jitter, loss, available bandwidth, reservable bandwidth and utilized bandwidth.
137
138Note that @var{bandwidth} are specified in IEEE floating point format and express in Bytes/second.
139Delays and delay variation are express in micro-second (µs). Loss is specified in @var{percentage} ranging
140from 0 to 50.331642% by step of 0.000003.
141@end deffn
142
143@deffn link-param {neighbor <A.B.C.D> as <0-65535>} {}
144@deffnx link-param {no neighbor} {}
145Specifies the remote ASBR IP address and Autonomous System (AS) number for InterASv2 link in OSPF (RFC5392).
146Note that this option is not yet supported for ISIS (RFC5316).
147@end deffn
148
149
paul76b89b42004-11-06 17:13:09 +0000150@node Static Route Commands
paul718e3742002-12-13 20:15:29 +0000151@section Static Route Commands
152
153Static routing is a very fundamental feature of routing technology. It
154defines static prefix and gateway.
155
156@deffn Command {ip route @var{network} @var{gateway}} {}
157@var{network} is destination prefix with format of A.B.C.D/M.
158@var{gateway} is gateway for the prefix. When @var{gateway} is
159A.B.C.D format. It is taken as a IPv4 address gateway. Otherwise it
paul971a4492003-06-20 01:18:07 +0000160is treated as an interface name. If the interface name is @var{null0} then
161zebra installs a blackhole route.
paul718e3742002-12-13 20:15:29 +0000162
163@example
164ip route 10.0.0.0/8 10.0.0.2
165ip route 10.0.0.0/8 ppp0
paul971a4492003-06-20 01:18:07 +0000166ip route 10.0.0.0/8 null0
paul718e3742002-12-13 20:15:29 +0000167@end example
168
169First example defines 10.0.0.0/8 static route with gateway 10.0.0.2.
paul971a4492003-06-20 01:18:07 +0000170Second one defines the same prefix but with gateway to interface ppp0. The
171third install a blackhole route.
paul718e3742002-12-13 20:15:29 +0000172@end deffn
173
174@deffn Command {ip route @var{network} @var{netmask} @var{gateway}} {}
175This is alternate version of above command. When @var{network} is
176A.B.C.D format, user must define @var{netmask} value with A.B.C.D
177format. @var{gateway} is same option as above command
178
179@example
Jakub Zawadzkid04f9ec2017-03-04 20:41:02 +0100180ip route 10.0.0.0 255.0.0.0 10.0.0.2
181ip route 10.0.0.0 255.0.0.0 ppp0
182ip route 10.0.0.0 255.0.0.0 null0
paul718e3742002-12-13 20:15:29 +0000183@end example
184
paul971a4492003-06-20 01:18:07 +0000185These statements are equivalent to those in the previous example.
paul718e3742002-12-13 20:15:29 +0000186@end deffn
187
188@deffn Command {ip route @var{network} @var{gateway} @var{distance}} {}
paul971a4492003-06-20 01:18:07 +0000189Installs the route with the specified distance.
paul718e3742002-12-13 20:15:29 +0000190@end deffn
191
192Multiple nexthop static route
193
194@example
195ip route 10.0.0.1/32 10.0.0.2
196ip route 10.0.0.1/32 10.0.0.3
197ip route 10.0.0.1/32 eth0
198@end example
199
200If there is no route to 10.0.0.2 and 10.0.0.3, and interface eth0
201is reachable, then the last route is installed into the kernel.
202
paul971a4492003-06-20 01:18:07 +0000203If zebra has been compiled with multipath support, and both 10.0.0.2 and
20410.0.0.3 are reachable, zebra will install a multipath route via both
205nexthops, if the platform supports this.
206
paul718e3742002-12-13 20:15:29 +0000207@example
208zebra> show ip route
209S> 10.0.0.1/32 [1/0] via 10.0.0.2 inactive
210 via 10.0.0.3 inactive
211 * is directly connected, eth0
212@end example
213
paul971a4492003-06-20 01:18:07 +0000214@example
215ip route 10.0.0.0/8 10.0.0.2
216ip route 10.0.0.0/8 10.0.0.3
217ip route 10.0.0.0/8 null0 255
218@end example
219
220This will install a multihop route via the specified next-hops if they are
221reachable, as well as a high-metric blackhole route, which can be useful to
222prevent traffic destined for a prefix to match less-specific routes (eg
223default) should the specified gateways not be reachable. Eg:
224
225@example
Olivier Dugeonec04b9f2016-04-19 19:18:18 +0200226zebra> show ip route 10.0.0.0/8
paul971a4492003-06-20 01:18:07 +0000227Routing entry for 10.0.0.0/8
228 Known via "static", distance 1, metric 0
229 10.0.0.2 inactive
230 10.0.0.3 inactive
231
232Routing entry for 10.0.0.0/8
233 Known via "static", distance 255, metric 0
234 directly connected, Null0
235@end example
paul718e3742002-12-13 20:15:29 +0000236
237@deffn Command {ipv6 route @var{network} @var{gateway}} {}
paul971a4492003-06-20 01:18:07 +0000238@deffnx Command {ipv6 route @var{network} @var{gateway} @var{distance}} {}
239These behave similarly to their ipv4 counterparts.
paul718e3742002-12-13 20:15:29 +0000240@end deffn
241
242
243@deffn Command {table @var{tableno}} {}
244Select the primary kernel routing table to be used. This only works
245for kernels supporting multiple routing tables (like GNU/Linux 2.2.x
Olivier Dugeonec04b9f2016-04-19 19:18:18 +0200246and later). After setting @var{tableno} with this command,
paul718e3742002-12-13 20:15:29 +0000247static routes defined after this are added to the specified table.
248@end deffn
249
David Lamparter3a27aae2015-01-30 01:44:25 +0100250@node Multicast RIB Commands
251@section Multicast RIB Commands
252
253The Multicast RIB provides a separate table of unicast destinations which
254is used for Multicast Reverse Path Forwarding decisions. It is used with
255a multicast source's IP address, hence contains not multicast group
256addresses but unicast addresses.
257
258This table is fully separate from the default unicast table. However,
259RPF lookup can include the unicast table.
260
261WARNING: RPF lookup results are non-responsive in this version of Quagga,
262i.e. multicast routing does not actively react to changes in underlying
263unicast topology!
264
265@deffn Command {ip multicast rpf-lookup-mode @var{mode}} {}
266@deffnx Command {no ip multicast rpf-lookup-mode [@var{mode}]} {}
267
268@var{mode} sets the method used to perform RPF lookups. Supported modes:
269
270@table @samp
271@item urib-only
272Performs the lookup on the Unicast RIB. The Multicast RIB is never used.
273@item mrib-only
274Performs the lookup on the Multicast RIB. The Unicast RIB is never used.
275@item mrib-then-urib
276Tries to perform the lookup on the Multicast RIB. If any route is found,
277that route is used. Otherwise, the Unicast RIB is tried.
278@item lower-distance
279Performs a lookup on the Multicast RIB and Unicast RIB each. The result
280with the lower administrative distance is used; if they're equal, the
281Multicast RIB takes precedence.
282@item longer-prefix
283Performs a lookup on the Multicast RIB and Unicast RIB each. The result
284with the longer prefix length is used; if they're equal, the
285Multicast RIB takes precedence.
286@end table
287
David Lamparter73972172015-02-02 03:00:22 +0100288The @code{mrib-then-urib} setting is the default behavior if nothing is
289configured. If this is the desired behavior, it should be explicitly
290configured to make the configuration immune against possible changes in
291what the default behavior is.
292
David Lamparter3a27aae2015-01-30 01:44:25 +0100293WARNING: Unreachable routes do not receive special treatment and do not
294cause fallback to a second lookup.
295@end deffn
296
297@deffn Command {show ip rpf @var{addr}} {}
298
299Performs a Multicast RPF lookup, as configured with
300@command{ip multicast rpf-lookup-mode @var{mode}}. @var{addr} specifies
301the multicast source address to look up.
302
303@example
304> show ip rpf 192.0.2.1
305Routing entry for 192.0.2.0/24 using Unicast RIB
306 Known via "kernel", distance 0, metric 0, best
307 * 198.51.100.1, via eth0
308@end example
309
310Indicates that a multicast source lookup for 192.0.2.1 would use an
311Unicast RIB entry for 192.0.2.0/24 with a gateway of 198.51.100.1.
312@end deffn
313
314@deffn Command {show ip rpf} {}
315
316Prints the entire Multicast RIB. Note that this is independent of the
317configured RPF lookup mode, the Multicast RIB may be printed yet not
318used at all.
319@end deffn
320
321@deffn Command {ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}
322@deffnx Command {no ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}
323
324Adds a static route entry to the Multicast RIB. This performs exactly as
325the @command{ip route} command, except that it inserts the route in the
326Multicast RIB instead of the Unicast RIB.
327@end deffn
328
329
Paul Jakma7514fb72007-05-02 16:05:35 +0000330@node zebra Route Filtering
331@section zebra Route Filtering
332Zebra supports @command{prefix-list} and @command{route-map} to match
333routes received from other quagga components. The
334@command{permit}/@command{deny} facilities provided by these commands
335can be used to filter which routes zebra will install in the kernel.
336
337@deffn Command {ip protocol @var{protocol} route-map @var{routemap}} {}
338Apply a route-map filter to routes for the specified protocol. @var{protocol}
339can be @b{any} or one of
340@b{system},
341@b{kernel},
342@b{connected},
343@b{static},
344@b{rip},
345@b{ripng},
346@b{ospf},
347@b{ospf6},
348@b{isis},
349@b{bgp},
350@b{hsls}.
351@end deffn
352
353@deffn {Route Map} {set src @var{address}}
354Within a route-map, set the preferred source address for matching routes
355when installing in the kernel.
356@end deffn
357
Paul Jakma7514fb72007-05-02 16:05:35 +0000358The following creates a prefix-list that matches all addresses, a route-map
359that sets the preferred source address, and applies the route-map to all
360@command{rip} routes.
361
Paul Jakma1bfd6552017-03-08 23:31:47 +0000362@example
Paul Jakma7514fb72007-05-02 16:05:35 +0000363@group
364ip prefix-list ANY permit 0.0.0.0/0 le 32
365route-map RM1 permit 10
366 match ip address prefix-list ANY
367 set src 10.0.0.1
368
369ip protocol rip route-map RM1
370@end group
371@end example
372
Avneesh Sachdevb9c24cd2012-11-13 22:49:00 +0000373@node zebra FIB push interface
374@section zebra FIB push interface
375
376Zebra supports a 'FIB push' interface that allows an external
377component to learn the forwarding information computed by the Quagga
378routing suite.
379
380In Quagga, the Routing Information Base (RIB) resides inside
381zebra. Routing protocols communicate their best routes to zebra, and
382zebra computes the best route across protocols for each prefix. This
383latter information makes up the Forwarding Information Base
384(FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
385the kernel to forward packets according to the routes computed by
386Quagga. The kernel FIB is updated in an OS-specific way. For example,
387the @code{netlink} interface is used on Linux, and route sockets are
388used on FreeBSD.
389
390The FIB push interface aims to provide a cross-platform mechanism to
391support scenarios where the router has a forwarding path that is
392distinct from the kernel, commonly a hardware-based fast path. In
393these cases, the FIB needs to be maintained reliably in the fast path
394as well. We refer to the component that programs the forwarding plane
395(directly or indirectly) as the Forwarding Plane Manager or FPM.
396
397The FIB push interface comprises of a TCP connection between zebra and
398the FPM. The connection is initiated by zebra -- that is, the FPM acts
399as the TCP server.
400
401The relevant zebra code kicks in when zebra is configured with the
402@code{--enable-fpm} flag. Zebra periodically attempts to connect to
403the well-known FPM port. Once the connection is up, zebra starts
404sending messages containing routes over the socket to the FPM. Zebra
405sends a complete copy of the forwarding table to the FPM, including
406routes that it may have picked up from the kernel. The existing
407interaction of zebra with the kernel remains unchanged -- that is, the
408kernel continues to receive FIB updates as before.
409
Avneesh Sachdev6112d112016-04-04 10:54:59 -0700410The encapsulation header for the messages exchanged with the FPM is
411defined by the file @file{fpm/fpm.h} in the quagga tree. The routes
412themselves are encoded in netlink or protobuf format, with netlink
413being the default.
414
415Protobuf is one of a number of new serialization formats wherein the
416message schema is expressed in a purpose-built language. Code for
417encoding/decoding to/from the wire format is generated from the
418schema. Protobuf messages can be extended easily while maintaining
419backward-compatibility with older code. Protobuf has the following
420advantages over netlink:
421
422@itemize
423@item
424Code for serialization/deserialization is generated
425automatically. This reduces the likelihood of bugs, allows third-party
426programs to be integrated quickly, and makes it easy to add fields.
427@item
428The message format is not tied to an OS (Linux), and can be evolved
429independently.
430@end itemize
431
432As mentioned before, zebra encodes routes sent to the FPM in netlink
433format by default. The format can be controlled via the
434@code{--fpm_format} command-line option to zebra, which currently
435takes the values @code{netlink} and @code{protobuf}.
Avneesh Sachdevb9c24cd2012-11-13 22:49:00 +0000436
437The zebra FPM interface uses replace semantics. That is, if a 'route
438add' message for a prefix is followed by another 'route add' message,
439the information in the second message is complete by itself, and
440replaces the information sent in the first message.
441
442If the connection to the FPM goes down for some reason, zebra sends
443the FPM a complete copy of the forwarding table(s) when it reconnects.
444
paul76b89b42004-11-06 17:13:09 +0000445@node zebra Terminal Mode Commands
paul718e3742002-12-13 20:15:29 +0000446@section zebra Terminal Mode Commands
447
448@deffn Command {show ip route} {}
449Display current routes which zebra holds in its database.
450
451@example
452@group
Olivier Dugeonec04b9f2016-04-19 19:18:18 +0200453Router# show ip route
454Codes: K - kernel route, C - connected, S - static, R - RIP,
paul718e3742002-12-13 20:15:29 +0000455 B - BGP * - FIB route.
456
457K* 0.0.0.0/0 203.181.89.241
458S 0.0.0.0/0 203.181.89.1
459C* 127.0.0.0/8 lo
460C* 203.181.89.240/28 eth0
461@end group
462@end example
463@end deffn
464
465@deffn Command {show ipv6 route} {}
466@end deffn
467
468@deffn Command {show interface} {}
469@end deffn
470
Paul Jakma7514fb72007-05-02 16:05:35 +0000471@deffn Command {show ip prefix-list [@var{name}]} {}
472@end deffn
473
474@deffn Command {show route-map [@var{name}]} {}
475@end deffn
476
477@deffn Command {show ip protocol} {}
478@end deffn
479
paul718e3742002-12-13 20:15:29 +0000480@deffn Command {show ipforward} {}
481Display whether the host's IP forwarding function is enabled or not.
482Almost any UNIX kernel can be configured with IP forwarding disabled.
483If so, the box can't work as a router.
484@end deffn
485
486@deffn Command {show ipv6forward} {}
487Display whether the host's IP v6 forwarding is enabled or not.
488@end deffn
Avneesh Sachdevb9c24cd2012-11-13 22:49:00 +0000489
490@deffn Command {show zebra fpm stats} {}
491Display statistics related to the zebra code that interacts with the
492optional Forwarding Plane Manager (FPM) component.
493@end deffn
494
495@deffn Command {clear zebra fpm stats} {}
496Reset statistics related to the zebra code that interacts with the
497optional Forwarding Plane Manager (FPM) component.
498@end deffn