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
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list