Commit 87b95082 authored by Sven Eckelmann's avatar Sven Eckelmann Committed by Simon Wunderlich
Browse files

batman-adv: remove network coding support



The Network Coding feature, introduced in 2013, is based on the master
thesis "Inter-Flow Network Coding for Wireless Mesh Networks". It relies on
the assumption that neighboring mesh nodes can reliably overhear each
other's transmissions in promiscuous mode, allowing packets to be combined
to reduce forwarding overhead.

This assumption no longer holds for modern wireless mesh networks, which
are heterogeneous and make overhearing increasingly unreliable. Factors
such as multiple spatial streams, varying data rates, beamforming, and
OFDMA all prevent nodes from consistently overhearing each other. The current
implementation in batman-adv is not able to detect these conditions and would
require a more complex layer beyond its neighbor discovery process to do so.

In addition, the feature has been unmaintained for years and is discouraged
for use. None of the current maintainers have the required test
setup to verify its functionality, and known issues remain in its data
structures (reference counting, RCU usage, and cleanup handling). Its
continued presence also blocks necessary refactoring of the core originator
infrastructure.

Remove this obsolete and unmaintained feature.

Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
Acked-by: default avatarMartin Hundebøll <martin@hundeboll.net>
Acked-by: default avatarMarek Lindner <marek.lindner@mailbox.org>
Signed-off-by: default avatarSimon Wunderlich <sw@simonwunderlich.de>
parent e89888a1
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -53,19 +53,6 @@ config BATMAN_ADV_DAT
	  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
	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_MCAST
	bool "Multicast optimisation"
	depends on BATMAN_ADV && INET && !(BRIDGE=m && BATMAN_ADV=y)
+0 −1
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ batman-adv-y += mesh-interface.o
batman-adv-$(CONFIG_BATMAN_ADV_MCAST) += multicast.o
batman-adv-$(CONFIG_BATMAN_ADV_MCAST) += multicast_forw.o
batman-adv-y += netlink.o
batman-adv-$(CONFIG_BATMAN_ADV_NC) += network-coding.o
batman-adv-y += originator.o
batman-adv-y += routing.o
batman-adv-y += send.o
+0 −5
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@
#include "hash.h"
#include "log.h"
#include "netlink.h"
#include "network-coding.h"
#include "originator.h"
#include "routing.h"
#include "send.h"
@@ -1406,10 +1405,6 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset,
	if (!orig_neigh_node)
		goto out;

	/* Update nc_nodes of the originator */
	batadv_nc_update_nc_node(bat_priv, orig_node, orig_neigh_node,
				 ogm_packet, is_single_hop_neigh);

	orig_neigh_router = batadv_orig_router_get(orig_neigh_node,
						   if_outgoing);

+0 −3
Original line number Diff line number Diff line
@@ -51,9 +51,6 @@ enum batadv_dbg_level {
	/** @BATADV_DBG_DAT: ARP snooping and DAT related messages */
	BATADV_DBG_DAT		= BIT(4),

	/** @BATADV_DBG_NC: network coding related messages */
	BATADV_DBG_NC		= BIT(5),

	/** @BATADV_DBG_MCAST: multicast related messages */
	BATADV_DBG_MCAST	= BIT(6),

+0 −16
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@
#include "mesh-interface.h"
#include "multicast.h"
#include "netlink.h"
#include "network-coding.h"
#include "originator.h"
#include "routing.h"
#include "send.h"
@@ -103,7 +102,6 @@ static int __init batadv_init(void)

	batadv_v_init();
	batadv_iv_init();
	batadv_nc_init();
	batadv_tp_meter_init();

	batadv_event_workqueue = create_singlethread_workqueue("bat_events");
@@ -218,12 +216,6 @@ int batadv_mesh_init(struct net_device *mesh_iface)
		goto err_dat;
	}

	ret = batadv_nc_mesh_init(bat_priv);
	if (ret < 0) {
		atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING);
		goto err_nc;
	}

	batadv_gw_init(bat_priv);
	batadv_mcast_init(bat_priv);

@@ -232,8 +224,6 @@ int batadv_mesh_init(struct net_device *mesh_iface)

	return 0;

err_nc:
	batadv_dat_free(bat_priv);
err_dat:
	batadv_bla_free(bat_priv);
err_bla:
@@ -264,7 +254,6 @@ void batadv_mesh_free(struct net_device *mesh_iface)
	batadv_gw_node_free(bat_priv);

	batadv_v_mesh_free(bat_priv);
	batadv_nc_mesh_free(bat_priv);
	batadv_dat_free(bat_priv);
	batadv_bla_free(bat_priv);

@@ -336,11 +325,6 @@ int batadv_max_header_len(void)
	header_len = max_t(int, header_len,
			   sizeof(struct batadv_bcast_packet));

#ifdef CONFIG_BATMAN_ADV_NC
	header_len = max_t(int, header_len,
			   sizeof(struct batadv_coded_packet));
#endif

	return header_len + ETH_HLEN;
}

Loading