]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce virDomainChrDefNew()
authorMichal Novotny <minovotn@redhat.com>
Thu, 14 Apr 2011 16:05:14 +0000 (18:05 +0200)
committerEric Blake <eblake@redhat.com>
Thu, 14 Apr 2011 16:29:39 +0000 (10:29 -0600)
Make: passed
Make check: passed
Make syntax-check: passed

this is the commit to introduce the function to create new character
device definition for the domain as advised by Cole Robinson
<crobinso@redhat.com>.

The function is used on the relevant places and also new tests has
been added.

Signed-off-by: Michal Novotny <minovotn@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c
src/xenxs/xen_sxpr.c
src/xenxs/xen_xm.c
tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml [new file with mode: 0644]
tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml [new file with mode: 0644]
tests/qemuxml2xmltest.c

index 4afc4896424286cfcb06f7d0a62b3de8d871d525..c827ef564a458594ebd5226f84159ffa34975f18 100644 (file)
@@ -3243,6 +3243,22 @@ error:
     goto cleanup;
 }
 
+/* Create a new character device definition and set
+ * default port.
+ */
+virDomainChrDefPtr
+virDomainChrDefNew(void) {
+    virDomainChrDefPtr def = NULL;
+
+    if (VIR_ALLOC(def) < 0) {
+        virReportOOMError();
+        return NULL;
+    }
+
+    def->target.port = -1;
+    return def;
+}
+
 /* Parse the XML definition for a character device
  * @param node XML nodeset to parse for net definition
  *
@@ -3291,10 +3307,8 @@ virDomainChrDefParseXML(virCapsPtr caps,
     virDomainChrDefPtr def;
     int remaining;
 
-    if (VIR_ALLOC(def) < 0) {
-        virReportOOMError();
+    if (!(def = virDomainChrDefNew()))
         return NULL;
-    }
 
     type = virXMLPropString(node, "type");
     if (type == NULL) {
index 60a33ceab708684a531eab8de6abecb27b48b354..6ea30b9c8faaa69245d79864e76244e04ce113ab 100644 (file)
@@ -1271,6 +1271,8 @@ void virDomainObjRef(virDomainObjPtr vm);
 /* Returns 1 if the object was freed, 0 if more refs exist */
 int virDomainObjUnref(virDomainObjPtr vm) ATTRIBUTE_RETURN_CHECK;
 
+virDomainChrDefPtr virDomainChrDefNew(void);
+
 /* live == true means def describes an active domain (being migrated or
  * restored) as opposed to a new persistent configuration of the domain */
 virDomainObjPtr virDomainAssignDef(virCapsPtr caps,
index d2aa07743b859ff1e2640649c9576311c0a86ac1..ba7739dd1d82a2543b5d4190e5d89c25f65c4ff2 100644 (file)
@@ -201,6 +201,7 @@ virDomainChrConsoleTargetTypeFromString;
 virDomainChrConsoleTargetTypeToString;
 virDomainChrDefForeach;
 virDomainChrDefFree;
+virDomainChrDefNew;
 virDomainChrSourceDefFree;
 virDomainChrSpicevmcTypeFromString;
 virDomainChrSpicevmcTypeToString;
index 89668d4463efe4e0fb17b83e6c73a36f0cf45010..71e506268abb344f397c49ee96b3ab692f9d392b 100644 (file)
@@ -36,6 +36,7 @@
 #include "c-ctype.h"
 #include "domain_nwfilter.h"
 #include "qemu_audit.h"
+#include "domain_conf.h"
 
 #include <sys/utsname.h>
 #include <sys/stat.h>
@@ -5327,8 +5328,8 @@ qemuParseCommandLineChr(const char *val)
 {
     virDomainChrDefPtr def;
 
-    if (VIR_ALLOC(def) < 0)
-        goto no_memory;
+    if (!(def = virDomainChrDefNew()))
+        goto error;
 
     if (STREQ(val, "null")) {
         def->source.type = VIR_DOMAIN_CHR_TYPE_NULL;
index 3a412a68e86f3003d8901e828a057a540badeb89..b590517be99e2022dc7b07f1a93f46e024e71478 100644 (file)
@@ -168,10 +168,8 @@ xenParseSxprChar(const char *value,
     char *tmp;
     virDomainChrDefPtr def;
 
-    if (VIR_ALLOC(def) < 0) {
-        virReportOOMError();
+    if (!(def = virDomainChrDefNew()))
         return NULL;
-    }
 
     prefix = value;
 
@@ -1328,6 +1326,7 @@ xenParseSxpr(const struct sexpr *root,
                     goto no_memory;
                 }
                 chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL;
+                chr->target.port = 0;
                 def->serials[def->nserials++] = chr;
             }
         }
@@ -1343,6 +1342,7 @@ xenParseSxpr(const struct sexpr *root,
                 goto no_memory;
             }
             chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL;
+            chr->target.port = 0;
             def->parallels[def->nparallels++] = chr;
         }
     } else {
@@ -1350,6 +1350,7 @@ xenParseSxpr(const struct sexpr *root,
         if (!(def->console = xenParseSxprChar("pty", tty)))
             goto error;
         def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
+        def->console->target.port = 0;
         def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
     }
     VIR_FREE(tty);
index 22ad7883c981a222a14c938d77d509fbb1def034..89f75a58de663a47c60db4357a0e9f64ade87138 100644 (file)
@@ -36,6 +36,7 @@
 #include "xenxs_private.h"
 #include "xen_xm.h"
 #include "xen_sxpr.h"
+#include "domain_conf.h"
 
 /* Convenience method to grab a int from the config file object */
 static int xenXMConfigGetBool(virConfPtr conf,
@@ -957,6 +958,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
                 goto no_memory;
             }
             chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL;
+            chr->target.port = 0;
             def->parallels[0] = chr;
             def->nparallels++;
             chr = NULL;
@@ -981,8 +983,8 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
                     continue;
                 }
 
-                if (VIR_ALLOC(chr) < 0)
-                    goto no_memory;
+                if (!(chr = virDomainChrDefNew()))
+                    goto cleanup;
                 if (!(chr = xenParseSxprChar(port, NULL)))
                     goto cleanup;
 
@@ -1010,6 +1012,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
                     goto no_memory;
                 }
                 chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL;
+                chr->target.port = 0;
                 def->serials[0] = chr;
                 def->nserials++;
             }
@@ -1018,6 +1021,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
         if (!(def->console = xenParseSxprChar("pty", NULL)))
             goto cleanup;
         def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
+        def->console->target.port = 0;
         def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
     }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml b/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml
new file mode 100644 (file)
index 0000000..0f98f51
--- /dev/null
@@ -0,0 +1,31 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219100</memory>
+  <currentMemory>219100</currentMemory>
+  <vcpu>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' unit='0'/>
+    </disk>
+    <controller type='ide' index='0'/>
+    <serial type='pty'/>
+    <serial type='null'/>
+    <serial type='stdio'/>
+    <console type='pty'>
+      <target port='0'/>
+    </console>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml
new file mode 100644 (file)
index 0000000..878418a
--- /dev/null
@@ -0,0 +1,37 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219100</memory>
+  <currentMemory>219100</currentMemory>
+  <vcpu>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' unit='0'/>
+    </disk>
+    <controller type='ide' index='0'/>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <serial type='null'>
+      <target port='1'/>
+    </serial>
+    <serial type='stdio'>
+      <target port='2'/>
+    </serial>
+    <console type='pty'>
+      <target type='serial' port='0'/>
+    </console>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
index b86dbee5f28584dce57192096f0c06fb1b9bfe58..27330a97bc9c811b40db95c39af0747c1ccb9abd 100644 (file)
@@ -195,6 +195,7 @@ mymain(int argc, char **argv)
     DO_TEST_DIFFERENT("console-compat-auto");
     DO_TEST_DIFFERENT("disk-scsi-device-auto");
     DO_TEST_DIFFERENT("console-virtio");
+    DO_TEST_DIFFERENT("serial-target-port-auto");
 
     virCapabilitiesFree(driver.caps);