Module Name:    src
Committed By:   pooka
Date:           Thu Mar 13 01:40:30 UTC 2014

Modified Files:
        src/sys/rump/net/lib/libsockin: Makefile sockin.c
Added Files:
        src/sys/rump/net/lib/libsockin: sockin_user.c sockin_user.h
Removed Files:
        src/sys/rump/net/lib/libsockin: rumpcomp_user.c rumpcomp_user.h

Log Message:
rename rumpcomp_user.* -> sockin_user.*


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/rump/net/lib/libsockin/Makefile
cvs rdiff -u -r1.8 -r0 src/sys/rump/net/lib/libsockin/rumpcomp_user.c
cvs rdiff -u -r1.3 -r0 src/sys/rump/net/lib/libsockin/rumpcomp_user.h
cvs rdiff -u -r1.35 -r1.36 src/sys/rump/net/lib/libsockin/sockin.c
cvs rdiff -u -r0 -r1.1 src/sys/rump/net/lib/libsockin/sockin_user.c \
    src/sys/rump/net/lib/libsockin/sockin_user.h

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

Modified files:

Index: src/sys/rump/net/lib/libsockin/Makefile
diff -u src/sys/rump/net/lib/libsockin/Makefile:1.6 src/sys/rump/net/lib/libsockin/Makefile:1.7
--- src/sys/rump/net/lib/libsockin/Makefile:1.6	Mon Mar 18 13:14:11 2013
+++ src/sys/rump/net/lib/libsockin/Makefile	Thu Mar 13 01:40:30 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.6 2013/03/18 13:14:11 pooka Exp $
+#	$NetBSD: Makefile,v 1.7 2014/03/13 01:40:30 pooka Exp $
 #
 
 LIB=	rumpnet_sockin
@@ -8,7 +8,7 @@ SRCS+=	component.c
 
 CPPFLAGS+= -I${RUMPTOP}/librump/rumpkern
 
-RUMPCOMP_USER=	#defined
+RUMPCOMP_USER_SRCS=	sockin_user.c
 
 .include <bsd.lib.mk>
 .include <bsd.klinks.mk>

Index: src/sys/rump/net/lib/libsockin/sockin.c
diff -u src/sys/rump/net/lib/libsockin/sockin.c:1.35 src/sys/rump/net/lib/libsockin/sockin.c:1.36
--- src/sys/rump/net/lib/libsockin/sockin.c:1.35	Thu Aug 29 17:49:21 2013
+++ src/sys/rump/net/lib/libsockin/sockin.c	Thu Mar 13 01:40:30 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sockin.c,v 1.35 2013/08/29 17:49:21 rmind Exp $	*/
+/*	$NetBSD: sockin.c,v 1.36 2014/03/13 01:40:30 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008, 2009 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.35 2013/08/29 17:49:21 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.36 2014/03/13 01:40:30 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/condvar.h>
@@ -54,7 +54,7 @@ __KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1
 #include <rump/rumpuser.h>
 
 #include "rump_private.h"
-#include "rumpcomp_user.h"
+#include "sockin_user.h"
 
 /*
  * An inet communication domain which uses the socket interface.

Added files:

Index: src/sys/rump/net/lib/libsockin/sockin_user.c
diff -u /dev/null src/sys/rump/net/lib/libsockin/sockin_user.c:1.1
--- /dev/null	Thu Mar 13 01:40:30 2014
+++ src/sys/rump/net/lib/libsockin/sockin_user.c	Thu Mar 13 01:40:30 2014
@@ -0,0 +1,587 @@
+/*	$NetBSD: sockin_user.c,v 1.1 2014/03/13 01:40:30 pooka Exp $	*/
+
+/*
+ * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* for struct msghdr content visibility */
+#define _XOPEN_SOURCE 4
+#define _XOPEN_SOURCE_EXTENDED 1
+
+#ifndef _KERNEL
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <errno.h>
+#include <poll.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+#include <rump/rumpuser_component.h>
+#include <rump/rumpdefs.h>
+
+#include "sockin_user.h"
+
+#define seterror(_v_) if ((_v_) == -1) rv = errno; else rv = 0;
+
+#ifndef __arraycount
+#define __arraycount(a) (sizeof(a) / sizeof(*a))
+#endif
+
+#ifndef __UNCONST
+#define __UNCONST(a) ((void*)(const void*)a)
+#endif
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <netinet/udp.h>
+
+
+static int translate_so_sockopt(int);
+static int translate_ip_sockopt(int);
+static int translate_tcp_sockopt(int);
+static int translate_domain(int);
+
+#define translate(_a_) case RUMP_##_a_: return _a_
+static int
+translate_so_sockopt(int lopt)
+{
+
+	switch (lopt) {
+	translate(SO_DEBUG);
+#ifndef SO_REUSEPORT
+	case RUMP_SO_REUSEPORT: return SO_REUSEADDR;
+#else
+	translate(SO_REUSEPORT);
+#endif
+	translate(SO_TYPE);
+	translate(SO_ERROR);
+	translate(SO_DONTROUTE);
+	translate(SO_BROADCAST);
+	translate(SO_SNDBUF);
+	translate(SO_RCVBUF);
+	translate(SO_KEEPALIVE);
+	translate(SO_OOBINLINE);
+	translate(SO_LINGER);
+	default: return -1;
+	}
+}
+
+static int
+translate_ip_sockopt(int lopt)
+{
+
+	switch (lopt) {
+	translate(IP_TOS);
+	translate(IP_TTL);
+	translate(IP_HDRINCL);
+	translate(IP_MULTICAST_TTL);
+	translate(IP_MULTICAST_LOOP);
+	translate(IP_MULTICAST_IF);
+	translate(IP_ADD_MEMBERSHIP);
+	translate(IP_DROP_MEMBERSHIP);
+	default: return -1;
+	}
+}
+
+static int
+translate_tcp_sockopt(int lopt)
+{
+
+	switch (lopt) {
+	translate(TCP_NODELAY);
+	translate(TCP_MAXSEG);
+	default: return -1;
+	}
+}
+
+static int
+translate_domain(int domain)
+{
+
+	switch (domain) {
+	translate(AF_INET);
+	translate(AF_INET6);
+	default: return AF_UNSPEC;
+	}
+}
+
+#undef translate
+
+static void
+translate_sockopt(int *levelp, int *namep)
+{
+	int level, name;
+
+	level = *levelp;
+	name = *namep;
+
+	switch (level) {
+	case RUMP_SOL_SOCKET:
+		level = SOL_SOCKET;
+		name = translate_so_sockopt(name);
+		break;
+	case RUMP_IPPROTO_IP:
+#ifdef SOL_IP
+		level = SOL_IP;
+#else
+		level = IPPROTO_IP;
+#endif
+		name = translate_ip_sockopt(name);
+		break;
+	case RUMP_IPPROTO_TCP:
+#ifdef SOL_TCP
+		level = SOL_TCP;
+#else
+		level = IPPROTO_TCP;
+#endif
+		name = translate_tcp_sockopt(name);
+		break;
+	case RUMP_IPPROTO_UDP:
+#ifdef SOL_UDP
+		level = SOL_UDP;
+#else
+		level = IPPROTO_UDP;
+#endif
+		name = -1;
+		break;
+	default:
+		level = -1;
+	}
+	*levelp = level;
+	*namep = name;
+}
+
+#ifndef __NetBSD__
+static const struct {
+	int bfl;
+	int lfl;
+} bsd_to_native_msg_flags_[] = {
+	{RUMP_MSG_OOB,		MSG_OOB},
+	{RUMP_MSG_PEEK,		MSG_PEEK},
+	{RUMP_MSG_DONTROUTE,	MSG_DONTROUTE},
+	{RUMP_MSG_EOR,		MSG_EOR},
+	{RUMP_MSG_TRUNC,	MSG_TRUNC},
+	{RUMP_MSG_CTRUNC,	MSG_CTRUNC},
+	{RUMP_MSG_WAITALL,	MSG_WAITALL},
+	{RUMP_MSG_DONTWAIT,	MSG_DONTWAIT},
+
+	/* might be better to always set NOSIGNAL ... */
+#ifdef MSG_NOSIGNAL
+	{RUMP_MSG_NOSIGNAL,	MSG_NOSIGNAL},
+#endif
+};
+
+static int native_to_bsd_msg_flags(int);
+
+static int
+native_to_bsd_msg_flags(int lflag)
+{
+	unsigned int i;
+	int bfl, lfl;
+	int bflag = 0;
+
+	if (lflag == 0)
+		return (0);
+
+	for(i = 0; i < __arraycount(bsd_to_native_msg_flags_); i++) {
+		bfl = bsd_to_native_msg_flags_[i].bfl;
+		lfl = bsd_to_native_msg_flags_[i].lfl;
+
+		if (lflag & lfl) {
+			lflag ^= lfl;
+			bflag |= bfl;
+		}
+	}
+	if (lflag != 0)
+		return (-1);
+
+	return (bflag);
+}
+
+static int
+bsd_to_native_msg_flags(int bflag)
+{
+	unsigned int i;
+	int lflag = 0;
+
+	if (bflag == 0)
+		return (0);
+
+	for(i = 0; i < __arraycount(bsd_to_native_msg_flags_); i++) {
+		if (bflag & bsd_to_native_msg_flags_[i].bfl)
+			lflag |= bsd_to_native_msg_flags_[i].lfl;
+	}
+
+	return (lflag);
+}
+#endif
+
+struct rump_sockaddr {
+	uint8_t	sa_len;	    /* total length */
+	uint8_t	sa_family;	/* address family */
+	char	sa_data[14];	/* actually longer; address value */
+};
+
+struct rump_msghdr {
+	void		*msg_name;	/* optional address */
+	uint32_t	msg_namelen;	/* size of address */
+	struct iovec	*msg_iov;	/* scatter/gather array */
+	int		msg_iovlen;	/* # elements in msg_iov */
+	void		*msg_control;	/* ancillary data, see below */
+	uint32_t	msg_controllen;	/* ancillary data buffer len */
+	int		msg_flags;	/* flags on received message */
+};
+
+static struct sockaddr *translate_sockaddr(const struct sockaddr *,
+		uint32_t);
+static void translate_sockaddr_back(const struct sockaddr *,
+		struct rump_sockaddr *, uint32_t len);
+static struct msghdr *translate_msghdr(const struct rump_msghdr *, int *);
+static void translate_msghdr_back(const struct msghdr *, struct rump_msghdr *);
+
+#if defined(__NetBSD__)
+static struct sockaddr *
+translate_sockaddr(const struct sockaddr *addr, uint32_t len)
+{
+
+	return (struct sockaddr *)__UNCONST(addr);
+}
+
+static void
+translate_sockaddr_back(const struct sockaddr *laddr,
+		struct rump_sockaddr *baddr, uint32_t len)
+{
+
+	return;
+}
+
+static struct msghdr *
+translate_msghdr(const struct rump_msghdr *bmsg, int *flags)
+{
+
+	return (struct msghdr *)__UNCONST(bmsg);
+}
+
+static void
+translate_msghdr_back(const struct msghdr *lmsg, struct rump_msghdr *bmsg)
+{
+
+	return;
+}
+
+#else
+static struct sockaddr *
+translate_sockaddr(const struct sockaddr *addr, uint32_t len)
+{
+	struct sockaddr *laddr;
+	const struct rump_sockaddr *baddr;
+
+	baddr = (const struct rump_sockaddr *)addr;
+	laddr = malloc(len);
+	if (laddr == NULL)
+		return NULL;
+	memcpy(laddr, baddr, len);
+	laddr->sa_family = translate_domain(baddr->sa_family);
+	/* No sa_len for Linux and SunOS */
+#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+	laddr->sa_len = len;
+#endif
+	return laddr;
+}
+
+#define translate_back(_a_) case _a_: return RUMP_##_a_
+static int translate_domain_back(int);
+static int
+translate_domain_back(int domain)
+{
+
+	switch (domain) {
+	translate_back(AF_INET);
+	translate_back(AF_INET6);
+	default: return RUMP_AF_UNSPEC;
+	}
+}
+#undef translate_back
+
+static void
+translate_sockaddr_back(const struct sockaddr *laddr,
+		struct rump_sockaddr *baddr,
+		uint32_t len)
+{
+
+	if (baddr != NULL) {
+		memcpy(baddr, laddr, len);
+		baddr->sa_family = translate_domain_back(laddr->sa_family);
+		baddr->sa_len = len;
+	}
+	free(__UNCONST(laddr));
+}
+
+static struct msghdr *
+translate_msghdr(const struct rump_msghdr *bmsg, int *flags)
+{
+	struct msghdr *rv;
+
+	*flags = bsd_to_native_msg_flags(*flags);
+	if (*flags < 0)
+		*flags = 0;
+
+	rv = malloc(sizeof(*rv));
+	rv->msg_namelen = bmsg->msg_namelen;
+	rv->msg_iov = bmsg->msg_iov;
+	rv->msg_iovlen = bmsg->msg_iovlen;
+	rv->msg_control = bmsg->msg_control;
+	rv->msg_controllen = bmsg->msg_controllen;
+	rv->msg_flags = 0;
+
+	if (bmsg->msg_name != NULL) {
+		rv->msg_name = translate_sockaddr(bmsg->msg_name,
+				bmsg->msg_namelen);
+		if (rv->msg_name == NULL) {
+			free(rv);
+			return NULL;
+		}
+	} else
+		rv->msg_name = NULL;
+	return rv;
+}
+
+static void
+translate_msghdr_back(const struct msghdr *lmsg, struct rump_msghdr *bmsg)
+{
+
+	if (bmsg == NULL) {
+		if (lmsg->msg_name != NULL)
+			free(lmsg->msg_name);
+		free(__UNCONST(lmsg));
+		return;
+	}
+	bmsg->msg_namelen = lmsg->msg_namelen;
+	bmsg->msg_iov = lmsg->msg_iov;
+	bmsg->msg_iovlen = lmsg->msg_iovlen;
+	bmsg->msg_control = lmsg->msg_control;
+	bmsg->msg_controllen = lmsg->msg_controllen;
+	bmsg->msg_flags = native_to_bsd_msg_flags(lmsg->msg_flags);
+
+	if (lmsg->msg_name != NULL)
+		translate_sockaddr_back(lmsg->msg_name, bmsg->msg_name,
+				bmsg->msg_namelen);
+	else
+		bmsg->msg_name = NULL;
+
+	free(__UNCONST(lmsg));
+}
+#endif
+
+int
+rumpcomp_sockin_socket(int domain, int type, int proto, int *s)
+{
+	void *cookie;
+	int rv;
+
+	domain = translate_domain(domain);
+
+	cookie = rumpuser_component_unschedule();
+	*s = socket(domain, type, proto);
+	seterror(*s);
+	rumpuser_component_schedule(cookie);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_sendmsg(int s, const struct msghdr *msg, int flags, size_t *snd)
+{
+	void *cookie;
+	ssize_t nn;
+	int rv;
+
+	msg = translate_msghdr((struct rump_msghdr *)msg, &flags);
+
+	cookie = rumpuser_component_unschedule();
+	nn = sendmsg(s, msg, flags);
+	seterror(nn);
+	*snd = (size_t)nn;
+	rumpuser_component_schedule(cookie);
+
+	translate_msghdr_back(msg, NULL);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_recvmsg(int s, struct msghdr *msg, int flags, size_t *rcv)
+{
+	void *cookie;
+	ssize_t nn;
+	int rv;
+	struct rump_msghdr *saveptr;
+
+	saveptr = (struct rump_msghdr *)msg;
+	msg = translate_msghdr(saveptr, &flags);
+
+	cookie = rumpuser_component_unschedule();
+	nn = recvmsg(s, msg, flags);
+	seterror(nn);
+	*rcv = (size_t)nn;
+	rumpuser_component_schedule(cookie);
+
+	translate_msghdr_back(msg, saveptr);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_connect(int s, const struct sockaddr *name, int len)
+{
+	void *cookie;
+	int rv;
+
+	name = translate_sockaddr(name, len);
+
+	cookie = rumpuser_component_unschedule();
+	rv = connect(s, name, (socklen_t)len);
+	seterror(rv);
+	rumpuser_component_schedule(cookie);
+
+	translate_sockaddr_back(name, NULL, len);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_bind(int s, const struct sockaddr *name, int len)
+{
+	void *cookie;
+	int rv;
+
+	name = translate_sockaddr(name, len);
+
+	cookie = rumpuser_component_unschedule();
+	rv = bind(s, name, (socklen_t)len);
+	seterror(rv);
+	rumpuser_component_schedule(cookie);
+
+	translate_sockaddr_back(name, NULL, len);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_accept(int s, struct sockaddr *name, int *lenp, int *s2)
+{
+	void *cookie;
+	int rv;
+	struct rump_sockaddr *saveptr;
+
+	saveptr = (struct rump_sockaddr *)name;
+	name = translate_sockaddr(name, *lenp);
+
+	cookie = rumpuser_component_unschedule();
+	*s2 = accept(s, name, (socklen_t *)lenp);
+	seterror(*s2);
+	rumpuser_component_schedule(cookie);
+
+	translate_sockaddr_back(name, saveptr, *lenp);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_listen(int s, int backlog)
+{
+	void *cookie;
+	int rv;
+
+	cookie = rumpuser_component_unschedule();
+	rv = listen(s, backlog);
+	seterror(rv);
+	rumpuser_component_schedule(cookie);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_getname(int s, struct sockaddr *so, int *lenp,
+	enum rumpcomp_sockin_getnametype which)
+{
+	socklen_t slen = *lenp;
+	int rv;
+	struct rump_sockaddr *saveptr;
+
+	saveptr = (struct rump_sockaddr *)so;
+	so = translate_sockaddr(so, *lenp);
+
+	if (which == RUMPCOMP_SOCKIN_SOCKNAME)
+		rv = getsockname(s, so, &slen);
+	else
+		rv = getpeername(s, so, &slen);
+
+	seterror(rv);
+	translate_sockaddr_back(so, saveptr, *lenp);
+
+	*lenp = slen;
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_setsockopt(int s, int level, int name,
+	const void *data, int dlen)
+{
+	socklen_t slen = dlen;
+	int rv;
+
+	translate_sockopt(&level, &name);
+	if (level == -1 || name == -1) {
+#ifdef SETSOCKOPT_STRICT
+		errno = EINVAL;
+		rv = -1;
+#else
+		rv = 0;
+#endif
+	} else
+		rv = setsockopt(s, level, name, data, slen);
+
+	seterror(rv);
+
+	return rumpuser_component_errtrans(rv);
+}
+
+int
+rumpcomp_sockin_poll(struct pollfd *fds, int nfds, int timeout, int *nready)
+{
+	void *cookie;
+	int rv;
+
+	cookie = rumpuser_component_unschedule();
+	*nready = poll(fds, (nfds_t)nfds, timeout);
+	seterror(*nready);
+	rumpuser_component_schedule(cookie);
+
+	return rumpuser_component_errtrans(rv);
+}
+#endif
Index: src/sys/rump/net/lib/libsockin/sockin_user.h
diff -u /dev/null src/sys/rump/net/lib/libsockin/sockin_user.h:1.1
--- /dev/null	Thu Mar 13 01:40:30 2014
+++ src/sys/rump/net/lib/libsockin/sockin_user.h	Thu Mar 13 01:40:30 2014
@@ -0,0 +1,43 @@
+/*	$NetBSD: sockin_user.h,v 1.1 2014/03/13 01:40:30 pooka Exp $	*/
+
+/*
+ * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+enum rumpcomp_sockin_getnametype {
+	RUMPCOMP_SOCKIN_SOCKNAME,
+	RUMPCOMP_SOCKIN_PEERNAME
+};
+
+int  rumpcomp_sockin_socket(int, int, int, int *);
+int  rumpcomp_sockin_sendmsg(int, const struct msghdr *, int, size_t *);
+int  rumpcomp_sockin_recvmsg(int, struct msghdr *, int, size_t *);
+int  rumpcomp_sockin_connect(int, const struct sockaddr *, int);
+int  rumpcomp_sockin_bind(int, const struct sockaddr *, int);
+int  rumpcomp_sockin_accept(int, struct sockaddr *, int *, int *);
+int  rumpcomp_sockin_listen(int, int);
+int  rumpcomp_sockin_getname(int, struct sockaddr *, int *,
+			      enum rumpcomp_sockin_getnametype);
+int  rumpcomp_sockin_setsockopt(int, int, int, const void *, int);
+int  rumpcomp_sockin_poll(struct pollfd *, int, int, int *);

Reply via email to