diff options
author | Wang Chen <wangchen@cn.fujitsu.com> | 2008-07-22 01:13:12 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-08-07 02:23:19 -0400 |
commit | c16d118537cadb21d186e35aebad90a13cd78846 (patch) | |
tree | 8fc1ab697f2476ecd2b39522efcf6234be3dc5c0 /drivers/net/3c527.c | |
parent | fe414248551e2880fe8913577699003ff145ab9d (diff) |
[netdrvr] Drivers should not set IFF_* flag themselves
Some hardware set promisc when they are requested to set IFF_ALLMULTI flag.
It's ok, but if drivers set IFF_PROMISC flag when they set promisc,
it will broken upper layer handle for promisc and allmulti.
In addition, drivers can use their own hardware programming to make it.
So do not allow drivers to set IFF_* flags.
This is a general driver fix, so I didn't split it to pieces and send
to specific driver maintainers.
Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/3c527.c')
-rw-r--r-- | drivers/net/3c527.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/net/3c527.c b/drivers/net/3c527.c index 6aca0c640f13..abc84f765973 100644 --- a/drivers/net/3c527.c +++ b/drivers/net/3c527.c | |||
@@ -1521,14 +1521,11 @@ static void do_mc32_set_multicast_list(struct net_device *dev, int retry) | |||
1521 | struct mc32_local *lp = netdev_priv(dev); | 1521 | struct mc32_local *lp = netdev_priv(dev); |
1522 | u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */ | 1522 | u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */ |
1523 | 1523 | ||
1524 | if (dev->flags&IFF_PROMISC) | 1524 | if ((dev->flags&IFF_PROMISC) || |
1525 | (dev->flags&IFF_ALLMULTI) || | ||
1526 | dev->mc_count > 10) | ||
1525 | /* Enable promiscuous mode */ | 1527 | /* Enable promiscuous mode */ |
1526 | filt |= 1; | 1528 | filt |= 1; |
1527 | else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > 10) | ||
1528 | { | ||
1529 | dev->flags|=IFF_PROMISC; | ||
1530 | filt |= 1; | ||
1531 | } | ||
1532 | else if(dev->mc_count) | 1529 | else if(dev->mc_count) |
1533 | { | 1530 | { |
1534 | unsigned char block[62]; | 1531 | unsigned char block[62]; |