
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1237310504 25200 # Node ID 6195f98ebe5ef0bb1db1bb8ca946d5449393c21c # Parent 1aff0d0e9bf49e738827b7157c0df407b814ae7d Add Emulator attribute so users can specify an emulator for the guest. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 1aff0d0e9bf4 -r 6195f98ebe5e schema/VSSD.mof --- a/schema/VSSD.mof Wed Mar 04 15:25:33 2009 -0800 +++ b/schema/VSSD.mof Tue Mar 17 10:21:44 2009 -0700 @@ -29,6 +29,9 @@ "One of hd,fd,cdrom.")] string BootDevice; + [Description ("The emulator the guest should use during runtime.")] + string Emulator; + }; [Description ( @@ -42,6 +45,9 @@ [Description ("The device to boot from. One of hd,fd,cdrom.")] string BootDevice; + [Description ("The emulator the guest should use during runtime.")] + string Emulator; + }; [Description ( diff -r 1aff0d0e9bf4 -r 6195f98ebe5e src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Wed Mar 04 15:25:33 2009 -0800 +++ b/src/Virt_VirtualSystemManagementService.c Tue Mar 17 10:21:44 2009 -0700 @@ -148,9 +148,15 @@ return 1; } -static bool fv_default_emulator(struct domain *domain) +static bool fv_set_emulator(struct domain *domain, + const char *emu) { - const char *emul = XEN_EMULATOR; + if ((domain->type == DOMAIN_XENFV) && (emu == NULL)) + emu = XEN_EMULATOR; + + /* No emulator value to set */ + if (emu == NULL) + return true; cleanup_virt_device(domain->dev_emu); @@ -161,7 +167,7 @@ } domain->dev_emu->type = CIM_RES_TYPE_EMU; - domain->dev_emu->dev.emu.path = strdup(emul); + domain->dev_emu->dev.emu.path = strdup(emu); domain->dev_emu->id = strdup("emulator"); return true; @@ -178,8 +184,6 @@ domain->type = DOMAIN_KVM; } else if (STREQC(pfx, "Xen")) { domain->type = DOMAIN_XENFV; - if (!fv_default_emulator(domain)) - return 0; } else { CU_DEBUG("Unknown fullvirt domain type: %s", pfx); return 0; @@ -192,6 +196,17 @@ free(domain->os_info.fv.boot); domain->os_info.fv.boot = strdup(val); + ret = cu_get_str_prop(inst, "Emulator", &val); + if (ret != CMPI_RC_OK) + val = NULL; + else if (disk_type_from_file(val) == DISK_UNKNOWN) { + CU_DEBUG("Emulator path does not exist: %s", val); + return 0; + } + + if (!fv_set_emulator(domain, val)) + return 0; + return 1; }