[Libvir] PATCH: Support serial & parallel devices in QEMU driver

Daniel P. Berrange berrange at redhat.com
Tue Apr 15 21:53:25 UTC 2008


A long time ago I proposed a syntax for serial / parallel port handling
in libvirt XML.

  http://www.redhat.com/archives/libvir-list/2007-May/msg00191.html

Currently, Xen uses this for input:

  <console tty='pty'/>

And when the guest is active, this comes out as:

  <console tty='/dev/pts/2'/>

In PV guests this refers to the xvc0 console, and in FV guests this enables
the first serial port in 'pty' mode. QEMU serial devices support many more
options though, and also parallel ports.

Thus I propose to add the following new syntax which is slightly tweaked
from my original mail:

 - For a Psuedo-TTY:

    NB. the source tag is output only, since TTYs are autoallocated

    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
    </serial>

 - Passthrough to areal host serial device:

    <serial type='dev'>
      <source path='/dev/ttyS2'/>
      <target port='0'/>
    </serial>

 - Log output data to a file, no input:

    <serial type='file'>
      <source path='/tmp/serial.log'/>
      <target port='0'/>
    </serial>

 - Run a TCP  server and wait for clients to connect, using telnet
   protocol over wire:

    <serial type='tcp'>
      <source mode='bind' host='127.0.0.1' service='9999' wiremode='telnet'/>
      <target port='0'/>
    </serial>

 - Run a TCP client connecting to a remote host to send data in 
   raw format:

    <serial type='tcp'>
      <source mode='connect' host='127.0.0.1' service='9999' wiremode='raw'/>
      <target port='0'/>
    </serial>

 - Run a UDP netconsole facility - nb use of 2 sources so it can both
   send and receive data. For output only, the mode=bind source can
   be omitted.

    <serial type='udp'>
      <source mode='bind' host='127.0.0.1' service='9999'/>
      <source mode='connect' host='127.0.0.1' service='9998'/>
      <target port='0'/>
    </serial>

 - Run a UNIX socket  server

    <serial type='unix'>
      <source mode='bind' path='/tmp/serial.sock'/>
      <target port='0'/>
    </serial>

 - Run a QEMU virtual console accessible via Ctrl+Alt+'n'

    <serial type='vc'>
      <target port='0'/>
    </serial>

In all these examples the '<target>' tag is an output only element for QEMU
really just there to give an explicit device ordering. It is possible it
might be extended in future to allow specifiction of type of serial device
hardware to emulate, or some such idea.

WRT to the <console> tag, if the application defines a VM with a single
  
  <console/>

tag this will be converted into a <serial type="pty"/> tag. When dumping
XML, if the first serial device has type='pty', then a <console> tag will
be included in the XML dump. This gives compatability with existing tools
which know how to deal with <console> tag.

This format described above will also be pretty much 100% applicable to
the Xen driver, but I've not done the code for that yet. VMWare allows
use of serial/parallel ports, but only enables logging to a file. So we
can trivially cope with VMWare config via  type="file".

Finally I've not actaully hooked up the code to determine the path to the
Psuedo-TTY which is  auto-allocated at startup. So type="pty" isn't useful
in this patch yet.

Dan.

Index: src/qemu_conf.c
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_conf.c,v
retrieving revision 1.48
diff -u -p -r1.48 qemu_conf.c
--- src/qemu_conf.c	10 Apr 2008 16:54:54 -0000	1.48
+++ src/qemu_conf.c	15 Apr 2008 21:31:32 -0000
@@ -205,6 +205,8 @@ void qemudFreeVMDef(struct qemud_vm_def 
     struct qemud_vm_disk_def *disk = def->disks;
     struct qemud_vm_net_def *net = def->nets;
     struct qemud_vm_input_def *input = def->inputs;
+    struct qemud_vm_chr_def *serial = def->serials;
+    struct qemud_vm_chr_def *parallel = def->parallels;
 
     while (disk) {
         struct qemud_vm_disk_def *prev = disk;
@@ -221,6 +223,16 @@ void qemudFreeVMDef(struct qemud_vm_def 
         input = input->next;
         free(prev);
     }
+    while (serial) {
+        struct qemud_vm_chr_def *prev = serial;
+        serial = serial->next;
+        free(prev);
+    }
+    while (parallel) {
+        struct qemud_vm_chr_def *prev = parallel;
+        parallel = parallel->next;
+        free(prev);
+    }
     xmlFree(def->keymap);
     free(def);
 }
@@ -945,6 +957,334 @@ static int qemudParseInterfaceXML(virCon
 }
 
 
+/* Parse the XML definition for a character device
+ * @param net pre-allocated & zero'd net record
+ * @param node XML nodeset to parse for net definition
+ * @return 0 on success, -1 on failure
+ *
+ * The XML we're dealing with looks like
+ *
+ * <serial type="pty">
+ *   <source path="/dev/pts/3"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ * <serial type="dev">
+ *   <source path="/dev/ttyS0"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ * <serial type="tcp">
+ *   <source mode="connect" host="0.0.0.0" service="2445"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ * <serial type="tcp">
+ *   <source mode="bind" host="0.0.0.0" service="2445"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ * <serial type="udp">
+ *   <source mode="bind" host="0.0.0.0" service="2445"/>
+ *   <source mode="connect" host="0.0.0.0" service="2445"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ * <serial type="unix">
+ *   <source mode="bind" path="/tmp/foo"/>
+ *   <target port="1"/>
+ * </serial>
+ *
+ */
+static int qemudParseCharXML(virConnectPtr conn,
+                             struct qemud_vm_chr_def *chr,
+                             int portNum,
+                             xmlNodePtr node) {
+    xmlNodePtr cur;
+    xmlChar *type = NULL;
+    xmlChar *bindHost = NULL;
+    xmlChar *bindService = NULL;
+    xmlChar *connectHost = NULL;
+    xmlChar *connectService = NULL;
+    xmlChar *path = NULL;
+    xmlChar *mode = NULL;
+    xmlChar *wiremode = NULL;
+    int ret = -1;
+
+    chr->srcType = QEMUD_CHR_SRC_TYPE_PTY;
+    type = xmlGetProp(node, BAD_CAST "type");
+    if (type != NULL) {
+        if (xmlStrEqual(type, BAD_CAST "null"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_NULL;
+        else if (xmlStrEqual(type, BAD_CAST "vc"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_VC;
+        else if (xmlStrEqual(type, BAD_CAST "pty"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_PTY;
+        else if (xmlStrEqual(type, BAD_CAST "dev"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_DEV;
+        else if (xmlStrEqual(type, BAD_CAST "file"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_FILE;
+        else if (xmlStrEqual(type, BAD_CAST "pipe"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_PIPE;
+        else if (xmlStrEqual(type, BAD_CAST "stdio"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_STDIO;
+        else if (xmlStrEqual(type, BAD_CAST "udp"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_UDP;
+        else if (xmlStrEqual(type, BAD_CAST "tcp"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_TCP;
+        else if (xmlStrEqual(type, BAD_CAST "unix"))
+            chr->srcType = QEMUD_CHR_SRC_TYPE_UNIX;
+        else
+            chr->srcType = QEMUD_CHR_SRC_TYPE_NULL;
+    }
+
+    cur = node->children;
+    while (cur != NULL) {
+        if (cur->type == XML_ELEMENT_NODE) {
+            if (xmlStrEqual(cur->name, BAD_CAST "source")) {
+                if (mode == NULL)
+                    mode = xmlGetProp(cur, BAD_CAST "mode");
+
+                switch (chr->srcType) {
+                case QEMUD_CHR_SRC_TYPE_PTY:
+                case QEMUD_CHR_SRC_TYPE_DEV:
+                case QEMUD_CHR_SRC_TYPE_FILE:
+                case QEMUD_CHR_SRC_TYPE_PIPE:
+                case QEMUD_CHR_SRC_TYPE_UNIX:
+                    if (path == NULL)
+                        path = xmlGetProp(cur, BAD_CAST "path");
+
+                    break;
+
+                case QEMUD_CHR_SRC_TYPE_UDP:
+                case QEMUD_CHR_SRC_TYPE_TCP:
+                    if (mode == NULL ||
+                        STREQ((const char *)mode, "connect")) {
+
+                        if (connectHost == NULL)
+                            connectHost = xmlGetProp(cur, BAD_CAST "host");
+                        if (connectService == NULL)
+                            connectService = xmlGetProp(cur, BAD_CAST "service");
+                    } else {
+                        if (bindHost == NULL)
+                            bindHost = xmlGetProp(cur, BAD_CAST "host");
+                        if (bindService == NULL)
+                            bindService = xmlGetProp(cur, BAD_CAST "service");
+                    }
+
+                    if (chr->srcType == QEMUD_CHR_SRC_TYPE_TCP)
+                        wiremode = xmlGetProp(cur, BAD_CAST "wiremode");
+
+                    if (chr->srcType == QEMUD_CHR_SRC_TYPE_UDP) {
+                        xmlFree(mode);
+                        mode = NULL;
+                    }
+                }
+            }
+        }
+        cur = cur->next;
+    }
+
+
+    chr->dstPort = portNum;
+
+    switch (chr->srcType) {
+    case QEMUD_CHR_SRC_TYPE_NULL:
+        /* Nada */
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_VC:
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_PTY:
+        /* @path attribute is an output only property - pty is auto-allocted */
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_DEV:
+    case QEMUD_CHR_SRC_TYPE_FILE:
+    case QEMUD_CHR_SRC_TYPE_PIPE:
+        if (path == NULL) {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                             "%s", _("Missing source path attribute for char device"));
+            goto cleanup;
+        }
+
+        strncpy(chr->srcData.file.path, (const char *)path,
+                sizeof(chr->srcData.file.path));
+        chr->srcData.file.path[sizeof(chr->srcData.file.path)-1] = '\0';
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_STDIO:
+        /* Nada */
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_TCP:
+        if (mode == NULL ||
+            STREQ((const char *)mode, "connect")) {
+            if (connectHost == NULL) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                                 "%s", _("Missing source host attribute for char device"));
+                goto cleanup;
+            }
+            if (connectService == NULL) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                                 "%s", _("Missing source service attribute for char device"));
+                goto cleanup;
+            }
+
+            strncpy(chr->srcData.tcp.host, (const char *)connectHost,
+                    sizeof(chr->srcData.tcp.host));
+            chr->srcData.tcp.host[sizeof(chr->srcData.tcp.host)-1] = '\0';
+            strncpy(chr->srcData.tcp.service, (const char *)connectService,
+                    sizeof(chr->srcData.tcp.service));
+            chr->srcData.tcp.service[sizeof(chr->srcData.tcp.service)-1] = '\0';
+
+            chr->srcData.tcp.listen = 0;
+        } else {
+            if (bindHost == NULL) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                                 "%s", _("Missing source host attribute for char device"));
+                goto cleanup;
+            }
+            if (bindService == NULL) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                                 "%s", _("Missing source service attribute for char device"));
+                goto cleanup;
+            }
+
+            strncpy(chr->srcData.tcp.host, (const char *)bindHost,
+                    sizeof(chr->srcData.tcp.host));
+            chr->srcData.tcp.host[sizeof(chr->srcData.tcp.host)-1] = '\0';
+            strncpy(chr->srcData.tcp.service, (const char *)bindService,
+                    sizeof(chr->srcData.tcp.service));
+            chr->srcData.tcp.service[sizeof(chr->srcData.tcp.service)-1] = '\0';
+
+            chr->srcData.tcp.listen = 1;
+        }
+        if (wiremode != NULL &&
+            STREQ((const char *)wiremode, "telnet"))
+            chr->srcData.tcp.wiremode = QEMUD_CHR_SRC_TCP_WIRE_MODE_TELNET;
+        else
+            chr->srcData.tcp.wiremode = QEMUD_CHR_SRC_TCP_WIRE_MODE_RAW;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UDP:
+        if (connectService == NULL) {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                             "%s", _("Missing source service attribute for char device"));
+            goto cleanup;
+        }
+
+        if (connectHost != NULL) {
+            strncpy(chr->srcData.udp.connectHost, (const char *)connectHost,
+                    sizeof(chr->srcData.udp.connectHost));
+            chr->srcData.udp.connectHost[sizeof(chr->srcData.udp.connectHost)-1] = '\0';
+        }
+        strncpy(chr->srcData.udp.connectService, (const char *)connectService,
+                sizeof(chr->srcData.udp.connectService));
+        chr->srcData.udp.connectService[sizeof(chr->srcData.udp.connectService)-1] = '\0';
+
+        if (bindHost != NULL) {
+            strncpy(chr->srcData.udp.bindHost, (const char *)bindHost,
+                    sizeof(chr->srcData.udp.bindHost));
+            chr->srcData.udp.bindHost[sizeof(chr->srcData.udp.bindHost)-1] = '\0';
+        }
+        if (bindService != NULL) {
+            strncpy(chr->srcData.udp.bindService, (const char *)bindService,
+                    sizeof(chr->srcData.udp.bindService));
+            chr->srcData.udp.bindService[sizeof(chr->srcData.udp.bindService)-1] = '\0';
+        }
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UNIX:
+        if (path == NULL) {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                             "%s", _("Missing source path attribute for char device"));
+            goto cleanup;
+        }
+
+        if (mode != NULL &&
+            STRNEQ((const char *)mode, "connect"))
+            chr->srcData.nix.listen = 1;
+        else
+            chr->srcData.nix.listen = 0;
+
+        strncpy(chr->srcData.nix.path, (const char *)path,
+                sizeof(chr->srcData.nix.path));
+        chr->srcData.nix.path[sizeof(chr->srcData.nix.path)-1] = '\0';
+        break;
+    }
+
+    ret = 0;
+
+cleanup:
+    xmlFree(mode);
+    xmlFree(wiremode);
+    xmlFree(type);
+    xmlFree(bindHost);
+    xmlFree(bindService);
+    xmlFree(connectHost);
+    xmlFree(connectService);
+    xmlFree(path);
+
+    return ret;
+}
+
+
+static int qemudParseCharXMLDevices(virConnectPtr conn,
+				    xmlXPathContextPtr ctxt,
+                                    const char *xpath,
+                                    int *ndevs,
+                                    struct qemud_vm_chr_def **devs)
+{
+    xmlXPathObjectPtr obj;
+    int i;
+
+    obj = xmlXPathEval(BAD_CAST xpath, ctxt);
+    if ((obj != NULL) && (obj->type == XPATH_NODESET) &&
+        (obj->nodesetval != NULL) && (obj->nodesetval->nodeNr >= 0)) {
+        struct qemud_vm_chr_def *prev = *devs;
+        if (ndevs == NULL &&
+            obj->nodesetval->nodeNr > 1) {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                             "%s", _("too many character devices"));
+            goto error;
+        }
+
+        for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+            struct qemud_vm_chr_def *chr = calloc(1, sizeof(*chr));
+            if (!chr) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
+                                 "%s",
+                                 _("failed to allocate space for char device"));
+                goto error;
+            }
+
+            if (qemudParseCharXML(conn, chr, i, obj->nodesetval->nodeTab[i]) < 0) {
+                free(chr);
+                goto error;
+            }
+            if (ndevs)
+                (*ndevs)++;
+            chr->next = NULL;
+            if (i == 0) {
+                *devs = chr;
+            } else {
+                prev->next = chr;
+            }
+            prev = chr;
+        }
+    }
+    xmlXPathFreeObject(obj);
+
+    return 0;
+
+error:
+    xmlXPathFreeObject(obj);
+    return -1;
+}
+
+
 /* Parse the XML definition for a network interface */
 static int qemudParseInputXML(virConnectPtr conn,
                               struct qemud_vm_input_def *input,
@@ -1423,6 +1763,41 @@ static struct qemud_vm_def *qemudParseXM
         }
     }
     xmlXPathFreeObject(obj);
+    obj = NULL;
+
+    /* analysis of the character devices */
+    if (qemudParseCharXMLDevices(conn, ctxt,
+                                 "/domain/devices/parallel",
+                                 &def->nparallels,
+                                 &def->parallels) < 0)
+        goto error;
+    if (qemudParseCharXMLDevices(conn, ctxt,
+                                 "/domain/devices/serial",
+                                 &def->nserials,
+                                 &def->serials) < 0)
+        goto error;
+
+    /*
+     * If no serial devices were listed, then look for console
+     * devices which is the legacy syntax for the same thing
+     */
+    if (def->nserials == 0) {
+        obj = xmlXPathEval(BAD_CAST "/domain/devices/console", ctxt);
+        if ((obj != NULL) && (obj->type == XPATH_NODESET) &&
+            (obj->nodesetval != NULL) && (obj->nodesetval->nodeNr == 1)) {
+            struct qemud_vm_chr_def *serial = calloc(1, sizeof(*serial));
+            if (!serial) {
+                qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
+                                 "%s", _("failed to allocate space for serial device"));
+                goto error;
+            }
+            serial->srcType = QEMUD_CHR_SRC_TYPE_PTY;
+
+            def->serials = serial;
+            def->nserials = 1;
+        }
+        xmlXPathFreeObject(obj);
+    }
 
 
     /* analysis of the network devices */
@@ -1617,6 +1992,78 @@ qemudNetworkIfaceConnect(virConnectPtr c
     return NULL;
 }
 
+static int qemudBuildCommandLineChrDevStr(struct qemud_vm_chr_def *dev,
+                                          char *buf,
+                                          int buflen)
+{
+    switch (dev->srcType) {
+    case QEMUD_CHR_SRC_TYPE_NULL:
+        strncpy(buf, "null", buflen);
+        buf[buflen-1] = '\0';
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_VC:
+        strncpy(buf, "vc", buflen);
+        buf[buflen-1] = '\0';
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_PTY:
+        strncpy(buf, "pty", buflen);
+        buf[buflen-1] = '\0';
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_DEV:
+        if (snprintf(buf, buflen, "%s",
+                     dev->srcData.file.path) >= buflen)
+            return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_FILE:
+        if (snprintf(buf, buflen, "file:%s",
+                     dev->srcData.file.path) >= buflen)
+            return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_PIPE:
+        if (snprintf(buf, buflen, "pipe:%s",
+                     dev->srcData.file.path) >= buflen)
+            return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_STDIO:
+        strncpy(buf, "stdio", buflen);
+        buf[buflen-1] = '\0';
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UDP:
+        if (snprintf(buf, buflen, "udp:%s:%s@%s:%s",
+                     dev->srcData.udp.connectHost,
+                     dev->srcData.udp.connectService,
+                     dev->srcData.udp.bindHost,
+                     dev->srcData.udp.bindService) >= buflen)
+            return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_TCP:
+        if (snprintf(buf, buflen, "%s:%s:%s%s",
+                     dev->srcData.tcp.wiremode == QEMUD_CHR_SRC_TCP_WIRE_MODE_TELNET ? "telnet" : "tcp",
+                     dev->srcData.tcp.host,
+                     dev->srcData.tcp.service,
+                     dev->srcData.tcp.listen ? ",listen" : "") >= buflen)
+            return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UNIX:
+        if (snprintf(buf, buflen, "unix:%s%s",
+                     dev->srcData.nix.path,
+                     dev->srcData.nix.listen ? ",listen" : "") >= buflen)
+            return -1;
+        break;
+    }
+
+    return 0;
+}
+
 /*
  * Constructs a argv suitable for launching qemu with config defined
  * for a given virtual machine.
@@ -1633,6 +2080,8 @@ int qemudBuildCommandLine(virConnectPtr 
     struct qemud_vm_disk_def *disk = vm->def->disks;
     struct qemud_vm_net_def *net = vm->def->nets;
     struct qemud_vm_input_def *input = vm->def->inputs;
+    struct qemud_vm_chr_def *serial = vm->def->serials;
+    struct qemud_vm_chr_def *parallel = vm->def->parallels;
     struct utsname ut;
     int disableKQEMU = 0;
 
@@ -1681,6 +2130,8 @@ int qemudBuildCommandLine(virConnectPtr 
         (vm->def->nnets > 0 ? (4 * vm->def->nnets) : 2) + /* networks */
         1 + /* usb */
         2 * vm->def->ninputs + /* input devices */
+        (vm->def->nserials > 0 ? (2 * vm->def->nserials) : 2) + /* character devices */
+        (vm->def->nparallels > 0 ? (2 * vm->def->nparallels) : 2) + /* character devices */
         2 + /* memory*/
         2 + /* cpus */
         2 + /* boot device */
@@ -1913,6 +2364,48 @@ int qemudBuildCommandLine(virConnectPtr 
         }
     }
 
+    if (!serial) {
+        if (!((*argv)[++n] = strdup("-serial")))
+            goto no_memory;
+        if (!((*argv)[++n] = strdup("none")))
+            goto no_memory;
+    } else {
+        while (serial) {
+            char buf[4096];
+
+            if (qemudBuildCommandLineChrDevStr(serial, buf, sizeof(buf)) < 0)
+                goto error;
+
+            if (!((*argv)[++n] = strdup("-serial")))
+                goto no_memory;
+            if (!((*argv)[++n] = strdup(buf)))
+                goto no_memory;
+
+            serial = serial->next;
+        }
+    }
+
+    if (!parallel) {
+        if (!((*argv)[++n] = strdup("-parallel")))
+            goto no_memory;
+        if (!((*argv)[++n] = strdup("none")))
+            goto no_memory;
+    } else {
+        while (parallel) {
+            char buf[4096];
+
+            if (qemudBuildCommandLineChrDevStr(parallel, buf, sizeof(buf)) < 0)
+                goto error;
+
+            if (!((*argv)[++n] = strdup("-parallel")))
+                goto no_memory;
+            if (!((*argv)[++n] = strdup(buf)))
+                goto no_memory;
+
+            parallel = parallel->next;
+        }
+    }
+
     if (!((*argv)[++n] = strdup("-usb")))
         goto no_memory;
     while (input) {
@@ -2838,6 +3331,110 @@ int qemudScanConfigs(struct qemud_driver
     return 0;
 }
 
+static int qemudGenerateXMLChar(virBufferPtr buf,
+                                struct qemud_vm_chr_def *dev,
+                                const char *type)
+{
+    const char *types[] = {
+        "null",
+        "vc",
+        "pty",
+        "dev",
+        "file",
+        "pipe",
+        "stdio",
+        "udp",
+        "tcp",
+        "unix"
+    };
+    if (virBufferVSprintf(buf, "    <%s type='%s'>\n",
+                          type, types[dev->srcType]) < 0)
+        return -1;
+
+    switch (dev->srcType) {
+    case QEMUD_CHR_SRC_TYPE_NULL:
+    case QEMUD_CHR_SRC_TYPE_VC:
+    case QEMUD_CHR_SRC_TYPE_STDIO:
+        /* nada */
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_PTY:
+    case QEMUD_CHR_SRC_TYPE_DEV:
+    case QEMUD_CHR_SRC_TYPE_FILE:
+    case QEMUD_CHR_SRC_TYPE_PIPE:
+        if (dev->srcType != QEMUD_CHR_SRC_TYPE_PTY ||
+            dev->srcData.file.path[0]) {
+            if (virBufferVSprintf(buf, "      <source path='%s'/>\n",
+                                  dev->srcData.file.path) < 0)
+                return -1;
+        }
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UDP:
+        if (dev->srcData.udp.bindService[0] != '\0' &&
+            dev->srcData.udp.bindHost[0] != '\0') {
+            if (virBufferVSprintf(buf, "      <source mode='bind' host='%s' service='%s'/>\n",
+                                  dev->srcData.udp.bindHost,
+                                  dev->srcData.udp.bindService) < 0)
+                return -1;
+        } else if (dev->srcData.udp.bindHost[0] !='\0') {
+            if (virBufferVSprintf(buf, "      <source mode='bind' host='%s'/>\n",
+                                  dev->srcData.udp.bindHost) < 0)
+                return -1;
+        } else if (dev->srcData.udp.bindService[0] != '\0') {
+            if (virBufferVSprintf(buf, "      <source mode='bind' service='%s'/>\n",
+                                  dev->srcData.udp.bindService) < 0)
+                return -1;
+        }
+
+        if (dev->srcData.udp.connectService[0] != '\0' &&
+            dev->srcData.udp.connectHost[0] != '\0') {
+            if (virBufferVSprintf(buf, "      <source mode='connect' host='%s' service='%s'/>\n",
+                                  dev->srcData.udp.connectHost,
+                                  dev->srcData.udp.connectService) < 0)
+                return -1;
+        } else if (dev->srcData.udp.connectHost[0] != '\0') {
+            if (virBufferVSprintf(buf, "      <source mode='connect' host='%s'/>\n",
+                                  dev->srcData.udp.connectHost) < 0)
+                return -1;
+        } else if (dev->srcData.udp.connectService[0] != '\0') {
+            if (virBufferVSprintf(buf, "      <source mode='connect' service='%s'/>\n",
+                                  dev->srcData.udp.connectService) < 0)
+                return -1;
+        }
+
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_TCP:
+        if (virBufferVSprintf(buf, "      <source mode='%s' host='%s' service='%s' wiremode='%s'/>\n",
+                              dev->srcData.tcp.listen ? "bind" : "connect",
+                              dev->srcData.tcp.host,
+                              dev->srcData.tcp.service,
+                              dev->srcData.tcp.wiremode == QEMUD_CHR_SRC_TCP_WIRE_MODE_TELNET
+                              ? "telnet" : "raw") < 0)
+                return -1;
+        break;
+
+    case QEMUD_CHR_SRC_TYPE_UNIX:
+        if (virBufferVSprintf(buf, "      <source mode='%s' path='%s'/>\n",
+                              dev->srcData.nix.listen ? "bind" : "connect",
+                              dev->srcData.nix.path) < 0)
+            return -1;
+        break;
+    }
+
+    if (virBufferVSprintf(buf, "      <target port='%d'/>\n",
+                          dev->dstPort) < 0)
+        return -1;
+
+    if (virBufferVSprintf(buf, "    </%s>\n",
+                          type) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 /* Generate an XML document describing the guest's configuration */
 char *qemudGenerateXML(virConnectPtr conn,
                        struct qemud_driver *driver ATTRIBUTE_UNUSED,
@@ -2850,6 +3447,7 @@ char *qemudGenerateXML(virConnectPtr con
     struct qemud_vm_disk_def *disk;
     struct qemud_vm_net_def *net;
     struct qemud_vm_input_def *input;
+    struct qemud_vm_chr_def *chr;
     const char *type = NULL;
     int n;
 
@@ -3078,6 +3676,30 @@ char *qemudGenerateXML(virConnectPtr con
         net = net->next;
     }
 
+    chr = def->serials;
+    while (chr) {
+        if (qemudGenerateXMLChar(buf, chr, "serial") < 0)
+            goto no_memory;
+
+        chr = chr->next;
+    }
+
+    chr = def->parallels;
+    while (chr) {
+        if (qemudGenerateXMLChar(buf, chr, "parallel") < 0)
+            goto no_memory;
+
+        chr = chr->next;
+    }
+
+    if (def->nserials > 0 &&
+        def->serials->srcType == QEMUD_CHR_SRC_TYPE_PTY) {
+        if (virBufferVSprintf(buf, "    <console tty='%s'/>\n",
+                              def->serials->srcData.file.path[0] ?
+                              def->serials->srcData.file.path : "pty") < 0)
+            goto no_memory;
+    }
+
     input = def->inputs;
     while (input) {
         if (input->bus != QEMU_INPUT_BUS_PS2 &&
@@ -3125,9 +3747,6 @@ char *qemudGenerateXML(virConnectPtr con
         break;
     }
 
-    if (def->graphicsType == QEMUD_GRAPHICS_VNC) {
-    }
-
     if (virBufferAddLit(buf, "  </devices>\n") < 0)
         goto no_memory;
 
Index: src/qemu_conf.h
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_conf.h,v
retrieving revision 1.22
diff -u -p -r1.22 qemu_conf.h
--- src/qemu_conf.h	10 Apr 2008 16:53:29 -0000	1.22
+++ src/qemu_conf.h	15 Apr 2008 21:31:32 -0000
@@ -119,6 +119,52 @@ struct qemud_vm_net_def {
     struct qemud_vm_net_def *next;
 };
 
+enum qemu_vm_chr_dst_type {
+    QEMUD_CHR_SRC_TYPE_NULL,
+    QEMUD_CHR_SRC_TYPE_VC,
+    QEMUD_CHR_SRC_TYPE_PTY,
+    QEMUD_CHR_SRC_TYPE_DEV,
+    QEMUD_CHR_SRC_TYPE_FILE,
+    QEMUD_CHR_SRC_TYPE_PIPE,
+    QEMUD_CHR_SRC_TYPE_STDIO,
+    QEMUD_CHR_SRC_TYPE_UDP,
+    QEMUD_CHR_SRC_TYPE_TCP,
+    QEMUD_CHR_SRC_TYPE_UNIX,
+};
+
+enum {
+    QEMUD_CHR_SRC_TCP_WIRE_MODE_RAW,
+    QEMUD_CHR_SRC_TCP_WIRE_MODE_TELNET,
+};
+
+struct qemud_vm_chr_def {
+    int dstPort;
+
+    int srcType;
+    union {
+        struct {
+            char path[PATH_MAX];
+        } file; /* pty, file, pipe, or device */
+        struct {
+            char host[BR_INET_ADDR_MAXLEN];
+            char service[BR_INET_ADDR_MAXLEN];
+            int listen;
+            int wiremode;
+        } tcp;
+        struct {
+            char bindHost[BR_INET_ADDR_MAXLEN];
+            char bindService[BR_INET_ADDR_MAXLEN];
+            char connectHost[BR_INET_ADDR_MAXLEN];
+            char connectService[BR_INET_ADDR_MAXLEN];
+        } udp;
+        struct {
+            char path[PATH_MAX];
+            int listen;
+        } nix;
+    } srcData;
+
+    struct qemud_vm_chr_def *next;
+};
 
 enum qemu_vm_input_type {
     QEMU_INPUT_TYPE_MOUSE,
@@ -223,6 +269,12 @@ struct qemud_vm_def {
 
     int ninputs;
     struct qemud_vm_input_def *inputs;
+
+    int nserials;
+    struct qemud_vm_chr_def *serials;
+
+    int nparallels;
+    struct qemud_vm_chr_def *parallels;
 };
 
 /* Guest VM runtime state */
Index: tests/Makefile.am
===================================================================
RCS file: /data/cvs/libvirt/tests/Makefile.am,v
retrieving revision 1.40
diff -u -p -r1.40 Makefile.am
--- tests/Makefile.am	8 Apr 2008 15:33:17 -0000	1.40
+++ tests/Makefile.am	15 Apr 2008 21:31:32 -0000
@@ -66,6 +66,8 @@ path_add = $$abs_top_builddir/src$(PATH_
 TESTS_ENVIRONMENT =				\
   abs_top_builddir=`cd '$(top_builddir)'; pwd`	\
   abs_top_srcdir=`cd '$(top_srcdir)'; pwd`	\
+  abs_builddir=`cd '$(builddir)'; pwd`	\
+  abs_srcdir=`cd '$(srcdir)'; pwd`	\
   PATH="$(path_add)$(PATH_SEPARATOR)$$PATH"	\
   SHELL="$(SHELL)"				\
   $(VG)
Index: tests/qemuxml2argvtest.c
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvtest.c,v
retrieving revision 1.14
diff -u -p -r1.14 qemuxml2argvtest.c
--- tests/qemuxml2argvtest.c	10 Apr 2008 16:53:29 -0000	1.14
+++ tests/qemuxml2argvtest.c	15 Apr 2008 21:31:32 -0000
@@ -15,7 +15,7 @@
 #include "qemu_conf.h"
 
 static char *progname;
-static char *abs_top_srcdir;
+static char *abs_srcdir;
 static struct qemud_driver driver;
 
 #define MAX_FILE 4096
@@ -100,10 +100,10 @@ static int testCompareXMLToArgvFiles(con
 static int testCompareXMLToArgvHelper(const void *data) {
     char xml[PATH_MAX];
     char args[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/tests/qemuxml2argvdata/qemuxml2argv-%s.xml",
-             abs_top_srcdir, (const char*)data);
-    snprintf(args, PATH_MAX, "%s/tests/qemuxml2argvdata/qemuxml2argv-%s.args",
-             abs_top_srcdir, (const char*)data);
+    snprintf(xml, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
+             abs_srcdir, (const char*)data);
+    snprintf(args, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
+             abs_srcdir, (const char*)data);
     return testCompareXMLToArgvFiles(xml, args);
 }
 
@@ -113,6 +113,7 @@ int
 main(int argc, char **argv)
 {
     int ret = 0;
+    char cwd[PATH_MAX];
 
     progname = argv[0];
 
@@ -121,76 +122,45 @@ main(int argc, char **argv)
         exit(EXIT_FAILURE);
     }
 
-    abs_top_srcdir = getenv("abs_top_srcdir");
-    if (!abs_top_srcdir)
-      return 1;
+    abs_srcdir = getenv("abs_srcdir");
+    if (!abs_srcdir)
+        abs_srcdir = getcwd(cwd, sizeof(cwd));
 
     driver.caps = qemudCapsInit();
 
-    if (virtTestRun("QEMU XML-2-ARGV minimal",
-                    1, testCompareXMLToArgvHelper, "minimal") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot CDROM",
-                    1, testCompareXMLToArgvHelper, "boot-cdrom") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot Network",
-                    1, testCompareXMLToArgvHelper, "boot-network") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot Floppy",
-                    1, testCompareXMLToArgvHelper, "boot-floppy") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Clock UTC",
-                    1, testCompareXMLToArgvHelper, "clock-utc") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Clock Localtime",
-                    1, testCompareXMLToArgvHelper, "clock-localtime") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk CDROM",
-                    1, testCompareXMLToArgvHelper, "disk-cdrom") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk Floppy",
-                    1, testCompareXMLToArgvHelper, "disk-floppy") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk Many",
-                    1, testCompareXMLToArgvHelper, "disk-many") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Graphics VNC",
-                    1, testCompareXMLToArgvHelper, "graphics-vnc") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Graphics SDL",
-                    1, testCompareXMLToArgvHelper, "graphics-sdl") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Input USB Mouse",
-                    1, testCompareXMLToArgvHelper, "input-usbmouse") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Input USB Tablet",
-                    1, testCompareXMLToArgvHelper, "input-usbtablet") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Misc ACPI",
-                    1, testCompareXMLToArgvHelper, "misc-acpi") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Misc No Reboot",
-                    1, testCompareXMLToArgvHelper, "misc-no-reboot") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Net User",
-                    1, testCompareXMLToArgvHelper, "net-user") < 0)
-        ret = -1;
-
+#define DO_TEST(name) \
+    if (virtTestRun("QEMU XML-2-ARGV " name, \
+                    1, testCompareXMLToArgvHelper, (name)) < 0) \
+        ret = -1
+
+    DO_TEST("minimal");
+    DO_TEST("boot-cdrom");
+    DO_TEST("boot-network");
+    DO_TEST("boot-floppy");
+    DO_TEST("clock-utc");
+    DO_TEST("clock-localtime");
+    DO_TEST("disk-cdrom");
+    DO_TEST("disk-floppy");
+    DO_TEST("disk-many");
+    DO_TEST("graphics-vnc");
+    DO_TEST("graphics-sdl");
+    DO_TEST("input-usbmouse");
+    DO_TEST("input-usbtablet");
+    DO_TEST("misc-acpi");
+    DO_TEST("misc-no-reboot");
+    DO_TEST("net-user");
+
+    DO_TEST("serial-vc");
+    DO_TEST("serial-pty");
+    DO_TEST("serial-dev");
+    DO_TEST("serial-file");
+    DO_TEST("serial-unix");
+    DO_TEST("serial-tcp");
+    DO_TEST("serial-udp");
+    DO_TEST("serial-tcp-telnet");
+    DO_TEST("serial-many");
+    DO_TEST("parallel-tcp");
+    DO_TEST("console-compat");
 
     virCapabilitiesFree(driver.caps);
 
Index: tests/qemuxml2xmltest.c
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2xmltest.c,v
retrieving revision 1.12
diff -u -p -r1.12 qemuxml2xmltest.c
--- tests/qemuxml2xmltest.c	10 Apr 2008 16:53:29 -0000	1.12
+++ tests/qemuxml2xmltest.c	15 Apr 2008 21:31:32 -0000
@@ -15,7 +15,7 @@
 #include "qemu_conf.h"
 
 static char *progname;
-static char *abs_top_srcdir;
+static char *abs_srcdir;
 static struct qemud_driver driver;
 
 #define MAX_FILE 4096
@@ -66,8 +66,8 @@ static int testCompareXMLToXMLFiles(cons
 
 static int testCompareXMLToXMLHelper(const void *data) {
     char xml[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/tests/qemuxml2argvdata/qemuxml2argv-%s.xml",
-             abs_top_srcdir, (const char*)data);
+    snprintf(xml, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
+             abs_srcdir, (const char*)data);
     return testCompareXMLToXMLFiles(xml);
 }
 
@@ -76,6 +76,7 @@ int
 main(int argc, char **argv)
 {
     int ret = 0;
+    char cwd[PATH_MAX];
 
     progname = argv[0];
 
@@ -84,76 +85,45 @@ main(int argc, char **argv)
         exit(EXIT_FAILURE);
     }
 
-    abs_top_srcdir = getenv("abs_top_srcdir");
-    if (!abs_top_srcdir)
-      return 1;
-
+    abs_srcdir = getenv("abs_srcdir");
+    if (!abs_srcdir)
+        abs_srcdir = getcwd(cwd, sizeof(cwd));
 
     driver.caps = qemudCapsInit();
 
-    if (virtTestRun("QEMU XML-2-ARGV minimal",
-                    1, testCompareXMLToXMLHelper, "minimal") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot CDROM",
-                    1, testCompareXMLToXMLHelper, "boot-cdrom") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot Network",
-                    1, testCompareXMLToXMLHelper, "boot-network") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Boot Floppy",
-                    1, testCompareXMLToXMLHelper, "boot-floppy") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Clock UTC",
-                    1, testCompareXMLToXMLHelper, "clock-utc") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Clock Localtime",
-                    1, testCompareXMLToXMLHelper, "clock-localtime") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk CDROM",
-                    1, testCompareXMLToXMLHelper, "disk-cdrom") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk Floppy",
-                    1, testCompareXMLToXMLHelper, "disk-floppy") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Disk Many",
-                    1, testCompareXMLToXMLHelper, "disk-many") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Graphics VNC",
-                    1, testCompareXMLToXMLHelper, "graphics-vnc") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Graphics SDL",
-                    1, testCompareXMLToXMLHelper, "graphics-sdl") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Input USB Mouse",
-                    1, testCompareXMLToXMLHelper, "input-usbmouse") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Input USB Tablet",
-                    1, testCompareXMLToXMLHelper, "input-usbtablet") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Misc ACPI",
-                    1, testCompareXMLToXMLHelper, "misc-acpi") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Misc No Reboot",
-                    1, testCompareXMLToXMLHelper, "misc-no-reboot") < 0)
-        ret = -1;
-
-    if (virtTestRun("QEMU XML-2-ARGV Net User",
-                    1, testCompareXMLToXMLHelper, "net-user") < 0)
-        ret = -1;
+#define DO_TEST(name) \
+    if (virtTestRun("QEMU XML-2-XML " name, \
+                    1, testCompareXMLToXMLHelper, (name)) < 0) \
+        ret = -1
+
+    DO_TEST("minimal");
+    DO_TEST("boot-cdrom");
+    DO_TEST("boot-network");
+    DO_TEST("boot-floppy");
+    DO_TEST("clock-utc");
+    DO_TEST("clock-localtime");
+    DO_TEST("disk-cdrom");
+    DO_TEST("disk-floppy");
+    DO_TEST("disk-many");
+    DO_TEST("graphics-vnc");
+    DO_TEST("graphics-sdl");
+    DO_TEST("input-usbmouse");
+    DO_TEST("input-usbtablet");
+    DO_TEST("misc-acpi");
+    DO_TEST("misc-no-reboot");
+    DO_TEST("net-user");
+
+    DO_TEST("serial-vc");
+    DO_TEST("serial-pty");
+    DO_TEST("serial-dev");
+    DO_TEST("serial-file");
+    DO_TEST("serial-unix");
+    DO_TEST("serial-tcp");
+    DO_TEST("serial-udp");
+    DO_TEST("serial-tcp-telnet");
+    DO_TEST("serial-many");
+    DO_TEST("parallel-tcp");
+    DO_TEST("console-compat");
 
     virCapabilitiesFree(driver.caps);
 
Index: tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-boot-cdrom.args
--- tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot d -cdrom /dev/cdrom -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot d -cdrom /dev/cdrom -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-boot-floppy.args
--- tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot a -hda /dev/HostVG/QEMUGuest1 -fda /tmp/firmware.img -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot a -hda /dev/HostVG/QEMUGuest1 -fda /tmp/firmware.img -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-boot-network.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-boot-network.args
--- tests/qemuxml2argvdata/qemuxml2argv-boot-network.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-boot-network.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot n -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot n -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-clock-localtime.args
--- tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -localtime -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -localtime -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-clock-utc.args
--- tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-console-compat.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-console-compat.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-console-compat.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-console-compat.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial pty -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-console-compat.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-console-compat.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-console-compat.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-console-compat.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <console tty='pty'/>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-disk-cdrom.args
--- tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -cdrom /root/boot.iso -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -cdrom /root/boot.iso -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-disk-floppy.args
--- tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -fda /dev/fd0 -fdb /tmp/firmware.img -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -fda /dev/fd0 -fdb /tmp/firmware.img -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-disk-many.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-disk-many.args
--- tests/qemuxml2argvdata/qemuxml2argv-disk-many.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-disk-many.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -hdb /dev/HostVG/QEMUGuest2 -hdc /tmp/data.img -hdd /tmp/logs.img -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -hdb /dev/HostVG/QEMUGuest2 -hdc /tmp/data.img -hdd /tmp/logs.img -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-graphics-sdl.args
--- tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args,v
retrieving revision 1.1
diff -u -p -r1.1 qemuxml2argv-graphics-vnc.args
--- tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args	18 Jul 2007 21:34:22 -0000	1.1
+++ tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -vnc 127.0.0.1:3
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-input-usbmouse.args
--- tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -usbdevice mouse
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -usbdevice mouse
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-input-usbtablet.args
--- tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -usbdevice tablet
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -usbdevice tablet
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-minimal.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-minimal.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-minimal.args
--- tests/qemuxml2argvdata/qemuxml2argv-minimal.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-minimal.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-misc-acpi.args
--- tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-misc-no-reboot.args
--- tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-reboot -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-reboot -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-net-user.args
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-net-user.args,v
retrieving revision 1.2
diff -u -p -r1.2 qemuxml2argv-net-user.args
--- tests/qemuxml2argvdata/qemuxml2argv-net-user.args	24 Jul 2007 14:30:06 -0000	1.2
+++ tests/qemuxml2argvdata/qemuxml2argv-net-user.args	15 Apr 2008 21:31:32 -0000
@@ -1 +1 @@
-/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net nic,macaddr=00:11:22:33:44:55,vlan=0 -net user,vlan=0 -usb
\ No newline at end of file
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net nic,macaddr=00:11:22:33:44:55,vlan=0 -net user,vlan=0 -serial none -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel tcp:127.0.0.1:9999,listen -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-parallel-tcp.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <parallel type='tcp'>
+      <source mode='bind' host='127.0.0.1' service='9999' wiremode='raw'/>
+      <target port='0'/>
+    </parallel>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-dev.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial /dev/ttyS2 -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-dev.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-dev.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-dev.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-dev.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='dev'>
+      <source path='/dev/ttyS2'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-file.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-file.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-file.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-file.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial file:/tmp/serial.log -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-file.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-file.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-file.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-file.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='file'>
+      <source path='/tmp/serial.log'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-many.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-many.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-many.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-many.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial pty -serial file:/tmp/serial.log -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-many.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-many.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-many.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-many.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,30 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <serial type='file'>
+      <source path='/tmp/serial.log'/>
+      <target port='1'/>
+    </serial>
+    <console tty='pty'/>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-pty.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial pty -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-pty.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-pty.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-pty.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-pty.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <console tty='pty'/>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial telnet:127.0.0.1:9999,listen -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-telnet.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='tcp'>
+      <source mode='bind' host='127.0.0.1' service='9999' wiremode='telnet'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial tcp:127.0.0.1:9999 -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-tcp.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='tcp'>
+      <source mode='connect' host='127.0.0.1' service='9999' wiremode='raw'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-udp.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial udp:127.0.0.1:9998 at 127.0.0.1:9999 -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-udp.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-udp.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-udp.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-udp.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,27 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='udp'>
+      <source mode='bind' host='127.0.0.1' service='9999'/>
+      <source mode='connect' host='127.0.0.1' service='9998'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-unix.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial unix:/tmp/serial.sock -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-unix.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-unix.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-unix.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-unix.xml	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1,26 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='unix'>
+      <source mode='connect' path='/tmp/serial.sock'/>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-vc.args	15 Apr 2008 21:31:32 -0000
@@ -0,0 +1 @@
+/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial vc -parallel none -usb
\ No newline at end of file
Index: tests/qemuxml2argvdata/qemuxml2argv-serial-vc.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-serial-vc.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-serial-vc.xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-serial-vc.xml	15 Apr 2008 21:31:33 -0000
@@ -0,0 +1,25 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</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'/>
+    </disk>
+    <serial type='vc'>
+      <target port='0'/>
+    </serial>
+  </devices>
+</domain>


-- 
|: Red Hat, Engineering, Boston   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list