[libvirt] [PATCH 5/6] normalize_xml: Implement qemu driver support

Osier Yang jyang at redhat.com
Mon Jan 9 14:29:13 UTC 2012


If the domain is running, the live def is used to parse the device
XML, otherwise persistent def is used.
---
 src/qemu/qemu_driver.c |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2c4d071..f350deb 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11824,6 +11824,52 @@ cleanup:
     return ret;
 }
 
+static char *
+qemuDomainNormalizeDeviceXML(virDomainPtr dom,
+                             const char *device_xml,
+                             unsigned int flags)
+{
+    struct qemud_driver *driver = dom->conn->privateData;
+    virDomainObjPtr vm;
+    virDomainDefPtr persistentDef = NULL;
+    virDomainDefPtr def = NULL;
+    virDomainDeviceDefPtr dev = NULL;
+    char *ret = NULL;
+
+    qemuDriverLock(driver);
+    vm = virDomainFindByUUID(&driver->domains, dom->uuid);
+    qemuDriverUnlock(driver);
+
+    if (!vm) {
+        char uuidstr[VIR_UUID_STRING_BUFLEN];
+        virUUIDFormat(dom->uuid, uuidstr);
+        qemuReportError(VIR_ERR_NO_DOMAIN,
+                        _("no domain with matching uuid '%s'"), uuidstr);
+        goto cleanup;
+    }
+
+    if (virDomainLiveConfigHelperMethod(driver->caps, vm, &flags,
+                                        &persistentDef) < 0)
+        goto cleanup;
+
+    if (flags & VIR_DOMAIN_AFFECT_LIVE) {
+        def = vm->def;
+    } else {
+        def = persistentDef;
+    }
+
+    dev = virDomainDeviceDefParse(driver->caps, def, device_xml, 0);
+    if (!dev)
+        goto cleanup;
+
+    ret = virDomainDeviceDefFormat(dev, 0);
+
+cleanup:
+    if (vm)
+        virDomainObjUnlock(vm);
+    return ret;
+}
+
 static virDriver qemuDriver = {
     .no = VIR_DRV_QEMU,
     .name = "QEMU",
@@ -11976,6 +12022,7 @@ static virDriver qemuDriver = {
     .domainGetNumaParameters = qemuDomainGetNumaParameters, /* 0.9.9 */
     .domainGetInterfaceParameters = qemuDomainGetInterfaceParameters, /* 0.9.9 */
     .domainSetInterfaceParameters = qemuDomainSetInterfaceParameters, /* 0.9.9 */
+    .domainNormalizeDeviceXML = qemuDomainNormalizeDeviceXML, /* 0.9.10 */
 };
 
 
-- 
1.7.7.3




More information about the libvir-list mailing list