[PATCH RFC 0/8] vsock: add datagram support to virtio and vhost
From: Sergio Lopez
Date: Wed Oct 28 2026 - 12:05:55 EST
This series implements SOCK_DGRAM support for virtio-vsock and
vhost-vsock, allowing applications to exchange connectionless messages
through the existing AF_VSOCK datagram API.
Support is negotiated through VIRTIO_VSOCK_F_DGRAM. Each datagram uses
a single VIRTIO_VSOCK_TYPE_DGRAM packet, supporting payloads from zero
bytes through 64 KiB. Pending sends are bounded by the socket send
buffer rather than peer credits, with queue accounting and poll
readiness reflecting pending output.
Datagrams use destination-based routing across guest-to-host,
host-to-guest and loopback transports while retaining the socket's
transport state. VMCI keeps priority as the dedicated datagram
transport. Guest RX buffers accommodate complete messages when
datagrams are negotiated, preserving message boundaries.
The patches first expose the core port allocator and add datagram
queue reporting, then implement the common data path, guest and host
feature negotiation, directional routing and RX buffer handling. The
final patch extends vsock_test with local and host/guest datagram
coverage, including peer filtering, route changes, message boundaries
and queue ioctls. Unsupported cases skip automatically.
Tested using QEMU with a patch that exposed the VIRTIO_VSOCK_F_DGRAM
feature:
https://lists.gnu.org/archive/html/qemu-devel/2026-10/msg08074.html
Code was written and reviewed both manually and assisted by Codex
(GPT-6.1-Sol) and Claude (Opus 4.6).
Signed-off-by: Sergio Lopez <slp@xxxxxxxxxx>
---
Sergio Lopez (8):
vsock: expose the core port allocator to transports
vsock: report datagram receive and send queue state
vsock/virtio: implement the datagram data path
vsock/virtio: negotiate datagram support on the guest
vhost/vsock: negotiate datagram support with guests
vsock: allow datagrams to use directional transports
vsock: preserve host-to-guest datagram boundaries
vsock: add datagram tests to vsock_test
drivers/vhost/vsock.c | 37 +-
include/linux/virtio_vsock.h | 6 +
include/net/af_vsock.h | 14 +-
include/uapi/linux/virtio_vsock.h | 2 +
net/vmw_vsock/af_vsock.c | 206 ++++++--
net/vmw_vsock/hyperv_transport.c | 4 +
net/vmw_vsock/virtio_transport.c | 71 ++-
net/vmw_vsock/virtio_transport_common.c | 197 +++++++-
net/vmw_vsock/vmci_transport.c | 10 +
net/vmw_vsock/vsock_bpf.c | 3 +-
net/vmw_vsock/vsock_loopback.c | 1 +
tools/testing/vsock/Makefile | 3 +-
tools/testing/vsock/README | 23 +-
tools/testing/vsock/util.c | 62 +--
tools/testing/vsock/util.h | 10 +
tools/testing/vsock/vsock_test.c | 154 +++++-
tools/testing/vsock/vsock_test_dgram.c | 809 ++++++++++++++++++++++++++++++++
tools/testing/vsock/vsock_test_dgram.h | 26 +
18 files changed, 1545 insertions(+), 93 deletions(-)
---
base-commit: 65ba8f34ec886ec72b2c07ddc8cf3d815c32869d
change-id: 20261027-vsock-dgram-support-683a4e0aebe7
Best regards,
--
Sergio Lopez <slp@xxxxxxxxxxx>