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 <tejus.gk@nutanix.com> --- 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);