]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
sungem: fix multicast filter CRC calculation
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Fri, 15 Dec 2017 18:41:48 +0000 (18:41 +0000)
committerJason Wang <jasowang@redhat.com>
Fri, 22 Dec 2017 02:00:47 +0000 (10:00 +0800)
From the Linux sungem driver, we know that the multicast filter CRC is
implemented using ether_crc_le() which isn't the same as calling zlib's
crc32() function (the zlib implementation requires a complemented initial value
and also returns the complemented result).

Fix the multicast filter by simply using the new net_crc32_le() function.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/sungem.c

index 6aa8d1117b4ae20a56a3070a1b27b1e721feeea0..60f1e479f378efeb7355e60a8fb548dc1dc55a6c 100644 (file)
 #include "hw/pci/pci.h"
 #include "qemu/log.h"
 #include "net/net.h"
+#include "net/eth.h"
 #include "net/checksum.h"
 #include "hw/net/mii.h"
 #include "sysemu/sysemu.h"
 #include "trace.h"
-/* For crc32 */
-#include <zlib.h>
 
 #define TYPE_SUNGEM "sungem"
 
@@ -595,7 +594,7 @@ static ssize_t sungem_receive(NetClientState *nc, const uint8_t *buf,
     }
 
     /* Get MAC crc */
-    mac_crc = crc32(~0, buf, 6);
+    mac_crc = net_crc32_le(buf, ETH_ALEN);
 
     /* Packet isn't for me ? */
     rx_cond = sungem_check_rx_mac(s, buf, mac_crc);