From fc1e4eb0083a8990b4792c7f84f37429d19a05ee Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Tomko?= Date: Thu, 17 Jul 2025 16:09:42 +0200 Subject: [PATCH] qemu: passt: split out qemuPasstBuildCommand MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Separate the command line building to make it testable. Signed-off-by: Ján Tomko Reviewed-by: Laine Stump --- src/qemu/qemu_passt.c | 38 +++++++++++++++++++++++++++++--------- src/qemu/qemu_passt.h | 5 +++++ 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index 81e5c51f6c..fcec2ed76b 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -194,15 +194,15 @@ qemuPasstPrepareVhostUser(virDomainObj *vm, net->data.vhostuser->data.nix.reconnect.timeout = QEMU_PASST_RECONNECT_TIMEOUT; } -int -qemuPasstStart(virDomainObj *vm, - virDomainNetDef *net) +virCommand * +qemuPasstBuildCommand(char **socketName, + char **pidfileRet, + virDomainObj *vm, + virDomainNetDef *net) { - qemuDomainObjPrivate *priv = vm->privateData; - virQEMUDriver *driver = priv->driver; g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net); - g_autoptr(virCommand) cmd = NULL; g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net); + g_autoptr(virCommand) cmd = NULL; size_t i; cmd = virCommandNew(PASST); @@ -244,7 +244,7 @@ qemuPasstStart(virDomainObj *vm, * a single IPv4 and single IPv6 address */ if (!(addr = virSocketAddrFormat(&ip->address))) - return -1; + return NULL; virCommandAddArgList(cmd, "--address", addr, NULL); @@ -272,14 +272,14 @@ qemuPasstStart(virDomainObj *vm, /* validation guarantees this will never happen */ virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid portForward proto value %1$u"), pf->proto); - return -1; + return NULL; } if (VIR_SOCKET_ADDR_VALID(&pf->address)) { g_autofree char *addr = NULL; if (!(addr = virSocketAddrFormat(&pf->address))) - return -1; + return NULL; virBufferAddStr(&buf, addr); emitsep = true; @@ -323,6 +323,26 @@ qemuPasstStart(virDomainObj *vm, virCommandAddArg(cmd, virBufferCurrentContent(&buf)); } + if (socketName) + *socketName = g_steal_pointer(&passtSocketName); + if (pidfileRet) + *pidfileRet = g_steal_pointer(&pidfile); + + return g_steal_pointer(&cmd); +} + +int +qemuPasstStart(virDomainObj *vm, + virDomainNetDef *net) +{ + qemuDomainObjPrivate *priv = vm->privateData; + g_autofree char *passtSocketName = NULL; + g_autofree char *pidfile = NULL; + virQEMUDriver *driver = priv->driver; + g_autoptr(virCommand) cmd = NULL; + + if (!(cmd = qemuPasstBuildCommand(&passtSocketName, &pidfile, vm, net))) + return -1; if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0) return -1; diff --git a/src/qemu/qemu_passt.h b/src/qemu/qemu_passt.h index ea545ccf38..e16d4c1119 100644 --- a/src/qemu/qemu_passt.h +++ b/src/qemu/qemu_passt.h @@ -27,6 +27,11 @@ qemuPasstAddNetProps(virDomainObj *vm, virDomainNetDef *net, virJSONValue **netprops); +virCommand *qemuPasstBuildCommand(char **socketName, + char **pidfileRet, + virDomainObj *vm, + virDomainNetDef *net); + int qemuPasstStart(virDomainObj *vm, virDomainNetDef *net); -- 2.47.3