[03/10] batman-adv: add generic netlink query API to replace debugfs files

Message ID 36550935.HMH55OGFCA@sven-edge (mailing list archive)
State Not Applicable, archived
Headers

Commit Message

Sven Eckelmann April 29, 2016, 7:55 p.m. UTC
  On Thursday 28 April 2016 22:37:21 Andrew Lunn wrote:
[....]
> +int batadv_algo_dump(struct sk_buff *msg, struct netlink_callback *cb)
> +{
> +	int portid = NETLINK_CB(cb->skb).portid;

This doesn't build on older kernels because the name of this field was 
changed. Attached is a patch which should work(tm).

This was already discussed here:
 https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2016-April/014880.html

But there is now still the problem that info->snd_portid was previously called 
info->snd_pid. Also the genl_register_family_with_ops compat has to be added.

Kind regards,
	Sven
  

Patch

From: Sven Eckelmann <sven@narfation.org>
Date: Fri, 29 Apr 2016 21:43:04 +0200
Subject: [PATCH] add NETLINK_CB portid backport hack
---
 compat-include/linux/netlink.h | 45 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 compat-include/linux/netlink.h

diff --git a/compat-include/linux/netlink.h b/compat-include/linux/netlink.h
new file mode 100644
index 0000000..696f6da
--- /dev/null
+++ b/compat-include/linux/netlink.h
@@ -0,0 +1,45 @@ 
+/* Copyright (C) 2007-2016 B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner, Simon Wunderlich
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file contains macros for maintaining compatibility with older versions
+ * of the Linux kernel.
+ */
+
+#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_NETLINK_H_
+#define _NET_BATMAN_ADV_COMPAT_LINUX_NETLINK_H_
+
+#include <linux/version.h>
+#include_next <linux/netlink.h>
+
+#include <net/scm.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0)
+
+struct batadv_netlink_skb_parms {
+	struct ucred		creds;		/* Skb credentials	*/
+	union {
+		__u32		portid;
+		__u32		pid;
+	};
+	__u32			dst_group;
+};
+
+#undef NETLINK_CB
+#define NETLINK_CB(skb) (*(struct batadv_netlink_skb_parms*)&((skb)->cb))
+
+#endif /* < KERNEL_VERSION(3, 7, 0) */
+
+#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_NETLINK_H_ */