Difference between revisions of "Wireless Battle Mesh"

From Tmplab
(Channel: 1, ESSID: wbm2009-olsr, BSSID: CA:CA:FE:CA:CA:20, IP: 192.168.20.0/24)
(Call for Participants)
 
(94 intermediate revisions by 9 users not shown)
Line 1: Line 1:
 +
[[Image:DSC00007.JPG|400px]]
 +
hackers preparing
 +
 +
[[Image:DSC00008.JPG|400px]] and flashing linksyses
 +
 +
[[Image:Olsr_viz.tgz]] battlemesh topology (partial)
 +
 
== Call for Participants ==
 
== Call for Participants ==
  
Line 14: Line 21:
 
* OLSR : IP-based mesh routing platform (http://olsr.org and OpenWrt package available)
 
* OLSR : IP-based mesh routing platform (http://olsr.org and OpenWrt package available)
 
* BATMAN : Layer2-based mesh protocol (http://open-mesh.org) and available as a kernel module for Linux and packaged in OpenWrt
 
* BATMAN : Layer2-based mesh protocol (http://open-mesh.org) and available as a kernel module for Linux and packaged in OpenWrt
* BABEL : Layer-3 mesh protocol developed by University Paris 6, available for Linux and packaged in OpenWrt (http://www.pps.jussieu.fr/~jch/software/babel/)
+
* BABEL : Layer-3 mesh protocol developed by University Paris 7, available for Linux and packaged in OpenWrt (http://www.pps.jussieu.fr/~jch/software/babel/)
  
 
Concerning the hardware node, we are looking for hardware sponsors that could enjoy this “real-case” contest by providing 50-100 nodes to the event. This sponsor will be actually displayed on the organization website as well as during the event. The feedbacks for the hardware manufacturers can be not only from the users but also from the network community running real-case test (academic- or community-wide).
 
Concerning the hardware node, we are looking for hardware sponsors that could enjoy this “real-case” contest by providing 50-100 nodes to the event. This sponsor will be actually displayed on the organization website as well as during the event. The feedbacks for the hardware manufacturers can be not only from the users but also from the network community running real-case test (academic- or community-wide).
Line 116: Line 123:
 
* wprobe
 
* wprobe
 
* snmpd
 
* snmpd
 +
 +
A local repository containing all the packages has been deployed on [http://ska.lab.tmplab.org ska]
  
 
== Wireless configuration ==
 
== Wireless configuration ==
Line 219: Line 228:
  
 
Nodes have been flashed with custom firmware images:
 
Nodes have been flashed with custom firmware images:
  - root password is set to 'wbm2009'
+
  - root password is set to 'wbm2009' (but not on all routers *g)
 
  - pubkey ssh authentication is enabled, keys are available here: http://ska.lan.tmplab.org/ssh/
 
  - pubkey ssh authentication is enabled, keys are available here: http://ska.lan.tmplab.org/ssh/
 +
- to do passwordless login from one node to the next, you may use [[Image:Battle_ssh.tgz]] (contains above key in dropbear format)
 
  - LAN configuration was not changed and default to 192.168.1.1/24
 
  - LAN configuration was not changed and default to 192.168.1.1/24
 
  - Default wireless configuration is:
 
  - Default wireless configuration is:
Line 226: Line 236:
 
   - mode: adhoc
 
   - mode: adhoc
 
   - encryption: none
 
   - encryption: none
 +
 +
When using ssh with same key and different hosts, it might be convenient to add the following in /etc/ssh/ssh_config:
 +
<pre>
 +
StrictHostKeyChecking no
 +
UserKnownHostsFile /dev/null
 +
</pre>
  
 
=== Wireless IP adresses ===
 
=== Wireless IP adresses ===
Line 232: Line 248:
 
<pre>
 
<pre>
 
root@OpenWrt:~# uci set network.wifi.ipaddr="192.168.44.x"; uci commit
 
root@OpenWrt:~# uci set network.wifi.ipaddr="192.168.44.x"; uci commit
 +
</pre>
 +
 +
you can set th hostname that way:
 +
<pre>
 +
root@OpenWrt:~# sysctl -w kernel.hostname=olsr2.wrt
 +
root@olsr2:~# uci set system.@system[0].hostname=olsr2.wrt; uci commit
 
</pre>
 
</pre>
 
00:18:84:21:6B:8C
 
00:18:84:21:6B:8C
Line 238: Line 260:
 
==== Channel: 1, ESSID: wbm2009-olsr, BSSID: CA:CA:FE:CA:CA:20, IP: 192.168.20.0/24 ====
 
==== Channel: 1, ESSID: wbm2009-olsr, BSSID: CA:CA:FE:CA:CA:20, IP: 192.168.20.0/24 ====
  
  * 00:0F:66:24:E9:D0, 00:0F:66:24:E9:D2, 192.168.20.1, WRT54G v1.1
+
  * 00:0F:66:24:E9:D0, 00:0F:66:24:E9:D2, 192.168.20.1, WRT54G v1.1 , iperf(tcp:5001)
 
  * 00:1A:70:FD:4B:03, 00:1A:70:FD:4B:05, 192.168.20.2, WRT54GL v1.1
 
  * 00:1A:70:FD:4B:03, 00:1A:70:FD:4B:05, 192.168.20.2, WRT54GL v1.1
 +
* 00:16:B6:01:5F:DF, 00:16:B6:01:5F:E1, 192.168.20.3, WRT54GL v1.1
 +
* 00:16:B6:01:5F:E5, 00:16:B6:01:5F:E7, 192.168.20.4, WRT54GS v4
 +
* 00:16:B6:01:66:87, 00:16:B6:01:66:89, 192.168.20.5, WRT54GS v4  , iperf(tcp:5001)
 +
* 00:14:BF:E2:B5:3F, 00:14:BF:E2:B5:41, 192.168.20.6, WRT54GS v4  , iperf(tcp:5001)
 +
* 00:12:17:DF:A7:28, 00:12:17:DF:A7:2A, 192.168.20.7, WRT54GS v1.1, iperf(tcp:5001)
 +
* 00:14:BF:A5:B9:4C, 00:14:BF:A5:B9:4E, 192.168.20.8, WRT54GS v4  , iperf(tcp:5001)
 +
* 00:16:B6:01:5F:DC, 00:16:B6:01:5F:DE, 192.168.20.9, WRT54GS v4
 +
* 00:16:B6:01:57:CF, 00:16:B6:01:57:D1, 192.168.20.10, WRT54GS v4
 +
* 00:16:B6:01:5F:E8, 00:16:B6:01:5F:EA, 192.168.20.11, WRT54GS v4,  iperf(tcp:5001)
 +
* 00:14:BF:D2:65:9E, 00:14:BF:D2:65:A0, 192.168.20.12, WRT54GL
 +
* 00:14:BF:D2:65:86, 00:14:BF:D2:65:88, 192.168.20.13, WRT54GL,    iperf(tcp:5001)
 +
* 00:11:D8:58:9E:92,                  , 192.168.20.14, ASUSWLHDD
 +
* 00:11:D8:43:6B:5D,                  , 192.168.20.15, ASUSWLHDD
 +
* 00:11:D8:58:9C:84,                  , 192.168.20.16, ASUSWLHDD
 +
* 00:16:B6:D9:25:B7, 00:16:B6:D9:25:B9, 192.168.20.17, WRT54GL
 +
* 00:11:D8:58:9D:94,                  , 192.168.20.18, ASUSWLHDD
 +
* 00:11:D8:58:A0:A0,                  , 192.168.20.19, ASUSWLHDD
 +
* 00:11:D8:58:9D:7B,                  , 192.168.20.20, ASUSWLHDD
 +
* 00:16:B6:40:DE:3E, 00:16:B6:40:DE:40, 192.168.20.21, WRT54GL
 +
* 00:13:D4:D2:09:24,                  , 192.168.20.22, ASUSWLHDD
 +
* 00:18:84:00:70:13,                  , 192.168.20.23, FONERA
 +
* 00:18:84:22:A2:DC,                  , 192.168.20.24, FONERA
 +
* 00:18:84:27:19:5C,                  , 192.168.20.25, FONERA
 +
* 00:18:84:21:6B:8C,                  , 192.168.20.26, FONERA, iperf(tcp:5001)
 +
* 00:18:84:1C:EB:28,                  , 192.168.20.27, FONERA, iperf(tcp:5001)
 +
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP
  
==== Channel: 6, ESSID: wbm2009-babel, BSSID: CA:CA:FE:CA:CA:230, IP: 192.168.30.0/24 ====
+
==== Channel: 6, ESSID: wbm2009-babel, BSSID: CA:CA:FE:CA:CA:30, IP: 192.168.30.0/24 ====
 +
 
 +
* 00:18:84:27:7E:E0, 00:18:84:27:7E:E1, 192.168.30.2, Fonera (dzeta)
 +
* 00:18:84:28:90:78, 00:18:84:28:90:79, 192.168.30.3, Fonera (eta)
 +
* 00:16:B6:40:F2:CC, 00:16:B6:40:F2:CE, 192.168.30.4, WRT54GL
 +
* 00:16:B6:40:F2:C0, 00:16:B6:40:F2:C2, 192.168.30.5, WRT54GL
 +
* 00:18:39:BC:39:54, 00:18:39:BC:39:56, 192.168.30.6, WRT54GL
 +
* 00:16:B6:41:02:8C, 00:16:B6:41:02:8E, 192.168.30.7, WRT54GL
 +
* 00:16:B6:40:F2:D5, 00:16:B6:40:F2:D7, 192.168.30.8, WRT54GL
 +
* 00:16:B6:40:F2:DB, 00:16:B6:40:F2:DD, 192.168.30.9, WRT54GL
 +
* 00:0F:66:C7:C0:AD, 00:0F:66:C7:C0:AF, 192.168.30.10, WRT54GS
 +
* 00:14:bf:d2:65:86,                  , 192.168.30.11, WRT54GL
 +
* 00:14:bf:d2:65:9e,                  , 192.168.30.12, WRT54GL
 +
* 00:11:D8:43:6A:27,                  , 192.168.30.14, ASUSWLHDD
 +
* 00:11:2F:9D:1B:E4,                  , 192.168.30.15, ASUSWLHDD
 +
* 00:11:D8:58:9D:9A,                  , 192.168.30.16, ASUSWLHDD
 +
* 00:14:bf:d2:6c:04,                  , 192.168.30.17, WRT54GL
 +
* 00:11:D8:58:9D:10,                  , 192.168.30.18, ASUSWLHDD
 +
* 00:11:D8:43:6A:C9,                  , 192.168.30.19, ASUSWLHDD
 +
* 00:11:D8:13:D4:D2,                  , 192.168.30.20, ASUSWLHDD
 +
* 00:11:D8:58:9F:1D,                  , 192.168.30.22, ASUSWLHDD
 +
* 00:18:84:25:69:50,                  , 192.168.30.23, Fonera
 +
* 00:18:84:25:df:50,                  , 192.168.30.24, Fonera
 +
* 00:18:84:28:90:78,                  , 192.168.30.26, Fonera
 +
* 00:18:84:25:1A:60,                  , 192.168.30.27, Fonera
 +
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP
 +
 
 +
CONFLICTING (find it and change ip) :
 +
* 00:1F:C6:62:28:0F, 00:1F:C6:62:28:0F, 192.168.30.25, Asus WL-500Gpv2
  
 
==== Channel: 11, ESSID: wbm2009-batman, BSSID: CA:CA:FE:CA:CA:40, IP: 192.168.40.0/24  ====
 
==== Channel: 11, ESSID: wbm2009-batman, BSSID: CA:CA:FE:CA:CA:40, IP: 192.168.40.0/24  ====
 +
 +
* 192.168.40.1,  00:0F:66:24:EE:2F, WRT54G
 +
* 192.168.40.2,  00:14:BF:BF:E6:5C, WRT54G v3.1, iperf(tcp:5001)
 +
* 192.168.40.3,  00:12:17:26:EB:84, WRT54G v2
 +
* 192.168.40.5,  00:13:10:30:21:9G, WRT54GS 1.1, iperf(tcp:5001)
 +
* 192.168.40.6,  00:16:B6:40:F9:F2, WRT54GLgl 1.1
 +
* 192.168.40.7,  00:14:BF:D2:65:A1, WRT54GL,    iperf(tcp:5001)
 +
* 192.168.40.8,  00:16:B6:40:F2:C6, WRT54GL
 +
* 192.168.40.9,  00:0F:66:C7:B9:6F, WRT54GS
 +
* 192.168.40.10, 00:16:B6:40:F2:C3, WRT54GL
 +
* 192.168.40.11, 00:16:B6:40:F2:D8, WRT54GL
 +
* 192.168.40.13, 00:16:B6:40:F2:D2, WRT54GL
 +
* 192.168.40.14, 00:15:f2:32:f0:84, ASUS WLHDD
 +
* 192.168.40.15, 00:11:D8:58:9F:6E, ASUS WLHDD
 +
* 192.168.40.16, 00:13:D4:D2:09:01, ASUS WLHDD
 +
* 192.168.40.18, 00:11:D8:58:A0:9F, ASUS WLHDD
 +
* 192.168.40.19, 00:11:D8:58:9E:b9, ASUS WLHDD
 +
* 192.168.40.20, 00:11:D8:58:9e:75, ASUS WLHDD
 +
* 192.168.40.21, 00:11:2F:9D:15:86, ASUS WL500GD
 +
* 192.168.40.23, 00:18:84:1C:F7:4C, Fonera
 +
* 192.168.40.24, 00:18:84:25:28:E4, Fonera
 +
* 192.168.40.25, 00:18:84:13:A5:50, Fonera
 +
* 192.168.40.26, 00:18:84:12:F7:2C, Fonera
 +
* 192.168.40.27, 00:18:84:11:A1:E4, Fonera,      iperf(tcp:5001)
 +
* 192.168.40.xx, 00:10:72:88:7F:BE, WRT54GS
 +
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP
  
 
==== Channel: 1, ESSID: wbm2009, IP: 192.168.44.x/24 ====
 
==== Channel: 1, ESSID: wbm2009, IP: 192.168.44.x/24 ====
Line 252: Line 354:
 
  * 00:16:B6:D9:25:B7, 00:16:B6:D9:25:B9, 192.168.44.104, WRT54GL
 
  * 00:16:B6:D9:25:B7, 00:16:B6:D9:25:B9, 192.168.44.104, WRT54GL
 
  * 00:16:B6:40:F2:D5, 00:16:B6:40:F2:D7, 192.168.44.105, WRT54GL
 
  * 00:16:B6:40:F2:D5, 00:16:B6:40:F2:D7, 192.168.44.105, WRT54GL
* 00:16:B6:40:F2:DB, 00:16:B6:40:F2:DD, 192.168.44.106, WRT54GL
 
 
  * 00:16:B6:40:F2:C0, 00:16:B6:40:F2:C2, 192.168.44.107, WRT54GL
 
  * 00:16:B6:40:F2:C0, 00:16:B6:40:F2:C2, 192.168.44.107, WRT54GL
 
  * 00:16:B6:40:F9:F2, 00:16:B6:40:F9:F4, 192.168.44.108, WRT54GL
 
  * 00:16:B6:40:F9:F2, 00:16:B6:40:F9:F4, 192.168.44.108, WRT54GL
Line 279: Line 380:
 
  * 00:12:17:DF:A7:28, 00:12:17:DF:A7:2A, 192.168.44.131, WRT54GS v1.1
 
  * 00:12:17:DF:A7:28, 00:12:17:DF:A7:2A, 192.168.44.131, WRT54GS v1.1
 
  * 00:0F:66:24:EE:2F, 00:0F:66:24:EE:31, 192.168.44.133, WRT54G v1.1
 
  * 00:0F:66:24:EE:2F, 00:0F:66:24:EE:31, 192.168.44.133, WRT54G v1.1
* 00:14:BF:BF:E6:5A, 00:14:BF:BF:E6:5C, 192.168.44.134, WRT54G v3.1
 
 
  * 00:12:17:26:EB:84, 00:12:17:26:EB:86, 192.168.44.135, WRT54G v2
 
  * 00:12:17:26:EB:84, 00:12:17:26:EB:86, 192.168.44.135, WRT54G v2
 
  * 00:18:84:25:69:50, 00:18:84:25:69:51, 192.168.44.136, Fonera
 
  * 00:18:84:25:69:50, 00:18:84:25:69:51, 192.168.44.136, Fonera
Line 296: Line 396:
 
  * 00:11:2F:9D:15:98, 00:11:2F:9D:15:98, 192.168.44.149, WL500GD
 
  * 00:11:2F:9D:15:98, 00:11:2F:9D:15:98, 192.168.44.149, WL500GD
 
  * 00:11:2F:9D:15:43, 00:11:2F:9D:15:43, 192.168.44.150, WL500GD
 
  * 00:11:2F:9D:15:43, 00:11:2F:9D:15:43, 192.168.44.150, WL500GD
 +
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP
 +
 +
== Layer 2 measurement ==
 +
 +
As with '''any''' Wifi Network - layer 2 is the most important. If layer 2 does not work properly, there is little sense in working with any layer 3 routing protocol: it would not work anyway.
 +
So here is a script which can interpret the iwconfig command on broadcom based systems (linksys WRT54G* etc):
 +
 +
How to use the script:
 +
  while $TRUE; do
 +
    for h in $hosts; do
 +
      ssh $h iwconfig wl0 >> $outfile
 +
    done
 +
    sleep 1
 +
  done
 +
 +
 +
 +
=== script for broadcom iwconfig ===
 +
<pre>
 +
#!/usr/bin/perl
 +
# Copyright 2009 (C) by L. Aaron Kaplan <aaron@lo-res.org> all rights reserved
 +
#
 +
 +
use strict;
 +
use Time::HiRes;
 +
 +
# format iwconfig
 +
#wl0      IEEE 802.11-DS  ESSID:"wbm2009-olsr" 
 +
#          Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: CA:CA:FE:CA:CA:20 
 +
#          Bit Rate=54 Mb/s  Tx-Power:32 dBm 
 +
#          Retry min limit:7  RTS thr:off  Fragment thr:off
 +
#          Power Management:off
 +
#          Link Quality=5/5  Signal level=-49 dBm  Noise level=-94 dBm
 +
#          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
 +
#          Tx excessive retries:2  Invalid misc:0  Missed beacon:0
 +
 +
my $essid;
 +
my $mode;
 +
my $cell;
 +
my $freq;
 +
my $bitrate;
 +
my $txpower;
 +
my $radio_lq;
 +
my $signal;
 +
my $noise;
 +
my $ts;
 +
 +
my $debug = 0;
 +
$ts = Time::HiRes::time;
 +
print "ts = $ts, localtims(ts)=" . localtime($ts) . "\n" if $debug;
 +
 +
while (<>) {
 +
    my $line = $_;
 +
    chomp($line);
 +
 +
#      if ($line =~ /^$/) { last; }        # done
 +
 +
        if ($line =~ /ESSID:\"([^\"]+)/) {
 +
                $essid = $1;
 +
        }
 +
 +
 
 +
        if ($line =~ /Mode:\s*([^ ]+)/) {
 +
                $mode = $1;
 +
        }
 +
        if ($line =~ /Frequency:\s*([^ ]+)\s*GHz/) {
 +
                $freq = $1;
 +
        }
 +
        if ($line =~ /Cell:\s*([^ ]+)/) {
 +
                $cell = $1;
 +
        }
 +
        if ($line =~ /Bit Rate=\s*([^ ]+)\s*Mb\/s/) {
 +
                $bitrate = $1;
 +
        }
 +
        if ($line =~ /Tx-Power:\s*([^ ]+)\s*dBm/) {
 +
                $txpower = $1;
 +
        }
 +
        if ($line =~ /Link Quality=\s*([^ ]+)/) {
 +
                $radio_lq = $1;
 +
        }
 +
        if ($line =~ /Signal level=\s*([^ ]+)/) {
 +
                $signal = $1;
 +
        }
 +
        if ($line =~ /Noise level=\s*([^ ]+)/) {
 +
                $noise = $1;
 +
        }
 +
 +
}
 +
 +
 +
print <<EOT;
 +
timestamp;ESSID;mode;cell;freq;bitrate;txpower;radio_lq;signal;noise
 +
$ts;$essid;$mode;$cell;$freq;$bitrate;$txpower;$radio_lq;$signal;$noise
 +
EOT
 +
 +
</pre>
 +
 +
=== Data Gathering ===
 +
 +
Here's the script that was used on 3 Fonera 2202 to collect tcpdump raw capture files on USB sticks:
 +
<pre>
 +
#!/bin/sh /etc/rc.common
 +
# Copyright (C) 2009 OpenWrt.org
 +
 +
START=99
 +
STOP=99
 +
 +
DATA_DIR=/mnt/usbdrive
 +
DUMP_FILE=$(mktemp $DATA_DIR/tcpdump-XXXXXXXX)
 +
PID_FILE=/var/run/tcpdump.pid
 +
IF=$(uci get network.wifi.ifname)
 +
 +
start() {
 +
local i=1
 +
while [ ! -d $DATA_DIR ]; do
 +
sleep 1
 +
[ $i -ge 9 ] && exit 0
 +
i=$(($i + 1))
 +
done
 +
tcpdump -i $IF -w $DUMP_FILE -s 0 >/dev/null 2>&1 &
 +
echo $! >$PID_FILE
 +
}
 +
 +
stop() {
 +
[ -f $PID_FILE ] && {
 +
kill -TERM $(cat $PID_FILE)
 +
rm -f $PID_FILE
 +
}
 +
}
 +
</pre>

Latest revision as of 19:04, 13 April 2009

Error creating thumbnail: File missing

hackers preparing

Error creating thumbnail: File missing
and flashing linksyses

File:Olsr viz.tgz battlemesh topology (partial)

Call for Participants

We are pleased to announce that the /tmp/lab will be organizing a Spring Wireless OpenWrt Mesh Contest called “Wireless Battle Mesh” during 2 days (April 11-12th) with the goal of building 3 wireless mesh networks based on embedded hardware running OpenWrt and different concurrent mesh routing protocols.

The targeted architecture will be 3 networks of 25nodes + 1 wireless management network (10-20 nodes) to achieve realistic size of nodes number, data traffic, configuration problems. The architecture will be set-up indoor and outdoor around the building of the /tmp/lab.

OpenWrt will be the selected for the BoardSupportPackage running on the different hardware nodes and a core network configuration will be built on Linux servers with user-friendly features such as :

  • VLANs
  • Captive portal
  • Authentication
  • Admin portal

Concerning the mesh-protocols, selected targeted protocols are :

Concerning the hardware node, we are looking for hardware sponsors that could enjoy this “real-case” contest by providing 50-100 nodes to the event. This sponsor will be actually displayed on the organization website as well as during the event. The feedbacks for the hardware manufacturers can be not only from the users but also from the network community running real-case test (academic- or community-wide).

The TMPLAB core team.

Agenda

  • Friday, April 10th, 8 pm : welcoming of the first people coming and flashing of the node and configuration of the nodes
  • Sat, April 11th :
    • Morning : setting up the nodes on-site and validation of the different subnets
    • Afternoon : first series of tests and measurements with fixed nodes
  • Sun 12th :
    • Morning : second series of tests and measurement with fixed and mobile nodes (laptops)
    • Afternoon : Optimization of the protocols and Conclusion

Evaluation

Criterion

We will evaluate the routing protocols using the following criterion :

  • time to setup a node
  • CPU activity
  • network activity
  • convergence time
  • scalability
  • mobile devices handling

Platform

The evaluation platform consits of a SNMP agent which collects graphs from the different nodes using Cacti.

Hardware platforms

We managed to get sponsoring for such hardware :

  • Linksys WRT54G/GS
  • Asus WL500G Deluxe/Premium
  • Fon Fonera

For each protocol 25 nodes will be setup, with the following quantities :

  • FON : 25 nodes
  • HSB : 32 nodes
  • Wireless-fr : 6 nodes
  • Tmplab : 15 nodes
  • BATMAN : 10 nodes
  • Thus0 : 5 nodes

Total : 93 nodes. In case of problems, spare nodes are highly wanted.

Identification

For each and every single node in the network, please prepare stickers containing the following informations :

  • routing protocol in use
  • MAC address of the Wi-Fi interface
  • IP address in the management network
  • Owner
  • hostname (e.g: node 1-babel)

Node parts

Each and every single node consists of the following physical parts:

  • A wireless router (Linksys, Fon, Asus ...)
  • Antennas screwed on the router (no external unless specified)
  • Power supply unit
  • (Battery)

Software platform

The different software versions in use during the Wireless Battle Mesh are :

  • babel-0.94 (and not 0.93 as previously announced), there's also a page about Babel
  • olsrd-0.5.6-r4
  • batman-adv-r1220

OpenWrt should be Kamikaze 8.09. Broadcom-based hardware should be using the brcm-2.4 image while Atheros-based hardware should be using the atheros target. If you need help flashing your devices do not hesitate to poke Florian and Nico about this.

Software configuration

Every node should be configured with the following settings :

  • hostname: node<N>-<routing protocol> (where N can be found using the plan/map and the routing protocol is babel, olsr or batman)
  • user: root
  • password: wbm2009

We would like to be able to monitor the activity of every node, therefore an aditional SNMP configuration should be done with the following settings :

  • version: 2
  • community: wbm2009
  • permissions: ro
  • allow graph disk/flash activity (e.g: disk /)

Package list and repositories

A mirror of the OpenWrt kamikaze 8.09 package repository will be available during the WBM2009. Additionnal packages that we recommend to install are :

  • ntpclient (or busybox's rdate)
  • wprobe
  • snmpd

A local repository containing all the packages has been deployed on ska

Wireless configuration

Each node will be working in Ad-hoc mode using the following settings.

For babel

  • SSID: babel
  • Channel: 1
  • Encryption: none

For Batman

  • SSID: batman
  • Channel: 5
  • Encryption: none

For OLSR

  • SSID: olsr
  • Channel: 11
  • Encryption: none

The resulting /etc/config/wireless is then for Broadcom devices and for a Babel node:

config wifi-device  wl0
        option type     broadcom
        option channel  1

config wifi-iface
        option device   wl0
        option network  wifi
        option mode     adhoc
        option ssid     babel
        option encryption none

For an OLSR node on an Atheros board:

config wifi-device  wifi0
        option type     atheros
        option channel  11

config wifi-iface
        option device   wifi0
        option network  wifi
        option mode     sta
        option ssid     olsr
        option encryption none

Note: we unbridge the LAN interface with the Wi-Fi interface in order to be able to define specific networks on the LAN interface.

Network topology

There will be different subnets corresponding to different purposes.

Protocol wide subnet

This subnet is required for the nodes running a given protocol to work, meaning that the wireless interface in ad-hoc mode must be configured with an address falling within the range defined below:

  • Babel: 192.168.40.0/24
  • Batman: 192.168.30.0/24
  • OLSR: 192.168.20.0/24

An /etc/config/network file for a Babel node looks like this:

#### VLAN configuration
config switch eth0
        option vlan0    "1 2 3 4 5*"
        option vlan1    "0 5"


#### Loopback configuration
config interface loopback
        option ifname   "lo"
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0


#### LAN configuration
config interface lan
        option type     bridge
        option ifname   "eth0.0"
        option proto    static
        option ipaddr   192.168.2.1
        option netmask  255.255.255.0

#### Wi-Fi configuration
config interface wifi
        option ifname   "wl0"
        option proto    static
        option ipaddr   192.168.40.1
        option netmask  255.255.255.0

Setup

Nodes have been flashed with custom firmware images:

- root password is set to 'wbm2009' (but not on all routers *g)
- pubkey ssh authentication is enabled, keys are available here: http://ska.lan.tmplab.org/ssh/
- to do passwordless login from one node to the next, you may use File:Battle ssh.tgz (contains above key in dropbear format)
- LAN configuration was not changed and default to 192.168.1.1/24
- Default wireless configuration is:
  - ssid: wbm2009
  - mode: adhoc
  - encryption: none

When using ssh with same key and different hosts, it might be convenient to add the following in /etc/ssh/ssh_config:

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Wireless IP adresses

you can set the addres this way:

root@OpenWrt:~# uci set network.wifi.ipaddr="192.168.44.x"; uci commit

you can set th hostname that way:

root@OpenWrt:~# sysctl -w kernel.hostname=olsr2.wrt
root@olsr2:~# uci set system.@system[0].hostname=olsr2.wrt; uci commit

00:18:84:21:6B:8C (LAN MAC, WiFi MAC, WiFi IP)

Channel: 1, ESSID: wbm2009-olsr, BSSID: CA:CA:FE:CA:CA:20, IP: 192.168.20.0/24

* 00:0F:66:24:E9:D0, 00:0F:66:24:E9:D2, 192.168.20.1, WRT54G v1.1 , iperf(tcp:5001)
* 00:1A:70:FD:4B:03, 00:1A:70:FD:4B:05, 192.168.20.2, WRT54GL v1.1
* 00:16:B6:01:5F:DF, 00:16:B6:01:5F:E1, 192.168.20.3, WRT54GL v1.1
* 00:16:B6:01:5F:E5, 00:16:B6:01:5F:E7, 192.168.20.4, WRT54GS v4
* 00:16:B6:01:66:87, 00:16:B6:01:66:89, 192.168.20.5, WRT54GS v4  , iperf(tcp:5001)
* 00:14:BF:E2:B5:3F, 00:14:BF:E2:B5:41, 192.168.20.6, WRT54GS v4  , iperf(tcp:5001)
* 00:12:17:DF:A7:28, 00:12:17:DF:A7:2A, 192.168.20.7, WRT54GS v1.1, iperf(tcp:5001)
* 00:14:BF:A5:B9:4C, 00:14:BF:A5:B9:4E, 192.168.20.8, WRT54GS v4  , iperf(tcp:5001)
* 00:16:B6:01:5F:DC, 00:16:B6:01:5F:DE, 192.168.20.9, WRT54GS v4
* 00:16:B6:01:57:CF, 00:16:B6:01:57:D1, 192.168.20.10, WRT54GS v4
* 00:16:B6:01:5F:E8, 00:16:B6:01:5F:EA, 192.168.20.11, WRT54GS v4,  iperf(tcp:5001)
* 00:14:BF:D2:65:9E, 00:14:BF:D2:65:A0, 192.168.20.12, WRT54GL
* 00:14:BF:D2:65:86, 00:14:BF:D2:65:88, 192.168.20.13, WRT54GL,     iperf(tcp:5001)
* 00:11:D8:58:9E:92,                  , 192.168.20.14, ASUSWLHDD
* 00:11:D8:43:6B:5D,                  , 192.168.20.15, ASUSWLHDD
* 00:11:D8:58:9C:84,                  , 192.168.20.16, ASUSWLHDD
* 00:16:B6:D9:25:B7, 00:16:B6:D9:25:B9, 192.168.20.17, WRT54GL
* 00:11:D8:58:9D:94,                  , 192.168.20.18, ASUSWLHDD
* 00:11:D8:58:A0:A0,                  , 192.168.20.19, ASUSWLHDD
* 00:11:D8:58:9D:7B,                  , 192.168.20.20, ASUSWLHDD
* 00:16:B6:40:DE:3E, 00:16:B6:40:DE:40, 192.168.20.21, WRT54GL
* 00:13:D4:D2:09:24,                  , 192.168.20.22, ASUSWLHDD
* 00:18:84:00:70:13,                  , 192.168.20.23, FONERA
* 00:18:84:22:A2:DC,                  , 192.168.20.24, FONERA
* 00:18:84:27:19:5C,                  , 192.168.20.25, FONERA
* 00:18:84:21:6B:8C,                  , 192.168.20.26, FONERA, iperf(tcp:5001)
* 00:18:84:1C:EB:28,                  , 192.168.20.27, FONERA, iperf(tcp:5001)
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP

Channel: 6, ESSID: wbm2009-babel, BSSID: CA:CA:FE:CA:CA:30, IP: 192.168.30.0/24

* 00:18:84:27:7E:E0, 00:18:84:27:7E:E1, 192.168.30.2, Fonera (dzeta)
* 00:18:84:28:90:78, 00:18:84:28:90:79, 192.168.30.3, Fonera (eta)
* 00:16:B6:40:F2:CC, 00:16:B6:40:F2:CE, 192.168.30.4, WRT54GL
* 00:16:B6:40:F2:C0, 00:16:B6:40:F2:C2, 192.168.30.5, WRT54GL
* 00:18:39:BC:39:54, 00:18:39:BC:39:56, 192.168.30.6, WRT54GL
* 00:16:B6:41:02:8C, 00:16:B6:41:02:8E, 192.168.30.7, WRT54GL
* 00:16:B6:40:F2:D5, 00:16:B6:40:F2:D7, 192.168.30.8, WRT54GL
* 00:16:B6:40:F2:DB, 00:16:B6:40:F2:DD, 192.168.30.9, WRT54GL
* 00:0F:66:C7:C0:AD, 00:0F:66:C7:C0:AF, 192.168.30.10, WRT54GS
* 00:14:bf:d2:65:86,                  , 192.168.30.11, WRT54GL
* 00:14:bf:d2:65:9e,                  , 192.168.30.12, WRT54GL
* 00:11:D8:43:6A:27,                  , 192.168.30.14, ASUSWLHDD
* 00:11:2F:9D:1B:E4,                  , 192.168.30.15, ASUSWLHDD
* 00:11:D8:58:9D:9A,                  , 192.168.30.16, ASUSWLHDD
* 00:14:bf:d2:6c:04,                  , 192.168.30.17, WRT54GL
* 00:11:D8:58:9D:10,                  , 192.168.30.18, ASUSWLHDD
* 00:11:D8:43:6A:C9,                  , 192.168.30.19, ASUSWLHDD
* 00:11:D8:13:D4:D2,                  , 192.168.30.20, ASUSWLHDD
* 00:11:D8:58:9F:1D,                  , 192.168.30.22, ASUSWLHDD
* 00:18:84:25:69:50,                  , 192.168.30.23, Fonera
* 00:18:84:25:df:50,                  , 192.168.30.24, Fonera
* 00:18:84:28:90:78,                  , 192.168.30.26, Fonera
* 00:18:84:25:1A:60,                  , 192.168.30.27, Fonera
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP

CONFLICTING (find it and change ip) :

* 00:1F:C6:62:28:0F, 00:1F:C6:62:28:0F, 192.168.30.25, Asus WL-500Gpv2

Channel: 11, ESSID: wbm2009-batman, BSSID: CA:CA:FE:CA:CA:40, IP: 192.168.40.0/24

* 192.168.40.1,  00:0F:66:24:EE:2F, WRT54G
* 192.168.40.2,  00:14:BF:BF:E6:5C, WRT54G v3.1, iperf(tcp:5001)
* 192.168.40.3,  00:12:17:26:EB:84, WRT54G v2
* 192.168.40.5,  00:13:10:30:21:9G, WRT54GS 1.1, iperf(tcp:5001)
* 192.168.40.6,  00:16:B6:40:F9:F2, WRT54GLgl 1.1
* 192.168.40.7,  00:14:BF:D2:65:A1, WRT54GL,     iperf(tcp:5001)
* 192.168.40.8,  00:16:B6:40:F2:C6, WRT54GL
* 192.168.40.9,  00:0F:66:C7:B9:6F, WRT54GS
* 192.168.40.10, 00:16:B6:40:F2:C3, WRT54GL
* 192.168.40.11, 00:16:B6:40:F2:D8, WRT54GL
* 192.168.40.13, 00:16:B6:40:F2:D2, WRT54GL
* 192.168.40.14, 00:15:f2:32:f0:84, ASUS WLHDD
* 192.168.40.15, 00:11:D8:58:9F:6E, ASUS WLHDD
* 192.168.40.16, 00:13:D4:D2:09:01, ASUS WLHDD
* 192.168.40.18, 00:11:D8:58:A0:9F, ASUS WLHDD
* 192.168.40.19, 00:11:D8:58:9E:b9, ASUS WLHDD
* 192.168.40.20, 00:11:D8:58:9e:75, ASUS WLHDD
* 192.168.40.21, 00:11:2F:9D:15:86, ASUS WL500GD
* 192.168.40.23, 00:18:84:1C:F7:4C, Fonera
* 192.168.40.24, 00:18:84:25:28:E4, Fonera
* 192.168.40.25, 00:18:84:13:A5:50, Fonera
* 192.168.40.26, 00:18:84:12:F7:2C, Fonera
* 192.168.40.27, 00:18:84:11:A1:E4, Fonera,      iperf(tcp:5001)
* 192.168.40.xx, 00:10:72:88:7F:BE, WRT54GS
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP

Channel: 1, ESSID: wbm2009, IP: 192.168.44.x/24

* 00:0F:66:C7:C0:AD, 00:0F:66:C7:C0:AF, 192.168.44.101, WRT54GS
* 00:16:B6:40:F2:C6, 00:16:B6:40:F2:C8, 192.168.44.102, WRT54GL
* 00:14:BF:D2:65:A1, 00:14:BF:D2:65:A3, 192.168.44.103, WRT54GL
* 00:16:B6:D9:25:B7, 00:16:B6:D9:25:B9, 192.168.44.104, WRT54GL
* 00:16:B6:40:F2:D5, 00:16:B6:40:F2:D7, 192.168.44.105, WRT54GL
* 00:16:B6:40:F2:C0, 00:16:B6:40:F2:C2, 192.168.44.107, WRT54GL
* 00:16:B6:40:F9:F2, 00:16:B6:40:F9:F4, 192.168.44.108, WRT54GL
* 00:16:B6:40:F2:CF, 00:16:B6:40:F2:D1, 192.168.44.109, WRT54GL
* 00:14:BF:D2:6C:04, 00:14:BF:D2:6C:06, 192.168.44.110, WRT54GL
* 00:16:B6:40:F2:D2, 00:16:B6:40:F2:D4, 192.168.44.111, WRT54GL
* 00:16:B6:40:F2:D8, 00:16:B6:40:F2:DA, 192.168.44.112, WRT54GL
* 00:16:B6:40:F2:CC, 00:16:B6:40:F2:CE, 192.168.44.113, WRT54GL
* 00:16:B6:40:F2:C3, 00:16:B6:40:F2:C5, 192.168.44.114, WRT54GL
* 00:14:BF:D2:65:86, 00:14:BF:D2:65:88, 192.168.44.115, WRT54GL
* 00:14:BF:D2:65:9E, 00:14:BF:D2:65:A0, 192.168.44.116, WRT54GL
* 00:18:39:BC:39:54, 00:18:39:BC:39:56, 192.168.44.117, WRT54GL
* 00:16:B6:41:02:8C, 00:16:B6:41:02:8E, 192.168.44.118, WRT54GL
* 00:16:B6:40:DE:3E, 00:16:B6:40:DE:40, 192.168.44.119, WRT54GL
* 00:1A:70:FD:4B:03, 00:1A:70:FD:4B:05, 192.168.44.120, WRT54GL
* 00:14:BF:E2:B5:3F, 00:14:BF:E2:B5:41, 192.168.44.121, WRT54GS v4
* 00:16:B6:01:66:87, 00:16:B6:01:66:89, 192.168.44.122, WRT54GS v4
* 00:16:B6:01:5F:E5, 00:16:B6:01:5F:E7, 192.168.44.123, WRT54GS v4
* 00:16:B6:01:5F:DF, 00:16:B6:01:5F:E1, 192.168.44.124, WRT54GS v4
* 00:16:B6:01:5F:E8, 00:16:B6:01:5F:EA, 192.168.44.125, WRT54GS v4
* 00:16:B6:01:57:CF, 00:16:B6:01:57:D1, 192.168.44.126, WRT54GS v4
* 00:16:B6:01:5F:DC, 00:16:B6:01:5F:DE, 192.168.44.127, WRT54GS v4
* 00:14:BF:A5:B9:4C, 00:14:BF:A5:B9:4E, 192.168.44.128, WRT54GS v4
* 00:0F:66:C7:B9:6F, 00:0F:66:C7:B9:71, 192.168.44.129, WRT54GS
* 00:13:10:07:EE:FC, 00:13:10:07:EE:FE, 192.168.44.130, WRT54GS v1.1
* 00:12:17:DF:A7:28, 00:12:17:DF:A7:2A, 192.168.44.131, WRT54GS v1.1
* 00:0F:66:24:EE:2F, 00:0F:66:24:EE:31, 192.168.44.133, WRT54G v1.1
* 00:12:17:26:EB:84, 00:12:17:26:EB:86, 192.168.44.135, WRT54G v2
* 00:18:84:25:69:50, 00:18:84:25:69:51, 192.168.44.136, Fonera
* 00:18:84:10:2F:7C, 00:18:84:10:2F:7D, 192.168.44.137, Fonera
* 00:18:84:1C:EB:28, 00:18:84:1C:EB:29, 192.168.44.138, Fonera
* 00:18:84:13:A5:50, 00:18:84:13:A5:51, 192.168.44.139, Fonera
* 00:18:84:12:F7:2C, 00:18:84:12:F7:2D, 192.168.44.140, Fonera
* 00:18:84:21:6B:8C, 00:18:84:21:6B:8D, 192.168.44.141, Fonera
* 00:18:84:27:19:5C, 00:18:84:27:19:5D, 192.168.44.142, Fonera
* 00:18:84:1C:F7:4C, 00:18:84:1C:F7:4D, 192.168.44.143, Fonera
* 00:18:84:25:28:E4, 00:18:84:25:28:E5, 192.168.44.144, Fonera
* 00:18:84:28:90:78, 00:18:84:28:90:79, 192.168.44.145, Fonera
* 00:18:84:25:DF:50, 00:18:84:25:DF:51, 192.168.44.146, Fonera
* 00:18:84:27:7E:E0, 00:18:84:27:7E:E1, 192.168.44.147, Fonera
* 00:11:2F:9D:15:86, 00:11:2F:9D:15:86, 192.168.44.148, WL500GD
* 00:11:2F:9D:15:98, 00:11:2F:9D:15:98, 192.168.44.149, WL500GD
* 00:11:2F:9D:15:43, 00:11:2F:9D:15:43, 192.168.44.150, WL500GD
* XX:XX:XX:XX:XX:XX,                  , 192.168.20.166, LAPTOP

Layer 2 measurement

As with any Wifi Network - layer 2 is the most important. If layer 2 does not work properly, there is little sense in working with any layer 3 routing protocol: it would not work anyway. So here is a script which can interpret the iwconfig command on broadcom based systems (linksys WRT54G* etc):

How to use the script:

 while $TRUE; do
   for h in $hosts; do
     ssh $h iwconfig wl0 >> $outfile
   done
   sleep 1
 done


script for broadcom iwconfig

#!/usr/bin/perl 
# Copyright 2009 (C) by L. Aaron Kaplan <aaron@lo-res.org> all rights reserved
# 

use strict;
use Time::HiRes;

# format iwconfig
#wl0       IEEE 802.11-DS  ESSID:"wbm2009-olsr"  
#          Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: CA:CA:FE:CA:CA:20   
#          Bit Rate=54 Mb/s   Tx-Power:32 dBm   
#          Retry min limit:7   RTS thr:off   Fragment thr:off
#          Power Management:off
#          Link Quality=5/5  Signal level=-49 dBm  Noise level=-94 dBm
#          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
#          Tx excessive retries:2  Invalid misc:0   Missed beacon:0

my $essid;
my $mode;
my $cell;
my $freq;
my $bitrate;
my $txpower;
my $radio_lq;
my $signal;
my $noise;
my $ts;

my $debug = 0;
$ts = Time::HiRes::time;
print "ts = $ts, localtims(ts)=" . localtime($ts) . "\n" if $debug;

while (<>) {
    my $line = $_;
    chomp($line);

#       if ($line =~ /^$/) { last; }        # done

        if ($line =~ /ESSID:\"([^\"]+)/) {
                $essid = $1;
        }

   
        if ($line =~ /Mode:\s*([^ ]+)/) {
                $mode = $1;
        }
        if ($line =~ /Frequency:\s*([^ ]+)\s*GHz/) {
                $freq = $1;
        }
        if ($line =~ /Cell:\s*([^ ]+)/) {
                $cell = $1;
        }
        if ($line =~ /Bit Rate=\s*([^ ]+)\s*Mb\/s/) {
                $bitrate = $1;
        }
        if ($line =~ /Tx-Power:\s*([^ ]+)\s*dBm/) {
                $txpower = $1;
        }
        if ($line =~ /Link Quality=\s*([^ ]+)/) {
                $radio_lq = $1;
        }
        if ($line =~ /Signal level=\s*([^ ]+)/) {
                $signal = $1;
        }
        if ($line =~ /Noise level=\s*([^ ]+)/) {
                $noise = $1;
        }

}


print <<EOT;
timestamp;ESSID;mode;cell;freq;bitrate;txpower;radio_lq;signal;noise
$ts;$essid;$mode;$cell;$freq;$bitrate;$txpower;$radio_lq;$signal;$noise
EOT

Data Gathering

Here's the script that was used on 3 Fonera 2202 to collect tcpdump raw capture files on USB sticks:

#!/bin/sh /etc/rc.common
# Copyright (C) 2009 OpenWrt.org

START=99
STOP=99

DATA_DIR=/mnt/usbdrive
DUMP_FILE=$(mktemp $DATA_DIR/tcpdump-XXXXXXXX)
PID_FILE=/var/run/tcpdump.pid
IF=$(uci get network.wifi.ifname)

start() {
	local i=1
	while [ ! -d $DATA_DIR ]; do
		sleep 1
		[ $i -ge 9 ] && exit 0
		i=$(($i + 1))
	done
	tcpdump -i $IF -w $DUMP_FILE -s 0 >/dev/null 2>&1 &
	echo $! >$PID_FILE
}

stop() {
	[ -f $PID_FILE ] && {
		kill -TERM $(cat $PID_FILE)
		rm -f $PID_FILE
	}
}