]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Add post XML parse callbacks and prepare for cleaning of virCaps
authorPeter Krempa <pkrempa@redhat.com>
Tue, 19 Feb 2013 16:29:39 +0000 (17:29 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 4 Apr 2013 20:29:48 +0000 (22:29 +0200)
This patch adds instrumentation that will allow hypervisor drivers to
fill and validate domain and device definitions after parsed by the XML
parser.

With this patch, after the XML is parsed, a callback to the driver is
issued requesting to fill and validate driver specific details of the
configuration. This allows to use sensible defaults and checks on a per
driver basis at the time the XML is parsed.

Two callback pointers are stored in the new virDomainXMLConf object:
* virDomainDeviceDefPostParseCallback (devicesPostParseCallback)
  - called for a single device parsed and for every single device in a
    domain config. A virDomainDeviceDefPtr is passed along with the
    domain definition and virCaps.

* virDomainDefPostParseCallback, (domainPostParseCallback)
  - A callback that is meant to process the domain config after it's
  parsed.  A virDomainDefPtr is passed along with virCaps.

Both types of callbacks support arbitrary opaque data passed for the
callback functions.

Errors may be reported in those callbacks resulting in a XML parsing
failure.

23 files changed:
src/conf/domain_conf.c
src/conf/domain_conf.h
src/esx/esx_driver.c
src/libxl/libxl_driver.c
src/lxc/lxc_conf.c
src/lxc/lxc_driver.c
src/openvz/openvz_conf.c
src/openvz/openvz_driver.c
src/parallels/parallels_driver.c
src/phyp/phyp_driver.c
src/qemu/qemu_conf.c
src/qemu/qemu_driver.c
src/security/virt-aa-helper.c
src/test/test_driver.c
src/uml/uml_driver.c
src/vbox/vbox_tmpl.c
src/vmware/vmware_driver.c
src/xen/xen_driver.c
src/xen/xend_internal.c
src/xen/xm_internal.c
src/xenapi/xenapi_driver.c
tests/testutilsxen.c
tests/xml2vmxtest.c

index 6714a8cd598efcac863d1a1b2ae41bfa00c0691d..20916fb71cf2e1412a0e56dd1ee30a441c464143 100644 (file)
@@ -73,6 +73,9 @@ struct _virDomainObjList {
 struct _virDomainXMLOption {
     virObject parent;
 
+    /* XML parser callbacks and defaults */
+    virDomainDefParserConfig config;
+
     /* domain private data management callbacks */
     virDomainXMLPrivateDataCallbacks privateData;
 
@@ -723,6 +726,7 @@ static virClassPtr virDomainObjListClass;
 static virClassPtr virDomainXMLOptionClass;
 static void virDomainObjDispose(void *obj);
 static void virDomainObjListDispose(void *obj);
+static void virDomainXMLOptionClassDispose(void *obj);
 
 static int virDomainObjOnceInit(void)
 {
@@ -741,7 +745,7 @@ static int virDomainObjOnceInit(void)
     if (!(virDomainXMLOptionClass = virClassNew(virClassForObject(),
                                                 "virDomainXMLOption",
                                                 sizeof(virDomainXMLOption),
-                                                NULL)))
+                                                virDomainXMLOptionClassDispose)))
         return -1;
 
     return 0;
@@ -750,13 +754,24 @@ static int virDomainObjOnceInit(void)
 VIR_ONCE_GLOBAL_INIT(virDomainObj)
 
 
+static void
+virDomainXMLOptionClassDispose(void *obj)
+{
+    virDomainXMLOptionPtr xmlopt = obj;
+
+    if (xmlopt->config.privFree)
+        (xmlopt->config.privFree)(xmlopt->config.priv);
+}
+
+
 /**
  * virDomainXMLOptionNew:
  *
  * Allocate a new domain XML configuration
  */
 virDomainXMLOptionPtr
-virDomainXMLOptionNew(virDomainXMLPrivateDataCallbacksPtr priv,
+virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
+                      virDomainXMLPrivateDataCallbacksPtr priv,
                       virDomainXMLNamespacePtr xmlns)
 {
     virDomainXMLOptionPtr xmlopt;
@@ -770,6 +785,9 @@ virDomainXMLOptionNew(virDomainXMLPrivateDataCallbacksPtr priv,
     if (priv)
         xmlopt->privateData = *priv;
 
+    if (config)
+        xmlopt->config = *config;
+
     if (xmlns)
         xmlopt->ns = *xmlns;
 
@@ -2461,6 +2479,73 @@ int virDomainDeviceInfoIterate(virDomainDefPtr def,
 }
 
 
+static int
+virDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
+                            virDomainDefPtr def,
+                            virCapsPtr caps,
+                            virDomainXMLOptionPtr xmlopt)
+{
+    int ret;
+
+    if (xmlopt && xmlopt->config.devicesPostParseCallback) {
+        ret = xmlopt->config.devicesPostParseCallback(dev, def, caps,
+                                                      xmlopt->config.priv);
+        if (ret < 0)
+            return ret;
+    }
+
+    return 0;
+}
+
+
+struct virDomainDefPostParseDeviceIteratorData {
+    virDomainDefPtr def;
+    virCapsPtr caps;
+    virDomainXMLOptionPtr xmlopt;
+};
+
+
+static int
+virDomainDefPostParseDeviceIterator(virDomainDefPtr def ATTRIBUTE_UNUSED,
+                                    virDomainDeviceDefPtr dev,
+                                    virDomainDeviceInfoPtr info ATTRIBUTE_UNUSED,
+                                    void *opaque)
+{
+    struct virDomainDefPostParseDeviceIteratorData *data = opaque;
+    return virDomainDeviceDefPostParse(dev, data->def, data->caps, data->xmlopt);
+}
+
+
+static int
+virDomainDefPostParse(virDomainDefPtr def,
+                      virCapsPtr caps,
+                      virDomainXMLOptionPtr xmlopt)
+{
+    int ret;
+    struct virDomainDefPostParseDeviceIteratorData data = {
+        .def = def,
+        .caps = caps,
+        .xmlopt = xmlopt,
+    };
+
+    /* call the domain config callback */
+    if (xmlopt && xmlopt->config.domainPostParseCallback) {
+        ret = xmlopt->config.domainPostParseCallback(def, caps,
+                                                     xmlopt->config.priv);
+        if (ret < 0)
+            return ret;
+    }
+
+    /* iterate the devices */
+    if ((ret = virDomainDeviceInfoIterate(def,
+                                          virDomainDefPostParseDeviceIterator,
+                                          &data)) < 0)
+        return ret;
+
+    return 0;
+}
+
+
 void virDomainDefClearPCIAddresses(virDomainDefPtr def)
 {
     virDomainDeviceInfoIterate(def, virDomainDeviceInfoClearPCIAddress, NULL);
@@ -8386,6 +8471,7 @@ virDomainPMStateParseXML(xmlXPathContextPtr ctxt,
 
 virDomainDeviceDefPtr
 virDomainDeviceDefParse(virCapsPtr caps,
+                        virDomainXMLOptionPtr xmlopt,
                         virDomainDefPtr def,
                         const char *xmlStr,
                         unsigned int flags)
@@ -8472,6 +8558,10 @@ virDomainDeviceDefParse(virCapsPtr caps,
         goto error;
     }
 
+    /* callback to fill driver specific device aspects */
+    if (virDomainDeviceDefPostParse(dev, def,  caps, xmlopt) < 0)
+        goto error;
+
 cleanup:
     xmlFreeDoc(xml);
     xmlXPathFreeContext(ctxt);
@@ -11029,6 +11119,10 @@ virDomainDefParseXML(virCapsPtr caps,
     if (virDomainDefAddImplicitControllers(def) < 0)
         goto error;
 
+    /* callback to fill driver specific domain aspects */
+    if (virDomainDefPostParse(def, caps, xmlopt) < 0)
+        goto error;
+
     virBitmapFree(bootMap);
 
     return def;
@@ -16426,6 +16520,7 @@ virDomainNetFind(virDomainDefPtr def, const char *device)
  */
 virDomainDeviceDefPtr
 virDomainDeviceDefCopy(virCapsPtr caps,
+                       virDomainXMLOptionPtr xmlopt,
                        const virDomainDefPtr def,
                        virDomainDeviceDefPtr src)
 {
@@ -16494,7 +16589,7 @@ virDomainDeviceDefCopy(virCapsPtr caps,
         goto cleanup;
 
     xmlStr = virBufferContentAndReset(&buf);
-    ret = virDomainDeviceDefParse(caps, def, xmlStr, flags);
+    ret = virDomainDeviceDefParse(caps, xmlopt, def, xmlStr, flags);
 
 cleanup:
     VIR_FREE(xmlStr);
index 5fb2023fdaa50b86c6bf57b45bb737065009cabb..69a468a0c9226a9493f1286013f16eeec5b932e5 100644 (file)
@@ -1938,6 +1938,24 @@ typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
 typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, void *);
 typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, void *);
 
+typedef int (*virDomainDefPostParseCallback)(virDomainDefPtr def,
+                                             virCapsPtr caps,
+                                             void *opaque);
+typedef int (*virDomainDeviceDefPostParseCallback)(virDomainDeviceDefPtr dev,
+                                                   virDomainDefPtr def,
+                                                   virCapsPtr caps,
+                                                   void *opaque);
+
+typedef struct _virDomainDefParserConfig virDomainDefParserConfig;
+typedef virDomainDefParserConfig *virDomainDefParserConfigPtr;
+struct _virDomainDefParserConfig {
+    virDomainDefPostParseCallback domainPostParseCallback;
+    virDomainDeviceDefPostParseCallback devicesPostParseCallback;
+
+    void *priv;
+    virFreeCallback privFree;
+};
+
 typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
 typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacksPtr;
 struct _virDomainXMLPrivateDataCallbacks {
@@ -1947,9 +1965,9 @@ struct _virDomainXMLPrivateDataCallbacks {
     virDomainXMLPrivateDataParseFunc  parse;
 };
 
-virDomainXMLOptionPtr
-virDomainXMLOptionNew(virDomainXMLPrivateDataCallbacksPtr priv,
-                    virDomainXMLNamespacePtr xmlns);
+virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
+                                            virDomainXMLPrivateDataCallbacksPtr priv,
+                                            virDomainXMLNamespacePtr xmlns);
 
 virDomainXMLNamespacePtr
 virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
@@ -2009,6 +2027,7 @@ void virDomainRedirdevDefFree(virDomainRedirdevDefPtr def);
 void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def);
 void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
 virDomainDeviceDefPtr virDomainDeviceDefCopy(virCapsPtr caps,
+                                             virDomainXMLOptionPtr xmlopt,
                                              const virDomainDefPtr def,
                                              virDomainDeviceDefPtr src);
 int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
@@ -2072,6 +2091,7 @@ void virDomainObjListRemove(virDomainObjListPtr doms,
                             virDomainObjPtr dom);
 
 virDomainDeviceDefPtr virDomainDeviceDefParse(virCapsPtr caps,
+                                              virDomainXMLOptionPtr xmlopt,
                                               virDomainDefPtr def,
                                               const char *xmlStr,
                                               unsigned int flags);
index 3e49ec073ad46a70dc805c53597a45bca238890c..1335ee6c92297e42c8d9d6a772ee14f6334f492d 100644 (file)
@@ -1100,7 +1100,7 @@ esxOpen(virConnectPtr conn, virConnectAuthPtr auth,
         goto cleanup;
     }
 
-    if (!(priv->xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(priv->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         goto cleanup;
 
     conn->privateData = priv;
index 7c033fa098c514d1c4a599a42e605ca2cff363a5..401538976880a1d740a197ea501365db23122a22 100644 (file)
@@ -1239,8 +1239,9 @@ libxlStartup(bool privileged,
         goto error;
     }
 
-    if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(&libxlDomainXMLPrivateDataCallbacks,
-                                                      NULL)))
+    if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(NULL,
+                                                       &libxlDomainXMLPrivateDataCallbacks,
+                                                       NULL)))
         goto error;
 
     /* Load running domains first. */
@@ -3556,7 +3557,8 @@ libxlDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
     priv = vm->privateData;
 
     if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
-        if (!(dev = virDomainDeviceDefParse(driver->caps, vm->def, xml,
+        if (!(dev = virDomainDeviceDefParse(driver->caps, driver->xmlopt,
+                                            vm->def, xml,
                                             VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
 
@@ -3586,7 +3588,8 @@ libxlDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
     if (flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) {
         /* If dev exists it was created to modify the domain config. Free it. */
         virDomainDeviceDefFree(dev);
-        if (!(dev = virDomainDeviceDefParse(driver->caps, vm->def, xml,
+        if (!(dev = virDomainDeviceDefParse(driver->caps, driver->xmlopt,
+                                            vm->def, xml,
                                             VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
 
index ab6c7493f5bebb6074d6b31f91cedf05670e7c60..377d8af117c296d633d129dc33d95965e0850163 100644 (file)
@@ -159,7 +159,9 @@ error:
 virDomainXMLOptionPtr
 lxcDomainXMLConfInit(void)
 {
-    return virDomainXMLOptionNew(&virLXCDriverPrivateDataCallbacks, NULL);
+    return virDomainXMLOptionNew(NULL,
+                                 &virLXCDriverPrivateDataCallbacks,
+                                 NULL);
 }
 
 int lxcLoadDriverConfig(virLXCDriverPtr driver)
index c5bc7b26efc55e47203b47d9c320cd8fd5dfecd7..09f734a6a0725632c4983308e99c6c5c75fc9579 100644 (file)
@@ -4353,7 +4353,8 @@ lxcDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          goto cleanup;
     }
 
-    dev = dev_copy = virDomainDeviceDefParse(driver->caps, vm->def, xml,
+    dev = dev_copy = virDomainDeviceDefParse(driver->caps, driver->xmlopt,
+                                             vm->def, xml,
                                              VIR_DOMAIN_XML_INACTIVE);
     if (dev == NULL)
         goto cleanup;
@@ -4364,7 +4365,8 @@ lxcDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * create a deep copy of device as adding
          * to CONFIG takes one instance.
          */
-        dev_copy = virDomainDeviceDefCopy(driver->caps, vm->def, dev);
+        dev_copy = virDomainDeviceDefCopy(driver->caps, driver->xmlopt,
+                                          vm->def, dev);
         if (!dev_copy)
             goto cleanup;
     }
index 8858c2dbed8dd0843c49c1f21974669aae09a2d6..3cd27a480b8200575683c003f253089b286b8e8a 100644 (file)
@@ -174,6 +174,7 @@ static int openvzDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
     return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ;
 }
 
+
 virCapsPtr openvzCapsInit(void)
 {
     virCapsPtr caps;
index 2fd6a41a29fe5bbd3bf394aa3cec749dec8ba22f..d3344861241d0a8ff1c6da71fcefa03e50e27d18 100644 (file)
@@ -1453,7 +1453,7 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn,
     if (!(driver->caps = openvzCapsInit()))
         goto cleanup;
 
-    if (!(driver->xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(driver->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         goto cleanup;
 
     if (openvzLoadDomains(driver) < 0)
@@ -2085,8 +2085,8 @@ openvzDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
                                         &vmdef) < 0)
         goto cleanup;
 
-    dev = virDomainDeviceDefParse(driver->caps, vmdef, xml,
-                                  VIR_DOMAIN_XML_INACTIVE);
+    dev = virDomainDeviceDefParse(driver->caps, driver->xmlopt,
+                                  vmdef, xml, VIR_DOMAIN_XML_INACTIVE);
     if (!dev)
         goto cleanup;
 
index 1d74340f34ca3f4c8233d86db5b0f2ef94ef2967..5d5353abfdc35f46fd5954a5286c7d41b7b89783 100644 (file)
@@ -929,7 +929,7 @@ parallelsOpenDefault(virConnectPtr conn)
     if (!(privconn->caps = parallelsBuildCapabilities()))
         goto error;
 
-    if (!(privconn->xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(privconn->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         goto error;
 
     if (!(privconn->domains = virDomainObjListNew()))
index 090581c0730368c55f3000c89ba4183fbb6f2524..cd9a989754b7409ebf6fabe70be95e1e52a70470 100644 (file)
@@ -1204,7 +1204,7 @@ phypOpen(virConnectPtr conn,
         goto failure;
     }
 
-    if (!(phyp_driver->xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(phyp_driver->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         goto failure;
 
     conn->privateData = phyp_driver;
@@ -1754,8 +1754,8 @@ phypAttachDevice(virDomainPtr domain, const char *xml)
         goto cleanup;
     }
 
-    dev = virDomainDeviceDefParse(phyp_driver->caps, def, xml,
-                                  VIR_DOMAIN_XML_INACTIVE);
+    dev = virDomainDeviceDefParse(phyp_driver->caps, NULL,
+                                  def, xml, VIR_DOMAIN_XML_INACTIVE);
     if (!dev) {
         goto cleanup;
     }
index 15c6d89d12c34a1f99e23addf7def8c5bcc2dbea..c709188b986493c0bde27dde6a85ae87ae461cd1 100644 (file)
@@ -554,8 +554,9 @@ virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDriverPtr driver)
 virDomainXMLOptionPtr
 virQEMUDriverCreateXMLConf(void)
 {
-    return virDomainXMLOptionNew(&virQEMUDriverPrivateDataCallbacks,
-                               &virQEMUDriverDomainXMLNamespace);
+    return virDomainXMLOptionNew(NULL,
+                                 &virQEMUDriverPrivateDataCallbacks,
+                                 &virQEMUDriverDomainXMLNamespace);
 }
 
 
index 6ba899f8f102e9177922f5d1dc00ed35f365f072..d3276de711d051a98bb5254f6070d6166e298bfa 100644 (file)
@@ -5786,7 +5786,8 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
         tmp = dev->data.disk;
         dev->data.disk = orig_disk;
 
-        if (!(dev_copy = virDomainDeviceDefCopy(caps, vm->def, dev))) {
+        if (!(dev_copy = virDomainDeviceDefCopy(caps, driver->xmlopt,
+                                                vm->def, dev))) {
             dev->data.disk = tmp;
             goto end;
         }
@@ -6062,7 +6063,8 @@ qemuDomainChangeDiskMediaLive(virDomainObjPtr vm,
         tmp = dev->data.disk;
         dev->data.disk = orig_disk;
 
-        if (!(dev_copy = virDomainDeviceDefCopy(caps, vm->def, dev))) {
+        if (!(dev_copy = virDomainDeviceDefCopy(caps, driver->xmlopt,
+                                                vm->def, dev))) {
             dev->data.disk = tmp;
             goto end;
         }
@@ -6468,7 +6470,8 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          goto endjob;
     }
 
-    dev = dev_copy = virDomainDeviceDefParse(caps, vm->def, xml,
+    dev = dev_copy = virDomainDeviceDefParse(caps, driver->xmlopt,
+                                             vm->def, xml,
                                              VIR_DOMAIN_XML_INACTIVE);
     if (dev == NULL)
         goto endjob;
@@ -6479,7 +6482,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * create a deep copy of device as adding
          * to CONFIG takes one instance.
          */
-        dev_copy = virDomainDeviceDefCopy(caps, vm->def, dev);
+        dev_copy = virDomainDeviceDefCopy(caps, driver->xmlopt, vm->def, dev);
         if (!dev_copy)
             goto endjob;
     }
index 6534bea61f170cab235886a817468be8b1875c5a..06c19fa4e82c1617f5c884d7ea36070256dff559 100644 (file)
@@ -711,7 +711,7 @@ get_definition(vahControl * ctl, const char *xmlStr)
         goto exit;
     }
 
-    if (!(ctl->xmlopt = virDomainXMLOptionNew(NULL, NULL))) {
+    if (!(ctl->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL))) {
         vah_error(ctl, 0, _("Failed to create XML config object"));
         goto exit;
     }
index 4c8b21bf0ee1272e8eed6ce154439297b812c0ce..d35dfc42894da3f11243a5dfdf379980e3acccff 100644 (file)
@@ -164,7 +164,7 @@ testBuildXMLConfig(void)
 {
     virDomainXMLPrivateDataCallbacks priv = { .alloc = testDomainObjPrivateAlloc,
                                               .free = testDomainObjPrivateFree };
-    return virDomainXMLOptionNew(&priv, NULL);
+    return virDomainXMLOptionNew(NULL, &priv, NULL);
 }
 
 
index 1d21d7169664d2d9948ca36c3981485bb4568558..f9a79201138752d51eae5678c6df1eb5cb17868d 100644 (file)
@@ -505,8 +505,7 @@ umlStartup(bool privileged,
     if ((uml_driver->caps = umlCapsInit()) == NULL)
         goto out_of_memory;
 
-    if (!(uml_driver->xmlopt = virDomainXMLOptionNew(&privcb,
-                                                    NULL)))
+    if (!(uml_driver->xmlopt = virDomainXMLOptionNew(NULL, &privcb, NULL)))
         goto error;
 
     if ((uml_driver->inotifyFD = inotify_init()) < 0) {
@@ -2081,7 +2080,7 @@ static int umlDomainAttachDevice(virDomainPtr dom, const char *xml)
         goto cleanup;
     }
 
-    dev = virDomainDeviceDefParse(driver->caps, vm->def, xml,
+    dev = virDomainDeviceDefParse(driver->caps, driver->xmlopt, vm->def, xml,
                                   VIR_DOMAIN_XML_INACTIVE);
 
     if (dev == NULL)
@@ -2199,7 +2198,7 @@ static int umlDomainDetachDevice(virDomainPtr dom, const char *xml) {
         goto cleanup;
     }
 
-    dev = virDomainDeviceDefParse(driver->caps, vm->def, xml,
+    dev = virDomainDeviceDefParse(driver->caps, driver->xmlopt, vm->def, xml,
                                   VIR_DOMAIN_XML_INACTIVE);
     if (dev == NULL)
         goto cleanup;
index f5d687a79a6c8f196e3099cdef3a233e79fc09ba..eb6460c59402cc1b8665dfdf3b766b6f4fa6cfde 100644 (file)
@@ -854,7 +854,7 @@ static int vboxDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
 static virDomainXMLOptionPtr
 vboxXMLConfInit(void)
 {
-    return virDomainXMLOptionNew(NULL, NULL);
+    return virDomainXMLOptionNew(NULL, NULL, NULL);
 }
 
 
@@ -5396,8 +5396,8 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
         goto cleanup;
     }
 
-    dev = virDomainDeviceDefParse(data->caps, def, xml,
-                                  VIR_DOMAIN_XML_INACTIVE);
+    dev = virDomainDeviceDefParse(data->caps, data->xmlopt,
+                                  def, xml, VIR_DOMAIN_XML_INACTIVE);
     if (dev == NULL)
         goto cleanup;
 
@@ -5631,8 +5631,8 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) {
         goto cleanup;
     }
 
-    dev = virDomainDeviceDefParse(data->caps, def, xml,
-                                  VIR_DOMAIN_XML_INACTIVE);
+    dev = virDomainDeviceDefParse(data->caps, data->xmlopt,
+                                  def, xml, VIR_DOMAIN_XML_INACTIVE);
     if (dev == NULL)
         goto cleanup;
 
index 28b4e1742d8754039e8de89ee055c6cbdfd77481..2dd6f81a76f45fb019e64c243470f248fd593d26 100644 (file)
@@ -78,7 +78,7 @@ vmwareDomainXMLConfigInit(void)
     virDomainXMLPrivateDataCallbacks priv = { .alloc = vmwareDataAllocFunc,
                                               .free = vmwareDataFreeFunc };
 
-    return virDomainXMLOptionNew(&priv, NULL);
+    return virDomainXMLOptionNew(NULL, &priv, NULL);
 }
 
 static virDrvOpenStatus
index edb8e98c2cc0f4d522e75cf3b01c7efb5c580a52..38dce0ae2d15228bd41a85ba2755a78a69eaefa2 100644 (file)
@@ -401,7 +401,7 @@ xenUnifiedOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
         goto fail;
     }
 
-    if (!(priv->xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(priv->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         goto fail;
 
 #if WITH_XEN_INOTIFY
index ea9814bcca1ddeced69a040fea75fab9cf03700a..f6ce8eb7202f0c1c962e2c0a8ecd31887bebe426 100644 (file)
@@ -2519,7 +2519,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain,
                                      NULL)))
         goto cleanup;
 
-    if (!(dev = virDomainDeviceDefParse(priv->caps,
+    if (!(dev = virDomainDeviceDefParse(priv->caps, priv->xmlopt,
                                         def, xml, VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
@@ -2679,7 +2679,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain,
                                      NULL)))
         goto cleanup;
 
-    if (!(dev = virDomainDeviceDefParse(priv->caps,
+    if (!(dev = virDomainDeviceDefParse(priv->caps, priv->xmlopt,
                                         def, xml, VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
@@ -2786,7 +2786,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain,
                                      NULL)))
         goto cleanup;
 
-    if (!(dev = virDomainDeviceDefParse(priv->caps,
+    if (!(dev = virDomainDeviceDefParse(priv->caps, priv->xmlopt,
                                         def, xml, VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
index c406ee31678d098697445ebebeb6b9edc47587b5..69c8f4a01844ec74d89dbf54c0aed2a28ca5f7e8 100644 (file)
@@ -1311,6 +1311,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain,
     def = entry->def;
 
     if (!(dev = virDomainDeviceDefParse(priv->caps,
+                                        priv->xmlopt,
                                         entry->def,
                                         xml, VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -1404,6 +1405,7 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain,
     def = entry->def;
 
     if (!(dev = virDomainDeviceDefParse(priv->caps,
+                                        priv->xmlopt,
                                         entry->def,
                                         xml, VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
index 0e15e26a33db504dcffaa35f2bccc24319c354ad..712c20b4dfafb431c4a1564e960b59e5828814b4 100644 (file)
@@ -169,7 +169,7 @@ xenapiOpen(virConnectPtr conn, virConnectAuthPtr auth,
         goto error;
     }
 
-    if (!(privP->xmlopt = virDomainXMLOptionNew(NULL, NULL))) {
+    if (!(privP->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL))) {
         xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR,
                                   _("Failed to create XML conf object"));
         goto error;
index bfced0c5ada47b5803fea951ce9d31bb98b52276..2eb47303d0652ed099456d0f79dc4a247df75388 100644 (file)
@@ -18,7 +18,7 @@ static int testXenDefaultConsoleType(const char *ostype,
 virDomainXMLOptionPtr
 testXenXMLConfInit(void)
 {
-    return virDomainXMLOptionNew(NULL, NULL);
+    return virDomainXMLOptionNew(NULL, NULL, NULL);
 }
 
 virCapsPtr testXenCapsInit(void) {
index 344b097be9c7bd61aae2d75c72d923bd110a8568..5195ffa6dc3dd4918d83ccf3c3072cf756cc1bf0 100644 (file)
@@ -240,7 +240,7 @@ mymain(void)
         return EXIT_FAILURE;
     }
 
-    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL)))
+    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
         return EXIT_FAILURE;
 
     ctx.opaque = NULL;