I hereby bring you network coding in batman-adv (in its fourth revision). This allows a relay to send two packets (to two destinations) in a single transmission. Tests[1] have shown an increase in throughput up to 1.6 under the right circumstances.
For this to work, you will need to compile batman-adv with CONFIG_BATMAN_ADV_NC=y and a wireless interface with working promiscuous mode. The rest is taken care of by batman-adv and the following patches.
Patch 5/6 depends on my previous patch on the mailing list: "Return reason for failure in batadv_check_unicast_packet()"
[1] http://www.open-mesh.org/projects/open-mesh/wiki/2011-08-18-network-coding-f...
Martin Hundebøll (6): batman-adv: Add the initial code for network coding. batman-adv: Detect coding nodes and remove these after timeout batman-adv: Buffer unicast packets before forward. batman-adv: Code and transmit packets if possible. batman-adv: Save overheard and tx packets for decoding. batman-adv: Receive coded packets and decode them.
Makefile | 2 + Makefile.kbuild | 1 + bat_iv_ogm.c | 5 + compat.c | 10 + compat.h | 1 + debugfs.c | 18 + gen-compat-autoconf.sh | 1 + main.c | 6 + main.h | 12 +- network-coding.c | 1832 ++++++++++++++++++++++++++++++++++++++++++++++++ network-coding.h | 123 ++++ originator.c | 6 + packet.h | 33 + routing.c | 31 +- send.c | 5 + soft-interface.c | 14 + sysfs-class-net-mesh | 8 + sysfs.c | 6 + types.h | 136 ++++ 19 files changed, 2240 insertions(+), 10 deletions(-) create mode 100644 network-coding.c create mode 100644 network-coding.h