@node Zebra
@chapter Zebra

@c SYNOPSIS
@command{zebra} is an IP routing manager.  It provides kernel routing
table updates, interface lookups, and redistribution of routes between
different routing protocols.

@menu
* Invoking zebra::              Running the program
* Interface Commands::          Commands for zebra interfaces
* Static Route Commands::       Commands for adding static routes
* Multicast RIB Commands::      Commands for controlling MRIB behavior
* zebra Route Filtering::       Commands for zebra route filtering
* zebra FIB push interface::    Interface to optional FPM component
* zebra Terminal Mode Commands::  Commands for zebra's VTY
@end menu


@node Invoking zebra
@section Invoking zebra

Besides the common invocation options (@pxref{Common Invocation Options}), the
@command{zebra} specific invocation options are listed below.

@table @samp
@item -b
@itemx --batch
Runs in batch mode.  @command{zebra} parses configuration file and terminates
immediately.

@item -k
@itemx --keep_kernel
When zebra starts up, don't delete old self inserted routes.

@item -r
@itemx --retain
When program terminates, retain routes added by zebra.

@end table

@node Interface Commands
@section Interface Commands

@deffn Command {interface @var{ifname}} {}
@end deffn

@deffn {Interface Command} {shutdown} {}
@deffnx {Interface Command} {no shutdown} {}
Up or down the current interface.
@end deffn

@deffn {Interface Command} {ip address @var{address/prefix}} {}
@deffnx {Interface Command} {ipv6 address @var{address/prefix}} {}
@deffnx {Interface Command} {no ip address @var{address/prefix}} {}
@deffnx {Interface Command} {no ipv6 address @var{address/prefix}} {}
Set the IPv4 or IPv6 address/prefix for the interface.
@end deffn

@deffn {Interface Command} {ip address @var{address/prefix} secondary} {}
@deffnx {Interface Command} {no ip address @var{address/prefix} secondary} {}
Set the secondary flag for this address. This causes ospfd to not treat the
address as a distinct subnet.
@end deffn

@deffn {Interface Command} {description @var{description} ...} {}
Set description for the interface.
@end deffn

@deffn {Interface Command} {multicast} {}
@deffnx {Interface Command} {no multicast} {}
Enable or disables multicast flag for the interface.
@end deffn

@deffn {Interface Command} {bandwidth <1-10000000>} {}
@deffnx {Interface Command} {no bandwidth <1-10000000>} {}
Set bandwidth value of the interface in kilobits/sec.  This is for 
calculating OSPF cost. This command does not affect the actual device 
configuration.
@end deffn

@deffn {Interface Command} {link-detect} {}
@deffnx {Interface Command} {no link-detect} {}
Enable/disable link-detect on platforms which support this. Currently 
only Linux and Solaris, and only where network interface drivers support reporting
link-state via the IFF_RUNNING flag.
@end deffn

@node Static Route Commands
@section Static Route Commands

Static routing is a very fundamental feature of routing technology.  It
defines static prefix and gateway.

@deffn Command {ip route @var{network} @var{gateway}} {}
@var{network} is destination prefix with format of A.B.C.D/M.
@var{gateway} is gateway for the prefix.  When @var{gateway} is
A.B.C.D format.  It is taken as a IPv4 address gateway.  Otherwise it
is treated as an interface name. If the interface name is @var{null0} then
zebra installs a blackhole route.

@example
ip route 10.0.0.0/8 10.0.0.2
ip route 10.0.0.0/8 ppp0
ip route 10.0.0.0/8 null0
@end example

First example defines 10.0.0.0/8 static route with gateway 10.0.0.2.
Second one defines the same prefix but with gateway to interface ppp0. The
third install a blackhole route.
@end deffn

@deffn Command {ip route @var{network} @var{netmask} @var{gateway}} {}
This is alternate version of above command.  When @var{network} is
A.B.C.D format, user must define @var{netmask} value with A.B.C.D
format.  @var{gateway} is same option as above command

@example
ip route 10.0.0.0 255.255.255.0 10.0.0.2
ip route 10.0.0.0 255.255.255.0 ppp0
ip route 10.0.0.0 255.255.255.0 null0
@end example

These statements are equivalent to those in the previous example.
@end deffn

@deffn Command {ip route @var{network} @var{gateway} @var{distance}} {}
Installs the route with the specified distance.
@end deffn

Multiple nexthop static route

@example
ip route 10.0.0.1/32 10.0.0.2
ip route 10.0.0.1/32 10.0.0.3
ip route 10.0.0.1/32 eth0
@end example

If there is no route to 10.0.0.2 and 10.0.0.3, and interface eth0
is reachable, then the last route is installed into the kernel.

If zebra has been compiled with multipath support, and both 10.0.0.2 and
10.0.0.3 are reachable, zebra will install a multipath route via both
nexthops, if the platform supports this.

@example
zebra> show ip route
S>  10.0.0.1/32 [1/0] via 10.0.0.2 inactive
                      via 10.0.0.3 inactive
  *                   is directly connected, eth0
@end example

@example
ip route 10.0.0.0/8 10.0.0.2
ip route 10.0.0.0/8 10.0.0.3
ip route 10.0.0.0/8 null0 255
@end example

This will install a multihop route via the specified next-hops if they are
reachable, as well as a high-metric blackhole route, which can be useful to
prevent traffic destined for a prefix to match less-specific routes (eg
default) should the specified gateways not be reachable. Eg:

@example
zebra> show ip route 10.0.0.0/8             
Routing entry for 10.0.0.0/8
  Known via "static", distance 1, metric 0
    10.0.0.2 inactive
    10.0.0.3 inactive

Routing entry for 10.0.0.0/8
  Known via "static", distance 255, metric 0
    directly connected, Null0
@end example

@deffn Command {ipv6 route @var{network} @var{gateway}} {}
@deffnx Command {ipv6 route @var{network} @var{gateway} @var{distance}} {}
These behave similarly to their ipv4 counterparts.
@end deffn


@deffn Command {table @var{tableno}} {}
Select the primary kernel routing table to be used.  This only works
for kernels supporting multiple routing tables (like GNU/Linux 2.2.x
and later).  After setting @var{tableno} with this command, 
static routes defined after this are added to the specified table.
@end deffn

@node Multicast RIB Commands
@section Multicast RIB Commands

The Multicast RIB provides a separate table of unicast destinations which
is used for Multicast Reverse Path Forwarding decisions.  It is used with
a multicast source's IP address, hence contains not multicast group
addresses but unicast addresses.

This table is fully separate from the default unicast table.  However,
RPF lookup can include the unicast table.

WARNING: RPF lookup results are non-responsive in this version of Quagga,
i.e. multicast routing does not actively react to changes in underlying
unicast topology!

@deffn Command {ip multicast rpf-lookup-mode @var{mode}} {}
@deffnx Command {no ip multicast rpf-lookup-mode [@var{mode}]} {}

@var{mode} sets the method used to perform RPF lookups.  Supported modes:

@table @samp
@item urib-only
Performs the lookup on the Unicast RIB.  The Multicast RIB is never used.
@item mrib-only
Performs the lookup on the Multicast RIB.  The Unicast RIB is never used.
@item mrib-then-urib
Tries to perform the lookup on the Multicast RIB.  If any route is found,
that route is used.  Otherwise, the Unicast RIB is tried.
@item lower-distance
Performs a lookup on the Multicast RIB and Unicast RIB each.  The result
with the lower administrative distance is used;  if they're equal, the
Multicast RIB takes precedence.
@item longer-prefix
Performs a lookup on the Multicast RIB and Unicast RIB each.  The result
with the longer prefix length is used;  if they're equal, the
Multicast RIB takes precedence.
@end table

WARNING: Unreachable routes do not receive special treatment and do not
cause fallback to a second lookup.
@end deffn

@deffn Command {show ip rpf @var{addr}} {}

Performs a Multicast RPF lookup, as configured with
@command{ip multicast rpf-lookup-mode @var{mode}}.  @var{addr} specifies
the multicast source address to look up.

@example
> show ip rpf 192.0.2.1
Routing entry for 192.0.2.0/24 using Unicast RIB
  Known via "kernel", distance 0, metric 0, best
  * 198.51.100.1, via eth0
@end example

Indicates that a multicast source lookup for 192.0.2.1 would use an
Unicast RIB entry for 192.0.2.0/24 with a gateway of 198.51.100.1.
@end deffn

@deffn Command {show ip rpf} {}

Prints the entire Multicast RIB.  Note that this is independent of the
configured RPF lookup mode, the Multicast RIB may be printed yet not
used at all.
@end deffn

@deffn Command {ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}
@deffnx Command {no ip mroute @var{prefix} @var{nexthop} [@var{distance}]} {}

Adds a static route entry to the Multicast RIB.  This performs exactly as
the @command{ip route} command, except that it inserts the route in the
Multicast RIB instead of the Unicast RIB.
@end deffn


@node zebra Route Filtering
@section zebra Route Filtering
Zebra supports @command{prefix-list} and @command{route-map} to match
routes received from other quagga components.  The
@command{permit}/@command{deny} facilities provided by these commands
can be used to filter which routes zebra will install in the kernel.

@deffn Command {ip protocol @var{protocol} route-map @var{routemap}} {}
Apply a route-map filter to routes for the specified protocol. @var{protocol}
can be @b{any} or one of
@b{system},
@b{kernel},
@b{connected},
@b{static},
@b{rip},
@b{ripng},
@b{ospf},
@b{ospf6},
@b{isis},
@b{bgp},
@b{hsls}.
@end deffn

@deffn {Route Map} {set src @var{address}}
Within a route-map, set the preferred source address for matching routes
when installing in the kernel.
@end deffn

@example
The following creates a prefix-list that matches all addresses, a route-map
that sets the preferred source address, and applies the route-map to all
@command{rip} routes.

@group
ip prefix-list ANY permit 0.0.0.0/0 le 32
route-map RM1 permit 10
     match ip address prefix-list ANY
     set src 10.0.0.1

ip protocol rip route-map RM1
@end group
@end example

@node zebra FIB push interface
@section zebra FIB push interface

Zebra supports a 'FIB push' interface that allows an external
component to learn the forwarding information computed by the Quagga
routing suite.

In Quagga, the Routing Information Base (RIB) resides inside
zebra. Routing protocols communicate their best routes to zebra, and
zebra computes the best route across protocols for each prefix. This
latter information makes up the Forwarding Information Base
(FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
the kernel to forward packets according to the routes computed by
Quagga. The kernel FIB is updated in an OS-specific way. For example,
the @code{netlink} interface is used on Linux, and route sockets are
used on FreeBSD.

The FIB push interface aims to provide a cross-platform mechanism to
support scenarios where the router has a forwarding path that is
distinct from the kernel, commonly a hardware-based fast path. In
these cases, the FIB needs to be maintained reliably in the fast path
as well. We refer to the component that programs the forwarding plane
(directly or indirectly) as the Forwarding Plane Manager or FPM.

The FIB push interface comprises of a TCP connection between zebra and
the FPM. The connection is initiated by zebra -- that is, the FPM acts
as the TCP server.

The relevant zebra code kicks in when zebra is configured with the
@code{--enable-fpm} flag. Zebra periodically attempts to connect to
the well-known FPM port. Once the connection is up, zebra starts
sending messages containing routes over the socket to the FPM. Zebra
sends a complete copy of the forwarding table to the FPM, including
routes that it may have picked up from the kernel. The existing
interaction of zebra with the kernel remains unchanged -- that is, the
kernel continues to receive FIB updates as before.

The format of the messages exchanged with the FPM is defined by the
file @file{fpm/fpm.h} in the quagga tree.

The zebra FPM interface uses replace semantics. That is, if a 'route
add' message for a prefix is followed by another 'route add' message,
the information in the second message is complete by itself, and
replaces the information sent in the first message.

If the connection to the FPM goes down for some reason, zebra sends
the FPM a complete copy of the forwarding table(s) when it reconnects.

@node zebra Terminal Mode Commands
@section zebra Terminal Mode Commands

@deffn Command {show ip route} {}
Display current routes which zebra holds in its database.

@example
@group
Router# show ip route 
Codes: K - kernel route, C - connected, S - static, R - RIP, 
       B - BGP * - FIB route.

K* 0.0.0.0/0              203.181.89.241
S  0.0.0.0/0              203.181.89.1
C* 127.0.0.0/8            lo
C* 203.181.89.240/28      eth0
@end group
@end example
@end deffn

@deffn Command {show ipv6 route} {}
@end deffn

@deffn Command {show interface} {}
@end deffn

@deffn Command {show ip prefix-list [@var{name}]} {}
@end deffn

@deffn Command {show route-map [@var{name}]} {}
@end deffn

@deffn Command {show ip protocol} {}
@end deffn

@deffn Command {show ipforward} {}
Display whether the host's IP forwarding function is enabled or not.
Almost any UNIX kernel can be configured with IP forwarding disabled.
If so, the box can't work as a router.
@end deffn

@deffn Command {show ipv6forward} {}
Display whether the host's IP v6 forwarding is enabled or not.
@end deffn

@deffn Command {show zebra fpm stats} {}
Display statistics related to the zebra code that interacts with the
optional Forwarding Plane Manager (FPM) component.
@end deffn

@deffn Command {clear zebra fpm stats} {}
Reset statistics related to the zebra code that interacts with the
optional Forwarding Plane Manager (FPM) component.
@end deffn
