Skip to content

Commit

Permalink
alfred: batman-adv-legacy: determine netlink variant via batctl
Browse files Browse the repository at this point in the history
With this patch the batctl (wrapper) is used to determine which netlink
namespace to use for netlink calls ("batadv" vs. "batadv_legacy").

Signed-off-by: Linus Lüssing <[email protected]>
  • Loading branch information
T-X committed Dec 25, 2018
1 parent 73176a8 commit 55d49d8
Showing 1 changed file with 101 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
From: Linus Lüssing <[email protected]>
Date: Tue, 25 Dec 2018 18:24:54 +0100
Subject: alfred: batman-adv-legacy: determine netlink variant via batctl

Signed-off-by: Linus Lüssing <[email protected]>

diff --git a/alfred/patches/0003-alfred-batman-adv-legacy-determine-netlink-variant-v.patch b/alfred/patches/0003-alfred-batman-adv-legacy-determine-netlink-variant-v.patch
new file mode 100644
index 0000000000000000000000000000000000000000..01e188f84f5d13b097f4a4e712264fffca6c80fc
--- /dev/null
+++ b/alfred/patches/0003-alfred-batman-adv-legacy-determine-netlink-variant-v.patch
@@ -0,0 +1,89 @@
+From 63bc04d17e7e9c81c334ab619ae275958fb283ec Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Linus=20L=C3=BCssing?= <[email protected]>
+Date: Tue, 25 Dec 2018 14:13:24 +0100
+Subject: [PATCH] alfred: batman-adv-legacy: determine netlink variant via
+ batctl
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Linus Lüssing <[email protected]>
+---
+ main.c | 3 +++
+ netlink.c | 14 +++++++++++++-
+ netlink.h | 2 ++
+ 3 files changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/main.c b/main.c
+index 34d771e..cb63269 100644
+--- a/main.c
++++ b/main.c
+@@ -35,6 +35,7 @@
+ #include "debugfs.h"
+ #include "packet.h"
+ #include "list.h"
++#include "netlink.h"
+
+ static struct globals alfred_globals;
+
+@@ -183,6 +184,8 @@ static struct globals *alfred_init(int argc, char *argv[])
+ /* We need full capabilities to mount debugfs, so do that now */
+ debugfs_mount(NULL);
+
++ netlink_init();
++
+ ret = reduce_capabilities();
+ if (ret < 0)
+ return NULL;
+diff --git a/netlink.c b/netlink.c
+index 864123f..45cb7e2 100644
+--- a/netlink.c
++++ b/netlink.c
+@@ -40,6 +40,8 @@
+ #define __unused __attribute__((unused))
+ #endif
+
++static const char *batadv_nl_name;
++
+ struct nla_policy batadv_netlink_policy[NUM_BATADV_ATTR] = {
+ [BATADV_ATTR_VERSION] = { .type = NLA_STRING },
+ [BATADV_ATTR_ALGO_NAME] = { .type = NLA_STRING },
+@@ -159,7 +161,7 @@ int netlink_query_common(const char *mesh_iface, uint8_t nl_cmd,
+ goto err_free_sock;
+ }
+
+- family = genl_ctrl_resolve(sock, BATADV_NL_NAME);
++ family = genl_ctrl_resolve(sock, batadv_nl_name);
+ if (family < 0) {
+ query_opts->err = -EOPNOTSUPP;
+ goto err_free_sock;
+@@ -203,3 +205,13 @@ err_free_sock:
+
+ return query_opts->err;
+ }
++
++void netlink_init(void)
++{
++ setenv("PATH", "/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin", 1);
++
++ if (system("batctl -v | grep -q '2013.4.0'") == 0)
++ batadv_nl_name = "batadv_legacy";
++ else
++ batadv_nl_name = "batadv";
++}
+diff --git a/netlink.h b/netlink.h
+index f8903be..1d724f6 100644
+--- a/netlink.h
++++ b/netlink.h
+@@ -45,6 +45,8 @@ int netlink_query_common(const char *mesh_iface, uint8_t nl_cmd,
+ int missing_mandatory_attrs(struct nlattr *attrs[], const int mandatory[],
+ size_t num);
+
++void netlink_init(void);
++
+ extern struct nla_policy batadv_netlink_policy[];
+
+ #endif /* _ALFRED_NETLINK_H */
+--
+2.11.0
+

0 comments on commit 55d49d8

Please sign in to comment.