]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
virCaps: conf: start splitting out irrelevat data
authorPeter Krempa <pkrempa@redhat.com>
Tue, 5 Mar 2013 15:17:24 +0000 (16:17 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 13 Mar 2013 08:27:14 +0000 (09:27 +0100)
The virCaps structure gathered a ton of irrelevant data over time that.
The original reason is that it was propagated to the XML parser
functions.

This patch aims to create a new data structure virDomainXMLConf that
will contain immutable data that are used by the XML parser. This will
allow two things we need:

1) Get rid of the stuff from virCaps

2) Allow us to add callbacks to check and add driver specific stuff
after domain XML is parsed.

This first attempt removes pointers to private data allocation functions
to this new structure and update all callers and function that require
them.

65 files changed:
src/Makefile.am
src/conf/capabilities.h
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/snapshot_conf.c
src/conf/snapshot_conf.h
src/esx/esx_driver.c
src/esx/esx_private.h
src/libvirt_private.syms
src/libxl/libxl_conf.h
src/libxl/libxl_driver.c
src/lxc/lxc_conf.c
src/lxc/lxc_conf.h
src/lxc/lxc_controller.c
src/lxc/lxc_domain.c
src/lxc/lxc_domain.h
src/lxc/lxc_driver.c
src/lxc/lxc_process.c
src/openvz/openvz_conf.c
src/openvz/openvz_conf.h
src/openvz/openvz_driver.c
src/parallels/parallels_driver.c
src/parallels/parallels_utils.h
src/phyp/phyp_driver.c
src/phyp/phyp_driver.h
src/qemu/qemu_command.c
src/qemu/qemu_command.h
src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c
src/qemu/qemu_process.c
src/security/virt-aa-helper.c
src/test/test_driver.c
src/uml/uml_conf.h
src/uml/uml_driver.c
src/vbox/vbox_tmpl.c
src/vmware/vmware_conf.c
src/vmware/vmware_conf.h
src/vmware/vmware_driver.c
src/xen/xen_driver.c
src/xen/xen_driver.h
src/xen/xend_internal.c
src/xen/xm_internal.c
src/xenapi/xenapi_driver.c
src/xenapi/xenapi_driver_private.h
tests/domainsnapshotxml2xmltest.c
tests/lxcxml2xmltest.c
tests/qemuargv2xmltest.c
tests/qemumonitorjsontest.c
tests/qemumonitortestutils.c
tests/qemumonitortestutils.h
tests/qemuxml2argvtest.c
tests/qemuxml2xmltest.c
tests/qemuxmlnstest.c
tests/securityselinuxlabeltest.c
tests/testutilsqemu.c
tests/testutilsqemu.h
tests/testutilsxen.c
tests/testutilsxen.h
tests/xmconfigtest.c
tests/xml2sexprtest.c
tests/xml2vmxtest.c

index c1659a4799ae9e66abc2e4a13ecc5f1008cf6d63..60935f474001beb088b4fa27406c2aba5f52766e 100644 (file)
@@ -493,6 +493,7 @@ LXC_CONTROLLER_SOURCES =                                    \
                lxc/lxc_conf.c lxc/lxc_conf.h                   \
                lxc/lxc_container.c lxc/lxc_container.h         \
                lxc/lxc_cgroup.c lxc/lxc_cgroup.h               \
+               lxc/lxc_domain.c lxc/lxc_domain.h               \
                lxc/lxc_fuse.c lxc/lxc_fuse.h                   \
                lxc/lxc_controller.c
 
index 6c67fb32b02b2951284f1f1d175af6a29e32bf60..a70896a978cfb15dcdebd516b27bbc811418c1b3 100644 (file)
@@ -160,19 +160,15 @@ struct _virCaps {
     size_t nguests;
     size_t nguests_max;
     virCapsGuestPtr *guests;
+
+    /* Move to virDomainXMLConf later */
     unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
     unsigned int emulatorRequired : 1;
     const char *defaultDiskDriverName;
     int defaultDiskDriverType; /* enum virStorageFileFormat */
     int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch);
-    void *(*privateDataAllocFunc)(void);
-    void (*privateDataFreeFunc)(void *);
-    int (*privateDataXMLFormat)(virBufferPtr, void *);
-    int (*privateDataXMLParse)(xmlXPathContextPtr, void *);
     bool hasWideScsiBus;
     const char *defaultInitPath;
-
-    virDomainXMLNamespace ns;
 };
 
 
index 717fc206e7cc2d055bc8adaf5c67593d9be57d18..a5246db38f62e0bae0a5b9533f62a4efaf656a3a 100644 (file)
@@ -67,6 +67,20 @@ struct _virDomainObjList {
     virHashTable *objs;
 };
 
+
+/* This structure holds various callbacks and data needed
+ * while parsing and creating domain XMLs */
+struct _virDomainXMLConf {
+    virObject parent;
+
+    /* domain private data management callbacks */
+    virDomainXMLPrivateDataCallbacks privateData;
+
+    /* XML namespace callbacks */
+    virDomainXMLNamespace ns;
+ };
+
+
 /* Private flags used internally by virDomainSaveStatus and
  * virDomainLoadStatus. */
 typedef enum {
@@ -714,6 +728,7 @@ VIR_ENUM_IMPL(virDomainRNGBackend,
 
 static virClassPtr virDomainObjClass;
 static virClassPtr virDomainObjListClass;
+static virClassPtr virDomainXMLConfClass;
 static void virDomainObjDispose(void *obj);
 static void virDomainObjListDispose(void *obj);
 
@@ -731,11 +746,59 @@ static int virDomainObjOnceInit(void)
                                               virDomainObjListDispose)))
         return -1;
 
+    if (!(virDomainXMLConfClass = virClassNew(virClassForObject(),
+                                              "virDomainXMLConf",
+                                              sizeof(virDomainXMLConf),
+                                              NULL)))
+        return -1;
+
     return 0;
 }
 
 VIR_ONCE_GLOBAL_INIT(virDomainObj)
 
+
+/**
+ * virDomainXMLConfNew:
+ *
+ * Allocate a new domain XML configuration
+ */
+virDomainXMLConfPtr
+virDomainXMLConfNew(virDomainXMLPrivateDataCallbacksPtr priv,
+                    virDomainXMLNamespacePtr xmlns)
+{
+    virDomainXMLConfPtr xmlconf;
+
+    if (virDomainObjInitialize() < 0)
+        return NULL;
+
+    if (!(xmlconf = virObjectNew(virDomainXMLConfClass)))
+        return NULL;
+
+    if (priv)
+        xmlconf->privateData = *priv;
+
+    if (xmlns)
+        xmlconf->ns = *xmlns;
+
+    return xmlconf;
+}
+
+/**
+ * virDomainXMLConfGetNamespace:
+ *
+ * @xmlconf: XML parser configuration object
+ *
+ * Returns a pointer to the stored namespace structure.
+ * The lifetime of the pointer is equal to @xmlconf;
+ */
+virDomainXMLNamespacePtr
+virDomainXMLConfGetNamespace(virDomainXMLConfPtr xmlconf)
+{
+    return &xmlconf->ns;
+}
+
+
 void
 virBlkioDeviceWeightArrayClear(virBlkioDeviceWeightPtr deviceWeights,
                                int ndevices)
@@ -1844,8 +1907,8 @@ static void virDomainObjDispose(void *obj)
     virDomainSnapshotObjListFree(dom->snapshots);
 }
 
-
-virDomainObjPtr virDomainObjNew(virCapsPtr caps)
+virDomainObjPtr
+virDomainObjNew(virDomainXMLConfPtr xmlconf)
 {
     virDomainObjPtr domain;
 
@@ -1855,13 +1918,12 @@ virDomainObjPtr virDomainObjNew(virCapsPtr caps)
     if (!(domain = virObjectLockableNew(virDomainObjClass)))
         return NULL;
 
-    if (caps &&
-        caps->privateDataAllocFunc) {
-        if (!(domain->privateData = (caps->privateDataAllocFunc)())) {
+    if (xmlconf->privateData.alloc) {
+        if (!(domain->privateData = (xmlconf->privateData.alloc)())) {
             virReportOOMError();
             goto error;
         }
-        domain->privateDataFreeFunc = caps->privateDataFreeFunc;
+        domain->privateDataFreeFunc = xmlconf->privateData.free;
     }
 
     if (!(domain->snapshots = virDomainSnapshotObjListNew()))
@@ -1927,7 +1989,7 @@ void virDomainObjAssignDef(virDomainObjPtr domain,
  */
 static virDomainObjPtr
 virDomainObjListAddLocked(virDomainObjListPtr doms,
-                          virCapsPtr caps,
+                          virDomainXMLConfPtr xmlconf,
                           const virDomainDefPtr def,
                           unsigned int flags,
                           virDomainDefPtr *oldDef)
@@ -1977,7 +2039,7 @@ virDomainObjListAddLocked(virDomainObjListPtr doms,
             goto error;
         }
 
-        if (!(vm = virDomainObjNew(caps)))
+        if (!(vm = virDomainObjNew(xmlconf)))
             goto cleanup;
         vm->def = def;
 
@@ -1998,7 +2060,7 @@ error:
 
 
 virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms,
-                                    virCapsPtr caps,
+                                    virDomainXMLConfPtr xmlconf,
                                     const virDomainDefPtr def,
                                     unsigned int flags,
                                     virDomainDefPtr *oldDef)
@@ -2006,7 +2068,7 @@ virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms,
     virDomainObjPtr ret;
 
     virObjectLock(doms);
-    ret = virDomainObjListAddLocked(doms, caps, def, flags, oldDef);
+    ret = virDomainObjListAddLocked(doms, xmlconf, def, flags, oldDef);
     virObjectUnlock(doms);
     return ret;
 }
@@ -2025,6 +2087,7 @@ virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms,
  */
 int
 virDomainObjSetDefTransient(virCapsPtr caps,
+                            virDomainXMLConfPtr xmlconf,
                             virDomainObjPtr domain,
                             bool live)
 {
@@ -2039,7 +2102,7 @@ virDomainObjSetDefTransient(virCapsPtr caps,
     if (domain->newDef)
         return 0;
 
-    if (!(domain->newDef = virDomainDefCopy(caps, domain->def, false)))
+    if (!(domain->newDef = virDomainDefCopy(caps, xmlconf, domain->def, false)))
         goto out;
 
     ret = 0;
@@ -2057,9 +2120,10 @@ out:
  */
 virDomainDefPtr
 virDomainObjGetPersistentDef(virCapsPtr caps,
+                             virDomainXMLConfPtr xmlconf,
                              virDomainObjPtr domain)
 {
-    if (virDomainObjSetDefTransient(caps, domain, false) < 0)
+    if (virDomainObjSetDefTransient(caps, xmlconf, domain, false) < 0)
         return NULL;
 
     if (domain->newDef)
@@ -2077,6 +2141,7 @@ virDomainObjGetPersistentDef(virCapsPtr caps,
  */
 int
 virDomainLiveConfigHelperMethod(virCapsPtr caps,
+                                virDomainXMLConfPtr xmlconf,
                                 virDomainObjPtr dom,
                                 unsigned int *flags,
                                 virDomainDefPtr *persistentDef)
@@ -2107,7 +2172,7 @@ virDomainLiveConfigHelperMethod(virCapsPtr caps,
                              "transient domain"));
             goto cleanup;
         }
-        if (!(*persistentDef = virDomainObjGetPersistentDef(caps, dom))) {
+        if (!(*persistentDef = virDomainObjGetPersistentDef(caps, xmlconf, dom))) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Get persistent config failed"));
             goto cleanup;
@@ -9196,6 +9261,7 @@ cleanup:
 
 static virDomainDefPtr
 virDomainDefParseXML(virCapsPtr caps,
+                     virDomainXMLConfPtr xmlconf,
                      xmlDocPtr xml,
                      xmlNodePtr root,
                      xmlXPathContextPtr ctxt,
@@ -10798,7 +10864,7 @@ virDomainDefParseXML(virCapsPtr caps,
     /* we have to make a copy of all of the callback pointers here since
      * we won't have the virCaps structure available during free
      */
-    def->ns = caps->ns;
+    def->ns = xmlconf->ns;
 
     if (def->ns.parse &&
         (def->ns.parse)(xml, root, ctxt, &def->namespaceData) < 0)
@@ -10825,6 +10891,7 @@ error:
 
 static virDomainObjPtr
 virDomainObjParseXML(virCapsPtr caps,
+                     virDomainXMLConfPtr xmlconf,
                      xmlDocPtr xml,
                      xmlXPathContextPtr ctxt,
                      unsigned int expectedVirtTypes,
@@ -10840,7 +10907,7 @@ virDomainObjParseXML(virCapsPtr caps,
     int state;
     int reason = 0;
 
-    if (!(obj = virDomainObjNew(caps)))
+    if (!(obj = virDomainObjNew(xmlconf)))
         return NULL;
 
     if (!(config = virXPathNode("./domain", ctxt))) {
@@ -10851,7 +10918,7 @@ virDomainObjParseXML(virCapsPtr caps,
 
     oldnode = ctxt->node;
     ctxt->node = config;
-    obj->def = virDomainDefParseXML(caps, xml, config, ctxt, expectedVirtTypes,
+    obj->def = virDomainDefParseXML(caps, xmlconf, xml, config, ctxt, expectedVirtTypes,
                                     flags);
     ctxt->node = oldnode;
     if (!obj->def)
@@ -10908,8 +10975,8 @@ virDomainObjParseXML(virCapsPtr caps,
     }
     VIR_FREE(nodes);
 
-    if (caps->privateDataXMLParse &&
-        ((caps->privateDataXMLParse)(ctxt, obj->privateData)) < 0)
+    if (xmlconf->privateData.parse &&
+        ((xmlconf->privateData.parse)(ctxt, obj->privateData)) < 0)
         goto error;
 
     return obj;
@@ -10925,6 +10992,7 @@ static virDomainDefPtr
 virDomainDefParse(const char *xmlStr,
                   const char *filename,
                   virCapsPtr caps,
+                  virDomainXMLConfPtr xmlconf,
                   unsigned int expectedVirtTypes,
                   unsigned int flags)
 {
@@ -10933,7 +11001,7 @@ virDomainDefParse(const char *xmlStr,
     int keepBlanksDefault = xmlKeepBlanksDefault(0);
 
     if ((xml = virXMLParse(filename, xmlStr, _("(domain_definition)")))) {
-        def = virDomainDefParseNode(caps, xml, xmlDocGetRootElement(xml),
+        def = virDomainDefParseNode(caps, xmlconf, xml, xmlDocGetRootElement(xml),
                                     expectedVirtTypes, flags);
         xmlFreeDoc(xml);
     }
@@ -10944,25 +11012,30 @@ virDomainDefParse(const char *xmlStr,
 
 virDomainDefPtr
 virDomainDefParseString(virCapsPtr caps,
+                        virDomainXMLConfPtr xmlconf,
                         const char *xmlStr,
                         unsigned int expectedVirtTypes,
                         unsigned int flags)
 {
-    return virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags);
+    return virDomainDefParse(xmlStr, NULL, caps, xmlconf,
+                             expectedVirtTypes, flags);
 }
 
 virDomainDefPtr
 virDomainDefParseFile(virCapsPtr caps,
+                      virDomainXMLConfPtr xmlconf,
                       const char *filename,
                       unsigned int expectedVirtTypes,
                       unsigned int flags)
 {
-    return virDomainDefParse(NULL, filename, caps, expectedVirtTypes, flags);
+    return virDomainDefParse(NULL, filename, caps, xmlconf,
+                             expectedVirtTypes, flags);
 }
 
 
 virDomainDefPtr
 virDomainDefParseNode(virCapsPtr caps,
+                      virDomainXMLConfPtr xmlconf,
                       xmlDocPtr xml,
                       xmlNodePtr root,
                       unsigned int expectedVirtTypes,
@@ -10986,7 +11059,8 @@ virDomainDefParseNode(virCapsPtr caps,
     }
 
     ctxt->node = root;
-    def = virDomainDefParseXML(caps, xml, root, ctxt, expectedVirtTypes, flags);
+    def = virDomainDefParseXML(caps, xmlconf, xml, root, ctxt,
+                               expectedVirtTypes, flags);
 
 cleanup:
     xmlXPathFreeContext(ctxt);
@@ -10996,6 +11070,7 @@ cleanup:
 
 static virDomainObjPtr
 virDomainObjParseNode(virCapsPtr caps,
+                      virDomainXMLConfPtr xmlconf,
                       xmlDocPtr xml,
                       xmlNodePtr root,
                       unsigned int expectedVirtTypes,
@@ -11018,7 +11093,7 @@ virDomainObjParseNode(virCapsPtr caps,
     }
 
     ctxt->node = root;
-    obj = virDomainObjParseXML(caps, xml, ctxt, expectedVirtTypes, flags);
+    obj = virDomainObjParseXML(caps, xmlconf, xml, ctxt, expectedVirtTypes, flags);
 
 cleanup:
     xmlXPathFreeContext(ctxt);
@@ -11028,6 +11103,7 @@ cleanup:
 
 static virDomainObjPtr
 virDomainObjParseFile(virCapsPtr caps,
+                      virDomainXMLConfPtr xmlconf,
                       const char *filename,
                       unsigned int expectedVirtTypes,
                       unsigned int flags)
@@ -11037,7 +11113,7 @@ virDomainObjParseFile(virCapsPtr caps,
     int keepBlanksDefault = xmlKeepBlanksDefault(0);
 
     if ((xml = virXMLParseFile(filename))) {
-        obj = virDomainObjParseNode(caps, xml,
+        obj = virDomainObjParseNode(caps, xmlconf, xml,
                                     xmlDocGetRootElement(xml),
                                     expectedVirtTypes, flags);
         xmlFreeDoc(xml);
@@ -15001,7 +15077,7 @@ virDomainDefFormat(virDomainDefPtr def, unsigned int flags)
 
 
 static char *
-virDomainObjFormat(virCapsPtr caps,
+virDomainObjFormat(virDomainXMLConfPtr xmlconf,
                    virDomainObjPtr obj,
                    unsigned int flags)
 {
@@ -15022,8 +15098,8 @@ virDomainObjFormat(virCapsPtr caps,
                               virDomainTaintTypeToString(i));
     }
 
-    if (caps->privateDataXMLFormat &&
-        ((caps->privateDataXMLFormat)(&buf, obj->privateData)) < 0)
+    if (xmlconf->privateData.format &&
+        ((xmlconf->privateData.format)(&buf, obj->privateData)) < 0)
         goto error;
 
     virBufferAdjustIndent(&buf, 2);
@@ -15146,7 +15222,7 @@ cleanup:
 }
 
 int
-virDomainSaveStatus(virCapsPtr caps,
+virDomainSaveStatus(virDomainXMLConfPtr xmlconf,
                     const char *statusDir,
                     virDomainObjPtr obj)
 {
@@ -15158,7 +15234,7 @@ virDomainSaveStatus(virCapsPtr caps,
     int ret = -1;
     char *xml;
 
-    if (!(xml = virDomainObjFormat(caps, obj, flags)))
+    if (!(xml = virDomainObjFormat(xmlconf, obj, flags)))
         goto cleanup;
 
     if (virDomainSaveXML(statusDir, obj->def, xml))
@@ -15174,6 +15250,7 @@ cleanup:
 static virDomainObjPtr
 virDomainObjListLoadConfig(virDomainObjListPtr doms,
                            virCapsPtr caps,
+                           virDomainXMLConfPtr xmlconf,
                            const char *configDir,
                            const char *autostartDir,
                            const char *name,
@@ -15189,7 +15266,8 @@ virDomainObjListLoadConfig(virDomainObjListPtr doms,
 
     if ((configFile = virDomainConfigFile(configDir, name)) == NULL)
         goto error;
-    if (!(def = virDomainDefParseFile(caps, configFile, expectedVirtTypes,
+    if (!(def = virDomainDefParseFile(caps, xmlconf, configFile,
+                                      expectedVirtTypes,
                                       VIR_DOMAIN_XML_INACTIVE)))
         goto error;
 
@@ -15199,7 +15277,7 @@ virDomainObjListLoadConfig(virDomainObjListPtr doms,
     if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
         goto error;
 
-    if (!(dom = virDomainObjListAddLocked(doms, caps, def, 0, &oldDef)))
+    if (!(dom = virDomainObjListAddLocked(doms, xmlconf, def, 0, &oldDef)))
         goto error;
 
     dom->autostart = autostart;
@@ -15222,6 +15300,7 @@ error:
 static virDomainObjPtr
 virDomainObjListLoadStatus(virDomainObjListPtr doms,
                            virCapsPtr caps,
+                           virDomainXMLConfPtr xmlconf,
                            const char *statusDir,
                            const char *name,
                            unsigned int expectedVirtTypes,
@@ -15235,7 +15314,7 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms,
     if ((statusFile = virDomainConfigFile(statusDir, name)) == NULL)
         goto error;
 
-    if (!(obj = virDomainObjParseFile(caps, statusFile, expectedVirtTypes,
+    if (!(obj = virDomainObjParseFile(caps, xmlconf, statusFile, expectedVirtTypes,
                                       VIR_DOMAIN_XML_INTERNAL_STATUS |
                                       VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
                                       VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES)))
@@ -15268,6 +15347,7 @@ error:
 int
 virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
                                virCapsPtr caps,
+                               virDomainXMLConfPtr xmlconf,
                                const char *configDir,
                                const char *autostartDir,
                                int liveStatus,
@@ -15306,6 +15386,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
         if (liveStatus)
             dom = virDomainObjListLoadStatus(doms,
                                              caps,
+                                             xmlconf,
                                              configDir,
                                              entry->d_name,
                                              expectedVirtTypes,
@@ -15314,6 +15395,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
         else
             dom = virDomainObjListLoadConfig(doms,
                                              caps,
+                                             xmlconf,
                                              configDir,
                                              autostartDir,
                                              entry->d_name,
@@ -15709,7 +15791,10 @@ cleanup:
  * persistent and active, true for transitions across save files or
  * snapshots).  */
 virDomainDefPtr
-virDomainDefCopy(virCapsPtr caps, virDomainDefPtr src, bool migratable)
+virDomainDefCopy(virCapsPtr caps,
+                 virDomainXMLConfPtr xmlconf,
+                 virDomainDefPtr src,
+                 bool migratable)
 {
     char *xml;
     virDomainDefPtr ret;
@@ -15723,19 +15808,21 @@ virDomainDefCopy(virCapsPtr caps, virDomainDefPtr src, bool migratable)
     if (!(xml = virDomainDefFormat(src, write_flags)))
         return NULL;
 
-    ret = virDomainDefParseString(caps, xml, -1, read_flags);
+    ret = virDomainDefParseString(caps, xmlconf, xml, -1, read_flags);
 
     VIR_FREE(xml);
     return ret;
 }
 
 virDomainDefPtr
-virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainObjPtr dom)
+virDomainObjCopyPersistentDef(virCapsPtr caps,
+                              virDomainXMLConfPtr xmlconf,
+                              virDomainObjPtr dom)
 {
     virDomainDefPtr cur;
 
-    cur = virDomainObjGetPersistentDef(caps, dom);
-    return virDomainDefCopy(caps, cur, false);
+    cur = virDomainObjGetPersistentDef(caps, xmlconf, dom);
+    return virDomainDefCopy(caps, xmlconf, cur, false);
 }
 
 
index 25091939e092ac920be210d8760ae02e0bcb191c..f32244100d292f382a19558ef4617726c3d6c423 100644 (file)
@@ -1926,13 +1926,42 @@ struct _virDomainObj {
 typedef struct _virDomainObjList virDomainObjList;
 typedef virDomainObjList *virDomainObjListPtr;
 
+
+/* This structure holds various callbacks and data needed
+ * while parsing and creating domain XMLs */
+typedef struct _virDomainXMLConf virDomainXMLConf;
+typedef virDomainXMLConf *virDomainXMLConfPtr;
+
+typedef void *(*virDomainXMLPrivateDataAllocFunc)(void);
+typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
+typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, void *);
+typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, void *);
+
+typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
+typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacksPtr;
+struct _virDomainXMLPrivateDataCallbacks {
+    virDomainXMLPrivateDataAllocFunc  alloc;
+    virDomainXMLPrivateDataFreeFunc   free;
+    virDomainXMLPrivateDataFormatFunc format;
+    virDomainXMLPrivateDataParseFunc  parse;
+};
+
+virDomainXMLConfPtr
+virDomainXMLConfNew(virDomainXMLPrivateDataCallbacksPtr priv,
+                    virDomainXMLNamespacePtr xmlns);
+
+virDomainXMLNamespacePtr
+virDomainXMLConfGetNamespace(virDomainXMLConfPtr xmlconf)
+    ATTRIBUTE_NONNULL(1);
+
 static inline bool
 virDomainObjIsActive(virDomainObjPtr dom)
 {
     return dom->def->id != -1;
 }
 
-virDomainObjPtr virDomainObjNew(virCapsPtr caps);
+virDomainObjPtr virDomainObjNew(virDomainXMLConfPtr caps)
+    ATTRIBUTE_NONNULL(1);
 
 virDomainObjListPtr virDomainObjListNew(void);
 
@@ -2007,7 +2036,7 @@ enum {
     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
 };
 virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms,
-                                    virCapsPtr caps,
+                                    virDomainXMLConfPtr xmlconf,
                                     const virDomainDefPtr def,
                                     unsigned int flags,
                                     virDomainDefPtr *oldDef);
@@ -2016,22 +2045,26 @@ void virDomainObjAssignDef(virDomainObjPtr domain,
                            bool live,
                            virDomainDefPtr *oldDef);
 int virDomainObjSetDefTransient(virCapsPtr caps,
+                                virDomainXMLConfPtr xmlconf,
                                 virDomainObjPtr domain,
                                 bool live);
 virDomainDefPtr
 virDomainObjGetPersistentDef(virCapsPtr caps,
+                             virDomainXMLConfPtr xmlconf,
                              virDomainObjPtr domain);
 
 int
 virDomainLiveConfigHelperMethod(virCapsPtr caps,
+                                virDomainXMLConfPtr xmlconf,
                                 virDomainObjPtr dom,
                                 unsigned int *flags,
                                 virDomainDefPtr *persistentDef);
 
-virDomainDefPtr virDomainDefCopy(virCapsPtr caps, virDomainDefPtr src,
-                                 bool migratable);
+virDomainDefPtr virDomainDefCopy(virCapsPtr caps, virDomainXMLConfPtr xmlconf,
+                                 virDomainDefPtr src, bool migratable);
 virDomainDefPtr
-virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainObjPtr dom);
+virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainXMLConfPtr xmlconf,
+                              virDomainObjPtr dom);
 
 void virDomainObjListRemove(virDomainObjListPtr doms,
                             virDomainObjPtr dom);
@@ -2041,14 +2074,17 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(virCapsPtr caps,
                                               const char *xmlStr,
                                               unsigned int flags);
 virDomainDefPtr virDomainDefParseString(virCapsPtr caps,
+                                        virDomainXMLConfPtr xmlconf,
                                         const char *xmlStr,
                                         unsigned int expectedVirtTypes,
                                         unsigned int flags);
 virDomainDefPtr virDomainDefParseFile(virCapsPtr caps,
+                                      virDomainXMLConfPtr xmlconf,
                                       const char *filename,
                                       unsigned int expectedVirtTypes,
                                       unsigned int flags);
 virDomainDefPtr virDomainDefParseNode(virCapsPtr caps,
+                                      virDomainXMLConfPtr xmlconf,
                                       xmlDocPtr doc,
                                       xmlNodePtr root,
                                       unsigned int expectedVirtTypes,
@@ -2165,7 +2201,7 @@ int virDomainSaveXML(const char *configDir,
 
 int virDomainSaveConfig(const char *configDir,
                         virDomainDefPtr def);
-int virDomainSaveStatus(virCapsPtr caps,
+int virDomainSaveStatus(virDomainXMLConfPtr xmlconf,
                         const char *statusDir,
                         virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
 
@@ -2175,6 +2211,7 @@ typedef void (*virDomainLoadConfigNotify)(virDomainObjPtr dom,
 
 int virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
                                    virCapsPtr caps,
+                                   virDomainXMLConfPtr xmlconf,
                                    const char *configDir,
                                    const char *autostartDir,
                                    int liveStatus,
index fe77bd04408839eb7d88fd21193f66fd675ac6c5..1154202379817224b73085bccdb4c9b4bbeb77a7 100644 (file)
@@ -169,6 +169,7 @@ cleanup:
 virDomainSnapshotDefPtr
 virDomainSnapshotDefParseString(const char *xmlStr,
                                 virCapsPtr caps,
+                                virDomainXMLConfPtr xmlconf,
                                 unsigned int expectedVirtTypes,
                                 unsigned int flags)
 {
@@ -263,7 +264,7 @@ virDomainSnapshotDefParseString(const char *xmlStr,
                                _("missing domain in snapshot"));
                 goto cleanup;
             }
-            def->dom = virDomainDefParseNode(caps, xml, domainNode,
+            def->dom = virDomainDefParseNode(caps, xmlconf, xml, domainNode,
                                              expectedVirtTypes,
                                              (VIR_DOMAIN_XML_INACTIVE |
                                               VIR_DOMAIN_XML_SECURE));
index f1d5995a5d007e6167d916c55e3e64537d7627cb..e8bd24a537abb9df801660e48176263a5f7c219f 100644 (file)
@@ -101,6 +101,7 @@ typedef enum {
 
 virDomainSnapshotDefPtr virDomainSnapshotDefParseString(const char *xmlStr,
                                                         virCapsPtr caps,
+                                                        virDomainXMLConfPtr xmlconf,
                                                         unsigned int expectedVirtTypes,
                                                         unsigned int flags);
 void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def);
index 046035dc1085a42228f3fc8d212921bdc7dd5fe8..fc8a3aeb5659150e6c349440803a1c10d602058e 100644 (file)
@@ -71,6 +71,7 @@ esxFreePrivate(esxPrivate **priv)
     esxVI_Context_Free(&(*priv)->vCenter);
     esxUtil_FreeParsedUri(&(*priv)->parsedUri);
     virObjectUnref((*priv)->caps);
+    virObjectUnref((*priv)->xmlconf);
     VIR_FREE(*priv);
 }
 
@@ -1099,6 +1100,9 @@ esxOpen(virConnectPtr conn, virConnectAuthPtr auth,
         goto cleanup;
     }
 
+    if (!(priv->xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        goto cleanup;
+
     conn->privateData = priv;
     priv = NULL;
     result = VIR_DRV_OPEN_SUCCESS;
@@ -2883,8 +2887,8 @@ esxDomainXMLToNative(virConnectPtr conn, const char *nativeFormat,
         return NULL;
     }
 
-    def = virDomainDefParseString(priv->caps, domainXml,
-                                  1 << VIR_DOMAIN_VIRT_VMWARE, 0);
+    def = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                  domainXml, 1 << VIR_DOMAIN_VIRT_VMWARE, 0);
 
     if (def == NULL) {
         return NULL;
@@ -3099,7 +3103,8 @@ esxDomainDefineXML(virConnectPtr conn, const char *xml)
     }
 
     /* Parse domain XML */
-    def = virDomainDefParseString(priv->caps, xml, 1 << VIR_DOMAIN_VIRT_VMWARE,
+    def = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                  xml, 1 << VIR_DOMAIN_VIRT_VMWARE,
                                   VIR_DOMAIN_XML_INACTIVE);
 
     if (def == NULL) {
@@ -4270,7 +4275,8 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc,
         return NULL;
     }
 
-    def = virDomainSnapshotDefParseString(xmlDesc, NULL, 0, 0);
+    def = virDomainSnapshotDefParseString(xmlDesc, priv->caps,
+                                          priv->xmlconf, 0, 0);
 
     if (def == NULL) {
         return NULL;
index f1e7adfc6acc8ee519ddd7f15da59ec596b10d35..29731301606269ed516a32f1a67ba9c7240c63ca 100644 (file)
@@ -26,6 +26,7 @@
 # include "internal.h"
 # include "virerror.h"
 # include "capabilities.h"
+# include "domain_conf.h"
 # include "esx_vi.h"
 
 typedef struct _esxPrivate {
@@ -34,6 +35,7 @@ typedef struct _esxPrivate {
     esxVI_Context *vCenter;
     esxUtil_ParsedUri *parsedUri;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     int32_t maxVcpus;
     esxVI_Boolean supportsVMotion;
     esxVI_Boolean supportsLongMode; /* aka x86_64 */
index 6ee6b6939b56d3de9c0a87d1410f2667f43ad362..0e8fcbfb1b4cd229f780246841d9826a258c6b3b 100644 (file)
@@ -342,6 +342,8 @@ virDomainWatchdogActionTypeFromString;
 virDomainWatchdogActionTypeToString;
 virDomainWatchdogModelTypeFromString;
 virDomainWatchdogModelTypeToString;
+virDomainXMLConfGetNamespace;
+virDomainXMLConfNew;
 
 
 # conf/domain_event.h
index 4c3280e12e2495f9c8125bdf90694647cfe613a6..f8602b410054d27946ce491777c2b42b5b5859aa 100644 (file)
@@ -54,6 +54,7 @@ typedef libxlDriverPrivate *libxlDriverPrivatePtr;
 struct _libxlDriverPrivate {
     virMutex lock;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     unsigned int version;
 
     FILE *logger_file;
index 35c9e16de2a1b06dc71be0e4775c50b9427df9d1..40a7a6bb8c55c37695ac32b11c5564a822f62127 100644 (file)
@@ -426,6 +426,11 @@ libxlDomainObjPrivateFree(void *data)
     virObjectUnref(priv);
 }
 
+virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks = {
+    .alloc = libxlDomainObjPrivateAlloc,
+    .free = libxlDomainObjPrivateFree,
+};
+
 /* driver must be locked before calling */
 static void
 libxlDomainEventQueue(libxlDriverPrivatePtr driver, virDomainEventPtr event)
@@ -558,8 +563,8 @@ libxlSaveImageOpen(libxlDriverPrivatePtr driver, const char *from,
         goto error;
     }
 
-    if (!(def = virDomainDefParseString(driver->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_XEN,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto error;
 
@@ -971,7 +976,7 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
     }
 
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto error;
 
     if (!driver->nactive && driver->inhibitCallback)
@@ -1075,6 +1080,7 @@ libxlShutdown(void)
 
     libxlDriverLock(libxl_driver);
     virObjectUnref(libxl_driver->caps);
+    virObjectUnref(libxl_driver->xmlconf);
     virObjectUnref(libxl_driver->domains);
     libxl_ctx_free(libxl_driver->ctx);
     xtl_logger_destroy(libxl_driver->logger);
@@ -1233,12 +1239,14 @@ libxlStartup(bool privileged,
         goto error;
     }
 
-    libxl_driver->caps->privateDataAllocFunc = libxlDomainObjPrivateAlloc;
-    libxl_driver->caps->privateDataFreeFunc = libxlDomainObjPrivateFree;
+    if (!(libxl_driver->xmlconf = virDomainXMLConfNew(&libxlDomainXMLPrivateDataCallbacks,
+                                                      NULL)))
+        goto error;
 
     /* Load running domains first. */
     if (virDomainObjListLoadAllConfigs(libxl_driver->domains,
                                        libxl_driver->caps,
+                                       libxl_driver->xmlconf,
                                        libxl_driver->stateDir,
                                        libxl_driver->autostartDir,
                                        1, 1 << VIR_DOMAIN_VIRT_XEN,
@@ -1250,6 +1258,7 @@ libxlStartup(bool privileged,
     /* Then inactive persistent configs */
     if (virDomainObjListLoadAllConfigs(libxl_driver->domains,
                                        libxl_driver->caps,
+                                       libxl_driver->xmlconf,
                                        libxl_driver->configDir,
                                        libxl_driver->autostartDir,
                                        0, 1 << VIR_DOMAIN_VIRT_XEN,
@@ -1287,6 +1296,7 @@ libxlReload(void)
     libxlDriverLock(libxl_driver);
     virDomainObjListLoadAllConfigs(libxl_driver->domains,
                                    libxl_driver->caps,
+                                   libxl_driver->xmlconf,
                                    libxl_driver->configDir,
                                    libxl_driver->autostartDir,
                                    1, 1 << VIR_DOMAIN_VIRT_XEN,
@@ -1444,13 +1454,13 @@ libxlDomainCreateXML(virConnectPtr conn, const char *xml,
     virCheckFlags(VIR_DOMAIN_START_PAUSED, NULL);
 
     libxlDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_XEN,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1595,7 +1605,7 @@ libxlDomainSuspend(virDomainPtr dom)
                                          VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
 
     ret = 0;
@@ -1655,7 +1665,7 @@ libxlDomainResume(virDomainPtr dom)
                                          VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
 
     ret = 0;
@@ -1925,7 +1935,9 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
                            _("cannot change persistent config of a transient domain"));
             goto cleanup;
         }
-        if (!(persistentDef = virDomainObjGetPersistentDef(driver->caps, vm)))
+        if (!(persistentDef = virDomainObjGetPersistentDef(driver->caps,
+                                                           driver->xmlconf,
+                                                           vm)))
             goto cleanup;
     }
 
@@ -2230,7 +2242,7 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -2568,7 +2580,7 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
 
     priv = vm->privateData;
 
-    if (!(def = virDomainObjGetPersistentDef(driver->caps, vm)))
+    if (!(def = virDomainObjGetPersistentDef(driver->caps, driver->xmlconf, vm)))
         goto cleanup;
 
     maplen = VIR_CPU_MAPLEN(nvcpus);
@@ -2746,7 +2758,7 @@ libxlDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap,
         goto cleanup;
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
 
     ret = 0;
@@ -2919,7 +2931,7 @@ libxlDomainXMLToNative(virConnectPtr conn, const char * nativeFormat,
         goto cleanup;
     }
 
-    if (!(def = virDomainDefParseString(driver->caps, domainXml,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf, domainXml,
                                         1 << VIR_DOMAIN_VIRT_XEN, 0)))
         goto cleanup;
 
@@ -3021,13 +3033,13 @@ libxlDomainDefineXML(virConnectPtr conn, const char *xml)
     virDomainDefPtr oldDef = NULL;
 
     libxlDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf, xml,
                                         1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    0,
                                    &oldDef)))
@@ -3549,7 +3561,8 @@ libxlDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
             goto cleanup;
 
         /* Make a copy for updated domain. */
-        if (!(vmdef = virDomainObjCopyPersistentDef(driver->caps, vm)))
+        if (!(vmdef = virDomainObjCopyPersistentDef(driver->caps,
+                                                    driver->xmlconf, vm)))
             goto cleanup;
 
         switch (action) {
@@ -3596,7 +3609,7 @@ libxlDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * update domain status forcibly because the domain status may be
          * changed even if we attach the device failed.
          */
-        if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
             ret = -1;
     }
 
index 7b808e7d57a7fe544656b7dbf06409d738863f73..c723e77b1b02da7184162a963971b2c5d7889d68 100644 (file)
@@ -27,6 +27,7 @@
 #include <config.h>
 
 #include "lxc_conf.h"
+#include "lxc_domain.h"
 #include "nodeinfo.h"
 #include "virerror.h"
 #include "virconf.h"
@@ -154,6 +155,13 @@ error:
     return NULL;
 }
 
+
+virDomainXMLConfPtr
+lxcDomainXMLConfInit(void)
+{
+    return virDomainXMLConfNew(&virLXCDriverPrivateDataCallbacks, NULL);
+}
+
 int lxcLoadDriverConfig(virLXCDriverPtr driver)
 {
     char *filename;
index 2649cd6825ace19bbe3f1405e7d8005944032236..b46dc322279256f042a901a073a64f0bf6b50377 100644 (file)
@@ -51,6 +51,7 @@ struct _virLXCDriver {
     virMutex lock;
 
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 
     virCgroupPtr cgroup;
 
@@ -83,6 +84,7 @@ struct _virLXCDriver {
 
 int lxcLoadDriverConfig(virLXCDriverPtr driver);
 virCapsPtr lxcCapsInit(virLXCDriverPtr driver);
+virDomainXMLConfPtr lxcDomainXMLConfInit(void);
 
 static inline void lxcDriverLock(virLXCDriverPtr driver)
 {
index 128271f484de405644b02387feee082a6fb2ed06..5e422ad5f63501803fb5555131213e5e357bd93e 100644 (file)
@@ -151,6 +151,7 @@ static virLXCControllerPtr virLXCControllerNew(const char *name)
 {
     virLXCControllerPtr ctrl = NULL;
     virCapsPtr caps = NULL;
+    virDomainXMLConfPtr xmlconf = NULL;
     char *configFile = NULL;
 
     if (VIR_ALLOC(ctrl) < 0)
@@ -165,11 +166,14 @@ static virLXCControllerPtr virLXCControllerNew(const char *name)
     if ((caps = lxcCapsInit(NULL)) == NULL)
         goto error;
 
+    if (!(xmlconf = lxcDomainXMLConfInit()))
+        goto error;
+
     if ((configFile = virDomainConfigFile(LXC_STATE_DIR,
                                           ctrl->name)) == NULL)
         goto error;
 
-    if ((ctrl->def = virDomainDefParseFile(caps,
+    if ((ctrl->def = virDomainDefParseFile(caps, xmlconf,
                                            configFile,
                                            1 << VIR_DOMAIN_VIRT_LXC,
                                            0)) == NULL)
@@ -183,6 +187,7 @@ static virLXCControllerPtr virLXCControllerNew(const char *name)
 cleanup:
     VIR_FREE(configFile);
     virObjectUnref(caps);
+    virObjectUnref(xmlconf);
     return ctrl;
 
 no_memory:
index 1b02aa5353158e86f608533827b07435e2bf0f5d..08cf8f6b34d858e60f8b38a7c5c4ac9cc9ab09b6 100644 (file)
@@ -73,10 +73,9 @@ static int virLXCDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
     return 0;
 }
 
-void virLXCDomainSetPrivateDataHooks(virCapsPtr caps)
-{
-    caps->privateDataAllocFunc = virLXCDomainObjPrivateAlloc;
-    caps->privateDataFreeFunc = virLXCDomainObjPrivateFree;
-    caps->privateDataXMLFormat = virLXCDomainObjPrivateXMLFormat;
-    caps->privateDataXMLParse = virLXCDomainObjPrivateXMLParse;
-}
+virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks = {
+    .alloc = virLXCDomainObjPrivateAlloc,
+    .free = virLXCDomainObjPrivateFree,
+    .format = virLXCDomainObjPrivateXMLFormat,
+    .parse  = virLXCDomainObjPrivateXMLParse,
+};
index 882f34ad9b4898105e28f271d6e72bbf1ac5ebb9..007ea84e68948e7ffc676f366b4c272b59fdb638 100644 (file)
@@ -38,6 +38,6 @@ struct _virLXCDomainObjPrivate {
     pid_t initpid;
 };
 
-void virLXCDomainSetPrivateDataHooks(virCapsPtr caps);
+extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks;
 
 #endif /* __LXC_DOMAIN_H__ */
index 338b8eb84f471c96062a8efba48a8878b00216e7..5d0613a5f39e46130e94511e2936d36697b9a963 100644 (file)
@@ -413,7 +413,7 @@ static virDomainPtr lxcDomainDefine(virConnectPtr conn, const char *xml)
     virDomainDefPtr oldDef = NULL;
 
     lxcDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf, xml,
                                         1 << VIR_DOMAIN_VIRT_LXC,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -428,7 +428,7 @@ static virDomainPtr lxcDomainDefine(virConnectPtr conn, const char *xml)
     }
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    0,
                                    &oldDef)))
@@ -1069,7 +1069,7 @@ lxcDomainCreateAndStart(virConnectPtr conn,
     virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, NULL);
 
     lxcDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf, xml,
                                         1 << VIR_DOMAIN_VIRT_LXC,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -1085,7 +1085,7 @@ lxcDomainCreateAndStart(virConnectPtr conn,
 
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1475,7 +1475,8 @@ static int lxcStartup(bool privileged,
     if ((lxc_driver->caps = lxcCapsInit(lxc_driver)) == NULL)
         goto cleanup;
 
-    virLXCDomainSetPrivateDataHooks(lxc_driver->caps);
+    if (!(lxc_driver->xmlconf = lxcDomainXMLConfInit()))
+        goto cleanup;
 
     if (virLXCProcessAutoDestroyInit(lxc_driver) < 0)
         goto cleanup;
@@ -1483,6 +1484,7 @@ static int lxcStartup(bool privileged,
     /* Get all the running persistent or transient configs first */
     if (virDomainObjListLoadAllConfigs(lxc_driver->domains,
                                        lxc_driver->caps,
+                                       lxc_driver->xmlconf,
                                        lxc_driver->stateDir,
                                        NULL,
                                        1, 1 << VIR_DOMAIN_VIRT_LXC,
@@ -1494,6 +1496,7 @@ static int lxcStartup(bool privileged,
     /* Then inactive persistent configs */
     if (virDomainObjListLoadAllConfigs(lxc_driver->domains,
                                        lxc_driver->caps,
+                                       lxc_driver->xmlconf,
                                        lxc_driver->configDir,
                                        lxc_driver->autostartDir,
                                        0, 1 << VIR_DOMAIN_VIRT_LXC,
@@ -1541,6 +1544,7 @@ lxcReload(void) {
     lxcDriverLock(lxc_driver);
     virDomainObjListLoadAllConfigs(lxc_driver->domains,
                                    lxc_driver->caps,
+                                   lxc_driver->xmlconf,
                                    lxc_driver->configDir,
                                    lxc_driver->autostartDir,
                                    0, 1 << VIR_DOMAIN_VIRT_LXC,
@@ -1565,6 +1569,7 @@ static int lxcShutdown(void)
     virObjectUnref(lxc_driver->activeUsbHostdevs);
     virObjectUnref(lxc_driver->caps);
     virObjectUnref(lxc_driver->securityManager);
+    virObjectUnref(lxc_driver->xmlconf);
     VIR_FREE(lxc_driver->configDir);
     VIR_FREE(lxc_driver->autostartDir);
     VIR_FREE(lxc_driver->stateDir);
@@ -1786,13 +1791,13 @@ lxcSetSchedulerParametersFlags(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(driver->caps, vm, &flags,
-                                        &vmdef) < 0)
+    if (virDomainLiveConfigHelperMethod(driver->caps, driver->xmlconf,
+                                        vm, &flags, &vmdef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(driver->caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(driver->caps, driver->xmlconf, vm);
         if (!vmdef)
             goto cleanup;
     }
@@ -1858,7 +1863,7 @@ lxcSetSchedulerParametersFlags(virDomainPtr dom,
         }
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
 
 
@@ -1928,8 +1933,8 @@ lxcGetSchedulerParametersFlags(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(driver->caps, vm, &flags,
-                                        &persistentDef) < 0)
+    if (virDomainLiveConfigHelperMethod(driver->caps, driver->xmlconf,
+                                        vm, &flags, &persistentDef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
@@ -2041,8 +2046,8 @@ lxcDomainSetBlkioParameters(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(driver->caps, vm, &flags,
-                                        &persistentDef) < 0)
+    if (virDomainLiveConfigHelperMethod(driver->caps, driver->xmlconf,
+                                        vm, &flags, &persistentDef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_LIVE) {
@@ -2146,8 +2151,8 @@ lxcDomainGetBlkioParameters(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(driver->caps, vm, &flags,
-                                        &persistentDef) < 0)
+    if (virDomainLiveConfigHelperMethod(driver->caps, driver->xmlconf,
+                                        vm, &flags, &persistentDef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_LIVE) {
@@ -2512,7 +2517,7 @@ static int lxcDomainSuspend(virDomainPtr dom)
                                          VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
     ret = 0;
 
@@ -2578,7 +2583,7 @@ static int lxcDomainResume(virDomainPtr dom)
                                          VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
     }
 
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto cleanup;
     ret = 0;
 
@@ -4357,7 +4362,7 @@ lxcDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
             goto cleanup;
 
         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(driver->caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(driver->caps, driver->xmlconf, vm);
         if (!vmdef)
             goto cleanup;
         switch (action) {
@@ -4405,7 +4410,7 @@ lxcDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * changed even if we failed to attach the device. For example,
          * a new controller may be created.
          */
-        if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0) {
             ret = -1;
             goto cleanup;
         }
index d96c69c3eff5a4e56200c8c91ab6816e059de886..cad6402621c55807e275d4e6441fec9a74434d79 100644 (file)
@@ -682,7 +682,7 @@ static void virLXCProcessMonitorInitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED
     }
     virDomainAuditInit(vm, initpid, inode);
 
-    if (virDomainSaveStatus(lxc_driver->caps, lxc_driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(lxc_driver->xmlconf, lxc_driver->stateDir, vm) < 0)
         VIR_WARN("Cannot update XML with PID for LXC %s", vm->def->name);
 }
 
@@ -1043,7 +1043,7 @@ int virLXCProcessStart(virConnectPtr conn,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0)
+    if (virDomainObjSetDefTransient(driver->caps, driver->xmlconf, vm, true) < 0)
         goto cleanup;
 
     /* Run an early hook to set-up missing devices */
@@ -1241,7 +1241,8 @@ int virLXCProcessStart(virConnectPtr conn,
         virLXCProcessAutoDestroyAdd(driver, vm, conn) < 0)
         goto error;
 
-    if (virDomainObjSetDefTransient(driver->caps, vm, false) < 0)
+    if (virDomainObjSetDefTransient(driver->caps, driver->xmlconf,
+                                    vm, false) < 0)
         goto error;
 
     /* Write domain status to disk.
@@ -1250,7 +1251,7 @@ int virLXCProcessStart(virConnectPtr conn,
      * location for the benefit of libvirt_lxc. We're now overwriting
      * it with the live status XML instead. This is a (currently
      * harmless) inconsistency we should fix one day */
-    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, driver->stateDir, vm) < 0)
         goto error;
 
     /* finally we can call the 'started' hook script if any */
index fde32ce311e8f3f6a10ea9891e7ebf9623ee8976..f175655c2bb8ee48be7fe59d668de6934f30613a 100644 (file)
@@ -558,6 +558,7 @@ openvzFreeDriver(struct openvz_driver *driver)
     if (!driver)
         return;
 
+    virObjectUnref(driver->xmlconf);
     virObjectUnref(driver->domains);
     virObjectUnref(driver->caps);
     VIR_FREE(driver);
@@ -648,7 +649,7 @@ int openvzLoadDomains(struct openvz_driver *driver) {
             flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE;
 
         if (!(dom = virDomainObjListAdd(driver->domains,
-                                        driver->caps,
+                                        driver->xmlconf,
                                         def,
                                         flags,
                                         NULL)))
index d7f21b3cfdd189fe277048b3a2a1e0dee4ac937f..a030b429dde0363053faebd681e4820903cbd748 100644 (file)
@@ -45,6 +45,7 @@ struct openvz_driver {
     virMutex lock;
 
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     virDomainObjListPtr domains;
     int version;
 };
index 38652066c2987e429f895da434beced8c9444c27..67d66ae60a71ee5f128070834124ffec142ec2a3 100644 (file)
@@ -955,8 +955,8 @@ openvzDomainDefineXML(virConnectPtr conn, const char *xml)
     virDomainPtr dom = NULL;
 
     openvzDriverLock(driver);
-    if ((vmdef = virDomainDefParseString(driver->caps, xml,
-                                         1 << VIR_DOMAIN_VIRT_OPENVZ,
+    if ((vmdef = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                         xml, 1 << VIR_DOMAIN_VIRT_OPENVZ,
                                          VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
@@ -968,7 +968,7 @@ openvzDomainDefineXML(virConnectPtr conn, const char *xml)
         goto cleanup;
     }
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    vmdef, 0, NULL)))
         goto cleanup;
     vmdef = NULL;
@@ -1042,8 +1042,8 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
     virCheckFlags(0, NULL);
 
     openvzDriverLock(driver);
-    if ((vmdef = virDomainDefParseString(driver->caps, xml,
-                                         1 << VIR_DOMAIN_VIRT_OPENVZ,
+    if ((vmdef = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                         xml, 1 << VIR_DOMAIN_VIRT_OPENVZ,
                                          VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
@@ -1055,7 +1055,7 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
         goto cleanup;
     }
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    vmdef,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1453,6 +1453,9 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn,
     if (!(driver->caps = openvzCapsInit()))
         goto cleanup;
 
+    if (!(driver->xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        goto cleanup;
+
     if (openvzLoadDomains(driver) < 0)
         goto cleanup;
 
@@ -2076,6 +2079,7 @@ openvzDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
     }
 
     if (virDomainLiveConfigHelperMethod(driver->caps,
+                                        driver->xmlconf,
                                         vm,
                                         &flags,
                                         &vmdef) < 0)
index 8f8fdac5bf02c9fee0fa0750e99d3311c2357a67..88f41f7a2ed209d80b2af201ff69a316377bbf5d 100644 (file)
@@ -831,7 +831,7 @@ parallelsLoadDomain(parallelsConnPtr privconn, virJSONValuePtr jobj)
         goto cleanup;
 
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    privconn->caps,
+                                    privconn->xmlconf,
                                     def, 0, NULL)))
         goto cleanup;
     /* dom is locked here */
@@ -929,6 +929,9 @@ parallelsOpenDefault(virConnectPtr conn)
     if (!(privconn->caps = parallelsBuildCapabilities()))
         goto error;
 
+    if (!(privconn->xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        goto error;
+
     if (!(privconn->domains = virDomainObjListNew()))
         goto error;
 
@@ -987,6 +990,7 @@ parallelsClose(virConnectPtr conn)
 
     parallelsDriverLock(privconn);
     virObjectUnref(privconn->caps);
+    virObjectUnref(privconn->xmlconf);
     virObjectUnref(privconn->domains);
     conn->privateData = NULL;
 
@@ -2326,8 +2330,8 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
     virDomainObjPtr dom = NULL, olddom = NULL;
 
     parallelsDriverLock(privconn);
-    if ((def = virDomainDefParseString(privconn->caps, xml,
-                                       1 << VIR_DOMAIN_VIRT_PARALLELS,
+    if ((def = virDomainDefParseString(privconn->caps, privconn->xmlconf,
+                                       xml, 1 << VIR_DOMAIN_VIRT_PARALLELS,
                                        VIR_DOMAIN_XML_INACTIVE)) == NULL) {
         virReportError(VIR_ERR_INVALID_ARG, "%s",
                        _("Can't parse XML desc"));
@@ -2366,7 +2370,7 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
     virObjectUnlock(olddom);
 
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    privconn->caps,
+                                    privconn->xmlconf,
                                     def, 0, NULL))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Can't allocate domobj"));
index 910cd8bd61e4995e2bc4427140b179972a7f28fc..59ef18e35578a4065c889fa3fecce5511debc845 100644 (file)
@@ -43,6 +43,7 @@ struct _parallelsConn {
     virStoragePoolObjList pools;
     virNetworkObjList networks;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     virDomainEventStatePtr domainEventState;
 };
 
index 8c673381ea81387ed97b4716aad497da5255ba30..59cc1ca9e35acc82f5c572764a009df6a09e222d 100644 (file)
@@ -1204,6 +1204,9 @@ phypOpen(virConnectPtr conn,
         goto failure;
     }
 
+    if (!(phyp_driver->xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        goto failure;
+
     conn->privateData = phyp_driver;
     conn->networkPrivateData = connection_data;
 
@@ -1252,6 +1255,7 @@ phypClose(virConnectPtr conn)
     libssh2_session_free(session);
 
     virObjectUnref(phyp_driver->caps);
+    virObjectUnref(phyp_driver->xmlconf);
     phypUUIDTable_Free(phyp_driver->uuid_table);
     VIR_FREE(phyp_driver->managed_system);
     VIR_FREE(phyp_driver);
@@ -3633,8 +3637,8 @@ phypDomainCreateAndStart(virConnectPtr conn,
 
     virCheckFlags(0, NULL);
 
-    if (!(def = virDomainDefParseString(phyp_driver->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_PHYP,
+    if (!(def = virDomainDefParseString(phyp_driver->caps, phyp_driver->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_PHYP,
                                         VIR_DOMAIN_XML_SECURE)))
         goto err;
 
index 8114b6786493cb9f8f3a3f026bf0f277fefa5b61..8d4cc16e799a8b9282be88e4b925e08ca1a1bb54 100644 (file)
@@ -68,6 +68,7 @@ typedef phyp_driver_t *phyp_driverPtr;
 struct _phyp_driver {
     uuid_tablePtr uuid_table;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     int vios_id;
 
     /* system_type:
index 201fac1e3b3a9ac64f9d24635a443954d484498c..1a740dc07986c3d45e00233406ef7f8d8f3a204f 100644 (file)
@@ -8562,6 +8562,7 @@ qemuParseCommandLineBootDevs(virDomainDefPtr def, const char *str) {
  * as is practical. This is not an exact science....
  */
 virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
+                                     virDomainXMLConfPtr xmlconf,
                                      const char **progenv,
                                      const char **progargv,
                                      char **pidfile,
@@ -9423,7 +9424,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
         goto error;
 
     if (cmd->num_args || cmd->num_env) {
-        def->ns = qemuCaps->ns;
+        def->ns = *virDomainXMLConfGetNamespace(xmlconf);
         def->namespaceData = cmd;
     }
     else
@@ -9449,6 +9450,7 @@ error:
 
 
 virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
+                                           virDomainXMLConfPtr xmlconf,
                                            const char *args,
                                            char **pidfile,
                                            virDomainChrSourceDefPtr *monConfig,
@@ -9462,7 +9464,7 @@ virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
     if (qemuStringToArgvEnv(args, &progenv, &progargv) < 0)
         goto cleanup;
 
-    def = qemuParseCommandLine(qemuCaps, progenv, progargv,
+    def = qemuParseCommandLine(qemuCaps, xmlconf, progenv, progargv,
                                pidfile, monConfig, monJSON);
 
 cleanup:
@@ -9538,6 +9540,7 @@ cleanup:
 }
 
 virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
+                                        virDomainXMLConfPtr xmlconf,
                                         pid_t pid,
                                         char **pidfile,
                                         virDomainChrSourceDefPtr *monConfig,
@@ -9557,7 +9560,7 @@ virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
         qemuParseProcFileStrings(pid, "environ", &progenv) < 0)
         goto cleanup;
 
-    if (!(def = qemuParseCommandLine(qemuCaps, progenv, progargv,
+    if (!(def = qemuParseCommandLine(qemuCaps, xmlconf, progenv, progargv,
                                      pidfile, monConfig, monJSON)))
         goto cleanup;
 
index e4db0002d688cdd801b393fb443d5259ec3ec14a..a1214d883b6001095ec15b335956013e71341b6b 100644 (file)
@@ -167,17 +167,20 @@ int qemuOpenVhostNet(virDomainDefPtr def,
  * *must* decide how to fill in a name in this case
  */
 virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
+                                     virDomainXMLConfPtr xmlconf,
                                      const char **progenv,
                                      const char **progargv,
                                      char **pidfile,
                                      virDomainChrSourceDefPtr *monConfig,
                                      bool *monJSON);
 virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
+                                           virDomainXMLConfPtr xmlconf,
                                            const char *args,
                                            char **pidfile,
                                            virDomainChrSourceDefPtr *monConfig,
                                            bool *monJSON);
 virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
+                                        virDomainXMLConfPtr xmlconf,
                                         pid_t pid,
                                         char **pidfile,
                                         virDomainChrSourceDefPtr *monConfig,
index 24086105f71f769e9e3a2e3146d7b35c8012ce00..c2e2e1091423556d3cff5b6af2772b934230a6bc 100644 (file)
@@ -551,6 +551,13 @@ virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDriverPtr driver)
     return conf;
 }
 
+virDomainXMLConfPtr
+virQEMUDriverCreateXMLConf(void)
+{
+    return virDomainXMLConfNew(&virQEMUDriverPrivateDataCallbacks,
+                               &virQEMUDriverDomainXMLNamespace);
+}
+
 
 virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
 {
@@ -573,9 +580,6 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
         caps->defaultDiskDriverType = VIR_STORAGE_FILE_RAW;
     }
 
-    qemuDomainSetPrivateDataHooks(caps);
-    qemuDomainSetNamespaceHooks(caps);
-
     if (virGetHostUUID(caps->host.host_uuid)) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        "%s", _("cannot get the host uuid"));
index 6bb3dee8c3e84ce0ac96a44134b6dfe6d66424e1..c5ddaad0e64ae243658390b663c87c6265452299 100644 (file)
@@ -188,6 +188,9 @@ struct _virQEMUDriver {
      */
     virCapsPtr caps;
 
+    /* Immutable pointer, Immutable object */
+    virDomainXMLConfPtr xmlconf;
+
     /* Immutable pointer, self-locking APIs */
     virQEMUCapsCachePtr qemuCapsCache;
 
@@ -298,5 +301,6 @@ void qemuSharedDiskEntryFree(void *payload, const void *name)
     ATTRIBUTE_NONNULL(1);
 
 int qemuDriverAllocateID(virQEMUDriverPtr driver);
+virDomainXMLConfPtr virQEMUDriverCreateXMLConf(void);
 
 #endif /* __QEMUD_CONF_H */
index 0e56596dd0b56eb2b7018687e4cd72ebaf7bde4e..2be207f36c9f55c4e0d65d95776860f367d14bda 100644 (file)
@@ -205,7 +205,8 @@ qemuDomainTrackJob(enum qemuDomainJob job)
 }
 
 
-static void *qemuDomainObjPrivateAlloc(void)
+static void
+*qemuDomainObjPrivateAlloc(void)
 {
     qemuDomainObjPrivatePtr priv;
 
@@ -227,7 +228,8 @@ error:
     return NULL;
 }
 
-static void qemuDomainObjPrivateFree(void *data)
+static void
+qemuDomainObjPrivateFree(void *data)
 {
     qemuDomainObjPrivatePtr priv = data;
 
@@ -256,7 +258,8 @@ static void qemuDomainObjPrivateFree(void *data)
 }
 
 
-static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
+static int
+qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
 {
     qemuDomainObjPrivatePtr priv = data;
     const char *monitorpath;
@@ -329,7 +332,8 @@ static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
     return 0;
 }
 
-static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
+static int
+qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
 {
     qemuDomainObjPrivatePtr priv = data;
     char *monitorpath;
@@ -482,6 +486,14 @@ error:
 }
 
 
+virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks = {
+    .alloc = qemuDomainObjPrivateAlloc,
+    .free = qemuDomainObjPrivateFree,
+    .parse = qemuDomainObjPrivateXMLParse,
+    .format = qemuDomainObjPrivateXMLFormat,
+};
+
+
 static void
 qemuDomainDefNamespaceFree(void *nsdata)
 {
@@ -641,42 +653,25 @@ qemuDomainDefNamespaceHref(void)
 }
 
 
-void qemuDomainSetPrivateDataHooks(virCapsPtr caps)
-{
-    /* Domain XML parser hooks */
-    caps->privateDataAllocFunc = qemuDomainObjPrivateAlloc;
-    caps->privateDataFreeFunc = qemuDomainObjPrivateFree;
-    caps->privateDataXMLFormat = qemuDomainObjPrivateXMLFormat;
-    caps->privateDataXMLParse = qemuDomainObjPrivateXMLParse;
-
-}
+virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = {
+    .parse = qemuDomainDefNamespaceParse,
+    .free = qemuDomainDefNamespaceFree,
+    .format = qemuDomainDefNamespaceFormatXML,
+    .href = qemuDomainDefNamespaceHref,
+};
 
-void qemuDomainSetNamespaceHooks(virCapsPtr caps)
-{
-    /* Domain Namespace XML parser hooks */
-    caps->ns.parse = qemuDomainDefNamespaceParse;
-    caps->ns.free = qemuDomainDefNamespaceFree;
-    caps->ns.format = qemuDomainDefNamespaceFormatXML;
-    caps->ns.href = qemuDomainDefNamespaceHref;
-}
 
 static void
 qemuDomainObjSaveJob(virQEMUDriverPtr driver, virDomainObjPtr obj)
 {
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     if (virDomainObjIsActive(obj)) {
-        if (virDomainSaveStatus(caps, cfg->stateDir, obj) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, obj) < 0)
             VIR_WARN("Failed to save status on vm %s", obj->def->name);
     }
 
-cleanup:
     virObjectUnref(cfg);
-    virObjectUnref(caps);
 }
 
 void
@@ -1782,22 +1777,17 @@ qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     if (priv->fakeReboot == value)
         goto cleanup;
 
     priv->fakeReboot = value;
 
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("Failed to save status on vm %s", vm->def->name);
 
 cleanup:
     virObjectUnref(cfg);
-    virObjectUnref(caps);
 }
 
 int
index 7dbbaff4eba263588881aa92c3c3b7a0763a138a..3a12b45f791790f8d21b80a89341ce034f0cb3ff 100644 (file)
@@ -180,9 +180,6 @@ void qemuDomainEventFlush(int timer, void *opaque);
 void qemuDomainEventQueue(virQEMUDriverPtr driver,
                           virDomainEventPtr event);
 
-void qemuDomainSetPrivateDataHooks(virCapsPtr caps);
-void qemuDomainSetNamespaceHooks(virCapsPtr caps);
-
 int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
                           virDomainObjPtr obj,
                           enum qemuDomainJob job)
@@ -340,4 +337,7 @@ void qemuDomainCleanupRemove(virDomainObjPtr vm,
 void qemuDomainCleanupRun(virQEMUDriverPtr driver,
                           virDomainObjPtr vm);
 
+extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
+extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
+
 #endif /* __QEMU_DOMAIN_H__ */
index 7ca3e4c6965c2b67c993c8ba373fcc62aa5547ae..de53a1babcf2919f705a4f669c63cc5002fd7a05 100644 (file)
@@ -441,6 +441,7 @@ qemuDomainSnapshotLoad(virDomainObjPtr vm,
         }
 
         def = virDomainSnapshotDefParseString(xmlStr, caps,
+                                              qemu_driver->xmlconf,
                                               QEMU_EXPECTED_VIRT_TYPES,
                                               flags);
         if (def == NULL) {
@@ -722,6 +723,9 @@ qemuStartup(bool privileged,
     if ((qemu_driver->caps = virQEMUDriverCreateCapabilities(qemu_driver)) == NULL)
         goto error;
 
+    if (!(qemu_driver->xmlconf = virQEMUDriverCreateXMLConf()))
+        goto error;
+
     /* If hugetlbfs is present, then we need to create a sub-directory within
      * it, since we can't assume the root mount point has permissions that
      * will let our spawned QEMU instances use it.
@@ -763,6 +767,7 @@ qemuStartup(bool privileged,
     /* Get all the running persistent or transient configs first */
     if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                        qemu_driver->caps,
+                                       qemu_driver->xmlconf,
                                        cfg->stateDir,
                                        NULL,
                                        1, QEMU_EXPECTED_VIRT_TYPES,
@@ -787,6 +792,7 @@ qemuStartup(bool privileged,
     /* Then inactive persistent configs */
     if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                        qemu_driver->caps,
+                                       qemu_driver->xmlconf,
                                        cfg->configDir,
                                        cfg->autostartDir,
                                        0, QEMU_EXPECTED_VIRT_TYPES,
@@ -860,6 +866,7 @@ qemuReload(void) {
     cfg = virQEMUDriverGetConfig(qemu_driver);
     virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                    caps,
+                                   qemu_driver->xmlconf,
                                    cfg->configDir,
                                    cfg->autostartDir,
                                    0, QEMU_EXPECTED_VIRT_TYPES,
@@ -953,6 +960,8 @@ qemuShutdown(void) {
     virObjectUnref(qemu_driver->domains);
     virObjectUnref(qemu_driver->remotePorts);
 
+    virObjectUnref(qemu_driver->xmlconf);
+
     virSysinfoDefFree(qemu_driver->hostsysinfo);
 
     virObjectUnref(qemu_driver->closeCallbacks);
@@ -1474,7 +1483,7 @@ static virDomainPtr qemuDomainCreate(virConnectPtr conn, const char *xml,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -1492,7 +1501,7 @@ static virDomainPtr qemuDomainCreate(virConnectPtr conn, const char *xml,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1560,7 +1569,6 @@ static int qemuDomainSuspend(virDomainPtr dom) {
     int eventDetail;
     int state;
     virQEMUDriverConfigPtr cfg = NULL;
-    virCapsPtr caps = NULL;
 
     vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
 
@@ -1616,9 +1624,7 @@ static int qemuDomainSuspend(virDomainPtr dom) {
                                              eventDetail);
         }
     }
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto endjob;
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto endjob;
     ret = 0;
 
@@ -1632,7 +1638,6 @@ cleanup:
 
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return ret;
 }
@@ -1688,7 +1693,7 @@ static int qemuDomainResume(virDomainPtr dom) {
     }
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto endjob;
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto endjob;
     ret = 0;
 
@@ -2086,7 +2091,7 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
 
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto endjob;
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;
 
@@ -2847,7 +2852,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
     if (xmlin) {
         virDomainDefPtr def = NULL;
 
-        if (!(def = virDomainDefParseString(caps, xmlin,
+        if (!(def = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                             QEMU_EXPECTED_VIRT_TYPES,
                                             VIR_DOMAIN_XML_INACTIVE))) {
             goto endjob;
@@ -3761,7 +3766,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
     maximum = (flags & VIR_DOMAIN_VCPU_MAXIMUM) != 0;
     flags &= ~VIR_DOMAIN_VCPU_MAXIMUM;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;
 
@@ -3867,7 +3872,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -3958,7 +3963,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
         if (newVcpuPin)
             virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             goto cleanup;
     }
 
@@ -4047,7 +4052,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &targetDef) < 0)
         goto cleanup;
 
@@ -4143,7 +4148,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -4224,7 +4229,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
             goto cleanup;
         }
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             goto cleanup;
     }
 
@@ -4289,8 +4294,8 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
-                                        &targetDef) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf,
+                                        vm, &flags, &targetDef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_LIVE)
@@ -4446,7 +4451,8 @@ qemuDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags, &def) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf,
+                                        vm, &flags, &def) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_LIVE) {
@@ -4758,14 +4764,14 @@ qemuDomainSaveImageOpen(virQEMUDriverPtr driver,
         header.was_running = state;
 
     /* Create a domain from this XML */
-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto error;
     if (xmlin) {
         virDomainDefPtr def2 = NULL;
 
-        if (!(def2 = virDomainDefParseString(caps, xmlin,
+        if (!(def2 = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                              QEMU_EXPECTED_VIRT_TYPES,
                                              VIR_DOMAIN_XML_INACTIVE)))
             goto error;
@@ -4810,10 +4816,6 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
     virCommandPtr cmd = NULL;
     char *errbuf = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     if ((header->version == 2) &&
         (header->compressed != QEMU_SAVE_FORMAT_RAW)) {
@@ -4885,7 +4887,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
                                "%s", _("failed to resume domain"));
             goto cleanup;
         }
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto cleanup;
         }
@@ -4907,7 +4909,6 @@ cleanup:
     if (virSecurityManagerRestoreSavedStateLabel(driver->securityManager,
                                                  vm->def, path) < 0)
         VIR_WARN("failed to restore save state label on %s", path);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return ret;
 }
@@ -4926,7 +4927,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
     virQEMUSaveHeader header;
     virFileWrapperFdPtr wrapperFd = NULL;
     int state = -1;
-    virCapsPtr caps = NULL;
 
     virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
                   VIR_DOMAIN_SAVE_RUNNING |
@@ -4938,9 +4938,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
     else if (flags & VIR_DOMAIN_SAVE_PAUSED)
         state = 0;
 
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     fd = qemuDomainSaveImageOpen(driver, path, &def, &header,
                                  (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) != 0,
                                  &wrapperFd, dxml, state, false, false);
@@ -4948,7 +4945,7 @@ qemuDomainRestoreFlags(virConnectPtr conn,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -4977,7 +4974,6 @@ cleanup:
     virFileWrapperFdFree(wrapperFd);
     if (vm)
         virObjectUnlock(vm);
-    virObjectUnref(caps);
     return ret;
 }
 
@@ -5230,7 +5226,7 @@ static char *qemuDomainXMLFromNative(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    def = qemuParseCommandLineString(caps, config,
+    def = qemuParseCommandLineString(caps, driver->xmlconf, config,
                                      NULL, NULL, NULL);
     if (!def)
         goto cleanup;
@@ -5278,7 +5274,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    def = virDomainDefParseString(caps, xmlData,
+    def = virDomainDefParseString(caps, driver->xmlconf, xmlData,
                                   QEMU_EXPECTED_VIRT_TYPES, 0);
     if (!def)
         goto cleanup;
@@ -5549,7 +5545,7 @@ static virDomainPtr qemuDomainDefine(virConnectPtr conn, const char *xml) {
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -5567,7 +5563,7 @@ static virDomainPtr qemuDomainDefine(virConnectPtr conn, const char *xml) {
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    0,
                                    &oldDef)))
@@ -6488,7 +6484,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
             goto endjob;
 
         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(caps, driver->xmlconf, vm);
         if (!vmdef)
             goto endjob;
         switch (action) {
@@ -6539,7 +6535,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * changed even if we failed to attach the device. For example,
          * a new controller may be created.
          */
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             ret = -1;
             goto endjob;
         }
@@ -6916,7 +6912,7 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7081,7 +7077,7 @@ qemuDomainGetBlkioParameters(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7270,7 +7266,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7400,7 +7396,7 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7566,7 +7562,7 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7719,7 +7715,7 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -7929,13 +7925,13 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &vmdef) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(caps, driver->xmlconf, vm);
         if (!vmdef)
             goto cleanup;
     }
@@ -8030,7 +8026,7 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
         }
     }
 
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;
 
 
@@ -8215,7 +8211,7 @@ qemuGetSchedulerParametersFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -8745,7 +8741,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -8911,7 +8907,7 @@ qemuDomainGetInterfaceParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -11216,10 +11212,6 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
     bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
     virCgroupPtr cgroup = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     if (!virDomainObjIsActive(vm)) {
         virReportError(VIR_ERR_OPERATION_INVALID,
@@ -11314,11 +11306,10 @@ cleanup:
     virCgroupFree(&cgroup);
 
     if (ret == 0 || !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION)) {
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0 ||
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0 ||
             (persist && virDomainSaveConfig(cfg->configDir, vm->newDef) < 0))
             ret = -1;
     }
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 
     return ret;
@@ -11583,7 +11574,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
         !virDomainObjIsActive(vm))
         parse_flags |= VIR_DOMAIN_SNAPSHOT_PARSE_OFFLINE;
 
-    if (!(def = virDomainSnapshotDefParseString(xmlDesc, caps,
+    if (!(def = virDomainSnapshotDefParseString(xmlDesc, caps, driver->xmlconf,
                                                 QEMU_EXPECTED_VIRT_TYPES,
                                                 parse_flags)))
         goto cleanup;
@@ -11759,7 +11750,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
         /* Easiest way to clone inactive portion of vm->def is via
          * conversion in and back out of xml.  */
         if (!(xml = qemuDomainDefFormatLive(driver, vm->def, true, true)) ||
-            !(def->dom = virDomainDefParseString(caps, xml,
+            !(def->dom = virDomainDefParseString(caps, driver->xmlconf, xml,
                                                  QEMU_EXPECTED_VIRT_TYPES,
                                                  VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
@@ -12330,7 +12321,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
      * than inactive xml?  */
     snap->def->current = true;
     if (snap->def->dom) {
-        config = virDomainDefCopy(caps, snap->def->dom, true);
+        config = virDomainDefCopy(caps, driver->xmlconf, snap->def->dom, true);
         if (!config)
             goto cleanup;
     }
@@ -12790,7 +12781,7 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (!(def = qemuParseCommandLinePid(caps, pid,
+    if (!(def = qemuParseCommandLinePid(caps, driver->xmlconf, pid,
                                         &pidfile, &monConfig, &monJSON)))
         goto cleanup;
 
@@ -12824,7 +12815,7 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -13904,7 +13895,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;
 
@@ -14064,7 +14055,7 @@ qemuDomainGetBlockIoTune(virDomainPtr dom,
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;
 
@@ -14253,7 +14244,7 @@ qemuDomainSetMetadata(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;
 
@@ -14350,7 +14341,7 @@ qemuDomainGetMetadata(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags, &def) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags, &def) < 0)
         goto cleanup;
 
     /* use correct domain definition according to flags */
index 4c6d7e17d3e65717ee9db8eda1af6fc12a381208..537b8340d8ed064889bfbf372cf9ade56ca2489c 100644 (file)
@@ -919,7 +919,8 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig,
                            n);
             goto error;
         }
-        mig->persistent = virDomainDefParseNode(caps, doc, nodes[0],
+        mig->persistent = virDomainDefParseNode(caps, driver->xmlconf,
+                                                doc, nodes[0],
                                                 -1, VIR_DOMAIN_XML_INACTIVE);
         if (!mig->persistent) {
             /* virDomainDefParseNode already reported
@@ -1923,7 +1924,7 @@ char *qemuMigrationBegin(virQEMUDriverPtr driver,
     }
 
     if (xmlin) {
-        if (!(def = virDomainDefParseString(caps, xmlin,
+        if (!(def = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                             QEMU_EXPECTED_VIRT_TYPES,
                                             VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
@@ -2025,7 +2026,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (!(def = virDomainDefParseString(caps, dom_xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, dom_xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -2066,7 +2067,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
                 virDomainDefPtr newdef;
 
                 VIR_DEBUG("Using hook-filtered domain XML: %s", xmlout);
-                newdef = virDomainDefParseString(caps, xmlout,
+                newdef = virDomainDefParseString(caps, driver->xmlconf, xmlout,
                                                  QEMU_EXPECTED_VIRT_TYPES,
                                                  VIR_DOMAIN_XML_INACTIVE);
                 if (!newdef)
@@ -2084,7 +2085,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
     }
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -3883,7 +3884,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
             if (mig->persistent)
                 vm->newDef = vmdef = mig->persistent;
             else
-                vmdef = virDomainObjGetPersistentDef(caps, vm);
+                vmdef = virDomainObjGetPersistentDef(caps, driver->xmlconf, vm);
             if (!vmdef || virDomainSaveConfig(cfg->configDir, vmdef) < 0) {
                 /* Hmpf.  Migration was successful, but making it persistent
                  * was not.  If we report successful, then when this domain
@@ -3978,7 +3979,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
         }
 
         if (virDomainObjIsActive(vm) &&
-            virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+            virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto endjob;
         }
@@ -4035,7 +4036,6 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,
     virDomainEventPtr event = NULL;
     int rv = -1;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
 
     VIR_DEBUG("driver=%p, conn=%p, vm=%p, cookiein=%s, cookieinlen=%d, "
               "flags=%x, retcode=%d",
@@ -4044,9 +4044,6 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,
 
     virCheckFlags(QEMU_MIGRATION_FLAGS, -1);
 
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     qemuMigrationJobSetPhase(driver, vm,
                              retcode == 0
                              ? QEMU_MIGRATION_PHASE_CONFIRM3
@@ -4090,7 +4087,7 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,
         event = virDomainEventNewFromObj(vm,
                                          VIR_DOMAIN_EVENT_RESUMED,
                                          VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto cleanup;
         }
@@ -4103,7 +4100,6 @@ done:
 cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return rv;
 }
index efb12985b514df9affb582a4a8e8e92868644c26..244e4d72e17a08ac0ef48d4cf5ea06175e23922c 100644 (file)
@@ -641,13 +641,9 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     qemuDomainObjPrivatePtr priv;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
 
     VIR_DEBUG("vm=%p", vm);
 
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     virObjectLock(vm);
 
     priv = vm->privateData;
@@ -671,7 +667,7 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_SHUTDOWN,
                                      VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED);
 
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
         VIR_WARN("Unable to save status on vm %s after state change",
                  vm->def->name);
     }
@@ -683,10 +679,8 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
 unlock:
     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 
     return 0;
@@ -700,10 +694,6 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
@@ -727,7 +717,7 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after state change",
                      vm->def->name);
         }
@@ -735,11 +725,8 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
 unlock:
     virObjectUnlock(vm);
-
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 
     return 0;
@@ -753,10 +740,6 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
@@ -787,7 +770,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
         }
         VIR_FREE(priv->lockState);
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after state change",
                      vm->def->name);
         }
@@ -795,10 +778,8 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
 unlock:
     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -812,10 +793,6 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     event = virDomainEventRTCChangeNewFromObj(vm, offset);
@@ -823,15 +800,13 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     if (vm->def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE)
         vm->def->clock.data.variable.adjustment = offset;
 
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("unable to save domain status with RTC change");
 
     virObjectUnlock(vm);
 
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -846,10 +821,6 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr watchdogEvent = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     watchdogEvent = virDomainEventWatchdogNewFromObj(vm, action);
@@ -869,7 +840,7 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after watchdog event",
                      vm->def->name);
         }
@@ -896,14 +867,11 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
     if (vm)
         virObjectUnlock(vm);
-
-cleanup:
     if (watchdogEvent)
         qemuDomainEventQueue(driver, watchdogEvent);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
 
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -924,10 +892,6 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     const char *devAlias;
     virDomainDiskDefPtr disk;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
@@ -958,19 +922,17 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             VIR_WARN("Unable to save status on vm %s after IO error", vm->def->name);
     }
     virObjectUnlock(vm);
 
-cleanup:
     if (ioErrorEvent)
         qemuDomainEventQueue(driver, ioErrorEvent);
     if (ioErrorEvent2)
         qemuDomainEventQueue(driver, ioErrorEvent2);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1121,10 +1083,6 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainDiskDefPtr disk;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     disk = qemuProcessFindDomainDiskByAlias(vm, devAlias);
@@ -1139,17 +1097,15 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
         else if (reason == VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE)
             disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after tray moved event",
                      vm->def->name);
         }
     }
 
     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1162,10 +1118,6 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     event = virDomainEventPMWakeupNewFromObj(vm);
@@ -1183,20 +1135,17 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                                   VIR_DOMAIN_EVENT_STARTED,
                                                   VIR_DOMAIN_EVENT_STARTED_WAKEUP);
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after wakeup event",
                      vm->def->name);
         }
     }
 
     virObjectUnlock(vm);
-
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1209,10 +1158,6 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     event = virDomainEventPMSuspendNewFromObj(vm);
@@ -1229,7 +1174,7 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY);
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after suspend event",
                      vm->def->name);
         }
@@ -1240,12 +1185,10 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
     virObjectUnlock(vm);
 
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1258,10 +1201,6 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     event = virDomainEventBalloonChangeNewFromObj(vm, actual);
@@ -1270,15 +1209,13 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
               vm->def->mem.cur_balloon, actual);
     vm->def->mem.cur_balloon = actual;
 
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("unable to save domain status with balloon change");
 
     virObjectUnlock(vm);
 
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1291,10 +1228,6 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
 
     virObjectLock(vm);
     event = virDomainEventPMSuspendDiskNewFromObj(vm);
@@ -1311,7 +1244,7 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED_DISK);
 
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after suspend event",
                      vm->def->name);
         }
@@ -1322,12 +1255,10 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 
     virObjectUnlock(vm);
 
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 
     return 0;
@@ -3179,7 +3110,6 @@ qemuProcessReconnect(void *opaque)
     int state;
     int reason;
     virQEMUDriverConfigPtr cfg;
-    virCapsPtr caps = NULL;
     size_t i;
 
     memcpy(&oldjob, &data->oldjob, sizeof(oldjob));
@@ -3200,9 +3130,6 @@ qemuProcessReconnect(void *opaque)
      * deleted if qemuConnectMonitor() failed */
     virObjectRef(obj);
 
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto error;
-
     /* XXX check PID liveliness & EXE path */
     if (qemuConnectMonitor(driver, obj) < 0)
         goto error;
@@ -3282,7 +3209,7 @@ qemuProcessReconnect(void *opaque)
         goto error;
 
     /* update domain state XML with possibly updated state in virDomainObj */
-    if (virDomainSaveStatus(caps, cfg->stateDir, obj) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, obj) < 0)
         goto error;
 
     /* Run an hook to allow admins to do some magic */
@@ -3314,7 +3241,6 @@ endjob:
 
     virConnectClose(conn);
     virObjectUnref(cfg);
-    virObjectUnref(caps);
 
     return;
 
@@ -3352,7 +3278,6 @@ error:
         }
     }
     virConnectClose(conn);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 }
 
@@ -3539,7 +3464,7 @@ int qemuProcessStart(virConnectPtr conn,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(caps, vm, true) < 0)
+    if (virDomainObjSetDefTransient(caps, driver->xmlconf, vm, true) < 0)
         goto cleanup;
 
     vm->def->id = qemuDriverAllocateID(driver);
@@ -3888,7 +3813,7 @@ int qemuProcessStart(virConnectPtr conn,
     }
 
     VIR_DEBUG("Writing early domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
         goto cleanup;
     }
 
@@ -4039,7 +3964,7 @@ int qemuProcessStart(virConnectPtr conn,
         goto cleanup;
 
     VIR_DEBUG("Writing domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;
 
     /* finally we can call the 'started' hook script if any */
@@ -4394,7 +4319,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(caps, vm, true) < 0)
+    if (virDomainObjSetDefTransient(caps, driver->xmlconf, vm, true) < 0)
         goto cleanup;
 
     vm->def->id = qemuDriverAllocateID(driver);
@@ -4538,7 +4463,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
         virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
 
     VIR_DEBUG("Writing domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;
 
     /* Run an hook to allow admins to do some magic */
index 8ce1f538f2e16a1f132de4c76472392631b7b03e..c1a3ec9b072d8a05903cbd99ba7ae67f5285a123 100644 (file)
@@ -71,6 +71,7 @@ typedef struct {
     char *files;                /* list of files */
     virDomainDefPtr def;        /* VM definition */
     virCapsPtr caps;            /* VM capabilities */
+    virDomainXMLConfPtr xmlconf;/* XML parser data */
     char *hvm;                  /* type of hypervisor (eg hvm, xen) */
     virArch arch;               /* machine architecture */
     char *newfile;              /* newly added file */
@@ -85,6 +86,7 @@ vahDeinit(vahControl * ctl)
 
     VIR_FREE(ctl->def);
     virObjectUnref(ctl->caps);
+    virObjectUnref(ctl->xmlconf);
     VIR_FREE(ctl->files);
     VIR_FREE(ctl->hvm);
     VIR_FREE(ctl->newfile);
@@ -709,6 +711,11 @@ get_definition(vahControl * ctl, const char *xmlStr)
         goto exit;
     }
 
+    if (!(ctl->xmlconf = virDomainXMLConfNew(NULL, NULL))) {
+        vah_error(ctl, 0, _("Failed to create XML config object"));
+        goto exit;
+    }
+
     ctl->caps->defaultConsoleTargetType = aaDefaultConsoleType;
 
     if ((guest = virCapabilitiesAddGuest(ctl->caps,
@@ -722,7 +729,8 @@ get_definition(vahControl * ctl, const char *xmlStr)
         goto exit;
     }
 
-    ctl->def = virDomainDefParseString(ctl->caps, xmlStr, -1,
+    ctl->def = virDomainDefParseString(ctl->caps, ctl->xmlconf,
+                                       xmlStr, -1,
                                        VIR_DOMAIN_XML_INACTIVE);
     if (ctl->def == NULL) {
         vah_error(ctl, 0, _("could not parse XML"));
index 0037a6fbffe40470fabef01ed0dc7d85369ff6d9..c5fffb917a948a917a2e396a8fef72198e4fd707 100644 (file)
@@ -82,6 +82,7 @@ struct _testConn {
     char *path;
     int nextDomID;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     virNodeInfo nodeInfo;
     virDomainObjListPtr domains;
     virNetworkObjList networks;
@@ -155,6 +156,16 @@ static int testDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
     return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
 }
 
+
+static virDomainXMLConfPtr
+testBuildXMLConfig(void)
+{
+    virDomainXMLPrivateDataCallbacks priv = { .alloc = testDomainObjPrivateAlloc,
+                                              .free = testDomainObjPrivateFree };
+    return virDomainXMLConfNew(&priv, NULL);
+}
+
+
 static virCapsPtr
 testBuildCapabilities(virConnectPtr conn) {
     testConnPtr privconn = conn->privateData;
@@ -212,9 +223,6 @@ testBuildCapabilities(virConnectPtr conn) {
             goto no_memory;
     }
 
-    caps->privateDataAllocFunc = testDomainObjPrivateAlloc;
-    caps->privateDataFreeFunc = testDomainObjPrivateFree;
-
     caps->host.nsecModels = 1;
     if (VIR_ALLOC_N(caps->host.secModels, caps->host.nsecModels) < 0)
         goto no_memory;
@@ -507,7 +515,9 @@ testDomainStartState(virConnectPtr conn,
     virDomainObjSetState(dom, VIR_DOMAIN_RUNNING, reason);
     dom->def->id = privconn->nextDomID++;
 
-    if (virDomainObjSetDefTransient(privconn->caps, dom, false) < 0) {
+    if (virDomainObjSetDefTransient(privconn->caps,
+                                    privconn->xmlconf,
+                                    dom, false) < 0) {
         goto cleanup;
     }
 
@@ -573,9 +583,14 @@ static int testOpenDefault(virConnectPtr conn) {
     if (!(privconn->caps = testBuildCapabilities(conn)))
         goto error;
 
+    if (!(privconn->xmlconf = testBuildXMLConfig()))
+        goto error;
+
     privconn->nextDomID = 1;
 
-    if (!(domdef = virDomainDefParseString(privconn->caps, defaultDomainXML,
+    if (!(domdef = virDomainDefParseString(privconn->caps,
+                                           privconn->xmlconf,
+                                           defaultDomainXML,
                                            1 << VIR_DOMAIN_VIRT_TEST,
                                            VIR_DOMAIN_XML_INACTIVE)))
         goto error;
@@ -583,7 +598,7 @@ static int testOpenDefault(virConnectPtr conn) {
     if (testDomainGenerateIfnames(domdef) < 0)
         goto error;
     if (!(domobj = virDomainObjListAdd(privconn->domains,
-                                       privconn->caps,
+                                       privconn->xmlconf,
                                        domdef, 0, NULL)))
         goto error;
     domdef = NULL;
@@ -802,6 +817,9 @@ static int testOpenFromFile(virConnectPtr conn,
     if (!(privconn->caps = testBuildCapabilities(conn)))
         goto error;
 
+    if (!(privconn->xmlconf = testBuildXMLConfig()))
+        goto error;
+
     if (!(xml = virXMLParseFileCtxt(file, &ctxt))) {
         goto error;
     }
@@ -913,14 +931,16 @@ static int testOpenFromFile(virConnectPtr conn,
                                _("resolving domain filename"));
                 goto error;
             }
-            def = virDomainDefParseFile(privconn->caps, absFile,
+            def = virDomainDefParseFile(privconn->caps,
+                                        privconn->xmlconf, absFile,
                                         1 << VIR_DOMAIN_VIRT_TEST,
                                         VIR_DOMAIN_XML_INACTIVE);
             VIR_FREE(absFile);
             if (!def)
                 goto error;
         } else {
-            if ((def = virDomainDefParseNode(privconn->caps, xml, domains[i],
+            if ((def = virDomainDefParseNode(privconn->caps, privconn->xmlconf,
+                                             xml, domains[i],
                                              1 << VIR_DOMAIN_VIRT_TEST,
                                              VIR_DOMAIN_XML_INACTIVE)) == NULL)
                 goto error;
@@ -928,7 +948,7 @@ static int testOpenFromFile(virConnectPtr conn,
 
         if (testDomainGenerateIfnames(def) < 0 ||
             !(dom = virDomainObjListAdd(privconn->domains,
-                                        privconn->caps,
+                                        privconn->xmlconf,
                                         def, 0, NULL))) {
             virDomainDefFree(def);
             goto error;
@@ -1184,6 +1204,7 @@ static int testClose(virConnectPtr conn)
     testConnPtr privconn = conn->privateData;
     testDriverLock(privconn);
     virObjectUnref(privconn->caps);
+    virObjectUnref(privconn->xmlconf);
     virObjectUnref(privconn->domains);
     virNodeDeviceObjListFree(&privconn->devs);
     virNetworkObjListFree(&privconn->networks);
@@ -1321,15 +1342,15 @@ testDomainCreateXML(virConnectPtr conn, const char *xml,
     virCheckFlags(0, NULL);
 
     testDriverLock(privconn);
-    if ((def = virDomainDefParseString(privconn->caps, xml,
-                                       1 << VIR_DOMAIN_VIRT_TEST,
+    if ((def = virDomainDefParseString(privconn->caps, privconn->xmlconf,
+                                       xml, 1 << VIR_DOMAIN_VIRT_TEST,
                                        VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    privconn->caps,
+                                    privconn->xmlconf,
                                     def,
                                     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                     NULL)))
@@ -1936,8 +1957,8 @@ testDomainRestoreFlags(virConnectPtr conn,
     }
     xml[len] = '\0';
 
-    def = virDomainDefParseString(privconn->caps, xml,
-                                  1 << VIR_DOMAIN_VIRT_TEST,
+    def = virDomainDefParseString(privconn->caps, privconn->xmlconf,
+                                  xml, 1 << VIR_DOMAIN_VIRT_TEST,
                                   VIR_DOMAIN_XML_INACTIVE);
     if (!def)
         goto cleanup;
@@ -1945,7 +1966,7 @@ testDomainRestoreFlags(virConnectPtr conn,
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    privconn->caps,
+                                    privconn->xmlconf,
                                     def,
                                     VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -2155,7 +2176,8 @@ testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
         goto cleanup;
     }
 
-    if (virDomainLiveConfigHelperMethod(privconn->caps, vm, &flags, &def) < 0)
+    if (virDomainLiveConfigHelperMethod(privconn->caps, privconn->xmlconf,
+                                        vm, &flags, &def) < 0)
         goto cleanup;
 
     if (flags & VIR_DOMAIN_AFFECT_LIVE)
@@ -2233,6 +2255,7 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
     }
 
     if (!(persistentDef = virDomainObjGetPersistentDef(privconn->caps,
+                                                       privconn->xmlconf,
                                                        privdom)))
         goto cleanup;
 
@@ -2485,15 +2508,15 @@ static virDomainPtr testDomainDefineXML(virConnectPtr conn,
     virDomainDefPtr oldDef = NULL;
 
     testDriverLock(privconn);
-    if ((def = virDomainDefParseString(privconn->caps, xml,
-                                       1 << VIR_DOMAIN_VIRT_TEST,
+    if ((def = virDomainDefParseString(privconn->caps, privconn->xmlconf,
+                                       xml, 1 << VIR_DOMAIN_VIRT_TEST,
                                        VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    privconn->caps,
+                                    privconn->xmlconf,
                                     def,
                                     0,
                                     &oldDef)))
index ff71b45a0174cd759a79eebf6dccbda78c43b27c..488c1b7116ba0277ed0b9c730c31c28c2ef43631 100644 (file)
@@ -63,6 +63,7 @@ struct uml_driver {
     int inotifyWatch;
 
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 
     /* Event handling */
     virDomainEventStatePtr domainEventState;
index 63a807a9a6fa2f0536a1dc92225ac04898da4c4f..b08212d004dd0128147bcfa11ffedbd27a08e0a7 100644 (file)
@@ -433,6 +433,11 @@ umlStartup(bool privileged,
     char *base = NULL;
     char *userdir = NULL;
 
+    virDomainXMLPrivateDataCallbacks privcb = {
+        .alloc = umlDomainObjPrivateAlloc,
+        .free = umlDomainObjPrivateFree,
+    };
+
     if (VIR_ALLOC(uml_driver) < 0)
         return -1;
 
@@ -500,8 +505,9 @@ umlStartup(bool privileged,
     if ((uml_driver->caps = umlCapsInit()) == NULL)
         goto out_of_memory;
 
-    uml_driver->caps->privateDataAllocFunc = umlDomainObjPrivateAlloc;
-    uml_driver->caps->privateDataFreeFunc = umlDomainObjPrivateFree;
+    if (!(uml_driver->xmlconf = virDomainXMLConfNew(&privcb,
+                                                    NULL)))
+        goto error;
 
     if ((uml_driver->inotifyFD = inotify_init()) < 0) {
         VIR_ERROR(_("cannot initialize inotify"));
@@ -537,6 +543,7 @@ umlStartup(bool privileged,
 
     if (virDomainObjListLoadAllConfigs(uml_driver->domains,
                                        uml_driver->caps,
+                                       uml_driver->xmlconf,
                                        uml_driver->configDir,
                                        uml_driver->autostartDir,
                                        0, 1 << VIR_DOMAIN_VIRT_UML,
@@ -592,6 +599,7 @@ umlReload(void) {
     umlDriverLock(uml_driver);
     virDomainObjListLoadAllConfigs(uml_driver->domains,
                                    uml_driver->caps,
+                                   uml_driver->xmlconf,
                                    uml_driver->configDir,
                                    uml_driver->autostartDir,
                                    0, 1 << VIR_DOMAIN_VIRT_UML,
@@ -1055,7 +1063,8 @@ static int umlStartVMDaemon(virConnectPtr conn,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0) {
+    if (virDomainObjSetDefTransient(driver->caps, driver->xmlconf,
+                                    vm, true) < 0) {
         VIR_FORCE_CLOSE(logfd);
         return -1;
     }
@@ -1088,7 +1097,7 @@ static int umlStartVMDaemon(virConnectPtr conn,
         (ret = umlProcessAutoDestroyAdd(driver, vm, conn)) < 0)
         goto cleanup;
 
-    ret = virDomainObjSetDefTransient(driver->caps, vm, false);
+    ret = virDomainObjSetDefTransient(driver->caps, driver->xmlconf, vm, false);
 cleanup:
     VIR_FORCE_CLOSE(logfd);
     virCommandFree(cmd);
@@ -1495,13 +1504,13 @@ static virDomainPtr umlDomainCreate(virConnectPtr conn, const char *xml,
     virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, NULL);
 
     umlDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_UML,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_UML,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1916,13 +1925,13 @@ static virDomainPtr umlDomainDefine(virConnectPtr conn, const char *xml) {
     virDomainPtr dom = NULL;
 
     umlDriverLock(driver);
-    if (!(def = virDomainDefParseString(driver->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_UML,
+    if (!(def = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_UML,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    def,
                                    0, NULL)))
         goto cleanup;
index cd88579d6ee99c17c9820fea451c4f80a1178b2f..aa7466bc6a8f26db7c524d10f101645315075f75 100644 (file)
@@ -193,6 +193,7 @@ typedef struct {
     unsigned long version;
 
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 
     IVirtualBox *vboxObj;
     ISession *vboxSession;
@@ -850,6 +851,13 @@ static int vboxDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
 }
 
 
+static virDomainXMLConfPtr
+vboxXMLConfInit(void)
+{
+    return virDomainXMLConfNew(NULL, NULL);
+}
+
+
 static virCapsPtr vboxCapsInit(void)
 {
     virCapsPtr caps;
@@ -978,6 +986,7 @@ static void vboxUninitialize(vboxGlobalData *data) {
         data->pFuncs->pfnComUninitialize();
 
     virObjectUnref(data->caps);
+    virObjectUnref(data->xmlconf);
 #if VBOX_API_VERSION == 2002
     /* No domainEventCallbacks in 2.2.* version */
 #else  /* !(VBOX_API_VERSION == 2002) */
@@ -1036,7 +1045,8 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn,
 
     if (!(data->caps = vboxCapsInit()) ||
         vboxInitialize(data) < 0 ||
-        vboxExtractVersion(data) < 0) {
+        vboxExtractVersion(data) < 0 ||
+        !(data->xmlconf = vboxXMLConfInit())) {
         vboxUninitialize(data);
         return VIR_DRV_OPEN_ERROR;
     }
@@ -5042,8 +5052,8 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
 #endif
     nsresult rc;
 
-    if (!(def = virDomainDefParseString(data->caps, xml,
-                                        1 << VIR_DOMAIN_VIRT_VBOX,
+    if (!(def = virDomainDefParseString(data->caps, data->xmlconf,
+                                        xml, 1 << VIR_DOMAIN_VIRT_VBOX,
                                         VIR_DOMAIN_XML_INACTIVE))) {
         goto cleanup;
     }
@@ -5921,7 +5931,8 @@ vboxDomainSnapshotCreateXML(virDomainPtr dom,
     /* VBox has no snapshot metadata, so this flag is trivial.  */
     virCheckFlags(VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA, NULL);
 
-    if (!(def = virDomainSnapshotDefParseString(xmlDesc, NULL, 0, 0)))
+    if (!(def = virDomainSnapshotDefParseString(xmlDesc, data->caps,
+                                                data->xmlconf, 0, 0)))
         goto cleanup;
 
     if (def->ndisks) {
index a17b2e1cb97558b02f22f2ea25f47f5ef1ea5a78..19be62ae0f1c3102948e254abec15edf9c375dbd 100644 (file)
@@ -45,6 +45,7 @@ vmwareFreeDriver(struct vmware_driver *driver)
     virMutexDestroy(&driver->lock);
     virObjectUnref(driver->domains);
     virObjectUnref(driver->caps);
+    virObjectUnref(driver->xmlconf);
     VIR_FREE(driver);
 }
 
@@ -178,7 +179,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
         }
 
         if (!(vm = virDomainObjListAdd(driver->domains,
-                                       driver->caps,
+                                       driver->xmlconf,
                                        vmdef, 0, NULL)))
             goto cleanup;
 
index 6ab985e3aa13fe11dc19c01466c98ebd3d09abf9..b3ec96623e3060e598edb56fd1a082b22d9c7c4c 100644 (file)
@@ -36,6 +36,7 @@
 struct vmware_driver {
     virMutex lock;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 
     virDomainObjListPtr domains;
     int version;
index b7905fa57ef265cdbbabbe6458dd96ca7dda9d4d..6d82532d5b7e1b7fc5e907f83bc4341b2e61bea6 100644 (file)
@@ -72,6 +72,15 @@ vmwareDataFreeFunc(void *data)
     VIR_FREE(dom);
 }
 
+static virDomainXMLConfPtr
+vmwareDomainXMLConfigInit(void)
+{
+    virDomainXMLPrivateDataCallbacks priv = { .alloc = vmwareDataAllocFunc,
+                                              .free = vmwareDataFreeFunc };
+
+    return virDomainXMLConfNew(&priv, NULL);
+}
+
 static virDrvOpenStatus
 vmwareOpen(virConnectPtr conn,
            virConnectAuthPtr auth ATTRIBUTE_UNUSED,
@@ -134,8 +143,8 @@ vmwareOpen(virConnectPtr conn,
     if (!(driver->caps = vmwareCapsInit()))
         goto cleanup;
 
-    driver->caps->privateDataAllocFunc = vmwareDataAllocFunc;
-    driver->caps->privateDataFreeFunc = vmwareDataFreeFunc;
+    if (!(driver->xmlconf = vmwareDomainXMLConfigInit()))
+        goto cleanup;
 
     if (vmwareLoadDomains(driver) < 0)
         goto cleanup;
@@ -315,8 +324,8 @@ vmwareDomainDefineXML(virConnectPtr conn, const char *xml)
     ctx.formatFileName = vmwareCopyVMXFileName;
 
     vmwareDriverLock(driver);
-    if ((vmdef = virDomainDefParseString(driver->caps, xml,
-                                         1 << VIR_DOMAIN_VIRT_VMWARE,
+    if ((vmdef = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                         xml, 1 << VIR_DOMAIN_VIRT_VMWARE,
                                          VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
@@ -337,7 +346,7 @@ vmwareDomainDefineXML(virConnectPtr conn, const char *xml)
 
     /* assign def */
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    vmdef,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -586,8 +595,8 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
 
     vmwareDriverLock(driver);
 
-    if ((vmdef = virDomainDefParseString(driver->caps, xml,
-                                         1 << VIR_DOMAIN_VIRT_VMWARE,
+    if ((vmdef = virDomainDefParseString(driver->caps, driver->xmlconf,
+                                         xml, 1 << VIR_DOMAIN_VIRT_VMWARE,
                                          VIR_DOMAIN_XML_INACTIVE)) == NULL)
         goto cleanup;
 
@@ -608,7 +617,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
 
     /* assign def */
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   driver->caps,
+                                   driver->xmlconf,
                                    vmdef,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
index d8968936d9c45a74f79e1aeb845540dca8994fab..fd20b734541a4f71932d34299032f093ba2a1190 100644 (file)
@@ -401,6 +401,9 @@ xenUnifiedOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
         goto fail;
     }
 
+    if (!(priv->xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        goto fail;
+
 #if WITH_XEN_INOTIFY
     if (xenHavePrivilege()) {
         VIR_DEBUG("Trying Xen inotify sub-driver");
@@ -448,6 +451,7 @@ xenUnifiedClose(virConnectPtr conn)
     int i;
 
     virObjectUnref(priv->caps);
+    virObjectUnref(priv->xmlconf);
     virDomainEventStateFree(priv->domainEvents);
 
     for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
@@ -1430,8 +1434,8 @@ xenUnifiedDomainXMLToNative(virConnectPtr conn,
         goto cleanup;
     }
 
-    if (!(def = virDomainDefParseString(priv->caps, xmlData,
-                                        1 << VIR_DOMAIN_VIRT_XEN, 0)))
+    if (!(def = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                        xmlData, 1 << VIR_DOMAIN_VIRT_XEN, 0)))
         goto cleanup;
 
     if (STREQ(format, XEN_CONFIG_FORMAT_XM)) {
index 078980e3e7b98b95237392eb2d2e1c9277e3f4c4..8e43db3b5e21974cff8e9a09139224de558a123c 100644 (file)
@@ -160,6 +160,7 @@ struct _xenUnifiedPrivate {
      * holding the lock
      */
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
     int handle;                        /* Xen hypervisor handle */
 
     int xendConfigVersion;      /* XenD config version */
index 4995d633f1335adb47cd544bdd855de7417ccc0f..398da0d85a925075f7a43ab81284ff1fba458f4c 100644 (file)
@@ -2409,8 +2409,8 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags)
 
     virCheckFlags(0, NULL);
 
-    if (!(def = virDomainDefParseString(priv->caps, xmlDesc,
-                                        1 << VIR_DOMAIN_VIRT_XEN,
+    if (!(def = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                        xmlDesc, 1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE)))
         return NULL;
 
@@ -3127,8 +3127,8 @@ xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc)
     if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
         return NULL;
 
-    if (!(def = virDomainDefParseString(priv->caps, xmlDesc,
-                                        1 << VIR_DOMAIN_VIRT_XEN,
+    if (!(def = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                        xmlDesc, 1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE))) {
         virReportError(VIR_ERR_XML_ERROR,
                        "%s", _("failed to parse domain description"));
index dfc8bf6994fa4692a4a8dc6b5c48091ccecfddc0..f6a3593229ec2c1d6d292c7f05048fff7279db98 100644 (file)
@@ -1013,7 +1013,7 @@ xenXMDomainDefineXML(virConnectPtr conn, const char *xml)
         return NULL;
     }
 
-    if (!(def = virDomainDefParseString(priv->caps, xml,
+    if (!(def = virDomainDefParseString(priv->caps, priv->xmlconf, xml,
                                         1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE))) {
         xenUnifiedUnlock(priv);
index df7ab3640014d8fc21480580b7f8d58126682868..b368f4887fb425c3848589bf3c1bd7dd9cb9c479 100644 (file)
@@ -169,6 +169,12 @@ xenapiOpen(virConnectPtr conn, virConnectAuthPtr auth,
         goto error;
     }
 
+    if (!(privP->xmlconf = virDomainXMLConfNew(NULL, NULL))) {
+        xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR,
+                                  _("Failed to create XML conf object"));
+        goto error;
+    }
+
     xmlInitParser();
     xmlKeepBlanksDefault(0);
     xen_init();
@@ -208,6 +214,7 @@ xenapiOpen(virConnectPtr conn, virConnectAuthPtr auth,
 
     if (privP != NULL) {
         virObjectUnref(privP->caps);
+        virObjectUnref(privP->xmlconf);
 
         if (privP->session != NULL)
             xenSessionFree(privP->session);
@@ -231,6 +238,7 @@ xenapiClose(virConnectPtr conn)
     struct _xenapiPrivate *priv = conn->privateData;
 
     virObjectUnref(priv->caps);
+    virObjectUnref(priv->xmlconf);
 
     if (priv->session != NULL) {
         xen_session_logout(priv->session);
@@ -425,6 +433,7 @@ xenapiNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
 static char *
 xenapiGetCapabilities(virConnectPtr conn)
 {
+
     virCapsPtr caps = ((struct _xenapiPrivate *)(conn->privateData))->caps;
     if (caps) {
         char *xml = virCapabilitiesFormatXML(caps);
@@ -515,17 +524,17 @@ xenapiDomainCreateXML(virConnectPtr conn,
                       const char *xmlDesc,
                       unsigned int flags)
 {
+    struct _xenapiPrivate *priv = conn->privateData;
     xen_vm_record *record = NULL;
     xen_vm vm = NULL;
     virDomainPtr domP = NULL;
-    xen_session *session = ((struct _xenapiPrivate *)(conn->privateData))->session;
-    virCapsPtr caps = ((struct _xenapiPrivate *)(conn->privateData))->caps;
-    if (!caps)
+    if (!priv->caps)
         return NULL;
 
     virCheckFlags(0, NULL);
 
-    virDomainDefPtr defPtr = virDomainDefParseString(caps, xmlDesc,
+    virDomainDefPtr defPtr = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                                     xmlDesc,
                                                      1 << VIR_DOMAIN_VIRT_XEN,
                                                      flags);
     createVMRecordFromXml(conn, defPtr, &record, &vm);
@@ -534,7 +543,7 @@ xenapiDomainCreateXML(virConnectPtr conn,
         unsigned char raw_uuid[VIR_UUID_BUFLEN];
         ignore_value(virUUIDParse(record->uuid, raw_uuid));
         if (vm) {
-            if (xen_vm_start(session, vm, false, false)) {
+            if (xen_vm_start(priv->session, vm, false, false)) {
                 domP = virGetDomain(conn, record->name_label, raw_uuid);
                 if (!domP) {
                     xen_vm_record_free(record);
@@ -1672,20 +1681,21 @@ xenapiDomainCreate(virDomainPtr dom)
 static virDomainPtr
 xenapiDomainDefineXML(virConnectPtr conn, const char *xml)
 {
+    struct _xenapiPrivate *priv = conn->privateData;
     xen_vm_record *record=NULL;
     xen_vm vm=NULL;
     virDomainPtr domP=NULL;
-    xen_session *session = ((struct _xenapiPrivate *)(conn->privateData))->session;
-    virCapsPtr caps = ((struct _xenapiPrivate *)(conn->privateData))->caps;
-    if (!caps)
+    if (!priv->caps)
         return NULL;
-    virDomainDefPtr defPtr = virDomainDefParseString(caps, xml,
-                                                     1 << VIR_DOMAIN_VIRT_XEN, 0);
+    virDomainDefPtr defPtr = virDomainDefParseString(priv->caps, priv->xmlconf,
+                                                     xml,
+                                                     1 << VIR_DOMAIN_VIRT_XEN,
+                                                     0);
     if (!defPtr)
         return NULL;
 
     if (createVMRecordFromXml(conn, defPtr, &record, &vm) != 0) {
-        if (!session->ok)
+        if (!priv->session->ok)
             xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR, NULL);
         else
             xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR,
@@ -1697,7 +1707,7 @@ xenapiDomainDefineXML(virConnectPtr conn, const char *xml)
         unsigned char raw_uuid[VIR_UUID_BUFLEN];
         ignore_value(virUUIDParse(record->uuid, raw_uuid));
         domP = virGetDomain(conn, record->name_label, raw_uuid);
-        if (!domP && !session->ok)
+        if (!domP && !priv->session->ok)
             xenapiSessionErrorHandler(conn, VIR_ERR_NO_DOMAIN, NULL);
         xen_vm_record_free(record);
     }
index 7e5b6e7c8b6f3fbdf777325ef23d35509eac0969..92c18feed26ece117a73b96e1b54856158abde75 100644 (file)
@@ -58,6 +58,7 @@ struct _xenapiPrivate {
     char *url;
     int noVerify;
     virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 };
 
 #endif /* __VIR_XENAPI_H__ */
index aeea99779587872d0fe2083acbb47d19c231dc61..7d9531034c545393cc958e3dbfee42a2fdfc63da 100644 (file)
@@ -34,6 +34,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *uuid, int internal)
     if (internal)
         flags |= VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL;
     if (!(def = virDomainSnapshotDefParseString(inXmlData, driver.caps,
+                                                driver.xmlconf,
                                                 QEMU_EXPECTED_VIRT_TYPES,
                                                 flags)))
         goto fail;
@@ -90,6 +91,9 @@ mymain(void)
     if ((driver.caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
 
+    if (!(driver.xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
+
 # define DO_TEST(name, uuid, internal)                                  \
     do {                                                                \
         const struct testInfo info = {name, uuid, internal};            \
@@ -113,6 +117,7 @@ mymain(void)
     DO_TEST("external_vm", "c7a5fdbd-edaf-9455-926a-d65c16db1809", 0);
 
     virObjectUnref(driver.caps);
+    virObjectUnref(driver.xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index bfb609292e539a42fb4c94ba95830ff8cbb59ad6..964d4332227668656b2804b88bc0e6b11397de6f 100644 (file)
@@ -16,6 +16,7 @@
 # include "testutilslxc.h"
 
 static virCapsPtr caps;
+static virDomainXMLConfPtr xmlconf;
 
 static int
 testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool live)
@@ -31,7 +32,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool live)
     if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
-    if (!(def = virDomainDefParseString(caps, inXmlData,
+    if (!(def = virDomainDefParseString(caps, xmlconf, inXmlData,
                                         1 << VIR_DOMAIN_VIRT_LXC,
                                         live ? 0 : VIR_DOMAIN_XML_INACTIVE)))
         goto fail;
@@ -101,6 +102,9 @@ mymain(void)
     if ((caps = testLXCCapsInit()) == NULL)
         return EXIT_FAILURE;
 
+    if (!(xmlconf = lxcDomainXMLConfInit()))
+        return EXIT_FAILURE;
+
 # define DO_TEST_FULL(name, is_different, inactive)                     \
     do {                                                                \
         const struct testInfo info = {name, is_different, inactive};    \
@@ -124,6 +128,7 @@ mymain(void)
     DO_TEST("hostdev");
 
     virObjectUnref(caps);
+    virObjectUnref(xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 3c2301056119db6545ccbe455253a2d5f7e37cd2..f7d6019b04902e63e79456e5faef95e9e7f2fb6a 100644 (file)
@@ -46,8 +46,8 @@ static int testCompareXMLToArgvFiles(const char *xml,
     if (virtTestLoadFile(xml, &expectxml) < 0)
         goto fail;
 
-    if (!(vmdef = qemuParseCommandLineString(driver.caps, cmd,
-                                             NULL, NULL, NULL)))
+    if (!(vmdef = qemuParseCommandLineString(driver.caps, driver.xmlconf,
+                                             cmd, NULL, NULL, NULL)))
         goto fail;
 
     if ((log = virtTestLogContentAndReset()) == NULL)
@@ -120,6 +120,9 @@ mymain(void)
     if ((driver.caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
 
+    if (!(driver.xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
+
 # define DO_TEST_FULL(name, extraFlags, migrateFrom)                     \
     do {                                                                \
         const struct testInfo info = { name, extraFlags, migrateFrom }; \
@@ -244,6 +247,7 @@ mymain(void)
 
     virObjectUnref(driver.config);
     virObjectUnref(driver.caps);
+    virObjectUnref(driver.xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 04b8f7702bbfe5609099e1d1d859a8446fe513b6..639eeb1efb33ac05c8692c75ab314bd0d29e8ff7 100644 (file)
@@ -22,6 +22,7 @@
 #include "testutils.h"
 #include "testutilsqemu.h"
 #include "qemumonitortestutils.h"
+#include "qemu/qemu_conf.h"
 #include "virthread.h"
 #include "virerror.h"
 
@@ -31,8 +32,8 @@
 static int
 testQemuMonitorJSONGetStatus(const void *data)
 {
-    virCapsPtr caps = (virCapsPtr)data;
-    qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
+    virDomainXMLConfPtr xmlconf = (virDomainXMLConfPtr)data;
+    qemuMonitorTestPtr test = qemuMonitorTestNew(true, xmlconf);
     int ret = -1;
     bool running = false;
     virDomainPausedReason reason = 0;
@@ -125,8 +126,8 @@ cleanup:
 static int
 testQemuMonitorJSONGetVersion(const void *data)
 {
-    virCapsPtr caps = (virCapsPtr)data;
-    qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
+    virDomainXMLConfPtr xmlconf = (virDomainXMLConfPtr)data;
+    qemuMonitorTestPtr test = qemuMonitorTestNew(true, xmlconf);
     int ret = -1;
     int major;
     int minor;
@@ -228,8 +229,8 @@ cleanup:
 static int
 testQemuMonitorJSONGetMachines(const void *data)
 {
-    virCapsPtr caps = (virCapsPtr)data;
-    qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
+    virDomainXMLConfPtr xmlconf = (virDomainXMLConfPtr)data;
+    qemuMonitorTestPtr test = qemuMonitorTestNew(true, xmlconf);
     int ret = -1;
     qemuMonitorMachineInfoPtr *info;
     int ninfo = 0;
@@ -310,8 +311,8 @@ cleanup:
 static int
 testQemuMonitorJSONGetCPUDefinitions(const void *data)
 {
-    virCapsPtr caps = (virCapsPtr)data;
-    qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
+    virDomainXMLConfPtr xmlconf = (virDomainXMLConfPtr)data;
+    qemuMonitorTestPtr test = qemuMonitorTestNew(true, xmlconf);
     int ret = -1;
     char **cpus = NULL;
     int ncpus = 0;
@@ -376,8 +377,8 @@ cleanup:
 static int
 testQemuMonitorJSONGetCommands(const void *data)
 {
-    virCapsPtr caps = (virCapsPtr)data;
-    qemuMonitorTestPtr test = qemuMonitorTestNew(true, caps);
+    virDomainXMLConfPtr xmlconf = (virDomainXMLConfPtr)data;
+    qemuMonitorTestPtr test = qemuMonitorTestNew(true, xmlconf);
     int ret = -1;
     char **commands = NULL;
     int ncommands = 0;
@@ -442,7 +443,7 @@ static int
 mymain(void)
 {
     int ret = 0;
-    virCapsPtr caps;
+    virDomainXMLConfPtr xmlconf;
 
 #if !WITH_YAJL
     fputs("libvirt not compiled with yajl, skipping this test\n", stderr);
@@ -450,13 +451,13 @@ mymain(void)
 #endif
 
     if (virThreadInitialize() < 0 ||
-        !(caps = testQemuCapsInit()))
+        !(xmlconf = virQEMUDriverCreateXMLConf()))
         return EXIT_FAILURE;
 
     virEventRegisterDefaultImpl();
 
 #define DO_TEST(name) \
-    if (virtTestRun(# name, 1, testQemuMonitorJSON ## name, caps) < 0) \
+    if (virtTestRun(# name, 1, testQemuMonitorJSON ## name, xmlconf) < 0) \
         ret = -1
 
     DO_TEST(GetStatus);
@@ -465,7 +466,7 @@ mymain(void)
     DO_TEST(GetCPUDefinitions);
     DO_TEST(GetCommands);
 
-    virObjectUnref(caps);
+    virObjectUnref(xmlconf);
 
     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 979623a244403a0c3ac7839593cf47ad461fbf48..d5bce84000ff94275ef895a33fee252059ae1739 100644 (file)
@@ -450,7 +450,7 @@ static qemuMonitorCallbacks qemuCallbacks = {
 
 #define QEMU_TEXT_GREETING "QEMU 1.0,1 monitor - type 'help' for more information"
 
-qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
+qemuMonitorTestPtr qemuMonitorTestNew(bool json, virDomainXMLConfPtr xmlconf)
 {
     qemuMonitorTestPtr test = NULL;
     virDomainChrSourceDef src;
@@ -482,7 +482,7 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
         goto no_memory;
 
     test->json = json;
-    if (!(test->vm = virDomainObjNew(caps)))
+    if (!(test->vm = virDomainObjNew(xmlconf)))
         goto error;
 
     if (virNetSocketNewListenUNIX(path,
index edad103dd31e9916cee4f2e66337e9ae6ddf664b..09914aeed73e80f548bbd8838bd8ba744f2ac401 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __VIR_QEMU_MONITOR_TEST_UTILS_H__
 # define __VIR_QEMU_MONITOR_TEST_UTILS_H__
 
-# include "capabilities.h"
+# include "domain_conf.h"
 # include "qemu/qemu_monitor.h"
 
 typedef struct _qemuMonitorTest qemuMonitorTest;
@@ -32,7 +32,8 @@ qemuMonitorTestAddItem(qemuMonitorTestPtr test,
                        const char *response);
 
 qemuMonitorTestPtr qemuMonitorTestNew(bool json,
-                                      virCapsPtr caps);
+                                      virDomainXMLConfPtr xmlconf);
+
 
 void qemuMonitorTestFree(qemuMonitorTestPtr test);
 
index 2354733fe88621ef57fdffee416d4033d7053891..888de3c856162acc457b588846da9163ffd77959 100644 (file)
@@ -100,7 +100,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
         goto out;
     conn->secretDriver = &fakeSecretDriver;
 
-    if (!(vmdef = virDomainDefParseFile(driver.caps, xml,
+    if (!(vmdef = virDomainDefParseFile(driver.caps, driver.xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE))) {
         if (flags & FLAG_EXPECT_PARSE_ERROR)
@@ -294,6 +294,8 @@ mymain(void)
 
     if ((driver.caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
+    if (!(driver.xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
     VIR_FREE(driver.config->stateDir);
     if ((driver.config->stateDir = strdup("/nowhere")) == NULL)
         return EXIT_FAILURE;
@@ -891,6 +893,7 @@ mymain(void)
 
     virObjectUnref(driver.config);
     virObjectUnref(driver.caps);
+    virObjectUnref(driver.xmlconf);
     VIR_FREE(map);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
index d64960fbc3bf22b1a20eb0ad759ef6f5a5365281..d77da4e1a56430ac288bd6e662927c376b2c79f1 100644 (file)
@@ -32,7 +32,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool live)
     if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
-    if (!(def = virDomainDefParseString(driver.caps, inXmlData,
+    if (!(def = virDomainDefParseString(driver.caps, driver.xmlconf, inXmlData,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         live ? 0 : VIR_DOMAIN_XML_INACTIVE)))
         goto fail;
@@ -106,6 +106,9 @@ mymain(void)
     if ((driver.caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
 
+    if (!(driver.xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
+
 # define DO_TEST_FULL(name, is_different, when)                         \
     do {                                                                \
         const struct testInfo info = {name, is_different, when};        \
@@ -262,6 +265,7 @@ mymain(void)
     DO_TEST_DIFFERENT("metadata");
 
     virObjectUnref(driver.caps);
+    virObjectUnref(driver.xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 6dae3f4a9e927223788793b24b68f558ded03288..76a715d18c70eda99aeaad49cd174ff919bab019 100644 (file)
@@ -51,7 +51,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
     if (len && expectargv[len - 1] == '\n')
         expectargv[len - 1] = '\0';
 
-    if (!(vmdef = virDomainDefParseFile(driver.caps, xml,
+    if (!(vmdef = virDomainDefParseFile(driver.caps, driver.xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto fail;
@@ -204,6 +204,8 @@ mymain(void)
     driver.config = virQEMUDriverConfigNew(false);
     if ((driver.caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
+    if (!(driver.xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
     if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
         cpuMapOverride(map) < 0) {
         VIR_FREE(map);
@@ -252,6 +254,7 @@ mymain(void)
 
     virObjectUnref(driver.config);
     virObjectUnref(driver.caps);
+    virObjectUnref(driver.xmlconf);
     VIR_FREE(map);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
index 24547726834ac9dea481d1dc9b68e17dea6dc9d9..405bc2b5a5927365e9db26bf35e42c11f16ebde0 100644 (file)
@@ -44,6 +44,7 @@
 #define VIR_FROM_THIS VIR_FROM_NONE
 
 static virCapsPtr caps;
+static virDomainXMLConfPtr xmlconf;
 
 static virSecurityManagerPtr mgr;
 
@@ -165,7 +166,7 @@ testSELinuxLoadDef(const char *testname)
         goto cleanup;
     }
 
-    if (!(def = virDomainDefParseString(caps, xmlstr,
+    if (!(def = virDomainDefParseString(caps, xmlconf, xmlstr,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         0)))
         goto cleanup;
@@ -327,6 +328,9 @@ mymain(void)
     if ((caps = testQemuCapsInit()) == NULL)
         return EXIT_FAILURE;
 
+    if (!(xmlconf = virQEMUDriverCreateXMLConf()))
+        return EXIT_FAILURE;
+
 #define DO_TEST_LABELING(name) \
     if (virtTestRun("Labelling " # name, 1, testSELinuxLabeling, name) < 0) \
         ret = -1;                                                       \
index 966527c62b627dbea3c44c9d71f030c4e8fa21a3..27cf64718a99babbed439fb5ffb32787628834c7 100644 (file)
@@ -120,6 +120,7 @@ error:
     return -1;
 }
 
+
 virCapsPtr testQemuCapsInit(void) {
     virCapsPtr caps;
     virCapsGuestPtr guest;
@@ -174,8 +175,6 @@ virCapsPtr testQemuCapsInit(void) {
         (machines = testQemuAllocMachines(&nmachines)) == NULL)
         goto cleanup;
 
-    qemuDomainSetNamespaceHooks(caps);
-
     if ((guest = virCapabilitiesAddGuest(caps, "hvm", VIR_ARCH_I686,
                                          "/usr/bin/qemu", NULL,
                                          nmachines, machines)) == NULL ||
index 3d70a2afeaeedd2ab240d1ef99f679f2bb7d9df5..932becbe8e0996a1645bb28414cb2a6b809093ad 100644 (file)
@@ -1,4 +1,6 @@
 
 #include "capabilities.h"
+#include "domain_conf.h"
 
 virCapsPtr testQemuCapsInit(void);
+virDomainXMLConfPtr testQemuXMLConfInit(void);
index 6d979251ba2ea6ecd7633ac7bf8b1ff01adb3e75..201ea2a94e38224fb4d9ed9464f1491273e35b36 100644 (file)
@@ -15,6 +15,12 @@ static int testXenDefaultConsoleType(const char *ostype,
         return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
 }
 
+virDomainXMLConfPtr
+testXenXMLConfInit(void)
+{
+    return virDomainXMLConfNew(NULL, NULL);
+}
+
 virCapsPtr testXenCapsInit(void) {
     struct utsname utsname;
     virCapsPtr caps;
index 7f27e225ccbd688681fb90df503b82eeb0ee8d3d..d4576cb1a6beb1e5b006f4ea922b722336abbe76 100644 (file)
@@ -1,4 +1,6 @@
 
 #include "capabilities.h"
+#include "domain_conf.h"
 
 virCapsPtr testXenCapsInit(void);
+virDomainXMLConfPtr testXenXMLConfInit(void);
index 9f71aa2de122b968eb6417127db6a22ea3ba0c7c..a32c11a01dbc8bb01f86842dec1e44bcfcbff0e4 100644 (file)
@@ -37,6 +37,7 @@
 #include "viralloc.h"
 
 static virCapsPtr caps;
+static virDomainXMLConfPtr xmlconf;
 
 static int
 testCompareParseXML(const char *xmcfg, const char *xml, int xendConfigVersion)
@@ -68,7 +69,8 @@ testCompareParseXML(const char *xmcfg, const char *xml, int xendConfigVersion)
     priv.caps = caps;
     conn->privateData = &priv;
 
-    if (!(def = virDomainDefParseString(caps, xmlData, 1 << VIR_DOMAIN_VIRT_XEN,
+    if (!(def = virDomainDefParseString(caps, xmlconf, xmlData,
+                                        1 << VIR_DOMAIN_VIRT_XEN,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto fail;
 
@@ -194,6 +196,9 @@ mymain(void)
     if (!(caps = testXenCapsInit()))
         return EXIT_FAILURE;
 
+    if (!(xmlconf = testXenXMLConfInit()))
+        return EXIT_FAILURE;
+
 #define DO_TEST(name, version)                                          \
     do {                                                                \
         struct testInfo info0 = { name, version, 0 };                   \
@@ -246,6 +251,7 @@ mymain(void)
     DO_TEST("pci-devs", 2);
 
     virObjectUnref(caps);
+    virObjectUnref(xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index a41568a2a7b75e5a1d39edc9eb5c3f16a73e7de8..364601a73b956b8ff5250593389c34319358f0b8 100644 (file)
@@ -15,6 +15,7 @@
 #include "testutilsxen.h"
 
 static virCapsPtr caps;
+static virDomainXMLConfPtr xmlconf;
 
 static int
 testCompareFiles(const char *xml, const char *sexpr, int xendConfigVersion)
@@ -31,7 +32,8 @@ testCompareFiles(const char *xml, const char *sexpr, int xendConfigVersion)
   if (virtTestLoadFile(sexpr, &sexprData) < 0)
       goto fail;
 
-  if (!(def = virDomainDefParseString(caps, xmlData, 1 << VIR_DOMAIN_VIRT_XEN,
+  if (!(def = virDomainDefParseString(caps, xmlconf, xmlData,
+                                      1 << VIR_DOMAIN_VIRT_XEN,
                                       VIR_DOMAIN_XML_INACTIVE)))
       goto fail;
 
@@ -102,6 +104,9 @@ mymain(void)
     if (!(caps = testXenCapsInit()))
         return EXIT_FAILURE;
 
+    if (!(xmlconf = testXenXMLConfInit()))
+        return EXIT_FAILURE;
+
     DO_TEST("pv", "pv", "pvtest", 1);
     DO_TEST("fv", "fv", "fvtest", 1);
     DO_TEST("pv", "pv", "pvtest", 2);
@@ -169,6 +174,7 @@ mymain(void)
     DO_TEST("escape", "escape", "fvtest", 1);
 
     virObjectUnref(caps);
+    virObjectUnref(xmlconf);
 
     return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index c46c5a4f529d3ea2dbb67777cc36f4b0ae7c85ad..800fd2cfe63dd293cd6312431890cc93d743d4ee 100644 (file)
@@ -13,6 +13,7 @@
 
 static virCapsPtr caps;
 static virVMXContext ctx;
+static virDomainXMLConfPtr xmlconf;
 
 static int testDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
                                   virArch arch ATTRIBUTE_UNUSED)
@@ -72,6 +73,7 @@ testCapsInit(void)
 
   failure:
     virObjectUnref(caps);
+    virObjectUnref(xmlconf);
     caps = NULL;
 }
 
@@ -92,7 +94,8 @@ testCompareFiles(const char *xml, const char *vmx, int virtualHW_version)
         goto failure;
     }
 
-    def = virDomainDefParseString(caps, xmlData, 1 << VIR_DOMAIN_VIRT_VMWARE,
+    def = virDomainDefParseString(caps, xmlconf, xmlData,
+                                  1 << VIR_DOMAIN_VIRT_VMWARE,
                                   VIR_DOMAIN_XML_INACTIVE);
 
     if (def == NULL) {
@@ -237,6 +240,9 @@ mymain(void)
         return EXIT_FAILURE;
     }
 
+    if (!(xmlconf = virDomainXMLConfNew(NULL, NULL)))
+        return EXIT_FAILURE;
+
     ctx.opaque = NULL;
     ctx.parseFileName = NULL;
     ctx.formatFileName = testFormatVMXFileName;