virtio-net needs to clear the VIRTIO_NET_F_GUEST_CSUM feature when loading XDP. The main reason for doing this is because VIRTIO_NET_F_GUEST_CSUM allows to receive packets marked as VIRTIO_NET_HDR_F_NEEDS_CSUM. Such packets are not compatible with XDP programs, because we cannot guarantee that the csum_{start, offset} fields are correct after XDP modifies the packets. There is also an existing problem, in the same host vm-vm (eg [vm]<->[ovs vhost-user]<->[vm]) scenario, loading XDP will cause packet loss. To solve the above problems, we have discussed in the [1] proposal, and now try to solve it through the method of reprobing fields suggested by Jason. [1] https://lists.oasis-open.org/archives/virtio-dev/202305/msg00318.html --- v2->v3: - Use skb_checksum_setup() instead of virtnet_flow_dissect_udp_tcp(). The two operations are different, skb_checksum_setup() operates as skb->data==>iphdr, and virtnet_flow_dissect_udp_tcp() operates as skb->data==>ethhdr. Essentially equivalent. @Jason Wang v1->v2: - Squash v1's patch [1/4] and patch [2/4] into v2's patch [1/3]. @Michael S. Tsirkin - Some minor modifications. Heng Qi (2): virtio-net: support coexistence of XDP and GUEST_CSUM virtio-net: remove GUEST_CSUM check for XDP drivers/net/virtio_net.c | 90 +++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 16 deletions(-) -- 2.19.1.6.gb485710b