On 07/22/2011 12:21 AM, Eric Blake wrote:
Noticed by comparing the xml generated by virDomainSave with the
xml produced by reparsing and redumping that xml.
* src/conf/domain_conf.c (virDomainDeviceInfoIsSet): Add
parameter, and update all callers. Make static.
(virDomainNetDefFormat): Skip generated ifname.
* src/conf/domain_conf.h (virDomainDeviceInfoIsSet): Delete.
* src/libvirt_private.syms (domain_conf.h): Update.
---
Sending this now, to get review started, but I still have some
more fixing to do - right now, active domains still include:
+<seclabel type='dynamic' model='selinux' relabel='yes'/>
which is not present on reparse, but I'm too tired to find out why.
I know the feeling :-)
So does it turn out that this is important, or not?
src/conf/domain_conf.c | 26 ++++++++++++++++----------
src/conf/domain_conf.h | 1 -
src/libvirt_private.syms | 1 -
3 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 919a75a..52e8ada 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1388,11 +1388,12 @@ int virDomainDeviceVirtioSerialAddressIsValid(
}
-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;
}
@@ -8580,7 +8581,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
break;
}
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf,&def->info, flags)< 0)
return -1;
@@ -8806,9 +8807,14 @@ virDomainNetDefFormat(virBufferPtr buf,
break;
}
- if (def->ifname)
+
+ if (def->ifname&&
+ !((flags& VIR_DOMAIN_XML_INACTIVE)&&
+ (STRPREFIX(def->ifname, "vnet")))) {
+ /* Skip auto-generated target names for inactive config. */
It's kind of bothersome that use of this magic device name prefix isn't
self-contained in domain_conf.c (or somewhere else). Perhaps the string
could be defined in domain_conf.h, then used here and in qemu_command.c
(is it used any place else?).
Aside from that bit of ugliness, ACK. (And I could live with this. at
least temporarily, as well, although making all the places work off a
single string constant might hypothetically save someone lots of
frustration in some uncharted future.)
virBufferEscapeString(buf, "<target
dev='%s'/>\n",
def->ifname);
+ }
if (def->model) {
virBufferEscapeString(buf, "<model type='%s'/>\n",
def->model);
@@ -9041,7 +9047,7 @@ virDomainChrDefFormat(virBufferPtr buf,
break;
}
- if (virDomainDeviceInfoIsSet(&def->info)) {
+ if (virDomainDeviceInfoIsSet(&def->info, flags)) {
if (virDomainDeviceInfoFormat(buf,&def->info, flags)< 0)
return -1;
}
@@ -9069,7 +9075,7 @@ virDomainSmartcardDefFormat(virBufferPtr buf,
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;
}
@@ -9119,7 +9125,7 @@ virDomainSoundDefFormat(virBufferPtr buf,
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;
@@ -9148,7 +9154,7 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
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;
@@ -9197,7 +9203,7 @@ virDomainWatchdogDefFormat(virBufferPtr buf,
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;
@@ -9280,7 +9286,7 @@ virDomainInputDefFormat(virBufferPtr buf,
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;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 551946b..b97a57a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1388,7 +1388,6 @@ int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
int virDomainDevicePCIAddressIsValid(virDomainDevicePCIAddressPtr addr);
int virDomainDeviceDriveAddressIsValid(virDomainDeviceDriveAddressPtr addr);
int virDomainDeviceVirtioSerialAddressIsValid(virDomainDeviceVirtioSerialAddressPtr
addr);
-int virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info);
void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
void virDomainDefClearPCIAddresses(virDomainDefPtr def);
void virDomainDefClearDeviceAliases(virDomainDefPtr def);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index e7d2579..3996efa 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -267,7 +267,6 @@ virDomainDeviceAddressIsValid;
virDomainDeviceAddressTypeToString;
virDomainDeviceDefFree;
virDomainDeviceDefParse;
-virDomainDeviceInfoIsSet;
virDomainDeviceInfoIterate;
virDomainDevicePCIAddressIsValid;
virDomainDeviceTypeToString;