quick mesh project: GSOC and qMp

Afegit per Pau Escrich fa casi 5 anys

In this last Google Summer of Code (2012) a project related with qMp was accepted and funded under to umbrella of the Freifunk organization0.

The GSOC proposal1 was sent by Joel Espunya, a computer's student and folk. It was about modify and extend the qMp system to work with the Guifi.net2 community network. The Quick Mesh Project is designed to use dynamic mesh protocols like OLSR, BMX6 and Babel. However the community (and also many others) are using BGP3, at least to interconnect the different clouds or zones.The main goal of this project was to add BGP support to our system. When we started doing the working schedule/plan, we realized there were two main points:

  1. Write an abstraction layer to execute BGP functions
  2. Find/customize some software to routes exchange (between dynamic protocols and BGP)

First stage

The Quick Mesh Project can be defined as an abstraction layer of OpenWRT which includes many features to make the job easier (web interface, autoconf. system, internet detect, etc.). Right now the core of this abstraction layer is written in shell script. You can execute commands like "qmpcontrol configure_network" to get the network automatically configured according some heuristics and a few configuration placed on "/etc/config/qmp".
However, some months ago, qMp developer team decided to rewrite this abstraction layer to LUA4. Why LUA? Because it is a programming language very tiny, optimized and also powerful. We are working in embedded hardware, which can be a 180MHz MIPS with 16MB of RAM and 4MB flash. The LUA interpreter and standard library of OpenWRT only take 90KB. So it fits perfectly in this environment. LUA has also been the choice of LUCI5, and it has a very nice API which can be reused.

Coming back to the GSOC project, instead of writing the BGP functions using Shell Script, we started the new LUA API. Not to develop it completely, but to have the basic features needed by the project. Here6 can be found a list of modules and functions of the library. And here7 can be found the code implemented. As can be seen there is a quagga module. Quagga8 is a software routing suit which includes a BGP daemon. It is a kind of standard suit, most of the current routing protocols have support for it, so all of them can easy exchange routes. At this point we started looking for the best way to use Quagga. Then we entered in the second stage.

Second stage

Quick Mesh Project uses BMX69 as main protocol and OLSR/BABEL/any as secondary (backup). The problem with BMX6 is that it didn't has support for Quagga. Then, instead of doing the routing exchange using some other crappy system, we decided to write a Quagga plugin for BMX6. However, Joel (the student) realized that it was out of his scope. He was not familiar with BMX6 implementation and neither with Quagga. So I (as a mentor) asked Axel Neumann for participate in the project. He was one of the B.A.T.M.A.N developers, and right now the BMX6 main maintainer. He accepted to contribute with us and made a very great job, the code can be found here10 and the documentation here11. At the end he received half of the funding.


So, at the end we have the Quagga plugin to automatic routes exchange and the LUA Quagga/BGP API to interact with the qMp system.

Right now (after the GSOC) we are still working on it. We are extending the API also to Network, WiFi, etc. To be used in the next release based on OpenWRT Attitude Adjustment12 which will include also BGP support. It will suppose an essential feature for the qMp/ integration and also for other network communities.



bmx6: BMX6 evaluation published at CNBuB 2012

Afegit per Axel Neumann fa casi 5 anys

Neumann, A, López E, Navarro L. 2012. An evaluation of BMX6 for Community Wireless Networks. International Workshop on Community Networks and Bottom-up-Broadband (CNBuB 2012).

Find the paper here:

Nowadays, a growing number of communities of
citizens build, operate and own open IP-based community wire-
less networks with thousands of low capacity nodes actively
participating in routing the data traffic. This article focuses on
one of their concerns, routing and its scalability, by presenting
BatMan-eXperimental Version 6 (BMX6) and evaluating its
performance. BMX6 is a low overhead and scalable mesh network
routing protocol inspired by human networks. Its performance
is evaluated in comparison with OLSR in terms of overhead
and convergence time as networks grow in number of nodes
and diameter. The results show that the convergence time and
protocol overhead per node in BMX6 is not significantly affected
by the addition of new nodes in contrast with OLSR, where both
parameters can grow super-linearly. This confirms the excellent
scalability of BMX6.

bmx6: b6m - A map tool for dynamic bmx6 topology visualization

Afegit per Axel Neumann fa més de 5 anys

Simó Albert i Beltran from and projects has developed a tool for dynamic bmx6 topology visualization.

The b6m architecture follows a completely decentral approach.
b6m is using bmx6 sms plugin functionality to let nodes propagate local topology information.
It is small enough to operate on embedded devices and comes as an openWrt package.

The software package and further information is available at


També disponible a: Atom