README 4.53 KB
Newer Older
1 2
Babel
*****
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
3

4
Babel is a loop-avoiding distance-vector routing protocol roughly
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
5
based on HSDV and AODV, but with provisions for link cost estimation
6
and redistribution of routes from other routing protocols.
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
7 8 9 10 11 12 13 14


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

  $ make
  $ su -c 'make install'

15 16 17 18
If compiling for OpenWRT, you will probably want to say something like

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

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
19

20
Setting up an IPv6 network for use with Babel
21
***************************************
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
22

23 24
1. Choose a prefix
==================
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
25

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
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
===========================

78
  $ babel -X $IPv6 0 $IPv6 eth1
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
79 80

If your node has multiple interfaces which you want to participate in
81
the Babel network, just list them all:
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
82

83
  # babel -X $IPv6 0 $IPv6 eth0 eth1 sit1
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
84

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
85
If your node has multiple addresses and you want all of them to
86 87
participate in the routing protocol, just repeat the ``-X'' option
multiple times:
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
88

89
  # babel -X $IPv6 0 -X $IPv6-2 0 -X $IPv6-3 0 $IPv6 eth1
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
90

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
91 92
On a gateway to the Internet, you'll want to redistribute some or all
of your routes into the mesh network:
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
93

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
94
  # babel -X $IPv6 0 -C 'redistribute metric 128' $IPv6 eth1
Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
95 96 97 98 99

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's avatar
Juliusz Chroboczek committed
100

101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

Setting up an IPv4 network for use with Babel
*********************************************

1. Choose an IPv4 address for every node
========================================

Unless you already have a numbering plan in place, you will probably
want to choose adresses in 192.168.0.0/16:

  IPv4=192.168.19.68

Of course, the IPv4 address for each node must be unique in your network.

2. Set up the interfaces
=========================

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

You will need to manually number all of the interfaces that
participate in IPv4 routing -- unlike IPv6, IPv4 routing doesn't
support unnumbered interfaces.

  # ip link set eth1 up
  # ip addr add $IPv4 dev eth1

You don't need to set a netmask -- the default netmask of /32
(255.255.255.255) is fine for use with Babel.  Also note that you may
set the same IPv4 address on all interfaces of a given node.

2. Start the routing daemon
===========================

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
135
  # babel -X $IPv4 0 $IPv4 eth1
136

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
137
On a network gateway, you will want to redistribute some routes:
138

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
139
  # babel -X $IPv4 0 -C 'redistribute metric 128' $IPv4 eth0 eth1
140 141 142 143 144 145 146 147 148 149


Setting up a dual-stack network for use with Babel
**************************************************

Babel is designed to efficiently route both IPv6 and IPv4 at the same
time; a single route update may contain both IPv6 and IPv4 routes.

On an ordinary node, you will run Babel as

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
150
  # babel -X $IPv6 0 -X $IPv4 0 $IPv6 eth1
151

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
152
and on a gateway:
153

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
154
  # babel -X $IPv6 0 -X $IPv4 0 -C 'redistribute metric 128' $IPv6 eth1
155 156 157 158

If you use ahcpd, you will want to add the following to
/etc/ahcp/ahcp-babel-options:

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
159
  -X 192.168.19.68 0
160

Juliusz Chroboczek's avatar
Juliusz Chroboczek committed
161
                                        Juliusz Chroboczek