# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2007-2020  B.A.T.M.A.N. contributors:
#
# Marek Lindner, Simon Wunderlich

#
# 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 LIBCRC32C
	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
	  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"
	depends on BATMAN_ADV && !(CFG80211=m && BATMAN_ADV=y)
	default y
	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
	select CRC16
	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 y
	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
	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)
	default y
	help
	  This option enables the multicast optimisation which aims to
	  reduce the air overhead while improving the reliability of
	  multicast messages.

config BATMAN_ADV_DEBUGFS
	bool "batman-adv debugfs entries"
	depends on BATMAN_ADV
	depends on DEBUG_FS
	help
	  Enable this to export routing related debug tables via debugfs.
	  The information for each soft-interface and used hard-interface can be
	  found under batman_adv/

	  If unsure, say N.

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 debugfs log or tracing
	  buffer. The output is controlled via the batadv netdev specific
	  log_level setting.

config BATMAN_ADV_SYSFS
	bool "batman-adv sysfs entries"
	depends on BATMAN_ADV
	help
	  Say Y here if you want to enable batman-adv device configuration and
	  status interface through sysfs attributes. It is replaced by the
	  batadv generic netlink family but still used by various userspace
	  tools and scripts.

	  If unsure, say Y.

config BATMAN_ADV_TRACING
	bool "B.A.T.M.A.N. tracing support"
	depends on BATMAN_ADV
	depends on EVENT_TRACING
	help
	  This is an option for use by developers; most people should
	  say N here. Select this option to gather traces like the debug
	  messages using the generic tracing infrastructure of the kernel.
	  BATMAN_ADV_DEBUG must also be selected to get trace events for
	  batadv_dbg.
