static int xenFormatXLSpice(virConfPtr conf, virDomainDefPtr def) { const char *listenAddr = NULL; if (STREQ(def->os.type, "hvm")) { if (def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { /* set others to false but may not be necessary */ if (xenConfigSetInt(conf, "sdl", 0) < 0) return -1; if (xenConfigSetInt(conf, "vnc", 0) < 0) return -1; if (xenConfigSetInt(conf, "spice", 1) < 0) return -1; if (xenConfigSetInt(conf, "spiceport", def->graphics[0]->data.spice.port) < 0) return -1; if (xenConfigSetInt(conf, "spicetls_port", def->graphics[0]->data.spice.tlsPort) < 0) return -1; if (def->graphics[0]->data.spice.auth.passwd) { if (xenConfigSetInt(conf, "spicedisable_ticketing", 1) < 0) return -1; if (def->graphics[0]->data.spice.auth.passwd && xenConfigSetString(conf, "spicepasswd", def->graphics[0]->data.spice.auth.passwd) < 0) return -1; } listenAddr = virDomainGraphicsListenGetAddress(def->graphics[0], 0); if (listenAddr && xenConfigSetString(conf, "spicehost", listenAddr) < 0) return -1; if (xenConfigSetInt(conf, "spiceagent_mouse", def->graphics[0]->data.spice.mousemode) < 0) return -1; if (def->graphics[0]->data.spice.copypaste) { if (xenConfigSetInt(conf, "spicedvagent", 1) < 0) return -1; if (xenConfigSetInt(conf, "spice_clipboard_sharing", def->graphics[0]->data.spice.copypaste) < 0) return -1; } } } return 0; }
static int xenFormatXMInputDevs(virConfPtr conf, virDomainDefPtr def) { size_t i; const char *devtype; if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) { for (i = 0; i < def->ninputs; i++) { if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_USB) { if (xenConfigSetInt(conf, "usb", 1) < 0) return -1; switch (def->inputs[i]->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: devtype = "mouse"; break; case VIR_DOMAIN_INPUT_TYPE_TABLET: devtype = "tablet"; break; case VIR_DOMAIN_INPUT_TYPE_KBD: devtype = "keyboard"; break; default: continue; } if (xenConfigSetString(conf, "usbdevice", devtype) < 0) return -1; break; } } } return 0; }
static int xenFormatXLSpice(virConfPtr conf, virDomainDefPtr def) { virDomainGraphicsListenDefPtr glisten; virDomainGraphicsDefPtr graphics; if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) { graphics = def->graphics[0]; if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { /* set others to false but may not be necessary */ if (xenConfigSetInt(conf, "sdl", 0) < 0) return -1; if (xenConfigSetInt(conf, "vnc", 0) < 0) return -1; if (xenConfigSetInt(conf, "spice", 1) < 0) return -1; if ((glisten = virDomainGraphicsGetListen(graphics, 0)) && glisten->address && xenConfigSetString(conf, "spicehost", glisten->address) < 0) return -1; if (xenConfigSetInt(conf, "spiceport", graphics->data.spice.port) < 0) return -1; if (xenConfigSetInt(conf, "spicetls_port", graphics->data.spice.tlsPort) < 0) return -1; if (graphics->data.spice.auth.passwd) { if (xenConfigSetInt(conf, "spicedisable_ticketing", 0) < 0) return -1; if (xenConfigSetString(conf, "spicepasswd", graphics->data.spice.auth.passwd) < 0) return -1; } else { if (xenConfigSetInt(conf, "spicedisable_ticketing", 1) < 0) return -1; } if (graphics->data.spice.mousemode) { switch (graphics->data.spice.mousemode) { case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_SERVER: if (xenConfigSetInt(conf, "spiceagent_mouse", 0) < 0) return -1; break; case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT: if (xenConfigSetInt(conf, "spiceagent_mouse", 1) < 0) return -1; /* * spicevdagent must be enabled if using client * mode mouse */ if (xenConfigSetInt(conf, "spicevdagent", 1) < 0) return -1; break; default: break; } } if (graphics->data.spice.copypaste == VIR_TRISTATE_BOOL_YES) { if (xenConfigSetInt(conf, "spice_clipboard_sharing", 1) < 0) return -1; /* * spicevdagent must be enabled if spice_clipboard_sharing * is enabled */ if (xenConfigSetInt(conf, "spicevdagent", 1) < 0) return -1; } } } return 0; }
static int xenFormatXLInputDevs(virConfPtr conf, virDomainDefPtr def) { size_t i; const char *devtype; virConfValuePtr usbdevices = NULL, lastdev; if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) { if (VIR_ALLOC(usbdevices) < 0) goto error; usbdevices->type = VIR_CONF_LIST; usbdevices->list = NULL; lastdev = NULL; for (i = 0; i < def->ninputs; i++) { if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_USB) { if (xenConfigSetInt(conf, "usb", 1) < 0) goto error; switch (def->inputs[i]->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: devtype = "mouse"; break; case VIR_DOMAIN_INPUT_TYPE_TABLET: devtype = "tablet"; break; case VIR_DOMAIN_INPUT_TYPE_KBD: devtype = "keyboard"; break; default: continue; } if (lastdev == NULL) { if (VIR_ALLOC(lastdev) < 0) goto error; usbdevices->list = lastdev; } else { if (VIR_ALLOC(lastdev->next) < 0) goto error; lastdev = lastdev->next; } lastdev->type = VIR_CONF_STRING; if (VIR_STRDUP(lastdev->str, devtype) < 0) goto error; } } if (usbdevices->list != NULL) { if (usbdevices->list->next == NULL) { /* for compatibility with Xen <= 4.2, use old syntax when * only one device present */ if (xenConfigSetString(conf, "usbdevice", usbdevices->list->str) < 0) goto error; virConfFreeValue(usbdevices); } else { virConfSetValue(conf, "usbdevice", usbdevices); } } else { VIR_FREE(usbdevices); } } return 0; error: virConfFreeValue(usbdevices); return -1; }