[libvirt] [PATCH 08/20] Add ability to store other metadata in the qemu capabilities object

Daniel P. Berrange berrange at redhat.com
Tue Sep 11 14:11:16 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Add struct fields and APIs to allow the qemu capabilities object
to store version, arch, machines & cpu names, etc

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/qemu/qemu_capabilities.c | 78 ++++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_capabilities.h | 10 ++++++
 2 files changed, 88 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index b6193d9..1e36e4b 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -182,6 +182,18 @@ struct _qemuCaps {
     virObject object;
 
     virBitmapPtr flags;
+
+    unsigned int version;
+    unsigned int kvmVersion;
+
+    char *arch;
+
+    size_t ncpuDefinitions;
+    char **cpuDefinitions;
+
+    size_t nmachineTypes;
+    char **machineTypes;
+    char **machineAliases;
 };
 
 
@@ -1714,6 +1726,21 @@ no_memory:
 void qemuCapsDispose(void *obj)
 {
     qemuCapsPtr caps = obj;
+    size_t i;
+
+    VIR_FREE(caps->arch);
+
+    for (i = 0 ; i < caps->nmachineTypes ; i++) {
+        VIR_FREE(caps->machineTypes[i]);
+        VIR_FREE(caps->machineAliases[i]);
+    }
+    VIR_FREE(caps->machineTypes);
+    VIR_FREE(caps->machineAliases);
+
+    for (i = 0 ; i < caps->ncpuDefinitions ; i++) {
+        VIR_FREE(caps->cpuDefinitions[i]);
+    }
+    VIR_FREE(caps->cpuDefinitions);
 
     virBitmapFree(caps->flags);
 }
@@ -1764,3 +1791,54 @@ qemuCapsGet(qemuCapsPtr caps,
     else
         return b;
 }
+
+
+const char *qemuCapsGetArch(qemuCapsPtr caps)
+{
+    return caps->arch;
+}
+
+
+unsigned int qemuCapsGetVersion(qemuCapsPtr caps)
+{
+    return caps->version;
+}
+
+
+unsigned int qemuCapsGetKVMVersion(qemuCapsPtr caps)
+{
+    return caps->kvmVersion;
+}
+
+
+size_t qemuCapsGetCPUDefinitions(qemuCapsPtr caps,
+                                 char ***names)
+{
+    *names = caps->cpuDefinitions;
+    return caps->ncpuDefinitions;
+}
+
+
+size_t qemuCapsGetMachineTypes(qemuCapsPtr caps,
+                               char ***names)
+{
+    *names = caps->machineTypes;
+    return caps->nmachineTypes;
+}
+
+
+const char *qemuCapsGetCanonicalMachine(qemuCapsPtr caps,
+                                        const char *name)
+
+{
+    size_t i;
+
+    for (i = 0 ; i < caps->nmachineTypes ; i++) {
+        if (!caps->machineAliases[i])
+            continue;
+        if (STREQ(caps->machineAliases[i], name))
+            return caps->machineTypes[i];
+    }
+
+    return name;
+}
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 830b283..c6e3756 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -163,6 +163,16 @@ bool qemuCapsGet(qemuCapsPtr caps,
 
 char *qemuCapsFlagsString(qemuCapsPtr caps);
 
+const char *qemuCapsGetArch(qemuCapsPtr caps);
+unsigned int qemuCapsGetVersion(qemuCapsPtr caps);
+unsigned int qemuCapsGetKVMVersion(qemuCapsPtr caps);
+size_t qemuCapsGetCPUDefinitions(qemuCapsPtr caps,
+                                 char ***names);
+size_t qemuCapsGetMachineTypes(qemuCapsPtr caps,
+                               char ***names);
+const char *qemuCapsGetCanonicalMachine(qemuCapsPtr caps,
+                                        const char *name);
+
 virCapsPtr qemuCapsInit(virCapsPtr old_caps);
 
 int qemuCapsProbeMachineTypes(const char *binary,
-- 
1.7.11.4




More information about the libvir-list mailing list