virBhyveDriverDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig,
&virBhyveDriverPrivateDataCallbacks,
- NULL, NULL);
+ NULL, NULL, NULL);
}
virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = {
/* ABI stability callbacks */
virDomainABIStability abi;
+
+ /* Private data for save image stored in snapshot XML */
+ virSaveCookieCallbacks saveCookie;
};
#define VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS \
virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
virDomainXMLPrivateDataCallbacksPtr priv,
virDomainXMLNamespacePtr xmlns,
- virDomainABIStabilityPtr abi)
+ virDomainABIStabilityPtr abi,
+ virSaveCookieCallbacksPtr saveCookie)
{
virDomainXMLOptionPtr xmlopt;
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.
*
}
+virSaveCookieCallbacksPtr
+virDomainXMLOptionGetSaveCookie(virDomainXMLOptionPtr xmlopt)
+{
+ return &xmlopt->saveCookie;
+}
+
+
void
virBlkioDeviceArrayClear(virBlkioDevicePtr devices,
int ndevices)
# include "virgic.h"
# include "virperf.h"
# include "virtypedparam.h"
+# include "virsavecookie.h"
/* forward declarations of all device types, required by
* virDomainDeviceDef
virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
virDomainXMLPrivateDataCallbacksPtr priv,
virDomainXMLNamespacePtr xmlns,
- virDomainABIStabilityPtr abi);
+ virDomainABIStabilityPtr abi,
+ virSaveCookieCallbacksPtr saveCookie);
+
+virSaveCookieCallbacksPtr
+virDomainXMLOptionGetSaveCookie(virDomainXMLOptionPtr xmlopt);
void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);
virDomainSnapshotDiskDefClear(&def->disks[i]);
VIR_FREE(def->disks);
virDomainDefFree(def->dom);
+ virObjectUnref(def->cookie);
VIR_FREE(def);
}
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;
def->current = active != 0;
}
+ if (!offline && virSaveCookieParse(ctxt, &def->cookie, saveCookie) < 0)
+ goto cleanup;
+
ret = def;
cleanup:
virDomainSnapshotDefFormat(const char *domain_uuid,
virDomainSnapshotDefPtr def,
virCapsPtr caps,
- virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
+ virDomainXMLOptionPtr xmlopt,
unsigned int flags,
int internal)
{
virBufferAddLit(&buf, "</domain>\n");
}
+ if (virSaveCookieFormatBuf(&buf, def->cookie,
+ virDomainXMLOptionGetSaveCookie(xmlopt)) < 0)
+ goto error;
+
if (internal)
virBufferAsprintf(&buf, "<active>%d</active>\n", def->current);
virDomainDefPtr dom;
+ virObjectPtr cookie;
+
/* Internal use. */
bool current; /* At most one snapshot in the list should have this set */
};
virDomainWatchdogModelTypeFromString;
virDomainWatchdogModelTypeToString;
virDomainXMLOptionGetNamespace;
+virDomainXMLOptionGetSaveCookie;
virDomainXMLOptionNew;
{
return virDomainXMLOptionNew(&libxlDomainDefParserConfig,
&libxlDomainXMLPrivateDataCallbacks,
- NULL, NULL);
+ NULL, NULL, NULL);
}
return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
&virLXCDriverPrivateDataCallbacks,
&virLXCDriverDomainXMLNamespace,
- NULL);
+ NULL, NULL);
}
goto cleanup;
if (!(driver->xmlopt = virDomainXMLOptionNew(&openvzDomainDefParserConfig,
- NULL, NULL, NULL)))
+ NULL, NULL, NULL, NULL)))
goto cleanup;
if (openvzLoadDomains(driver) < 0)
goto failure;
if (!(phyp_driver->xmlopt = virDomainXMLOptionNew(&virPhypDriverDomainDefParserConfig,
- NULL, NULL, NULL)))
+ NULL, NULL, NULL, NULL)))
goto failure;
conn->privateData = phyp_driver;
goto ignore;
}
- if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL)) ||
+ if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
!(cmd->vm = virDomainObjNew(xmlopt)))
goto cleanup;
return virDomainXMLOptionNew(&virQEMUDriverDomainDefParserConfig,
&virQEMUDriverPrivateDataCallbacks,
&virQEMUDriverDomainXMLNamespace,
- &virQEMUDriverDomainABIStability);
+ &virQEMUDriverDomainABIStability,
+ NULL);
}
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;
}
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()) ||
goto out_of_memory;
if (!(uml_driver->xmlopt = virDomainXMLOptionNew(¨DriverDomainDefParserConfig,
- &privcb, NULL, NULL)))
+ &privcb, NULL, NULL, NULL)))
goto error;
if ((uml_driver->inotifyFD = inotify_init()) < 0) {
if (!(driver->caps = vboxCapsInit()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vboxDomainDefParserConfig,
- NULL, NULL, NULL)))
+ NULL, NULL, NULL, NULL)))
goto cleanup;
return driver;
virDomainXMLPrivateDataCallbacks priv = { .alloc = vmwareDataAllocFunc,
.free = vmwareDataFreeFunc };
- return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv, NULL, NULL);
+ return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv,
+ NULL, NULL, NULL);
}
static virDrvOpenStatus
virVMXDomainXMLConfInit(void)
{
return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL,
- &virVMXDomainXMLNamespace, NULL);
+ &virVMXDomainXMLNamespace, NULL, NULL);
}
char *
if (!(driver->caps = vzBuildCapabilities()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
&vzDomainXMLPrivateDataCallbacksPtr,
- NULL, NULL)) ||
+ NULL, NULL, NULL)) ||
!(driver->domains = virDomainObjListNew()) ||
!(driver->domainEventState = virObjectEventStateNew()) ||
(vzInitVersion(driver) < 0) ||
xenDomainXMLConfInit(void)
{
return virDomainXMLOptionNew(&xenDomainDefParserConfig,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
}
}
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;
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) \
{
return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig,
&virTestGenericPrivateDataCallbacks,
- NULL, NULL);
+ NULL, NULL, NULL);
}