Define the required interfaces to export the API.

Signed-off-by: Srivatsa S. Bhat <srivatsa.b...@linux.vnet.ibm.com>
---

 include/libvirt/libvirt.h.in |    4 ++++
 src/driver.h                 |    5 ++++
 src/libvirt.c                |   48 ++++++++++++++++++++++++++++++++++++++++++
 src/libvirt_public.syms      |    1 +
 src/qemu/qemu_driver.c       |    1 +
 src/remote/remote_driver.c   |    1 +
 src/remote/remote_protocol.x |   12 ++++++++++-
 7 files changed, 71 insertions(+), 1 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 25f1c9b..809a1fd 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1055,6 +1055,10 @@ unsigned long long      virNodeGetFreeMemory    
(virConnectPtr conn);
 int                     virNodeGetSecurityModel (virConnectPtr conn,
                                                  virSecurityModelPtr secmodel);
 
+int                     virNodeSuspendForDuration (virConnectPtr conn,
+                                                   int state,
+                                                   unsigned long long 
duration);
+
 /*
  * Gather list of running domains
  */
diff --git a/src/driver.h b/src/driver.h
index 4c14aaa..981bfae 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -740,6 +740,10 @@ typedef int
     (*virDrvDomainBlockPull)(virDomainPtr dom, const char *path,
                              unsigned long bandwidth, unsigned int flags);
 
+typedef int
+    (*virDrvNodeSuspendForDuration)(virConnectPtr conn, int state,
+                                    unsigned long long duration);
+
 
 /**
  * _virDriver:
@@ -899,6 +903,7 @@ struct _virDriver {
     virDrvDomainGetBlockJobInfo domainGetBlockJobInfo;
     virDrvDomainBlockJobSetSpeed domainBlockJobSetSpeed;
     virDrvDomainBlockPull domainBlockPull;
+    virDrvNodeSuspendForDuration nodeSuspendForDuration;
 };
 
 typedef int
diff --git a/src/libvirt.c b/src/libvirt.c
index b0d1e01..fc4575a 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -6303,6 +6303,54 @@ error:
 }
 
 /**
+ * virNodeSuspendForDuration:
+ * @conn: pointer to the hypervisor connection
+ * @state: the state to which the host must be suspended to,
+ *         such as: VIR_S3 (Suspend-to-RAM)
+ *                  VIR_S4 (Suspend-to-Disk)
+ * @duration: the time duration in seconds, for which the host
+ *            has to be suspended
+ *
+ * Suspend the node (host machine) for the given duration of time
+ * in the specified state (such as S3 or S4). Resume the node
+ * after the time duration is complete.
+ *
+ * Returns 0 on success (i.e., the node will be suspended after a
+ * short delay), -1 on failure (the operation is not supported).
+ */
+int
+virNodeSuspendForDuration(virConnectPtr conn,
+                          int state,
+                          unsigned long long duration)
+{
+
+    VIR_DEBUG("conn=%p, state=%d, duration=%lld", conn, state, duration);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECT(conn)) {
+        virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    if (conn->driver->nodeSuspendForDuration) {
+        int ret;
+        ret = conn->driver->nodeSuspendForDuration(conn, state, duration);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(conn);
+    return -1;
+}
+
+
+/**
  * virDomainGetSchedulerType:
  * @domain: pointer to domain object
  * @nparams: pointer to number of scheduler parameters, can be NULL
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index bcefb10..fd44170 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -478,6 +478,7 @@ LIBVIRT_0.9.4 {
         virDomainGetBlockJobInfo;
         virDomainBlockJobSetSpeed;
         virDomainBlockPull;
+        virNodeSuspendForDuration;
 } LIBVIRT_0.9.3;
 
 LIBVIRT_0.9.5 {
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index b4dc582..f744539 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -10911,6 +10911,7 @@ static virDriver qemuDriver = {
     .domainGetBlockJobInfo = qemuDomainGetBlockJobInfo, /* 0.9.4 */
     .domainBlockJobSetSpeed = qemuDomainBlockJobSetSpeed, /* 0.9.4 */
     .domainBlockPull = qemuDomainBlockPull, /* 0.9.4 */
+    .nodeSuspendForDuration = nodeSuspendForDuration, /* 0.9.7 */
 };
 
 
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index f3b8ad5..2f6b29a 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -4526,6 +4526,7 @@ static virDriver remote_driver = {
     .domainGetBlockJobInfo = remoteDomainGetBlockJobInfo, /* 0.9.4 */
     .domainBlockJobSetSpeed = remoteDomainBlockJobSetSpeed, /* 0.9.4 */
     .domainBlockPull = remoteDomainBlockPull, /* 0.9.4 */
+    .nodeSuspendForDuration = remoteNodeSuspendForDuration, /* 0.9.7 */
 };
 
 static virNetworkDriver network_driver = {
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index a174af8..5c21421 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -2267,6 +2267,15 @@ struct remote_domain_open_graphics_args {
     unsigned int flags;
 };
 
+struct remote_node_suspend_for_duration_args {
+    int state;
+    unsigned hyper duration;
+};
+
+struct remote_node_suspend_for_duration_ret {
+    int status;
+};
+
 /*----- Protocol. -----*/
 
 /* Define the program number, protocol version and procedure numbers here. */
@@ -2562,7 +2571,8 @@ enum remote_procedure {
     REMOTE_PROC_DOMAIN_SNAPSHOT_NUM_CHILDREN = 246, /* autogen autogen 
priority:high */
     REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_CHILDREN_NAMES = 247, /* autogen autogen 
priority:high */
     REMOTE_PROC_DOMAIN_EVENT_DISK_CHANGE = 248, /* skipgen skipgen */
-    REMOTE_PROC_DOMAIN_OPEN_GRAPHICS = 249 /* skipgen skipgen */
+    REMOTE_PROC_DOMAIN_OPEN_GRAPHICS = 249, /* skipgen skipgen */
+    REMOTE_PROC_NODE_SUSPEND_FOR_DURATION = 250 /* autogen autogen */
 
     /*
      * Notice how the entries are grouped in sets of 10 ?

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to