From e3af6437f1e2e997df8e41513df0a016e3d22c6a Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 24 Jul 2007 14:30:05 +0000 Subject: [PATCH] Fixed handling of -nographics. Added VNC listen support --- ChangeLog | 10 ++++ src/qemu_conf.c | 52 ++++++++++++++----- src/qemu_conf.h | 1 + .../qemuxml2argv-boot-cdrom.args | 2 +- .../qemuxml2argv-boot-floppy.args | 2 +- .../qemuxml2argv-boot-network.args | 2 +- .../qemuxml2argv-clock-localtime.args | 2 +- .../qemuxml2argv-clock-utc.args | 2 +- .../qemuxml2argv-disk-cdrom.args | 2 +- .../qemuxml2argv-disk-floppy.args | 2 +- .../qemuxml2argv-disk-many.args | 2 +- .../qemuxml2argv-graphics-sdl.args | 2 +- .../qemuxml2argv-input-usbmouse.args | 2 +- .../qemuxml2argv-input-usbtablet.args | 2 +- .../qemuxml2argv-minimal.args | 2 +- .../qemuxml2argv-misc-acpi.args | 2 +- .../qemuxml2argv-misc-no-reboot.args | 2 +- .../qemuxml2argv-net-user.args | 2 +- tests/qemuxml2argvtest.c | 4 +- tests/qemuxml2xmltest.c | 2 +- 20 files changed, 69 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 40cdb705da..c0226c3a9a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Tue Jul 24 10:29:11 EST 2007 Daniel P. Berrange + + * src/qemu_conf.c, src/qemu_conf.h: Added support for the VNC + 'listen' parameter in XML. Move -nographics flag to start of + command line to avoid issues with QEMU default monitor settings. + * tests/qemuxml2argvtest.c, tests/qemuxml2xmltest.c: Re-enable + VNC & SDL tests now they are working correctly + * tests/qemudxml2argvdata/*.args: Move -nographics arg to new + location due to qemu_conf.c changes + Tue Jul 24 10:24:11 EST 2007 Daniel P. Berrange * src/qemu_driver.c: Fixed crash when cleaning up after failed diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 4c4d2c2b9b..6a112daebf 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -1197,14 +1197,23 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn, def->graphicsType = QEMUD_GRAPHICS_NONE; } else if ((prop = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "type"))) { if (!strcmp((char *)prop, "vnc")) { + xmlChar *vncport, *vnclisten; def->graphicsType = QEMUD_GRAPHICS_VNC; - prop = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "port"); - if (prop) { + vncport = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "port"); + if (vncport) { conv = NULL; - def->vncPort = strtoll((const char*)prop, &conv, 10); + def->vncPort = strtoll((const char*)vncport, &conv, 10); } else { def->vncPort = -1; } + vnclisten = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "listen"); + if (vnclisten && *vnclisten) + strncpy(def->vncListen, (char *)vnclisten, BR_INET_ADDR_MAXLEN-1); + else + strcpy(def->vncListen, "127.0.0.1"); + def->vncListen[BR_INET_ADDR_MAXLEN-1] = '\0'; + xmlFree(vncport); + xmlFree(vnclisten); } else if (!strcmp((char *)prop, "sdl")) { def->graphicsType = QEMUD_GRAPHICS_SDL; } else { @@ -1511,6 +1520,18 @@ int qemudBuildCommandLine(virConnectPtr conn, if (!((*argv)[++n] = strdup(vcpus))) goto no_memory; + /* + * NB, -nographic *MUST* come before any serial, or monitor + * or parallel port flags due to QEMU craziness, where it + * decides to change the serial port & monitor to be on stdout + * if you ask for nographic. So we have to make sure we override + * these defaults ourselves... + */ + if (vm->def->graphicsType == QEMUD_GRAPHICS_NONE) { + if (!((*argv)[++n] = strdup("-nographic"))) + goto no_memory; + } + if (!((*argv)[++n] = strdup("-monitor"))) goto no_memory; if (!((*argv)[++n] = strdup("pty"))) @@ -1700,22 +1721,24 @@ int qemudBuildCommandLine(virConnectPtr conn, } if (vm->def->graphicsType == QEMUD_GRAPHICS_VNC) { - char port[10]; + char vncdisplay[BR_INET_ADDR_MAXLEN+20]; int ret; - ret = snprintf(port, sizeof(port), - ((driver->qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) ? - ":%d" : "%d"), - vm->def->vncActivePort - 5900); - if (ret < 0 || ret >= (int)sizeof(port)) + if (driver->qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) + ret = snprintf(vncdisplay, sizeof(vncdisplay), "%s:%d", + vm->def->vncListen, + vm->def->vncActivePort - 5900); + else + ret = snprintf(vncdisplay, sizeof(vncdisplay), "%d", + vm->def->vncActivePort - 5900); + if (ret < 0 || ret >= (int)sizeof(vncdisplay)) goto error; if (!((*argv)[++n] = strdup("-vnc"))) goto no_memory; - if (!((*argv)[++n] = strdup(port))) + if (!((*argv)[++n] = strdup(vncdisplay))) goto no_memory; } else if (vm->def->graphicsType == QEMUD_GRAPHICS_NONE) { - if (!((*argv)[++n] = strdup("-nographic"))) - goto no_memory; + /* Nada - we added -nographic earlier in this function */ } else { /* SDL is the default. no args needed */ } @@ -2931,6 +2954,11 @@ char *qemudGenerateXML(virConnectPtr conn, qemudIsActiveVM(vm) && live ? def->vncActivePort : def->vncPort) < 0) goto no_memory; + if (def->vncListen[0] && + virBufferVSprintf(buf, " listen='%s'", + def->vncListen) < 0) + goto no_memory; + if (virBufferAdd(buf, "/>\n", -1) < 0) goto no_memory; break; diff --git a/src/qemu_conf.h b/src/qemu_conf.h index 3beb9aa433..ed7aba243c 100644 --- a/src/qemu_conf.h +++ b/src/qemu_conf.h @@ -186,6 +186,7 @@ struct qemud_vm_def { int graphicsType; int vncPort; int vncActivePort; + char vncListen[BR_INET_ADDR_MAXLEN]; int ndisks; struct qemud_vm_disk_def *disks; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args index ed6a8655dc..cf4a92815b 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-cdrom.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot d -cdrom /dev/cdrom -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args index 5e387ff805..70d96dee84 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-floppy.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot a -hda /dev/HostVG/QEMUGuest1 -fda /tmp/firmware.img -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args index e1d285ac3a..991f2f9917 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-network.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot n -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args index 555ce35400..c7ef740256 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-localtime.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -localtime -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args b/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args index dc8e52b020..08b55b8846 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-clock-utc.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args index 298cea8cd6..86964c1a07 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -cdrom /root/boot.iso -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args index f6dad3da00..87c579c294 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-floppy.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -fda /dev/fd0 -fdb /tmp/firmware.img -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args index a6a957c4e2..0534d6195e 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-many.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -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 -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args index 50016c4f07..6163ba6dc2 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -sdl \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args index 60b8bbedbc..0e27138ce1 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbmouse.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -usbdevice mouse -nographic \ 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 -usb -usbdevice mouse \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args index 5f6f02cfb3..2c9652b20d 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-input-usbtablet.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -usbdevice tablet -nographic \ 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 -usb -usbdevice tablet \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-minimal.args b/tests/qemuxml2argvdata/qemuxml2argv-minimal.args index dc8e52b020..08b55b8846 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-minimal.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-minimal.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args index 600478c008..b4e8f6804c 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-acpi.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args b/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args index 90ade68b72..0135d5e6c4 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-misc-no-reboot.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -monitor pty -no-reboot -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -usb -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-user.args b/tests/qemuxml2argvdata/qemuxml2argv-net-user.args index bf49035d64..5c218610ed 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-user.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-user.args @@ -1 +1 @@ -/usr/bin/qemu -M pc -m 214 -smp 1 -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 -nographic \ 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 -usb \ No newline at end of file diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 0cb2238e6a..6e77a21c5d 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -146,11 +146,11 @@ main(int argc, char **argv) 1, testCompareXMLToArgvHelper, "disk-many") < 0) ret = -1; - if (0 && virtTestRun("QEMU XML-2-ARGV Graphics VNC", + if (virtTestRun("QEMU XML-2-ARGV Graphics VNC", 1, testCompareXMLToArgvHelper, "graphics-vnc") < 0) ret = -1; - if (0 && virtTestRun("QEMU XML-2-ARGV Graphics SDL", + if (virtTestRun("QEMU XML-2-ARGV Graphics SDL", 1, testCompareXMLToArgvHelper, "graphics-sdl") < 0) ret = -1; diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index fc596b3347..0895d84fe4 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -111,7 +111,7 @@ main(int argc, char **argv) 1, testCompareXMLToXMLHelper, "disk-many") < 0) ret = -1; - if (0 && virtTestRun("QEMU XML-2-ARGV Graphics VNC", + if (virtTestRun("QEMU XML-2-ARGV Graphics VNC", 1, testCompareXMLToXMLHelper, "graphics-vnc") < 0) ret = -1;