The mac_addr variable doesn't get reset between (re)additions of multicast addresses. One byte of all multicast addresses (except the first) can be incorrect.
Signed-off-by: Arthur Kepner <[EMAIL PROTECTED]> -- Arthur
--- linux-2.6.orig/drivers/net/s2io.c 2006-01-24 04:26:09.425074105 -0800 +++ linux-2.6/drivers/net/s2io.c 2006-01-24 04:47:06.692567004 -0800 @@ -4092,6 +4092,7 @@ static void s2io_set_multicast(struct ne i++, mclist = mclist->next) { memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr, ETH_ALEN); + mac_addr = 0; for (j = 0; j < ETH_ALEN; j++) { mac_addr |= mclist->dmi_addr[j]; mac_addr <<= 8;