The last few days I have been experimenting with +the +batman-adv mech technology. I want to gain some experience to see +if it will fit the +Freedombox project, and together with my neighbors try to build a +mesh network around the park where I live. Batman-adv is a layer 2 +mesh system ("ethernet" in other words), where the mesh network appear +as if all the mesh clients are connected to the same switch.
+ +My hardware of choice was the Linksys WRT54GL routers I had lying +around, but I've been unable to get them working with batman-adv. So +instead, I started playing with a +Raspberry Pi, and tried to +get it working as a mesh node. My idea is to use it to create a mesh +node which function as a switch port, where everything connected to +the Raspberry Pi ethernet plug is connected (bridged) to the mesh +network. This allow me to hook a wifi base station like the Linksys +WRT54GL to the mesh by plugging it into a Raspberry Pi, and allow +non-mesh clients to hook up to the mesh. This in turn is useful for +Android phones using the Serval +Project voip client, allowing every one around the playground to +phone and message each other for free. The reason is that Android +phones do not see ad-hoc wifi networks (they are filtered away from +the GUI view), and can not join the mesh without being rooted. But if +they are connected using a normal wifi base station, they can talk to +every client on the local network.
+ +To get this working, I've created a debian package +meshfx-node +and a script +build-rpi-mesh-node +to create the Raspberry Pi boot image. I'm using Debian Jessie (and +not Raspbian), to get more control over the packages available. +Unfortunately a huge binary blob need to be inserted into the boot +image to get it booting, but I'll ignore that for now. Also, as +Debian lack support for the CPU features available in the Raspberry +Pi, the system do not use the hardware floating point unit. I hope +the routing performance isn't affected by the lack of hardware FPU +support.
+ +To create an image, run the following with a sudo enabled user +after inserting the target SD card into the build machine:
+ ++% wget -O build-rpi-mesh-node \ + https://raw.github.com/petterreinholdtsen/meshfx-node/master/build-rpi-mesh-node +% sudo bash -x ./build-rpi-mesh-node > build.log 2>&1 +% dd if=/root/rpi/rpi_basic_jessie_$(date +%Y%m%d).img of=/dev/mmcblk0 bs=1M +% ++ +
Booting with the resulting SD card on a Raspberry PI with a USB +wifi card inserted should give you a mesh node. At least it does for +me with a the wifi card I am using. The default mesh settings are the +ones used by the Oslo mesh project at Hackeriet, as I mentioned in +an +earlier blog post about this mesh testing.
+ +The mesh node was not horribly expensive either. I bought +everything over the counter in shops nearby. If I had ordered online +from the lowest bidder, the price should be significantly lower:
+ +Supplier | Model | NOK |
---|---|---|
Teknikkmagasinet | Raspberry Pi model B | 349.90 |
Teknikkmagasinet | Raspberry Pi type B case | 99.90 |
Lefdal | Jensen Air:Link 25150 | 295.- |
Clas Ohlson | Kingston 16 GB SD card | 199.- |
Total cost | 943.80 |
Now my mesh network at home consist of one laptop in the basement +connected to my production network, one Raspberry Pi node on the 1th +floor that can be seen by my neighbor across the park, and one +play-node I use to develop the image building script. And some times +I hook up work horse laptop to the mesh to test it. I look forward to +figuring out what kind of latency the batman-adv setup will give, and +how much packet loss we will experience around the park. :)
+