From 57a18198814f80b1397e1a14d33746034b9dbd5c Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 23 Feb 2007 08:51:30 +0000 Subject: [PATCH] Fri Feb 23 08:49:12 IST 2007 Mark McLoughlin * include/libvirt/libvirt.h.in, src/libvirt.c add virDomainGetAutostart(), virDomainSetAutostart(), virNetworkGetAutostart() and virNetworkSetAutostart(). * src/libvirt_sym.version: export the API * src/driver.h: add methods to the driver vtables. * src/proxy_internal.c, src/qemu_internal.c, src/test.c, src/xen_internal.c, src/xend_internal.c, src/xm_internal.c, src/xs_internal.c: set those methods to NULL --- ChangeLog | 15 +++++ include/libvirt/libvirt.h | 10 +++ include/libvirt/libvirt.h.in | 10 +++ src/driver.h | 17 +++++ src/libvirt.c | 126 +++++++++++++++++++++++++++++++++++ src/libvirt_sym.version | 4 ++ src/proxy_internal.c | 2 + src/qemu_internal.c | 4 ++ src/test.c | 2 + src/xen_internal.c | 2 + src/xend_internal.c | 4 +- src/xm_internal.c | 2 + src/xs_internal.c | 2 + 13 files changed, 199 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9c07c84b3a..f35871ae16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +Fri Feb 23 08:49:12 IST 2007 Mark McLoughlin + + * include/libvirt/libvirt.h.in, src/libvirt.c add + virDomainGetAutostart(), virDomainSetAutostart(), + virNetworkGetAutostart() and virNetworkSetAutostart(). + + * src/libvirt_sym.version: export the API + + * src/driver.h: add methods to the driver vtables. + + * src/proxy_internal.c, src/qemu_internal.c, + src/test.c, src/xen_internal.c, src/xend_internal.c, + src/xm_internal.c, src/xs_internal.c: set those + methods to NULL + Fri Feb 23 08:41:34 IST 2007 Mark McLoughlin * qemud/conf.[ch]: significantly re-factor qemudLoadConfigXML() diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h index ee28d7f09a..ce24f59fc0 100644 --- a/include/libvirt/libvirt.h +++ b/include/libvirt/libvirt.h @@ -328,6 +328,11 @@ int virConnectListDefinedDomains (virConnectPtr conn, int maxnames); int virDomainCreate (virDomainPtr domain); +int virDomainGetAutostart (virDomainPtr domain, + int *autostart); +int virDomainSetAutostart (virDomainPtr domain, + int autostart); + /** * virVcpuInfo: structure for information about a virtual CPU in a domain. */ @@ -528,6 +533,11 @@ char * virNetworkGetXMLDesc (virNetworkPtr network, int flags); char * virNetworkGetBridgeName (virNetworkPtr network); +int virNetworkGetAutostart (virNetworkPtr network, + int *autostart); +int virNetworkSetAutostart (virNetworkPtr network, + int autostart); + #ifdef __cplusplus } #endif diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index fd46c55209..c5461f8b23 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -328,6 +328,11 @@ int virConnectListDefinedDomains (virConnectPtr conn, int maxnames); int virDomainCreate (virDomainPtr domain); +int virDomainGetAutostart (virDomainPtr domain, + int *autostart); +int virDomainSetAutostart (virDomainPtr domain, + int autostart); + /** * virVcpuInfo: structure for information about a virtual CPU in a domain. */ @@ -528,6 +533,11 @@ char * virNetworkGetXMLDesc (virNetworkPtr network, int flags); char * virNetworkGetBridgeName (virNetworkPtr network); +int virNetworkGetAutostart (virNetworkPtr network, + int *autostart); +int virNetworkSetAutostart (virNetworkPtr network, + int autostart); + #ifdef __cplusplus } #endif diff --git a/src/driver.h b/src/driver.h index 7d79b1132e..082bbf58db 100644 --- a/src/driver.h +++ b/src/driver.h @@ -134,6 +134,12 @@ typedef int typedef int (*virDrvDomainDetachDevice) (virDomainPtr domain, char *xml); +typedef int + (*virDrvDomainGetAutostart) (virDomainPtr domain, + int *autostart); +typedef int + (*virDrvDomainSetAutostart) (virDomainPtr domain, + int autostart); typedef struct _virDriver virDriver; typedef virDriver *virDriverPtr; @@ -183,6 +189,8 @@ struct _virDriver { virDrvDomainUndefine domainUndefine; virDrvDomainAttachDevice domainAttachDevice; virDrvDomainDetachDevice domainDetachDevice; + virDrvDomainGetAutostart domainGetAutostart; + virDrvDomainSetAutostart domainSetAutostart; }; typedef int @@ -219,6 +227,13 @@ typedef char * int flags); typedef char * (*virDrvNetworkGetBridgeName) (virNetworkPtr network); +typedef int + (*virDrvNetworkGetAutostart) (virNetworkPtr network, + int *autostart); +typedef int + (*virDrvNetworkSetAutostart) (virNetworkPtr network, + int autostart); + typedef struct _virNetworkDriver virNetworkDriver; typedef virNetworkDriver *virNetworkDriverPtr; @@ -245,6 +260,8 @@ struct _virNetworkDriver { virDrvNetworkDestroy networkDestroy; virDrvNetworkDumpXML networkDumpXML; virDrvNetworkGetBridgeName networkGetBridgeName; + virDrvNetworkGetAutostart networkGetAutostart; + virDrvNetworkSetAutostart networkSetAutostart; }; diff --git a/src/libvirt.c b/src/libvirt.c index 50f1c5d8d4..76f9a02e26 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1861,6 +1861,69 @@ virDomainCreate(virDomainPtr domain) { return(ret); } +/** + * virDomainGetAutostart: + * @domain: a domain object + * + * Return a boolean value indicating whether the domain + * configured to be automatically started when the host + * machine boots. + * + * Returns -1 in case of error, 0 in case of success + */ +int +virDomainGetAutostart(virDomainPtr domain, + int *autostart) { + int i; + + if (!VIR_IS_DOMAIN(domain)) { + virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + return (-1); + } + if (!autostart) { + virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__); + return (-1); + } + + for (i = 0;i < domain->conn->nb_drivers;i++) { + if ((domain->conn->drivers[i] != NULL) && + (domain->conn->drivers[i]->domainGetAutostart != NULL) && + (domain->conn->drivers[i]->domainGetAutostart(domain, autostart) == 0)) + return (0); + } + virLibConnError(domain->conn, VIR_ERR_CALL_FAILED, __FUNCTION__); + return (-1); +} + +/** + * virDomainSetAutostart: + * @domain: a domain object + * + * Configure the domain to be automatically started + * when the host machine boots. + * + * Returns -1 in case of error, 0 in case of success + */ +int +virDomainSetAutostart(virDomainPtr domain, + int autostart) { + int i; + + if (!VIR_IS_DOMAIN(domain)) { + virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + return (-1); + } + + for (i = 0;i < domain->conn->nb_drivers;i++) { + if ((domain->conn->drivers[i] != NULL) && + (domain->conn->drivers[i]->domainSetAutostart != NULL) && + (domain->conn->drivers[i]->domainSetAutostart(domain, autostart) == 0)) + return (0); + } + virLibConnError(domain->conn, VIR_ERR_CALL_FAILED, __FUNCTION__); + return (-1); +} + /** * virDomainSetVcpus: * @domain: pointer to domain object, or NULL for Domain0 @@ -2766,3 +2829,66 @@ virNetworkGetBridgeName(virNetworkPtr network) } return(ret); } + +/** + * virNetworkGetAutostart: + * @network: a network object + * + * Return a boolean value indicating whether the network + * configured to be automatically started when the host + * machine boots. + * + * Returns -1 in case of error, 0 in case of success + */ +int +virNetworkGetAutostart(virNetworkPtr network, + int *autostart) { + int i; + + if (!VIR_IS_NETWORK(network)) { + virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); + return (-1); + } + if (!autostart) { + virLibNetworkError(network, VIR_ERR_INVALID_ARG, __FUNCTION__); + return (-1); + } + + for (i = 0;i < network->conn->nb_network_drivers;i++) { + if ((network->conn->networkDrivers[i] != NULL) && + (network->conn->networkDrivers[i]->networkGetAutostart != NULL) && + (network->conn->networkDrivers[i]->networkGetAutostart(network, autostart) == 0)) + return (0); + } + virLibConnError(network->conn, VIR_ERR_CALL_FAILED, __FUNCTION__); + return (-1); +} + +/** + * virNetworkSetAutostart: + * @network: a network object + * + * Configure the network to be automatically started + * when the host machine boots. + * + * Returns -1 in case of error, 0 in case of success + */ +int +virNetworkSetAutostart(virNetworkPtr network, + int autostart) { + int i; + + if (!VIR_IS_NETWORK(network)) { + virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); + return (-1); + } + + for (i = 0;i < network->conn->nb_network_drivers;i++) { + if ((network->conn->networkDrivers[i] != NULL) && + (network->conn->networkDrivers[i]->networkSetAutostart != NULL) && + (network->conn->networkDrivers[i]->networkSetAutostart(network, autostart) == 0)) + return (0); + } + virLibConnError(network->conn, VIR_ERR_CALL_FAILED, __FUNCTION__); + return (-1); +} diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version index f312bf6a2f..6f38fb3167 100644 --- a/src/libvirt_sym.version +++ b/src/libvirt_sym.version @@ -37,6 +37,8 @@ virConnectListDefinedDomains; virConnectNumOfDefinedDomains; virDomainUndefine; + virDomainGetAutostart; + virDomainSetAutostart; virGetVersion; virCopyLastError; virConnSetErrorFunc; @@ -76,6 +78,8 @@ virNetworkGetUUIDString; virNetworkGetXMLDesc; virNetworkGetBridgeName; + virNetworkGetAutostart; + virNetworkSetAutostart; local: *; }; diff --git a/src/proxy_internal.c b/src/proxy_internal.c index c7c325b161..dabaad8738 100644 --- a/src/proxy_internal.c +++ b/src/proxy_internal.c @@ -81,6 +81,8 @@ static virDriver xenProxyDriver = { NULL, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; /** diff --git a/src/qemu_internal.c b/src/qemu_internal.c index 3fcf10fffb..ba4595506f 100644 --- a/src/qemu_internal.c +++ b/src/qemu_internal.c @@ -1132,6 +1132,8 @@ static virDriver qemuDriver = { qemuUndefine, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; static virNetworkDriver qemuNetworkDriver = { @@ -1150,6 +1152,8 @@ static virNetworkDriver qemuNetworkDriver = { qemuNetworkDestroy, /* networkDestroy */ qemuNetworkDumpXML, /* networkDumpXML */ qemuNetworkGetBridgeName, /* networkGetBridgeName */ + NULL, /* networkGetAutostart */ + NULL, /* networkSetAutostart */ }; void qemuRegister(void) { diff --git a/src/test.c b/src/test.c index 5052cbd52e..c9898cf5e7 100644 --- a/src/test.c +++ b/src/test.c @@ -125,6 +125,8 @@ static virDriver testDriver = { testDomainUndefine, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; typedef struct _testDev { diff --git a/src/xen_internal.c b/src/xen_internal.c index 32c550e3a7..a53ea89968 100644 --- a/src/xen_internal.c +++ b/src/xen_internal.c @@ -454,6 +454,8 @@ static virDriver xenHypervisorDriver = { NULL, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; #endif /* !PROXY */ diff --git a/src/xend_internal.c b/src/xend_internal.c index 73325725c4..693c971bfe 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -96,7 +96,9 @@ static virDriver xenDaemonDriver = { xenDaemonDomainDefineXML, /* domainDefineXML */ xenDaemonDomainUndefine, /* domainUndefine */ xenDaemonAttachDevice, /* domainAttachDevice */ - xenDaemonDetachDevice /* domainDetachDevice */ + xenDaemonDetachDevice, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; /** diff --git a/src/xm_internal.c b/src/xm_internal.c index f2b8a1a545..066d86db07 100644 --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -106,6 +106,8 @@ static virDriver xenXMDriver = { xenXMDomainUndefine, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; static void diff --git a/src/xs_internal.c b/src/xs_internal.c index be3b6b84dd..c9b7346786 100644 --- a/src/xs_internal.c +++ b/src/xs_internal.c @@ -75,6 +75,8 @@ static virDriver xenStoreDriver = { NULL, /* domainUndefine */ NULL, /* domainAttachDevice */ NULL, /* domainDetachDevice */ + NULL, /* domainGetAutostart */ + NULL, /* domainSetAutostart */ }; /** -- 2.47.2