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