B.A.T.M.A.N., a "Better Approach To Mobile Ad-hoc Networking", is an alternative to OLSR. The current implementation is "batman-adv", which works on the Layer 2. This makes the network look like "one big switch". You can use whatever layer 3 protocol on top of that (ipv4, ipv6, ipx, etc.).

Prérequis

On assume que les étapes suivantes ont été faites avec succès:

  1. Flashing de votre routeur (avec trunk pour OpenWRT, voir ci-bas)
  2. Configuration du mode ad-hoc

Installer et configurer BATMAN

OpenWRT

Ceci est un résumé de l'excellent Guide d'installation de BATMAN sur OpenWRT.

[!] Important: il faut utiliser une version récente de OpenWRT (trunk au moment d'écrire ces lignes) pour obtenir de bons résultats (BATMAN 2012). Voir flashing pour plus d'informations sur l'architecture à utiliser. backfire n'est pas compatible.

Pour installer batman-adv:

opkg update
opkg install kmod-batman-adv

(!) Si l'installation cause problème (prend trop de temps, donne erreur de mémoire insuffisante), alors il faut télécharger "à la main" le paquet et sa dépendance (kmod-lib-crc16 dans trunk et kmod-crc16 dans backfire). Il faut trouver l'URL du paquet et faire quelque chose comme ceci pour un Linksys WRT54g: (Les URLs de cet exemple ne sont plus valide, voir la page manual-package-install pour une version plus à jour.)

    cd /tmp
    touch /tmp/opkg.conf
    opkg -f /tmp/opkg.conf install http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages/kmod-lib-crc16_3.2.13-1_brcm47xx.ipk \
        http://downloads.openwrt.org/snapshots/trunk/brcm47xx/packages/kmod-batman-adv_3.2.13+2012.0.0-1_brcm47xx.ipk

Voir flashing pour plus d'informations sur l'architecture à utiliser.

Changement du MTU de l'interface wifi:

uci set network.wlan0.mtu=1528

[!] Il n'est pas clair que ceci est réellement nécessaire.

Configuration de l'interface de batman.

uci set network.bat0=interface
uci set network.bat0.ifname=bat0
uci set network.bat0.proto=none
uci set network.bat0.mtu=1500

The 'lan' bridge can be configured to add bat0 as well as eth0:

uci set network.lan.ifname="eth0 bat0"

(!) The above may be eth0.0 instead of eth0. For linksys it's eth0.0, for ubiquity it's eth0. Look at the output of ifconfig to see what's the eth0 interface.

Tell batman to use the wireless interface and the local bridge:

uci set batman-adv.bat0.interfaces="wlan0 br-lan"

Reboot the router

uci commit
reboot & exit

(!) Il est possible de garder le reboot pour la dernière étape de la configuration si vous avez d'autres configurations à faire.

Debian

Sous Debian/Ubuntu, installer le package Debian pour batctl, qui permet de gérer le module kernel inclus dans Linux:

sudo apt-get install -t squeeze-backports batctl linux-image

(!) Ceci demande un backport de batctl et un kernel Linux 3.2 qui fournit le module kernel 2012.1 utilisée dans OpenWRT.

Si la commande ci-haut met à jour votre noyau, il faut redémarrer la machine.

reboot

Activer le module kernel.

modprobe batman-adv

Suivre ensuite la configuration manuelle ci-bas.

Arch linux

On besoin de l'AUR (pour des instructions pour l'installation d'un AUR, voir https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages)

# modprobe batman_adv
$ yaourt -S batctl

Suivre ensuite la configuration manuelle ci-bas.

DD-WRT

Il semble possible d'installer batman-adv sur DD-WRT, mais c'est probablement juste une ancienne version, comme le montre la dernière version du CHANGELOG. À essayer!

Configuration manuelle

Toutes les plateformes peuvent être configurées manuellement avec ces instructions, qui devront être configurés dans un script de démarrage éventuellement.

Ajouter une interface physique à batman:

ifconfig wlan0 mtu 1528 up
batctl if add wlan0

(!) Notez comment le MTU est augmenté à cause des messages de protocole de BATMAN.

Activer l'interface:

ifconfig bat0 up

L'interface doit ensuite être configurée

Étape suivante

Faire la configuration IP.

Use our bat-hosts

You may have noticed that batctl tcpdump and other commands display MAC addresses, and tried to match these adresses to your network interfaces. Do no more! You can use our ?bat-hosts file to let batman display nice, user-friendly names (such as 'boulette', our very first Ubiquiti "Bullet").

Troubleshooting

Informations générales

En général, batman ou le mode ad-hoc affiche régulièrement des messages kernel, on peut y accéder par:

dmesg | tail

ou:

tail -f /var/log/messages

Afficher l'état des interfaces

Ceci doit indiquer qu'une interface est up, par exemple:

batctl if

Doit produire quelquchose comme:

wlan0: active

Afficher les nodes voisins

Un autre outil important est la liste des "originators":

batctl o

Ceci doit lister d'autres nodes, par exemple:

[B.A.T.M.A.N. adv 2012.0.0, MainIF/MAC: wlan0/00:15:6d:da:d3:65 (bat0)]
  Originator      last-seen (#/255)           Nexthop [outgoingIF]:   Potential nexthops ...
00:1c:10:22:02:ae    0.930s   (215) 00:1c:10:22:02:ae [     wlan0]: 00:1c:10:22:02:ae (215)

exemple, ci-haut, de boulette qui voit carton...

Autres commandes utiles pour voir les nodes locales (mesh seulement) ou toutes les nodes accessibles via le mesh (global):

batctl translocal
batctl transglobal

Tester la connectivité

Même si on a pas d'adresse IP configurée, on peut faire des "pings" en utilisant les adresses MAC:

batctl tcpdump wlan0
batctl ping 00:11:22:33:44:55
batctl traceroute 00:11:22:33:44:55

Références