Michal Privoznik wrote: > On 19.09.2014 21:23, Jim Fehlig wrote: >> This patch introduces a function to detect whether the specified >> emulator is QEMU_XEN or QEMU_XEN_TRADITIONAL. Detection is based on the >> string "Options specific to the Xen version:" in '$qemu -help' output. >> AFAIK, the only qemu containing that string in help output is the >> old Xen fork (aka qemu-dm). >> >> Note: >> QEMU_XEN means a qemu that contains support for Xen. >> >> QEMU_XEN_TRADITIONAL means Xen's old forked qemu 0.10.2 >> >> Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> >> --- >> src/libxl/libxl_conf.c | 32 ++++++++++++++++++++++++++++++++ >> src/libxl/libxl_conf.h | 3 +++ >> 2 files changed, 35 insertions(+) >> >> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c >> index 0a781f9..ff3f6b5 100644 >> --- a/src/libxl/libxl_conf.c >> +++ b/src/libxl/libxl_conf.c >> @@ -40,6 +40,7 @@ >> #include "viralloc.h" >> #include "viruuid.h" >> #include "capabilities.h" >> +#include "vircommand.h" >> #include "libxl_domain.h" >> #include "libxl_conf.h" >> #include "libxl_utils.h" >> @@ -796,6 +797,37 @@ libxlDiskSetDiscard(libxl_device_disk *x_disk, >> int discard) >> } >> >> >> +#define LIBXL_QEMU_DM_STR "Options specific to the Xen version:" >> + >> +int >> +libxlDomainGetEmulatorType(const virDomainDef *def) >> +{ >> + int ret = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN; >> + virCommandPtr cmd = NULL; >> + char *output = NULL; >> + >> + if (STREQ(def->os.type, "hvm")) { >> + if (def->emulator) { >> + cmd = virCommandNew(def->emulator); >> + >> + virCommandAddArgList(cmd, "-help", NULL); >> + virCommandSetOutputBuffer(cmd, &output); >> + >> + if (virCommandRun(cmd, NULL) < 0) >> + goto cleanup; >> + >> + if (strstr(output, LIBXL_QEMU_DM_STR)) >> + ret = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; >> + } >> + } >> + >> + cleanup: >> + VIR_FREE(output); >> + virCommandFree(cmd); >> + return ret; >> +} >> + >> + >> int >> libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) >> { >> diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h >> index da66b4e..25f77ea 100644 >> --- a/src/libxl/libxl_conf.h >> +++ b/src/libxl/libxl_conf.h >> @@ -163,6 +163,9 @@ virCapsPtr >> libxlMakeCapabilities(libxl_ctx *ctx); >> >> int >> +libxlDomainGetEmulatorType(const virDomainDef *def); >> + >> +int >> libxlMakeDisk(virDomainDiskDefPtr l_dev, libxl_device_disk *x_dev); >> int >> libxlMakeNic(virDomainDefPtr def, >> > > Well, we've tried hard to move away from parsing 'qemu -help' output. Yep, understood. > But on the other hand, this is trivial compared to virQEMUCaps code > we've developed. Right :). This is only detecting if the qemu is Xen's old fork. I really don't know of any other way to do that. > So I'd give green flag to this. Thanks! Regards, Jim -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list