All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Wroblewski <tomasz.wroblewski@citrix.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH] libxenlight: add console command
Date: Fri, 27 Nov 2009 10:40:02 +0000	[thread overview]
Message-ID: <1259318402.3867.24.camel@alva> (raw)

Hello all,

This patch adds "xl console" command similar to "xm console".
 
Signed-off-by: Tomasz Wroblewski <tomasz.wroblewski@citrix.com>
---

diff -r d7d77bace286 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Fri Nov 27 10:13:42 2009 +0000
+++ b/tools/libxl/libxl.c	Fri Nov 27 10:18:18 2009 +0000
@@ -468,6 +468,24 @@
     if (rc < 0) {
         XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, rc, "xc_domain_destroy
failed for %d", domid);
         return -1;
+    }
+    return 0;
+}
+
+int libxl_console_attach(struct libxl_ctx *ctx, uint32_t domid, int
cons_num)
+{
+    struct stat st;
+    const char *XENCONSOLE = "/usr/lib/xen/bin/xenconsole";
+    char *cmd = NULL;
+
+    if (stat(XENCONSOLE, &st) != 0) {
+        XL_LOG(ctx, XL_LOG_ERROR, "could not access %s", XENCONSOLE);
+        return ERROR_FAIL;
+    }
+
+    cmd = libxl_sprintf(ctx, "%s %d --num %d", XENCONSOLE, domid,
cons_num);
+    if (system(cmd) != 0) {
+        return ERROR_FAIL;
     }
     return 0;
 }
diff -r d7d77bace286 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h	Fri Nov 27 10:13:42 2009 +0000
+++ b/tools/libxl/libxl.h	Fri Nov 27 10:18:18 2009 +0000
@@ -266,6 +266,8 @@
 int libxl_domain_pause(struct libxl_ctx *ctx, uint32_t domid);
 int libxl_domain_unpause(struct libxl_ctx *ctx, uint32_t domid);
 
+int libxl_console_attach(struct libxl_ctx *ctx, uint32_t domid, int
cons_num);
+
 struct libxl_dominfo * libxl_domain_list(struct libxl_ctx *ctx, int
*nb_domain);
 xc_dominfo_t * libxl_domain_infolist(struct libxl_ctx *ctx, int
*nb_domain);
 
diff -r d7d77bace286 tools/libxl/xl.c
--- a/tools/libxl/xl.c	Fri Nov 27 10:13:42 2009 +0000
+++ b/tools/libxl/xl.c	Fri Nov 27 10:18:18 2009 +0000
@@ -715,6 +715,7 @@
         printf(" pci-list                      list pass-through pci
devices for a domain\n\n");
         printf(" pause                         pause execution of a
domain\n\n");
         printf(" unpause                       unpause a paused domain
\n\n");
+        printf(" console                       attach to domain's
console\n\n");
     } else if(!strcmp(command, "create")) {
         printf("Usage: xl create <ConfigFile> [options] [vars]\n\n");
         printf("Create a domain based on <ConfigFile>.\n\n");
@@ -742,7 +743,56 @@
     } else if(!strcmp(command, "destroy")) {
         printf("Usage: xl destroy <Domain>\n\n");
         printf("Terminate a domain immediately.\n\n");
+    } else if (!strcmp(command, "console")) {
+        printf("Usage: xl console <Domain>\n\n");
+        printf("Attach to domain's console.\n\n");
     }
+}
+
+void console(char *p, int cons_num)
+{
+    struct libxl_ctx ctx;
+    uint32_t domid;
+
+    libxl_ctx_init(&ctx);
+    libxl_ctx_set_log(&ctx, log_callback, NULL);
+
+    if (libxl_param_to_domid(&ctx, p, &domid) < 0) {
+        fprintf(stderr, "%s is an invalid domain identifier\n", p);
+        exit(2);
+    }
+    libxl_console_attach(&ctx, domid, cons_num);
+}
+
+int main_console(int argc, char **argv)
+{
+    int opt = 0, cons_num = 0;
+    char *p = NULL;
+
+    while ((opt = getopt(argc, argv, "hn:")) != -1) {
+        switch (opt) {
+        case 'h':
+            help("console");
+            exit(0);
+        case 'n':
+            if (optarg) {
+                cons_num = strtol(optarg, NULL, 10);
+            }
+            break;
+        default:
+            fprintf(stderr, "option not supported\n");
+            break;
+        }
+    }
+    if (optind >= argc) {
+        help("console");
+        exit(2);
+    }
+
+    p = argv[optind];
+
+    console(p, cons_num);
+    exit(0);
 }
 
 void pcilist(char *dom)
@@ -1121,6 +1171,8 @@
         main_pause(argc - 1, argv + 1);
     } else if (!strcmp(argv[1], "unpause")) {
         main_unpause(argc - 1, argv + 1);
+    } else if (!strcmp(argv[1], "console")) {
+        main_console(argc - 1, argv + 1);
     } else if (!strcmp(argv[1], "help")) {
         if (argc > 2)
             help(argv[2]);

             reply	other threads:[~2009-11-27 10:40 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-27 10:40 Tomasz Wroblewski [this message]
2009-11-27 11:35 ` [PATCH] libxenlight: add console command Stefano Stabellini
2009-11-27 15:18 ` Stefano Stabellini
2009-12-01  6:47 ` Vincent Hanquez
2009-12-01 13:41   ` Stefano Stabellini
  -- strict thread matches above, loose matches on Subject: below --
2009-11-27 15:31 Tomasz Wroblewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1259318402.3867.24.camel@alva \
    --to=tomasz.wroblewski@citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.