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

Reply via email to