On Wed, Jan 14, 2026 at 13:18:51 +0100, Peter Krempa via Devel wrote:
> On Wed, Jan 14, 2026 at 10:42:02 +0000, Tejus GK wrote:
> > This API allows callers to pass and store file descriptors inside libvirt
> > using a hash table, with a provided "name" serving as the key. The stored
> > file descriptors can be queried and reused later, enabling use cases such as
> > FD-based live migration.
> > 
> > Signed-off-by: Tejus GK <[email protected]>
> > ---
> >  include/libvirt/libvirt-domain.h    |  9 +++++
> >  src/driver-hypervisor.h             |  7 ++++
> >  src/libvirt-domain.c                | 62 +++++++++++++++++++++++++++++
> >  src/libvirt_public.syms             |  5 +++
> >  src/qemu/qemu_conf.h                |  4 ++
> >  src/qemu/qemu_driver.c              | 41 +++++++++++++++++++
> >  src/remote/remote_daemon_dispatch.c | 36 +++++++++++++++++
> >  src/remote/remote_driver.c          | 22 ++++++++++
> >  src/remote/remote_protocol.x        | 12 +++++-
> >  9 files changed, 197 insertions(+), 1 deletion(-)
> 
> [...]
> 
> > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> > index 74c70a0a43..7e194f7193 100644
> > --- a/src/libvirt-domain.c
> > +++ b/src/libvirt-domain.c
> > @@ -14269,3 +14269,65 @@ virDomainDelThrottleGroup(virDomainPtr dom,
> >      virDispatchError(dom->conn);
> >      return -1;
> >  }
> > +
> > +
> > +/**
> > + * virDomainFDStore:
> > + * @conn: a connection object
> > + * @name: name for the file descriptor group
> > + * @nfds: number of fds in @fds
> > + * @fds: file descriptors to store
> > + *
> > + * Store the FDs in @fds with @conn under @name. The FDs persist unitl
> > + * explicitly consumed (e.g. during a live migration) or until libvirt
> > + * shuts down/ restarts.
> > + *
> > + * Unlike virDomainFDAssociate, this does not require a domain to exist
> > + * at the time of storing the FDs.
> > + *
> > + * Returns 0 on success, -1 on error.
> > + *
> > + * Since: 12.0.0
> > + */
> 
> This looks identical to as long as you are about to use the FD with a VM
> object:

Looking at the usage in the code it seems to be in a place which has
@domain available, so no new API should be required for this usage.

> 
> /**
>  * virDomainFDAssociate:
>  * @domain: a domain object
>  * @name: name for the file descriptor group
>  * @nfds: number of fds in @fds
>  * @fds: file descriptors to associate with domain
>  * @flags: optional flags; bitwise-OR of supported virDomainFDAssociateFlags
>  *
>  * Associate the FDs in @fd with @domain under @name. The FDs are associated 
> as
>  * long as the connection used to associated exists and are disposed of
>  * afterwards. FD may still be kept open by the hypervisor for as long as it's
>  * needed.
>  *
>  * Security labelling (e.g. via the selinux) may be applied on the passed FDs
>  * when required for usage by the VM. By default libvirt does not restore the
>  * seclabels on the FDs afterwards to avoid keeping it open unnecessarily.
>  *
>  * Restoring of the security label can be requested by passing either
>  * VIR_DOMAIN_FD_ASSOCIATE_SECLABEL_RESTORE for a best-effort attempt to 
> restore
>  * the security label after use.
>  * Requesting the restore of security label will require that the file
>  * descriptors are kept open for the whole time they are used by the 
> hypervisor,
>  * or other additional overhead.
>  *
>  * In certain cases usage of the fd group would imply read-only access. 
> Passing
>  * VIR_DOMAIN_FD_ASSOCIATE_SECLABEL_WRITABLE in @flags ensures that a writable
>  * security label is picked in case when the file represented by the fds may
>  * be used in write mode.
>  *
>  * Returns 0 on success, -1 on error.
>  *
>  * Since: 9.0.0
>  */
> int
> virDomainFDAssociate(virDomainPtr domain,
>                      const char *name,
>                      unsigned int nfds,
>                      int *fds,
>                      unsigned int flags)
> 
> 
> > + int
> > + virDomainFDStore(virConnectPtr conn,
> > +                   const char *name,
> > +                   unsigned int nfds,
> > +                   int *fds)
> > + {
> > +     int rc;
> > +
> > +     VIR_DEBUG("conn=%p, name='%s', nfds=%u, fds=%p",
> > +               conn, name, nfds, fds);
> 

Reply via email to