Re: [B.A.T.M.A.N.] [PATCH 03/10] batman-adv: add generic netlink query API to replace debugfs files

Sven Eckelmann
2016-04-29T19:55:32Z

[-- Attachment #1.1: Type: text/plain, Size: 2931 bytes --]

=2D-nextPart2018438.QxtFcXmdVu
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"

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
=2D-nextPart2018438.QxtFcXmdVu
Content-Disposition: attachment; filename="0001-add-NETLINK_CB-portid-backport-hack.patch"
Content-Transfer-Encoding: 7Bit
Content-Type: text/x-patch; charset="UTF-8"; name="0001-add-NETLINK_CB-portid-backport-hack.patch"

From: Sven Eckelmann <sven@narfation.org>
Date: Fri, 29 Apr 2016 21:43:04 +0200
Subject: [PATCH] add NETLINK_CB portid backport hack
=2D--
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
=2D-- /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_ */

=2D-nextPart2018438.QxtFcXmdVu--
This is a multi-part message in MIME format.

[-- Attachment #1.2: Type: text/plain, Size: 597 bytes --]

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

[-- Attachment #1.3: 0001-add-NETLINK_CB-portid-backport-hack.patch --]
[-- Type: text/x-patch, Size: 1887 bytes --]

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_ */