diff --git a/batctl/Makefile b/batctl/Makefile index ba83914..29b6460 100644 --- a/batctl/Makefile +++ b/batctl/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=batctl PKG_VERSION:=2018.1 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_HASH:=27877d0da6916f88a6cecbbb3f3d23cc4558ef7c7294324bf4fd050ed606b553 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz diff --git a/batctl/patches/0005-batctl-Don-t-stop-when-create_interface-detected-exi.patch b/batctl/patches/0005-batctl-Don-t-stop-when-create_interface-detected-exi.patch new file mode 100644 index 0000000..1458bf5 --- /dev/null +++ b/batctl/patches/0005-batctl-Don-t-stop-when-create_interface-detected-exi.patch @@ -0,0 +1,31 @@ +From: Sven Eckelmann +Date: Fri, 15 Jan 2021 23:38:31 +0100 +Subject: batctl: Don't stop when create_interface detected existing interface + +"batctl meshif bat0 interface add ..." should never be called in parallel. +But when something still does this, it could be that the code first detects +the missing meshif and then tries to create it - which fails when another +process requested the creation of the same interface slightly before batctl +did it. + +But this should not prevent batctl to add the lower interface to the +meshif. It is not really important that the batctl process was the one +which created it - only that it exists is important. + +Fixes: 25022e0b154d ("batctl: Use rtnl to add/remove interfaces") +Signed-off-by: Sven Eckelmann +Origin: upstream, https://git.open-mesh.org/batctl.git/commit/5d465bfd9a19c4bda20fb4e36c6e4b22c56ceb17 + +diff --git a/interface.c b/interface.c +index 1ad36826fdb91a3e0254ed4dec758e7c383596e9..ac95641953f76d77ef91bf77bb7a086a673c1dd2 100644 +--- a/interface.c ++++ b/interface.c +@@ -398,7 +398,7 @@ int interface(char *mesh_iface, int argc, char **argv) + ifmaster = if_nametoindex(mesh_iface); + if (!manual_mode && !ifmaster && rest_argv[0][0] == 'a') { + ret = create_interface(mesh_iface); +- if (ret < 0) { ++ if (ret < 0 && ret != -EEXIST) { + fprintf(stderr, + "Error - failed to create batman-adv interface: %s\n", + strerror(-ret));