virBhyveDriverDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig,
&virBhyveDriverPrivateDataCallbacks,
- NULL);
+ NULL, NULL);
}
virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = {
/* XML namespace callbacks */
virDomainXMLNamespace ns;
+
+ /* ABI stability callbacks */
+ virDomainABIStability abi;
};
#define VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS \
virDomainXMLOptionPtr
virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
virDomainXMLPrivateDataCallbacksPtr priv,
- virDomainXMLNamespacePtr xmlns)
+ virDomainXMLNamespacePtr xmlns,
+ virDomainABIStabilityPtr abi)
{
virDomainXMLOptionPtr xmlopt;
if (xmlns)
xmlopt->ns = *xmlns;
+ if (abi)
+ xmlopt->abi = *abi;
+
/* Technically this forbids to use one of Xerox's MAC address prefixes in
* our hypervisor drivers. This shouldn't ever be a problem.
*
bool
virDomainDefCheckABIStabilityFlags(virDomainDefPtr src,
virDomainDefPtr dst,
+ virDomainXMLOptionPtr xmlopt,
unsigned int flags)
{
size_t i;
!virDomainIOMMUDefCheckABIStability(src->iommu, dst->iommu))
goto error;
+ if (xmlopt && xmlopt->abi.domain &&
+ !xmlopt->abi.domain(src, dst))
+ goto error;
+
/* Coverity is not very happy with this - all dead_error_condition */
#if !STATIC_ANALYSIS
/* This switch statement is here to trigger compiler warning when adding
bool
virDomainDefCheckABIStability(virDomainDefPtr src,
- virDomainDefPtr dst)
+ virDomainDefPtr dst,
+ virDomainXMLOptionPtr xmlopt)
{
- return virDomainDefCheckABIStabilityFlags(src, dst, 0);
+ return virDomainDefCheckABIStabilityFlags(src, dst, xmlopt, 0);
}
virDomainXMLPrivateDataParseFunc parse;
};
+typedef bool (*virDomainABIStabilityDomain)(const virDomainDef *src,
+ const virDomainDef *dst);
+
+typedef struct _virDomainABIStability virDomainABIStability;
+typedef virDomainABIStability *virDomainABIStabilityPtr;
+struct _virDomainABIStability {
+ virDomainABIStabilityDomain domain;
+};
+
virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
virDomainXMLPrivateDataCallbacksPtr priv,
- virDomainXMLNamespacePtr xmlns);
+ virDomainXMLNamespacePtr xmlns,
+ virDomainABIStabilityPtr abi);
void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);
unsigned int flags);
bool virDomainDefCheckABIStability(virDomainDefPtr src,
- virDomainDefPtr dst);
+ virDomainDefPtr dst,
+ virDomainXMLOptionPtr xmlopt);
bool virDomainDefCheckABIStabilityFlags(virDomainDefPtr src,
virDomainDefPtr dst,
+ virDomainXMLOptionPtr xmlopt,
unsigned int flags);
int virDomainDefAddImplicitDevices(virDomainDefPtr def);
virDomainObjPtr vm,
virDomainSnapshotDefPtr *defptr,
virDomainSnapshotObjPtr *snap,
+ virDomainXMLOptionPtr xmlopt,
bool *update_current,
unsigned int flags)
{
if (other->def->dom) {
if (def->dom) {
if (!virDomainDefCheckABIStability(other->def->dom,
- def->dom))
+ def->dom, xmlopt))
goto cleanup;
} else {
/* Transfer the domain def */
virDomainObjPtr vm,
virDomainSnapshotDefPtr *def,
virDomainSnapshotObjPtr *snap,
+ virDomainXMLOptionPtr xmlopt,
bool *update_current,
unsigned int flags);
{
return virDomainXMLOptionNew(&libxlDomainDefParserConfig,
&libxlDomainXMLPrivateDataCallbacks,
- NULL);
+ NULL, NULL);
}
!(migratableDefDst = virDomainDefCopy(dst, cfg->caps, driver->xmlopt, NULL, true)))
goto cleanup;
- ret = virDomainDefCheckABIStability(migratableDefSrc, migratableDefDst);
+ ret = virDomainDefCheckABIStability(migratableDefSrc,
+ migratableDefDst,
+ driver->xmlopt);
cleanup:
virDomainDefFree(migratableDefSrc);
{
return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
&virLXCDriverPrivateDataCallbacks,
- &virLXCDriverDomainXMLNamespace);
+ &virLXCDriverDomainXMLNamespace,
+ NULL);
}
goto cleanup;
if (!(driver->xmlopt = virDomainXMLOptionNew(&openvzDomainDefParserConfig,
- NULL, NULL)))
+ NULL, NULL, NULL)))
goto cleanup;
if (openvzLoadDomains(driver) < 0)
goto failure;
if (!(phyp_driver->xmlopt = virDomainXMLOptionNew(&virPhypDriverDomainDefParserConfig,
- NULL, NULL)))
+ NULL, NULL, NULL)))
goto failure;
conn->privateData = phyp_driver;
goto ignore;
}
- if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)) ||
+ if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL)) ||
!(cmd->vm = virDomainObjNew(xmlopt)))
goto cleanup;
virQEMUDriverDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&virQEMUDriverDomainDefParserConfig,
&virQEMUDriverPrivateDataCallbacks,
- &virQEMUDriverDomainXMLNamespace);
+ &virQEMUDriverDomainXMLNamespace,
+ NULL);
}
if (!virDomainDefCheckABIStabilityFlags(migratableDefSrc,
migratableDefDst,
+ driver->xmlopt,
check_flags))
goto cleanup;
VIR_DOMAIN_XML_MIGRATABLE)))
goto cleanup;
- if (!virDomainDefCheckABIStability(def, newdef_migr)) {
+ if (!virDomainDefCheckABIStability(def, newdef_migr, driver->xmlopt)) {
virErrorPtr err = virSaveLastError();
/* Due to a bug in older version of external snapshot creation
* saved XML type, we need to check the ABI compatibility against
* the user provided XML if the check against the migratable XML
* fails. Snapshots created prior to v1.1.3 have this issue. */
- if (!virDomainDefCheckABIStability(def, newdef)) {
+ if (!virDomainDefCheckABIStability(def, newdef, driver->xmlopt)) {
virSetError(err);
virFreeError(err);
goto cleanup;
if (redefine) {
if (virDomainSnapshotRedefinePrep(domain, vm, &def, &snap,
+ driver->xmlopt,
&update_current, flags) < 0)
goto endjob;
} else {
goto exit;
}
- if (!(ctl->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL))) {
+ if (!(ctl->xmlopt = virDomainXMLOptionNew(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)) ||
+ if (!(ret->xmlopt = virDomainXMLOptionNew(NULL, NULL, &ns, NULL)) ||
!(ret->eventState = virObjectEventStateNew()) ||
!(ret->ifaces = virInterfaceObjListNew()) ||
!(ret->domains = virDomainObjListNew()) ||
if (redefine) {
if (virDomainSnapshotRedefinePrep(domain, vm, &def, &snap,
+ privconn->xmlopt,
&update_current, flags) < 0)
goto cleanup;
} else {
if (virDomainObjIsActive(vm)) {
/* Transitions 5, 6, 8, 9 */
/* Check for ABI compatibility. */
- if (!virDomainDefCheckABIStability(vm->def, config)) {
+ if (!virDomainDefCheckABIStability(vm->def, config,
+ privconn->xmlopt)) {
virErrorPtr err = virGetLastError();
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
goto out_of_memory;
if (!(uml_driver->xmlopt = virDomainXMLOptionNew(¨DriverDomainDefParserConfig,
- &privcb, NULL)))
+ &privcb, NULL, NULL)))
goto error;
if ((uml_driver->inotifyFD = inotify_init()) < 0) {
if (!(driver->caps = vboxCapsInit()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vboxDomainDefParserConfig,
- NULL, NULL)))
+ NULL, NULL, NULL)))
goto cleanup;
return driver;
virDomainXMLPrivateDataCallbacks priv = { .alloc = vmwareDataAllocFunc,
.free = vmwareDataFreeFunc };
- return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv, NULL);
+ return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv, NULL, NULL);
}
static virDrvOpenStatus
virVMXDomainXMLConfInit(void)
{
return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL,
- &virVMXDomainXMLNamespace);
+ &virVMXDomainXMLNamespace, NULL);
}
char *
if (!(driver->caps = vzBuildCapabilities()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
&vzDomainXMLPrivateDataCallbacksPtr,
- NULL)) ||
+ NULL, NULL)) ||
!(driver->domains = virDomainObjListNew()) ||
!(driver->domainEventState = virObjectEventStateNew()) ||
(vzInitVersion(driver) < 0) ||
xenDomainXMLConfInit(void)
{
return virDomainXMLOptionNew(&xenDomainDefParserConfig,
- NULL, NULL);
+ NULL, NULL, NULL);
}
}
if (!(privP->xmlopt = virDomainXMLOptionNew(&xenapiDomainDefParserConfig,
- NULL, NULL))) {
+ NULL, NULL, NULL))) {
xenapiSessionErrorHandler(conn, VIR_ERR_INTERNAL_ERROR,
_("Failed to create XML conf object"));
goto error;
if ((driver.caps = virBhyveCapsBuild()) == NULL)
return EXIT_FAILURE;
- if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)) == NULL)
+ if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL,
+ NULL, NULL)) == NULL)
return EXIT_FAILURE;
# define DO_TEST_FULL(name, flags) \
if (testSanitizeDef(vmdef) < 0)
goto fail;
- if (!virDomainDefCheckABIStability(vmdef, vmdef)) {
+ if (!virDomainDefCheckABIStability(vmdef, vmdef, driver.xmlopt)) {
VIR_TEST_DEBUG("ABI stability check failed on %s", xmlfile);
goto fail;
}
if (virBitmapParse("0-3", &priv->autoNodeset, 4) < 0)
goto cleanup;
- if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
+ if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
goto cleanup;
}
tty, vncport, caps, xmlopt)))
goto fail;
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", xml);
goto fail;
}
{
return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig,
&virTestGenericPrivateDataCallbacks,
- NULL);
+ NULL, NULL);
}
goto out;
}
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
VIR_TEST_DEBUG("ABI stability check failed on %s", infile);
result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_STABILITY;
goto out;
if (!(def = virVMXParseConfig(&ctx, xmlopt, caps, vmxData)))
goto cleanup;
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", vmx);
goto cleanup;
}
goto fail;
}
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", xml);
goto fail;
}
VIR_DOMAIN_DEF_PARSE_INACTIVE)))
goto fail;
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", xml);
goto fail;
}
VIR_DOMAIN_DEF_PARSE_INACTIVE)))
goto fail;
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", xml);
goto fail;
}
if (def == NULL)
goto failure;
- if (!virDomainDefCheckABIStability(def, def)) {
+ if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", xml);
goto failure;
}