@c -*-texinfo-*-
@c This is part of the Quagga Manual.
@c @value{COPYRIGHT_STR}
@c See file quagga.texi for copying conditions.
@node Babel
@chapter Babel

Babel is an interior gateway protocol that is suitable both for wired
networks and for wireless mesh networks.  Babel has been described as
``RIP on speed'' --- it is based on the same principles as RIP, but
includes a number of refinements that make it react much faster to
topology changes without ever counting to infinity, and allow it to
perform reliable link quality estimation on wireless links.  Babel is
a double-stack routing protocol, meaning that a single Babel instance
is able to perform routing for both IPv4 and IPv6.

Quagga implements Babel as described in RFC6126.

@menu
* Configuring babeld::          
* Babel configuration::         
* Babel redistribution::        
* Show Babel information::      
* Babel debugging commands::    
@end menu

@node Configuring babeld, Babel configuration, Babel, Babel
@section Configuring babeld

The @command{babeld} daemon can be invoked with any of the common
options (@pxref{Common Invocation Options}).

The @command{zebra} daemon must be running before @command{babeld} is
invoked. Also, if @command{zebra} is restarted then @command{babeld}
must be too.

Configuration of @command{babeld} is done in its configuration file
@file{babeld.conf}.

@node Babel configuration, Babel redistribution, Configuring babeld, Babel
@section Babel configuration

@deffn Command {router babel} {}
@deffnx Command {no router babel} {}
Enable or disable Babel routing.
@end deffn

@deffn {Babel Command} {network @var{ifname}} {}
@deffnx {Babel Command} {no network @var{ifname}} {}
Enable or disable Babel on the given interface.
@end deffn

@deffn {Interface Command} {babel wired} {}
@deffnx {Interface Command} {babel wireless} {}
Specifies whether this interface is wireless, which disables a number
of optimisations that are only correct on wired interfaces.
Specifying @code{wireless} is always correct, but may cause extra
routing overhead.  The default is autodetected if possible,
@code{wireless} otherwise.
@end deffn

@deffn {Interface Command} {babel split-horizon}
@deffnx {Interface Command} {no babel split-horizon}
Specifies whether to perform split-horizon on the interface.  Default
is @code{babel split-horizon} on wired interfaces, and @code{no babel
split-horizon} on wireless interfaces.  Please note that performing split
horizon on wireless interfaces is not correct in general, and may lead
to communication failures.
@end deffn

@deffn {Interface Command} {babel passive-interface}
@deffnx {Interface Command} {no babel passive-interface}
Specifies whether this interface is passive.  Note that this is
a little weaker than RIP's notion of passive interface, since Babel
always sends Hello packets and announces redistributed routes, even on
passive interfaces.
@end deffn

@deffn {Interface Command} {babel hello-interval <20-655340>}
Specifies the time in milliseconds between two scheduled hellos.
Babel notices a link failure within two hello intervals on wired
links; on wireless links, the link quality value is reestimated at
every hello interval.
@end deffn

@deffn {Interface Command} {babel update-interval <20-655340>}
Specifies the time in milliseconds between two scheduled updates.
Since Babel makes extensive use of triggered updates, this can be
set to fairly high values on links with little packet loss.
@end deffn

@deffn {Babel Command} {babel resend-delay <20-655340>}
Specifies the time in milliseconds after which an ``important''
request or update will be resent.  This is a global, not per-interface
value.
@end deffn

@node Babel redistribution, Show Babel information, Babel configuration, Babel
@section Babel redistribution

@deffn {Babel command} {redistribute @var{kind}}
@deffnx {Babel command} {no redistribute @var{kind}}
Specify which kind of routes should be redistributed into Babel.
@end deffn

@node Show Babel information, Babel debugging commands, Babel redistribution, Babel
@section Show Babel information

@deffn {Command} {show babel database} {}
@deffnx {Command} {show babel interface} {}
@deffnx {Command} {show babel neighbour} {}
@deffnx {Command} {show babel running-config} {}
These commands dump various parts of @command{babeld}'s internal
state.  They are mostly useful for troubleshooting.
@end deffn

@node Babel debugging commands,  , Show Babel information, Babel
@section Babel debugging commands

@deffn {Babel Command} {debug @var{kind}} {}
@deffnx {Babel Command} {no debug @var{kind}} {}
Enable or disable debugging messages of a given kind.  @var{kind} can
be one of @samp{common}, @samp{kernel}, @samp{filter}, @samp{timeout},
@samp{interface}, @samp{route} or @samp{all}.  Note that if you have
compiled with the NO_DEBUG flag, then these commands aren't available.
@end deffn

