Hi All, I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver. Regards, Pritesh
diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 64415ec..07c7c44 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -1348,21 +1348,21 @@ int qemudBuildCommandLine(virConnectPtr conn, } } - if (def->graphics && - def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { + if ((def->ngraphics == 1) && + def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { virBuffer opt = VIR_BUFFER_INITIALIZER; char *optstr; if (qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) { - if (def->graphics->data.vnc.listenAddr) - virBufferAdd(&opt, def->graphics->data.vnc.listenAddr, -1); + if (def->graphics[0]->data.vnc.listenAddr) + virBufferAdd(&opt, def->graphics[0]->data.vnc.listenAddr, -1); else if (driver->vncListen) virBufferAdd(&opt, driver->vncListen, -1); virBufferVSprintf(&opt, ":%d", - def->graphics->data.vnc.port - 5900); + def->graphics[0]->data.vnc.port - 5900); - if (def->graphics->data.vnc.passwd || + if (def->graphics[0]->data.vnc.passwd || driver->vncPassword) virBufferAddLit(&opt, ",password"); @@ -1387,7 +1387,7 @@ int qemudBuildCommandLine(virConnectPtr conn, } } else { virBufferVSprintf(&opt, "%d", - def->graphics->data.vnc.port - 5900); + def->graphics[0]->data.vnc.port - 5900); } if (virBufferError(&opt)) goto no_memory; @@ -1396,22 +1396,22 @@ int qemudBuildCommandLine(virConnectPtr conn, ADD_ARG_LIT("-vnc"); ADD_ARG(optstr); - if (def->graphics->data.vnc.keymap) { + if (def->graphics[0]->data.vnc.keymap) { ADD_ARG_LIT("-k"); - ADD_ARG_LIT(def->graphics->data.vnc.keymap); + ADD_ARG_LIT(def->graphics[0]->data.vnc.keymap); } - } else if (def->graphics && - def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { + } else if ((def->ngraphics == 1) && + def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { char *xauth = NULL; char *display = NULL; - if (def->graphics->data.sdl.xauth && + if (def->graphics[0]->data.sdl.xauth && virAsprintf(&xauth, "XAUTHORITY=%s", - def->graphics->data.sdl.xauth) < 0) + def->graphics[0]->data.sdl.xauth) < 0) goto no_memory; - if (def->graphics->data.sdl.display && + if (def->graphics[0]->data.sdl.display && virAsprintf(&display, "DISPLAY=%s", - def->graphics->data.sdl.display) < 0) { + def->graphics[0]->data.sdl.display) < 0) { VIR_FREE(xauth); goto no_memory; } @@ -1420,7 +1420,7 @@ int qemudBuildCommandLine(virConnectPtr conn, ADD_ENV(xauth); if (display) ADD_ENV(display); - if (def->graphics->data.sdl.fullscreen) + if (def->graphics[0]->data.sdl.fullscreen) ADD_ARG_LIT("-full-screen"); } diff --git a/src/qemu_driver.c b/src/qemu_driver.c index f9fe2ba..1da4a61 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -1140,13 +1140,13 @@ qemudInitPasswords(virConnectPtr conn, * for that yet... */ - if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - (vm->def->graphics->data.vnc.passwd || driver->vncPassword)) { + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + (vm->def->graphics[0]->data.vnc.passwd || driver->vncPassword)) { if (qemudMonitorCommandExtra(vm, "change vnc password", - vm->def->graphics->data.vnc.passwd ? - vm->def->graphics->data.vnc.passwd : + vm->def->graphics[0]->data.vnc.passwd ? + vm->def->graphics[0]->data.vnc.passwd : driver->vncPassword, QEMU_PASSWD_PROMPT, &info) < 0) { @@ -1338,16 +1338,16 @@ static int qemudStartVMDaemon(virConnectPtr conn, driver->securityDriver->domainGenSecurityLabel(conn, vm) < 0) return -1; - if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - vm->def->graphics->data.vnc.autoport) { + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + vm->def->graphics[0]->data.vnc.autoport) { int port = qemudNextFreeVNCPort(driver); if (port < 0) { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to find an unused VNC port")); goto cleanup; } - vm->def->graphics->data.vnc.port = port; + vm->def->graphics[0]->data.vnc.port = port; } if (virFileMakePath(driver->logDir) < 0) { @@ -1504,10 +1504,10 @@ cleanup: VIR_FREE(vm->def->seclabel.label); VIR_FREE(vm->def->seclabel.imagelabel); } - if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - vm->def->graphics->data.vnc.autoport) - vm->def->graphics->data.vnc.port = -1; + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + vm->def->graphics[0]->data.vnc.autoport) + vm->def->graphics[0]->data.vnc.port = -1; if (vm->logfile != -1) { close(vm->logfile); vm->logfile = -1;
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list