From: Daniel Veillard Date: Thu, 8 Dec 2005 17:16:24 +0000 (+0000) Subject: * src/libvir.c src/xen_internal.c src/xen_internal.h: implement X-Git-Tag: LIBVIR_0_0_1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6be439c983e9be0d931dcf56ec5e5341ccb0a3cd;p=thirdparty%2Flibvirt.git * src/libvir.c src/xen_internal.c src/xen_internal.h: implement Pause, Resume, Destroy, but untested yet. Daniel --- diff --git a/ChangeLog b/ChangeLog index d17e1b6d98..d8c4087cb3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Dec 8 18:16:20 CET 2005 Daniel Veillard + + * 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 * include/libvir.h src/libvir.c src/libvir_sym.version: adding diff --git a/src/libvir.c b/src/libvir.c index d846e03699..a2c9fabfa3 100644 --- a/src/libvir.c +++ b/src/libvir.c @@ -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)); } /** diff --git a/src/xen_internal.c b/src/xen_internal.c index 0119dac544..2d085963fa 100644 --- a/src/xen_internal.c +++ b/src/xen_internal.c @@ -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); +} + diff --git a/src/xen_internal.h b/src/xen_internal.h index ac40a5f4b3..2d04e9e4ce 100644 --- a/src/xen_internal.h +++ b/src/xen_internal.h @@ -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);