[patch 2/7] Add autostart API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add virDomainGetAutostart(), virDomainSetAutostart(),
virNetworkGetAutostart() and virNetworkSetAutostart().

Add the methods to the drivers' vtables, but don't
actually implement it anywhere.

Signed-off-by: Mark McLoughlin <markmc@xxxxxxxxxx>

Index: libvirt/include/libvirt/libvirt.h.in
===================================================================
--- libvirt.orig/include/libvirt/libvirt.h.in
+++ libvirt/include/libvirt/libvirt.h.in
@@ -328,6 +328,11 @@ int			virConnectListDefinedDomains (virC
 						 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	(virNetwor
 						 int flags);
 char *			virNetworkGetBridgeName (virNetworkPtr network);
 
+int			virNetworkGetAutostart	(virNetworkPtr network,
+						 int *autostart);
+int			virNetworkSetAutostart	(virNetworkPtr network,
+						 int autostart);
+
 #ifdef __cplusplus
 }
 #endif
Index: libvirt/src/libvirt.c
===================================================================
--- libvirt.orig/src/libvirt.c
+++ libvirt/src/libvirt.c
@@ -1862,6 +1862,69 @@ virDomainCreate(virDomainPtr domain) {
 }
 
 /**
+ * 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
  * @nvcpus: the new number of virtual CPUs for this domain
@@ -2766,3 +2829,66 @@ virNetworkGetBridgeName(virNetworkPtr ne
     }
     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);
+}
Index: libvirt/src/driver.h
===================================================================
--- libvirt.orig/src/driver.h
+++ libvirt/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;
 };
 
 
Index: libvirt/src/proxy_internal.c
===================================================================
--- libvirt.orig/src/proxy_internal.c
+++ libvirt/src/proxy_internal.c
@@ -81,6 +81,8 @@ static virDriver xenProxyDriver = {
     NULL, /* domainUndefine */
     NULL, /* domainAttachDevice */
     NULL, /* domainDetachDevice */
+    NULL, /* domainGetAutostart */
+    NULL, /* domainSetAutostart */
 };
 
 /**
Index: libvirt/src/qemu_internal.c
===================================================================
--- libvirt.orig/src/qemu_internal.c
+++ libvirt/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 qemuNetworkDrive
     qemuNetworkDestroy, /* networkDestroy */
     qemuNetworkDumpXML, /* networkDumpXML */
     qemuNetworkGetBridgeName, /* networkGetBridgeName */
+    NULL, /* networkGetAutostart */
+    NULL, /* networkSetAutostart */
 };
 
 void qemuRegister(void) {
Index: libvirt/src/test.c
===================================================================
--- libvirt.orig/src/test.c
+++ libvirt/src/test.c
@@ -125,6 +125,8 @@ static virDriver testDriver = {
     testDomainUndefine, /* domainUndefine */
     NULL, /* domainAttachDevice */
     NULL, /* domainDetachDevice */
+    NULL, /* domainGetAutostart */
+    NULL, /* domainSetAutostart */
 };
 
 typedef struct _testDev {
Index: libvirt/src/xen_internal.c
===================================================================
--- libvirt.orig/src/xen_internal.c
+++ libvirt/src/xen_internal.c
@@ -454,6 +454,8 @@ static virDriver xenHypervisorDriver = {
     NULL, /* domainUndefine */
     NULL, /* domainAttachDevice */
     NULL, /* domainDetachDevice */
+    NULL, /* domainGetAutostart */
+    NULL, /* domainSetAutostart */
 };
 #endif /* !PROXY */
 
Index: libvirt/src/xend_internal.c
===================================================================
--- libvirt.orig/src/xend_internal.c
+++ libvirt/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 */
 };
 
 /**
Index: libvirt/src/xm_internal.c
===================================================================
--- libvirt.orig/src/xm_internal.c
+++ libvirt/src/xm_internal.c
@@ -104,6 +104,8 @@ static virDriver xenXMDriver = {
     xenXMDomainUndefine, /* domainUndefine */
     NULL, /* domainAttachDevice */
     NULL, /* domainDetachDevice */
+    NULL, /* domainGetAutostart */
+    NULL, /* domainSetAutostart */
 };
 
 static void
Index: libvirt/src/xs_internal.c
===================================================================
--- libvirt.orig/src/xs_internal.c
+++ libvirt/src/xs_internal.c
@@ -75,6 +75,8 @@ static virDriver xenStoreDriver = {
     NULL, /* domainUndefine */
     NULL, /* domainAttachDevice */
     NULL, /* domainDetachDevice */
+    NULL, /* domainGetAutostart */
+    NULL, /* domainSetAutostart */
 };
 
 /**
Index: libvirt/src/libvirt_sym.version
===================================================================
--- libvirt.orig/src/libvirt_sym.version
+++ libvirt/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: *;
 };

-- 


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]