[PATCH v2 05/23] src: add constants for guest info 'fs.' parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Contrary to most APIs returning typed parameters, there are no constants
defined for the guest info data keys. This is was because many of the
keys needs to be dynamically constructed using one or more array index
values.

It is possible to define constants while still supporting dynamic
array indexes by simply defining the prefixes and suffixes as constants.
The consuming code can then combine the constants with array index
value.

With this approach, it is practical to add constants for the guest info
API keys.

Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
---
 include/libvirt/libvirt-domain.h | 115 +++++++++++++++++++++++++++++++
 src/libvirt-domain.c             |  17 +----
 src/qemu/qemu_driver.c           |  28 +++++---
 3 files changed, 136 insertions(+), 24 deletions(-)

diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 3bafa65708..048036e2ed 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -6630,6 +6630,121 @@ int virDomainSetLaunchSecurityState(virDomainPtr domain,
  */
 #define VIR_DOMAIN_GUEST_INFO_HOSTNAME_HOSTNAME "hostname"
 
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_COUNT:
+ *
+ * The number of filesystems defined on this domain as an unsigned int.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_COUNT "fs.count"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_PREFIX:
+ *
+ * The parameter name prefix to access each filesystem entry. Concatenate the
+ * prefix, the entry number formatted as an unsigned integer and one of the
+ * filesystem suffix parameters to form a complete parameter name.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_PREFIX "fs."
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_MOUNTPOINT:
+ *
+ * The path to the mount point for the filesystem as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_MOUNTPOINT ".mountpoint"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_NAME:
+ *
+ * Device name in the guest (e.g. "sda1") as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_NAME ".name"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_FSTYPE:
+ *
+ * The type of filesystem as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_FSTYPE ".fstype"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_TOTAL_BYTES:
+ *
+ * The total size of the filesystem as an unsigned long long.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_TOTAL_BYTES ".total-bytes"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_USED_BYTES:
+ *
+ * The number of bytes used in the filesystem as an unsigned long long.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_USED_BYTES ".used-bytes"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_COUNT:
+ *
+ * The number of disks targeted by this filesystem as an int.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_COUNT ".disk.count"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX:
+ *
+ * The parameter name prefix to access each disk entry. Concatenate the
+ * filesystem prefix, the filesystem entry number formatted as an unsigned
+ * integer, the disk prefix, the disk entry number formatted as an unsigned
+ * integer and one of the disk suffix parameters to form a complete parameter
+ * name.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX ".disk."
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_ALIAS:
+ *
+ * The device alias of the disk (e.g. sda) as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_ALIAS ".alias"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_SERIAL:
+ *
+ * The serial number of the disk as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_SERIAL ".serial"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE:
+ *
+ * The device node of the disk as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE ".device"
+
 /**
  * virDomainGuestInfoTypes:
  *
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 2d2aefa43d..cb19516c35 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -13223,20 +13223,9 @@ virDomainSetVcpu(virDomainPtr domain,
  *  keys.
  *
  * VIR_DOMAIN_GUEST_INFO_FILESYSTEM:
- *  Returns information about the filesystems within the domain.  The typed
- *  parameter keys are in this format:
- *
- *      "fs.count" - the number of filesystems defined on this domain
- *                   as an unsigned int
- *      "fs.<num>.mountpoint" - the path to the mount point for the filesystem
- *      "fs.<num>.name" - device name in the guest (e.g. "sda1")
- *      "fs.<num>.fstype" - the type of filesystem
- *      "fs.<num>.total-bytes" - the total size of the filesystem
- *      "fs.<num>.used-bytes" - the number of bytes used in the filesystem
- *      "fs.<num>.disk.count" - the number of disks targeted by this filesystem
- *      "fs.<num>.disk.<num>.alias" - the device alias of the disk (e.g. sda)
- *      "fs.<num>.disk.<num>.serial" - the serial number of the disk
- *      "fs.<num>.disk.<num>.device" - the device node of the disk
+ *  Returns information about the filesystems within the domain.
+ *  The VIR_DOMAIN_GUEST_INFO_FS_* constants define the known typed parameter
+ *  keys.
  *
  * VIR_DOMAIN_GUEST_INFO_DISKS:
  *  Returns information about the disks within the domain.  The typed
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 85cc3045ee..22f656b890 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19261,23 +19261,29 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfo **fsinfo,
 {
     size_t i;
 
-    virTypedParamListAddUInt(list, nfs, "fs.count");
+    virTypedParamListAddUInt(list, nfs, VIR_DOMAIN_GUEST_INFO_FS_COUNT);
 
     for (i = 0; i < nfs; i++) {
         size_t j;
 
-        virTypedParamListAddString(list, fsinfo[i]->name, "fs.%zu.name", i);
-        virTypedParamListAddString(list, fsinfo[i]->mountpoint, "fs.%zu.mountpoint", i);
-        virTypedParamListAddString(list, fsinfo[i]->fstype, "fs.%zu.fstype", i);
+        virTypedParamListAddString(list, fsinfo[i]->name,
+                                   VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_NAME, i);
+        virTypedParamListAddString(list, fsinfo[i]->mountpoint,
+                                   VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_MOUNTPOINT, i);
+        virTypedParamListAddString(list, fsinfo[i]->fstype,
+                                   VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_FSTYPE, i);
 
         /* disk usage values are not returned by older guest agents, so
          * only add the params if the value is set */
         if (fsinfo[i]->total_bytes != -1)
-            virTypedParamListAddULLong(list, fsinfo[i]->total_bytes, "fs.%zu.total-bytes", i);
+            virTypedParamListAddULLong(list, fsinfo[i]->total_bytes,
+                                       VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_TOTAL_BYTES, i);
         if (fsinfo[i]->used_bytes != -1)
-            virTypedParamListAddULLong(list, fsinfo[i]->used_bytes, "fs.%zu.used-bytes", i);
+            virTypedParamListAddULLong(list, fsinfo[i]->used_bytes,
+                                       VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_USED_BYTES, i);
 
-        virTypedParamListAddUInt(list, fsinfo[i]->ndisks, "fs.%zu.disk.count", i);
+        virTypedParamListAddUInt(list, fsinfo[i]->ndisks,
+                                 VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_COUNT, i);
 
         for (j = 0; j < fsinfo[i]->ndisks; j++) {
             virDomainDiskDef *diskdef = NULL;
@@ -19292,13 +19298,15 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfo **fsinfo,
                                              d->unit);
             if (diskdef && diskdef->dst)
                 virTypedParamListAddString(list, diskdef->dst,
-                                           "fs.%zu.disk.%zu.alias", i, j);
+                                           VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_ALIAS, i, j);
 
             if (d->serial)
-                virTypedParamListAddString(list, d->serial, "fs.%zu.disk.%zu.serial", i, j);
+                virTypedParamListAddString(list, d->serial,
+                                           VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_SERIAL, i, j);
 
             if (d->devnode)
-                virTypedParamListAddString(list, d->devnode, "fs.%zu.disk.%zu.device", i, j);
+                virTypedParamListAddString(list, d->devnode,
+                                           VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE, i, j);
         }
     }
 }
-- 
2.48.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux