The lan9118 emulation tries to compute the multicast index by calling directly the crc32() function from zlib, but fails to get the correct result.
Use the common compute_mcast_idx() function instead, which gives the correct result. This fixes IPv6 support. Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> --- hw/lan9118.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/lan9118.c b/hw/lan9118.c index ff0a50b..ceaf96f 100644 --- a/hw/lan9118.c +++ b/hw/lan9118.c @@ -500,7 +500,7 @@ static int lan9118_filter(lan9118_state *s, const uint8_t *addr) } } else { /* Hash matching */ - hash = (crc32(~0, addr, 6) >> 26); + hash = compute_mcast_idx(addr); if (hash & 0x20) { return (s->mac_hashh >> (hash & 0x1f)) & 1; } else { -- 1.7.10.4