Antwort: Re: Antwort: Antwort: Re: Antwort: Re: Question concerning batman-adv bug #173 "Mesh packets on bat0"
Commit Message
On Wednesday, February 18, 2015 17:10:12 Andreas Pape wrote:
> The essential call is in patch 2 as assumed. As soon as I add the
> netdev_master_upper_dev_link call again to the compilable code, the
> problem starts to occur (mesh doesn't work as soon as bat0 is added to the
> bridge, ogm packets can be seen at bat0). It seems that this call behaves
> in older kernels different compared to newer ones.
>
> I haven't tried to add all the other excluded parts again except for the
> netdev_master_upper_dev_link call. If you are interested I can test this
> tomorrow, too.
Can you try the attached patch without applying any of the previous patches ?
This patch is meant to fix the compat issue without harming any functionality
and could be included in the next release.
Cheers,
Marek
Comments
Hi Marek,
the problem seems to be a little bit more complex. Your latest patch does
not solve the problem.
But I found out, that commenting out the following line in your patch
makes bat0 work:
slave->master = master;
But as this is the core of "enslaving" a device to a master device, this
breaks the complete concept behind this I guess (I'm not a skilled kernel
developer). From this I conclude that there might be a bug somewhere
deeper in the kernel version I use. I don't want to give up too early,
but it looks a little bit as if this "enslaving concept using rtnl" might
not be usable in these older kernels. What do you think?
Regards,
Andreas
I started with a freshly unpacked source code of the 2014.4.0 release and
applied only your latest patch.
As expected from the tests done so far with the old kernel effectively not
calling netdev_set_master allows the usage of the latest batman-adv
version in combination with older kernels (at least the 2.6.32 I tested
with).
I think this patch is worth to be integrated into the next batman-adv
version.
Regards,
Andreas
"B.A.T.M.A.N" <b.a.t.m.a.n-bounces@lists.open-mesh.org> schrieb am
19.02.2015 10:40:34:
> Von: Marek Lindner <mareklindner@neomailbox.ch>
> An: The list for a Better Approach To Mobile Ad-hoc Networking
> <b.a.t.m.a.n@lists.open-mesh.org>,
> Datum: 19.02.2015 10:42
> Betreff: Re: [B.A.T.M.A.N.] Antwort: Re: Antwort: Antwort: Re:
> Antwort: Re: Question concerning batman-adv bug #173 "Mesh packets on
bat0"
> Gesendet von: "B.A.T.M.A.N" <b.a.t.m.a.n-bounces@lists.open-mesh.org>
>
> On Thursday, February 19, 2015 09:31:08 Andreas Pape wrote:
> > the problem seems to be a little bit more complex. Your latest patch
does
> > not solve the problem.
> >
> > But I found out, that commenting out the following line in your patch
> > makes bat0 work:
> >
> > slave->master = master;
> >
> > But as this is the core of "enslaving" a device to a master device,
this
> > breaks the complete concept behind this I guess (I'm not a skilled
kernel
> > developer). From this I conclude that there might be a bug somewhere
> > deeper in the kernel version I use. I don't want to give up too
early,
> > but it looks a little bit as if this "enslaving concept using rtnl"
might
> > not be usable in these older kernels. What do you think?
>
> Please try the attached patch instead. This time we are replacing
> the function
> with our own function doing nothing at all. The net_dev->master
> variable seems
> to be reserved for interface bonding and shouldn't be touched at allon
these
> ancient kernels.
>
> Cheers,
> Marek
> [Anhang "0001-batman-adv-ignore-netdev_set_master-calls-on-
> kernels.patch" gelöscht von Andreas Pape/Phoenix Contact] [Anhang
> "signature.asc" gelöscht von Andreas Pape/Phoenix Contact]
On Thursday, February 19, 2015 11:28:24 Andreas Pape wrote:
> I started with a freshly unpacked source code of the 2014.4.0 release and
> applied only your latest patch.
>
> As expected from the tests done so far with the old kernel effectively not
> calling netdev_set_master allows the usage of the latest batman-adv
> version in combination with older kernels (at least the 2.6.32 I tested
> with).
>
> I think this patch is worth to be integrated into the next batman-adv
> version.
Thanks for testing! I'll stage the patch for inclusion.
Cheers,
Marek
From c01b68bc11a857770c2799f0b033852e05559431 Mon Sep 17 00:00:00 2001
From: Marek Lindner <mareklindner@neomailbox.ch>
Date: Thu, 19 Feb 2015 12:03:39 +0800
Subject: [PATCH] batman-adv: make netdev_set_master() generic for kernels
older than 2.6.39
batman-adv calls netdev_master_upper_dev_link() which is replaced with with
netdev_set_master() for kernels older than 3.9 via compat.h.
Prior to 2.6.39 netdev_set_master() contained Linux bonding calls needed to
setup bonding devices. Calling this function from batman-adv leads to
unexpected behavior when current batman-adv versions are used on these
older kernels.
To fix the situation compat.h now ships its own implementation of
netdev_set_master() for kernels older than 2.6.39.
Reported-by: Andreas Pape <APape@phoenixcontact.com>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
---
compat.h | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
@@ -191,6 +191,30 @@ static inline int batadv_param_set_copystring(const char *val,
#define kstrtoul strict_strtoul
#define kstrtol strict_strtol
+static inline int batadv_netdev_set_master(struct net_device *slave,
+ struct net_device *master)
+{
+ struct net_device *old = slave->master;
+
+ ASSERT_RTNL();
+
+ if (master) {
+ if (old)
+ return -EBUSY;
+ dev_hold(master);
+ }
+
+ slave->master = master;
+
+ if (old) {
+ synchronize_net();
+ dev_put(old);
+ }
+ return 0;
+}
+
+#define netdev_set_master batadv_netdev_set_master
+
/* Hack for removing ndo_add/del_slave at the end of net_device_ops.
* This is somewhat ugly because it requires that ndo_validate_addr
* is at the end of this struct in soft-interface.c.
--
2.1.4