]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Add save cookie callbacks to xmlopt
authorJiri Denemark <jdenemar@redhat.com>
Thu, 1 Jun 2017 22:44:46 +0000 (00:44 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 7 Jun 2017 11:36:01 +0000 (13:36 +0200)
virDomainXMLOption gains driver specific callbacks for parsing and
formatting save cookies.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
23 files changed:
src/bhyve/bhyve_domain.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/snapshot_conf.c
src/conf/snapshot_conf.h
src/libvirt_private.syms
src/libxl/libxl_conf.c
src/lxc/lxc_conf.c
src/openvz/openvz_driver.c
src/phyp/phyp_driver.c
src/qemu/qemu_capabilities.c
src/qemu/qemu_conf.c
src/security/virt-aa-helper.c
src/test/test_driver.c
src/uml/uml_driver.c
src/vbox/vbox_common.c
src/vmware/vmware_driver.c
src/vmx/vmx.c
src/vz/vz_driver.c
src/xen/xen_driver.c
src/xenapi/xenapi_driver.c
tests/bhyveargv2xmltest.c
tests/testutils.c

index 0a99550afa43782a53bbb63c9c47c8781f5096bc..20c82937b5eb973b2f7a06c952fa8950c16ef898 100644 (file)
@@ -144,7 +144,7 @@ virBhyveDriverCreateXMLConf(bhyveConnPtr driver)
     virBhyveDriverDomainDefParserConfig.priv = driver;
     return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig,
                                  &virBhyveDriverPrivateDataCallbacks,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }
 
 virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = {
index 53c145f1670ae3ac34b5dc0e2c9ac11fc9e6598c..2e2e7334abfa255b8118b3ce307b11318a87fa0a 100644 (file)
@@ -79,6 +79,9 @@ struct _virDomainXMLOption {
 
     /* ABI stability callbacks */
     virDomainABIStability abi;
+
+    /* Private data for save image stored in snapshot XML */
+    virSaveCookieCallbacks saveCookie;
 };
 
 #define VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS             \
@@ -1054,7 +1057,8 @@ virDomainXMLOptionPtr
 virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                       virDomainXMLPrivateDataCallbacksPtr priv,
                       virDomainXMLNamespacePtr xmlns,
-                      virDomainABIStabilityPtr abi)
+                      virDomainABIStabilityPtr abi,
+                      virSaveCookieCallbacksPtr saveCookie)
 {
     virDomainXMLOptionPtr xmlopt;
 
@@ -1076,6 +1080,9 @@ virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
     if (abi)
         xmlopt->abi = *abi;
 
+    if (saveCookie)
+        xmlopt->saveCookie = *saveCookie;
+
     /* Technically this forbids to use one of Xerox's MAC address prefixes in
      * our hypervisor drivers. This shouldn't ever be a problem.
      *
@@ -1106,6 +1113,13 @@ virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
 }
 
 
+virSaveCookieCallbacksPtr
+virDomainXMLOptionGetSaveCookie(virDomainXMLOptionPtr xmlopt)
+{
+    return &xmlopt->saveCookie;
+}
+
+
 void
 virBlkioDeviceArrayClear(virBlkioDevicePtr devices,
                          int ndevices)
index 446b117b7c1e333e82be42af7422cbe03f05aa78..1231aeac6831e9aa2a04921aaee98ba0d64b1a6f 100644 (file)
@@ -55,6 +55,7 @@
 # include "virgic.h"
 # include "virperf.h"
 # include "virtypedparam.h"
+# include "virsavecookie.h"
 
 /* forward declarations of all device types, required by
  * virDomainDeviceDef
@@ -2549,7 +2550,11 @@ struct _virDomainABIStability {
 virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                                             virDomainXMLPrivateDataCallbacksPtr priv,
                                             virDomainXMLNamespacePtr xmlns,
-                                            virDomainABIStabilityPtr abi);
+                                            virDomainABIStabilityPtr abi,
+                                            virSaveCookieCallbacksPtr saveCookie);
+
+virSaveCookieCallbacksPtr
+virDomainXMLOptionGetSaveCookie(virDomainXMLOptionPtr xmlopt);
 
 void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);
 
index e3bba985d768094d55f8ce6b16e6fcec39b6bef9..6330f7d1f9f7ad0be2953773bd8a760078ade419 100644 (file)
@@ -102,6 +102,7 @@ void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def)
         virDomainSnapshotDiskDefClear(&def->disks[i]);
     VIR_FREE(def->disks);
     virDomainDefFree(def->dom);
+    virObjectUnref(def->cookie);
     VIR_FREE(def);
 }
 
@@ -214,6 +215,7 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt,
     char *memorySnapshot = NULL;
     char *memoryFile = NULL;
     bool offline = !!(flags & VIR_DOMAIN_SNAPSHOT_PARSE_OFFLINE);
+    virSaveCookieCallbacksPtr saveCookie = virDomainXMLOptionGetSaveCookie(xmlopt);
 
     if (VIR_ALLOC(def) < 0)
         goto cleanup;
@@ -365,6 +367,9 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt,
         def->current = active != 0;
     }
 
+    if (!offline && virSaveCookieParse(ctxt, &def->cookie, saveCookie) < 0)
+        goto cleanup;
+
     ret = def;
 
  cleanup:
@@ -691,7 +696,7 @@ char *
 virDomainSnapshotDefFormat(const char *domain_uuid,
                            virDomainSnapshotDefPtr def,
                            virCapsPtr caps,
-                           virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
+                           virDomainXMLOptionPtr xmlopt,
                            unsigned int flags,
                            int internal)
 {
@@ -751,6 +756,10 @@ virDomainSnapshotDefFormat(const char *domain_uuid,
         virBufferAddLit(&buf, "</domain>\n");
     }
 
+    if (virSaveCookieFormatBuf(&buf, def->cookie,
+                               virDomainXMLOptionGetSaveCookie(xmlopt)) < 0)
+        goto error;
+
     if (internal)
         virBufferAsprintf(&buf, "<active>%d</active>\n", def->current);
 
index 2ce526fa6b8cfdea4d72dae75fc7e101f0ef25e5..1d663c77bc1394e1546d38e00e377bc4369c72a6 100644 (file)
@@ -76,6 +76,8 @@ struct _virDomainSnapshotDef {
 
     virDomainDefPtr dom;
 
+    virObjectPtr cookie;
+
     /* Internal use.  */
     bool current; /* At most one snapshot in the list should have this set */
 };
index ba4cecee115dc771ec688a31db30d48f051ed196..003db6b6528436cddd2737cc152535add6beb9d9 100644 (file)
@@ -535,6 +535,7 @@ virDomainWatchdogActionTypeToString;
 virDomainWatchdogModelTypeFromString;
 virDomainWatchdogModelTypeToString;
 virDomainXMLOptionGetNamespace;
+virDomainXMLOptionGetSaveCookie;
 virDomainXMLOptionNew;
 
 
index 886dc629faab7f51d1d36d68ffba451f71598834..04d9dd1bd0b22afbfc67dae2760d74b4694b8045 100644 (file)
@@ -2255,5 +2255,5 @@ libxlCreateXMLConf(void)
 {
     return virDomainXMLOptionNew(&libxlDomainDefParserConfig,
                                  &libxlDomainXMLPrivateDataCallbacks,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }
index ff975decc34ebaf1d93d21e685d5cbbc83c74386..92a82a4768691c9357b267c9d9f052b3191c42f0 100644 (file)
@@ -216,7 +216,7 @@ lxcDomainXMLConfInit(void)
     return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
                                  &virLXCDriverPrivateDataCallbacks,
                                  &virLXCDriverDomainXMLNamespace,
-                                 NULL);
+                                 NULL, NULL);
 }
 
 
index 8e305a85c01d7520e6ccfcb9ef818b6417091f5b..a1485fc8874442599c0c6c52e6f35d7150aef428 100644 (file)
@@ -1483,7 +1483,7 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn,
         goto cleanup;
 
     if (!(driver->xmlopt = virDomainXMLOptionNew(&openvzDomainDefParserConfig,
-                                                 NULL, NULL, NULL)))
+                                                 NULL, NULL, NULL, NULL)))
         goto cleanup;
 
     if (openvzLoadDomains(driver) < 0)
index 4465ac862d4fb4993853de5699406a61e6886c0c..9121581fecb8e55a0573071eddfff06122b54d52 100644 (file)
@@ -1202,7 +1202,7 @@ phypConnectOpen(virConnectPtr conn,
         goto failure;
 
     if (!(phyp_driver->xmlopt = virDomainXMLOptionNew(&virPhypDriverDomainDefParserConfig,
-                                                      NULL, NULL, NULL)))
+                                                      NULL, NULL, NULL, NULL)))
         goto failure;
 
     conn->privateData = phyp_driver;
index 03c55853f1e3d1b0f3886e096e3b3fcb76bf6288..7f224925913942067e475111c2ff90fd95320486 100644 (file)
@@ -5026,7 +5026,7 @@ virQEMUCapsInitQMPCommandRun(virQEMUCapsInitQMPCommandPtr cmd,
         goto ignore;
     }
 
-    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL)) ||
+    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
         !(cmd->vm = virDomainObjNew(xmlopt)))
         goto cleanup;
 
index d8b88386dbb2fd639e15480979ac47a770d656a0..d02e776b0d7b53a8cfb16a9c7e5f79aa727ee0ce 100644 (file)
@@ -910,7 +910,8 @@ virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver)
     return virDomainXMLOptionNew(&virQEMUDriverDomainDefParserConfig,
                                  &virQEMUDriverPrivateDataCallbacks,
                                  &virQEMUDriverDomainXMLNamespace,
-                                 &virQEMUDriverDomainABIStability);
+                                 &virQEMUDriverDomainABIStability,
+                                 NULL);
 }
 
 
index 48201d5b8ca93fd2dcd62340fc2d64fb3689b123..97436e5dc791cc3696e59b2e8a7c3153fba5bbbe 100644 (file)
@@ -667,7 +667,7 @@ get_definition(vahControl * ctl, const char *xmlStr)
         goto exit;
     }
 
-    if (!(ctl->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL))) {
+    if (!(ctl->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL))) {
         vah_error(ctl, 0, _("Failed to create XML config object"));
         goto exit;
     }
index 8cecc6add0b0cf9f5a47db58b6914a68ba719d3e..11e7fd88040ec7540dc735b9639ba0520f30fd4a 100644 (file)
@@ -414,7 +414,7 @@ testDriverNew(void)
         goto error;
     }
 
-    if (!(ret->xmlopt = virDomainXMLOptionNew(NULL, NULL, &ns, NULL)) ||
+    if (!(ret->xmlopt = virDomainXMLOptionNew(NULL, NULL, &ns, NULL, NULL)) ||
         !(ret->eventState = virObjectEventStateNew()) ||
         !(ret->ifaces = virInterfaceObjListNew()) ||
         !(ret->domains = virDomainObjListNew()) ||
index 58ab033c80141f5a4754e057b9f0979931dc8005..080fea47dad4e3ea34314ce0bf4a59d8dfc3d1b3 100644 (file)
@@ -533,7 +533,7 @@ umlStateInitialize(bool privileged,
         goto out_of_memory;
 
     if (!(uml_driver->xmlopt = virDomainXMLOptionNew(&umlDriverDomainDefParserConfig,
-                                                     &privcb, NULL, NULL)))
+                                                     &privcb, NULL, NULL, NULL)))
         goto error;
 
     if ((uml_driver->inotifyFD = inotify_init()) < 0) {
index 1a90d00aa44ade6d2c078de459eb23ce068485d2..c46e71bcf8351e58050ca4d521f324cf40e87b21 100644 (file)
@@ -142,7 +142,7 @@ vboxDriverObjNew(void)
 
     if (!(driver->caps = vboxCapsInit()) ||
         !(driver->xmlopt = virDomainXMLOptionNew(&vboxDomainDefParserConfig,
-                                                 NULL, NULL, NULL)))
+                                                 NULL, NULL, NULL, NULL)))
         goto cleanup;
 
     return driver;
index 9e369e67bea906f3761ce13453a4817fdb22ea66..0ee1c5bb983b12c5919413620335adbe2786deb3 100644 (file)
@@ -114,7 +114,8 @@ vmwareDomainXMLConfigInit(void)
     virDomainXMLPrivateDataCallbacks priv = { .alloc = vmwareDataAllocFunc,
                                               .free = vmwareDataFreeFunc };
 
-    return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv, NULL, NULL);
+    return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv,
+                                 NULL, NULL, NULL);
 }
 
 static virDrvOpenStatus
index 3289a20026896d5753bbe1b169cb706ee4e3726b..96507f10f3faa9c8069dea278ec18b3c0c674847 100644 (file)
@@ -591,7 +591,7 @@ virDomainXMLOptionPtr
 virVMXDomainXMLConfInit(void)
 {
     return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL,
-                                 &virVMXDomainXMLNamespace, NULL);
+                                 &virVMXDomainXMLNamespace, NULL, NULL);
 }
 
 char *
index e6bb201827ee5af6a5cb013e4b02964d0acc7752..7aa0c4c48f192b2c8f2b29976d74645bc491a85f 100644 (file)
@@ -328,7 +328,7 @@ vzDriverObjNew(void)
     if (!(driver->caps = vzBuildCapabilities()) ||
         !(driver->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
                                                  &vzDomainXMLPrivateDataCallbacksPtr,
-                                                 NULL, NULL)) ||
+                                                 NULL, NULL, NULL)) ||
         !(driver->domains = virDomainObjListNew()) ||
         !(driver->domainEventState = virObjectEventStateNew()) ||
         (vzInitVersion(driver) < 0) ||
index f81ee20ad3582d5446e48360752f20418cc6e321..8e7bc350c8a7fe1cb367091fc053a2b7a4d367cc 100644 (file)
@@ -401,7 +401,7 @@ virDomainXMLOptionPtr
 xenDomainXMLConfInit(void)
 {
     return virDomainXMLOptionNew(&xenDomainDefParserConfig,
-                                 NULL, NULL, NULL);
+                                 NULL, NULL, NULL, NULL);
 }
 
 
index 380c3a1deb1f54bf187455e8f84ef180ca734cbc..fb462cd3a13085ee53bab9f26aa733078c4bffe4 100644 (file)
@@ -200,7 +200,7 @@ xenapiConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
     }
 
     if (!(privP->xmlopt = virDomainXMLOptionNew(&xenapiDomainDefParserConfig,
-                                                NULL, NULL, NULL))) {
+                                                NULL, NULL, NULL, NULL))) {
         xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR,
                                   _("Failed to create XML conf object"));
         goto error;
index 9db3750aca1458b91b035871170235cc890e59ca..6a568511514ab8ab1d040547a655aa86df458523 100644 (file)
@@ -131,7 +131,7 @@ mymain(void)
         return EXIT_FAILURE;
 
     if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL,
-                                               NULL, NULL)) == NULL)
+                                               NULL, NULL, NULL)) == NULL)
         return EXIT_FAILURE;
 
 # define DO_TEST_FULL(name, flags)                            \
index 4b8cf79ef9390d0d000d01d7a8f3ff0c9c3bcec4..f45596997d6dd1f3999c986526de94603a79ed54 100644 (file)
@@ -1136,7 +1136,7 @@ virDomainXMLOptionPtr virTestGenericDomainXMLConfInit(void)
 {
     return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig,
                                  &virTestGenericPrivateDataCallbacks,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }