[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: add version_info function
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1271925557 -3600 # Node ID 357a30e4c7cf3317982e538fa507f366fb345cb4 # Parent 8567087654f0d6ec42636aaed46bc4d7ad9c40bc libxl: add version_info function Xen provides a xen_version hypercall to query the values of several interesting things (like hypervisor version, commandline used, actual changeset, etc.). Create a user-friendly and efficient wrapper around the libxc function to provide values for xl info output. Since the information is static during the whole runtime, we store it within the libxl_ctx structure and just deliver the pointer on subsequent calls. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> Acked-by: Vincent Hanquez <vincent.hanquez@xxxxxxxxxxxxx> --- tools/libxl/libxl.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxl.h | 20 +++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff -r 8567087654f0 -r 357a30e4c7cf tools/libxl/libxl.c --- a/tools/libxl/libxl.c Thu Apr 22 09:38:39 2010 +0100 +++ b/tools/libxl/libxl.c Thu Apr 22 09:39:17 2010 +0100 @@ -45,6 +45,7 @@ int libxl_ctx_init(struct libxl_ctx *ctx ctx->alloc_ptrs = calloc(ctx->alloc_maxsize, sizeof(void *)); if (!ctx->alloc_ptrs) return ERROR_NOMEM; + memset(&ctx->version_info, 0, sizeof(libxl_version_info)); ctx->xch = xc_interface_open(); if (ctx->xch == -1) { @@ -2351,6 +2352,51 @@ int libxl_get_physinfo(struct libxl_ctx return 0; } +const libxl_version_info* libxl_get_version_info(struct libxl_ctx *ctx) +{ + union { + xen_extraversion_t xen_extra; + xen_compile_info_t xen_cc; + xen_changeset_info_t xen_chgset; + xen_capabilities_info_t xen_caps; + xen_platform_parameters_t p_parms; + xen_commandline_t xen_commandline; + } u; + long xen_version; + libxl_version_info *info = &ctx->version_info; + + if (info->xen_version_extra != NULL) + return info; + + xen_version = xc_version(ctx->xch, XENVER_version, NULL); + info->xen_version_major = xen_version >> 16; + info->xen_version_minor = xen_version & 0xFF; + xc_version(ctx->xch, XENVER_extraversion, &u.xen_extra); + info->xen_version_extra = libxl_sprintf(ctx, "%s", u.xen_extra); + + xc_version(ctx->xch, XENVER_compile_info, &u.xen_cc); + info->compiler = libxl_sprintf(ctx, "%s", u.xen_cc.compiler); + info->compile_by = libxl_sprintf(ctx, "%s", u.xen_cc.compile_by); + info->compile_domain = libxl_sprintf(ctx, "%s", u.xen_cc.compile_domain); + info->compile_date = libxl_sprintf(ctx, "%s", u.xen_cc.compile_date); + + xc_version(ctx->xch, XENVER_capabilities, &u.xen_caps); + info->capabilities = libxl_sprintf(ctx, "%s", u.xen_caps); + + xc_version(ctx->xch, XENVER_changeset, &u.xen_chgset); + info->changeset = libxl_sprintf(ctx, "%s", u.xen_chgset); + + xc_version(ctx->xch, XENVER_platform_parameters, &u.p_parms); + info->virt_start = u.p_parms.virt_start; + + info->pagesize = xc_version(ctx->xch, XENVER_pagesize, NULL); + + xc_version(ctx->xch, XENVER_commandline, &u.xen_commandline); + info->commandline = libxl_sprintf(ctx, "%s", u.xen_commandline); + + return info; +} + struct libxl_vcpuinfo *libxl_list_vcpu(struct libxl_ctx *ctx, uint32_t domid, int *nb_vcpu, int *cpusize) { diff -r 8567087654f0 -r 357a30e4c7cf tools/libxl/libxl.h --- a/tools/libxl/libxl.h Thu Apr 22 09:38:39 2010 +0100 +++ b/tools/libxl/libxl.h Thu Apr 22 09:39:17 2010 +0100 @@ -41,6 +41,21 @@ struct libxl_vminfo { uint32_t domid; }; +typedef struct { + int xen_version_major; + int xen_version_minor; + char *xen_version_extra; + char *compiler; + char *compile_by; + char *compile_domain; + char *compile_date; + char *capabilities; + char *changeset; + unsigned long virt_start; + unsigned long pagesize; + char *commandline; +} libxl_version_info; + struct libxl_ctx { int xch; struct xs_handle *xsh; @@ -56,7 +71,10 @@ struct libxl_ctx { * set this after libxl_init and before any other call - or * may leave them untouched */ int (*waitpid_instead)(pid_t pid, int *status, int flags); -}; + libxl_version_info version_info; +}; + +const libxl_version_info* libxl_get_version_info(struct libxl_ctx *ctx); typedef struct { bool hvm; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |