b.a.t.m.a.n.lists.open-mesh.org archive mirror
 help / color / mirror / Atom feed
From: Marek Lindner <mareklindner@neomailbox.ch>
To: The list for a Better Approach To Mobile Ad-hoc Networking
	<b.a.t.m.a.n@lists.open-mesh.org>
Subject: Re: [B.A.T.M.A.N.] Antwort: Re: Antwort: Antwort: Re: Antwort: Re: Question	concerning	batman-adv bug	#173 "Mesh	packets on bat0"
Date: Thu, 19 Feb 2015 12:15:45 +0800	[thread overview]
Message-ID: <1549090.s6anOn0kWk@voltaire> (raw)
In-Reply-To: <OF9D4BC429.65445525-ONC1257DF0.0057EC95-C1257DF0.0058D385@phoenixcontact.com>


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

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

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

=2D-nextPart2075742.AEyD6QK7me
Content-Disposition: attachment; filename="0001-batman-adv-make-netdev_set_master-generic-for-kernel.patch"
Content-Transfer-Encoding: 7Bit
Content-Type: text/x-patch; charset="UTF-8"; name="0001-batman-adv-make-netdev_set_master-generic-for-kernel.patch"

From=20c01b68bc11a857770c2799f0b033852e05559431 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>
=2D--
 compat.h | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/compat.h b/compat.h
index 27d8a21..f1da3da 100644
=2D-- a/compat.h
+++ b/compat.h
@@ -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.
=2D- 
2.1.4


=2D-nextPart2075742.AEyD6QK7me--
This is a multi-part message in MIME format.

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

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

[-- Attachment #1.3: 0001-batman-adv-make-netdev_set_master-generic-for-kernel.patch --]
[-- Type: text/x-patch, Size: 1779 bytes --]

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(+)

diff --git a/compat.h b/compat.h
index 27d8a21..f1da3da 100644
--- a/compat.h
+++ b/compat.h
@@ -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


[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

  reply	other threads:[~2015-02-19  4:15 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-18  7:35 [B.A.T.M.A.N.] Question concerning batman-adv bug #173 "Mesh packets on bat0" Andreas Pape
2015-02-18 11:26 ` Marek Lindner
2015-02-18 12:28   ` [B.A.T.M.A.N.] Antwort: " Andreas Pape
2015-02-18 13:55     ` Marek Lindner
2015-02-18 14:56       ` [B.A.T.M.A.N.] Antwort: " Andreas Pape
2015-02-18 15:22         ` [B.A.T.M.A.N.] Antwort: " Andreas Pape
2015-02-18 15:45           ` Marek Lindner
2015-02-18 16:10             ` [B.A.T.M.A.N.] Antwort: " Andreas Pape
2015-02-19  4:15               ` Marek Lindner [this message]
2015-02-19  8:31                 ` Andreas Pape
2015-02-19  9:40                   ` Marek Lindner
2015-02-19 10:28                     ` [B.A.T.M.A.N.] Antwort: " Andreas Pape
2015-02-19 10:36                       ` Marek Lindner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1549090.s6anOn0kWk@voltaire \
    --to=mareklindner@neomailbox.ch \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).