#include "locking/domain_lock.h"
#include "virdomainsnapshotobjlist.h"
#include "virdomaincheckpointobjlist.h"
+#include "backup_conf.h"
#ifdef MAJOR_IN_MKDEV
# include <sys/mkdev.h>
priv->pflash0 = NULL;
virObjectUnref(priv->pflash1);
priv->pflash1 = NULL;
+
+ virDomainBackupDefFree(priv->backup);
+ priv->backup = NULL;
}
}
+static int
+qemuDomainObjPrivateXMLFormatBackups(virBufferPtr buf,
+ virDomainObjPtr vm)
+{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
+
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP))
+ return 0;
+
+ if (priv->backup &&
+ virDomainBackupDefFormat(&childBuf, priv->backup, true) < 0)
+ return -1;
+
+ virXMLFormatElement(buf, "backups", &attrBuf, &childBuf);
+ return 0;
+}
+
+
void
qemuDomainObjPrivateXMLFormatAllowReboot(virBufferPtr buf,
virTristateBool allowReboot)
virBufferAsprintf(buf, "<agentTimeout>%i</agentTimeout>\n", priv->agentTimeout);
+ if (qemuDomainObjPrivateXMLFormatBackups(buf, vm) < 0)
+ return -1;
+
return 0;
}
}
+static int
+qemuDomainObjPrivateXMLParseBackups(qemuDomainObjPrivatePtr priv,
+ xmlXPathContextPtr ctxt)
+{
+ g_autofree xmlNodePtr *nodes = NULL;
+ ssize_t nnodes = 0;
+
+ if ((nnodes = virXPathNodeSet("./backups/domainbackup", ctxt, &nodes)) < 0)
+ return -1;
+
+ if (nnodes > 1) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("only one backup job is supported"));
+ return -1;
+ }
+
+ if (nnodes == 0)
+ return 0;
+
+ if (!(priv->backup = virDomainBackupDefParseNode(ctxt->doc, nodes[0],
+ priv->driver->xmlopt,
+ VIR_DOMAIN_BACKUP_PARSE_INTERNAL)))
+ return -1;
+
+ return 0;
+}
+
+
int
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
virTristateBool *allowReboot)
if (qemuDomainObjPrivateXMLParseBlockjobs(vm, priv, ctxt) < 0)
goto error;
+ if (qemuDomainObjPrivateXMLParseBackups(priv, ctxt) < 0)
+ goto error;
+
qemuDomainStorageIdReset(priv);
if (virXPathULongLong("string(./nodename/@index)", ctxt,
&priv->nodenameindex) == -2) {