[libvirt PATCH 1/8] qemu: passt: split out qemuPasstBuildCommand

Ján Tomko via Devel posted 8 patches 3 weeks, 4 days ago
[libvirt PATCH 1/8] qemu: passt: split out qemuPasstBuildCommand
Posted by Ján Tomko via Devel 3 weeks, 4 days ago
From: Ján Tomko <jtomko@redhat.com>

Separate the command line building to make it testable.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
---
 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 fcc34de384..d8e281b7a1 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);
@@ -238,7 +238,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);
 
@@ -266,14 +266,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;
@@ -317,6 +317,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.50.1

Re: [libvirt PATCH 1/8] qemu: passt: split out qemuPasstBuildCommand
Posted by Laine Stump via Devel 3 weeks, 4 days ago
On 9/9/25 8:05 AM, Ján Tomko via Devel wrote:
> From: Ján Tomko <jtomko@redhat.com>
> 
> Separate the command line building to make it testable.
> 
> Signed-off-by: Ján Tomko <jtomko@redhat.com>

Reviewed-by: Laine Stump <laine@redhat.com>

> ---
>   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 fcc34de384..d8e281b7a1 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);
> @@ -238,7 +238,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);
>   
> @@ -266,14 +266,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;
> @@ -317,6 +317,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);
>