From: Kiarie Kahurani <davidkiarie4(a)gmail.com>
introduce function
xenParseXMVfb(.....);
which parses the graphics config
signed-off-by: David Kiarie<davidkiarie4(a)gmail.com>
---
src/xenxs/xen_xm.c | 247 ++++++++++++++++++++++++++++-------------------------
1 file changed, 131 insertions(+), 116 deletions(-)
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 80a7941..89d5739 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -872,125 +872,14 @@ static int xenParseXMDisk(virConfPtr conf, virDomainDefPtr def,
return 0;
}
-virDomainDefPtr
-xenParseXM(virConfPtr conf, int xendConfigVersion,
- virCapsPtr caps)
+static int xenParseXMVfb(virConfPtr conf, virDomainDefPtr def,
+ int xendConfigVersion)
{
- const char *str;
- int hvm = 0;
+ char *listenAddr;
int val;
- virConfValuePtr list;
- virDomainDefPtr def = NULL;
- virDomainDiskDefPtr disk = NULL;
- virDomainNetDefPtr net = NULL;
+ virConfValuePtr list = NULL;
virDomainGraphicsDefPtr graphics = NULL;
- size_t i;
- char *script = NULL;
- char *listenAddr = NULL;
-
- if (VIR_ALLOC(def) < 0)
- return NULL;
-
- def->virtType = VIR_DOMAIN_VIRT_XEN;
- def->id = -1;
- if (xenParseXMGeneral(conf, def, caps) < 0)
- goto cleanup;
- hvm = (STREQ(def->os.type, "hvm"));
- if (hvm) {
- const char *boot;
- if (xenXMConfigCopyString(conf, "kernel", &def->os.loader) <
0)
- goto cleanup;
-
- if (xenXMConfigGetString(conf, "boot", &boot, "c") <
0)
- goto cleanup;
-
- for (i = 0; i < VIR_DOMAIN_BOOT_LAST && boot[i]; i++) {
- switch (*boot) {
- case 'a':
- def->os.bootDevs[i] = VIR_DOMAIN_BOOT_FLOPPY;
- break;
- case 'd':
- def->os.bootDevs[i] = VIR_DOMAIN_BOOT_CDROM;
- break;
- case 'n':
- def->os.bootDevs[i] = VIR_DOMAIN_BOOT_NET;
- break;
- case 'c':
- default:
- def->os.bootDevs[i] = VIR_DOMAIN_BOOT_DISK;
- break;
- }
- def->os.nBootDevs++;
- }
- } else {
- const char *extra, *root;
-
- if (xenXMConfigCopyStringOpt(conf, "bootloader",
&def->os.bootloader) < 0)
- goto cleanup;
- if (xenXMConfigCopyStringOpt(conf, "bootargs",
&def->os.bootloaderArgs) < 0)
- goto cleanup;
-
- if (xenXMConfigCopyStringOpt(conf, "kernel", &def->os.kernel)
< 0)
- goto cleanup;
- if (xenXMConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd)
< 0)
- goto cleanup;
- if (xenXMConfigGetString(conf, "extra", &extra, NULL) < 0)
- goto cleanup;
- if (xenXMConfigGetString(conf, "root", &root, NULL) < 0)
- goto cleanup;
-
- if (root) {
- if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra)
< 0)
- goto cleanup;
- } else {
- if (VIR_STRDUP(def->os.cmdline, extra) < 0)
- goto cleanup;
- }
- }
- if (xenParseXMMem(conf, def) < 0)
- goto cleanup;
- if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator)
< 0)
- goto cleanup;
- if (xenParseXMVif(conf, def) < 0)
- goto cleanup;
-
- if (xenParseXMTimeOffset(conf, def, xendConfigVersion) < 0)
- goto cleanup;
- if (xenParseXMEventsActions(conf, def) < 0)
- goto cleanup;
- if (xenParseXMPCI(conf, def) < 0)
- goto cleanup;
- if (xenParseXMCPUFeatures(conf, def) < 0)
- goto cleanup;
- if (xenParseXMDisk(conf, def, xendConfigVersion) < 0)
- goto cleanup;
-
- if (hvm) {
- if (xenXMConfigGetString(conf, "usbdevice", &str, NULL) < 0)
- goto cleanup;
- if (str &&
- (STREQ(str, "tablet") ||
- STREQ(str, "mouse") ||
- STREQ(str, "keyboard"))) {
- virDomainInputDefPtr input;
- if (VIR_ALLOC(input) < 0)
- goto cleanup;
- input->bus = VIR_DOMAIN_INPUT_BUS_USB;
- if (STREQ(str, "mouse"))
- input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
- else if (STREQ(str, "tablet"))
- input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
- else if (STREQ(str, "keyboard"))
- input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
- if (VIR_ALLOC_N(def->inputs, 1) < 0) {
- virDomainInputDefFree(input);
- goto cleanup;
- }
- def->inputs[0] = input;
- def->ninputs = 1;
- }
- }
-
+ int hvm = STREQ(def->os.type, "hvm");
/* HVM guests, or old PV guests use this config format */
if (hvm || xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
if (xenXMConfigGetBool(conf, "vnc", &val, 0) < 0)
@@ -1125,6 +1014,132 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
}
}
+ return 0;
+
+ cleanup:
+ virDomainGraphicsDefFree(graphics);
+ return -1;
+}
+virDomainDefPtr
+xenParseXM(virConfPtr conf, int xendConfigVersion,
+ virCapsPtr caps)
+{
+ const char *str;
+ int hvm = 0;
+ virConfValuePtr list;
+ virDomainDefPtr def = NULL;
+ virDomainDiskDefPtr disk = NULL;
+ virDomainNetDefPtr net = NULL;
+ virDomainGraphicsDefPtr graphics = NULL;
+ size_t i;
+ char *script = NULL;
+ char *listenAddr = NULL;
+
+ if (VIR_ALLOC(def) < 0)
+ return NULL;
+
+ def->virtType = VIR_DOMAIN_VIRT_XEN;
+ def->id = -1;
+ if (xenParseXMGeneral(conf, def, caps) < 0)
+ goto cleanup;
+ hvm = (STREQ(def->os.type, "hvm"));
+ if (hvm) {
+ const char *boot;
+ if (xenXMConfigCopyString(conf, "kernel", &def->os.loader) <
0)
+ goto cleanup;
+
+ if (xenXMConfigGetString(conf, "boot", &boot, "c") <
0)
+ goto cleanup;
+
+ for (i = 0; i < VIR_DOMAIN_BOOT_LAST && boot[i]; i++) {
+ switch (*boot) {
+ case 'a':
+ def->os.bootDevs[i] = VIR_DOMAIN_BOOT_FLOPPY;
+ break;
+ case 'd':
+ def->os.bootDevs[i] = VIR_DOMAIN_BOOT_CDROM;
+ break;
+ case 'n':
+ def->os.bootDevs[i] = VIR_DOMAIN_BOOT_NET;
+ break;
+ case 'c':
+ default:
+ def->os.bootDevs[i] = VIR_DOMAIN_BOOT_DISK;
+ break;
+ }
+ def->os.nBootDevs++;
+ }
+ } else {
+ const char *extra, *root;
+
+ if (xenXMConfigCopyStringOpt(conf, "bootloader",
&def->os.bootloader) < 0)
+ goto cleanup;
+ if (xenXMConfigCopyStringOpt(conf, "bootargs",
&def->os.bootloaderArgs) < 0)
+ goto cleanup;
+
+ if (xenXMConfigCopyStringOpt(conf, "kernel", &def->os.kernel)
< 0)
+ goto cleanup;
+ if (xenXMConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd)
< 0)
+ goto cleanup;
+ if (xenXMConfigGetString(conf, "extra", &extra, NULL) < 0)
+ goto cleanup;
+ if (xenXMConfigGetString(conf, "root", &root, NULL) < 0)
+ goto cleanup;
+
+ if (root) {
+ if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra)
< 0)
+ goto cleanup;
+ } else {
+ if (VIR_STRDUP(def->os.cmdline, extra) < 0)
+ goto cleanup;
+ }
+ }
+ if (xenParseXMMem(conf, def) < 0)
+ goto cleanup;
+ if (xenXMConfigCopyStringOpt(conf, "device_model", &def->emulator)
< 0)
+ goto cleanup;
+ if (xenParseXMVif(conf, def) < 0)
+ goto cleanup;
+
+ if (xenParseXMTimeOffset(conf, def, xendConfigVersion) < 0)
+ goto cleanup;
+ if (xenParseXMEventsActions(conf, def) < 0)
+ goto cleanup;
+ if (xenParseXMPCI(conf, def) < 0)
+ goto cleanup;
+ if (xenParseXMCPUFeatures(conf, def) < 0)
+ goto cleanup;
+ if (xenParseXMDisk(conf, def, xendConfigVersion) < 0)
+ goto cleanup;
+
+ if (hvm) {
+ if (xenXMConfigGetString(conf, "usbdevice", &str, NULL) < 0)
+ goto cleanup;
+ if (str &&
+ (STREQ(str, "tablet") ||
+ STREQ(str, "mouse") ||
+ STREQ(str, "keyboard"))) {
+ virDomainInputDefPtr input;
+ if (VIR_ALLOC(input) < 0)
+ goto cleanup;
+ input->bus = VIR_DOMAIN_INPUT_BUS_USB;
+ if (STREQ(str, "mouse"))
+ input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+ else if (STREQ(str, "tablet"))
+ input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+ else if (STREQ(str, "keyboard"))
+ input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
+ if (VIR_ALLOC_N(def->inputs, 1) < 0) {
+ virDomainInputDefFree(input);
+ goto cleanup;
+ }
+ def->inputs[0] = input;
+ def->ninputs = 1;
+ }
+ }
+ if (xenParseXMVfb(conf, def, xendConfigVersion) < 0)
+ goto cleanup;
+
if (hvm) {
virDomainChrDefPtr chr = NULL;
--
1.8.4.5