From 758d919870103d6fec6d0be29b0436e41f004257 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Thu, 21 Jan 2016 16:04:20 +0100 Subject: [PATCH 1/5] batman-adv: Use the mac80211 compat layer BATMAN_V (in the upcoming release) will use structures from the mac80211 package. These structures can be incompatible to the structures defined in the header of the kernel. This can lead to weird problems like stack overflows or memory corruptions. To avoid this, the batman-adv has to be compiled against the mac80211 headers instead of the kernel headers. But this requires that the compatibility headers of compat-wireless are used. So the batman-adv compatibility layer has (mostly) be removed and instead the compat-wireless/mac80211 compat layer has to be used. Signed-off-by: Sven Eckelmann --- batman-adv/Makefile | 40 ++++++++++++------- batman-adv/patches/0000-compat-hacks.patch | 46 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 batman-adv/patches/0000-compat-hacks.patch diff --git a/batman-adv/Makefile b/batman-adv/Makefile index 1eb6bbe..6e24d4d 100644 --- a/batman-adv/Makefile +++ b/batman-adv/Makefile @@ -27,7 +27,7 @@ define KernelPackage/batman-adv URL:=https://www.open-mesh.org/ MAINTAINER:=Marek Lindner SUBMENU:=Network Support - DEPENDS:=+KMOD_BATMAN_ADV_BLA:kmod-lib-crc16 +kmod-crypto-core +kmod-crypto-crc32c +kmod-lib-crc32c + DEPENDS:=+KMOD_BATMAN_ADV_BLA:kmod-lib-crc16 +kmod-crypto-core +kmod-crypto-crc32c +kmod-lib-crc32c +kmod-cfg80211 TITLE:=B.A.T.M.A.N. Adv FILES:=$(PKG_BUILD_DIR)/net/batman-adv/batman-adv.$(LINUX_KMOD_SUFFIX) AUTOLOAD:=$(call AutoLoad,50,batman-adv) @@ -47,20 +47,36 @@ define Package/kmod-batman-adv/conffiles /etc/config/batman-adv endef -MAKE_BATMAN_ADV_ARGS += \ - CROSS_COMPILE="$(TARGET_CROSS)" \ - KERNELPATH="$(LINUX_DIR)" \ - ARCH="$(LINUX_KARCH)" \ - PATH="$(TARGET_PATH)" \ - SUBDIRS="$(PKG_BUILD_DIR)" \ - PWD="$(PKG_BUILD_DIR)" \ - LINUX_VERSION="$(LINUX_VERSION)" \ +PKG_EXTRA_KCONFIG:= \ + CONFIG_BATMAN_ADV=m \ CONFIG_BATMAN_ADV_DEBUG=$(if $(CONFIG_KMOD_BATMAN_ADV_DEBUG_LOG),y,n) \ CONFIG_BATMAN_ADV_BLA=$(if $(CONFIG_KMOD_BATMAN_ADV_BLA),y,n) \ CONFIG_BATMAN_ADV_DAT=$(if $(CONFIG_KMOD_BATMAN_ADV_DAT),y,n) \ CONFIG_BATMAN_ADV_MCAST=$(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),y,n) \ CONFIG_BATMAN_ADV_NC=$(if $(CONFIG_KMOD_BATMAN_ADV_NC),y,n) \ - REVISION="" all + +PKG_EXTRA_CFLAGS:= \ + $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(PKG_EXTRA_KCONFIG)))) \ + $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(PKG_EXTRA_KCONFIG)))) \ + +NOSTDINC_FLAGS = \ + -I$(PKG_BUILD_DIR)/net/batman-adv \ + -I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \ + -I$(STAGING_DIR)/usr/include/mac80211-backport \ + -I$(STAGING_DIR)/usr/include/mac80211/uapi \ + -I$(STAGING_DIR)/usr/include/mac80211 \ + -include backport/backport.h + +define Build/Compile + +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + SUBDIRS="$(PKG_BUILD_DIR)/net/batman-adv" \ + $(PKG_EXTRA_KCONFIG) \ + EXTRA_CFLAGS="$(PKG_EXTRA_CFLAGS)" \ + NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \ + modules +endef define Build/Prepare $(call Build/Prepare/Default) @@ -68,10 +84,6 @@ define Build/Prepare $(PKG_BUILD_DIR)/net/batman-adv/main.h endef -define Build/Compile - $(MAKE) -C "$(PKG_BUILD_DIR)" $(MAKE_BATMAN_ADV_ARGS) -endef - define Build/Clean rm -rf $(BUILD_DIR)/$(PKG_NAME)/ endef diff --git a/batman-adv/patches/0000-compat-hacks.patch b/batman-adv/patches/0000-compat-hacks.patch new file mode 100644 index 0000000..78bdc51 --- /dev/null +++ b/batman-adv/patches/0000-compat-hacks.patch @@ -0,0 +1,46 @@ +diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c +index 730cfa8..39e5694 100644 +--- a/net/batman-adv/hard-interface.c ++++ b/net/batman-adv/hard-interface.c +@@ -47,6 +47,24 @@ + #include "sysfs.h" + #include "translation-table.h" + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0) ++ ++#define dev_get_iflink(_net_dev) ((_net_dev)->iflink) ++ ++#endif /* < KERNEL_VERSION(4, 1, 0) */ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) ++ ++#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ ++ netdev_set_master(dev, upper_dev) ++ ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) ++ ++#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ ++ netdev_master_upper_dev_link(dev, upper_dev) ++ ++#endif /* < KERNEL_VERSION(4, 5, 0) */ ++ + /** + * batadv_hardif_release - release hard interface from lists and queue for + * free after rcu grace period +diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c +index 6c65de9..06d0330 100644 +--- a/net/batman-adv/soft-interface.c ++++ b/net/batman-adv/soft-interface.c +@@ -60,6 +60,12 @@ + #include "sysfs.h" + #include "translation-table.h" + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) ++ ++#define IFF_NO_QUEUE 0; dev->tx_queue_len = 0 ++ ++#endif /* < KERNEL_VERSION(4, 3, 0) */ ++ + static int batadv_get_settings(struct net_device *dev, struct ethtool_cmd *cmd); + static void batadv_get_drvinfo(struct net_device *dev, + struct ethtool_drvinfo *info); From f8dd2baaa04e2a5fe50321920b3f456f896860d8 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 25 Mar 2016 10:44:07 +0100 Subject: [PATCH 2/5] batman-adv: Move compat-hacks to separate file The content of this file should actually be included somehow in backport.git so it will become part of the mac80211 package. Still keep this for now in a separate file so it is easier to extract them. Signed-off-by: Sven Eckelmann --- batman-adv/Makefile | 4 +- batman-adv/files/compat-hacks.h | 39 ++++++++++++++++++ batman-adv/patches/0000-compat-hacks.patch | 46 ---------------------- 3 files changed, 42 insertions(+), 47 deletions(-) create mode 100644 batman-adv/files/compat-hacks.h delete mode 100644 batman-adv/patches/0000-compat-hacks.patch diff --git a/batman-adv/Makefile b/batman-adv/Makefile index 6e24d4d..1c2aa39 100644 --- a/batman-adv/Makefile +++ b/batman-adv/Makefile @@ -65,7 +65,8 @@ NOSTDINC_FLAGS = \ -I$(STAGING_DIR)/usr/include/mac80211-backport \ -I$(STAGING_DIR)/usr/include/mac80211/uapi \ -I$(STAGING_DIR)/usr/include/mac80211 \ - -include backport/backport.h + -include backport/backport.h \ + -include $(PKG_BUILD_DIR)/compat-hacks.h define Build/Compile +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ @@ -80,6 +81,7 @@ endef define Build/Prepare $(call Build/Prepare/Default) + $(CP) ./files/compat-hacks.h $(PKG_BUILD_DIR)/ $(SED) '/#define _NET_BATMAN_ADV_MAIN_H_/a\#undef CONFIG_MODULE_STRIPPED' \ $(PKG_BUILD_DIR)/net/batman-adv/main.h endef diff --git a/batman-adv/files/compat-hacks.h b/batman-adv/files/compat-hacks.h new file mode 100644 index 0000000..e95b64d --- /dev/null +++ b/batman-adv/files/compat-hacks.h @@ -0,0 +1,39 @@ +/* Please avoid adding hacks here - instead add it to mac80211/backports.git */ + +#include /* LINUX_VERSION_CODE */ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0) + +#define dev_get_iflink(_net_dev) ((_net_dev)->iflink) + +#endif /* < KERNEL_VERSION(4, 1, 0) */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) + +#include + +#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) ({\ + BUILD_BUG_ON(upper_priv != NULL); \ + BUILD_BUG_ON(upper_info != NULL); \ + netdev_set_master(dev, upper_dev); \ +}) + +#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) + +#include + +#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) ({\ + BUILD_BUG_ON(upper_priv != NULL); \ + BUILD_BUG_ON(upper_info != NULL); \ + netdev_master_upper_dev_link(dev, upper_dev); \ +}) + +#endif /* < KERNEL_VERSION(4, 5, 0) */ + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) + +#define IFF_NO_QUEUE 0; dev->tx_queue_len = 0 + +#endif /* < KERNEL_VERSION(4, 3, 0) */ diff --git a/batman-adv/patches/0000-compat-hacks.patch b/batman-adv/patches/0000-compat-hacks.patch deleted file mode 100644 index 78bdc51..0000000 --- a/batman-adv/patches/0000-compat-hacks.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c -index 730cfa8..39e5694 100644 ---- a/net/batman-adv/hard-interface.c -+++ b/net/batman-adv/hard-interface.c -@@ -47,6 +47,24 @@ - #include "sysfs.h" - #include "translation-table.h" - -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0) -+ -+#define dev_get_iflink(_net_dev) ((_net_dev)->iflink) -+ -+#endif /* < KERNEL_VERSION(4, 1, 0) */ -+ -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) -+ -+#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ -+ netdev_set_master(dev, upper_dev) -+ -+#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) -+ -+#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ -+ netdev_master_upper_dev_link(dev, upper_dev) -+ -+#endif /* < KERNEL_VERSION(4, 5, 0) */ -+ - /** - * batadv_hardif_release - release hard interface from lists and queue for - * free after rcu grace period -diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c -index 6c65de9..06d0330 100644 ---- a/net/batman-adv/soft-interface.c -+++ b/net/batman-adv/soft-interface.c -@@ -60,6 +60,12 @@ - #include "sysfs.h" - #include "translation-table.h" - -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) -+ -+#define IFF_NO_QUEUE 0; dev->tx_queue_len = 0 -+ -+#endif /* < KERNEL_VERSION(4, 3, 0) */ -+ - static int batadv_get_settings(struct net_device *dev, struct ethtool_cmd *cmd); - static void batadv_get_drvinfo(struct net_device *dev, - struct ethtool_drvinfo *info); From 0cdf3ba21c3d516f4ed9d1f0430d99c049b46628 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Thu, 21 Apr 2016 15:39:39 +0200 Subject: [PATCH 3/5] batman-adv: upgrade package to latest release 2016.1 Signed-off-by: Sven Eckelmann --- batman-adv/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/batman-adv/Makefile b/batman-adv/Makefile index 1c2aa39..c071d7c 100644 --- a/batman-adv/Makefile +++ b/batman-adv/Makefile @@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=batman-adv -PKG_VERSION:=2016.0 +PKG_VERSION:=2016.1 PKG_RELEASE:=1 -PKG_MD5SUM:=5ab2b29a386d02c16019e469d3981d41 +PKG_MD5SUM:=8c8e449009b4d29512d26ee308960bb5 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) From 6363b1ddc5f73558ab94573b74cd4d3d600233ff Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Tue, 19 Jan 2016 12:40:10 +0100 Subject: [PATCH 4/5] batman-adv: Allow to select routing algorithm The network config section for proto batadv now allows to select the routing algorithm via the option routing_algo. This allows to chose between BATMAN_IV and BATMAN_V when BATMAN_V is released. This option is only useful when a new batman-adv device is created and not when only a device is added to an already existing batman-adv device. Signed-off-by: Sven Eckelmann --- batman-adv/files/lib/netifd/proto/batadv.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/batman-adv/files/lib/netifd/proto/batadv.sh b/batman-adv/files/lib/netifd/proto/batadv.sh index 632a209..1e0c9d0 100644 --- a/batman-adv/files/lib/netifd/proto/batadv.sh +++ b/batman-adv/files/lib/netifd/proto/batadv.sh @@ -6,14 +6,18 @@ init_proto "$@" proto_batadv_init_config() { proto_config_add_string "mesh" + proto_config_add_string "routing_algo" } proto_batadv_setup() { local config="$1" local iface="$2" - local mesh - json_get_vars mesh + local mesh routing_algo + json_get_vars mesh routing_algo + + [ -n "$routing_algo" ] || routing_algo="BATMAN_IV" + echo "$routing_algo" > "/sys/module/batman_adv/parameters/routing_algo" echo "$mesh" > "/sys/class/net/$iface/batman_adv/mesh_iface" proto_init_update "$iface" 1 From 4c3eecfac3ac73e63fae28a0d51def8e1cd5e261 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Thu, 11 Feb 2016 23:08:20 +0100 Subject: [PATCH 5/5] batman-adv: Add B.A.T.M.A.N. V support Signed-off-by: Sven Eckelmann --- batman-adv/Config.in | 4 ++++ batman-adv/Makefile | 1 + batman-adv/files/compat-hacks.h | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/batman-adv/Config.in b/batman-adv/Config.in index 86fc795..48092e7 100644 --- a/batman-adv/Config.in +++ b/batman-adv/Config.in @@ -24,3 +24,7 @@ config KMOD_BATMAN_ADV_NC depends on PACKAGE_kmod-batman-adv default n +config KMOD_BATMAN_ADV_BATMAN_V + bool "enable batman v routing algorithm" + depends on PACKAGE_kmod-batman-adv + default n diff --git a/batman-adv/Makefile b/batman-adv/Makefile index c071d7c..20664e1 100644 --- a/batman-adv/Makefile +++ b/batman-adv/Makefile @@ -54,6 +54,7 @@ PKG_EXTRA_KCONFIG:= \ CONFIG_BATMAN_ADV_DAT=$(if $(CONFIG_KMOD_BATMAN_ADV_DAT),y,n) \ CONFIG_BATMAN_ADV_MCAST=$(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),y,n) \ CONFIG_BATMAN_ADV_NC=$(if $(CONFIG_KMOD_BATMAN_ADV_NC),y,n) \ + CONFIG_BATMAN_ADV_BATMAN_V=$(if $(CONFIG_KMOD_BATMAN_ADV_BATMAN_V),y,n) \ PKG_EXTRA_CFLAGS:= \ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(PKG_EXTRA_KCONFIG)))) \ diff --git a/batman-adv/files/compat-hacks.h b/batman-adv/files/compat-hacks.h index e95b64d..5126fc2 100644 --- a/batman-adv/files/compat-hacks.h +++ b/batman-adv/files/compat-hacks.h @@ -37,3 +37,40 @@ #define IFF_NO_QUEUE 0; dev->tx_queue_len = 0 #endif /* < KERNEL_VERSION(4, 3, 0) */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) + +#include + +#define ethtool_link_ksettings batadv_ethtool_link_ksettings + +struct batadv_ethtool_link_ksettings { + struct { + __u32 speed; + __u8 duplex; + } base; +}; + +#define __ethtool_get_link_ksettings(__dev, __link_settings) \ + batadv_ethtool_get_link_ksettings(__dev, __link_settings) + +static inline int +batadv_ethtool_get_link_ksettings(struct net_device *dev, + struct ethtool_link_ksettings *link_ksettings) +{ + struct ethtool_cmd cmd; + int ret; + + memset(&cmd, 0, sizeof(cmd)); + ret = __ethtool_get_settings(dev, &cmd); + + if (ret != 0) + return ret; + + link_ksettings->base.duplex = cmd.duplex; + link_ksettings->base.speed = ethtool_cmd_speed(&cmd); + + return 0; +} + +#endif /* < KERNEL_VERSION(4, 6, 0) */