diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-06-16 11:24:58 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-06-16 11:24:58 +0100 |
commit | c811d0d548ac0124a899428d7c813267c977c651 (patch) | |
tree | cb9058277092152148a54cfaf686bcbb3f3a6f46 /tools/console | |
parent | f84ee327e5b8311dfa73f059453ef80a5e8a2af2 (diff) | |
download | xen-c811d0d548ac0124a899428d7c813267c977c651.tar.gz xen-c811d0d548ac0124a899428d7c813267c977c651.tar.bz2 xen-c811d0d548ac0124a899428d7c813267c977c651.zip |
xenconsole: support for multiple consoles per domain
This patch adds a new command line argument to xenconsole to specify
to which console to connect to in case a domain has more than one.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'tools/console')
-rw-r--r-- | tools/console/client/main.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/tools/console/client/main.c b/tools/console/client/main.c index 39556da5a0..b66baf8ae6 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -71,6 +71,7 @@ static void usage(const char *program) { "Attaches to a virtual domain console\n" "\n" " -h, --help display this help and exit\n" + " -n, --num N use console number N\n" , program); } @@ -255,15 +256,17 @@ int main(int argc, char **argv) { struct termios attr; int domid; - char *sopt = "h"; + char *sopt = "hn:"; int ch; + unsigned int num = 0; int opt_ind=0; struct option lopt[] = { + { "num", 1, 0, 'n' }, { "help", 0, 0, 'h' }, { 0 }, }; - char *path; + char *dom_path = NULL, *path = NULL; int spty, xsfd; struct xs_handle *xs; char *end; @@ -274,16 +277,17 @@ int main(int argc, char **argv) usage(argv[0]); exit(0); break; + case 'n': + num = atoi(optarg); + break; + default: + fprintf(stderr, "Invalid argument\n"); + fprintf(stderr, "Try `%s --help' for more information.\n", + argv[0]); + exit(EINVAL); } } - if ((argc - optind) != 1) { - fprintf(stderr, "Invalid number of arguments\n"); - fprintf(stderr, "Try `%s --help' for more information.\n", - argv[0]); - exit(EINVAL); - } - domid = strtol(argv[optind], &end, 10); if (end && *end) { fprintf(stderr, "Invalid DOMID `%s'\n", argv[optind]); @@ -299,13 +303,13 @@ int main(int argc, char **argv) signal(SIGTERM, sighandler); - path = xs_get_domain_path(xs, domid); - if (path == NULL) + dom_path = xs_get_domain_path(xs, domid); + if (dom_path == NULL) err(errno, "xs_get_domain_path()"); - path = realloc(path, strlen(path) + strlen("/console/tty") + 1); + path = malloc(strlen(dom_path) + strlen("/serial/0/tty") + 3); if (path == NULL) - err(ENOMEM, "realloc"); - strcat(path, "/console/tty"); + err(ENOMEM, "malloc"); + snprintf(path, strlen(dom_path) + strlen("/serial/0/tty") + 2, "%s/serial/%d/tty", dom_path, num); /* FIXME consoled currently does not assume domain-0 doesn't have a console which is good when we break domain-0 up. To keep us @@ -336,5 +340,6 @@ int main(int argc, char **argv) restore_term(STDIN_FILENO, &attr); free(path); + free(dom_path); return 0; } |