]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
tools: Add cell shutdown sub-command
authorJan Kiszka <jan.kiszka@siemens.com>
Sat, 3 May 2014 11:17:10 +0000 (13:17 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Sat, 3 May 2014 19:58:26 +0000 (21:58 +0200)
We can easily provide cell shutdown semantic by requesting to reload a
cell without passing any images. Defining a separate command is cleaner
than reusing cell load.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
tools/jailhouse.c

index 70fab84463451af1976300af521cc44438c12fce..6a756f9a87f79019e4343d2de9702e5f9ec34b11 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <jailhouse.h>
 
+enum shutdown_load_mode {LOAD, SHUTDOWN};
+
 static void __attribute__((noreturn))
 help(const char *progname, int exit_status)
 {
@@ -34,6 +36,7 @@ help(const char *progname, int exit_status)
               "   cell load { ID | [--name] NAME } IMAGE "
                        "[ -a | --address ADDRESS] ...\n"
               "   cell start { ID | [--name] NAME }\n"
+              "   cell shutdown { ID | [--name] NAME }\n"
               "   cell destroy { ID | [--name] NAME }\n",
               progname);
        exit(exit_status);
@@ -170,7 +173,8 @@ static bool match_opt(const char *argv, const char *short_opt,
                strcmp(argv, long_opt) == 0;
 }
 
-static int cell_load(int argc, char *argv[])
+static int cell_shutdown_load(int argc, char *argv[],
+                             enum shutdown_load_mode mode)
 {
        unsigned int images, id_args, arg_num, n;
        struct jailhouse_preload_image *image;
@@ -182,7 +186,8 @@ static int cell_load(int argc, char *argv[])
 
        id_args = parse_cell_id(&cell_id, argc - 3, &argv[3]);
        arg_num = 3 + id_args;
-       if (id_args == 0 || arg_num == argc)
+       if (id_args == 0 || (mode == SHUTDOWN && arg_num != argc) ||
+           (mode == LOAD && arg_num == argc))
                help(argv[0], 1);
 
        images = 0;
@@ -274,9 +279,11 @@ static int cell_management(int argc, char *argv[])
        if (strcmp(argv[2], "create") == 0)
                err = cell_create(argc, argv);
        else if (strcmp(argv[2], "load") == 0)
-               err = cell_load(argc, argv);
+               err = cell_shutdown_load(argc, argv, LOAD);
        else if (strcmp(argv[2], "start") == 0)
                err = cell_simple_cmd(argc, argv, JAILHOUSE_CELL_START);
+       else if (strcmp(argv[2], "shutdown") == 0)
+               err = cell_shutdown_load(argc, argv, SHUTDOWN);
        else if (strcmp(argv[2], "destroy") == 0)
                err = cell_simple_cmd(argc, argv, JAILHOUSE_CELL_DESTROY);
        else