]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
api: Add public api for 'reset'
authorXu He Jie <xuhj@linux.vnet.ibm.com>
Thu, 29 Sep 2011 08:53:29 +0000 (16:53 +0800)
committerEric Blake <eblake@redhat.com>
Thu, 29 Sep 2011 12:52:42 +0000 (06:52 -0600)
Add new public api for 'reset'.
It can reset domain immediately without any guest shutdown.

Signed-off-by: Xu He Jie <xuhj@linux.vnet.ibm.com>
include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index afeb83fe79913cb0d19efb00a81a9a142375385d..a3c581db972f0321c6d1a78cf9a61f5741faebe4 100644 (file)
@@ -1031,6 +1031,9 @@ virDomainPtr            virDomainLookupByUUIDString     (virConnectPtr conn,
 int                     virDomainShutdown       (virDomainPtr domain);
 int                     virDomainReboot         (virDomainPtr domain,
                                                  unsigned int flags);
+int                     virDomainReset          (virDomainPtr domain,
+                                                 unsigned int flags);
+
 int                     virDomainDestroy        (virDomainPtr domain);
 int                     virDomainDestroyFlags   (virDomainPtr domain,
                                                  unsigned int flags);
index 7dcab8f68e4c28a55d273408833f5b3a10c8460f..f85a1b1fe326bbc31dccd903ec40f6919dd5410b 100644 (file)
@@ -123,6 +123,9 @@ typedef int
 typedef int
         (*virDrvDomainReboot)          (virDomainPtr domain,
                                          unsigned int flags);
+typedef int
+        (*virDrvDomainReset)        (virDomainPtr domain,
+                                         unsigned int flags);
 typedef int
         (*virDrvDomainDestroy)         (virDomainPtr domain);
 typedef int
@@ -759,6 +762,7 @@ struct _virDriver {
     virDrvDomainResume         domainResume;
     virDrvDomainShutdown               domainShutdown;
     virDrvDomainReboot         domainReboot;
+    virDrvDomainReset       domainReset;
     virDrvDomainDestroy                domainDestroy;
     virDrvDomainDestroyFlags    domainDestroyFlags;
     virDrvDomainGetOSType              domainGetOSType;
index 38fcfbc0a827415b4ff71056c60f25f0985f9dc4..9080b2f7bf722bb2a8033e0df16a90356b331ea3 100644 (file)
@@ -3016,6 +3016,56 @@ error:
     return -1;
 }
 
+/**
+ * virDomainReset:
+ * @domain: a domain object
+ * @flags: extra flags for the reboot operation, not used yet
+ *
+ * Reset a domain immediately without any guest OS shutdown.
+ * Reset emulates the power reset button on a machine, where all
+ * hardware sees the RST line set and reinitializes internal state.
+ *
+ * Note that there is a risk of data loss caused by reset without any
+ * guest OS shutdown.
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virDomainReset(virDomainPtr domain, unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "flags=%x", flags);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+    if (domain->conn->flags & VIR_CONNECT_RO) {
+        virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+        goto error;
+    }
+
+    conn = domain->conn;
+
+    if (conn->driver->domainReset) {
+        int ret;
+        ret = conn->driver->domainReset (domain, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(domain->conn);
+    return -1;
+}
+
 /**
  * virDomainGetName:
  * @domain: a domain object
index cef14f03e5f2b92657a7eb9b0c42eee25608a558..afea29ba44ac926f189e73c66d880ca0a5e33e26 100644 (file)
@@ -491,6 +491,7 @@ LIBVIRT_0.9.5 {
 
 LIBVIRT_0.9.7 {
     global:
+        virDomainReset;
         virDomainSnapshotGetParent;
 } LIBVIRT_0.9.5;