From: Bobby Eshleman <bobbyeshleman@meta.com>
To: Sergio Lopez <slp@redhat.com>
Cc: "Stefano Garzarella" <sgarzare@redhat.com>,
"Alexei Starovoitov" <ast@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@kernel.org>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Simon Horman" <horms@kernel.org>,
"Bryan Tan" <bryan-bt.tan@broadcom.com>,
"Vishnu Dasa" <vishnu.dasa@broadcom.com>,
"Broadcom internal kernel review list"
<bcm-kernel-feedback-list@broadcom.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Jason Wang" <jasowangio@gmail.com>,
"Eugenio Pérez" <eperezma@redhat.com>,
"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
"Haiyang Zhang" <haiyangz@microsoft.com>,
"Wei Liu" <wei.liu@kernel.org>,
"Dexuan Cui" <decui@microsoft.com>,
"Shuah Khan" <skhan@linuxfoundation.org>,
"Randy Dunlap" <rdunlap@infradead.org>,
virtualization@lists.linux.dev, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
bpf@vger.kernel.org, linux-hyperv@vger.kernel.org,
"Jonathan Corbet" <corbet@lwn.net>,
linux-doc@vger.kernel.org
Subject: Re: [PATCH RFC v3 0/8] vsock: add datagram support to virtio and vhost
Date: Fri, 13 Nov 2026 14:18:44 -0800 [thread overview]
Message-ID: <aveMxDqYQobWwXd/@devvm29614.prn0.facebook.com> (raw)
In-Reply-To: <20261113-vsock-dgram-support-v3-0-1523c8e9b27e@redhat.com>
On Fri, Nov 13, 2026 at 06:15:40PM +0100, Sergio Lopez wrote:
> This RFC adds SOCK_DGRAM support to virtio-vsock and vhost-vsock through
> the existing AF_VSOCK API. It is intended for guest and host services
> that exchange independent requests, responses, or events and need message
> boundaries and sender addresses without a stream connection or application
> framing.
>
> VIRTIO_VSOCK_F_DGRAM gates virtio traffic in both directions. Each virtio
> send carries zero to 64 KiB of payload in one VIRTIO_VSOCK_TYPE_DGRAM
> packet. On the RX virtqueue, the device may split a datagram across
> page-sized guest buffers.
> START and EOM delimit the message; the guest reassembles at most 64
> fragments and 64 KiB before delivering it to a socket. Invalid or
> incomplete messages are discarded. Datagram delivery is best effort:
> there are no peer credits, acknowledgements, or retransmissions. Send
> admission uses the socket send-memory limit, and SIOCOUTQ reports charged
> send memory.
>
> Datagram sockets have a separate port space from stream and seqpacket
> sockets. The latter two continue to share their port space. Datagram
> routes are chosen per destination among guest-to-host, host-to-guest, and
> loopback transports, with VMCI as a fallback. VMCI still owns its socket
> handle when it is present; loopback works without a directional transport.
> Hyper-V continues to reject datagram sockets.
>
> The Sashiko review of v2 also reported that a VMCI datagram bind in a
> local-mode network namespace creates a receive handle in VMCI's global
> port space, so a sender outside the namespace can deliver datagrams
> across the namespace isolation boundary. The issue predates this series
> and it's getting addressed in a separate patch:
>
> https://lore.kernel.org/all/20261113-vsock-vmci-netns-isolation-v1-1-ced02054ea61@redhat.com
>
> Within this series, local-mode namespaces bind datagrams only in the
> core table and never create a VMCI handle.
>
> Bobby Eshleman and Amery Hung explored this feature in their v6 series
> and v7 work-in-progress branch. This series is a fresh implementation
> against the current vsock code. It follows the separate datagram port
> space, per-destination routing, and VMCI fallback requirements discussed
> there. For guest receive buffers, it uses bounded fragmentation and
> reassembly rather than full-message buffers or the earlier drop/error
> queue approach:
>
> https://lore.kernel.org/r/20240710212555.1617795-1-amery.hung@bytedance.com
> https://github.com/ameryhung/linux/tree/vsock-dgram-v7
>
> A corresponding virtio specification update has been drafted separately.
> The wire format and feature negotiation still need specification review
> before this series can be considered for merging.
>
> The first patches expose the core port allocator and add datagram queue
> reporting, then implement the common data path, guest and host feature
> negotiation, routing, and RX fragmentation. The last patch extends
> vsock_test with local and peer tests for message boundaries, routing,
> connected peers, port sharing, queue accounting, and delayed reads.
>
> Testing used QEMU with the F_DGRAM property patch below, an x86-64
> KASAN/lockdep kernel, paired guest tests, and a nested Linux vhost-vsock
> backend. The tested paths include 64 KiB messages, delayed-read bursts,
> feature-disabled ingress, stream and seqpacket controls, and header-only
> guest RX buffers. A temporary userspace backend still fails stream test
> 21 on both the series base and tip; that case passes with Linux vhost.
> VMCI's host personality was exercised in a QEMU guest, including
> coexistence with virtio and self-send without loopback. A VMware VMCI guest
> device and Hyper-V hardware were not exercised.
>
> 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@redhat.com>
> ---
> Changes in v3:
> - Preserve Hyper-V stream routing and prefer virtio for guest CID_HOST
> datagrams (thanks to Sashiko AI bot).
> - Bind explicit non-VMCI CIDs and local-mode sockets without a VMCI
> handle, resolve wildcard destinations, and retain VMCI self routes
> (thanks to Sashiko AI bot).
> - Recheck bound addresses after receive takes the socket lock and set
> TO_HOST only for forwarded guest sources (thanks to Sashiko AI bot).
> - Probe negotiated virtio datagrams and numeric local CIDs before running
> dependent tests; cover wildcard and VMCI coexistence (thanks to Sashiko
> AI bot).
> - Link to v2: https://lore.kernel.org/r/20261113-vsock-dgram-support-v2-0-bacfc85b71ce@redhat.com
>
> Changes in v2:
> - Keep guest RX buffers page-sized; add START/EOM framing and bounded
> datagram reassembly (thanks to Alexei Starovoitov and Bobby Eshleman).
> - Preserve stream and seqpacket data when an RX buffer has no payload
> room.
> - Separate datagram and connection-oriented port spaces, and share
> receive metadata and queueing (thanks to Alexei Starovoitov).
> - Check negotiated support and destination CID on ingress, and require
> an exact connected peer CID and port (thanks to Sashiko AI bot).
> - Select a capable route for each destination, retain VMCI as fallback,
> and support loopback-only sockets (thanks to Alexei Starovoitov).
> - Preserve the connected peer address across temporary parent fallback
> (thanks to Sashiko AI bot).
> - Use socket write-memory accounting for datagram SIOCOUTQ instead of
> separate transport counters (thanks to Alexei Starovoitov).
> - Extend selftests for fragmentation, delayed reads, port sharing,
> connected peers, and capability-based skips; fix the test build and
> README entries (thanks to Alexei Starovoitov, Bobby Eshleman,
> and Sashiko AI bot).
> - Link to v1: https://lore.kernel.org/r/20261028-vsock-dgram-support-v1-0-e457cf7cee78@sinrega.org
>
> ---
> 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: fragment datagrams across receive buffers
> vsock: add datagram tests to vsock_test
>
> Documentation/admin-guide/sysctl/net.rst | 8 +-
> drivers/vhost/vsock.c | 51 +-
> include/linux/virtio_vsock.h | 8 +-
> include/net/af_vsock.h | 31 +-
> include/uapi/linux/virtio_vsock.h | 10 +
> net/vmw_vsock/af_vsock.c | 526 +++++++++++----
> net/vmw_vsock/hyperv_transport.c | 11 +-
> net/vmw_vsock/virtio_transport.c | 167 ++++-
> net/vmw_vsock/virtio_transport_common.c | 172 ++++-
> net/vmw_vsock/vmci_transport.c | 124 ++--
> net/vmw_vsock/vsock_bpf.c | 3 +-
> net/vmw_vsock/vsock_loopback.c | 2 +-
> tools/testing/vsock/Makefile | 3 +-
> tools/testing/vsock/README | 33 +-
> tools/testing/vsock/util.c | 62 +-
> tools/testing/vsock/util.h | 10 +
> tools/testing/vsock/vsock_test.c | 175 ++++-
> tools/testing/vsock/vsock_test_dgram.c | 1061 ++++++++++++++++++++++++++++++
> tools/testing/vsock/vsock_test_dgram.h | 30 +
> 19 files changed, 2195 insertions(+), 292 deletions(-)
> ---
> base-commit: 65ba8f34ec886ec72b2c07ddc8cf3d815c32869d
> change-id: 20261027-vsock-dgram-support-683a4e0aebe7
>
> Best regards,
> --
> Sergio Lopez <slp@redhat.com>
>
Hey Sergio,
Just a gentle heads up that net-next asks for 24hrs before reposting.
I'll start working my way through the series, sorry if my reviews come
back spread out across a few days, not sure I'll have enough time in a
single sitting.
Best,
Bobby
prev parent reply other threads:[~2026-11-13 22:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 17:15 [PATCH RFC v3 0/8] vsock: add datagram support to virtio and vhost Sergio Lopez
2026-11-13 17:15 ` [PATCH RFC v3 1/8] vsock: expose the core port allocator to transports Sergio Lopez
2026-11-13 17:15 ` [PATCH RFC v3 2/8] vsock: report datagram receive and send queue state Sergio Lopez
2026-11-13 17:15 ` [PATCH RFC v3 3/8] vsock/virtio: implement the datagram data path Sergio Lopez
2026-11-13 17:47 ` sashiko-bot
2026-11-13 17:15 ` [PATCH RFC v3 4/8] vsock/virtio: negotiate datagram support on the guest Sergio Lopez
2026-11-13 17:15 ` [PATCH RFC v3 5/8] vhost/vsock: negotiate datagram support with guests Sergio Lopez
2026-11-13 17:15 ` [PATCH RFC v3 6/8] vsock: allow datagrams to use directional transports Sergio Lopez
2026-11-13 17:42 ` sashiko-bot
2026-11-13 17:15 ` [PATCH RFC v3 7/8] vsock: fragment datagrams across receive buffers Sergio Lopez
2026-11-13 22:37 ` Bobby Eshleman
2026-11-13 17:15 ` [PATCH RFC v3 8/8] vsock: add datagram tests to vsock_test Sergio Lopez
2026-11-13 17:51 ` sashiko-bot
2026-11-13 22:18 ` Bobby Eshleman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aveMxDqYQobWwXd/@devvm29614.prn0.facebook.com \
--to=bobbyeshleman@meta.com \
--cc=ast@kernel.org \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bpf@vger.kernel.org \
--cc=bryan-bt.tan@broadcom.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=decui@microsoft.com \
--cc=edumazet@kernel.org \
--cc=eperezma@redhat.com \
--cc=haiyangz@microsoft.com \
--cc=horms@kernel.org \
--cc=jasowangio@gmail.com \
--cc=kuba@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rdunlap@infradead.org \
--cc=sgarzare@redhat.com \
--cc=skhan@linuxfoundation.org \
--cc=slp@redhat.com \
--cc=stefanha@redhat.com \
--cc=virtualization@lists.linux.dev \
--cc=vishnu.dasa@broadcom.com \
--cc=wei.liu@kernel.org \
--cc=xuanzhuo@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox