[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [libvirt] [PATCH 3/5] libxl: Add function to determine device model type



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


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.