To prepare for the qemu agent support for the bhyve driver, move the implementation from qemu/ to hypervisor. This way this implementation can be shared across multiple drivers.
The move is mostly mechanical except qemuAgentOpen() which now accepts the "timeout" argument for the agent timeout. As the original code used QEMU_DOMAIN_PRIVATE() to access the agent timeout value, this change allows to make the code driver-independent. emuAgentOpenUnix() is wrapped with #ifndef WIN32 so it does not fail on mingw. Signed-off-by: Roman Bogorodskiy <[email protected]> --- po/POTFILES | 2 +- src/hypervisor/meson.build | 1 + src/{qemu => hypervisor}/qemu_agent.c | 20 +++++++++++++---- src/{qemu => hypervisor}/qemu_agent.h | 3 ++- src/libvirt_private.syms | 32 +++++++++++++++++++++++++++ src/qemu/meson.build | 1 - src/qemu/qemu_process.c | 3 ++- tests/qemuagenttest.c | 2 +- tests/qemumonitortestutils.c | 6 +++-- tests/qemumonitortestutils.h | 2 +- 10 files changed, 60 insertions(+), 12 deletions(-) rename src/{qemu => hypervisor}/qemu_agent.c (99%) rename src/{qemu => hypervisor}/qemu_agent.h (98%) diff --git a/po/POTFILES b/po/POTFILES index a5f8705eb8..3d52f23002 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -100,6 +100,7 @@ src/hypervisor/domain_cgroup.c src/hypervisor/domain_driver.c src/hypervisor/domain_logcontext.c src/hypervisor/domain_interface.c +src/hypervisor/qemu_agent.c src/hypervisor/virhostdev.c src/interface/interface_backend_netcf.c src/interface/interface_backend_udev.c @@ -166,7 +167,6 @@ src/nwfilter/nwfilter_tech_driver.c src/openvz/openvz_conf.c src/openvz/openvz_driver.c src/openvz/openvz_util.c -src/qemu/qemu_agent.c src/qemu/qemu_alias.c src/qemu/qemu_backup.c src/qemu/qemu_block.c diff --git a/src/hypervisor/meson.build b/src/hypervisor/meson.build index 91eaefbebc..90055b950e 100644 --- a/src/hypervisor/meson.build +++ b/src/hypervisor/meson.build @@ -2,6 +2,7 @@ hypervisor_sources = [ 'domain_cgroup.c', 'domain_driver.c', 'domain_interface.c', + 'qemu_agent.c', 'virclosecallbacks.c', 'virhostdev.c', ] diff --git a/src/qemu/qemu_agent.c b/src/hypervisor/qemu_agent.c similarity index 99% rename from src/qemu/qemu_agent.c rename to src/hypervisor/qemu_agent.c index ee0921eca6..70f0cde5dd 100644 --- a/src/qemu/qemu_agent.c +++ b/src/hypervisor/qemu_agent.c @@ -21,14 +21,15 @@ #include <config.h> -#include <poll.h> +#ifndef WIN32 +# include <poll.h> +#endif #include <unistd.h> #include <fcntl.h> #include <sys/time.h> #include <gio/gio.h> #include "qemu_agent.h" -#include "qemu_domain.h" #include "viralloc.h" #include "virlog.h" #include "virerror.h" @@ -146,6 +147,7 @@ static void qemuAgentDispose(void *obj) virResetError(&agent->lastError); } +#ifndef WIN32 static int qemuAgentOpenUnix(const char *socketpath) { @@ -183,6 +185,15 @@ qemuAgentOpenUnix(const char *socketpath) VIR_FORCE_CLOSE(agentfd); return -1; } +#else /* WIN32 */ +static int +qemuAgentOpenUnix(const char *socketpath G_GNUC_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Opening UNIX sockets is not supported on Win32 platform")); + return -1; +} +#endif /* WIN32 */ static int @@ -584,7 +595,8 @@ qemuAgent * qemuAgentOpen(virDomainObj *vm, const virDomainChrSourceDef *config, GMainContext *context, - qemuAgentCallbacks *cb) + qemuAgentCallbacks *cb, + int timeout) { qemuAgent *agent; g_autoptr(GError) gerr = NULL; @@ -601,7 +613,7 @@ qemuAgentOpen(virDomainObj *vm, if (!(agent = virObjectLockableNew(qemuAgentClass))) return NULL; - agent->timeout = QEMU_DOMAIN_PRIVATE(vm)->agentTimeout; + agent->timeout = timeout; agent->fd = -1; if (virCondInit(&agent->notify) < 0) { virReportSystemError(errno, "%s", diff --git a/src/qemu/qemu_agent.h b/src/hypervisor/qemu_agent.h similarity index 98% rename from src/qemu/qemu_agent.h rename to src/hypervisor/qemu_agent.h index 860f19b6bd..9117d3743c 100644 --- a/src/qemu/qemu_agent.h +++ b/src/hypervisor/qemu_agent.h @@ -38,7 +38,8 @@ struct _qemuAgentCallbacks { qemuAgent *qemuAgentOpen(virDomainObj *vm, const virDomainChrSourceDef *config, GMainContext *context, - qemuAgentCallbacks *cb); + qemuAgentCallbacks *cb, + int timeout); void qemuAgentClose(qemuAgent *mon); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cf0e71cc6a..3af6cc568a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1705,6 +1705,38 @@ virDomainInterfaceStopDevice; virDomainInterfaceStopDevices; virDomainInterfaceVportRemove; +# hypervisor/qemu_agent.h +qemuAgentArbitraryCommand; +qemuAgentClose; +qemuAgentDiskInfoFree; +qemuAgentFSFreeze; +qemuAgentFSInfoFree; +qemuAgentFSThaw; +qemuAgentFSTrim; +qemuAgentGetDisks; +qemuAgentGetFSInfo; +qemuAgentGetHostname; +qemuAgentGetInterfaces; +qemuAgentGetLoadAvg; +qemuAgentGetOSInfo; +qemuAgentGetTime; +qemuAgentGetTimezone; +qemuAgentGetUsers; +qemuAgentGetVCPUs; +qemuAgentNotifyClose; +qemuAgentNotifyEvent; +qemuAgentOpen; +qemuAgentSetResponseTimeout; +qemuAgentSetTime; +qemuAgentSetUserPassword; +qemuAgentSetVCPUs; +qemuAgentShutdown; +qemuAgentSSHAddAuthorizedKeys; +qemuAgentSSHGetAuthorizedKeys; +qemuAgentSSHRemoveAuthorizedKeys; +qemuAgentSuspend; +qemuAgentUpdateCPUInfo; + # hypervisor/virclosecallbacks.h virCloseCallbacksDomainAdd; virCloseCallbacksDomainAlloc; diff --git a/src/qemu/meson.build b/src/qemu/meson.build index b4fb62f14f..2615a5ceef 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -1,5 +1,4 @@ qemu_driver_sources = [ - 'qemu_agent.c', 'qemu_alias.c', 'qemu_backup.c', 'qemu_block.c', diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a6d33f6746..83f5ebb19c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -236,7 +236,8 @@ qemuConnectAgent(virQEMUDriver *driver, virDomainObj *vm) agent = qemuAgentOpen(vm, config->source, virEventThreadGetContext(priv->eventThread), - &agentCallbacks); + &agentCallbacks, + QEMU_DOMAIN_PRIVATE(vm)->agentTimeout); if (!virDomainObjIsActive(vm)) { qemuAgentClose(agent); diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c index 9c64ed3c5f..74cd317e74 100644 --- a/tests/qemuagenttest.c +++ b/tests/qemuagenttest.c @@ -23,7 +23,7 @@ #include "testutilsqemu.h" #include "qemumonitortestutils.h" #include "qemu/qemu_conf.h" -#include "qemu/qemu_agent.h" +#include "hypervisor/qemu_agent.h" #include "virerror.h" diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 88a369188e..b6e17fc2ca 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -27,9 +27,10 @@ #include "virthread.h" #define LIBVIRT_QEMU_PROCESSPRIV_H_ALLOW +#include "hypervisor/qemu_agent.h" +#include "qemu/qemu_domain.h" #include "qemu/qemu_processpriv.h" #include "qemu/qemu_monitor.h" -#include "qemu/qemu_agent.h" #include "rpc/virnetsocket.h" #include "viralloc.h" #include "virlog.h" @@ -1201,7 +1202,8 @@ qemuMonitorTestNewAgent(virDomainXMLOption *xmlopt) if (!(test->agent = qemuAgentOpen(test->vm, &src, virEventThreadGetContext(test->eventThread), - &qemuMonitorTestAgentCallbacks))) + &qemuMonitorTestAgentCallbacks, + QEMU_DOMAIN_PRIVATE(test->vm)->agentTimeout))) goto error; virObjectLock(test->agent); diff --git a/tests/qemumonitortestutils.h b/tests/qemumonitortestutils.h index 6d26526f60..4f136410ee 100644 --- a/tests/qemumonitortestutils.h +++ b/tests/qemumonitortestutils.h @@ -21,7 +21,7 @@ #include "qemu/qemu_conf.h" #include "qemu/qemu_monitor.h" -#include "qemu/qemu_agent.h" +#include "hypervisor/qemu_agent.h" typedef struct _qemuMonitorTest qemuMonitorTest; -- 2.52.0
