mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Connect up domain destroy, suspend, resume, reboot, shutdown methods to driver backends
This commit is contained in:
parent
037f413e4e
commit
5cc5f540f0
@ -1,3 +1,9 @@
|
|||||||
|
Wed Jun 14 11:20:23 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
* src/libvirt.c: connect virDomainDestroy, virDomainSuspend,
|
||||||
|
virDomainResume, virDomainShutdown & virDomainReboot to the
|
||||||
|
driver backends.
|
||||||
|
|
||||||
Wed Jun 14 15:51:00 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
Wed Jun 14 15:51:00 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* src/libvirt.c src/xend_internal.c src/xend_internal.h: cleaned up
|
* src/libvirt.c src/xend_internal.c src/xend_internal.h: cleaned up
|
||||||
|
159
src/libvirt.c
159
src/libvirt.c
@ -847,28 +847,35 @@ virDomainLookupByName(virConnectPtr conn, const char *name)
|
|||||||
int
|
int
|
||||||
virDomainDestroy(virDomainPtr domain)
|
virDomainDestroy(virDomainPtr domain)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1, i;
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
conn = domain->conn;
|
||||||
* try first with the xend method
|
#if PEDANTIC
|
||||||
*/
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
ret = xenDaemonDomainDestroy(domain);
|
return (-1);
|
||||||
if (ret == 0) {
|
#endif
|
||||||
virDomainFree(domain);
|
|
||||||
return (0);
|
/* Go though the driver registered entry points */
|
||||||
|
for (i = 0;i < conn->nb_drivers;i++) {
|
||||||
|
if ((conn->drivers[i] != NULL) &&
|
||||||
|
(conn->drivers[i]->domainDestroy != NULL)) {
|
||||||
|
if (conn->drivers[i]->domainDestroy(domain) == 0)
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = xenHypervisorDestroyDomain(domain);
|
if (ret != 0) {
|
||||||
if (ret < 0)
|
virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
|
||||||
return (-1);
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
virDomainFree(domain);
|
return (ret);
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -907,20 +914,35 @@ virDomainFree(virDomainPtr domain)
|
|||||||
int
|
int
|
||||||
virDomainSuspend(virDomainPtr domain)
|
virDomainSuspend(virDomainPtr domain)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1, i;
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* first try though the Xen daemon */
|
conn = domain->conn;
|
||||||
ret = xenDaemonDomainSuspend(domain);
|
#if PEDANTIC
|
||||||
if (ret == 0)
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
return (0);
|
return (-1);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* then try a direct hypervisor access */
|
/* Go though the driver registered entry points */
|
||||||
return (xenHypervisorPauseDomain(domain));
|
for (i = 0;i < conn->nb_drivers;i++) {
|
||||||
|
if ((conn->drivers[i] != NULL) &&
|
||||||
|
(conn->drivers[i]->domainSuspend != NULL)) {
|
||||||
|
if (conn->drivers[i]->domainSuspend(domain) == 0)
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret != 0) {
|
||||||
|
virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -936,20 +958,35 @@ virDomainSuspend(virDomainPtr domain)
|
|||||||
int
|
int
|
||||||
virDomainResume(virDomainPtr domain)
|
virDomainResume(virDomainPtr domain)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1, i;
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* first try though the Xen daemon */
|
conn = domain->conn;
|
||||||
ret = xenDaemonDomainResume(domain);
|
#if PEDANTIC
|
||||||
if (ret == 0)
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
return (0);
|
return (-1);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* then try a direct hypervisor access */
|
/* Go though the driver registered entry points */
|
||||||
return (xenHypervisorResumeDomain(domain));
|
for (i = 0;i < conn->nb_drivers;i++) {
|
||||||
|
if ((conn->drivers[i] != NULL) &&
|
||||||
|
(conn->drivers[i]->domainResume != NULL)) {
|
||||||
|
if (conn->drivers[i]->domainResume(domain) == 0)
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret != 0) {
|
||||||
|
virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1066,30 +1103,34 @@ virDomainRestore(virConnectPtr conn, const char *from)
|
|||||||
int
|
int
|
||||||
virDomainShutdown(virDomainPtr domain)
|
virDomainShutdown(virDomainPtr domain)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1, i;
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
conn = domain->conn;
|
||||||
* try first with the xend daemon
|
#if PEDANTIC
|
||||||
*/
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
ret = xenDaemonDomainShutdown(domain);
|
return (-1);
|
||||||
if (ret == 0) {
|
#endif
|
||||||
domain->flags |= DOMAIN_IS_SHUTDOWN;
|
|
||||||
return (0);
|
/* Go though the driver registered entry points */
|
||||||
|
for (i = 0;i < conn->nb_drivers;i++) {
|
||||||
|
if ((conn->drivers[i] != NULL) &&
|
||||||
|
(conn->drivers[i]->domainShutdown != NULL)) {
|
||||||
|
if (conn->drivers[i]->domainShutdown(domain) == 0)
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (ret != 0) {
|
||||||
* this is very hackish, the domU kernel probes for a special
|
virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
|
||||||
* node in the xenstore and launch the shutdown command if found.
|
return (ret);
|
||||||
*/
|
|
||||||
ret = xenDaemonDomainShutdown(domain);
|
|
||||||
if (ret == 0) {
|
|
||||||
domain->flags |= DOMAIN_IS_SHUTDOWN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1107,30 +1148,34 @@ virDomainShutdown(virDomainPtr domain)
|
|||||||
int
|
int
|
||||||
virDomainReboot(virDomainPtr domain, unsigned int flags)
|
virDomainReboot(virDomainPtr domain, unsigned int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1, i;
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
conn = domain->conn;
|
||||||
* try first with the xend daemon
|
#if PEDANTIC
|
||||||
*/
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
ret = xenDaemonDomainReboot(domain, flags);
|
return (-1);
|
||||||
if (ret == 0) {
|
#endif
|
||||||
domain->flags |= DOMAIN_IS_SHUTDOWN;
|
|
||||||
return (0);
|
/* Go though the driver registered entry points */
|
||||||
|
for (i = 0;i < conn->nb_drivers;i++) {
|
||||||
|
if ((conn->drivers[i] != NULL) &&
|
||||||
|
(conn->drivers[i]->domainReboot != NULL)) {
|
||||||
|
if (conn->drivers[i]->domainReboot(domain, flags) == 0)
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (ret != 0) {
|
||||||
* this is very hackish, the domU kernel probes for a special
|
virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
|
||||||
* node in the xenstore and launch the shutdown command if found.
|
return (ret);
|
||||||
*/
|
|
||||||
ret = xenDaemonDomainReboot(domain, flags);
|
|
||||||
if (ret == 0) {
|
|
||||||
domain->flags |= DOMAIN_IS_SHUTDOWN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user