Batman-adv 2016.1 released

Added by Sven Eckelmann 10 months ago

April 21th, 2016. Today the B.A.T.M.A.N. team publishes the April 2016 update to batman-adv, batctl and alfred! This release contains the initial support of the B.A.T.M.A.N. V routing algorithm. Also several bugfixes, code cleanups and code documentation updates are included in this version. As the kernel module always depends on the Linux kernel it is compiled against, it does not make sense to provide binaries on our website. As usual, you will find the signed tarballs in our download section:

as well as prepackaged binaries in your distribution.


Thanks to all people sending in patches:


This release marks the beginning of the public testing phase of the B.A.T.M.A.N. V routing algorithm - the newest evolution in the B.A.T.M.A.N. routing protocol family. Despite its recent nature, B.A.T.M.A.N. V has a vivid history: Back in 2010, initial ideas how to improve B.A.T.M.A.N. IV started flying back and forth. By 2012 the concept had matured enough, to warrant the first prototypes to be developed and tested. And yet, this ambitious project should last another 4 years with major contributions from key developers (including 2 GSoC projects) till we deemed it ready for a wider audience. A major refactoring effort was necessary as the B.A.T.M.A.N. IV algorithm was intertwined with the entire code base and not cleanly separated. The design goal was to have an inner-module API allowing to swap the entire routing algorithm to an alternative while preserving all features like translation table, distributed ARP table, bridge loop avoidance, gateway selection, etc. The invested effort was well worth it: The batman-adv kernel module is now able to run multiple independent mesh networks in parallel on the same host. When a mesh (batX) interface is created, batman-adv can be configured to use the desired mesh protocol (B.A.T.M.A.N. IV or B.A.T.M.A.N. V).

The key differences between B.A.T.M.A.N. IV and B.A.T.M.A.N. V are found in the message types and the metric. B.A.T.M.A.N. V relies on the Echo Location Protocol (ELP) for neighbor discovery. This packet type is never forwarded or rebroadcasted in the mesh. The Originator Messages version 2 (OGMv2) protocol remains responsible for flooding the mesh with link quality information and determining the overall path transmit qualities. The metric transported within the OGMv2 packets is throughput based. In most cases the throughput can be determined automatically, manual overrides are available too. The path throughput between node A and node B is computed as the minimum between the throughput value of all given links on the path between node A and node B (other factors are also included in the computation - for further details please check our OGMv2 wikipage).

As B.A.T.M.A.N. V is not considered 'stable', it needs to be manually enabled to be compiled into the kernel module. Deployment of B.A.T.M.A.N. V in production environments is not recommended. Test feedback is more than welcome!

Under the hood things changed too: The batman-adv reference counting implementation (based on atomic_t) was converted to the in-kernel kref based reference counting. The batman-adv module checks in different situations if a new device is already on top of a different batman-adv device. The check did not handle veth devices properly which are actually a pair of two devices linked to each other, thus froze the system. This has been fixed. A crash has been addressed which is caused due to accessing the encapsulated ethernet and VLAN header without checking whether these are part of the same skb buffer. The shutdown of an batman-adv interface can happen with one of its slave interfaces still being in the BATADV_IF_TO_BE_ACTIVATED state. A change has been introduced to set the interface state to BATADV_IF_INACTIVE, otherwise the batman-adv interface will never reduce its usage counter and thus never gets shutdown. The code also benefited from the usual set of code beautifications and checkpatch cleanups.


batctl imported some minor updates from the kernel header files. These include only the packet structure definitions of the B.A.T.M.A.N. V packet types.


alfred gained support on master servers to receive push_data packets from unix socket clients with foreign source addresses. The old/default mechanism of alfred to write its own MAC address is still supported, by setting the source MAC address to 00:00:00:00:00:00, as previous clients did. Note that this feature is not supported on slave servers. Also various code cleanups have been performed, and a invalid EUI64 addresses are ignored now.

Happy routing,

The B.A.T.M.A.N. team