libxl: remove libxl_button_press in favour of libxl_send_trigger.
authorIan Campbell <ian.campbell@citrix.com>
Tue, 31 Jan 2012 16:34:39 +0000 (16:34 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 31 Jan 2012 16:34:39 +0000 (16:34 +0000)
send_trigger already included all the operations covered by button_press.

Rework send_trigger to take an enum instead of a string.

I stopped short at removing the xl "button-press" command but instead have
marked it as deprecated.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
docs/man/xl.pod.1
tools/libxl/libxl.c
tools/libxl/libxl.h
tools/libxl/libxl_types.idl
tools/libxl/xl_cmdimpl.c
tools/ocaml/libs/xl/xenlight.ml.in
tools/ocaml/libs/xl/xenlight.mli.in
tools/ocaml/libs/xl/xenlight_stubs.c

index 28237d367bed6e047047c133026a6063851168bf..51948144a4e3bf4a3fd7817091c6b568ac30ed66 100644 (file)
@@ -86,6 +86,8 @@ previously, most commands take I<domain-id> as the first parameter.
 
 =item B<button-press> I<domain-id> I<button>
 
+I<This command is deprecated. Please use C<xl trigger> in preference>
+
 Indicate an ACPI button press to the domain. I<button> is may be 'power' or
 'sleep'. This command is only available for HVM domains.
 
@@ -461,7 +463,7 @@ It can be used to send SysRq requests to Linux guests, see sysrq.txt in
 your Linux Kernel sources for more information.
 It requires PV drivers to be installed in your guest OS.
 
-=item B<trigger> I<domain-id> I<nmi|reset|init|power|sleep> [I<VCPU>]
+=item B<trigger> I<domain-id> I<nmi|reset|init|power|sleep|s3resume> [I<VCPU>]
 
 Send a trigger to a domain, where the trigger can be: nmi, reset, init, power
 or sleep.  Optionally a specific vcpu number can be passed as an argument.
index 60487fceb8e6bf1f7873b86d6562d6f64aba78d9..a5d87c7cc32e00c91d238286684e17a99fe110cb 100644 (file)
@@ -2728,24 +2728,6 @@ out:
     return 0;
 }
 
-int libxl_button_press(libxl_ctx *ctx, uint32_t domid, libxl_button button)
-{
-    int rc = -1;
-
-    switch (button) {
-    case LIBXL_BUTTON_POWER:
-        rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_POWER, 0);
-        break;
-    case LIBXL_BUTTON_SLEEP:
-        rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_SLEEP, 0);
-        break;
-    default:
-        break;
-    }
-
-    return rc;
-}
-
 int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo)
 {
     xc_physinfo_t xcphysinfo = { 0 };
@@ -3144,44 +3126,46 @@ int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid,
     return 0;
 }
 
-static int trigger_type_from_string(char *trigger_name)
-{
-    if (!strcmp(trigger_name, "nmi"))
-        return XEN_DOMCTL_SENDTRIGGER_NMI;
-    else if (!strcmp(trigger_name, "reset"))
-        return XEN_DOMCTL_SENDTRIGGER_RESET;
-    else if (!strcmp(trigger_name, "init"))
-        return XEN_DOMCTL_SENDTRIGGER_INIT;
-    else if (!strcmp(trigger_name, "power"))
-        return XEN_DOMCTL_SENDTRIGGER_POWER;
-    else if (!strcmp(trigger_name, "sleep"))
-        return XEN_DOMCTL_SENDTRIGGER_SLEEP;
-    else
-        return -1;
-}
-
-int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, char *trigger_name, uint32_t vcpuid)
+int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid,
+                       libxl_trigger trigger, uint32_t vcpuid)
 {
-    int rc = -1;
-    int trigger_type = -1;
+    int rc;
 
-    if (!strcmp(trigger_name, "s3resume")) {
+    switch (trigger) {
+    case LIBXL_TRIGGER_POWER:
+        rc = xc_domain_send_trigger(ctx->xch, domid,
+                                    XEN_DOMCTL_SENDTRIGGER_POWER, vcpuid);
+        break;
+    case LIBXL_TRIGGER_SLEEP:
+        rc = xc_domain_send_trigger(ctx->xch, domid,
+                                    XEN_DOMCTL_SENDTRIGGER_SLEEP, vcpuid);
+        break;
+    case LIBXL_TRIGGER_NMI:
+        rc = xc_domain_send_trigger(ctx->xch, domid,
+                                    XEN_DOMCTL_SENDTRIGGER_NMI, vcpuid);
+        break;
+    case LIBXL_TRIGGER_INIT:
+        rc = xc_domain_send_trigger(ctx->xch, domid,
+                                    XEN_DOMCTL_SENDTRIGGER_INIT, vcpuid);
+        break;
+    case LIBXL_TRIGGER_RESET:
+        rc = xc_domain_send_trigger(ctx->xch, domid,
+                                    XEN_DOMCTL_SENDTRIGGER_RESET, vcpuid);
+        break;
+    case LIBXL_TRIGGER_S3RESUME:
         xc_set_hvm_param(ctx->xch, domid, HVM_PARAM_ACPI_S_STATE, 0);
-        return 0;
-    }
-
-    trigger_type = trigger_type_from_string(trigger_name);
-    if (trigger_type == -1) {
-        LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, -1,
-            "Invalid trigger, valid triggers are <nmi|reset|init|power|sleep>");
-        return ERROR_INVAL;
+        rc = 0;
+        break;
+    default:
+        rc = EINVAL;
+        break;
     }
 
-    rc = xc_domain_send_trigger(ctx->xch, domid, trigger_type, vcpuid);
     if (rc != 0) {
         LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc,
-            "Send trigger '%s' failed", trigger_name);
-        return ERROR_FAIL;
+                            "Send trigger '%s' failed",
+                            libxl_trigger_to_string(trigger));
+        rc = ERROR_FAIL;
     }
 
     return 0;
index e7e4f4ec682a6b8cdd9c72eb0c9df024d6fe1570..ea5997be04fdd5a1aede6146edf6d341e827e357 100644 (file)
@@ -575,8 +575,6 @@ int libxl_userdata_retrieve(libxl_ctx *ctx, uint32_t domid,
    * On error return, *data_r and *datalen_r are undefined.
    */
 
-int libxl_button_press(libxl_ctx *ctx, uint32_t domid, libxl_button button);
-
 int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo);
 int libxl_get_topologyinfo(libxl_ctx *ctx, libxl_topologyinfo *info);
 libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid,
@@ -603,7 +601,7 @@ int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid,
 int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid,
                                 libxl_sched_sedf *scinfo);
 int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid,
-                       char *trigger_name, uint32_t vcpuid);
+                       libxl_trigger trigger, uint32_t vcpuid);
 int libxl_send_sysrq(libxl_ctx *ctx, uint32_t domid, char sysrq);
 int libxl_send_debug_keys(libxl_ctx *ctx, char *keys);
 
index c859c3db1c513dba08266b73a4dddeff063fa2a1..617dad637423aa01812a9b0f37f4553913501954 100644 (file)
@@ -75,9 +75,14 @@ libxl_action_on_shutdown = Enumeration("action_on_shutdown", [
     (6, "COREDUMP_RESTART"),
     ])
 
-libxl_button = Enumeration("button", [
+libxl_trigger = Enumeration("trigger", [
+    (0, "UNKNOWN"),
     (1, "POWER"),
     (2, "SLEEP"),
+    (3, "NMI"),
+    (4, "INIT"),
+    (5, "RESET"),
+    (6, "S3RESUME"),
     ])
 
 libxl_tsc_mode = Enumeration("tsc_mode", [
index 5260abc073c125d547810f164db6e80ec3599fea..faa69f2da1b88eac57a3e62ccf120e7492b0a752 100644 (file)
@@ -3465,26 +3465,29 @@ int main_create(int argc, char **argv)
 
 static void button_press(const char *p, const char *b)
 {
-    libxl_button button;
+    libxl_trigger trigger;
 
     find_domain(p);
 
     if (!strcmp(b, "power")) {
-        button = LIBXL_BUTTON_POWER;
+        trigger = LIBXL_TRIGGER_POWER;
     } else if (!strcmp(b, "sleep")) {
-        button = LIBXL_BUTTON_SLEEP;
+        trigger = LIBXL_TRIGGER_SLEEP;
     } else {
         fprintf(stderr, "%s is an invalid button identifier\n", b);
         exit(2);
     }
 
-    libxl_button_press(ctx, domid, button);
+    libxl_send_trigger(ctx, domid, trigger, 0);
 }
 
 int main_button_press(int argc, char **argv)
 {
     int opt;
 
+    fprintf(stderr, "WARNING: \"button-press\" is deprecated. "
+            "Please use \"trigger\"\n");
+
     if ((opt = def_getopt(argc, argv, "", "button-press", 2)) != -1)
         return opt;
 
@@ -4512,10 +4515,11 @@ int main_rename(int argc, char **argv)
 int main_trigger(int argc, char **argv)
 {
     int opt;
-    char *trigger_name = NULL;
     char *endptr = NULL;
     const char *dom = NULL;
     int vcpuid = 0;
+    const char *trigger_name = NULL;
+    libxl_trigger trigger;
 
     if ((opt = def_getopt(argc, argv, "", "trigger", 2)) != -1)
         return opt;
@@ -4525,6 +4529,10 @@ int main_trigger(int argc, char **argv)
     find_domain(dom);
 
     trigger_name = argv[optind++];
+    if (libxl_trigger_from_string(trigger_name, &trigger)) {
+        fprintf(stderr, "Invalid trigger \"%s\"\n", trigger_name);
+        return -1;
+    }
 
     if (argv[optind]) {
         vcpuid = strtol(argv[optind], &endptr, 10);
@@ -4533,7 +4541,7 @@ int main_trigger(int argc, char **argv)
         }
     }
 
-    libxl_send_trigger(ctx, domid, trigger_name, vcpuid);
+    libxl_send_trigger(ctx, domid, trigger, vcpuid);
 
     return 0;
 }
index f4bba86837faee67c401bc9dcc1ed81831ca2e4b..bf7a45080cae6db2a6e8b477b82737c43c42a56f 100644 (file)
@@ -29,10 +29,8 @@ module Topologyinfo = struct
        external get : unit -> t = "stub_xl_topologyinfo"
 end
 
-external button_press : domid -> button -> unit = "stub_xl_button_press"
 
-
-external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger"
+external send_trigger : domid -> trigger -> int -> unit = "stub_xl_send_trigger"
 external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq"
 external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys"
 
index 2b169a085e8e67d69e21fd8e2ca72d063fc279b5..7006b2a1455de8ce21815b415265a0cd15d32dc2 100644 (file)
@@ -29,8 +29,6 @@ module Topologyinfo : sig
        external get : unit -> t = "stub_xl_topologyinfo"
 end
 
-external button_press : domid -> button -> unit = "stub_xl_button_press"
-
-external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger"
+external send_trigger : domid -> trigger -> int -> unit = "stub_xl_send_trigger"
 external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq"
 external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys"
index 59329f184faa2ea0892fbdef68b3bf1a57bde454..4b19e9a858cb02c3d6fc663088899701f4610e36 100644 (file)
@@ -432,21 +432,6 @@ value stub_xl_device_pci_remove(value info, value domid)
        CAMLreturn(Val_unit);
 }
 
-value stub_xl_button_press(value domid, value button)
-{
-       CAMLparam2(domid, button);
-       int ret;
-       INIT_STRUCT();
-
-       INIT_CTX();
-       ret = libxl_button_press(ctx, Int_val(domid), Int_val(button) + LIBXL_BUTTON_POWER);
-       if (ret != 0)
-               failwith_xl("button_press", &lg);
-       FREE_CTX();
-
-       CAMLreturn(Val_unit);
-}
-
 value stub_xl_physinfo_get(value unit)
 {
        CAMLparam1(unit);
@@ -523,10 +508,10 @@ value stub_xl_send_trigger(value domid, value trigger, value vcpuid)
 {
        CAMLparam3(domid, trigger, vcpuid);
        int ret;
-       char *c_trigger;
+       libxl_trigger c_trigger = LIBXL_TRIGGER_UNKNOWN;
        INIT_STRUCT();
 
-       c_trigger = dup_String_val(&gc, trigger);
+       trigger_val(&gc, &lg, &c_trigger, trigger);
 
        INIT_CTX();
        ret = libxl_send_trigger(ctx, Int_val(domid), c_trigger, Int_val(vcpuid));