From aa98871c777d0ac2fea206b323afbe69827a47cd Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 17 Jul 2009 22:08:33 +0100 Subject: [PATCH] Add internal XML parsing/formatting flag We need to store things like device names and PCI slot numbers in the qemu domain state file so that we don't lose that information on libvirtd restart. Add a flag to indicate that this information should be parsed or formatted. Make bit 16 and above of the flags bitmask for internal use only and consume the first bit for this new status flag. * include/libvirt/libvirt.h: add VIR_DOMAIN_XML_FLAGS_MASK * src/libvirt.c: reject private flags in virDomainGetXMLDesc() * src/domain_conf.h: add VIR_DOMAIN_XML_INTERNAL_STATUS * src/domain_conf.c: pass the flag from virDomainObjParseXML() and virDomainSaveStatus --- src/domain_conf.c | 8 ++++---- src/domain_conf.h | 5 +++++ src/libvirt.c | 2 ++ src/libvirt_internal.h | 2 ++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/domain_conf.c b/src/domain_conf.c index f3e4c6c39c..10e6ac6183 100644 --- a/src/domain_conf.c +++ b/src/domain_conf.c @@ -2896,7 +2896,8 @@ static virDomainObjPtr virDomainObjParseXML(virConnectPtr conn, oldnode = ctxt->node; ctxt->node = config; - obj->def = virDomainDefParseXML(conn, caps, ctxt, 0); + obj->def = virDomainDefParseXML(conn, caps, ctxt, + VIR_DOMAIN_XML_INTERNAL_STATUS); ctxt->node = oldnode; if (!obj->def) goto error; @@ -4277,12 +4278,11 @@ int virDomainSaveStatus(virConnectPtr conn, const char *statusDir, virDomainObjPtr obj) { + int flags = VIR_DOMAIN_XML_SECURE|VIR_DOMAIN_XML_INTERNAL_STATUS; int ret = -1; char *xml; - if (!(xml = virDomainObjFormat(conn, - obj, - VIR_DOMAIN_XML_SECURE))) + if (!(xml = virDomainObjFormat(conn, obj, flags))) goto cleanup; if (virDomainSaveXML(conn, statusDir, obj->def, xml)) diff --git a/src/domain_conf.h b/src/domain_conf.h index 6e111fa24e..69b665f49f 100644 --- a/src/domain_conf.h +++ b/src/domain_conf.h @@ -33,6 +33,11 @@ #include "util.h" #include "threads.h" +/* Private component of virDomainXMLFlags */ +typedef enum { + VIR_DOMAIN_XML_INTERNAL_STATUS = (1<<16), /* dump internal domain status information */ +} virDomainXMLInternalFlags; + /* Different types of hypervisor */ /* NB: Keep in sync with virDomainVirtTypeToString impl */ enum virDomainVirtType { diff --git a/src/libvirt.c b/src/libvirt.c index 8ee7741a5f..7463c06f5c 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -2726,6 +2726,8 @@ virDomainGetXMLDesc(virDomainPtr domain, int flags) goto error; } + flags &= VIR_DOMAIN_XML_FLAGS_MASK; + if (conn->driver->domainDumpXML) { char *ret; ret = conn->driver->domainDumpXML (domain, flags); diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 8800eb904d..6976f34657 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -24,6 +24,8 @@ #include "internal.h" +/* bits 16 and above of virDomainXMLFlags are for internal use */ +#define VIR_DOMAIN_XML_FLAGS_MASK 0xffff #ifdef WITH_LIBVIRTD int virStateInitialize(int privileged);