From: Wang Chen <wangchen@cn.fujitsu.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: NETDEV <netdev@vger.kernel.org>
Subject: [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
Date: Mon, 16 Jun 2008 17:17:14 +0800 [thread overview]
Message-ID: <48562F9A.5030509@cn.fujitsu.com> (raw)
IFF_PROMISC should be set before IFF_ALLMULTI.
Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
---
net/8021q/vlan_dev.c | 25 +++++++++++++++++++------
1 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 5d055c2..14742e3 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -547,10 +547,14 @@ static int vlan_dev_open(struct net_device *dev)
}
memcpy(vlan->real_dev_addr, real_dev->dev_addr, ETH_ALEN);
- if (dev->flags & IFF_ALLMULTI)
- dev_set_allmulti(real_dev, 1);
+ /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
+ is important. Some (broken) drivers set IFF_PROMISC, when
+ IFF_ALLMULTI is requested not asking us and not reporting.
+ */
if (dev->flags & IFF_PROMISC)
dev_set_promiscuity(real_dev, 1);
+ if (dev->flags & IFF_ALLMULTI)
+ dev_set_allmulti(real_dev, 1);
return 0;
}
@@ -561,10 +565,14 @@ static int vlan_dev_stop(struct net_device *dev)
dev_mc_unsync(real_dev, dev);
dev_unicast_unsync(real_dev, dev);
- if (dev->flags & IFF_ALLMULTI)
- dev_set_allmulti(real_dev, -1);
+ /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
+ is important. Some (broken) drivers set IFF_PROMISC, when
+ IFF_ALLMULTI is requested not asking us and not reporting.
+ */
if (dev->flags & IFF_PROMISC)
dev_set_promiscuity(real_dev, -1);
+ if (dev->flags & IFF_ALLMULTI)
+ dev_set_allmulti(real_dev, -1);
if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr))
dev_unicast_delete(real_dev, dev->dev_addr, dev->addr_len);
@@ -626,10 +634,15 @@ static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
{
struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
+ /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
+ is important. Some (broken) drivers set IFF_PROMISC, when
+ IFF_ALLMULTI is requested not asking us and not reporting.
+ */
+ if (change & IFF_PROMISC)
+ dev_set_promiscuity(real_dev,
+ dev->flags & IFF_PROMISC ? 1 : -1);
if (change & IFF_ALLMULTI)
dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1);
- if (change & IFF_PROMISC)
- dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1);
}
static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
--
1.5.3.4
next reply other threads:[~2008-06-16 9:20 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-16 9:17 Wang Chen [this message]
2008-06-16 9:27 ` [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI Patrick McHardy
2008-06-16 9:39 ` Wang Chen
2008-06-16 10:03 ` Patrick McHardy
2008-06-17 1:42 ` Wang Chen
2008-06-17 13:06 ` Patrick McHardy
2008-06-18 2:27 ` Wang Chen
2008-06-18 2:52 ` Jeff Garzik
2008-06-18 3:22 ` Wang Chen
2008-06-20 15:07 ` [PATCH] net-driver: Drivers don't set IFF_* flag [Was: [PATCH 3/3] netdevice: order of synchronization of IFF_PROMISC and IFF_ALLMULTI] Wang Chen
2008-06-23 11:04 ` Patrick McHardy
2008-06-23 13:33 ` Wang Chen
2008-06-23 13:47 ` Patrick McHardy
2008-06-23 14:44 ` Wang Chen
2008-06-23 14:52 ` Patrick McHardy
2008-06-24 1:02 ` Wang Chen
2008-06-24 5:10 ` Grant Grundler
2008-06-24 5:39 ` Wang Chen
2008-06-27 1:14 ` v2 [PATCH 2/2] de4x5: Remove developer debug feature about set/clear promisc Wang Chen
2008-06-28 17:52 ` Grant Grundler
2008-06-30 3:24 ` v3 " Wang Chen
2008-07-02 4:22 ` Grant Grundler
2008-06-27 1:14 ` v2 [PATCH 1/2] net-driver: Drivers don't set IFF_* flag Wang Chen
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=48562F9A.5030509@cn.fujitsu.com \
--to=wangchen@cn.fujitsu.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.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).