From: Zhang Chen Date: Fri, 28 Jul 2017 10:03:10 +0000 (+0800) Subject: net/filter-rewriter.c: Fix rewirter checksum bug when use virtio-net X-Git-Tag: qemu-xen-4.11.0-rc1~186^2~17 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=6ce310b5356abb7edc3aa8b8b097d0b8cc76f83f;p=qemu-xen.git net/filter-rewriter.c: Fix rewirter checksum bug when use virtio-net Because vnet_hdr have a offset to net packet, we must add it when use virtio-net. Signed-off-by: Zhang Chen Signed-off-by: Jason Wang --- diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c index 98120095de..2be388f539 100644 --- a/net/filter-rewriter.c +++ b/net/filter-rewriter.c @@ -99,7 +99,8 @@ static int handle_primary_tcp_pkt(NetFilterState *nf, /* handle packets to the secondary from the primary */ tcp_pkt->th_ack = htonl(ntohl(tcp_pkt->th_ack) + conn->offset); - net_checksum_calculate((uint8_t *)pkt->data, pkt->size); + net_checksum_calculate((uint8_t *)pkt->data + pkt->vnet_hdr_len, + pkt->size - pkt->vnet_hdr_len); } } @@ -138,7 +139,8 @@ static int handle_secondary_tcp_pkt(NetFilterState *nf, /* handle packets to the primary from the secondary*/ tcp_pkt->th_seq = htonl(ntohl(tcp_pkt->th_seq) - conn->offset); - net_checksum_calculate((uint8_t *)pkt->data, pkt->size); + net_checksum_calculate((uint8_t *)pkt->data + pkt->vnet_hdr_len, + pkt->size - pkt->vnet_hdr_len); } }