@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} (the default) is always correct, but may
cause slower convergence and extra routing traffic.
@end deffn

@deffn {Interface Command} {babel split-horizon}
@deffnx {Interface Command} {no babel split-horizon}
Specifies whether to perform split-horizon on the interface.
Specifying @code{no babel split-horizon} (the default) is always
correct, while @code{babel split-horizon} is an optimisation that
should only be used on symmetric and transitive (wired) networks.
@end deffn

@deffn {Interface Command} {babel hello-interval <20-655340>}
Specifies the time in milliseconds between two scheduled hellos.  On
wired links, Babel notices a link failure within two hello intervals;
on wireless links, the link quality value is reestimated at every
hello interval.  The default is 4000@dmn{ms}.
@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.  The default
is 20000@dmn{ms}.
@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.  The default is 2000@dmn{ms}.  You
probably don't want to tweak this 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

