}
-int virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info)
+static int
+virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info, unsigned int flags)
{
if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
return 1;
- if (info->alias)
+ if (info->alias && !(flags & VIR_DOMAIN_XML_INACTIVE))
return 1;
return 0;
}
* <target>, which is used by <serial> but not <smartcard>). */
static int
virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
- xmlNodePtr cur)
+ xmlNodePtr cur, unsigned int flags)
{
char *bindHost = NULL;
char *bindService = NULL;
case VIR_DOMAIN_CHR_TYPE_FILE:
case VIR_DOMAIN_CHR_TYPE_PIPE:
case VIR_DOMAIN_CHR_TYPE_UNIX:
- if (path == NULL)
+ /* PTY path is only parsed from live xml. */
+ if (path == NULL &&
+ (def->type != VIR_DOMAIN_CHR_TYPE_PTY ||
+ !(flags & VIR_DOMAIN_XML_INACTIVE)))
path = virXMLPropString(cur, "path");
break;
}
cur = node->children;
- remaining = virDomainChrSourceDefParseXML(&def->source, cur);
+ remaining = virDomainChrSourceDefParseXML(&def->source, cur, flags);
if (remaining < 0)
goto error;
if (remaining) {
}
cur = node->children;
- if (virDomainChrSourceDefParseXML(&def->data.passthru, cur) < 0)
+ if (virDomainChrSourceDefParseXML(&def->data.passthru, cur, flags) < 0)
goto error;
if (def->data.passthru.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
break;
}
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
break;
}
- if (def->ifname)
+
+ if (def->ifname &&
+ !((flags & VIR_DOMAIN_XML_INACTIVE) &&
+ (STRPREFIX(def->ifname, VIR_NET_GENERATED_PREFIX)))) {
+ /* Skip auto-generated target names for inactive config. */
virBufferEscapeString(buf, " <target dev='%s'/>\n",
def->ifname);
+ }
if (def->model) {
virBufferEscapeString(buf, " <model type='%s'/>\n",
def->model);
break;
}
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
}
virBufferAsprintf(buf, " <smartcard mode='%s'", mode);
switch (def->type) {
case VIR_DOMAIN_SMARTCARD_TYPE_HOST:
- if (!virDomainDeviceInfoIsSet(&def->info)) {
+ if (!virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, "/>\n");
return 0;
}
virBufferAsprintf(buf, " <sound model='%s'",
model);
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
virBufferAsprintf(buf, " <memballoon model='%s'",
model);
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
virBufferAsprintf(buf, " <watchdog model='%s' action='%s'",
model, action);
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
virBufferAsprintf(buf, " <input type='%s' bus='%s'",
type, bus);
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
if (def->seclabel.type == VIR_DOMAIN_SECLABEL_DYNAMIC &&
!def->seclabel.baselabel &&
(flags & VIR_DOMAIN_XML_INACTIVE)) {
- virBufferAsprintf(&buf, " <seclabel type='%s' model='%s' relabel='%s'/>\n",
- sectype, def->seclabel.model,
- def->seclabel.norelabel ? "no" : "yes");
+ /* This is the default for inactive xml, so nothing to output. */
} else {
virBufferAsprintf(&buf, " <seclabel type='%s' model='%s' relabel='%s'>\n",
sectype, def->seclabel.model,