123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- @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
- @menu
- * Standard Commands::
- * Link Parameters Commands::
- @end menu
- @node Standard Commands
- @subsection Standard 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 Link Parameters Commands
- @subsection Link Parameters Commands
- @deffn {Interface Command} {link-params} {}
- @deffnx {Interface Command} {no link-param} {}
- Enter into the link parameters sub node. At least 'enable' must be set to activate the link parameters,
- and consequently Traffic Engineering on this interface. MPLS-TE must be enable at the OSPF (@ref{OSPF Traffic Engineering})
- or ISIS (@ref{ISIS Traffic Engineering}) router level in complement to this.
- Disable link parameters for this interface.
- @end deffn
- Under link parameter statement, the following commands set the different TE values:
- @deffn link-params {enable}
- Enable link parameters for this interface.
- @end deffn
- @deffn link-params {metric <0-4294967295>} {}
- @deffnx link-params {max-bw @var{bandwidth}} {}
- @deffnx link-params {max-rsv-bw @var{bandwidth}} {}
- @deffnx link-params {unrsv-bw <0-7> @var{bandwidth}} {}
- @deffnx link-params {admin-grp @var{bandwidth}} {}
- These commands specifies the Traffic Engineering parameters of the interface in conformity to RFC3630 (OSPF)
- or RFC5305 (ISIS).
- There are respectively the TE Metric (different from the OSPF or ISIS metric), Maximum Bandwidth (interface speed
- by default), Maximum Reservable Bandwidth, Unreserved Bandwidth for each 0-7 priority and Admin Group (ISIS) or
- Resource Class/Color (OSPF).
- Note that @var{bandwidth} are specified in IEEE floating point format and express in Bytes/second.
- @end deffn
- @deffn link-param {delay <0-16777215> [min <0-16777215> | max <0-16777215>]} {}
- @deffnx link-param {delay-variation <0-16777215>} {}
- @deffnx link-param {packet-loss @var{percentage}} {}
- @deffnx link-param {res-bw @var{bandwidth}} {}
- @deffnx link-param {ava-bw @var{bandwidth}} {}
- @deffnx link-param {use-bw @var{bandwidth}} {}
- These command specifies additionnal Traffic Engineering parameters of the interface in conformity to
- draft-ietf-ospf-te-metrics-extension-05.txt and draft-ietf-isis-te-metrics-extension-03.txt. There are
- respectively the delay, jitter, loss, available bandwidth, reservable bandwidth and utilized bandwidth.
- Note that @var{bandwidth} are specified in IEEE floating point format and express in Bytes/second.
- Delays and delay variation are express in micro-second (µs). Loss is specified in @var{percentage} ranging
- from 0 to 50.331642% by step of 0.000003.
- @end deffn
- @deffn link-param {neighbor <A.B.C.D> as <0-65535>} {}
- @deffnx link-param {no neighbor} {}
- Specifies the remote ASBR IP address and Autonomous System (AS) number for InterASv2 link in OSPF (RFC5392).
- Note that this option is not yet supported for ISIS (RFC5316).
- @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.0.0.0 10.0.0.2
- ip route 10.0.0.0 255.0.0.0 ppp0
- ip route 10.0.0.0 255.0.0.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
- The @code{mrib-then-urib} setting is the default behavior if nothing is
- configured. If this is the desired behavior, it should be explicitly
- configured to make the configuration immune against possible changes in
- what the default behavior is.
- 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
- 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.
- @example
- @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 encapsulation header for the messages exchanged with the FPM is
- defined by the file @file{fpm/fpm.h} in the quagga tree. The routes
- themselves are encoded in netlink or protobuf format, with netlink
- being the default.
- Protobuf is one of a number of new serialization formats wherein the
- message schema is expressed in a purpose-built language. Code for
- encoding/decoding to/from the wire format is generated from the
- schema. Protobuf messages can be extended easily while maintaining
- backward-compatibility with older code. Protobuf has the following
- advantages over netlink:
- @itemize
- @item
- Code for serialization/deserialization is generated
- automatically. This reduces the likelihood of bugs, allows third-party
- programs to be integrated quickly, and makes it easy to add fields.
- @item
- The message format is not tied to an OS (Linux), and can be evolved
- independently.
- @end itemize
- As mentioned before, zebra encodes routes sent to the FPM in netlink
- format by default. The format can be controlled via the
- @code{--fpm_format} command-line option to zebra, which currently
- takes the values @code{netlink} and @code{protobuf}.
- 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
|