[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xenconsole: support for multiple consoles per domain



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1245147898 -3600
# Node ID f07a915ecc170f23ec9fa16cbdf05bbb733dc7b4
# Parent  f649dd4454af51d104098af918ef9aa1e1835172
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@xxxxxxxxxxxxx>
---
 tools/console/client/main.c    |   37 +++++++++++++++++++++----------------
 tools/python/xen/xm/console.py |    4 ++--
 tools/python/xen/xm/main.py    |   11 +++++++----
 3 files changed, 30 insertions(+), 22 deletions(-)

diff -r f649dd4454af -r f07a915ecc17 tools/console/client/main.c
--- a/tools/console/client/main.c       Tue Jun 16 11:18:32 2009 +0100
+++ b/tools/console/client/main.c       Tue Jun 16 11:24:58 2009 +0100
@@ -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,14 +277,15 @@ int main(int argc, char **argv)
                        usage(argv[0]);
                        exit(0);
                        break;
-               }
-       }
-       
-       if ((argc - optind) != 1) {
-               fprintf(stderr, "Invalid number of arguments\n");
-               fprintf(stderr, "Try `%s --help' for more information.\n", 
-                       argv[0]);
-               exit(EINVAL);
+               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);
+               }
        }
        
        domid = strtol(argv[optind], &end, 10);
@@ -299,13 +303,13 @@ int main(int argc, char **argv)
 
        signal(SIGTERM, sighandler);
 
-       path = xs_get_domain_path(xs, domid);
+       dom_path = xs_get_domain_path(xs, domid);
+       if (dom_path == NULL)
+               err(errno, "xs_get_domain_path()");
+       path = malloc(strlen(dom_path) + strlen("/serial/0/tty") + 3);
        if (path == NULL)
-               err(errno, "xs_get_domain_path()");
-       path = realloc(path, strlen(path) + strlen("/console/tty") + 1);
-       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;
  }
diff -r f649dd4454af -r f07a915ecc17 tools/python/xen/xm/console.py
--- a/tools/python/xen/xm/console.py    Tue Jun 16 11:18:32 2009 +0100
+++ b/tools/python/xen/xm/console.py    Tue Jun 16 11:24:58 2009 +0100
@@ -24,8 +24,8 @@ from xen.util import utils
 
 XENCONSOLE = "xenconsole"
 
-def execConsole(domid):
-    xen.util.auxbin.execute(XENCONSOLE, [str(domid)])
+def execConsole(domid, num = 0):
+    xen.util.auxbin.execute(XENCONSOLE, [str(domid), "--num", str(num)])
 
 
 class OurXenstoreConnection:
diff -r f649dd4454af -r f07a915ecc17 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Tue Jun 16 11:18:32 2009 +0100
+++ b/tools/python/xen/xm/main.py       Tue Jun 16 11:24:58 2009 +0100
@@ -1779,12 +1779,13 @@ def xm_info(args):
                 print "%-23s:" % x[0], x[1]
 
 def xm_console(args):
-    arg_check(args, "console", 1, 2)
-
+    arg_check(args, "console", 1, 3)
+
+    num = 0
     quiet = False;
 
     try:
-        (options, params) = getopt.gnu_getopt(args, 'q', ['quiet'])
+        (options, params) = getopt.gnu_getopt(args, 'qn:', ['quiet', 'num'])
     except getopt.GetoptError, opterr:
         err(opterr)
         usage('console')
@@ -1792,6 +1793,8 @@ def xm_console(args):
     for (k, v) in options:
         if k in ['-q', '--quiet']:
             quiet = True
+       elif k in ['-n', '--num']:
+           num = int(v[0])
         else:
             assert False
 
@@ -1819,7 +1822,7 @@ def xm_console(args):
         else:
             raise xmlrpclib.Fault(0, "Domain '%s' is not started" % dom)
 
-    console.execConsole(domid)
+    console.execConsole(domid, num)
 
 
 def domain_name_to_domid(domain_name):

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.