Name Last Update
CHANGES Loading commit data...
LICENCE Loading commit data...
Makefile Loading commit data...
README Loading commit data...
babel.c Loading commit data...
babel.h Loading commit data...
babel.man Loading commit data...
kernel.c Loading commit data...
kernel.h Loading commit data...
kernel_netlink.c Loading commit data...
kernel_socket.c Loading commit data...
message.c Loading commit data...
message.h Loading commit data...
neighbour.c Loading commit data...
neighbour.h Loading commit data...
net.c Loading commit data...
net.h Loading commit data...
route.c Loading commit data...
route.h Loading commit data...
source.c Loading commit data...
source.h Loading commit data...
util.c Loading commit data...
util.h Loading commit data...
xroute.c Loading commit data...
xroute.h Loading commit data...
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