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:
parent
9cbc2b9c51
commit
3f53bfac41
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user