In QEMU 0.9.0 or later it is possible to tell QEMU to only listen on a particular IP address. THis patch adapts the code so that it honours the 'listen' attribute on the <graphics> tag if using QEMU >= 0.9.0. It also re-enables the tests for this capability that I temporarily disabled. src/qemu_conf.c | 37 +++++++++++++----- src/qemu_conf.h | 1 tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args | 2 tests/qemuxml2argvtest.c | 4 - tests/qemuxml2xmltest.c | 2 5 files changed, 32 insertions(+), 14 deletions(-) Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
Index: src/qemu_conf.c =================================================================== RCS file: /data/cvs/libvirt/src/qemu_conf.c,v retrieving revision 1.5 diff -u -p -r1.5 qemu_conf.c --- src/qemu_conf.c 18 Jul 2007 21:47:47 -0000 1.5 +++ src/qemu_conf.c 23 Jul 2007 18:02:31 -0000 @@ -1197,14 +1197,23 @@ static struct qemud_vm_def *qemudParseXM 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 { @@ -1700,18 +1709,21 @@ int qemudBuildCommandLine(virConnectPtr } 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"))) @@ -2931,6 +2943,11 @@ char *qemudGenerateXML(virConnectPtr con 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; Index: src/qemu_conf.h =================================================================== RCS file: /data/cvs/libvirt/src/qemu_conf.h,v retrieving revision 1.4 diff -u -p -r1.4 qemu_conf.h --- src/qemu_conf.h 18 Jul 2007 21:08:22 -0000 1.4 +++ src/qemu_conf.h 23 Jul 2007 18:02:31 -0000 @@ -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; Index: tests/qemuxml2argvtest.c =================================================================== RCS file: /data/cvs/libvirt/tests/qemuxml2argvtest.c,v retrieving revision 1.1 diff -u -p -r1.1 qemuxml2argvtest.c --- tests/qemuxml2argvtest.c 18 Jul 2007 21:34:22 -0000 1.1 +++ tests/qemuxml2argvtest.c 23 Jul 2007 18:02:31 -0000 @@ -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; Index: tests/qemuxml2xmltest.c =================================================================== RCS file: /data/cvs/libvirt/tests/qemuxml2xmltest.c,v retrieving revision 1.1 diff -u -p -r1.1 qemuxml2xmltest.c --- tests/qemuxml2xmltest.c 18 Jul 2007 21:34:22 -0000 1.1 +++ tests/qemuxml2xmltest.c 23 Jul 2007 18:02:31 -0000 @@ -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; Index: tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args =================================================================== RCS file: /data/cvs/libvirt/tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args,v retrieving revision 1.1 diff -u -p -r1.1 qemuxml2argv-graphics-sdl.args --- tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args 18 Jul 2007 21:34:22 -0000 1.1 +++ tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl.args 23 Jul 2007 18:02:31 -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 -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
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list