[PATCH] bhyve: implement virDomainAgentSetResponseTimeout()

Roman Bogorodskiy posted 1 patch 2 weeks, 3 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20260806174852.21713-1-bogorodskiy@gmail.com
src/bhyve/bhyve_domain.c | 29 +++++++++++++++++++++++++
src/bhyve/bhyve_driver.c | 47 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 76 insertions(+)
[PATCH] bhyve: implement virDomainAgentSetResponseTimeout()
Posted by Roman Bogorodskiy 2 weeks, 3 days ago
Implement the virDomainAgentSetResponseTimeout() which allows to
set the qemu guest agent timeout.

The change consists of two main parts:

 - bhyveDomainAgentSetResponseTimeout() driver method implementation
   which actually sets the agent timeout.
 - Updating virDomainXMLPrivateDataCallbacks with "parse" and "format"
   methods implementation for parsing and formatting of the agent
   timeout value in domain's XML.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
---
 src/bhyve/bhyve_domain.c | 29 +++++++++++++++++++++++++
 src/bhyve/bhyve_driver.c | 47 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 76 insertions(+)

diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c
index b6344185b7..3b5a9b47a3 100644
--- a/src/bhyve/bhyve_domain.c
+++ b/src/bhyve/bhyve_domain.c
@@ -62,9 +62,38 @@ bhyveDomainObjPrivateFree(void *data)
     g_free(priv);
 }
 
+static int
+bhyveDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
+                              virDomainObj *vm,
+                              virDomainDefParserConfig *config G_GNUC_UNUSED)
+{
+    bhyveDomainObjPrivate *priv = vm->privateData;
+
+    if (virXPathInt("string(./agentTimeout)", ctxt, &priv->agentTimeout) == -2) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("failed to parse agent timeout"));
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+bhyveDomainObjPrivateXMLFormat(virBuffer *buf,
+                               virDomainObj *vm)
+{
+    bhyveDomainObjPrivate *priv = vm->privateData;
+
+    virBufferAsprintf(buf, "<agentTimeout>%i</agentTimeout>\n", priv->agentTimeout);
+
+    return 0;
+}
+
 virDomainXMLPrivateDataCallbacks virBhyveDriverPrivateDataCallbacks = {
     .alloc = bhyveDomainObjPrivateAlloc,
     .free = bhyveDomainObjPrivateFree,
+    .parse = bhyveDomainObjPrivateXMLParse,
+    .format = bhyveDomainObjPrivateXMLFormat,
 };
 
 static bool
diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 4abcd70aba..0823b54b0d 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -2808,6 +2808,52 @@ bhyveDomainRename(virDomainPtr domain,
     return ret;
 }
 
+static int
+bhyveDomainAgentSetResponseTimeout(virDomainPtr domain,
+                                   int timeout,
+                                   unsigned int flags)
+{
+    virDomainObj *vm = NULL;
+    bhyveDomainObjPrivate *priv = NULL;
+    struct _bhyveConn *privconn = domain->conn->privateData;
+    int ret = -1;
+
+    virCheckFlags(0, -1);
+
+    if (timeout < VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("guest agent timeout '%1$d' is less than the minimum '%2$d'"),
+                       timeout, VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN);
+        return -1;
+    }
+
+    if (!(vm = bhyveDomObjFromDomain(domain)))
+        return -1;
+
+    if (virDomainAgentSetResponseTimeoutEnsureACL(domain->conn, vm->def) < 0)
+        goto cleanup;
+
+    priv = vm->privateData;
+    if (priv->agent != NULL) {
+        virObjectLock(priv->agent);
+        qemuAgentSetResponseTimeout(priv->agent, timeout);
+        virObjectUnlock(priv->agent);
+    }
+
+    priv->agentTimeout = timeout;
+
+    if (virDomainObjIsActive(vm)) {
+        if (virDomainObjSave(vm, privconn->xmlopt, BHYVE_STATE_DIR) < 0)
+            VIR_WARN("Failed to save status on vm %s", vm->def->name);
+    }
+
+    ret = 0;
+
+ cleanup:
+    virDomainObjEndAPI(&vm);
+    return ret;
+}
+
 static virHypervisorDriver bhyveHypervisorDriver = {
     .name = "bhyve",
     .connectURIProbe = bhyveConnectURIProbe,
@@ -2886,6 +2932,7 @@ static virHypervisorDriver bhyveHypervisorDriver = {
     .domainAuthorizedSSHKeysGet = bhyveDomainAuthorizedSSHKeysGet, /* 12.5.0 */
     .domainAuthorizedSSHKeysSet = bhyveDomainAuthorizedSSHKeysSet, /* 12.5.0 */
     .domainRename = bhyveDomainRename, /* 12.6.0 */
+    .domainAgentSetResponseTimeout = bhyveDomainAgentSetResponseTimeout, /* 12.7.0 */
 };
 
 
-- 
2.52.0
Re: [PATCH] bhyve: implement virDomainAgentSetResponseTimeout()
Posted by Daniel P. Berrangé via Devel 2 weeks, 3 days ago
On Thu, Aug 06, 2026 at 07:48:52PM +0200, Roman Bogorodskiy wrote:
> Implement the virDomainAgentSetResponseTimeout() which allows to
> set the qemu guest agent timeout.
> 
> The change consists of two main parts:
> 
>  - bhyveDomainAgentSetResponseTimeout() driver method implementation
>    which actually sets the agent timeout.
>  - Updating virDomainXMLPrivateDataCallbacks with "parse" and "format"
>    methods implementation for parsing and formatting of the agent
>    timeout value in domain's XML.
> 
> Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
> ---
>  src/bhyve/bhyve_domain.c | 29 +++++++++++++++++++++++++
>  src/bhyve/bhyve_driver.c | 47 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 76 insertions(+)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|