The B.A.T.M.A.N. team is delighted to announce its latest release, 2011.3.0, introducing major protocol changes for better roaming of non-mesh clients, gateway convenience features and a pile of bug fixes & code stability changes. 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-2011.3.0/
as well as prepackaged binaries in your distribution.
Important changes¶
The extensive work on roaming improvements for non-mesh clients led to a protocol change which breaks backward compatibility. Be sure to update all your mesh network participants to the latest version to avoid orphan nodes.
Furthermore, a change in the networking infrastructure of the Linux kernel made us drop the support of Linux kernels older than 2.6.29. Maintaining compatibility would be an uphill battle while not being worthwhile for us as a Linux kernel project.
Thanks¶
Thanks to all people sending in patches:
and to all those that supported us with good advice or rigorous testing:
batman-adv¶
This release comes with a redesign of one of the oldest code segments / concepts in batman-adv: the non-mesh client announcement mechanism. When batman-adv detects a non-mesh client it automatically starts announcing the client's mac address in the mesh network to make the mesh aware of the client's location. The new protocol extension mainly deals with the optimal handling and propagation of these client position packets. Major benefits include: Only changes (client arriving or leaving) are propagated in the mesh, thereby reducing the protocol overhead; traffic redirection when a client roams from one mesh node to the next until the mesh network has converged to reduce the packet loss while roaming; extensible packet format to construct more features on top of it.
In addition, batman-adv gained support for informing the user space about events via uevent (a long-standing feature request). The gateway subsystem is the first to make use of it by sending signals when a new gateway has been selected / selected gateway has been changed / the selected gateway has been removed. Also, when enabled the gateway subsystem will filter out incoming DHCP renewal requests if they are not targeted at a high quality gateway to force the client to switch to the best available gateway.
The routing algorithm received a minor tweaking which make it accept delayed OGM rebroadcasts to avoid bogus routing under heavy load. A bug hindering the correct broadcast of OGM packets if interfaces were added & removed in a particular order was fixed. A similar problem affecting the OGM aggregation was eliminated too. The many smaller bug fixes and code stability improvements make this release a well-rounded package.
batctl¶
The Makefile received major attention and various cleanups to make packaging of batctl easier. tcpdump was updated, so that it can analyze the new tt & roaming packets and was extended by a new option to filter all packets except the specified types. An additional debug level for all client announcement related information was added too. A pair of small bugs was squashed along the way: bisect did not properly initialize a variable which led to a compile time warning and a potential memory leak in the bat-hosts parser fixed.
Happy routing,
The B.A.T.M.A.N. team
Early 2011 we were approached by 2 Danish students who were intrigued by the idea of implementing & exploring a concept called "Network Coding". A technique aiming at an increase of the WiFi throughput by aggregating multiple frames into a single frame, thus reducing the needed air time. With the help of mathematical calculations and some additional magic the receiving nodes would be able to decode & extract the frame they are interested in.
In the example illustrated below, the repeater R can save one transmission by sending the combined messages of A and B. A and B can calculate the message they want to receive by subtracting their own sent message.
Later in March the students joined the WirelessBattleMesh in Spain and gave a short introduction talk about their project which they named "C.A.T.W.O.M.A.N." (Coding Applied To Wireless On Mobile Ad-hoc Networks). The recorded talk discusses the mechanisms and benefits of Network Coding and should provide a good starting point to understand what this is all about.
Meanwhile they have continued working on the code and developed a first prototype which allowed gathering data about whether or not the concept brings benefits in the real world. The following graphs illustrates the throughput in kb/s with and without network coding (blue and greenline respectively) as well as the throughput gain (red line) achieved by network coding on a chain of 3 routers with clients attached to each end:
As the entire project was to become their master thesis it comes with an excellent documentation explaining every last detail of how it works and resulting performance analyses.
Their Network Coding enabled batman-adv code can is available on github for further testing / studies (it is based on a snapshot taken in early 2011). In the weeks / months to come we are going to polish the code until it can be officially merged with the Linux kernel code. [update] Meanwhile the Network Coding project and its code has moved to git.open-mesh.org (catwoman branch), was rebased on the current master and further improved. An OpenWrt integration was also added to make testing easier. [/update] This should enable all interested parties to further test & extend the Network Coding concept.
Happy routing,
The B.A.T.M.A.N. team
As announced earlier this year the B.A.T.M.A.N. project participated in the GSoC 2011 amongst other organizations under the Freifunk umbrella. We were granted two slots which we filled with interesting project proposals. Both students have started working on their project a couple of weeks ago. We asked each of them to introduce themselves and speak about their project goals:
Hello everybody, I'm Antonio Quartulli from Brindisi, Italy (usually
UTC+1). I am 24 years old and I'm currently attending the second year
of the Master's Course in Computer Science at the University of Trento
(Italy). I'm specializing in "Systems & Networks" (that's the name of
my current specialization :-) ) and I should get awarded at the end of
September.
I entered the Wifi Mesh Network world about one year ago when I
started to study for the "Nomadic Communication" university course.
Later I participated to the WirelessBattleMeshv3 in Bracciano (Rome -
Italy) and there I had the possibility to meet various people which
work on mesh networking and on several open-source routing protocols.
Getting in touch with the community has been the first step which
convinced me to deepen this field and B.A.T.M.A.N.-Adv was the
protocol which most attracted me.
I've been around in the B.A.T.M.A.N.-Adv community for about one year
and this gave me the possibility to understand the protocol and the
details behind it (of course I still have to learn A LOT!!).
Several ideas have been presented in the last period which are meant
to bring improvements and new feature to the protocol. Most of those
are only concepts and still need an implementation so I did a step
forward and decided to apply for a student slot in the Freifunk
organization.
This is my first GSoC experience and I am really happy to participate
as student. My project concerns B.A.T.M.A.N.-Advanced, a mesh network
routing protocol, and the ARP request/response mechanism.
Basically, before starting the first IP communication, every host in
the network needs to retrieve the destination Layer-2 address and this
operation is executed by means of broadcast messages. It is easy to
understand that in medium/large networks this could lead to high delay
due to packet losses, so delaying the IP communication.
Here comes the idea of using a Distributed Hash Table to store Layer-2
addresses in the network: nodes will not need to use broadcast packets
anymore, instead they can use unicast packets to reach the node which
is known to store the requested information in the DHT.
More details and up-to-date news are available on this page:
https://www.open-mesh.org/projects/batman-adv/wiki/DistributedArpTable
Stay tuned :-)
Hi folks,
I am Linus Luessing from Luebeck (ok, some 'L's too many, but not
necessarily my fault ;) ), a city in Northern Germany at the Baltic
Sea. I am 23 years old and currently a Bachelor's degree student in
Computer Science - which actually did not involve any mesh networking
so far at all. However I've been fascinated of the Freifunk idea since
I first heard of it.
Therefore I got in touch with B.A.T.M.A.N., especially the kernel
module B.A.T.M.A.N. Advanced, about three years ago where we have
been playing a little with this kind of new technology and
implementations and trying to guess what kind of weird stuff this
tricky wifi layer was doing. And it was also a very vibrant impression
of being somehow involved in an Open Source Software Project for the
first time. I was quite astonished about the direct, personal support
and open way of sharing experiences and giving feedback.
During the last years I got more and more addicted to this and also
tried to join several events, like the Chaos Communication Congress,
the Wireless Battle Mesh or the Chemnitzer Linuxtage. For a lot of
new, conceptual ideas it was just more feasible to chat about it
face-to-face. And there were a lot of ideas in this still kind of new,
experimental field :).
It has been much fun so far and it is a great opportunity and an
honour to be able to make some more of these ideas a reality during
the Google Summer Of Code 2011 and to contribute to the Linux
kernel, meshing, the community and Open Source Software in general.
During the GSoC 2011 I am working on some modularization of the core
routing protocol, splitting the OGM protocol as known of BATMAN IV
into an ELP (Echo Location Protocol, responsible for link, one hop
tasks), OGM (will be responsible for the routing between nodes only,
without the knowledge of separate links underneath) and a new MGO
protocol (Message Guided towards Originator, a mechanism to be able
to recover from sudden path degradation quicker) in BATMAN V.
The protocol specs (work in progress!) can be found here:
https://www.open-mesh.org/projects/batman-adv/wiki/ELP
https://www.open-mesh.org/projects/batman-adv/wiki/OGM
Let's make the world a better place, bit by bit :).
Cheers, Linus
Happy routing,
The B.A.T.M.A.N. team
The B.A.T.M.A.N. team is publishing its latest edition, 2011.2.0, primarily focusing on bug fixes and compatibility plus some smaller 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-2011.2.0/
as well as prepackaged binaries in your distribution.
Important changes¶
A series of patches has been merged that replaces all occurrences of 'HNA' by 'TT' (standing for 'translation table'). Originally, batman-adv inherited the term 'HNA' from our layer 3 implementation which caused some confusion as people expected it to behave in the same way. The new name is meant to outline the difference. Scripts / tools expecting the string 'HNA' in the debugfs / batctl output need to be adjusted.
This renaming is the first step in a number of changes regarding the client announcement mechanisms. Expect more to come with the following releases.
Thanks¶
Thanks to all people sending in patches:
and to all those that supported us with good advice or rigorous testing:
batman-adv¶
In the aftermath of the orig hash lock removal released with 2011.1.0, batman-adv underwent a stabilization phase in which fixing bugs was the highest priority. Unsurprisingly, the transition to fine grained locking required further attention such as properly protecting data structures with rcu locks. During the debugging phase race conditions were fixed, duplicate code removed, memory leaks eliminated and reference counting imbalances addressed.
The backward compatibility with older kernel versions as well as the support of upcoming kernel releases has been thoroughly tested and improved. The local and global translation table output is reflecting the HNA to TT conversion. Adding support for multiple vlan ids to the bridge loop avoidance code is the only noticeable new feature coming with this release.
batctl¶
The batctl tool also has been affected by the renaming: the vis data option '--no-HNA|-H' has been renamed to '--no-TT|-T' and the vis data output prints 'label=TT' instead of 'label=HNA'. To be compliant with the JSON Schema the JSON vis data output has been slightly modified.
Happy routing,
The B.A.T.M.A.N. team
The B.A.T.M.A.N. team is publishing its second 2011 release - 2011.1.0, containing major code changes under the hood to improve performance and scalability plus the usual set of bug fixes. 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-2011.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 or rigorous testing:
batman-adv¶
The principal objective while working towards this release was to remove the originator hash lock (also known as the batman-adv private "big kernel lock"). It was introduced in the very early stages of the batman-adv development which proved to be a simple and effective way to protect all originator node information from parallel access. As time went on, the module grew and gained more features - most of them making heavy use of the aforementioned originator hash lock as it safeguarded the module's central pool of data. It thereby became a major bottleneck because almost every piece of code had to acquire this very same lock. An extensive effort was necessary to replace the originator hash lock by fine grained locking which only locks the bare minimum of data to improve the module's performance and scalability.
Other parts of the code received attention too: After learning about bufferbloat in one of Jim Getty's talks we revisited our own buffering settings and decided to set the txqueuelen to zero. Fragmented packets are now properly linearized upon receipt to avoid a crash if the network card splits the packet into smaller chunks. The fragment numbering became more robust and several spelling mistakes have been corrected.
batctl¶
To render batctl more versatile packet dump functionality support for raw WiFi packet decapsulation was added. This allows to keep an eye on your network using interfaces in monitor mode which output packets including all WiFi headers. The bug causing to display an erroneously warning message when changing gateway settings has been squashed. Unused code and the last trace of our subversion integration in the Makefile have been removed.
Happy routing,
The B.A.T.M.A.N. team
Since last Monday the student application period for the Google Summer of Code 2011 has opened. A chance for any student to get their hands dirty on their favorite OpenSource project and getting its development process and code base to know better during these 2 months - while getting payed for it! And guess what? This year, you can play with Batman - ehh, B.A.T.M.A.N. Anyways, they both want to save the world of course ;).
As the application of OpenMesh as a mentoring organization was sadly rejected last year, we decided and agreed on applying via Freifunk this year, which serves as an umbrella organization for various projects dealing with wireless mesh networks.
If you are interested in mesh networking and B.A.T.M.A.N. and if you also love OpenSource software and would like to become a more firm part of it, then get in touch with us via mailinglist and/or IRC. So far the following ideas have been collected which you may apply for:
https://wiki.freifunk.net/Ideas#B.A.T.M.A.N.
But feel free to tell us your own suggestions and ideas, too.
***** ****
*** Student application deadline is the 8th of April!! ***
**** *****
Happy routing,
The B.A.T.M.A.N. team
With our ongoing integration into the Linux kernel community we started having a closer look at git and soon after decided to switch from SVN to git entirely. After having used SVN for quite a while the transition was a rather cumbersome task. We opted for a slow migration to not risk an interruption in our development process:
As a first step we launched https://git.open-mesh.org to serve as a starting point into the new git world. Each SVN commit was automatically synchronized into the corresponding git repository to allow the developers to familiarize themselves with the new tool without making it a hard requirement. At the same time all services depending on subversion were converted to use the git repository. This includes: IRC bots, man page generators, distribution packages, commit mailing lists, code style checks, sparse checks and, finally, trac. While we were not unhappy with trac at all, the performance of its git plugin proved to be fairly poor. Therefore we migrated to redmine - all tickets, wiki pages and links were converted in the process.
The switch to git is now complete with the trac system being the last SVN dependency to remove. In the foreseeable future the SVN repository will continue to exist to allow a smooth transition for all those still having old build environments. However, write access has been turned off as all changes from this point on go into the git repository only.
We went through all services & webpages to ensure everything is working as expected. Feel free to inform us if we managed to overlook something.
Happy routing,
The B.A.T.M.A.N. team
The Linux kernel 2.6.38 (released 2 days ago) is the first Linux version officially shipping the batman-adv kernel module. Although the code already entered Linux space in 2009 as part of the Linux staging tree (place for preparing kernel modules to be officially accepted). In late June 2010 Greg Kroah-Hartman, our tree maintainer, gave us his blessing to leave the Linux kernel staging tree and move to a more suitable location. It took several sessions of code review and changes with David Miller before he made us an early Christmas gift by merging the batman-adv module into the Linux kernel net tree. Since then an often asked question is: What did it take to make the kernel module "acceptable" by the Linux kernel hackers and which parts of the code did you have to change in the process?
Of course, being Linux kernel coding style compliant and the code refactoring that comes with it definitely was one of the larger chunks on the way into the Linux kernel land. There always has been a lot of discussion about whether or not the Linux kernel coding style rules are (partially) old fashioned, too strict or a burden but consider this: Even hundreds of contributors for each release manage to work on the same code base to produce a coherent piece of code that is relatively easy to navigate, once you understood the coding style, taking into account its enormous size. To achieve the "Linux kernel natural" feeling we also had to adjust the administrative handling of the project, like making small and digestible patches which have to go through our mailing list while enforcing the Linux kernel patch submit "regime". At some point every patch will be forwarded to our tree maintainer who may reject the patch if it did not meet the style requirements. Having the same requirements in place helps avoiding rejected patches. Our release process underwent major changes too: The different branches now contain patches for the current stable release / the upcoming Linux kernel respectively. The 3 months release cycles & feature freezes have become a regular event, the heartbeat of the project.
The technical aspect required much attention too: Each citizen of the wide Linux kernel land is expected to re-use existing infrastructure and to avoid code duplication at all costs. This includes employing kernel constants instead of hard-coded numbers or own definitions (e.g. ETH_ALEN, NET_RX_SUCCESS, NETDEV_TX_OK, ..), kernel provided functions instead of manually written counterparts (e.g. hweight_long(), compare_mcast_addr(), min() macro, msecs_to_jiffies(), ..) or even integrating whole "libraries" like the list implementation, reference counting or rcu locking. Next to the obvious advantage of reducing the binary size it bears the appealing characteristic that this code is better debugged and optimized as it is shared among a large group of developers and users. Absolutely forbidden are Linux kernel version checks in the code base, something that was found everywhere in our code to cope with API changes because we wanted our module to also be compatible with older Linux kernel versions. The solution was to concentrate all incompatibility workarounds in a single file (compat.h) which is only part of the external release tarballs. Another no-go was the in-kernel support for specific output formats our mesh graph visualization offered. This formatting can easily be handled in user space. As a result the batman-adv kernel module now outputs a single neutral format. The batctl user space tool showcases how to convert this output into other formats. The initial and somewhat simple procfs configuration and debug interface had to be migrated to sysfs (the settings) and all debugging related functionality moved to debugfs. Since we reside in the official Linux kernel source tree our code has been analyzed by static analyzers (Coccinelle/sparse), we received patches for API changes on multiple occasions and insightful code review feedback.
We are very excited about the results. This was quite an experience which helped to improve the overall code quality while helping us to understand the Linux kernel better. However, this is just the beginning. Many more patches and features are already in preparation and will shape future releases.
Happy routing,
The B.A.T.M.A.N. team
The B.A.T.M.A.N. team is excited to announce its latest release, 2011.0.0, mainly fulfilling popular feature requests but also delivering bug fixes and performance enhancements as well as modifications 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-2011.0.0/
as well as prepackaged binaries in your distribution.
Important changes¶
The "gateway support" coming with this release manipulates the DHCP request / reply behavior once activated. It is strongly suggested that you read our documentation before you make use of this feature to avoid surprises.
Thanks¶
Thanks to all people sending in patches:
and to all those that supported us with good advice or rigorous testing:
batman-adv¶
This release brings the long awaited internet gateway support: Batman-adv nodes in a network can be declared 'gateways' with a certain bandwidth at their disposal. All clients learn about these gateways and can choose their preferred gateway based on link qualities / bandwidth. The decision is 'propagated' to the higher layers by manipulating the DHCP requests. Furthermore, batman-adv implements a bridge loop detection & avoidance that aim to allow multiple batman-adv nodes connected to the same LAN segment without provoking a loop.
The initial layer2 fragmentation implementation that was included in the last releases was further enhanced. Batman-adv nodes forwarding other nodes' traffic inspect the to be transfered packets to automatically fragment the packet if the MTU of the outgoing interface does not allow a normal forward. Fragmented packets are reassembled whenever possible to keep the overhead as low as possible. Also new is the possibility to configure the hop penalty at runtime (via sysfs).
The internally used hash implementation has been reimplemented after David Miller pointed out major deficiencies. These changes gave the batman-adv module a 10% speedup when forwarding payload traffic as these operations heavily make use of the hash code. The Linux kernel bit operation functions replaced the custom functions in batman-adv which are better debugged. The cleanup of the sysfs code greatly reduced the code size and makes this code more manageable.
batctl¶
The support for the new gateway sysfs API was among the biggest changes for this release. It allows to easily turn the gateway mode on/off and displays all known gateways including their announced bandwidth. To monitor the bridge loop avoidance batctl offers a new parameter to display the the bridge neighbor table while highlighting the 'gateway to LAN'. The bisect component now can deal with the 32Bit sequence numbers in the OGMs and the bat-hosts parser became more robust while replacing MAC addresses with bat-host names.
Happy routing,
The B.A.T.M.A.N. team
The announcement for the WirelessBattleMeshv4 just came over the list and stirred up quite an excitement. This annual gathering has evolved into a "can't miss that event" over the past 2 years. Again, wireless communities from all across Europe are expected to get on the their way to Barcelona / Spain. The people from guifi.net, who created one of the largest wireless networks in Europe (more than 4000 nodes), are this year's host and have organized the event. We, the people behind the B.A.T.M.A.N. project, will definitely not miss the opportunity to enjoy a full week with wireless hackers to discuss & develop on the latest hot new stuff. Details about the event's registration / locations / costs can be found in the announcement text below.
==========================================================
Announcing the Wireless Battle Mesh v4
(16-20 March 2011, Sant Bartomeu del Grau, Spain)
==========================================================
The next 'Wireless Battle of the Mesh' will take place
from Wed 16th till Sun 20th of March in Sant Bartomeu del
Grau (80km far from Barcelona), Spain. The event aims to
bring together people from across Europe to test the
performance of different routing protocols for ad-hoc
networks, like Babel, B.A.T.M.A.N., BMX, and OLSR.
If you are a mesh networking enthusiast, community
networking activist, or have an interest in mesh networks
you have to check this out!
Informations about the event are gathered at:
http://battlemesh.org/BattleMeshV4
Location
========
The event will take place in the Can Roca turistic resort
in Sant Bartomeu del Grau, Catalunya, in the pre-Pyrenees
Lluçanès area, 80 km far from Barcelona.
Registration
============
Registrations will be available at different hackerspaces
(Fusolab, HSBXL, /tmp/lab, metalab, CCC, ...) and on the
official website for the event at
http://battlemesh.org/BattleMeshV4
Fees
====
Every participant needs to donate 50 EUR (this should
cover the costs for accommodation and infrastructure).
To finance this event, we ask you to pay when subscribing
(bank transfer or cash).
Contact
=======
* Web: http://battlemesh.org/BattleMeshV4
* Email: wbmv4_aatt_exo_dot_cat
* IRC: irc.freenode.net #battlemesh
Happy routing,
The B.A.T.M.A.N. team