Hello, Following are a few trivial fixes for the DECstation's LANCE driver needed for the chip's multicast filter to be set up correctly. The patch is needed for multicast reception to work, in particular for the IPv6's neighbor discovery. The CRC generation was verified using the AMD's reference code and it was checked at the run time for selected multicast addresses as well. Please apply. Maciej -- + Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: macro@ds2.pg.gda.pl, PGP key available + patch-mips-2.4.17-20020129-declance-mcast-11 diff -up --recursive --new-file linux-mips-2.4.17-20020129.macro/drivers/net/declance.c linux-mips-2.4.17-20020129/drivers/net/declance.c --- linux-mips-2.4.17-20020129.macro/drivers/net/declance.c Wed Aug 22 04:27:03 2001 +++ linux-mips-2.4.17-20020129/drivers/net/declance.c Tue Mar 19 19:42:20 2002 @@ -793,6 +793,8 @@ static int lance_open(struct net_device ib->mode = 0; ib->filter [0] = 0; ib->filter [2] = 0; + ib->filter [4] = 0; + ib->filter [6] = 0; lance_init_ring(dev); load_csrs(lp); @@ -920,7 +922,7 @@ static void lance_load_multicast(struct struct dev_mc_list *dmi = dev->mc_list; char *addrs; int i, j, bit, byte; - u32 crc, poly = CRC_POLYNOMIAL_BE; + u32 crc, poly = CRC_POLYNOMIAL_LE; /* set all multicast bits */ if (dev->flags & IFF_ALLMULTI) { @@ -959,7 +961,7 @@ static void lance_load_multicast(struct } crc = crc >> 26; - mcast_table[crc >> 3] |= 1 << (crc & 0xf); + mcast_table[2 * (crc >> 4)] |= 1 << (crc & 0xf); } return; }