Project

General

Profile

News

Open-Mesh: Batman-adv 2014.0.0 released

Added by Marek Lindner over 10 years ago

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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2014.0.0/

as well as prepackaged binaries in your distribution.

Important changes

Compatibility break: 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

Thanks to all people sending in patches:

and to all those that supported us with good advice or rigorous testing:

batman-adv

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 turned off 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.

batctl

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.

alfred

The missing libmath linker flag of the alfred-gpsd component was fixed and its manpage installation arranged.

Happy routing,

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

Open-Mesh: Batman-adv 2013.4.0 released

Added by Marek Lindner over 10 years ago

On October 16th, B.A.T.M.A.N. team has released batman-adv 2013.4.0, the newest in a series of stability and bugfix releases. The recently introduced data distribution daemon 'alfred' received quite some attention and gained new features. 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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2013.4.0/

as well as prepackaged binaries in your distribution.

Thanks

Thanks to all people sending in patches:

and to all those that supported us with good advice or rigorous testing:

batman-adv

With this release comes a fix for a kernel crash running on hardware with specific Ethernet chips triggering a rare code path when forwarding traffic. A fix for the network coding initialization was submitted to allow to create multiple batX interfaces when this feature has been included in the module. The bridge loop avoidance now correctly handles VLAN tags (a regression introduced with the previous release). Additional Linux kernel backward compatibility code enables batman-adv to run on various kernel versions.

batctl

The incorrectly reported TCP payload length in the tcpdump component was fixed. The hyphens in the manpage were properly escaped to be groff compliant. C types and error handling were improved to better handle some error cases.

alfred

In order to allow a mesh topology visualization with true geographic layout alfred was enriched with a location service based on libgpsd. In addition to retrieving the location via GPS on mobile nodes alfred can be configured with a static location on stationary nodes to be announced in the network.
A new JSON output format for the vis service was added. The newly added format is JSON compliant throughout an entire message, in contrast to the "legacy" per-line JSON output. Alfred also learned to be tolerant to vanishing/reappearing interfaces and to switch its operation mode (secondary/primary) without the need for a restart or losing cached information. To avoid conflicts in distributions with other "vis" binaries (like the batmand vis), the binary was renamed to "batadv-vis". Manpages have been added to help documenting the growing functionality. Also various code/build system cleanups and bugfixes have been integrated.

Happy routing,

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

Open-Mesh: Batman-adv 2013.3.0 released

Added by Marek Lindner over 10 years ago

The B.A.T.M.A.N. team proudly presents its newest release - batman-adv 2013.3.0 - a stability and bugfix release uniquely focused on ironing out bugs and annoyances. 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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2013.3.0/

as well as prepackaged binaries in your distribution.

Important changes

For the first time, a batman-adv and batctl release is accompanied by A.L.F.R.E.D. (Almighty Lightweight Fact Remote Exchange Daemon) - a user space daemon conceived for the purpose of replacing the in-kernel visualization component with an easy to extend user space application. It bears the striking advantage of not only distributing visualization data but all kinds of data within a mesh network, thereby filling an often felt gap.

Note: The alfred vis support is not compulsory for obtaining visualization data as the in-kernel code still is enabled. Both systems are compatible and can even be deployed side by side. It is planned to remove the in-kernel code by the end of the year which is why it is recommended to check out alfred soon, in the interest of making sure the transition goes as smooth as possible.

Thanks

Thanks to all people sending in patches:

and to all those that supported us with good advice or rigorous testing:

batman-adv

The batman-adv kernel module takes special care when transporting payload broadcast traffic across the mesh network to increase the likelihood of a successful transmission. To reduce overhead this mechanism was tweaked to only be enabled on wireless interfaces as it is safe to assume wired connections and VPNs suffer less from packet loss. The internal handling of VLAN IDs has been unified to prepare for the upcoming translation table VLAN support. DAT has learned not to reply to ARP requests sent by local clients destined for other local clients to avoid duplicate ARP replies. The batman-adv protocol (OGM) duplicate check was applied too strictly in certain situations which could lead to route starvation of better routes. To mitigate this effect the duplicate policy is applied on a per neighbor basis. Upon configuring an interface batman-adv would try to acquire the in-kernel network configuration lock or return with ERESTARTSYS in case the lock was held by some other party. To avoid having to abort an interface activation this part of the code was reworked and the need to acquire the lock removed. A crash on kernel module unload triggered by a double free of the traffic statistic counters was fixed. The network coding neighbor table won't display neighbors unsuitable for network coding anymore.

batctl

A misleading warning about an uninitialized variable when compiling with "O2" was fixed and a few typographic errors in the bisect output were corrected.

alfred

Alfred is a user space daemon for distributing arbitrary local information over the mesh/network in a decentralized fashion. This data can be anything which appears to be useful - originally designed to replace the batman-adv visualization (vis), you may distribute hostnames, phone books, administration information, DNS information, the local weather forecast, etc.
Alfred runs as daemon in the background of the system. A user may insert information by using the alfred binary on the command line, or use special programs to communicate with alfred (done via unix sockets). The daemon then takes care of distributing the local information to other alfred servers on other nodes. This is done via IPv6 link-local multicast, and does not require any configuration. A user can request data from alfred, and will receive the information available from all alfred servers in the network.

Happy routing,

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

Open-Mesh: Alfred Open Beta

Added by Marek Lindner almost 11 years ago

To those of you who actively follow the recent discussions it may come to no big surprise that it was decided to remove the vis functionality from the batman-adv kernel module in a not so distant future (with the next compatibility bump). There always has been a debate whether or not such functionality belongs into the kernel or not. The in-kernel solution bears the disadvantage of being rather inflexible because every change has to go through the official Linux channels. With the growing interest in flooding the network with arbitrary data in addition to the visualization data realizing a solution in user-space became the obvious choice.

A new, more general user-space daemon which takes over the old vis functionality and much more, called A.L.F.R.E.D. (Almighty Lightweight Fact Remote Exchange Daemon) came to life. Alfred is capable of distributing information over your mesh network in a decentralized fashion, for example graph information for vis, but also any other data which appears to be useful - like hostnames, phone books, administration information, DNS information, the local weather forecast, etc while requiring (almost) zero configuration.

As the development on the core functionality has been finished and alfred works (at least on the developers boxes), we would like to call for an open beta! There are bleeding edge downloads and an OpenWRT feed available. Please try alfred and report bugs, send patches and inform us about your experiences. Alfred will be release along with the next batman-adv release.

Happy routing,

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

Open-Mesh: Batman-adv 2013.2.0 released

Added by Marek Lindner almost 11 years ago

The B.A.T.M.A.N. team is delighted to announce its latest release - batman-adv 2013.2.0 - introducing a complete new submodule for optimized packet transport, new features and our regular set of bugfixes. 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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2013.2.0/

as well as prepackaged binaries in your distribution.

Thanks

Thanks to all people sending in patches:

and to all those that supported us with good advice or rigorous testing:

batman-adv

The highlight of this release certainly is the newly added network coding support. Network Coding aims to improve transmission efficiency to preserve precious air time. The principle behind network coding builds upon wireless being a shared medium and exploiting this fact to our advantage (given that the situation allows to do so). The increased efficiency is achieved by combining two packets into a single transmission that is received by 2 destinations at the same time (due to the aforementioned shared medium characteristics). Tests have shown an increase in performance of up to 60% due to this clever mechanism. Exhaustive documentation has been made available for the curious reader explaining every detail regarding configuration, implementation and future work.

Henceforward, batman-adv interfaces can be configured via the rtnl interface configuration API in addition to the known sysfs API. The rtnl API offers a generic approach to configure all modern Linux interfaces which is used by utilities like 'ip'. As part of the interface API restructuring batman-adv also gained the ability to automatically resolve duplicate interface usage. For example, adding an interface to batman-adv while the interface still is part of a bridge will now result in the removal of the interface from the bridge without manual intervention. The identification of own mac addresses in multi-meshes setups (multiple batX interfaces on the same host) has been fixed and a necessary length check when parsing OGMs has been added.

batctl

To complement the network coding submodule a variety of new features went into batctl. It is now possible to enable/disable the network coding at runtime via a new commandline switch. Furthermore, batctl is able to print the network coding neighbor table and allows to configure the network coding log level for advanced debugging.
The minimal unicast 4addr dissector had incorrect size expectations which was fixed. The 4addr dissector learned to print the unicast 4addr subtype in order to facilitate keeping the individual 4addr types apart.

Happy routing,

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

Open-Mesh: Batman-adv 2013.1.0 released

Added by Marek Lindner about 11 years ago

Today, the B.A.T.M.A.N. team publishes batman-adv 2013.1.0 - a stability and bugfix release, addressing bugs and open issues only. No new features were added to ensure maximum stability. 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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2013.1.0/

as well as prepackaged binaries in your distribution.

Thanks

Thanks to all people sending in patches:

and to all those that supported us with good advice, code review and/or rigorous testing:

batman-adv

The translation table has been further polished by not adding multicast addresses to avoid interfering with multicast traffic. The output of the translation tables has been modified to not print the 'last seen' values for batX interfaces (these entries are never subject to purging). Moreover, the CRC consistency checksums are printed along with the rest of the table to facilitate debugging. As part of our ongoing effort to document the code itself the entire types.h file was 'kernel doc'-ified, thereby documenting the bulk of all struct definitions and defines used throughout the batman-adv code base. While reviewing and documenting all these definitions a few unused but forgotten variables we identified and removed, reducing the memory consumption by a few bytes.

The previously added distributed ARP table (DAT) received more testing and reviews which led to a number of fixes: ARP packets with invalid MAC or IP addresses are not added to the ARP table anymore. A potential crash due to a NULL pointer dereference in the hash collision avoidance section was fixed. The batman-adv interface removal could lead to deadlock in the kernel if it was triggered at the wrong moment. To resolve the issue the internal interface cleanup is delayed until all necessary locks can safely be acquired. The initialization of the lockdep class keys for has structures inside batman-adv has been improved to mitigate false warnings when running lockdep to find problems in the locking routines.

batctl

The snprintf() handling in various components has been revised to avoid a potential crash due to missing '\0' delimiter at the end of the string.

Happy routing,

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

Open-Mesh: The B.A.T.M.A.N. project endorses the Battle of the Mesh v6

Added by Simon Wunderlich about 11 years ago

The Wireless Battle of the Mesh is an event that aims to bring together people from across the globe to test the performance of different routing protocols for ad-hoc networks, like Babel, B.A.T.M.A.N., BMX, OLSR, and 802.11s. Of course, new protocols (working on OpenWRT ) are always welcome!

This year the even will take place from Monday 15th till Sunday 21st of April at the University of Aalborg, Denmark.

The B.A.T.M.A.N. project endorses and supports the Battle of the Mesh v6 because of the efforts made by its community to advance the field of wireless mesh networking and foster the development of grassroots community networks. As last year, many members of the B.A.T.M.A.N. team will gather at the event to attend the B.A.T.M.A.N. developer meeting and present, discuss and experiment with new ideas. Above all, we are all looking forward to connect with interesting people at this event!

The B.A.T.M.A.N. project will support the event by:

  • help to promote the event
  • numerous members of the B.A.T.M.A.N. community have already confirmed their attendance
  • co-fund travel costs for attendees from South America
  • give talks about advancement of our community in certain aspects
  • help setting up testbed for protocol testing

Of course, we are available for discussions, ideas, and live tests!

Many other communities endorse and support the Wireless Battle of The Mesh v6, an up to date list of the endorsers of the Battlemesh v6 can be found at the main Battlemesh website.

Open-Mesh: Batman-adv 2013.0.0 released

Added by Marek Lindner over 11 years ago

On January 15th, the B.A.T.M.A.N. team has released batman-adv 2013.0.0, bringing many new features, performance improvements and tweaks under the hood. 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:

https://downloads.open-mesh.org/batman/releases/batman-adv-2013.0.0/

as well as prepackaged binaries in your distribution.

Thanks

Thanks to all people sending in patches:

and to all those that supported us with good advice or rigorous testing:

batman-adv

In summer 2011, the B.A.T.M.A.N. project participated in Google's Summer of Code for the first time. One of the two projects was about implementing a distributed ARP table for batman-adv (short: DAT), enabling a mesh node to speed up the ARP discovery phase for its non-mesh clients by intelligently caching & retrieving IPv4 address/MAC address translations. Many obstacles like clean code, lack of time and kernel maintainer objections had to be taken before DAT could finally be merged. This release finally brings the long-awaited distributed ARP table. The wiki features basic DAT documentation as well as technical insights for those who are interested.
The batman-adv Ethernet type (0x4305) was accepted as "official" Ethernet type inside the Linux kernel to help avoiding future collisions with other protocols. Only the IEEE is entitled to raise our Ethernet type to the level of "standard" recognized beyond the realm of Linux but this step still moves us forward.

Thanks to a hint from David Miller we began removing the famously known "__packed" attribute from our packet definitions as it allows the compiler to generate slightly faster code on some platforms. He also encouraged us to implement a minor modification in our hash code to squeeze a little more performance out of it. The translation table was enhanced with the ability to handle multiple roaming events during a single OGM interval (especially useful in environments with higher OGM intervals). The bridge loop avoidance drops ECTP traffic to avoid packets looping around. In addition, various race conditions during the bridge loop avoidance initialization phase have been identified & fixed. An unusual speedy join / bridge loop avoidance interaction bug caught our attention and was addressed soon thereafter.

batctl

The batctl utility was enriched with a couple of tools completing the distributed ARP table support: A switch to enable / disable DAT at runtime, an ARP cache viewer and a minimal unicast 4addr dissector (unicast 4addr packets are used to exchange DAT packets). This release also features small but useful 'translation' helpers: Whenever an IP or MAC address needs to be 'translated' to the originator mac address responsible for the IP or MAC the 'batctl translate' functionality can be used. It is now also possible to call 'batctl ping' and 'batctl traceroute' with an IP or MAC address because these tools will take advantage of the 'translate' functionality internally. Beware: layer 2 ping and traceroute will still only work across batman-adv enabled nodes.
All of batctl's output errors are redirected to stderr instead of stdout. To save space on embedded devices 'batctl bisect' was turned into a compile-time option which is turned off by default. The manpage explaining gateway functionality received some attention as well.

Happy routing,

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

Open-Mesh: Guest article: batman-adv in South America

Added by Marek Lindner over 11 years ago

At some point I thought it would be nice to describe a small real world batman-adv implementation. Many times I've seen mails from people doing simulations or whatnot, to decide whether or not batman-adv works as expected... and I guess they would appreciate reading about real word use cases. :)

This thing started1 back in February 2012 in Cordoba, Argentina with Nico Echaniz et al

Shortly after DeltaLibre followed, replicating the model. From the very beginning we aimed at building the cheapest possible, high performance multi-radio mesh node.

Ten months later, although there's still room for improvement, we are very happy looking back at the path that took us here :). Starting with the decision of choosing batman-adv, as explained in a Spanish reply to Esteban Municio2

2012/9/10 Esteban Municio:
Was there any reason why you chose batman-adv over other protocol?

Layer 2! no subnet configuration, "Just Works", it's easy to forget batman-adv is down there doing all the magic - A routing protocol that stays out of your way, is priceless.

Which were your main issues working with batman-adv?

With batman-adv... almost none :)
Main difficulties until now were on phy level (interference) or layer 1 (hardware, drivers, firmware)

With batman-adv, we bumped into 2 or 3 bugs, reported to the mailing list, and received prompt solutions thanks to the daily work that the developers put into it. Last version 2012.3.0 includes all those fixes.

Pending issues as of today, are a strange behavior where avahi packets are lost (can't assure batman-adv is the culprit) and an open ticket3 about adding RAs mangling support to gw_mode, extending the DHCPv4 segmentation logic to SLAAC networks as well. As it is today, you can't put 2 ipv6 gateways doing SLAAC for different prefixes in the same batman-adv cloud. So far is not a showstopper for us, but we would love to be able to do that.

Some numbers: With the deployed hardware4 (TL-MR3220 and WN722N) throughput in point-to-point links maxes out at 30 or 40mbps respectively (Lite-N HT20). With our dual-radio mesh nodes, we can sustain that transfer speed over at least 3 hops, using channels 1 and 11 for alternating interfaces. Given the small size of the networks, a longer path is currently not possible, but when using a single radio, or interfering channels, that same path throughput quickly drops to about 6 mbps, as predicted by the models.
This is not news for many, but as said in the beginning of the email, i see some folks "doubting" about the performance, or overhead, of batman-adv...
In tests we made, over a single hop (that is, from A to C as in A --> B --> C where point to point links reach ~30mbps), static routing reached 30mbps +/- 1mbps, and using batman-adv 29.5mbps +/- 1mbps
A real bargain for the bat-benefits :)

To easily share, publish and keep track of config tweaks between our networks we setup a hg5 repo6 and eventually added bat-graphs for some basic context7. That can't possibly be maintained at a larger scale, but still proves incredibly useful at research stages.
It has been used by an independent group (Gabriel Tolon et al) to make their equipment compatible with DeltaLibre network at their lab, then bring the nodes into the region, plug and Just worked, with little intervention on our part.

We pull the overlays with a bash hack named ruci8 and use that too to push and stage experimental configs to the whole network without fear of locking us out because of a config mistake or typo.

(I'm aware this has been addressed by multiple solutions, but ruci was born back in February while we didn't have a decent internet access to research previous art - we have changed tactics since then, trying to integrate with the rest of the movements :) )

Finally, some obligatory pictures9 of representative nodes last months' smokeping stats10 and cacti11 and as a bonus, a crude video12 filmed by Al Cano from guifi.net while visiting DeltaLibre back in May, enjoying seamless roaming along 6 nodes while literally navigating through the batman-adv mesh :)

In QuintanaLibre (Quintana is a mountain-region small town with <500 inhabitants) you can spot kids using their OLPC netbooks while sitting in a (resting) horse' back. With almost no cellphone signal nor landlines whatsoever, you can imagine how much they appreciate having a WCN at their hometown.

This short story can't possibly express how grateful we are with you batpeople, but I hope it gives a glimpse ;)

1 https://blog.altermundi.net/article/timeline-february-september-2012/

2 https://listas.altermundi.net/pipermail/redeslibres/2012-October/001438.html

3 issue #159

4 http://docs.altermundi.net/RedesMiniMaxi/Equipamiento

5 https://bitbucket.org/guidoi/deltalibre-configs

6 https://bitbucket.org/nicoechaniz/quintanalibre-configs

7 https://bitbucket.org/guidoi/deltalibre-configs/src/tip/files/deltalibre_2012-08-14.svg

8 https://bitbucket.org/guidoi/ruci/

9 https://blog.altermundi.net/article/algunas-imagenes-de-deltalibre/

10 http://ping.deltalibre.org.ar/

11 http://graficas.deltalibre.org.ar/

12 http://es.wiki.guifi.net/wiki/Archivo:Paseo_en_canoa_conectado_a_BATMAN-Advanced_por_Delta_Libre.ogv

(61-70/116)

Also available in: Atom