]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* src/libvir.c src/xen_internal.c src/xen_internal.h: implement
authorDaniel Veillard <veillard@redhat.com>
Thu, 8 Dec 2005 17:16:24 +0000 (17:16 +0000)
committerDaniel Veillard <veillard@redhat.com>
Thu, 8 Dec 2005 17:16:24 +0000 (17:16 +0000)
  Pause, Resume, Destroy, but untested yet.
Daniel

ChangeLog
src/libvir.c
src/xen_internal.c
src/xen_internal.h

index d17e1b6d98ec43b43b16de9b7fdcd2002d6e0e46..d8c4087cb3b651b3a935850d2840227120b3c79c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Dec  8 18:16:20 CET 2005 Daniel Veillard <veillard@redhat.com>
+
+       * src/libvir.c src/xen_internal.c src/xen_internal.h: implement
+         Pause, Resume, Destroy, but untested yet.
+
 Thu Dec  8 17:43:11 CET 2005 Daniel Veillard <veillard@redhat.com>
 
        * include/libvir.h src/libvir.c src/libvir_sym.version: adding
index d846e03699183ec25fc1491a6ea71d38c6a6f5c3..a2c9fabfa3432e01a876f6e12827afa5795ca563 100644 (file)
@@ -538,9 +538,15 @@ virDomainLookupByID(virConnectPtr conn, int id) {
  */
 int
 virDomainDestroy(virDomainPtr domain) {
+    int ret;
+
     if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC))
         return(-1);
-    TODO
+    if ((domain->conn == NULL) || (domain->conn->magic != VIR_CONNECT_MAGIC))
+        return(-1);
+    ret = xenHypervisorDestroyDomain(domain->conn->handle, domain->handle);
+    if (ret < 0)
+        return(-1);
     
     return(virDomainFree(domain));
 }
@@ -583,8 +589,9 @@ int
 virDomainSuspend(virDomainPtr domain) {
     if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC))
         return(-1);
-    TODO
-    return(-1);
+    if ((domain->conn == NULL) || (domain->conn->magic != VIR_CONNECT_MAGIC))
+        return(-1);
+    return(xenHypervisorPauseDomain(domain->conn->handle, domain->handle));
 }
 
 /**
@@ -600,8 +607,9 @@ int
 virDomainResume(virDomainPtr domain) {
     if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC))
         return(-1);
-    TODO
-    return(-1);
+    if ((domain->conn == NULL) || (domain->conn->magic != VIR_CONNECT_MAGIC))
+        return(-1);
+    return(xenHypervisorResumeDomain(domain->conn->handle, domain->handle));
 }
 
 /**
index 0119dac544cebcda38eb32af30b915ec322b2861..2d085963fadcbf6f7e9595da3a0c7ecff0eb6369 100644 (file)
@@ -177,3 +177,75 @@ xenHypervisorGetDomainInfo(int handle, int domain, dom0_getdomaininfo_t *info) {
     return(0);
 }
 
+/**
+ * xenHypervisorPauseDomain:
+ * @handle: the handle to the Xen hypervisor
+ * @domain: the domain ID
+ *
+ * Do an hypervisor call to pause the given domain
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+int
+xenHypervisorPauseDomain(int handle, int domain) {
+    dom0_op_t op;
+    int ret;
+
+    op.cmd = DOM0_PAUSEDOMAIN;
+    op.u.pausedomain.domain = (domid_t) domain;
+
+    ret = xenHypervisorDoOp(handle, &op);
+
+    if (ret < 0)
+        return(-1);
+    return(0);
+}
+
+/**
+ * xenHypervisorResumeDomain:
+ * @handle: the handle to the Xen hypervisor
+ * @domain: the domain ID
+ *
+ * Do an hypervisor call to resume the given domain
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+int
+xenHypervisorResumeDomain(int handle, int domain) {
+    dom0_op_t op;
+    int ret;
+
+    op.cmd = DOM0_UNPAUSEDOMAIN;
+    op.u.unpausedomain.domain = (domid_t) domain;
+
+    ret = xenHypervisorDoOp(handle, &op);
+
+    if (ret < 0)
+        return(-1);
+    return(0);
+}
+
+/**
+ * xenHypervisorDestroyDomain:
+ * @handle: the handle to the Xen hypervisor
+ * @domain: the domain ID
+ *
+ * Do an hypervisor call to destroy the given domain
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+int
+xenHypervisorDestroyDomain(int handle, int domain) {
+    dom0_op_t op;
+    int ret;
+
+    op.cmd = DOM0_DESTROYDOMAIN;
+    op.u.destroydomain.domain = (domid_t) domain;
+
+    ret = xenHypervisorDoOp(handle, &op);
+
+    if (ret < 0)
+        return(-1);
+    return(0);
+}
+
index ac40a5f4b38750878e7cd5e02f8060dc267fa6ed..2d04e9e4ce443a305ba7fc9c63da5482c56d404d 100644 (file)
@@ -23,6 +23,12 @@ extern "C" {
 int            xenHypervisorOpen               (void);
 int            xenHypervisorClose              (int handle);
 unsigned long  xenHypervisorGetVersion         (int handle);
+int            xenHypervisorDestroyDomain      (int handle,
+                                                int domain);
+int            xenHypervisorResumeDomain       (int handle,
+                                                int domain);
+int            xenHypervisorPauseDomain        (int handle,
+                                                int domain);
 int            xenHypervisorGetDomainInfo      (int handle,
                                                 int domain,
                                                 dom0_getdomaininfo_t *info);