Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7da5ee09 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge

Antonio Quartulli says:

====================
batman-adv 20160229

this is our (hopefully) latest batch of patches intended for net-next.

With this patchset we finally introduce B.A.T.M.A.N. V: the latest
version of our routing protocol.
Technical documentation describing the protocol in more detail can
be found in our wiki[1][2][3][4].

For what concerns this pull request, you can find the high level
description right below.

[1] https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V
[2] https://www.open-mesh.org/projects/batman-adv/wiki/OGMv2
[3] https://www.open-mesh.org/projects/batman-adv/wiki/ELP
[4] https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V_Tests



 ...

With this patchset we finally introduce our new routing protocol:
B.A.T.M.A.N. V. Its implementation started quite some years ago,
but due to the big changes being introduced it took a while to be
discussed, designed, worked, re-worked, tested and debugged (well,
we're never done with the latest). The entire operation has
basically been a team work involving all the core contributors
together with other people interested in the project.

The new protocol is divided into two main subcomponents, called
respectively ELP and OGMv2. The former is in charge of
dealing with the neighbour discovery and link quality estimation,
while the latter implements the algorithm that spreads the
metrics around the network and computes optimal paths.

The biggest change introduced with B.A.T.M.A.N. V is the new
metric: the protocol won't rely on packet loss anymore, but it
will use the estimated throughput extracted directly from the
wifi driver (when available) by querying cfg80211.
Batman-adv will also send some unicast probing packets when
an interface is not used for payload traffic to make sure that
such values are current.

The new protocol can be compiled-in or not like other
features we have and when selected will pull in CFG80211 as
dependency for the reason described above.

Thanks to the big work brought up in the past by Marek Lindner,
batman-adv can easily deal several protocol implementations,
therefore compiling in this new version does not exclude the
older.
This means that the user is offered the option to choose
the protocol when creating the mesh interface (default is the
old one to keep backward compatibility).

Along with the protocol there are some sysfs knobs that are
introduced to fine tune some of its behaviours, but users
are recommended to keep the default values unless they know
what they are doing.

The last patch is about advertising our own patchwork platform
(thanks to Sven Eckelmann for having set that up!) in the
MAINTAINERS file.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c145aeb3 8b823170
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line

What:		/sys/class/net/<iface>/batman-adv/throughput_override
Date:		Feb 2014
Contact:	Antonio Quartulli <antonio@meshcoding.com>
description:
		Defines the throughput value to be used by B.A.T.M.A.N. V
		when estimating the link throughput using this interface.
		If the value is set to 0 then batman-adv will try to
		estimate the throughput by itself.

What:           /sys/class/net/<iface>/batman-adv/elp_interval
Date:           Feb 2014
Contact:        Linus Lüssing <linus.luessing@web.de>
Description:
                Defines the interval in milliseconds in which batman
                sends its probing packets for link quality measurements.

What:           /sys/class/net/<iface>/batman-adv/iface_status
Date:           May 2010
Contact:        Marek Lindner <mareklindner@neomailbox.ch>
@@ -12,4 +28,3 @@ Description:
                The /sys/class/net/<iface>/batman-adv/mesh_iface file
                displays the batman mesh interface this <iface>
                currently is associated with.
+1 −0
Original line number Diff line number Diff line
@@ -2152,6 +2152,7 @@ M: Simon Wunderlich <sw@simonwunderlich.de>
M:	Antonio Quartulli <a@unstable.cc>
L:	b.a.t.m.a.n@lists.open-mesh.org
W:	https://www.open-mesh.org/
Q:	https://patchwork.open-mesh.org/project/batman/list/
S:	Maintained
F:	net/batman-adv/

+14 −0
Original line number Diff line number Diff line
@@ -15,6 +15,20 @@ config BATMAN_ADV
          https://www.open-mesh.org/ for more information and user space
          tools.

config BATMAN_ADV_BATMAN_V
	bool "B.A.T.M.A.N. V protocol (experimental)"
	depends on BATMAN_ADV && CFG80211
	default n
	help
	  This option enables the B.A.T.M.A.N. V protocol, the successor
	  of the currently used B.A.T.M.A.N. IV protocol. The main
	  changes include splitting of the OGM protocol into a neighbor
	  discovery protocol (Echo Location Protocol, ELP) and a new OGM
	  Protocol OGMv2 for flooding protocol information through the
	  network, as well as a throughput based metric.
	  B.A.T.M.A.N. V is currently considered experimental and not
	  compatible to B.A.T.M.A.N. IV networks.

config BATMAN_ADV_BLA
	bool "Bridge Loop Avoidance"
	depends on BATMAN_ADV && INET
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@

obj-$(CONFIG_BATMAN_ADV) += batman-adv.o
batman-adv-y += bat_iv_ogm.o
batman-adv-$(CONFIG_BATMAN_ADV_BATMAN_V) += bat_v.o
batman-adv-$(CONFIG_BATMAN_ADV_BATMAN_V) += bat_v_elp.o
batman-adv-$(CONFIG_BATMAN_ADV_BATMAN_V) += bat_v_ogm.o
batman-adv-y += bitarray.o
batman-adv-$(CONFIG_BATMAN_ADV_BLA) += bridge_loop_avoidance.o
batman-adv-$(CONFIG_DEBUG_FS) += debugfs.o
+27 −1
Original line number Diff line number Diff line
/* Copyright (C) 2011-2016  B.A.T.M.A.N. contributors:
 *
 * Marek Lindner
 * Marek Lindner, Linus Lüssing
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
@@ -18,6 +18,32 @@
#ifndef _NET_BATMAN_ADV_BAT_ALGO_H_
#define _NET_BATMAN_ADV_BAT_ALGO_H_

struct batadv_priv;

int batadv_iv_init(void);

#ifdef CONFIG_BATMAN_ADV_BATMAN_V

int batadv_v_init(void);
int batadv_v_mesh_init(struct batadv_priv *bat_priv);
void batadv_v_mesh_free(struct batadv_priv *bat_priv);

#else

static inline int batadv_v_init(void)
{
	return 0;
}

static inline int batadv_v_mesh_init(struct batadv_priv *bat_priv)
{
	return 0;
}

static inline void batadv_v_mesh_free(struct batadv_priv *bat_priv)
{
}

#endif /* CONFIG_BATMAN_ADV_BATMAN_V */

#endif /* _NET_BATMAN_ADV_BAT_ALGO_H_ */
Loading