Babel
*****

Babel is a loop-avoiding distance-vector routing protocol roughly
based on HSDV and AODV, but with provisions for link cost estimation
and redistribution of routes from other routing protocols.


Installation
************

  $ make
  $ su -c 'make install'

If compiling for OpenWRT, you will probably want to say something like

  $ make CC=mipsel-linux-gcc PLATFORM_DEFINES='-march=mips32'


Setting up a network for use with Babel
***************************************

1. Choose a prefix
==================

You will want your mesh network to run on a single /64 prefix.  If
you've already got IPv6 routing with the rest of the Internet (either
native or using 6to4) and you've got a /64 to spare, use that.

If you don't, you can generate a random prefix.  RFC 4193 defines how
such prefixes are generated.  The simplest way to make sure that you
follow the rules is to use the utility ``ahcp-generate-address'',
which you'll find in the AHCP package.

  $ ahcp-generate-address -p -r
  fdf0:bb4:f192::

This needs to be done only once for the network; the following steps
need to be repeated for every node.


2. Choose a host number
=======================

You will need to choose a unique host number for every node.  You can
number your nodes sequentially (fdf0:bb4:f192::1, fdf0:bb4:f192::2,
etc.), generate a node number from the interface's MAC address, or
choose it randomly.  Again, ``ahcp-generate-address'' knows the rules.

  $ ip -0 addr show dev eth1
  3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ieee1394 00:11:d8:00:00:12:34:56 brd ff:ff:ff:ff:ff:ff:ff:ff
  $ ahcp-generate-address fdf0:bb4:f192:: 00:11:d8:00:00:12:34:56
  fdf0:bb4:f192:0:211:d8ff:fe00:12

This is your IPv6 address; save it for later use.

  $ IPv6=fdf0:bb4:f192:0:211:d8ff:fe00:12


3. Set up the interface
=======================

Set up the MAC layer's parameters first:

  $ iwconfig eth1 mode ad-hoc channel 11
  $ iwconfig eth essid "my-wireless-network"

Then the network layer:

  $ ip link set eth1 up
  $ ip -6 addr add $IPv6 dev eth1


4. Start the routing daemon
===========================

  $ babel -X $IPv6 0 $IPv6 eth1

If your node has multiple interfaces which you want to participate in
the Babel network, just list them all:

  # babel -X $IPv6 0 $IPv6 eth0 eth1 sit1

If your node has multiple addresses and you want all of them to
participate in the routing protocol, just repeat the ``-X'' option
multiple times:

  # babel -X $IPv6 0 -X $IPv6-2 0 -X $IPv6-3 0 $IPv6 eth1

On a gateway to the Internet, you'll want to redistribute the default
route into the mesh network:

  # babel -X $IPv6 0 -x default 256 $IPv6 eth1

If you find all of this too complicated and error-prone (as I do), you
may want to consider autoconfiguring your routing domain using AHCP:

  http://www.pps.jussieu.fr/~jch/software/ahcp/

                                        Juliusz Chroboczek