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

[Xen-devel] Re: [PATCH 2 of 5] xenconsole support for multiple consoles



Stefano Stabellini wrote:

> 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>
> 



Sorry I sent two copies of the third patch.
This is the correct xenconsole patch.

---

diff -r 5f407cb2fc00 tools/console/client/main.c
--- a/tools/console/client/main.c       Thu Jun 11 15:19:43 2009 +0100
+++ b/tools/console/client/main.c       Thu Jun 11 15:24:27 2009 +0100
@@ -71,6 +71,7 @@
               "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 @@
 {
        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 @@
                        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);
@@ -299,13 +303,13 @@
 
        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 @@
        restore_term(STDIN_FILENO, &attr);
 
        free(path);
+       free(dom_path);
        return 0;
  }
diff -r 5f407cb2fc00 tools/python/xen/xm/console.py
--- a/tools/python/xen/xm/console.py    Thu Jun 11 15:19:43 2009 +0100
+++ b/tools/python/xen/xm/console.py    Thu Jun 11 15:24:27 2009 +0100
@@ -24,8 +24,8 @@
 
 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 5f407cb2fc00 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Thu Jun 11 15:19:43 2009 +0100
+++ b/tools/python/xen/xm/main.py       Thu Jun 11 15:24:27 2009 +0100
@@ -1779,12 +1779,13 @@
                 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 @@
     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 @@
         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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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