net: introduce IFF_UNICAST_FLT private flag

Use IFF_UNICAST_FTL to find out if driver handles unicast address
filtering. In case it does not, promisc mode is entered.

Patch also fixes following drivers:
stmmac, niu: support uc filtering and yet it propagated
	ndo_set_multicast_list
bna, benet, pxa168_eth, ks8851, ks8851_mll, ksz884x : has set
	ndo_set_rx_mode but do not support uc filtering

Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jiri Pirko
2011-08-16 06:29:00 +00:00
committed by David S. Miller
parent d03462b999
commit 01789349ee
17 changed files with 51 additions and 12 deletions

View File

@ -4522,9 +4522,7 @@ void __dev_set_rx_mode(struct net_device *dev)
if (!netif_device_present(dev))
return;
if (ops->ndo_set_rx_mode)
ops->ndo_set_rx_mode(dev);
else {
if (!(dev->priv_flags & IFF_UNICAST_FLT)) {
/* Unicast addresses changes may only happen under the rtnl,
* therefore calling __dev_set_promiscuity here is safe.
*/
@ -4535,10 +4533,12 @@ void __dev_set_rx_mode(struct net_device *dev)
__dev_set_promiscuity(dev, -1);
dev->uc_promisc = false;
}
if (ops->ndo_set_multicast_list)
ops->ndo_set_multicast_list(dev);
}
if (ops->ndo_set_rx_mode)
ops->ndo_set_rx_mode(dev);
else if (ops->ndo_set_multicast_list)
ops->ndo_set_multicast_list(dev);
}
void dev_set_rx_mode(struct net_device *dev)