qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2] net: Transmit zero UDP checksum as 0xFFFF


From: Ed Swierk
Subject: Re: [Qemu-devel] [PATCH v2] net: Transmit zero UDP checksum as 0xFFFF
Date: Wed, 15 Nov 2017 15:42:05 -0800

On Tue, Nov 14, 2017 at 6:57 PM, Ed Swierk <address@hidden> wrote:
> diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c
> index 20b2549..dc95f12 100644
> --- a/hw/net/net_tx_pkt.c
> +++ b/hw/net/net_tx_pkt.c
> @@ -126,12 +126,12 @@ void net_tx_pkt_update_ip_checksums(struct NetTxPkt 
> *pkt)
>
>          /* Calculate IP pseudo header checksum */
>          cntr = eth_calc_ip4_pseudo_hdr_csum(ip_hdr, pkt->payload_len, &cso);
> -        csum = cpu_to_be16(~net_checksum_finish(cntr));
> +        csum = cpu_to_be16(~net_checksum_finish_hdr(cntr));
>      } else if (gso_type == VIRTIO_NET_HDR_GSO_TCPV6) {
>          /* Calculate IP pseudo header checksum */
>          cntr = eth_calc_ip6_pseudo_hdr_csum(ip_hdr, pkt->payload_len,
>                                              IP_PROTO_TCP, &cso);
> -        csum = cpu_to_be16(~net_checksum_finish(cntr));
> +        csum = cpu_to_be16(~net_checksum_finish_hdr(cntr));
>      } else {
>          return;
>      }

Actually this change looks wrong. The checksum here is just the
partial sum of the IP pseudo-header fields, to be incorporated into
the actual UDP or TCP checksum (including the packet payload) at some
later stage. The partial sum should never be zero (if
net_rx_pkt_fix_l4_csum() is to be believed), but changing 0x0000 to
0xFFFF and then storing the complement ensures just that.

Unless someone with more of a clue says otherwise, I'll drop this change in v3.

--Ed



reply via email to

[Prev in Thread] Current Thread [Next in Thread]