On Thu, Nov 06, 2025 at 08:21:05PM +0100, Alyssa Ross wrote: > Previously the spec did not say where in a message the FDs should be > sent. As I understand it, FDs transferred in ancilliary data will
ancillary, actually > always be received along with the first byte of the data they were > sent with, so we should define which byte that is. Going by both > libvhost-user in QEMU and the rust-vmm crate, that byte is the first > byte of the message header. This is important to specify because it > would make back-end implementation significantly more complicated if > receiving file descriptors in the middle of a message had to be > handled. > > Signed-off-by: Alyssa Ross <[email protected]> > --- > docs/interop/vhost-user.rst | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst > index 2e50f2ddfa..93a9c8df2b 100644 > --- a/docs/interop/vhost-user.rst > +++ b/docs/interop/vhost-user.rst > @@ -411,6 +411,13 @@ in the ancillary data: > * ``VHOST_USER_SET_INFLIGHT_FD`` (if > ``VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD``) > * ``VHOST_USER_SET_DEVICE_STATE_FD`` > > +When sending file descriptors in ancilliary data, *front-end* should ancillary, here too > +associate the ancilliary data with a ``sendmsg`` operation (or > +equivalent) that sends bytes starting with the first byte of the > +message header. *back-end* can therefore expect that file descriptors > +will only be received in the first ``recvmsg`` operation for a message > +header. > + > If *front-end* is unable to send the full message or receives a wrong > reply it will close the connection. An optional reconnection mechanism > can be implemented. > > base-commit: 917ac07f9aef579b9538a81d45f45850aba42906 > -- > 2.51.0
