Add manatee halt/poweroff/reboot logic.
BUG=b:197259207
TEST=USE=manatee emerge-${BOARD} upstart
Cq-Depend: chromium:3169361
Change-Id: Ic3f2d6ba50cb8506019fa35915fa46c6cdd4ccf9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/upstart/+/3169569
Tested-by: Allen Webb <allenwebb@google.com>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Allen Webb <allenwebb@google.com>
diff --git a/configure.ac b/configure.ac
index 4344865..00d1b6f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -78,6 +78,15 @@
AC_DEFINE(RESTORE_PATHS, [{"/dev", "/run"}], [Define restorecon paths])
fi
+# Define a preprocessor value if building for a manatee guest.
+AC_ARG_ENABLE(manatee,
+ AS_HELP_STRING([--enable-manatee], [enable ManaTEE guest support]),
+ [], [enable_manatee=no])
+
+if test "x$enable_manatee" = "xyes" ; then
+ AC_DEFINE(ENABLE_MANATEE, 1, [Define if we support ManaTEE])
+fi
+
# If this argument is set, it means that we want to generate and include the
# global seccomp policy in Upstart.
AC_ARG_WITH([seccomp-constants],
diff --git a/util/reboot.c b/util/reboot.c
index fa2e863..4a2114f 100644
--- a/util/reboot.c
+++ b/util/reboot.c
@@ -66,6 +66,10 @@
#define SHUTDOWN SBINDIR "/shutdown"
#endif
+#ifdef ENABLE_MANATEE
+const char MANATEE_CLIENT[] = "/usr/bin/manatee";
+#endif
+
/* Operation modes */
enum {
@@ -228,6 +232,32 @@
/* Re-enable Control-Alt-Delete in case it breaks */
reboot (RB_ENABLE_CAD);
+#ifdef ENABLE_MANATEE
+ int val = fork ();
+ if (val == 0) {
+ const char *flag;
+ /* Do the syscall */
+ switch (mode) {
+ case REBOOT:
+ nih_info (_("Rebooting"));
+ flag = "--reboot";
+ break;
+ case HALT:
+ nih_info (_("Halting"));
+ flag = "--halt";
+ break;
+ case POWEROFF:
+ nih_info (_("Powering off"));
+ flag = "--poweroff";
+ break;
+ }
+ const char *manatee_args[] = { MANATEE_CLIENT, flag };
+ execv (manatee_args[0], manatee_args);
+ } else {
+ waitpid (val, NULL, 0);
+ }
+#endif
+
/* Do the syscall */
switch (mode) {
case REBOOT: