Similar to other tools, like 'tail -f', allow 'jailhosue console' to follow the console output when jailhouse gets enabled.
'jailhouse console' will print all available console log of the hypervisor. 'jailhouse console -f' will print all available console log of the hypervisor and append new data as it arrives. Use this patch to remove a redundant '|' in the usage string of the tool. Signed-off-by: Ralf Ramsauer <[email protected]> --- tools/jailhouse.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/tools/jailhouse.c b/tools/jailhouse.c index 84e5fe3d64..ede6ad4412 100644 --- a/tools/jailhouse.c +++ b/tools/jailhouse.c @@ -60,7 +60,7 @@ static void __attribute__((noreturn)) help(char *prog, int exit_status) { const struct extension *ext; - printf("Usage: %s { COMMAND | --help || --version }\n" + printf("Usage: %s { COMMAND | --help | --version }\n" "\nAvailable commands:\n" " enable SYSCONFIG\n" " disable\n" @@ -71,7 +71,8 @@ static void __attribute__((noreturn)) help(char *prog, int exit_status) " [-a | --address ADDRESS] ...\n" " cell start { ID | [--name] NAME }\n" " cell shutdown { ID | [--name] NAME }\n" - " cell destroy { ID | [--name] NAME }\n", + " cell destroy { ID | [--name] NAME }\n" + " console [-f | --follow]\n", basename(prog)); for (ext = extensions; ext->cmd; ext++) printf(" %s %s %s\n", ext->cmd, ext->subcmd, ext->help); @@ -79,6 +80,30 @@ static void __attribute__((noreturn)) help(char *prog, int exit_status) exit(exit_status); } +static int dump_console(int fd, bool non_block) +{ + int ret; + char buffer[128]; + + if (non_block) { + ret = fcntl(fd, F_GETFL, 0); + if (ret == -1) + return -errno; + ret = fcntl(fd, F_SETFL, ret | O_NONBLOCK); + if (ret == -1) + return -errno; + } + + do { + ret = read(fd, buffer, sizeof(buffer)); + if (ret < 0) + break; + ret = write(STDOUT_FILENO, buffer, ret); + } while (ret > 0); + + return ret; +} + static void call_extension_script(const char *cmd, int argc, char *argv[]) { const struct extension *ext; @@ -504,6 +529,22 @@ static int cell_management(int argc, char *argv[]) return err; } +static int console(int argc, char *argv[]) +{ + int fd; + ssize_t ret; + bool non_block = false; + + if (!(argc == 3 && match_opt(argv[2], "-f", "--follow"))) + non_block = true; + + fd = open_dev(); + ret = dump_console(fd, non_block); + close(fd); + + return ret; +} + int main(int argc, char *argv[]) { int fd; @@ -522,6 +563,8 @@ int main(int argc, char *argv[]) close(fd); } else if (strcmp(argv[1], "cell") == 0) { err = cell_management(argc, argv); + } else if (strcmp(argv[1], "console") == 0) { + err = console(argc, argv); } else if (strcmp(argv[1], "config") == 0 || strcmp(argv[1], "hardware") == 0) { call_extension_script(argv[1], argc, argv); -- 2.11.0 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
