The batman-adv kernel module can be build without sysfs support. This will
stop the kernel module from creating the "mesh" directory. The alfred init
script must not depend on this folder to start the daemon up.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The alfred daemon allows to be started with multiple interfaces. The first
interface is used for communication and to calculate the source mac
address. The rest of the interfaces are only used for communication.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The '-m' option to select the mesh interface or vlan interfaces was
replaced with device type specific subcommand prefixes:
* meshif <netdev>
* vlan <vdev>
* meshif <netdev> vid <vid>
* hardif <netdev>
This change should also be made in the proto script to allow batctl to drop
the support of '-m' completely in the future.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* add tcpdump support for MCAST TVLV, unicast fragments and coded packets
* implement support for multicast RTR flags
* avoid some kernel deprecation warning by using more generic netlink over
sysfs
* use type specific prefixes to select mesh interface or vlan instead of '-m'
* add support for hardif specific settings
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The legacy init script had various problems in comparison with procd based
init scripts. It wasn't able to correctly track the running process
instance and thus could:
* accidentally kill another (non init controlled) daemon instance when stop
is used
* not restart the daemon depending on config changes when reload is used
* not automatically start/restart daemon when the used netdev was
created/recreated
The information about a running instance and its parameters can now be
handled by a global controller (procd). The process must not fork anymore
and leave the control to procd. The process with its parameters can then be
used by procd to trigger the stop/start of the process at the right time.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The legacy init script had various problems in comparison with procd based
init scripts. It wasn't able to correctly track the running process
instance and thus could:
* accidentally kill another (non init controlled) daemon instance when stop
is used
* not restart the daemon depending on config changes when reload is used
The information about a running instance and its parameters can now be
handled by a global controller (procd). The process must not fork anymore
and leave the control to procd. The process with its parameters can then be
used by procd to trigger the stop/start of the process at the right time.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
batctl isn't using any special rules in Build/Compile. It is cleaner to
directly use the global Build/Compile/Default instead of having a
functional similar copy in the package Makefile
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The Makefile defines the init-y variable but neither this Makefile nor
OpenWrt's common files use this variable.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
alfred isn't using any special rules in Build/Compile. It is cleaner to
directly use the global Build/Compile/Default instead of having a
functional similar copy in the package Makefile
Signed-off-by: Sven Eckelmann <sven@narfation.org>
vis isn't using any special rules in Build/Compile. It is cleaner to
directly use the global Build/Compile/Default instead of having a
functional similar copy in the package Makefile
Signed-off-by: Sven Eckelmann <sven@narfation.org>
batmand isn't using any special rules in Build/Compile. It is cleaner to
directly use the global Build/Compile/Default instead of having a
functional similar copy in the package Makefile
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The mac80211 package version was updated to a 5.2 based one in commit
0b2c42ced21a ("mac80211: Update to version 5.2-rc7"). The batman-adv module
must therefore no longer the pre-5.2 API.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The ap_isolation setting only supports boolean values. So setting an empty
string as ap_isolation is not supported by batctl.
Fixes: f5205d7d24 ("batman-adv: upgrade package to latest release 2014.2.0")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
B.A.T.M.A.N. V support additional settings which are hardif specific. The
batadv_hardif proto has to expose them to allow automatic configuration.
The default configuration would be:
config interface 'bat0_hardif_eth0'
option proto 'batadv_hardif'
option master 'bat0'
option ifname 'eth0'
option mtu '1536'
option 'elp_interval' 500
# string like '1mbit' is accepted instead of kbit for override
option 'throughput_override' '0'
Signed-off-by: Sven Eckelmann <sven@narfation.org>
batctl currently supports settings which are either mesh interface or vlan
specific. But B.A.T.M.A.N. V introduced two additional settings which are
hard (slave) interface specific.
To support these, an additional command prefix called hardif is implemented
for some sysfs commands:
$ batctl -m bat0 hardif eth0 ..
The usable commands with that are:
* elp_interval
* throughput_override
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The state of slave interfaces are handled differently depending on whether
the interface is up or not. All active interfaces (IFF_UP) will transmit
OGMs. But for B.A.T.M.A.N. IV, also non-active interfaces are scheduling
(low TTL) OGMs on active interfaces. The code which setups and schedules
the OGMs must therefore already be called when the interfaces gets added as
slave interface and the transmit function must then check whether it has to
send out the OGM or not on the specific slave interface.
But v2016.3 moved the setup code from the enable function to the activate
function. The latter is called either when the added slave was already up
when batadv_hardif_enable_interface processed the new interface or when a
NETDEV_UP event was received for this slave interfac. As result, each
NETDEV_UP would schedule a new OGM worker for the interface and thus OGMs
would be send a lot more than expected.
Fixes: 549909f89d ("batman-adv: upgrade package to latest release 2016.3")
Reported-by: Linus Lüssing <linus.luessing@c0d3.blue>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 5.2)
* coding style cleanups and refactoring
* implement multicast-to-unicast support for multiple targets
* deprecate sysfs support and make it optional
* refresh DAT entry timeouts on incoming ARP Replies
* bugs squashed:
- fix multicast tt/tvlv worker locking
- drop roam tvlv handler when unregistering mesh interface
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* coding style cleanups and refactoring
* add multicast_fanout setting subcommand
* implement netlink based support for remaining sysfs-only features
* drop support for deprecated log command support
* remove non-netlink support for translating MAC addresses to originators
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 5.1)
* coding style cleanups and refactoring
* implement meshif, hardif and vlan config interface via netlink
* snoop DHCP ACKs to improve DAT cache efficiency
* bugs squashed:
- avoid potential reference counter underflows and use-after free errors for
several objects
- fix GCC warning when B.A.T.M.A.N. V is build in but cfg80211 is not
available
- reject too small VLAN packets before they are processed further
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* coding style cleanups and refactoring
* introduce support for batadv meshif, hardif and vlan configuration via netlink
* replace multicast_mode with multicast_forceflood settings subcommand
* add hop_penalty setting subcommand
Signed-off-by: Sven Eckelmann <sven@narfation.org>
batman-adv allows to configure three different objects:
* batadv hardif
- network interface used by batadv meshif to transport the batman-adv
packets
- its master interface is set to the batadv meshif
* batadv (meshif/softif)
- virtual interface that emulates a normal 802.3 interface on top
- encapsulates traffic and forwards it via the batadv hardifs
* batadv vlan
- potential VLAN ID on top of batadv meshif
- allows filtering of traffic from specific VIDs
While batadv vlan objects were already represented as an own proto
"batadv_vlan", the batadv meshif could never be fully configured using
/etc/config/network. Instead, parts of its configuration were stored in
/etc/config/batman_adv and some in the interfaces with the "batadv" proto.
To increase the confusion, the "batadv" proto wasn't used to define the
batadv meshif but to identify batadv (slave) hardifs. The batman-adv
meshifs were also never created directly but only when a hardif was
configured. The actual modification of the configuration settings was then
applied using a hotplug script hack. The batadv meshif network interface
could therefore only be created when an hardif was available and not
manipulated with ifup/ifdown. Also `/etc/init.d/network reload` didn't
modify the batadv meshif interface configuration correctly.
The "batadv" is now renamed to "batadv_hardif" and a new "batadv" proto is
used to configure the main (meshif) network interface with all its
configuration.
A simple network configuration with WiFi & ethernet interfaces and static
IP on top of bat0 would look like:
# batadv meshif bat0
config interface 'bat0'
option proto 'batadv'
option routing_algo 'BATMAN_IV'
option aggregated_ogms 1
option ap_isolation 0
option bonding 0
option fragmentation 1
#option gw_bandwidth '10000/2000'
option gw_mode 'off'
#option gw_sel_class 20
option log_level 0
option orig_interval 1000
option bridge_loop_avoidance 1
option distributed_arp_table 1
option multicast_mode 1
option network_coding 0
option hop_penalty 30
option isolation_mark '0x00000000/0x00000000'
# add *single* wifi-iface with network bat0_hardif_wlan as hardif to bat0
config interface 'bat0_hardif_wlan'
option mtu '1536'
option proto 'batadv_hardif'
option master 'bat0'
# option ifname is filled out by the wifi-iface
# add eth0 as hardif to bat0
config interface 'bat0_hardif_eth0'
option proto 'batadv_hardif'
option master 'bat0'
option ifname 'eth0'
option mtu '1536'
# configure IP on bat0
config interface 'bat0_lan'
option ifname 'bat0'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
Signed-off-by: Sven Eckelmann <sven@narfation.org>
hop_penalty is the last remaining setting which is directly writing to
sysfs instead of using a implementation (sysfs vs. netlink) abstraction
layer. batctl now provides a wrapper function that allows the script to
directly use it to take care of communicating with the driver.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The batman-adv scripts are still using sysfs for setting the hop_penalty.
Since the sysfs is deprecated, the batctl interface should be used to make
it independent of implementation details (sysfs vs. netlink).
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The batctl tool should be used for modifying settings in the batman-adv
driver to keep the scripts consistent and allow to use the correct way of
communicating with the kernel (sysfs vs. netlink).
The gw_mode, gw_bandwidth and gw_sel_class options are all handled by
the same gw_mode command in batctl and thus have to be combined depending
on the "gw_mode" value.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The actual memset fix for cfg80211_get_station's sinfo is already part of
the mac80211 package and doesn't have to be shipped anymore with
batman-adv.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
__poll_t is already defined by the mac80211's backports and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
from_timer is already defined by the mac80211's backports and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
skb_put* is already defined by the mac80211's backports and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
nla_put_u64_64bit is already defined by the mac80211's backports and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
netif_trans_update is already defined by the mac80211's backports and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
NL80211_STA_INFO_EXPECTED_THROUGHPUT is defined by the mac80211 package and
doesn't have to be redefined in the compat-hacks.h.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The linux/build_bug.h is already provided by mac80211's backports. It is
not needed anymore to adjust the includes to use the older linux/bug.h
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 5.0)
* coding style cleanups and refactoring
* allow to enable debug tracing without full batman-adv debugfs support
* enable inconsistency reporting for most netlink dump commands
* bugs squashed:
- avoid unnecessary kernel warning (panic) during detection of interface loops
- work around incorrect ethernet header offset in transmit code path
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* coding style cleanups and refactoring
* add gateway selection manpage section for B.A.T.M.A.N. V
* bugs squashed:
- re-integrate support for translation table unicast/multicast filter
- avoid incorrect warning about disabled mesh interface when debugfs
support is not enabled in batman-adv
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The batctl binary is currently optional for batman-adv installations. But
new configuration settings will only be exposed via generic netlink. The
batctl tool will therefore be required to modify them.
batctl must therefore no longer depend on batman-adv but batman-adv must
depend on batctl. Some already implemented settings are already moved to
batctl.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The batctl binary is currently optional for batman-adv installations. But
new configuration settings will only be exposed via generic netlink. The
batctl tool will therefore be required to modify them.
To also fit batctl in some of the smaller devices, a new variant
batctl-tiny is build which only provides the settings subcommands. The
batctl-default variant is equal to the old batctl package and batctl-full
also provides the commands which were disabled until now.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The commands which should have no support for -t/-u/-m/-i were allowed to
accept these parameters but commands which should have accepted them were
denying them.
Fixes: 8936141bf0 ("batctl: upgrade package to latest release 2018.4")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 4.20)
* coding style cleanups and refactoring
* improve tx performance by avoiding unnecessary locking
* add help messages regarding deprecation of debugfs files
* support for debug message tracepoints
* explicit ELP padding to allow TVLVs in the future
* bugs squashed:
- fix skb_over_panic for merged fragments with small tailroom
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* coding style cleanups and refactoring
* correction of manpage spelling errors
* new subcommand "event" to receive netlink notifications
* infrastructure to disable commands during build time
* drop of the legacy vis subcommands
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* bugs squashed:
- fixed detection of own IPv4 packets
- use manual IPv4 ARP requests to retrieve MAC of neighbors
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The OpenWrt dependency builder cannot extract the crc16 dependency from
the KMOD_BATMAN_ADV_BLA dependencies. They have to be specified directly in
the OpenWrt Makefile's DEPENDS line to avoid error when BLA is enabled:
Package kmod-batman-adv is missing dependencies for the following libraries:
crc16.ko
Reported-by: Lech Perczak <lech.perczak@gmail.com>
Fixes: 0db66160aa ("batman-adv: Sync config options with kernel Kconfig")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The translation table code from batman-adv is only using the function
crc32c which is part of kmod-lib-crc32c. The kmod-crypto-crc32c is then
only used by kmod-lib-crc32c but not batman-adv.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Kernel modules like ath9k and ath10k are using the same Kconfig option
symbols as used in the kernel. This makes it easier to share them between
these two projects. A similar approach should be used for the batman-adv
module.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The kernel already provides all available kernel options for batman-adv and
even includes more verbose descriptions of each option. Importing this
Kconfig (with minor adjustments) file as Config.in allows to share most
information between kernel and OpenWrt.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The multicast optimization compile option is disabled by default in the
Kconfig of batman-adv. The out-of-tree module should keep this setting in
sync and thus has to also disable the build of multicast optimization by
default.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The options in the kernel Kconfig have a different order than the one in
the OptionWrt Config.in. This makes it unnecessary hard to compare these
two files.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The debug log is only available when the debugfs is also enabled. This
must be reflected in Kconfig to avoid incompatible selection of batman-adv
options.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
There is no benefit to overwrite the PKG_BUILD_DIR directory for batctl. As
seen with kmod-batman-adv, it actually can also break the build.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
OpenWrt is using a modified version of the software and these modifications
may introduce extra bugs (or behavior changes). It is also patched for
stable releases instead of switching to new releases. The revision should
therefore be added to the version number to make it easier understandable
which modified version the user may have installed.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
OpenWrt is using a modified version of the software and these modifications
may introduce extra bugs (or behavior changes). It is also patched for
stable releases instead of switching to new releases. The revision should
therefore be added to the version number to make it easier understandable
which modified version the user may have installed.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
OpenWrt is using a modified version of the software and these modifications
may introduce extra bugs (or behavior changes). It is also patched for
stable releases instead of switching to new releases. The revision should
therefore be added to the version number to make it easier understandable
which modified version the user may have installed.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The Module.symvers with the exported symbols of all other kernel modules in
OpenWrt is usually placed in the main source directory of the package. But
the actual sources for batman-adv are found in net/batman-adv. OpenWrt must
therefore be informed to move it to this subdirectory or otherwise modpost
will fail to find the symbols
WARNING: "cfg80211_get_station" [.../batman-adv-2018.3/net/batman-adv/batman-adv.ko] undefined!
The dependency will then be missing in the .modinfo depends= option and
thus it the kernel module loader will not correctly load the cfg80211.ko
during bootup.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 4.19)
* coding style cleanups and refactoring
* enable the DAT by default for the in-tree Linux module
* bugs squashed:
- fix segfault when writing to sysfs files under batman_adv/ with
CONFIG_BATMAN_ADV_DEBUG enabled
- avoid information leakage in probe ELP packets
- adjust reference counters when queue_work fails
- prevent duplicated entries in various lists
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.16 - 4.18)
* dropped support for kernels < 3.16 (note the removed build directory)
* coding style cleanups and refactoring
* avoid old nodes disabling multicast optimizations completely
* disable ethtool based B.A.T.M.A.N. V speed detection for virtual interfaces
* enable B.A.T.M.A.N. V compilation by default
* disable debugfs support by default
* bugs squashed:
- fix TT sync flags for intermediate TT responses
- avoid race in TT TVLV allocator helper
- prevent TT request storms by not sending inconsistent TT TVLVs
- fix best gw refcnt after netlink dump
- adjust debugfs paths for interfaces after a namechange
- fix single entry TT non-sync flag storage
- fix multicast TT issues with bogus ROAM flags
- work around insufficient memory initialization in cfg80211's station info
Signed-off-by: Sven Eckelmann <sven@narfation.org>
It is not necessary to install each file manually to the target path. A
simple recursive copy is enough.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The rule can be removed because the OpenWrt build system takes care of the
removal of the build directory.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
The path $(BUILD_DIR)/$(PKG_NAME) is not used anymore. The rule can be
removed and the OpenWrt build system takes care of the removal of the build
directory.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
OpenWrt is able since a while to automatically install all files in ./src/
to the PKG_BUILD_DIR. It is no longer necessary to provide special
Build/Prepare rules to do so.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Users may want to know what options can be specified and in which form they
have to specified. A commented out list of settings is helpful here while
making it not necessary to copy the default settings from batman-adv to
this config all the time.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
All tools which were known to the batman-adv development team are
supporting the batman-adv netlink interface since a while. Also debugfs is
not supported for batman-adv interfaces in any non-default netns. Thus
disabling CONFIG_BATMAN_ADV_DEBUGFS by default should not cause problems on
most systems. It is still possible to enable it in case it is still
required in a specific setup.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
cfg80211 is loaded by kmodloader after the modules with a priority
(AutoLoad) are loaded. batman-adv should therefore also be loaded at that
time and must not load cfg80211 itself. The information in the ELF header
are enough for kmodloader to load these two modules in the correct order.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.2 - 4.17)
* coding style cleanups and refactoring
* add DAT cache and multicast flags netlink support
* avoid redundant multicast TT entries
* bugs squashed:
- update data pointers after skb_cow()
- fix header size check in batadv_dbg_arp()
- fix skbuff rcsum on packet reroute
- fix multicast-via-unicast transmission with AP isolation
- fix packet loss for broadcasted DHCP packets to a server
- fix multicast packet loss with a single WANT_ALL_IPV4/6 flag
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* synchronization of batman-adv netlink and packet headers
* add DAT cache and multicast flags netlink support
* disable translation support for non-unicast mac addresses
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* synchronization of batman-adv netlink and packet headers
* mark licenses clearer, change batman-adv UAPI header from ISC to MIT
* coding style cleanups and refactoring
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* synchronization of batman-adv netlink and packet headers
* mark licenses clearer, change batman-adv UAPI header from ISC to MIT
* coding style cleanups and refactoring
Signed-off-by: Sven Eckelmann <sven@narfation.org>
* support latest kernels (3.2 - 4.16)
* coding style cleanups and refactoring
* mark licenses clearer, change UAPI header from ISC to MIT
* bugs squashed:
- fix packet checksum handling in receive path
- fix handling of large number of interfaces
- fix netlink dumping of gateways and BLA claims+backbones
Signed-off-by: Sven Eckelmann <sven@narfation.org>
batman-adv must make sure that ether_setup is already declared via
linux/netdevice.h before the preprocessor can patch the use of it in
batman-adv. Otherwise it is tried to also patch the declaration of
ether_setup.
Fixes: 8da2f5cbb1 ("batman-adv: upgrade package to latest release 2017.2")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
This patch fixes an issue in the translation table code potentially
leading to a TT Request + Response storm. The issue may occur for nodes
involving BLA and an inconsistent configuration of the batman-adv AP
isolation feature. However, since the new multicast optimizations, a
single, malformed packet may lead to a mesh-wide, persistent
Denial-of-Service, too.
The issue occurs because nodes are currently OR-ing the TT sync flags of
all originators announcing a specific MAC address via the
translation table. When an intermediate node now receives a TT Request
and wants to answer this on behave of the destination node then this
intermediate node now responds with an altered flag field and broken
CRC. The next OGM of the real destination will lead to a CRC mismatch
and triggering a TT Request and Response again.
Furthermore, the OR-ing is currently never undone as long as at least
one originator announcing the according MAC address remains, leading to
the potential persistency of this issue.
This patch fixes this issue by storing the flags used in the CRC
calculation on a a per TT orig entry basis to be able to respond with
the correct, original flags in an intermediate TT Response for one
thing. And to be able to correctly unset sync flags once all nodes
announcing a sync flag vanish for another.
Signed-off-by: Sven Eckelmann <sven@narfation.org>