Commit f81edc6a authored by Derrick Pallas's avatar Derrick Pallas Committed by David S. Miller

ethernet/ixp4xx: prevent allmulti from clobbering promisc

If both promisc and allmulti are set, promisc should trump allmulti and
disable the MAC filter; otherwise, the interface is not really promisc.

Previously, this code checked IFF_ALLMULTI prior to and without regard for
IFF_PROMISC; if both were set, only multicast and direct unicast traffic
would make it through the filter.
Signed-off-by: default avatarDerrick Pallas <pallas@meraki.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7b4577a9
...@@ -938,7 +938,7 @@ static void eth_set_mcast_list(struct net_device *dev) ...@@ -938,7 +938,7 @@ static void eth_set_mcast_list(struct net_device *dev)
int i; int i;
static const u8 allmulti[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const u8 allmulti[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };
if (dev->flags & IFF_ALLMULTI) { if ((dev->flags & IFF_ALLMULTI) && !(dev->flags & IFF_PROMISC)) {
for (i = 0; i < ETH_ALEN; i++) { for (i = 0; i < ETH_ALEN; i++) {
__raw_writel(allmulti[i], &port->regs->mcast_addr[i]); __raw_writel(allmulti[i], &port->regs->mcast_addr[i]);
__raw_writel(allmulti[i], &port->regs->mcast_mask[i]); __raw_writel(allmulti[i], &port->regs->mcast_mask[i]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment