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 <[email protected]> --- 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 <[email protected]>
