All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2 of 5] xenconsole support for multiple consoles
@ 2009-06-11 15:07 Stefano Stabellini
  2009-06-11 15:10 ` Stefano Stabellini
  0 siblings, 1 reply; 2+ messages in thread
From: Stefano Stabellini @ 2009-06-11 15:07 UTC (permalink / raw)
  To: xen-devel

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>

---

diff -r 9d09062e0562 stubdom/stubdom-dm
--- a/stubdom/stubdom-dm	Thu Jun 11 15:24:27 2009 +0100
+++ b/stubdom/stubdom-dm	Thu Jun 11 16:06:16 2009 +0100
@@ -52,6 +52,10 @@
                 keymap=$2
                 shift
                 ;;
+	    -serial)
+		serial="$2"
+		shift
+		;;
 	esac
     fi
     case "$1" in
@@ -100,6 +104,7 @@
 vncpasswd=`xenstore-read /local/domain/0/backend/vfb/$domid/0/vncpasswd 2>/dev/null`
 test "$vncpasswd" && vfb="$vfb, vncpasswd=$vncpasswd"
 test "$keymap" && vfb="$vfb, keymap=$keymap"
+test "$serial" && vfb="$vfb, serial=$serial"
 echo "vfb = ['$vfb']" >> /etc/xen/stubdoms/$domname-dm
 
 echo -n "disk = [ " >> /etc/xen/stubdoms/$domname-dm
diff -r 9d09062e0562 tools/examples/xmexample.hvm-stubdom
--- a/tools/examples/xmexample.hvm-stubdom	Thu Jun 11 15:24:27 2009 +0100
+++ b/tools/examples/xmexample.hvm-stubdom	Thu Jun 11 16:06:16 2009 +0100
@@ -177,10 +177,12 @@
 
 #-----------------------------------------------------------------------------
 #   serial port re-direct to pty deivce, /dev/pts/n 
-#   then xm console or minicom can connect
+#   then xm console or minicom can connect.
+#   In the stubdoms case this option adds a secondary console to the
+#   stubdom because there is always one for logging.
+#   To connect to the guest serial you can use "xm console -n 1"
+#   followed by the domain name of the stubdom.
 # 
-# STUBDOM: always disable as the stub domain doesn't have access to dom0's
-# ptys
 #serial='pty'
 
 
diff -r 9d09062e0562 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py	Thu Jun 11 15:24:27 2009 +0100
+++ b/tools/python/xen/xend/XendConfig.py	Thu Jun 11 16:06:16 2009 +0100
@@ -1433,6 +1433,16 @@
 		    del dev_info['type']
 		    log.debug("iwj dev_type=%s vfb setting dev_info['%s']" %
 				(dev_type, vfb_type))
+                if dev_info.get('serial') is not None :
+                    # Create two serial backends now, the location value is bogus, but does not matter
+                    cfg = self.console_add('vt100', '0')
+                    c_uuid = uuid.createString()
+                    target['devices'][c_uuid] = ('console', cfg)
+                    target['console_refs'].append(c_uuid)
+                    cfg = self.console_add('vt100', '1')
+                    c_uuid = uuid.createString()
+                    target['devices'][c_uuid] = ('console', cfg)
+                    target['console_refs'].append(c_uuid)
                 
             elif dev_type == 'console':
                 if 'console_refs' not in target:
diff -r 9d09062e0562 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py	Thu Jun 11 15:24:27 2009 +0100
+++ b/tools/python/xen/xend/image.py	Thu Jun 11 16:06:16 2009 +0100
@@ -286,6 +286,9 @@
             if dev_type == 'vfb':
                 if 'keymap' in dev_info:
                     keymap = dev_info.get('keymap',{})
+                if 'serial' in dev_info:
+                    ret.append("-serial")
+                    ret.append(dev_info.get('serial',{}))
                 if int(dev_info.get('vnc', 0)) != 0 :
                     has_vnc = True
                 if int(dev_info.get('sdl', 0)) != 0 :
@@ -746,12 +749,10 @@
 
         if not self.display :
             self.display = ''
-        # Do not store sdl, opengl and serial related qemu cli options
+        # Do not store sdl and opengl qemu cli options
         self.vm.storeVm(("image/dmargs", " ".join([ x for x in self.dmargs
                         if x != "-sdl"
-                        and x != "-disable-opengl"
-                        and x != "-serial"
-                        and x != "pty" ])),
+                        and x != "-disable-opengl" ])),
                         ("image/device-model", self.device_model),
                         ("image/display", self.display))
         self.vm.permissionsVm("image/dmargs", { 'dom': self.vm.getDomid(), 'read': True } )
diff -r 9d09062e0562 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py	Thu Jun 11 15:24:27 2009 +0100
+++ b/tools/python/xen/xm/create.py	Thu Jun 11 16:06:16 2009 +0100
@@ -352,7 +352,7 @@
          For example 'irq=7'.
          This option may be repeated to add more than one IRQ.""")
 
-gopts.var('vfb', val="vnc=1,sdl=1,vncunused=1,vncdisplay=N,vnclisten=ADDR,display=DISPLAY,xauthority=XAUTHORITY,vncpasswd=PASSWORD,opengl=1,keymap=FILE",
+gopts.var('vfb', val="vnc=1,sdl=1,vncunused=1,vncdisplay=N,vnclisten=ADDR,display=DISPLAY,xauthority=XAUTHORITY,vncpasswd=PASSWORD,opengl=1,keymap=FILE,serial=FILE",
           fn=append_value, default=[],
           use="""Make the domain a framebuffer backend.
           Both sdl=1 and vnc=1 can be enabled at the same time.
@@ -364,7 +364,8 @@
           For sdl=1, a viewer will be started automatically using the
           given DISPLAY and XAUTHORITY, which default to the current user's
           ones.  OpenGL will be used by default unless opengl is set to 0.
-          keymap overrides the XendD configured default layout file.""")
+          keymap overrides the XendD configured default layout file.
+	  Serial adds a second serial support to qemu.""")
 
 gopts.var('vif', val="type=TYPE,mac=MAC,bridge=BRIDGE,ip=IPADDR,script=SCRIPT," + \
           "backend=DOM,vifname=NAME,rate=RATE,model=MODEL,accel=ACCEL",
@@ -827,7 +828,7 @@
         for (k,v) in d.iteritems():
             if not k in [ 'vnclisten', 'vncunused', 'vncdisplay', 'display',
                           'videoram', 'xauthority', 'sdl', 'vnc', 'vncpasswd',
-                          'opengl', 'keymap' ]:
+                          'opengl', 'keymap', 'serial' ]:
                 err("configuration option %s unknown to vfbs" % k)
             config.append([k,v])
         if not d.has_key("keymap"):

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 2 of 5] xenconsole support for multiple consoles
  2009-06-11 15:07 [PATCH 2 of 5] xenconsole support for multiple consoles Stefano Stabellini
@ 2009-06-11 15:10 ` Stefano Stabellini
  0 siblings, 0 replies; 2+ messages in thread
From: Stefano Stabellini @ 2009-06-11 15:10 UTC (permalink / raw)
  To: xen-devel

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@eu.citrix.com>
> 



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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-06-11 15:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-11 15:07 [PATCH 2 of 5] xenconsole support for multiple consoles Stefano Stabellini
2009-06-11 15:10 ` Stefano Stabellini

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.