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