linux_dsm_epyc7002/net/batman-adv
Martin Hundebøll d353d8d4d9 batman-adv: network coding - add the initial infrastructure code
Network coding exploits the 802.11 shared medium to allow multiple
packets to be sent in a single transmission. In brief, a relay can XOR
two packets, and send the coded packet to two destinations. The
receivers can decode one of the original packets by XOR'ing the coded
packet with the other original packet. This will lead to increased
throughput in topologies where two packets cross one relay.

In a simple topology with three nodes, it takes four transmissions
without network coding to get one packet from Node A to Node B and one
from Node B to Node A:

 1.  Node A  ---- p1 --->  Node R                Node B
 2.  Node A                Node R  <--- p2 ----  Node B
 3.  Node A  <--- p2 ----  Node R                Node B
 4.  Node A                Node R  ---- p1 --->  Node B

With network coding, the relay only needs one transmission, which saves
us one slot of valuable airtime:

 1.  Node A  ---- p1 --->  Node R                Node B
 2.  Node A                Node R  <--- p2 ----  Node B
 3.  Node A  <- p1 x p2 -  Node R  - p1 x p2 ->  Node B

The same principle holds for a topology including five nodes. Here the
packets from Node A and Node B are overheard by Node C and Node D,
respectively. This allows Node R to send a network coded packet to save
one transmission:

   Node A                  Node B

    |     \              /    |
    |      p1          p2     |
    |       \          /      |
    p1       > Node R <       p2
    |                         |
    |         /      \        |
    |    p1 x p2    p1 x p2   |
    v       /          \      v
           /            \
   Node C <              > Node D

More information is available on the open-mesh.org wiki[1].

This patch adds the initial code to support network coding in
batman-adv. It sets up a worker thread to do house keeping and adds a
sysfs file to enable/disable network coding. The feature is disabled by
default, as it requires a wifi-driver with working promiscuous mode, and
also because it adds a small delay at each hop.

[1] http://www.open-mesh.org/projects/batman-adv/wiki/Catwoman

Signed-off-by: Martin Hundebøll <martin@hundeboll.net>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
2013-03-13 22:53:48 +01:00
..
bat_algo.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
bat_iv_ogm.c batman-adv: verify tt len does not exceed packet len 2013-03-11 22:59:47 +01:00
bitarray.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
bitarray.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
bridge_loop_avoidance.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
bridge_loop_avoidance.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
debugfs.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
debugfs.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
distributed-arp-table.c batman-adv: replace redundant primary_if_get calls 2013-03-13 22:53:47 +01:00
distributed-arp-table.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
gateway_client.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
gateway_client.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
gateway_common.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
gateway_common.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
hard-interface.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
hard-interface.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
hash.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
hash.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
icmp_socket.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
icmp_socket.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
Kconfig batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
main.c batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
main.h batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
Makefile batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
network-coding.c batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
network-coding.h batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
originator.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
originator.h hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
packet.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
ring_buffer.c batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
ring_buffer.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
routing.c batman-adv: Return reason for failure in batadv_check_unicast_packet() 2013-03-13 22:53:47 +01:00
routing.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
send.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
send.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
soft-interface.c batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
soft-interface.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
sysfs.c batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
sysfs.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
translation-table.c batman-adv: don't use !! in bool conversion 2013-03-13 22:53:48 +01:00
translation-table.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
types.h batman-adv: network coding - add the initial infrastructure code 2013-03-13 22:53:48 +01:00
unicast.c batman-adv: don't use !! in bool conversion 2013-03-13 22:53:48 +01:00
unicast.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00
vis.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
vis.h batman-adv: update copyright years 2013-01-19 21:18:12 +08:00