netdrv intel: disable VLAN filtering in promiscous mode

As discussed in this thread:

http://www.mail-archive.com/netdev@vger.kernel.org/msg53976.html

promiscous mode means to disable *all* filters. Currently only unicast
and multicast filtering is disabled. This patch changes all Intel
drivers to also disable VLAN filtering.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Patrick McHardy
2008-07-16 20:15:45 -07:00
committed by David S. Miller
parent 70efce27fc
commit 746b9f0228
5 changed files with 57 additions and 27 deletions

View File

@@ -2268,14 +2268,18 @@ static void igb_set_multi(struct net_device *netdev)
rctl = rd32(E1000_RCTL);
if (netdev->flags & IFF_PROMISC)
if (netdev->flags & IFF_PROMISC) {
rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
else if (netdev->flags & IFF_ALLMULTI) {
rctl |= E1000_RCTL_MPE;
rctl &= ~E1000_RCTL_UPE;
} else
rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
rctl &= ~E1000_RCTL_VFE;
} else {
if (netdev->flags & IFF_ALLMULTI) {
rctl |= E1000_RCTL_MPE;
rctl &= ~E1000_RCTL_UPE;
} else
rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
if (adapter->vlgrp)
rctl |= E1000_RCTL_VFE;
}
wr32(E1000_RCTL, rctl);
if (!netdev->mc_count) {
@@ -4220,7 +4224,8 @@ static void igb_vlan_rx_register(struct net_device *netdev,
/* enable VLAN receive filtering */
rctl = rd32(E1000_RCTL);
rctl |= E1000_RCTL_VFE;
if (!(netdev->flags & IFF_PROMISC))
rctl |= E1000_RCTL_VFE;
rctl &= ~E1000_RCTL_CFIEN;
wr32(E1000_RCTL, rctl);
igb_update_mng_vlan(adapter);