From 7371dd7b91a403c45a4363c952697b0e71e1e434 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Fri, 13 Apr 2007 18:14:06 +0100 Subject: Added documentation, C bindings, and test for VM_metrics.VCPUs_flags. Signed-off-by: Ewan Mellor --- tools/libxen/include/xen_int_string_set_map.h | 53 +++++++++++++++++++++++++++ tools/libxen/include/xen_internal.h | 1 + tools/libxen/include/xen_vm_metrics.h | 9 +++++ tools/libxen/src/xen_common.c | 19 ++++++++++ tools/libxen/src/xen_int_string_set_map.c | 52 ++++++++++++++++++++++++++ tools/libxen/src/xen_vm_metrics.c | 22 +++++++++++ tools/libxen/test/test_bindings.c | 20 ++++++++++ 7 files changed, 176 insertions(+) create mode 100644 tools/libxen/include/xen_int_string_set_map.h create mode 100644 tools/libxen/src/xen_int_string_set_map.c (limited to 'tools/libxen') diff --git a/tools/libxen/include/xen_int_string_set_map.h b/tools/libxen/include/xen_int_string_set_map.h new file mode 100644 index 0000000000..7a784fd070 --- /dev/null +++ b/tools/libxen/include/xen_int_string_set_map.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2006-2007, XenSource Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef XEN_INT_STRING_SET_MAP_H +#define XEN_INT_STRING_SET_MAP_H + + +#include "xen_common.h" + + +typedef struct xen_int_string_set_map_contents +{ + int64_t key; + struct xen_string_set *val; +} xen_int_string_set_map_contents; + + +typedef struct xen_int_string_set_map +{ + size_t size; + xen_int_string_set_map_contents contents[]; +} xen_int_string_set_map; + +/** + * Allocate a xen_int_string_set_map of the given size. + */ +extern xen_int_string_set_map * +xen_int_string_set_map_alloc(size_t size); + +/** + * Free the given xen_int_string_set_map, and all referenced values. + * The given map must have been allocated by this library. + */ +extern void +xen_int_string_set_map_free(xen_int_string_set_map *map); + + +#endif diff --git a/tools/libxen/include/xen_internal.h b/tools/libxen/include/xen_internal.h index aad061fe56..ea326b29de 100644 --- a/tools/libxen/include/xen_internal.h +++ b/tools/libxen/include/xen_internal.h @@ -87,6 +87,7 @@ extern const abstract_type abstract_type_ref_set; extern const abstract_type abstract_type_string_string_map; extern const abstract_type abstract_type_int_float_map; extern const abstract_type abstract_type_int_int_map; +extern const abstract_type abstract_type_int_string_set_map; typedef struct abstract_value diff --git a/tools/libxen/include/xen_vm_metrics.h b/tools/libxen/include/xen_vm_metrics.h index 6dfddf6dfd..3350a66807 100644 --- a/tools/libxen/include/xen_vm_metrics.h +++ b/tools/libxen/include/xen_vm_metrics.h @@ -22,6 +22,7 @@ #include "xen_common.h" #include "xen_int_float_map.h" #include "xen_int_int_map.h" +#include "xen_int_string_set_map.h" #include "xen_string_set.h" #include "xen_string_string_map.h" #include "xen_vm_metrics_decl.h" @@ -71,6 +72,7 @@ typedef struct xen_vm_metrics_record xen_int_float_map *vcpus_utilisation; xen_int_int_map *vcpus_cpu; xen_string_string_map *vcpus_params; + xen_int_string_set_map *vcpus_flags; struct xen_string_set *state; time_t start_time; time_t last_updated; @@ -211,6 +213,13 @@ extern bool xen_vm_metrics_get_vcpus_params(xen_session *session, xen_string_string_map **result, xen_vm_metrics vm_metrics); +/** + * Get the VCPUs/flags field of the given VM_metrics. + */ +extern bool +xen_vm_metrics_get_vcpus_flags(xen_session *session, xen_int_string_set_map **result, xen_vm_metrics vm_metrics); + + /** * Get the state field of the given VM_metrics. */ diff --git a/tools/libxen/src/xen_common.c b/tools/libxen/src/xen_common.c index 6b52723d9d..b22ab2fcee 100644 --- a/tools/libxen/src/xen_common.c +++ b/tools/libxen/src/xen_common.c @@ -36,6 +36,7 @@ #include "xen_internal.h" #include "xen_int_float_map.h" #include "xen_int_int_map.h" +#include "xen_int_string_set_map.h" #include "xen_string_string_map.h" @@ -1716,3 +1717,21 @@ const abstract_type abstract_type_int_int_map = .struct_size = sizeof(xen_int_int_map_contents), .members = int_int_members }; + +static struct struct_member int_string_set_members[] = +{ + { + .type = &abstract_type_int, + .offset = offsetof(xen_int_string_set_map_contents, key) + }, + { + .type = &abstract_type_string_set, + .offset = offsetof(xen_int_string_set_map_contents, val) + } +}; +const abstract_type abstract_type_int_string_set_map = + { + .typename = MAP, + .struct_size = sizeof(xen_int_string_set_map_contents), + .members = int_string_set_members + }; diff --git a/tools/libxen/src/xen_int_string_set_map.c b/tools/libxen/src/xen_int_string_set_map.c new file mode 100644 index 0000000000..1b37927034 --- /dev/null +++ b/tools/libxen/src/xen_int_string_set_map.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2006-2007, XenSource Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "xen_common.h" +#include "xen_int_string_set_map.h" +#include "xen_internal.h" +#include "xen_string_set.h" + + +xen_int_string_set_map * +xen_int_string_set_map_alloc(size_t size) +{ + xen_int_string_set_map *result = calloc(1, sizeof(xen_int_string_set_map) + + size * sizeof(struct xen_int_string_set_map_contents)); + result->size = size; + return result; +} + + +void +xen_int_string_set_map_free(xen_int_string_set_map *map) +{ + if (map == NULL) + { + return; + } + + size_t n = map->size; + for (size_t i = 0; i < n; i++) + { + + xen_string_set_free(map->contents[i].val); + } + + free(map); +} diff --git a/tools/libxen/src/xen_vm_metrics.c b/tools/libxen/src/xen_vm_metrics.c index 3bf2fd7c29..267393a935 100644 --- a/tools/libxen/src/xen_vm_metrics.c +++ b/tools/libxen/src/xen_vm_metrics.c @@ -23,6 +23,7 @@ #include "xen_common.h" #include "xen_int_float_map.h" #include "xen_int_int_map.h" +#include "xen_int_string_set_map.h" #include "xen_internal.h" #include "xen_string_string_map.h" #include "xen_vm_metrics.h" @@ -57,6 +58,9 @@ static const struct_member xen_vm_metrics_record_struct_members[] = { .key = "VCPUs_params", .type = &abstract_type_string_string_map, .offset = offsetof(xen_vm_metrics_record, vcpus_params) }, + { .key = "VCPUs_flags", + .type = &abstract_type_int_string_set_map, + .offset = offsetof(xen_vm_metrics_record, vcpus_flags) }, { .key = "state", .type = &abstract_type_string_set, .offset = offsetof(xen_vm_metrics_record, state) }, @@ -90,6 +94,7 @@ xen_vm_metrics_record_free(xen_vm_metrics_record *record) xen_int_float_map_free(record->vcpus_utilisation); xen_int_int_map_free(record->vcpus_cpu); xen_string_string_map_free(record->vcpus_params); + xen_int_string_set_map_free(record->vcpus_flags); xen_string_set_free(record->state); free(record); } @@ -218,6 +223,23 @@ xen_vm_metrics_get_vcpus_params(xen_session *session, xen_string_string_map **re } +bool +xen_vm_metrics_get_vcpus_flags(xen_session *session, xen_int_string_set_map **result, xen_vm_metrics vm_metrics) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vm_metrics } + }; + + abstract_type result_type = abstract_type_int_string_set_map; + + *result = NULL; + XEN_CALL_("VM_metrics.get_VCPUs_flags"); + return session->ok; +} + + bool xen_vm_metrics_get_state(xen_session *session, struct xen_string_set **result, xen_vm_metrics vm_metrics) { diff --git a/tools/libxen/test/test_bindings.c b/tools/libxen/test/test_bindings.c index 9a1ad1f9c4..0659cd89e1 100644 --- a/tools/libxen/test/test_bindings.c +++ b/tools/libxen/test/test_bindings.c @@ -684,6 +684,8 @@ static void print_session_info(xen_session *session) if (!session->ok) { + free(uuid); + free(this_user); xen_session_record_free(record); print_error(session); return; @@ -692,6 +694,8 @@ static void print_session_info(xen_session *session) assert(!strcmp(record->uuid, uuid)); assert(!strcmp(record->this_user, this_user)); + free(uuid); + free(this_user); xen_session_record_free(record); fflush(stdout); @@ -784,6 +788,22 @@ static void print_vm_metrics(xen_session *session, xen_vm vm) vm_metrics_record->vcpus_params->contents[i].val); } + for (size_t i = 0; i < vm_metrics_record->vcpus_flags->size; i++) + { + printf("%"PRId64" -> ", + vm_metrics_record->vcpus_flags->contents[i].key); + xen_string_set *s = vm_metrics_record->vcpus_flags->contents[i].val; + for (size_t j = 0; j < s->size; j++) + { + printf("%s", s->contents[j]); + if (j + 1 != s->size) + { + printf(", "); + } + } + printf("\n"); + } + xen_vm_metrics_record_free(vm_metrics_record); xen_vm_metrics_free(vm_metrics); -- cgit v1.2.3