@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 {Babel Command} {protocol group @var{group}} {}
@deffnx {Babel Command} {protocol port @var{port}} {}
Specify the multicast group and UDP port used for Babel traffic.  The
default is to use group @code{ff02::1:6} and port 6696, as allocated
by IANA.  (Note that RFC6126 specifies a port number that has been
obsoleted after publication.)
@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} {passive-interface}
@deffnx {Interface Command} {no 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, even on passive interfaces.
@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

