Annotation of embedaddon/quagga/doc/main.texi, revision 1.1.1.3
1.1 misho 1: @node Zebra
2: @chapter Zebra
3:
4: @c SYNOPSIS
5: @command{zebra} is an IP routing manager. It provides kernel routing
6: table updates, interface lookups, and redistribution of routes between
7: different 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
1.1.1.3 ! misho 13: * Multicast RIB Commands:: Commands for controlling MRIB behavior
1.1 misho 14: * zebra Route Filtering:: Commands for zebra route filtering
1.1.1.2 misho 15: * zebra FIB push interface:: Interface to optional FPM component
1.1 misho 16: * zebra Terminal Mode Commands:: Commands for zebra's VTY
17: @end menu
18:
19:
20: @node Invoking zebra
21: @section Invoking zebra
22:
23: Besides 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
29: Runs in batch mode. @command{zebra} parses configuration file and terminates
30: immediately.
31:
32: @item -k
33: @itemx --keep_kernel
34: When zebra starts up, don't delete old self inserted routes.
35:
36: @item -r
37: @itemx --retain
38: When program terminates, retain routes added by zebra.
39:
40: @end table
41:
42: @node Interface Commands
43: @section Interface Commands
44:
45: @deffn Command {interface @var{ifname}} {}
46: @end deffn
47:
48: @deffn {Interface Command} {shutdown} {}
49: @deffnx {Interface Command} {no shutdown} {}
50: Up or down the current interface.
51: @end deffn
52:
53: @deffn {Interface Command} {ip address @var{address/prefix}} {}
54: @deffnx {Interface Command} {ipv6 address @var{address/prefix}} {}
55: @deffnx {Interface Command} {no ip address @var{address/prefix}} {}
56: @deffnx {Interface Command} {no ipv6 address @var{address/prefix}} {}
57: Set the IPv4 or IPv6 address/prefix for the interface.
58: @end deffn
59:
60: @deffn {Interface Command} {ip address @var{address/prefix} secondary} {}
61: @deffnx {Interface Command} {no ip address @var{address/prefix} secondary} {}
62: Set the secondary flag for this address. This causes ospfd to not treat the
63: address as a distinct subnet.
64: @end deffn
65:
66: @deffn {Interface Command} {description @var{description} ...} {}
67: Set description for the interface.
68: @end deffn
69:
70: @deffn {Interface Command} {multicast} {}
71: @deffnx {Interface Command} {no multicast} {}
72: Enable or disables multicast flag for the interface.
73: @end deffn
74:
75: @deffn {Interface Command} {bandwidth <1-10000000>} {}
76: @deffnx {Interface Command} {no bandwidth <1-10000000>} {}
77: Set bandwidth value of the interface in kilobits/sec. This is for
78: calculating OSPF cost. This command does not affect the actual device
79: configuration.
80: @end deffn
81:
82: @deffn {Interface Command} {link-detect} {}
83: @deffnx {Interface Command} {no link-detect} {}
84: Enable/disable link-detect on platforms which support this. Currently
85: only Linux and Solaris, and only where network interface drivers support reporting
86: link-state via the IFF_RUNNING flag.
87: @end deffn
88:
89: @node Static Route Commands
90: @section Static Route Commands
91:
92: Static routing is a very fundamental feature of routing technology. It
93: defines static prefix and gateway.
94:
95: @deffn Command {ip route @var{network} @var{gateway}} {}
96: @var{network} is destination prefix with format of A.B.C.D/M.
97: @var{gateway} is gateway for the prefix. When @var{gateway} is
98: A.B.C.D format. It is taken as a IPv4 address gateway. Otherwise it
99: is treated as an interface name. If the interface name is @var{null0} then
100: zebra installs a blackhole route.
101:
102: @example
103: ip route 10.0.0.0/8 10.0.0.2
104: ip route 10.0.0.0/8 ppp0
105: ip route 10.0.0.0/8 null0
106: @end example
107:
108: First example defines 10.0.0.0/8 static route with gateway 10.0.0.2.
109: Second one defines the same prefix but with gateway to interface ppp0. The
110: third install a blackhole route.
111: @end deffn
112:
113: @deffn Command {ip route @var{network} @var{netmask} @var{gateway}} {}
114: This is alternate version of above command. When @var{network} is
115: A.B.C.D format, user must define @var{netmask} value with A.B.C.D
116: format. @var{gateway} is same option as above command
117:
118: @example
119: ip route 10.0.0.0 255.255.255.0 10.0.0.2
120: ip route 10.0.0.0 255.255.255.0 ppp0
121: ip route 10.0.0.0 255.255.255.0 null0
122: @end example
123:
124: These statements are equivalent to those in the previous example.
125: @end deffn
126:
127: @deffn Command {ip route @var{network} @var{gateway} @var{distance}} {}
128: Installs the route with the specified distance.
129: @end deffn
130:
131: Multiple nexthop static route
132:
133: @example
134: ip route 10.0.0.1/32 10.0.0.2
135: ip route 10.0.0.1/32 10.0.0.3
136: ip route 10.0.0.1/32 eth0
137: @end example
138:
139: If there is no route to 10.0.0.2 and 10.0.0.3, and interface eth0
140: is reachable, then the last route is installed into the kernel.
141:
142: If zebra has been compiled with multipath support, and both 10.0.0.2 and
143: 10.0.0.3 are reachable, zebra will install a multipath route via both
144: nexthops, if the platform supports this.
145:
146: @example
147: zebra> show ip route
148: S> 10.0.0.1/32 [1/0] via 10.0.0.2 inactive
149: via 10.0.0.3 inactive
150: * is directly connected, eth0
151: @end example
152:
153: @example
154: ip route 10.0.0.0/8 10.0.0.2
155: ip route 10.0.0.0/8 10.0.0.3
156: ip route 10.0.0.0/8 null0 255
157: @end example
158:
159: This will install a multihop route via the specified next-hops if they are
160: reachable, as well as a high-metric blackhole route, which can be useful to
161: prevent traffic destined for a prefix to match less-specific routes (eg
162: default) should the specified gateways not be reachable. Eg:
163:
164: @example
165: zebra> show ip route 10.0.0.0/8
166: Routing entry for 10.0.0.0/8
167: Known via "static", distance 1, metric 0
168: 10.0.0.2 inactive
169: 10.0.0.3 inactive
170:
171: Routing entry for 10.0.0.0/8
172: Known via "static", distance 255, metric 0
173: directly connected, Null0
174: @end example
175:
176: @deffn Command {ipv6 route @var{network} @var{gateway}} {}
177: @deffnx Command {ipv6 route @var{network} @var{gateway} @var{distance}} {}
178: These behave similarly to their ipv4 counterparts.
179: @end deffn
180:
181:
182: @deffn Command {table @var{tableno}} {}
183: Select the primary kernel routing table to be used. This only works
184: for kernels supporting multiple routing tables (like GNU/Linux 2.2.x
185: and later). After setting @var{tableno} with this command,
186: static routes defined after this are added to the specified table.
187: @end deffn
1.1.1.3 ! misho 188:
! 189: @node Multicast RIB Commands
! 190: @section Multicast RIB Commands
! 191:
! 192: The Multicast RIB provides a separate table of unicast destinations which
! 193: is used for Multicast Reverse Path Forwarding decisions. It is used with
! 194: a multicast source's IP address, hence contains not multicast group
! 195: addresses but unicast addresses.
! 196:
! 197: This table is fully separate from the default unicast table. However,
! 198: RPF lookup can include the unicast table.
! 199:
! 200: WARNING: RPF lookup results are non-responsive in this version of Quagga,
! 201: i.e. multicast routing does not actively react to changes in underlying
! 202: unicast topology!
! 203:
! 204: @deffn Command {ip multicast rpf-lookup-mode @var{mode}} {}
! 205: @deffnx Command {no ip multicast rpf-lookup-mode [@var{mode}]} {}
! 206:
! 207: @var{mode} sets the method used to perform RPF lookups. Supported modes:
! 208:
! 209: @table @samp
! 210: @item urib-only
! 211: Performs the lookup on the Unicast RIB. The Multicast RIB is never used.
! 212: @item mrib-only
! 213: Performs the lookup on the Multicast RIB. The Unicast RIB is never used.
! 214: @item mrib-then-urib
! 215: Tries to perform the lookup on the Multicast RIB. If any route is found,
! 216: that route is used. Otherwise, the Unicast RIB is tried.
! 217: @item lower-distance
! 218: Performs a lookup on the Multicast RIB and Unicast RIB each. The result
! 219: with the lower administrative distance is used; if they're equal, the
! 220: Multicast RIB takes precedence.
! 221: @item longer-prefix
! 222: Performs a lookup on the Multicast RIB and Unicast RIB each. The result
! 223: with the longer prefix length is used; if they're equal, the
! 224: Multicast RIB takes precedence.
! 225: @end table
! 226:
! 227: The @code{mrib-then-urib} setting is the default behavior if nothing is
! 228: configured. If this is the desired behavior, it should be explicitly
! 229: configured to make the configuration immune against possible changes in
! 230: what the default behavior is.
! 231:
! 232: WARNING: Unreachable routes do not receive special treatment and do not
! 233: cause fallback to a second lookup.
! 234: @end deffn
! 235:
! 236: @deffn Command {show ip rpf @var{addr}} {}
! 237:
! 238: Performs a Multicast RPF lookup, as configured with
! 239: @command{ip multicast rpf-lookup-mode @var{mode}}. @var{addr} specifies
! 240: the multicast source address to look up.
! 241:
! 242: @example
! 243: > show ip rpf 192.0.2.1
! 244: Routing entry for 192.0.2.0/24 using Unicast RIB
! 245: Known via "kernel", distance 0, metric 0, best
! 246: * 198.51.100.1, via eth0
! 247: @end example
! 248:
! 249: Indicates that a multicast source lookup for 192.0.2.1 would use an
! 250: Unicast RIB entry for 192.0.2.0/24 with a gateway of 198.51.100.1.
! 251: @end deffn
! 252:
! 253: @deffn Command {show ip rpf} {}
! 254:
! 255: Prints the entire Multicast RIB. Note that this is independent of the
! 256: configured RPF lookup mode, the Multicast RIB may be printed yet not
! 257: used at all.
! 258: @end deffn
! 259:
! 260: @deffn Command {ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}
! 261: @deffnx Command {no ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}
! 262:
! 263: Adds a static route entry to the Multicast RIB. This performs exactly as
! 264: the @command{ip route} command, except that it inserts the route in the
! 265: Multicast RIB instead of the Unicast RIB.
! 266: @end deffn
! 267:
1.1 misho 268:
269: @node zebra Route Filtering
270: @section zebra Route Filtering
271: Zebra supports @command{prefix-list} and @command{route-map} to match
272: routes received from other quagga components. The
273: @command{permit}/@command{deny} facilities provided by these commands
274: can be used to filter which routes zebra will install in the kernel.
275:
276: @deffn Command {ip protocol @var{protocol} route-map @var{routemap}} {}
277: Apply a route-map filter to routes for the specified protocol. @var{protocol}
278: can be @b{any} or one of
279: @b{system},
280: @b{kernel},
281: @b{connected},
282: @b{static},
283: @b{rip},
284: @b{ripng},
285: @b{ospf},
286: @b{ospf6},
287: @b{isis},
288: @b{bgp},
289: @b{hsls}.
290: @end deffn
291:
292: @deffn {Route Map} {set src @var{address}}
293: Within a route-map, set the preferred source address for matching routes
294: when installing in the kernel.
295: @end deffn
296:
297: @example
298: The following creates a prefix-list that matches all addresses, a route-map
299: that sets the preferred source address, and applies the route-map to all
300: @command{rip} routes.
301:
302: @group
303: ip prefix-list ANY permit 0.0.0.0/0 le 32
304: route-map RM1 permit 10
305: match ip address prefix-list ANY
306: set src 10.0.0.1
307:
308: ip protocol rip route-map RM1
309: @end group
310: @end example
311:
1.1.1.2 misho 312: @node zebra FIB push interface
313: @section zebra FIB push interface
314:
315: Zebra supports a 'FIB push' interface that allows an external
316: component to learn the forwarding information computed by the Quagga
317: routing suite.
318:
319: In Quagga, the Routing Information Base (RIB) resides inside
320: zebra. Routing protocols communicate their best routes to zebra, and
321: zebra computes the best route across protocols for each prefix. This
322: latter information makes up the Forwarding Information Base
323: (FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
324: the kernel to forward packets according to the routes computed by
325: Quagga. The kernel FIB is updated in an OS-specific way. For example,
326: the @code{netlink} interface is used on Linux, and route sockets are
327: used on FreeBSD.
328:
329: The FIB push interface aims to provide a cross-platform mechanism to
330: support scenarios where the router has a forwarding path that is
331: distinct from the kernel, commonly a hardware-based fast path. In
332: these cases, the FIB needs to be maintained reliably in the fast path
333: as well. We refer to the component that programs the forwarding plane
334: (directly or indirectly) as the Forwarding Plane Manager or FPM.
335:
336: The FIB push interface comprises of a TCP connection between zebra and
337: the FPM. The connection is initiated by zebra -- that is, the FPM acts
338: as the TCP server.
339:
340: The relevant zebra code kicks in when zebra is configured with the
341: @code{--enable-fpm} flag. Zebra periodically attempts to connect to
342: the well-known FPM port. Once the connection is up, zebra starts
343: sending messages containing routes over the socket to the FPM. Zebra
344: sends a complete copy of the forwarding table to the FPM, including
345: routes that it may have picked up from the kernel. The existing
346: interaction of zebra with the kernel remains unchanged -- that is, the
347: kernel continues to receive FIB updates as before.
348:
349: The format of the messages exchanged with the FPM is defined by the
350: file @file{fpm/fpm.h} in the quagga tree.
351:
352: The zebra FPM interface uses replace semantics. That is, if a 'route
353: add' message for a prefix is followed by another 'route add' message,
354: the information in the second message is complete by itself, and
355: replaces the information sent in the first message.
356:
357: If the connection to the FPM goes down for some reason, zebra sends
358: the FPM a complete copy of the forwarding table(s) when it reconnects.
359:
1.1 misho 360: @node zebra Terminal Mode Commands
361: @section zebra Terminal Mode Commands
362:
363: @deffn Command {show ip route} {}
364: Display current routes which zebra holds in its database.
365:
366: @example
367: @group
368: Router# show ip route
369: Codes: K - kernel route, C - connected, S - static, R - RIP,
370: B - BGP * - FIB route.
371:
372: K* 0.0.0.0/0 203.181.89.241
373: S 0.0.0.0/0 203.181.89.1
374: C* 127.0.0.0/8 lo
375: C* 203.181.89.240/28 eth0
376: @end group
377: @end example
378: @end deffn
379:
380: @deffn Command {show ipv6 route} {}
381: @end deffn
382:
383: @deffn Command {show interface} {}
384: @end deffn
385:
386: @deffn Command {show ip prefix-list [@var{name}]} {}
387: @end deffn
388:
389: @deffn Command {show route-map [@var{name}]} {}
390: @end deffn
391:
392: @deffn Command {show ip protocol} {}
393: @end deffn
394:
395: @deffn Command {show ipforward} {}
396: Display whether the host's IP forwarding function is enabled or not.
397: Almost any UNIX kernel can be configured with IP forwarding disabled.
398: If so, the box can't work as a router.
399: @end deffn
400:
401: @deffn Command {show ipv6forward} {}
402: Display whether the host's IP v6 forwarding is enabled or not.
403: @end deffn
1.1.1.2 misho 404:
405: @deffn Command {show zebra fpm stats} {}
406: Display statistics related to the zebra code that interacts with the
407: optional Forwarding Plane Manager (FPM) component.
408: @end deffn
409:
410: @deffn Command {clear zebra fpm stats} {}
411: Reset statistics related to the zebra code that interacts with the
412: optional Forwarding Plane Manager (FPM) component.
413: @end deffn
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>