]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
vhost/net: enable gso over UDP tunnel support.
authorPaolo Abeni <pabeni@redhat.com>
Tue, 8 Jul 2025 16:04:28 +0000 (18:04 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 8 Jul 2025 16:07:28 +0000 (18:07 +0200)
Vhost net need to know the exact virtio net hdr size to be able
to copy such header correctly. Teach it about the newly defined
UDP tunnel-related option and update the hdr size computation
accordingly.

Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/vhost/net.c

index 67d011b0d4f73f77963d5be649e235809129e7c8..a759d77765732c694a4f591f829bd7d7781aeafc 100644 (file)
@@ -75,6 +75,8 @@ static const u64 vhost_net_features[VIRTIO_FEATURES_DWORDS] = {
        (1ULL << VIRTIO_NET_F_MRG_RXBUF) |
        (1ULL << VIRTIO_F_ACCESS_PLATFORM) |
        (1ULL << VIRTIO_F_RING_RESET),
+       VIRTIO_BIT(VIRTIO_NET_F_GUEST_UDP_TUNNEL_GSO) |
+       VIRTIO_BIT(VIRTIO_NET_F_HOST_UDP_TUNNEL_GSO),
 };
 
 enum {
@@ -1624,6 +1626,12 @@ static int vhost_net_set_features(struct vhost_net *n, const u64 *features)
                  sizeof(struct virtio_net_hdr_mrg_rxbuf) :
                  sizeof(struct virtio_net_hdr);
 
+       if (virtio_features_test_bit(features,
+                                    VIRTIO_NET_F_HOST_UDP_TUNNEL_GSO) ||
+           virtio_features_test_bit(features,
+                                    VIRTIO_NET_F_GUEST_UDP_TUNNEL_GSO))
+               hdr_len = sizeof(struct virtio_net_hdr_v1_hash_tunnel);
+
        if (virtio_features_test_bit(features, VHOST_NET_F_VIRTIO_NET_HDR)) {
                /* vhost provides vnet_hdr */
                vhost_hlen = hdr_len;