@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 parameters} {}
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 babel @var{kind}} {}
@deffnx {Babel Command} {no debug babel @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

