---
include/libvirt/libvirt.h.in | 4 +++
src/libvirt.c | 49 ++++++++++++++++++++++++++++++++++++++++++
src/libvirt_public.syms | 5 ++++
3 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 0d1b5b5..d983e5f 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -408,6 +408,10 @@ int virDomainMigrateToURI (virDomainPtr domain, const char *duri,
unsigned long flags, const char *dname,
unsigned long bandwidth);
+int virDomainMigrateSetMaxDowntime (virDomainPtr domain,
+ unsigned long long downtime,
+ unsigned int flags);
+
/**
* VIR_NODEINFO_MAXCPUS:
* @nodeinfo: virNodeInfo instance
diff --git a/src/libvirt.c b/src/libvirt.c
index 1d9b878..07837a3 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -11265,3 +11265,52 @@ error:
virDispatchError(conn);
return -1;
}
+
+
+/**
+ * virDomainMigrateSetMaxDowntime:
+ * @domain: a domain object
+ * @downtime: maximum tolerable downtime for live migration, in nanoseconds
+ * @flags: fine-tuning flags, currently unused, use 0
+ *
+ * Sets maximum tolerable time for which the domain is allowed to be paused
+ * at the end of live migration. It's supposed to be called while the domain is
+ * being live-migrated as a reaction to migration progress.
+ *
+ * Returns 0 in case of success, -1 otherwise.
+ */
+int
+virDomainMigrateSetMaxDowntime(virDomainPtr domain,
+ unsigned long long downtime,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+
+ DEBUG("domain=%p, downtime=%llu, flags=%u", domain, downtime, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+ virDispatchError(NULL);
+ return -1;
+ }
+
+ conn = domain->conn;
+ if (conn->flags & VIR_CONNECT_RO) {
+ virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ goto error;
+ }
+
+ if (conn->driver->domainMigrateSetMaxDowntime) {
+ if (conn->driver->domainMigrateSetMaxDowntime(domain, downtime, flags) <
0)
+ goto error;
+ return 0;
+ }
+
+ virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ virDispatchError(conn);
+ return -1;
+}
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 64e7505..6ed79d0 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -358,4 +358,9 @@ LIBVIRT_0.7.7 {
virDomainAbortJob;
} LIBVIRT_0.7.5;
+LIBVIRT_0.7.8 {
+ global:
+ virDomainMigrateSetMaxDowntime;
+} LIBVIRT_0.7.7;
+
# .... define new API here using predicted next version number ....
--
1.7.0.2