diff options
Diffstat (limited to 'tools/libxen/src/xen_vm.c')
-rw-r--r-- | tools/libxen/src/xen_vm.c | 350 |
1 files changed, 177 insertions, 173 deletions
diff --git a/tools/libxen/src/xen_vm.c b/tools/libxen/src/xen_vm.c index 35cf104abf..6cbc3670b0 100644 --- a/tools/libxen/src/xen_vm.c +++ b/tools/libxen/src/xen_vm.c @@ -22,8 +22,7 @@ #include "xen_common.h" #include "xen_console.h" -#include "xen_cpu_feature.h" -#include "xen_cpu_feature_internal.h" +#include "xen_crashdump.h" #include "xen_host.h" #include "xen_int_float_map.h" #include "xen_internal.h" @@ -31,8 +30,10 @@ #include "xen_on_normal_exit_internal.h" #include "xen_string_string_map.h" #include "xen_vbd.h" +#include "xen_vdi.h" #include "xen_vif.h" #include "xen_vm.h" +#include "xen_vm_metrics.h" #include "xen_vm_power_state_internal.h" #include "xen_vtpm.h" @@ -69,6 +70,9 @@ static const struct_member xen_vm_record_struct_members[] = { .key = "auto_power_on", .type = &abstract_type_bool, .offset = offsetof(xen_vm_record, auto_power_on) }, + { .key = "suspend_VDI", + .type = &abstract_type_ref, + .offset = offsetof(xen_vm_record, suspend_vdi) }, { .key = "resident_on", .type = &abstract_type_ref, .offset = offsetof(xen_vm_record, resident_on) }, @@ -78,9 +82,6 @@ static const struct_member xen_vm_record_struct_members[] = { .key = "memory_dynamic_max", .type = &abstract_type_int, .offset = offsetof(xen_vm_record, memory_dynamic_max) }, - { .key = "memory_actual", - .type = &abstract_type_int, - .offset = offsetof(xen_vm_record, memory_actual) }, { .key = "memory_dynamic_min", .type = &abstract_type_int, .offset = offsetof(xen_vm_record, memory_dynamic_min) }, @@ -91,35 +92,26 @@ static const struct_member xen_vm_record_struct_members[] = .type = &abstract_type_string, .offset = offsetof(xen_vm_record, vcpus_policy) }, { .key = "VCPUs_params", - .type = &abstract_type_string, + .type = &abstract_type_string_string_map, .offset = offsetof(xen_vm_record, vcpus_params) }, + { .key = "VCPUs_max", + .type = &abstract_type_int, + .offset = offsetof(xen_vm_record, vcpus_max) }, + { .key = "VCPUs_at_startup", + .type = &abstract_type_int, + .offset = offsetof(xen_vm_record, vcpus_at_startup) }, { .key = "VCPUs_number", .type = &abstract_type_int, .offset = offsetof(xen_vm_record, vcpus_number) }, { .key = "VCPUs_utilisation", .type = &abstract_type_int_float_map, .offset = offsetof(xen_vm_record, vcpus_utilisation) }, - { .key = "VCPUs_features_required", - .type = &xen_cpu_feature_set_abstract_type_, - .offset = offsetof(xen_vm_record, vcpus_features_required) }, - { .key = "VCPUs_features_can_use", - .type = &xen_cpu_feature_set_abstract_type_, - .offset = offsetof(xen_vm_record, vcpus_features_can_use) }, - { .key = "VCPUs_features_force_on", - .type = &xen_cpu_feature_set_abstract_type_, - .offset = offsetof(xen_vm_record, vcpus_features_force_on) }, - { .key = "VCPUs_features_force_off", - .type = &xen_cpu_feature_set_abstract_type_, - .offset = offsetof(xen_vm_record, vcpus_features_force_off) }, { .key = "actions_after_shutdown", .type = &xen_on_normal_exit_abstract_type_, .offset = offsetof(xen_vm_record, actions_after_shutdown) }, { .key = "actions_after_reboot", .type = &xen_on_normal_exit_abstract_type_, .offset = offsetof(xen_vm_record, actions_after_reboot) }, - { .key = "actions_after_suspend", - .type = &xen_on_normal_exit_abstract_type_, - .offset = offsetof(xen_vm_record, actions_after_suspend) }, { .key = "actions_after_crash", .type = &xen_on_crash_behaviour_abstract_type_, .offset = offsetof(xen_vm_record, actions_after_crash) }, @@ -132,6 +124,9 @@ static const struct_member xen_vm_record_struct_members[] = { .key = "VBDs", .type = &abstract_type_ref_set, .offset = offsetof(xen_vm_record, vbds) }, + { .key = "crash_dumps", + .type = &abstract_type_ref_set, + .offset = offsetof(xen_vm_record, crash_dumps) }, { .key = "VTPMs", .type = &abstract_type_ref_set, .offset = offsetof(xen_vm_record, vtpms) }, @@ -174,9 +169,15 @@ static const struct_member xen_vm_record_struct_members[] = { .key = "tools_version", .type = &abstract_type_string_string_map, .offset = offsetof(xen_vm_record, tools_version) }, - { .key = "otherConfig", + { .key = "other_config", .type = &abstract_type_string_string_map, - .offset = offsetof(xen_vm_record, otherconfig) } + .offset = offsetof(xen_vm_record, other_config) }, + { .key = "is_control_domain", + .type = &abstract_type_bool, + .offset = offsetof(xen_vm_record, is_control_domain) }, + { .key = "metrics", + .type = &abstract_type_ref, + .offset = offsetof(xen_vm_record, metrics) } }; const abstract_type xen_vm_record_abstract_type_ = @@ -200,17 +201,15 @@ xen_vm_record_free(xen_vm_record *record) free(record->uuid); free(record->name_label); free(record->name_description); + xen_vdi_record_opt_free(record->suspend_vdi); xen_host_record_opt_free(record->resident_on); free(record->vcpus_policy); - free(record->vcpus_params); + xen_string_string_map_free(record->vcpus_params); xen_int_float_map_free(record->vcpus_utilisation); - xen_cpu_feature_set_free(record->vcpus_features_required); - xen_cpu_feature_set_free(record->vcpus_features_can_use); - xen_cpu_feature_set_free(record->vcpus_features_force_on); - xen_cpu_feature_set_free(record->vcpus_features_force_off); xen_console_record_opt_set_free(record->consoles); xen_vif_record_opt_set_free(record->vifs); xen_vbd_record_opt_set_free(record->vbds); + xen_crashdump_record_opt_set_free(record->crash_dumps); xen_vtpm_record_opt_set_free(record->vtpms); free(record->pv_bootloader); free(record->pv_kernel); @@ -221,7 +220,8 @@ xen_vm_record_free(xen_vm_record *record) free(record->platform_serial); free(record->pci_bus); xen_string_string_map_free(record->tools_version); - xen_string_string_map_free(record->otherconfig); + xen_string_string_map_free(record->other_config); + xen_vm_metrics_record_opt_free(record->metrics); free(record); } @@ -412,7 +412,7 @@ xen_vm_get_auto_power_on(xen_session *session, bool *result, xen_vm vm) bool -xen_vm_get_resident_on(xen_session *session, xen_host *result, xen_vm vm) +xen_vm_get_suspend_vdi(xen_session *session, xen_vdi *result, xen_vm vm) { abstract_value param_values[] = { @@ -423,13 +423,13 @@ xen_vm_get_resident_on(xen_session *session, xen_host *result, xen_vm vm) abstract_type result_type = abstract_type_string; *result = NULL; - XEN_CALL_("VM.get_resident_on"); + XEN_CALL_("VM.get_suspend_VDI"); return session->ok; } bool -xen_vm_get_memory_static_max(xen_session *session, int64_t *result, xen_vm vm) +xen_vm_get_resident_on(xen_session *session, xen_host *result, xen_vm vm) { abstract_value param_values[] = { @@ -437,15 +437,16 @@ xen_vm_get_memory_static_max(xen_session *session, int64_t *result, xen_vm vm) .u.string_val = vm } }; - abstract_type result_type = abstract_type_int; + abstract_type result_type = abstract_type_string; - XEN_CALL_("VM.get_memory_static_max"); + *result = NULL; + XEN_CALL_("VM.get_resident_on"); return session->ok; } bool -xen_vm_get_memory_dynamic_max(xen_session *session, int64_t *result, xen_vm vm) +xen_vm_get_memory_static_max(xen_session *session, int64_t *result, xen_vm vm) { abstract_value param_values[] = { @@ -455,13 +456,13 @@ xen_vm_get_memory_dynamic_max(xen_session *session, int64_t *result, xen_vm vm) abstract_type result_type = abstract_type_int; - XEN_CALL_("VM.get_memory_dynamic_max"); + XEN_CALL_("VM.get_memory_static_max"); return session->ok; } bool -xen_vm_get_memory_actual(xen_session *session, int64_t *result, xen_vm vm) +xen_vm_get_memory_dynamic_max(xen_session *session, int64_t *result, xen_vm vm) { abstract_value param_values[] = { @@ -471,7 +472,7 @@ xen_vm_get_memory_actual(xen_session *session, int64_t *result, xen_vm vm) abstract_type result_type = abstract_type_int; - XEN_CALL_("VM.get_memory_actual"); + XEN_CALL_("VM.get_memory_dynamic_max"); return session->ok; } @@ -526,7 +527,7 @@ xen_vm_get_vcpus_policy(xen_session *session, char **result, xen_vm vm) bool -xen_vm_get_vcpus_params(xen_session *session, char **result, xen_vm vm) +xen_vm_get_vcpus_params(xen_session *session, xen_string_string_map **result, xen_vm vm) { abstract_value param_values[] = { @@ -534,7 +535,7 @@ xen_vm_get_vcpus_params(xen_session *session, char **result, xen_vm vm) .u.string_val = vm } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_string_map; *result = NULL; XEN_CALL_("VM.get_VCPUs_params"); @@ -543,7 +544,7 @@ xen_vm_get_vcpus_params(xen_session *session, char **result, xen_vm vm) bool -xen_vm_get_vcpus_number(xen_session *session, int64_t *result, xen_vm vm) +xen_vm_get_vcpus_max(xen_session *session, int64_t *result, xen_vm vm) { abstract_value param_values[] = { @@ -553,13 +554,13 @@ xen_vm_get_vcpus_number(xen_session *session, int64_t *result, xen_vm vm) abstract_type result_type = abstract_type_int; - XEN_CALL_("VM.get_VCPUs_number"); + XEN_CALL_("VM.get_VCPUs_max"); return session->ok; } bool -xen_vm_get_vcpus_utilisation(xen_session *session, xen_int_float_map **result, xen_vm vm) +xen_vm_get_vcpus_at_startup(xen_session *session, int64_t *result, xen_vm vm) { abstract_value param_values[] = { @@ -567,50 +568,15 @@ xen_vm_get_vcpus_utilisation(xen_session *session, xen_int_float_map **result, x .u.string_val = vm } }; - abstract_type result_type = abstract_type_int_float_map; - - *result = NULL; - XEN_CALL_("VM.get_VCPUs_utilisation"); - return session->ok; -} - - -bool -xen_vm_get_vcpus_features_required(xen_session *session, struct xen_cpu_feature_set **result, xen_vm vm) -{ - abstract_value param_values[] = - { - { .type = &abstract_type_string, - .u.string_val = vm } - }; - - abstract_type result_type = xen_cpu_feature_set_abstract_type_; - - *result = NULL; - XEN_CALL_("VM.get_VCPUs_features_required"); - return session->ok; -} - - -bool -xen_vm_get_vcpus_features_can_use(xen_session *session, struct xen_cpu_feature_set **result, xen_vm vm) -{ - abstract_value param_values[] = - { - { .type = &abstract_type_string, - .u.string_val = vm } - }; - - abstract_type result_type = xen_cpu_feature_set_abstract_type_; + abstract_type result_type = abstract_type_int; - *result = NULL; - XEN_CALL_("VM.get_VCPUs_features_can_use"); + XEN_CALL_("VM.get_VCPUs_at_startup"); return session->ok; } bool -xen_vm_get_vcpus_features_force_on(xen_session *session, struct xen_cpu_feature_set **result, xen_vm vm) +xen_vm_get_vcpus_number(xen_session *session, int64_t *result, xen_vm vm) { abstract_value param_values[] = { @@ -618,16 +584,15 @@ xen_vm_get_vcpus_features_force_on(xen_session *session, struct xen_cpu_feature_ .u.string_val = vm } }; - abstract_type result_type = xen_cpu_feature_set_abstract_type_; + abstract_type result_type = abstract_type_int; - *result = NULL; - XEN_CALL_("VM.get_VCPUs_features_force_on"); + XEN_CALL_("VM.get_VCPUs_number"); return session->ok; } bool -xen_vm_get_vcpus_features_force_off(xen_session *session, struct xen_cpu_feature_set **result, xen_vm vm) +xen_vm_get_vcpus_utilisation(xen_session *session, xen_int_float_map **result, xen_vm vm) { abstract_value param_values[] = { @@ -635,10 +600,10 @@ xen_vm_get_vcpus_features_force_off(xen_session *session, struct xen_cpu_feature .u.string_val = vm } }; - abstract_type result_type = xen_cpu_feature_set_abstract_type_; + abstract_type result_type = abstract_type_int_float_map; *result = NULL; - XEN_CALL_("VM.get_VCPUs_features_force_off"); + XEN_CALL_("VM.get_VCPUs_utilisation"); return session->ok; } @@ -674,7 +639,7 @@ xen_vm_get_actions_after_reboot(xen_session *session, enum xen_on_normal_exit *r bool -xen_vm_get_actions_after_suspend(xen_session *session, enum xen_on_normal_exit *result, xen_vm vm) +xen_vm_get_actions_after_crash(xen_session *session, enum xen_on_crash_behaviour *result, xen_vm vm) { abstract_value param_values[] = { @@ -682,14 +647,14 @@ xen_vm_get_actions_after_suspend(xen_session *session, enum xen_on_normal_exit * .u.string_val = vm } }; - abstract_type result_type = xen_on_normal_exit_abstract_type_; - XEN_CALL_("VM.get_actions_after_suspend"); + abstract_type result_type = xen_on_crash_behaviour_abstract_type_; + XEN_CALL_("VM.get_actions_after_crash"); return session->ok; } bool -xen_vm_get_actions_after_crash(xen_session *session, enum xen_on_crash_behaviour *result, xen_vm vm) +xen_vm_get_consoles(xen_session *session, struct xen_console_set **result, xen_vm vm) { abstract_value param_values[] = { @@ -697,14 +662,16 @@ xen_vm_get_actions_after_crash(xen_session *session, enum xen_on_crash_behaviour .u.string_val = vm } }; - abstract_type result_type = xen_on_crash_behaviour_abstract_type_; - XEN_CALL_("VM.get_actions_after_crash"); + abstract_type result_type = abstract_type_string_set; + + *result = NULL; + XEN_CALL_("VM.get_consoles"); return session->ok; } bool -xen_vm_get_consoles(xen_session *session, struct xen_console_set **result, xen_vm vm) +xen_vm_get_vifs(xen_session *session, struct xen_vif_set **result, xen_vm vm) { abstract_value param_values[] = { @@ -715,13 +682,13 @@ xen_vm_get_consoles(xen_session *session, struct xen_console_set **result, xen_v abstract_type result_type = abstract_type_string_set; *result = NULL; - XEN_CALL_("VM.get_consoles"); + XEN_CALL_("VM.get_VIFs"); return session->ok; } bool -xen_vm_get_vifs(xen_session *session, struct xen_vif_set **result, xen_vm vm) +xen_vm_get_vbds(xen_session *session, struct xen_vbd_set **result, xen_vm vm) { abstract_value param_values[] = { @@ -732,13 +699,13 @@ xen_vm_get_vifs(xen_session *session, struct xen_vif_set **result, xen_vm vm) abstract_type result_type = abstract_type_string_set; *result = NULL; - XEN_CALL_("VM.get_VIFs"); + XEN_CALL_("VM.get_VBDs"); return session->ok; } bool -xen_vm_get_vbds(xen_session *session, struct xen_vbd_set **result, xen_vm vm) +xen_vm_get_crash_dumps(xen_session *session, struct xen_crashdump_set **result, xen_vm vm) { abstract_value param_values[] = { @@ -749,7 +716,7 @@ xen_vm_get_vbds(xen_session *session, struct xen_vbd_set **result, xen_vm vm) abstract_type result_type = abstract_type_string_set; *result = NULL; - XEN_CALL_("VM.get_VBDs"); + XEN_CALL_("VM.get_crash_dumps"); return session->ok; } @@ -989,7 +956,7 @@ xen_vm_get_tools_version(xen_session *session, xen_string_string_map **result, x bool -xen_vm_get_otherconfig(xen_session *session, xen_string_string_map **result, xen_vm vm) +xen_vm_get_other_config(xen_session *session, xen_string_string_map **result, xen_vm vm) { abstract_value param_values[] = { @@ -1000,7 +967,40 @@ xen_vm_get_otherconfig(xen_session *session, xen_string_string_map **result, xen abstract_type result_type = abstract_type_string_string_map; *result = NULL; - XEN_CALL_("VM.get_otherConfig"); + XEN_CALL_("VM.get_other_config"); + return session->ok; +} + + +bool +xen_vm_get_is_control_domain(xen_session *session, bool *result, xen_vm vm) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vm } + }; + + abstract_type result_type = abstract_type_bool; + + XEN_CALL_("VM.get_is_control_domain"); + return session->ok; +} + + +bool +xen_vm_get_metrics(xen_session *session, xen_vm_metrics *result, xen_vm vm) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vm } + }; + + abstract_type result_type = abstract_type_string; + + *result = NULL; + XEN_CALL_("VM.get_metrics"); return session->ok; } @@ -1086,177 +1086,163 @@ xen_vm_set_auto_power_on(xen_session *session, xen_vm vm, bool auto_power_on) bool -xen_vm_set_memory_dynamic_max(xen_session *session, xen_vm vm, int64_t dynamic_max) +xen_vm_set_memory_static_max(xen_session *session, xen_vm vm, int64_t static_max) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, { .type = &abstract_type_int, - .u.int_val = dynamic_max } + .u.int_val = static_max } }; - xen_call_(session, "VM.set_memory_dynamic_max", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_memory_static_max", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_set_memory_dynamic_min(xen_session *session, xen_vm vm, int64_t dynamic_min) +xen_vm_set_memory_dynamic_max(xen_session *session, xen_vm vm, int64_t dynamic_max) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, { .type = &abstract_type_int, - .u.int_val = dynamic_min } - }; - - xen_call_(session, "VM.set_memory_dynamic_min", param_values, 2, NULL, NULL); - return session->ok; -} - - -bool -xen_vm_set_vcpus_policy(xen_session *session, xen_vm vm, char *policy) -{ - abstract_value param_values[] = - { - { .type = &abstract_type_string, - .u.string_val = vm }, - { .type = &abstract_type_string, - .u.string_val = policy } + .u.int_val = dynamic_max } }; - xen_call_(session, "VM.set_VCPUs_policy", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_memory_dynamic_max", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_set_vcpus_params(xen_session *session, xen_vm vm, char *params) +xen_vm_set_memory_dynamic_min(xen_session *session, xen_vm vm, int64_t dynamic_min) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &abstract_type_string, - .u.string_val = params } + { .type = &abstract_type_int, + .u.int_val = dynamic_min } }; - xen_call_(session, "VM.set_VCPUs_params", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_memory_dynamic_min", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_set_vcpus_number(xen_session *session, xen_vm vm, int64_t number) +xen_vm_set_memory_static_min(xen_session *session, xen_vm vm, int64_t static_min) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, { .type = &abstract_type_int, - .u.int_val = number } + .u.int_val = static_min } }; - xen_call_(session, "VM.set_VCPUs_number", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_memory_static_min", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_set_vcpus_features_force_on(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_on) +xen_vm_set_vcpus_policy(xen_session *session, xen_vm vm, char *policy) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_set_abstract_type_, - .u.set_val = (arbitrary_set *)force_on } + { .type = &abstract_type_string, + .u.string_val = policy } }; - xen_call_(session, "VM.set_VCPUs_features_force_on", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_VCPUs_policy", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_add_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value) +xen_vm_set_vcpus_params(xen_session *session, xen_vm vm, xen_string_string_map *params) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_abstract_type_, - .u.string_val = xen_cpu_feature_to_string(value) } + { .type = &abstract_type_string_string_map, + .u.set_val = (arbitrary_set *)params } }; - xen_call_(session, "VM.add_VCPUs_features_force_on", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_VCPUs_params", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_remove_vcpus_features_force_on(xen_session *session, xen_vm vm, enum xen_cpu_feature value) +xen_vm_add_to_vcpus_params(xen_session *session, xen_vm vm, char *key, char *value) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_abstract_type_, - .u.string_val = xen_cpu_feature_to_string(value) } + { .type = &abstract_type_string, + .u.string_val = key }, + { .type = &abstract_type_string, + .u.string_val = value } }; - xen_call_(session, "VM.remove_VCPUs_features_force_on", param_values, 2, NULL, NULL); + xen_call_(session, "VM.add_to_VCPUs_params", param_values, 3, NULL, NULL); return session->ok; } bool -xen_vm_set_vcpus_features_force_off(xen_session *session, xen_vm vm, struct xen_cpu_feature_set *force_off) +xen_vm_remove_from_vcpus_params(xen_session *session, xen_vm vm, char *key) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_set_abstract_type_, - .u.set_val = (arbitrary_set *)force_off } + { .type = &abstract_type_string, + .u.string_val = key } }; - xen_call_(session, "VM.set_VCPUs_features_force_off", param_values, 2, NULL, NULL); + xen_call_(session, "VM.remove_from_VCPUs_params", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_add_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value) +xen_vm_set_vcpus_max(xen_session *session, xen_vm vm, int64_t max) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_abstract_type_, - .u.string_val = xen_cpu_feature_to_string(value) } + { .type = &abstract_type_int, + .u.int_val = max } }; - xen_call_(session, "VM.add_VCPUs_features_force_off", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_VCPUs_max", param_values, 2, NULL, NULL); return session->ok; } bool -xen_vm_remove_vcpus_features_force_off(xen_session *session, xen_vm vm, enum xen_cpu_feature value) +xen_vm_set_vcpus_at_startup(xen_session *session, xen_vm vm, int64_t at_startup) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, - { .type = &xen_cpu_feature_abstract_type_, - .u.string_val = xen_cpu_feature_to_string(value) } + { .type = &abstract_type_int, + .u.int_val = at_startup } }; - xen_call_(session, "VM.remove_VCPUs_features_force_off", param_values, 2, NULL, NULL); + xen_call_(session, "VM.set_VCPUs_at_startup", param_values, 2, NULL, NULL); return session->ok; } @@ -1294,22 +1280,6 @@ xen_vm_set_actions_after_reboot(xen_session *session, xen_vm vm, enum xen_on_nor bool -xen_vm_set_actions_after_suspend(xen_session *session, xen_vm vm, enum xen_on_normal_exit after_suspend) -{ - abstract_value param_values[] = - { - { .type = &abstract_type_string, - .u.string_val = vm }, - { .type = &xen_on_normal_exit_abstract_type_, - .u.string_val = xen_on_normal_exit_to_string(after_suspend) } - }; - - xen_call_(session, "VM.set_actions_after_suspend", param_values, 2, NULL, NULL); - return session->ok; -} - - -bool xen_vm_set_actions_after_crash(xen_session *session, xen_vm vm, enum xen_on_crash_behaviour after_crash) { abstract_value param_values[] = @@ -1502,17 +1472,51 @@ xen_vm_set_platform_enable_audio(xen_session *session, xen_vm vm, bool enable_au bool -xen_vm_set_otherconfig(xen_session *session, xen_vm vm, xen_string_string_map *otherconfig) +xen_vm_set_other_config(xen_session *session, xen_vm vm, xen_string_string_map *other_config) { abstract_value param_values[] = { { .type = &abstract_type_string, .u.string_val = vm }, { .type = &abstract_type_string_string_map, - .u.set_val = (arbitrary_set *)otherconfig } + .u.set_val = (arbitrary_set *)other_config } + }; + + xen_call_(session, "VM.set_other_config", param_values, 2, NULL, NULL); + return session->ok; +} + + +bool +xen_vm_add_to_other_config(xen_session *session, xen_vm vm, char *key, char *value) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vm }, + { .type = &abstract_type_string, + .u.string_val = key }, + { .type = &abstract_type_string, + .u.string_val = value } + }; + + xen_call_(session, "VM.add_to_other_config", param_values, 3, NULL, NULL); + return session->ok; +} + + +bool +xen_vm_remove_from_other_config(xen_session *session, xen_vm vm, char *key) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vm }, + { .type = &abstract_type_string, + .u.string_val = key } }; - xen_call_(session, "VM.set_otherConfig", param_values, 2, NULL, NULL); + xen_call_(session, "VM.remove_from_other_config", param_values, 2, NULL, NULL); return session->ok; } |