From: Wei Xu <w...@redhat.com> This patch is to support WHQL test for Windows guest, while this feature also benifits other guest works as a kernel 'gro' like feature with userspace implementation.
Feature information: http://msdn.microsoft.com/en-us/library/windows/hardware/jj853324 v6->v7 - Change the drain timer from 'virtual' to 'host' since it invisible to guest. - Move the buffer list empty check to virtio_net_rsc_do_coalesc(). - The header comparision is a bit odd for ipv4 in this patch, it should be simpler with equal check, but this is also a helper for ipv6 in next patch, and ipv6 used a different size address fields, so i used an 'address + size' byte comparision for address, and change comparing the tcp port with 'int' equal check. - Add count for packets whose size less than a normal tcp packet in sanity check. - Move constant value comparison to the right side of the equal symbol. - Use host header length in stead of guest header length to verify a packet in virtio_net_rsc_receive(), in case of the different header length for guest and host. - Check whether the packet size is enough to hold a legal packet before extract ip unit. - Bypass ip/tcp ECN packets. - Expand the feature bit definition from 32 to 64 bits. Other notes: - About tcp windows scale, we don't have connection tracking about all tcp connections, so we don't know what the exact window size is using, thus this feature may get negative influence to it, have to turn this feature off for such a user case currently. - There are 2 new fields in the virtio net header, it's not in either kernel tree or maintainer's tree right now, I just put it directly here. - The statistics is kept in this version since it's helpful for troubleshooting. Changes in V6: - Sync upstream code - Split new fields in 'virtio_net_hdr' to a seperate patch - Remove feature bit code, replace it with a command line parameter 'guest_rsc' which is turned off by default. Changes in V5: - Passed all IPv4/6 test cases - Add new fields in 'virtio_net_hdr' - Set 'gso_type' & 'coalesced packets' in new field. - Bypass all 'tcp option' packet - Bypass all 'pure ack' packet - Bypass all 'duplicate ack' packet - Change 'guest_rsc' feature bit to 'false' by default - Feedbacks from v4, typo, etc. Changes in V4: - Add new host feature bit - Replace using fixed header lenght with dynamic header lenght in VirtIONet - Change ip/ip6 header union in NetRscUnit to void* pointer - Add macro prefix, adjust code indent, etc. Changes in V3: - Removed big param list, replace it with 'NetRscUnit' - Different virtio header size - Modify callback function to direct call. - Needn't check the failure of g_malloc() - Other code format adjustment, macro naming, etc Changes in V2: - Add detailed commit log Wei Xu (2): virtio-net rsc: support coalescing ipv4 tcp traffic virtio-net rsc: support coalescing ipv6 tcp traffic hw/net/virtio-net.c | 742 ++++++++++++++++++++++++++-- include/hw/virtio/virtio-net.h | 5 +- include/hw/virtio/virtio.h | 76 +++ include/net/eth.h | 2 + include/standard-headers/linux/virtio_net.h | 18 + net/tap.c | 3 +- 6 files changed, 814 insertions(+), 32 deletions(-) -- 2.7.1