]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* src/internal.h src/xend_internal.c src/xm_internal.c src/xml.c:
authorDaniel Veillard <veillard@redhat.com>
Thu, 8 Mar 2007 14:12:06 +0000 (14:12 +0000)
committerDaniel Veillard <veillard@redhat.com>
Thu, 8 Mar 2007 14:12:06 +0000 (14:12 +0000)
  add a check for minimal size of Xen Dom0, track places where we
  had arbitrary minimal memory requirement and use a predefined
  macro to clean this up.
Daniel

ChangeLog
src/internal.h
src/xend_internal.c
src/xm_internal.c
src/xml.c

index d19a623df99251ee0a87dd710e2eb906e2584802..fad8b8bb39032b451d4a77d7588e963180661de5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Mar  8 15:10:12 CET 2007 Daniel Veillard <veillard@redhat.com>
+
+       * src/internal.h src/xend_internal.c src/xm_internal.c src/xml.c:
+         add a check for minimal size of Xen Dom0, track places where we
+         had arbitrary minimal memory requirement and use a predefined
+         macro to clean this up.
+
 Thu Mar  8 08:45:46 EST 2007 Daniel P., Berrange <berrange@redhat.com>
 
        * src/virsh.c: Added an explicit --readonly option to virsh
index 27c57f1c506028893aa16f2632416922826b34af..0d8974b799c0a2453177f17258b21b5cef053c96 100644 (file)
@@ -84,7 +84,21 @@ extern "C" {
 #define VIR_IS_DOMAIN(obj)             ((obj) && (obj)->magic==VIR_DOMAIN_MAGIC)
 #define VIR_IS_CONNECTED_DOMAIN(obj)   (VIR_IS_DOMAIN(obj) && VIR_IS_CONNECT((obj)->conn))
 
+/**
+ * VIR_NETWORK_MAGIC:
+ *
+ * magic value used to protect the API when pointers to network structures
+ * are passed down by the uers.
+ */
+#define VIR_NETWORK_MAGIC              0xDEAD1234
+#define VIR_IS_NETWORK(obj)            ((obj) && (obj)->magic==VIR_NETWORK_MAGIC)
+#define VIR_IS_CONNECTED_NETWORK(obj)  (VIR_IS_NETWORK(obj) && VIR_IS_CONNECT((obj)->conn))
+
+/*
+ * arbitrary limitations
+ */
 #define MAX_DRIVERS 10
+#define MIN_XEN_GUEST_SIZE 64  /* 64 megabytes */
 
 /*
  * Flags for Xen connections
@@ -104,6 +118,10 @@ struct _virConnect {
     virDriverPtr      drivers[MAX_DRIVERS];
     int               nb_drivers;
 
+    /* the list of available network drivers */
+    virNetworkDriverPtr networkDrivers[MAX_DRIVERS];
+    int                 nb_network_drivers;
+
     /* extra data needed by drivers */
     int handle;             /* internal handle used for hypercall */
     struct xs_handle *xshandle;/* handle to talk to the xenstore */
@@ -125,8 +143,9 @@ struct _virConnect {
     void *userData;         /* the user data */
 
     /* misc */
-    xmlMutexPtr hashes_mux;/* a mutex to protect the domain hash table */
+    xmlMutexPtr hashes_mux;/* a mutex to protect the domain and networks hash tables */
     virHashTablePtr domains;/* hash table for known domains */
+    virHashTablePtr networks;/* hash table for known domains */
     int flags;              /* a set of connection flags */
 };
 
@@ -158,6 +177,19 @@ struct _virDomain {
     char *xml;                           /* the XML description for defined domains */
 };
 
+/**
+* _virNetwork:
+*
+* Internal structure associated to a domain
+*/
+struct _virNetwork {
+    unsigned int magic;                  /* specific value to check */
+    int uses;                            /* reference count */
+    virConnectPtr conn;                  /* pointer back to the connection */
+    char *name;                          /* the network external name */
+    unsigned char uuid[VIR_UUID_BUFLEN]; /* the network unique identifier */
+};
+
 /*
 * Internal routines
 */
@@ -172,6 +204,7 @@ char *virDomainGetVMInfo(virDomainPtr domain,
  ************************************************************************/
 void __virRaiseError(virConnectPtr conn,
                     virDomainPtr dom,
+                    virNetworkPtr net,
                     int domain,
                     int code,
                     virErrorLevel level,
@@ -196,6 +229,11 @@ int                virFreeDomain   (virConnectPtr conn,
                                 virDomainPtr domain);
 virDomainPtr   virGetDomainByID(virConnectPtr conn,
                                 int id);
+virNetworkPtr  virGetNetwork   (virConnectPtr conn,
+                                const char *name,
+                                const unsigned char *uuid);
+int            virFreeNetwork  (virConnectPtr conn,
+                                virNetworkPtr domain);
 
 #ifdef __cplusplus
 }
index eda94bd6d28f9f9561f16d41ac32202cab79bd39..7c05bfa64417ae6f2f12d616ac6dfa8fff3ac420 100644 (file)
@@ -1383,7 +1383,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
     if (cur_mem > max_mem)
         max_mem = cur_mem;
     virBufferVSprintf(&buf, "  <memory>%d</memory>\n", max_mem);
-    if ((cur_mem > 63) && (cur_mem != max_mem))
+    if ((cur_mem >= MIN_XEN_GUEST_SIZE) && (cur_mem != max_mem))
        virBufferVSprintf(&buf, "  <currentMemory>%d</currentMemory>\n",
                          cur_mem);
     virBufferVSprintf(&buf, "  <vcpu>%d</vcpu>\n",
index c23574ca7a1008477568be9025b7d78ff50d4517..4c1a97a0a5dd8c2fa68f054f5453df119421388a 100644 (file)
@@ -540,7 +540,7 @@ int xenXMDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
     memset(info, 0, sizeof(virDomainInfo));
     if (xenXMConfigGetInt(entry->conf, "memory", &mem) < 0 ||
         mem < 0)
-        info->memory = 64 * 1024;
+        info->memory = MIN_XEN_GUEST_SIZE * 1024 * 2;
     else
         info->memory = (unsigned long)mem * 1024;
     if (xenXMConfigGetInt(entry->conf, "maxmem", &mem) < 0 ||
@@ -649,12 +649,13 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
     }
 
     if (xenXMConfigGetInt(conf, "memory", &val) < 0)
-        val = 64;
-    virBufferVSprintf(buf, "  <currentMemory>%ld</currentMemory>\n", val * 1024);
+        val = MIN_XEN_GUEST_SIZE * 2;
+    virBufferVSprintf(buf, "  <currentMemory>%ld</currentMemory>\n",
+                      val * 1024);
 
     if (xenXMConfigGetInt(conf, "maxmem", &val) < 0)
         if (xenXMConfigGetInt(conf, "memory", &val) < 0)
-            val = 64;
+            val = MIN_XEN_GUEST_SIZE * 2;
     virBufferVSprintf(buf, "  <memory>%ld</memory>\n", val * 1024);
 
 
@@ -663,7 +664,6 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) {
     virBufferVSprintf(buf, "  <vcpu>%ld</vcpu>\n", val);
 
 
-
     if (xenXMConfigGetString(conf, "on_poweroff", &str) < 0)
         str = "destroy";
     virBufferVSprintf(buf, "  <on_poweroff>%s</on_poweroff>\n", str);
@@ -1122,7 +1122,7 @@ unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain) {
         val < 0)
         if (xenXMConfigGetInt(entry->conf, "memory", &val) < 0 ||
             val < 0)
-            val = 64;
+            val = MIN_XEN_GUEST_SIZE * 2;
 
     return (val * 1024);
 }
index 4ec9fb746c3059b0488e2ae231b15db373e4e69d..6f14d9d964db163087facd0e5e54fbf90edf5990 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -1026,7 +1026,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name, int
 
     obj = xmlXPathEval(BAD_CAST "number(/domain/memory[1])", ctxt);
     if ((obj == NULL) || (obj->type != XPATH_NUMBER) ||
-        (isnan(obj->floatval)) || (obj->floatval < 64000)) {
+        (isnan(obj->floatval)) || (obj->floatval < MIN_XEN_GUEST_SIZE * 1024)) {
         max_mem = 128;
     } else {
         max_mem = (obj->floatval / 1024);
@@ -1034,7 +1034,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name, int
     xmlXPathFreeObject(obj);
     obj = xmlXPathEval(BAD_CAST "number(/domain/currentMemory[1])", ctxt);
     if ((obj == NULL) || (obj->type != XPATH_NUMBER) ||
-        (isnan(obj->floatval)) || (obj->floatval < 64000)) {
+        (isnan(obj->floatval)) || (obj->floatval < MIN_XEN_GUEST_SIZE * 1024)) {
         mem = max_mem;
     } else {
         mem = (obj->floatval / 1024);