1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-30 18:50:18 +03:00

qemu: Add function to get FDPass object from monitor

Add new function qemuFDPassNewFromMonitor to get an fdset previously
passed to qemu, based on the 'prefix' provided when the qemuFDPass
object was initially created.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Jim Fehlig 2025-02-06 15:20:27 -07:00
parent 9cbc2b9c51
commit 3f53bfac41
2 changed files with 50 additions and 0 deletions

View File

@ -115,6 +115,52 @@ qemuFDPassNewPassed(unsigned int fdSetID)
}
/**
* qemuFDPassNewFromMonitor:
* @prefix: Prefix of an FDset which was already passed to qemu
* @mon: monitor object
*
* Query the monitor for already passed FDsets and return a new qemuFDPass
* object if one is found to contain an fd with associated @prefix. Returns
* NULL on failure or if no matching FDset is found. Similar to
* qemuFDPassNewPassed, this is useful along with qemuFDPassTransferMonitorRollback
* when only knowing the qemuFDPass prefix.
*/
qemuFDPass *
qemuFDPassNewFromMonitor(const char *prefix, qemuMonitor *mon)
{
g_autoptr(qemuMonitorFdsets) fdsets = NULL;
qemuFDPass *fdpass = NULL;
size_t i;
VIR_DEBUG("prefix = %s", prefix);
if (qemuMonitorQueryFdsets(mon, &fdsets) < 0)
return NULL;
for (i = 0; i < fdsets->nfdsets; i++) {
qemuMonitorFdsetInfo fdset = fdsets->fdsets[i];
size_t j;
for (j = 0; j < fdset.nfds; j++) {
qemuMonitorFdsetFdInfo fdinfo = fdset.fds[j];
VIR_DEBUG("fdinfo opaque = %s", fdinfo.opaque);
if (STRPREFIX(prefix, fdinfo.opaque)) {
fdpass = g_new0(qemuFDPass, 1);
fdpass->fdSetID = fdset.id;
fdpass->prefix = g_strdup(prefix);
fdpass->path = g_strdup_printf("/dev/fdset/%u", fdset.id);
fdpass->passed = true;
}
}
}
return fdpass;
}
/**
* qemuFDPassIsPassed:
* @fdpass: The fd passing helper struct

View File

@ -34,6 +34,10 @@ qemuFDPassNew(const char *prefix,
qemuFDPass *
qemuFDPassNewPassed(unsigned int fdSetID);
qemuFDPass *
qemuFDPassNewFromMonitor(const char *prefix, qemuMonitor *mon)
ATTRIBUTE_NONNULL(1);
bool
qemuFDPassIsPassed(qemuFDPass *fdpass,
unsigned *id);