mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 11:49:32 +00:00
![Martin Hundebøll](/assets/img/avatar_default.png)
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>
60 lines
2 KiB
Text
60 lines
2 KiB
Text
#
|
|
# B.A.T.M.A.N meshing protocol
|
|
#
|
|
|
|
config BATMAN_ADV
|
|
tristate "B.A.T.M.A.N. Advanced Meshing Protocol"
|
|
depends on NET
|
|
select CRC16
|
|
select LIBCRC32C
|
|
default n
|
|
help
|
|
B.A.T.M.A.N. (better approach to mobile ad-hoc networking) is
|
|
a routing protocol for multi-hop ad-hoc mesh networks. The
|
|
networks may be wired or wireless. See
|
|
http://www.open-mesh.org/ for more information and user space
|
|
tools.
|
|
|
|
config BATMAN_ADV_BLA
|
|
bool "Bridge Loop Avoidance"
|
|
depends on BATMAN_ADV && INET
|
|
default y
|
|
help
|
|
This option enables BLA (Bridge Loop Avoidance), a mechanism
|
|
to avoid Ethernet frames looping when mesh nodes are connected
|
|
to both the same LAN and the same mesh. If you will never use
|
|
more than one mesh node in the same LAN, you can safely remove
|
|
this feature and save some space.
|
|
|
|
config BATMAN_ADV_DAT
|
|
bool "Distributed ARP Table"
|
|
depends on BATMAN_ADV && INET
|
|
default n
|
|
help
|
|
This option enables DAT (Distributed ARP Table), a DHT based
|
|
mechanism that increases ARP reliability on sparse wireless
|
|
mesh networks. If you think that your network does not need
|
|
this option you can safely remove it and save some space.
|
|
|
|
config BATMAN_ADV_NC
|
|
bool "Network Coding"
|
|
depends on BATMAN_ADV
|
|
default n
|
|
help
|
|
This option enables network coding, a mechanism that aims to
|
|
increase the overall network throughput by fusing multiple
|
|
packets in one transmission.
|
|
Note that interfaces controlled by batman-adv must be manually
|
|
configured to have promiscuous mode enabled in order to make
|
|
network coding work.
|
|
If you think that your network does not need this feature you
|
|
can safely disable it and save some space.
|
|
|
|
config BATMAN_ADV_DEBUG
|
|
bool "B.A.T.M.A.N. debugging"
|
|
depends on BATMAN_ADV
|
|
help
|
|
This is an option for use by developers; most people should
|
|
say N here. This enables compilation of support for
|
|
outputting debugging information to the kernel log. The
|
|
output is controlled via the module parameter debug.
|