Commit cda22aa9 authored by Bill Helfinstine's avatar Bill Helfinstine Committed by Jeff Garzik

b44: fix IFF_ALLMULTI handling of CAM slots

If you set the IFF_ALLMULTI flag on a b44 device, or if you join more than
B44_MCAST_TABLE_SIZE multicast groups, the device will stop receiving unicast
messages.  This is because the __b44_set_mac_addr call sets the zeroth CAM
entry to the MAC address of the device, and then the loop at line 1722
proceeds to overwrite it unless the value of i is set by the __b44_load_mcast
call.  However, when IFF_ALLMULTI is set, that call is bypassed, leaving i set
to zero.

Fixed by starting the loop at 1 to make it skip the CAM entry for the MAC
address.
Signed-off-by: default avatarBill Helfinstine <bhelf@flitterfly.whirpon.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 7f672cf5
...@@ -1709,7 +1709,7 @@ static void __b44_set_rx_mode(struct net_device *dev) ...@@ -1709,7 +1709,7 @@ static void __b44_set_rx_mode(struct net_device *dev)
bw32(bp, B44_RXCONFIG, val); bw32(bp, B44_RXCONFIG, val);
} else { } else {
unsigned char zero[6] = {0, 0, 0, 0, 0, 0}; unsigned char zero[6] = {0, 0, 0, 0, 0, 0};
int i = 0; int i = 1;
__b44_set_mac_addr(bp); __b44_set_mac_addr(bp);
......
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