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>