the B.A.T.M.A.N. team is pleased to announce the immediate availability of batman-adv 2014.0.0 - a release coming with a rewritten packet handling engine and many new features almost uniquely tailored to preserve backward compatibility in the future. As the kernel module always depends on the Linux kernel it was 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.
: In 2011, batman-adv broke backward compatibility with the introduction of the translation table mechanism. Since then, interests have been divided between those who wish a stable network with as little changes as possible and those who wish to experiment with new features to bring meshing to the next level. To accommodate both groups the batman-adv developers dedicated a lot of effort on building code infrastructure allowing to mix stable nodes with new features without breaking compatibility. This new system is incompatible to the pre-2014.0.0 versions, but it has been designed to stay compatible with future versions for the next decade or so.
At the same time, the legacy visualization support was removed from the kernel module. The alfred user space module provides an adequate replacement.
Thanks to all people sending in patches:
- Antonio Quartulli <email@example.com>
- Joe Perches <firstname.lastname@example.org>
- Linus Lüssing <email@example.com>
- Marco Dalla Torre <firstname.lastname@example.org>
- Marek Lindner <email@example.com>
- Martin Hundebøll <firstname.lastname@example.org>
- Simon Wunderlich <email@example.com>
- Spyros Gasteratos <firstname.lastname@example.org>
- Sven Eckelmann <email@example.com>
- Tan Xiaojun <firstname.lastname@example.org>
and to all those that supported us with good advice or rigorous testing:
- Andrew Lunn <email@example.com>
- Russell King <firstname.lastname@example.org>
- Simon Wunderlich <email@example.com>
Transforming a rather static design to a module architecture in the interest of preserving backward compatibility requires modifications on a multitude of levels. The principal idea behind the TVLV (type-version-length-value) infrastructure is to break up mesh management data into logic chunks (containers) which can be extended in the future while preserving backward compatibility. If a mesh participant receives an unknown TVLV type or version of a certain container it can simply skip the current container and proceed with the next. Therefore, all non-routing data sent with OGMs (e.g. gateway advertisement, translation table data, etc) were transformed to TVLV containers that are still attached to OGMs. In addition, translation table request & response packets as well as roaming advertisement packets were transformed to TVLV containers too.
While designing the containers a couple of feature requests were also addressed: The compressed download & upload gateway bandwidth (known as 'gateway class') was replaced by uncompressed bandwidth information permitting granular gateway bandwidth announcement. DAT and network coding feature support is communicated into the mesh through TVLV containers as both subsystems optimize their performance based on the knowledge which mesh participant has the feature enabled.
In the interest of backward compatibility on the packet forwarding level batman-adv received a general unicast packet forwarding mechanism. This mechanism forwards or drops unknown packet types based on the packet type numbering.
The batman-adv built-in packet fragmentation has been redesigned and rewritten as part of the 'fragmentation 2' Google Summer of Code project. Major design goals include: Variable number of fragments (up to 16), generic fragmentation framework capable of handling all types of traffic (the 'old' fragmentation code was limited to payload unicast packets) and 'upper layer' transparency through early re-assembly. The maximum of local clients the translation table is able to handle went up by a factor of 16 (the maximum number of fragmented packets) as full translation table exchanges are able to take advantage of the newly introduced generic fragmentation. If the fragmentation is disabled or the MTU altered the local translation table is automatically reduced to fit the new maximum translation table size. Part of the increased maximum table size is the transition from CRC16 consistency checksumming to CRC32 to reduce collision probability and take advantage of hardware acceleration support. The translation table also gained full VLAN awareness making it the final component receiving full VLAN support. Non-mesh clients are now entirely separated on a per-VLAN basis. As a consequence, the bridge loop avoidance is capable of resolving bridge loops more elegantly (one VLAN might be bridged into the LAN while another one is not), the Distributed ARP Table (DAT) builds its distributed IP-MAC address hash on a per-VLAN basis and the AP isolation allows fine-grained control over which VLAN should be isolated and which should not.
The kernel module sets a dummy rx mode handler on batman-adv' virtual interface creation to be able to accept static multicast listener configurations on top of the batX interface. In order to help wireless drivers to select the suitable traffic queue (e.g. WMM queues), batman-adv peeks into the encapsulated payload IP or VLAN header and sets the skb priority field accordingly. This priority field is used whenever the lower layer drivers (like wireless or ethernet drivers) are unable to retrieve the prioritization themselves due to the batman-adv traffic encapsulation.
As part of our ongoing effort for better IPv6 support quite a few missing pieces have been tackled: The IP-address-to-MAC-address resolver was extended to also support IPv6 addresses. This was achieved by porting the internal resolver from the '/proc/net/arp' based approach to the RTNL API. As a result the translate, ping and traceroute commands accept IPv6 addresses as destination argument which batctl tries to convert back to MAC addresses in similar to the IPv4 conversion. Furthermore, the tcpdump component was enriched with an IPv6 parser being able to decapsulate TCP, UDP and common ICMPv6 packet types.
The vis export feature has been removed as the kernel module no longer supports the visualization protocol. A number of cleanups and smaller fixes such as marking local functions as static, adding header include guards and more found their way into this release as well.
The missing libmath linker flag of the alfred-gpsd component was fixed and its manpage installation arranged.
The B.A.T.M.A.N. team