Module Name: src Committed By: pooka Date: Thu Dec 16 12:38:21 UTC 2010
Modified Files: src/lib/librumpclient: rumpclient.c src/lib/librumpuser: rumpuser_sp.c sp_common.c src/sys/rump/include/rump: rumpuser.h src/sys/rump/librump/rumpkern: rump.c Log Message: Print a banner a connecting client. The banner contains rump sp protocol version, os name, os revision and machine. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/lib/librumpclient/rumpclient.c cvs rdiff -u -r1.25 -r1.26 src/lib/librumpuser/rumpuser_sp.c cvs rdiff -u -r1.15 -r1.16 src/lib/librumpuser/sp_common.c cvs rdiff -u -r1.58 -r1.59 src/sys/rump/include/rump/rumpuser.h cvs rdiff -u -r1.211 -r1.212 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.8 src/lib/librumpclient/rumpclient.c:1.9 --- src/lib/librumpclient/rumpclient.c:1.8 Tue Nov 30 22:30:43 2010 +++ src/lib/librumpclient/rumpclient.c Thu Dec 16 12:38:21 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpclient.c,v 1.8 2010/11/30 22:30:43 pooka Exp $ */ +/* $NetBSD: rumpclient.c,v 1.9 2010/12/16 12:38:21 pooka Exp $ */ /* * Copyright (c) 2010 Antti Kantee. All Rights Reserved. @@ -207,9 +207,11 @@ int rumpclient_init() { + char banner[MAXBANNER]; struct sockaddr *sap; char *p; unsigned idx; + ssize_t n; int error, s; if ((p = getenv("RUMP_SERVER")) == NULL) { @@ -244,5 +246,19 @@ pthread_mutex_init(&clispc.spc_mtx, NULL); pthread_cond_init(&clispc.spc_cv, NULL); + if ((n = read(s, banner, sizeof(banner)-1)) < 0) { + fprintf(stderr, "rump_sp: failed to read banner\n"); + return -1; + } + + if (banner[n-1] != '\n') { + fprintf(stderr, "rump_sp: invalid banner\n"); + errno = EINVAL; + return -1; + } + banner[n] = '\0'; + + /* parse the banner some day */ + return 0; } Index: src/lib/librumpuser/rumpuser_sp.c diff -u src/lib/librumpuser/rumpuser_sp.c:1.25 src/lib/librumpuser/rumpuser_sp.c:1.26 --- src/lib/librumpuser/rumpuser_sp.c:1.25 Sun Dec 12 17:58:28 2010 +++ src/lib/librumpuser/rumpuser_sp.c Thu Dec 16 12:38:20 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpuser_sp.c,v 1.25 2010/12/12 17:58:28 pooka Exp $ */ +/* $NetBSD: rumpuser_sp.c,v 1.26 2010/12/16 12:38:20 pooka Exp $ */ /* * Copyright (c) 2010 Antti Kantee. All Rights Reserved. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: rumpuser_sp.c,v 1.25 2010/12/12 17:58:28 pooka Exp $"); +__RCSID("$NetBSD: rumpuser_sp.c,v 1.26 2010/12/16 12:38:20 pooka Exp $"); #include <sys/types.h> #include <sys/atomic.h> @@ -81,6 +81,11 @@ static struct rumpuser_sp_ops spops; +static char banner[MAXBANNER]; + +#define PROTOMAJOR 0 +#define PROTOMINOR 0 + /* * Manual wrappers, since librump does not have access to the * user namespace wrapped interfaces. @@ -415,8 +420,6 @@ return 0; } - /* XXX: should do some sort of handshake too */ - flags = fcntl(newfd, F_GETFL, 0); if (fcntl(newfd, F_SETFL, flags | O_NONBLOCK) == -1) { close(newfd); @@ -428,6 +431,12 @@ return 0; } + /* write out a banner for the client */ + if (write(newfd, banner, strlen(banner)) != (ssize_t)strlen(banner)) { + close(newfd); + return 0; + } + /* find empty slot the simple way */ for (i = 0; i < MAXCLI; i++) { if (pfdlist[i].fd == -1 && spclist[i].spc_dying == 0) @@ -809,7 +818,8 @@ static unsigned cleanupidx; static struct sockaddr *cleanupsa; int -rumpuser_sp_init(const struct rumpuser_sp_ops *spopsp, const char *url) +rumpuser_sp_init(const char *url, const struct rumpuser_sp_ops *spopsp, + const char *ostype, const char *osrelease, const char *machine) { pthread_t pt; struct spservarg *sarg; @@ -826,6 +836,9 @@ if (error) return error; + snprintf(banner, sizeof(banner), "RUMPSP-%d.%d-%s-%s/%s\n", + PROTOMAJOR, PROTOMINOR, ostype, osrelease, machine); + s = socket(parsetab[idx].domain, SOCK_STREAM, 0); if (s == -1) return errno; Index: src/lib/librumpuser/sp_common.c diff -u src/lib/librumpuser/sp_common.c:1.15 src/lib/librumpuser/sp_common.c:1.16 --- src/lib/librumpuser/sp_common.c:1.15 Sun Dec 12 17:58:28 2010 +++ src/lib/librumpuser/sp_common.c Thu Dec 16 12:38:20 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sp_common.c,v 1.15 2010/12/12 17:58:28 pooka Exp $ */ +/* $NetBSD: sp_common.c,v 1.16 2010/12/16 12:38:20 pooka Exp $ */ /* * Copyright (c) 2010 Antti Kantee. All Rights Reserved. @@ -99,6 +99,8 @@ #define rsp_sysnum u.sysnum #define rsp_error u.error +#define MAXBANNER 96 + /* * Data follows the header. We have two types of structured data. */ Index: src/sys/rump/include/rump/rumpuser.h diff -u src/sys/rump/include/rump/rumpuser.h:1.58 src/sys/rump/include/rump/rumpuser.h:1.59 --- src/sys/rump/include/rump/rumpuser.h:1.58 Sun Dec 12 17:10:36 2010 +++ src/sys/rump/include/rump/rumpuser.h Thu Dec 16 12:38:20 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpuser.h,v 1.58 2010/12/12 17:10:36 pooka Exp $ */ +/* $NetBSD: rumpuser.h,v 1.59 2010/12/16 12:38:20 pooka Exp $ */ /* * Copyright (c) 2007 Antti Kantee. All Rights Reserved. @@ -36,7 +36,7 @@ #include <stdint.h> #endif -#define RUMPUSER_VERSION 7 +#define RUMPUSER_VERSION 8 int rumpuser_getversion(void); int rumpuser_daemonize_begin(void); @@ -220,7 +220,8 @@ pid_t (*spop_getpid)(void); }; -int rumpuser_sp_init(const struct rumpuser_sp_ops *, const char *); +int rumpuser_sp_init(const char *, const struct rumpuser_sp_ops *, + const char *, const char *, const char *); int rumpuser_sp_copyin(void *, const void *, void *, size_t); int rumpuser_sp_copyinstr(void *, const void *, void *, size_t *); int rumpuser_sp_copyout(void *, const void *, void *, size_t); Index: src/sys/rump/librump/rumpkern/rump.c diff -u src/sys/rump/librump/rumpkern/rump.c:1.211 src/sys/rump/librump/rumpkern/rump.c:1.212 --- src/sys/rump/librump/rumpkern/rump.c:1.211 Mon Dec 13 14:03:59 2010 +++ src/sys/rump/librump/rumpkern/rump.c Thu Dec 16 12:38:20 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rump.c,v 1.211 2010/12/13 14:03:59 pooka Exp $ */ +/* $NetBSD: rump.c,v 1.212 2010/12/16 12:38:20 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.211 2010/12/13 14:03:59 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.212 2010/12/16 12:38:20 pooka Exp $"); #include <sys/systm.h> #define ELFSIZE ARCH_ELFSIZE @@ -450,7 +450,7 @@ rump_init_server(const char *url) { - return rumpuser_sp_init(&spops, url); + return rumpuser_sp_init(url, &spops, ostype, osrelease, MACHINE); } void