Nick Briggs:
> The code in if_tl.c, tl_calchash() is wrong in that it doesn't
> compensate for signed char type so that the XOR operations to generate the
> multicast hash index are polluted by sign extension if the MSbit of the 1st
> and 4th or 2nd and 5th bytes of the multicast destination ethernet address
> are not equal. This is the patch for that problem:
We should just use unsigned chars.
Kill a prototype for a nonexisting function in a neighboring file,
while here.
Index: if_tl.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_tl.c,v
retrieving revision 1.70
diff -u -p -r1.70 if_tl.c
--- if_tl.c 22 Jan 2017 10:17:38 -0000 1.70
+++ if_tl.c 13 Jul 2017 14:39:09 -0000
@@ -272,7 +272,7 @@ void tl_miibus_writereg(struct device *,
void tl_miibus_statchg(struct device *);
void tl_setmode(struct tl_softc *, uint64_t);
-int tl_calchash(caddr_t);
+int tl_calchash(u_int8_t *);
void tl_iff(struct tl_softc *);
void tl_setfilt(struct tl_softc *, caddr_t, int);
void tl_softreset(struct tl_softc *, int);
@@ -747,7 +747,7 @@ tl_setmode(struct tl_softc *sc, uint64_t
* the folded 24-bit value is split into 6-bit portions and XOR'd.
*/
int
-tl_calchash(caddr_t addr)
+tl_calchash(u_int8_t *addr)
{
int t;
Index: if_wb.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_wb.c,v
retrieving revision 1.68
diff -u -p -r1.68 if_wb.c
--- if_wb.c 22 Jan 2017 10:17:38 -0000 1.68
+++ if_wb.c 13 Jul 2017 14:36:07 -0000
@@ -154,7 +154,6 @@ int wb_mii_readreg(struct wb_softc *, st
int wb_mii_writereg(struct wb_softc *, struct wb_mii_frame *);
void wb_setcfg(struct wb_softc *, uint64_t);
-u_int8_t wb_calchash(caddr_t);
void wb_setmulti(struct wb_softc *);
void wb_reset(struct wb_softc *);
void wb_fixmedia(struct wb_softc *);
--
Christian "naddy" Weisgerber [email protected]