char *type = virXMLPropString(node, "type");
char *address = virXMLPropString(node, "address");
char *network = virXMLPropString(node, "network");
+ char *fromConfig = virXMLPropString(node, "fromConfig");
+ int tmp;
if (!type) {
virReportError(VIR_ERR_XML_ERROR, "%s",
network = NULL;
}
+ if (fromConfig &&
+ flags & VIR_DOMAIN_XML_INTERNAL_STATUS) {
+ if (virStrToLong_i(fromConfig, NULL, 10, &tmp) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid fromConfig value: %s"),
+ fromConfig);
+ goto error;
+ }
+ def->fromConfig = tmp != 0;
+ }
+
ret = 0;
error:
if (ret < 0)
VIR_FREE(type);
VIR_FREE(address);
VIR_FREE(network);
+ VIR_FREE(fromConfig);
return ret;
}
virDomainGraphicsListenDefPtr def,
unsigned int flags)
{
+ /* If generating migratable XML, skip listen address
+ * dragged in from config file */
+ if ((flags & VIR_DOMAIN_XML_MIGRATABLE) && def->fromConfig)
+ return;
+
virBufferAddLit(buf, " <listen");
if (def->type) {
virBufferEscapeString(buf, " network='%s'", def->network);
}
+ if (flags & VIR_DOMAIN_XML_INTERNAL_STATUS)
+ virBufferAsprintf(buf, " fromConfig='%d'", def->fromConfig);
+
virBufferAddLit(buf, "/>\n");
}
for (i = 0; i < def->nListens; i++) {
if (virDomainGraphicsListenGetType(def, i)
== VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {
+ if (flags & VIR_DOMAIN_XML_MIGRATABLE &&
+ def->listens[i].fromConfig)
+ continue;
listenAddr = virDomainGraphicsListenGetAddress(def, i);
break;
}
if (virDomainGraphicsListenGetType(def, i)
== VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE)
continue;
+ if (flags & VIR_DOMAIN_XML_MIGRATABLE &&
+ def->listens[i].fromConfig)
+ continue;
if (!children) {
virBufferAddLit(buf, ">\n");
children = true;