]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuBuildVHostUserFsCommandLine: Generate via JSON
authorPeter Krempa <pkrempa@redhat.com>
Tue, 5 Oct 2021 14:23:19 +0000 (16:23 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 12 Oct 2021 09:11:13 +0000 (11:11 +0200)
The 'vhost-user-fs-pci' has following properties we control:
  chardev=<str>          - ID of a chardev to use as a backend
  queue-size=<uint16>    -  (default: 128)
  tag=<str>
  bootindex=<int32>

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_command.h

index f1d98392244ce91934bf097c66ba53acb7d56e65..3ed0fa0c1c017b601b0caecad9cfdd13019c7e11 100644 (file)
@@ -2579,31 +2579,30 @@ qemuBuildVHostUserFsChardevStr(const virDomainFSDef *fs,
 }
 
 
-char *
-qemuBuildVHostUserFsDevStr(virDomainFSDef *fs,
-                           const virDomainDef *def,
-                           const char *chardev_alias,
-                           qemuDomainObjPrivate *priv)
+virJSONValue *
+qemuBuildVHostUserFsDevProps(virDomainFSDef *fs,
+                             const virDomainDef *def,
+                             const char *chardev_alias,
+                             qemuDomainObjPrivate *priv)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+    g_autoptr(virJSONValue) props = NULL;
 
-    if (qemuBuildVirtioDevStr(&buf, priv->qemuCaps, VIR_DOMAIN_DEVICE_FS, fs) < 0)
+    if (!(props = qemuBuildVirtioDevProps(VIR_DOMAIN_DEVICE_FS, fs, priv->qemuCaps)))
         return NULL;
 
-    virBufferAsprintf(&buf, ",id=%s", fs->info.alias);
-    virBufferAsprintf(&buf, ",chardev=%s", chardev_alias);
-    if (fs->queue_size)
-        virBufferAsprintf(&buf, ",queue-size=%llu", fs->queue_size);
-    virBufferAddLit(&buf, ",tag=");
-    virQEMUBuildBufferEscapeComma(&buf, fs->dst);
-
-    if (fs->info.bootIndex)
-        virBufferAsprintf(&buf, ",bootindex=%u", fs->info.bootIndex);
+    if (virJSONValueObjectAdd(props,
+                              "s:id", fs->info.alias,
+                              "s:chardev", chardev_alias,
+                              "P:queue-size", fs->queue_size,
+                              "s:tag", fs->dst,
+                              "p:bootindex", fs->info.bootIndex,
+                              NULL) < 0)
+        return NULL;
 
-    if (qemuBuildDeviceAddressStr(&buf, def, &fs->info) < 0)
+    if (qemuBuildDeviceAddressProps(props, def, &fs->info) < 0)
         return NULL;
 
-    return virBufferContentAndReset(&buf);
+    return g_steal_pointer(&props);
 }
 
 
@@ -2615,7 +2614,7 @@ qemuBuildVHostUserFsCommandLine(virCommand *cmd,
 {
     g_autofree char *chardev_alias = NULL;
     g_autofree char *chrdevstr = NULL;
-    g_autofree char *devstr = NULL;
+    g_autoptr(virJSONValue) devprops = NULL;
 
     chardev_alias = qemuDomainGetVhostUserChrAlias(fs->info.alias);
     chrdevstr = qemuBuildVHostUserFsChardevStr(fs, chardev_alias, priv);
@@ -2626,11 +2625,11 @@ qemuBuildVHostUserFsCommandLine(virCommand *cmd,
     if (qemuCommandAddExtDevice(cmd, &fs->info, priv->qemuCaps) < 0)
         return -1;
 
-    if (!(devstr = qemuBuildVHostUserFsDevStr(fs, def, chardev_alias, priv)))
+    if (!(devprops = qemuBuildVHostUserFsDevProps(fs, def, chardev_alias, priv)))
         return -1;
 
-    virCommandAddArg(cmd, "-device");
-    virCommandAddArg(cmd, devstr);
+    if (qemuBuildDeviceCommandlineFromJSON(cmd, devprops, priv->qemuCaps) < 0)
+        return -1;
 
     return 0;
 }
index 56999b74242af9be2f53ce00218077afdd40343e..81fd24406d8354481932c81059236d0a62dc308e 100644 (file)
@@ -138,11 +138,11 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
                          virDomainDiskDef *disk,
                          virQEMUCaps *qemuCaps);
 
-char *
-qemuBuildVHostUserFsDevStr(virDomainFSDef *fs,
-                           const virDomainDef *def,
-                           const char *chardev_alias,
-                           qemuDomainObjPrivate *priv);
+virJSONValue *
+qemuBuildVHostUserFsDevProps(virDomainFSDef *fs,
+                             const virDomainDef *def,
+                             const char *chardev_alias,
+                             qemuDomainObjPrivate *priv);
 
 /* Current, best practice */
 int