# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2007-2019  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
	default y
	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.
