static char *
bhyveDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
{
+ bhyveConnPtr privconn = conn->privateData;
virDomainObjPtr vm;
+ virCapsPtr caps = NULL;
char *ret = NULL;
if (!(vm = bhyveDomObjFromDomain(domain)))
if (virDomainGetXMLDescEnsureACL(domain->conn, vm->def, flags) < 0)
goto cleanup;
- ret = virDomainDefFormat(vm->def,
+ caps = bhyveDriverGetCapabilities(privconn);
+ if (!caps)
+ goto cleanup;
+
+ ret = virDomainDefFormat(vm->def, caps,
virDomainDefFormatConvertXMLFlags(flags));
+ virObjectUnref(caps);
cleanup:
if (vm)
virObjectUnlock(vm);
error:
err = virSaveLastError();
- strSrc = virDomainDefFormat(src, 0);
- strDst = virDomainDefFormat(dst, 0);
+ strSrc = virDomainDefFormat(src, NULL, 0);
+ strDst = virDomainDefFormat(dst, NULL, 0);
VIR_DEBUG("XMLs that failed stability check were: src=\"%s\", dst=\"%s\"",
NULLSTR(strSrc), NULLSTR(strDst));
VIR_FREE(strSrc);
int
virDomainNetDefFormat(virBufferPtr buf,
virDomainNetDefPtr def,
+ char *prefix,
unsigned int flags)
{
unsigned int actualType = virDomainNetGetActualType(def);
virBufferEscapeString(buf, "<backenddomain name='%s'/>\n", def->domain_name);
if (def->ifname &&
!((flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
- (STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX)))) {
+ (STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX) ||
+ (prefix && STRPREFIX(def->ifname, prefix))))) {
/* Skip auto-generated target names for inactive config. */
virBufferEscapeString(buf, "<target dev='%s'/>\n", def->ifname);
}
* Return -1 on failure. */
int
virDomainDefFormatInternal(virDomainDefPtr def,
+ virCapsPtr caps,
unsigned int flags,
virBufferPtr buf)
{
size_t i;
virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
int indent;
+ char *netprefix = NULL;
virCheckFlags(VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS |
VIR_DOMAIN_DEF_FORMAT_STATUS |
if (virDomainFSDefFormat(buf, def->fss[n], flags) < 0)
goto error;
+ if (caps)
+ netprefix = caps->host.netprefix;
for (n = 0; n < def->nnets; n++)
- if (virDomainNetDefFormat(buf, def->nets[n], flags) < 0)
+ if (virDomainNetDefFormat(buf, def->nets[n], netprefix, flags) < 0)
goto error;
for (n = 0; n < def->nsmartcards; n++)
char *
-virDomainDefFormat(virDomainDefPtr def, unsigned int flags)
+virDomainDefFormat(virDomainDefPtr def, virCapsPtr caps, unsigned int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
virCheckFlags(VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS, NULL);
- if (virDomainDefFormatInternal(def, flags, &buf) < 0)
+ if (virDomainDefFormatInternal(def, caps, flags, &buf) < 0)
return NULL;
return virBufferContentAndReset(&buf);
xmlopt->privateData.format(&buf, obj) < 0)
goto error;
- if (virDomainDefFormatInternal(obj->def, flags, &buf) < 0)
+ if (virDomainDefFormatInternal(obj->def, NULL, flags, &buf) < 0)
goto error;
virBufferAdjustIndent(&buf, -2);
int ret = -1;
char *xml;
- if (!(xml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_SECURE)))
+ if (!(xml = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE)))
goto cleanup;
if (virDomainSaveXML(configDir, def, xml))
format_flags |= VIR_DOMAIN_DEF_FORMAT_INACTIVE | VIR_DOMAIN_DEF_FORMAT_MIGRATABLE;
/* Easiest to clone via a round-trip through XML. */
- if (!(xml = virDomainDefFormat(src, format_flags)))
+ if (!(xml = virDomainDefFormat(src, caps, format_flags)))
return NULL;
ret = virDomainDefParseString(xml, caps, xmlopt, parse_flags);
int flags = VIR_DOMAIN_DEF_FORMAT_INACTIVE | VIR_DOMAIN_DEF_FORMAT_SECURE;
char *xmlStr = NULL;
int rc = -1;
+ char *netprefix;
switch ((virDomainDeviceType) src->type) {
case VIR_DOMAIN_DEVICE_DISK:
rc = virDomainFSDefFormat(&buf, src->data.fs, flags);
break;
case VIR_DOMAIN_DEVICE_NET:
- rc = virDomainNetDefFormat(&buf, src->data.net, flags);
+ netprefix = caps->host.netprefix;
+ rc = virDomainNetDefFormat(&buf, src->data.net, netprefix, flags);
break;
case VIR_DOMAIN_DEVICE_INPUT:
rc = virDomainInputDefFormat(&buf, src->data.input, flags);
unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags);
char *virDomainDefFormat(virDomainDefPtr def,
+ virCapsPtr caps,
unsigned int flags);
char *virDomainObjFormat(virDomainXMLOptionPtr xmlopt,
virDomainObjPtr obj,
unsigned int flags);
int virDomainDefFormatInternal(virDomainDefPtr def,
+ virCapsPtr caps,
unsigned int flags,
virBufferPtr buf);
int virDomainNetDefFormat(virBufferPtr buf,
virDomainNetDefPtr def,
+ char *prefix,
unsigned int flags);
typedef enum {
virBufferAddLit(&buf, "</disks>\n");
}
if (def->dom) {
- if (virDomainDefFormatInternal(def->dom, flags, &buf) < 0) {
+ if (virDomainDefFormatInternal(def->dom, NULL, flags, &buf) < 0) {
virBufferFreeAndReset(&buf);
return NULL;
}
if (powerState != esxVI_VirtualMachinePowerState_PoweredOff)
def->id = id;
- xml = virDomainDefFormat(def,
+ xml = virDomainDefFormat(def, priv->caps,
virDomainDefFormatConvertXMLFlags(flags));
}
def = virVMXParseConfig(&ctx, priv->xmlopt, priv->caps, nativeConfig);
if (def)
- xml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+ xml = virDomainDefFormat(def, priv->caps,
+ VIR_DOMAIN_DEF_FORMAT_INACTIVE);
virDomainDefFree(def);
/* FIXME: devices section is totally missing */
- xml = virDomainDefFormat(def,
+ xml = virDomainDefFormat(def, NULL,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
goto cleanup_dom;
- if ((dom_xml = virDomainDefFormat(vm->def, 0)) == NULL)
+ if ((dom_xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL)
goto cleanup_dom;
if (libxl_userdata_store(cfg->ctx, domid, "libvirt-xml",
goto cleanup;
}
- if ((xml = virDomainDefFormat(vm->def, 0)) == NULL)
+ if ((xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL)
goto cleanup;
xml_len = strlen(xml) + 1;
static char *
libxlDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
{
+ libxlDriverPrivatePtr driver = dom->conn->privateData;
+ libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
virDomainObjPtr vm;
virDomainDefPtr def;
char *ret = NULL;
else
def = vm->def;
- ret = virDomainDefFormat(def,
+ ret = virDomainDefFormat(def, cfg->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
if (vm)
virObjectUnlock(vm);
+ virObjectUnref(cfg);
return ret;
}
goto cleanup;
}
- xml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+ xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
cleanup:
virDomainDefFree(def);
if (!libxlDomainMigrationIsAllowed(def))
goto endjob;
- xml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_SECURE);
+ xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
endjob:
if (!libxlDomainObjEndJob(driver, vm))
static char *lxcDomainGetXMLDesc(virDomainPtr dom,
unsigned int flags)
{
+ virLXCDriverPtr driver = dom->conn->privateData;
virDomainObjPtr vm;
char *ret = NULL;
ret = virDomainDefFormat((flags & VIR_DOMAIN_XML_INACTIVE) &&
vm->newDef ? vm->newDef : vm->def,
+ driver->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
if (!(def = lxcParseConfigString(nativeConfig, caps, driver->xmlopt)))
goto cleanup;
- xml = virDomainDefFormat(def, 0);
+ xml = virDomainDefFormat(def, caps, 0);
cleanup:
virObjectUnref(caps);
/* now that we know it's stopped call the hook if present */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
/* we can't stop the operation even if the script raised an error */
virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
/* The "release" hook cleans up additional resources */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
/* we can't stop the operation even if the script raised an error */
virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
/* Run an early hook to set-up missing devices */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
int hookret;
hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
/* now that we know it is about to start call the hook if present */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
int hookret;
hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
/* finally we can call the 'started' hook script if any */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
int hookret;
hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
/* now that we know it's reconnected call the hook if present */
if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
- char *xml = virDomainDefFormat(vm->def, 0);
+ char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
int hookret;
/* we can't stop the operation even if the script raised an error */
virBufferAddLit(&buf, "<hookData>\n");
virBufferAdjustIndent(&buf, 2);
- if (iface && virDomainNetDefFormat(&buf, iface, 0) < 0)
+ if (iface && virDomainNetDefFormat(&buf, iface, NULL, 0) < 0)
goto cleanup;
if (virNetworkDefFormatBuf(&buf, network->def, 0) < 0)
goto cleanup;
- if (dom && virDomainDefFormatInternal(dom, 0, &buf) < 0)
+ if (dom && virDomainDefFormatInternal(dom, NULL, 0, &buf) < 0)
goto cleanup;
virBufferAdjustIndent(&buf, -2);
goto cleanup;
}
- ret = virDomainDefFormat(vm->def,
+ ret = virDomainDefFormat(vm->def, driver->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
goto cleanup;
}
- xml = virDomainDefFormat(vm->def, VIR_DOMAIN_DEF_FORMAT_SECURE);
+ xml = virDomainDefFormat(vm->def, driver->caps,
+ VIR_DOMAIN_DEF_FORMAT_SECURE);
cleanup:
if (vm)
if (virDomainDefSetVcpus(&def, vcpus) < 0)
goto err;
- return virDomainDefFormat(&def,
+ return virDomainDefFormat(&def, phyp_driver->caps,
virDomainDefFormatConvertXMLFlags(flags));
err:
}
- ret = virDomainDefFormatInternal(def,
+ ret = virDomainDefFormatInternal(def, driver->caps,
virDomainDefFormatConvertXMLFlags(flags),
buf);
if (!(privdom = testDomObjFromDomain(domain)))
goto cleanup;
- xml = virDomainDefFormat(privdom->def,
+ xml = virDomainDefFormat(privdom->def, privconn->caps,
VIR_DOMAIN_DEF_FORMAT_SECURE);
if (xml == NULL) {
static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
{
+ testDriverPtr privconn = domain->conn->privateData;
virDomainDefPtr def;
virDomainObjPtr privdom;
char *ret = NULL;
def = (flags & VIR_DOMAIN_XML_INACTIVE) &&
privdom->newDef ? privdom->newDef : privdom->def;
- ret = virDomainDefFormat(def, virDomainDefFormatConvertXMLFlags(flags));
+ ret = virDomainDefFormat(def, privconn->caps,
+ virDomainDefFormatConvertXMLFlags(flags));
virDomainObjEndAPI(&privdom);
return ret;
goto cleanup;
ret = virDomainDefFormat((flags & VIR_DOMAIN_XML_INACTIVE) && vm->newDef ?
- vm->newDef : vm->def,
+ vm->newDef : vm->def, driver->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
/* dump USB devices/filters if active */
vboxHostDeviceGetXMLDesc(data, def, machine);
- ret = virDomainDefFormat(def, virDomainDefFormatConvertXMLFlags(flags));
+ ret = virDomainDefFormat(def, data->caps,
+ virDomainDefFormatConvertXMLFlags(flags));
cleanup:
VBOX_RELEASE(machine);
goto cleanup;
}
- ret = virDomainDefFormat(vm->def,
+ ret = virDomainDefFormat(vm->def, driver->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
def = virVMXParseConfig(&ctx, driver->xmlopt, driver->caps, nativeConfig);
if (def != NULL)
- xml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+ xml = virDomainDefFormat(def, driver->caps,
+ VIR_DOMAIN_DEF_FORMAT_INACTIVE);
virDomainDefFree(def);
static char *
vzDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
{
+ vzConnPtr privconn = domain->conn->privateData;
virDomainDefPtr def;
virDomainObjPtr privdom;
char *ret = NULL;
def = (flags & VIR_DOMAIN_XML_INACTIVE) &&
privdom->newDef ? privdom->newDef : privdom->def;
- ret = virDomainDefFormat(def, flags);
+ ret = virDomainDefFormat(def, privconn->caps, flags);
cleanup:
if (privdom)
def = xenDaemonDomainGetXMLDesc(dom->conn, minidef, cpus);
if (def)
- ret = virDomainDefFormat(def,
+ ret = virDomainDefFormat(def, priv->caps,
virDomainDefFormatConvertXMLFlags(flags));
cleanup:
if (!def)
goto cleanup;
- ret = virDomainDefFormat(def, 0);
+ ret = virDomainDefFormat(def, priv->caps, 0);
cleanup:
virDomainDefFree(def);
xen_vm vm = NULL;
xen_vm_set *vms;
xen_string_string_map *result = NULL;
- xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
+ struct _xenapiPrivate *priv = conn->privateData;
+ xen_session *session = priv->session;
virDomainDefPtr defPtr = NULL;
char *boot_policy = NULL;
unsigned long memory = 0;
xen_vif_set_free(vif_set);
}
xen_vm_set_free(vms);
- xml = virDomainDefFormat(defPtr, flags);
+ xml = virDomainDefFormat(defPtr, priv->caps, flags);
virDomainDefFree(defPtr);
return xml;
goto fail;
if (vmdef) {
- if (!(actualxml = virDomainDefFormat(vmdef, 0)))
+ if (!(actualxml = virDomainDefFormat(vmdef, caps, 0)))
goto fail;
if (virtTestLoadFile(xml, &expectxml) < 0)
goto cleanup;
}
- actual = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+ actual = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
if (actual == NULL) {
err = virGetLastError();
goto fail;
}
- if (!(actualxml = virDomainDefFormat(vmdef, 0)))
+ if (!(actualxml = virDomainDefFormat(vmdef, driver.caps, 0)))
goto fail;
if (blankProblemElements(expectxml) < 0 ||
int ret;
vm->def->id = -1;
- actual = virDomainDefFormat(vm->def, VIR_DOMAIN_DEF_FORMAT_SECURE);
+ actual = virDomainDefFormat(vm->def, driver.caps,
+ VIR_DOMAIN_DEF_FORMAT_SECURE);
if (!actual)
return -1;
vm->def->id = QEMU_HOTPLUG_TEST_DOMAIN_ID;
goto fail;
}
- if (!(gotxml = virDomainDefFormat(def, 0)))
+ if (!(gotxml = virDomainDefFormat(def, caps, 0)))
goto fail;
if (virtTestCompareToFile(gotxml, xml) < 0)
goto fail;
}
- if (!(actual = virDomainDefFormat(def, format_flags)))
+ if (!(actual = virDomainDefFormat(def, caps, format_flags)))
goto fail;
if (virtTestCompareToFile(actual, outfile) < 0)
goto cleanup;
}
- if (!(formatted = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_SECURE)))
+ if (!(formatted = virDomainDefFormat(def, caps,
+ VIR_DOMAIN_DEF_FORMAT_SECURE)))
goto cleanup;
if (virtTestCompareToFile(formatted, xml) < 0)
if (!(def = xenParseXL(conf, caps, xmlopt)))
goto fail;
- if (!(gotxml = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE |
+ if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_XML_INACTIVE |
VIR_DOMAIN_XML_SECURE)))
goto fail;
if (!(def = xenParseXM(conf, caps, xmlopt)))
goto fail;
- if (!(gotxml = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_SECURE)))
+ if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE)))
goto fail;
if (virtTestCompareToFile(gotxml, xml) < 0)