Module Name:    src
Committed By:   pooka
Date:           Fri Jan 28 19:21:29 UTC 2011

Modified Files:
        src/lib/librumpclient: rumpclient.c
        src/lib/librumpuser: rumpuser_sp.c
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpkern: rump.c

Log Message:
Pass the value of getprogname() from the client to the server and
record it in p_comm.  This is nice for things like sockstat, since
they now display the client command name:

pain-rustique:43:~> rump.sockstat
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     xulrunner- 16     0 tcp    192.168.2.114.65507   204.152.190.12.80
root     xulrunner- 16     1 tcp    192.168.2.114.65501   204.152.190.12.80
root     xulrunner- 16     2 tcp    192.168.2.114.65500   204.152.190.12.80
root     xulrunner- 16     3 tcp    192.168.2.114.65499   204.152.190.12.80
root     xulrunner- 16     5 tcp    192.168.2.114.65498   204.152.190.12.80
root     xulrunner- 16     6 tcp    192.168.2.114.65497   204.152.190.12.80
root     socket     62     0 tcp6   *.http                *.*
root     socket     62     1 tcp    *.http                *.*
root     socket     63     0 tcp6   *.81                  *.*
root     socket     63     1 tcp    *.81                  *.*


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/lib/librumpclient/rumpclient.c
cvs rdiff -u -r1.37 -r1.38 src/lib/librumpuser/rumpuser_sp.c
cvs rdiff -u -r1.64 -r1.65 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.225 -r1.226 src/sys/rump/librump/rumpkern/rump.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/librumpclient/rumpclient.c
diff -u src/lib/librumpclient/rumpclient.c:1.20 src/lib/librumpclient/rumpclient.c:1.21
--- src/lib/librumpclient/rumpclient.c:1.20	Thu Jan 27 18:04:05 2011
+++ src/lib/librumpclient/rumpclient.c	Fri Jan 28 19:21:28 2011
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpclient.c,v 1.20 2011/01/27 18:04:05 pooka Exp $	*/
+/*      $NetBSD: rumpclient.c,v 1.21 2011/01/28 19:21:28 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -307,10 +307,17 @@
 	struct rsp_hdr rhdr;
 	struct respwait rw;
 	sigset_t omask;
+	size_t bonus;
 	int rv;
 
+	if (auth) {
+		bonus = sizeof(rf);
+	} else {
+		bonus = strlen(getprogname())+1;
+	}
+
 	/* performs server handshake */
-	rhdr.rsp_len = sizeof(rhdr) + (auth ? sizeof(rf) : 0);
+	rhdr.rsp_len = sizeof(rhdr) + bonus;
 	rhdr.rsp_class = RUMPSP_REQ;
 	rhdr.rsp_type = RUMPSP_HANDSHAKE;
 	if (auth)
@@ -328,6 +335,8 @@
 		memcpy(rf.rf_auth, auth, AUTHLEN*sizeof(*auth));
 		rf.rf_cancel = cancel;
 		rv = send_with_recon(spc, &rf, sizeof(rf));
+	} else {
+		rv = dosend(spc, getprogname(), strlen(getprogname())+1);
 	}
 	if (rv || cancel) {
 		if (haslock)

Index: src/lib/librumpuser/rumpuser_sp.c
diff -u src/lib/librumpuser/rumpuser_sp.c:1.37 src/lib/librumpuser/rumpuser_sp.c:1.38
--- src/lib/librumpuser/rumpuser_sp.c:1.37	Sat Jan 22 13:41:22 2011
+++ src/lib/librumpuser/rumpuser_sp.c	Fri Jan 28 19:21:28 2011
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpuser_sp.c,v 1.37 2011/01/22 13:41:22 pooka Exp $	*/
+/*      $NetBSD: rumpuser_sp.c,v 1.38 2011/01/28 19:21:28 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: rumpuser_sp.c,v 1.37 2011/01/22 13:41:22 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_sp.c,v 1.38 2011/01/28 19:21:28 pooka Exp $");
 
 #include <sys/types.h>
 #include <sys/atomic.h>
@@ -85,7 +85,7 @@
 static char banner[MAXBANNER];
 
 #define PROTOMAJOR 0
-#define PROTOMINOR 1
+#define PROTOMINOR 2
 
 struct prefork {
 	uint32_t pf_auth[AUTHLEN];
@@ -149,12 +149,12 @@
 }
 
 static int
-lwproc_rfork(struct spclient *spc, int flags)
+lwproc_rfork(struct spclient *spc, int flags, const char *comm)
 {
 	int rv;
 
 	spops.spop_schedule();
-	rv = spops.spop_lwproc_rfork(spc, flags);
+	rv = spops.spop_lwproc_rfork(spc, flags, comm);
 	spops.spop_unschedule();
 
 	return rv;
@@ -779,7 +779,15 @@
 		}
 
 		if (spc->spc_hdr.rsp_handshake == HANDSHAKE_GUEST) {
-			if ((error = lwproc_rfork(spc, RUMP_RFCFDG)) != 0) {
+			char *comm = (char *)spc->spc_buf;
+			size_t commlen = spc->spc_hdr.rsp_len - HDRSZ;
+
+			/* ensure it's 0-terminated */
+			/* XXX make sure it contains sensible chars? */
+			comm[commlen] = '\0';
+
+			if ((error = lwproc_rfork(spc,
+			    RUMP_RFCFDG, comm)) != 0) {
 				shutdown(spc->spc_fd, SHUT_RDWR);
 			}
 
@@ -844,7 +852,7 @@
 			 * the wrong spc pointer.  (yea, optimize
 			 * interfaces some day if anyone cares)
 			 */
-			if ((error = lwproc_rfork(spc, 0)) != 0) {
+			if ((error = lwproc_rfork(spc, 0, NULL)) != 0) {
 				send_error_resp(spc, reqno, error);
 				shutdown(spc->spc_fd, SHUT_RDWR);
 				lwproc_release();
@@ -889,7 +897,7 @@
 		 * so we can safely use it here.
 		 */
 		lwproc_switch(spc->spc_mainlwp);
-		if ((error = lwproc_rfork(spc, RUMP_RFFDG)) != 0) {
+		if ((error = lwproc_rfork(spc, RUMP_RFFDG, NULL)) != 0) {
 			DPRINTF(("rump_sp: fork failed: %d (%p)\n",error, spc));
 			send_error_resp(spc, reqno, error);
 			lwproc_switch(NULL);

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.64 src/sys/rump/include/rump/rumpuser.h:1.65
--- src/sys/rump/include/rump/rumpuser.h:1.64	Sat Jan 22 13:41:22 2011
+++ src/sys/rump/include/rump/rumpuser.h	Fri Jan 28 19:21:29 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.64 2011/01/22 13:41:22 pooka Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.65 2011/01/28 19:21:29 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -36,7 +36,7 @@
 #include <stdint.h>
 #endif
 
-#define RUMPUSER_VERSION 11
+#define RUMPUSER_VERSION 12
 int rumpuser_getversion(void);
 
 int rumpuser_daemonize_begin(void);
@@ -214,7 +214,7 @@
 
 	void (*spop_lwproc_switch)(struct lwp *);
 	void (*spop_lwproc_release)(void);
-	int (*spop_lwproc_rfork)(void *, int);
+	int (*spop_lwproc_rfork)(void *, int, const char *);
 	int (*spop_lwproc_newlwp)(pid_t);
 	struct lwp * (*spop_lwproc_curlwp)(void);
 	int (*spop_syscall)(int, void *, register_t *);

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.225 src/sys/rump/librump/rumpkern/rump.c:1.226
--- src/sys/rump/librump/rumpkern/rump.c:1.225	Fri Jan 28 18:48:21 2011
+++ src/sys/rump/librump/rumpkern/rump.c	Fri Jan 28 19:21:29 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.225 2011/01/28 18:48:21 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.226 2011/01/28 19:21:29 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.225 2011/01/28 18:48:21 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.226 2011/01/28 19:21:29 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -100,7 +100,7 @@
 #endif
 
 static int rump_proxy_syscall(int, void *, register_t *);
-static int rump_proxy_rfork(void *, int);
+static int rump_proxy_rfork(void *, int, const char *);
 static void rump_proxy_procexit(void);
 
 static char rump_msgbuf[16*1024]; /* 16k should be enough for std rump needs */
@@ -752,9 +752,10 @@
 }
 
 static int
-rump_proxy_rfork(void *priv, int flags)
+rump_proxy_rfork(void *priv, int flags, const char *comm)
 {
 	struct vmspace *newspace;
+	struct proc *p;
 	int error;
 
 	if ((error = rump_lwproc_rfork(flags)) != 0)
@@ -764,11 +765,14 @@
 	 * Since it's a proxy proc, adjust the vmspace.
 	 * Refcount will eternally be 1.
 	 */
+	p = curproc;
 	newspace = kmem_alloc(sizeof(*newspace), KM_SLEEP);
 	newspace->vm_refcnt = 1;
 	newspace->vm_map.pmap = priv;
-	KASSERT(curproc->p_vmspace == vmspace_kernel());
-	curproc->p_vmspace = newspace;
+	KASSERT(p->p_vmspace == vmspace_kernel());
+	p->p_vmspace = newspace;
+	if (comm)
+		strlcpy(p->p_comm, comm, sizeof(p->p_comm));
 
 	return 0;
 }

Reply via email to