diff mbox series

[PATCHv3,06/13] sungem: fix multicast filter CRC calculation

Message ID 20171215184155.2543-7-mark.cave-ayland@ilande.co.uk
State New
Headers show
Series None | expand

Commit Message

Mark Cave-Ayland Dec. 15, 2017, 6:41 p.m. UTC
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>
---
 hw/net/sungem.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Philippe Mathieu-Daudé Dec. 15, 2017, 7:46 p.m. UTC | #1
On 12/15/2017 03:41 PM, Mark Cave-Ayland wrote:
> 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>

> ---
>  hw/net/sungem.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/net/sungem.c b/hw/net/sungem.c
> index 6aa8d1117b..60f1e479f3 100644
> --- a/hw/net/sungem.c
> +++ b/hw/net/sungem.c
> @@ -11,12 +11,11 @@
>  #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);
>
diff mbox series

Patch

diff --git a/hw/net/sungem.c b/hw/net/sungem.c
index 6aa8d1117b..60f1e479f3 100644
--- a/hw/net/sungem.c
+++ b/hw/net/sungem.c
@@ -11,12 +11,11 @@ 
 #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);