Module Name: src Committed By: pooka Date: Mon Mar 18 13:14:11 UTC 2013
Modified Files: src/lib/librumpuser: Makefile src/sys/rump/net/lib/libsockin: Makefile sockin.c Added Files: src/sys/rump/net/lib/libsockin: rumpcomp_user.c rumpcomp_user.h Removed Files: src/lib/librumpuser: rumpuser_net.c Log Message: Move the rumpuser_net set of hypercalls to be a private to the sockin component. This cleans up the generic hypercall interfaces from ones specific to only one component. They should always have been private, but the infrastructure to "make it so" didn't exist earlier. no functional change To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/lib/librumpuser/Makefile cvs rdiff -u -r1.3 -r0 src/lib/librumpuser/rumpuser_net.c cvs rdiff -u -r1.5 -r1.6 src/sys/rump/net/lib/libsockin/Makefile cvs rdiff -u -r0 -r1.1 src/sys/rump/net/lib/libsockin/rumpcomp_user.c \ src/sys/rump/net/lib/libsockin/rumpcomp_user.h cvs rdiff -u -r1.26 -r1.27 src/sys/rump/net/lib/libsockin/sockin.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/librumpuser/Makefile diff -u src/lib/librumpuser/Makefile:1.8 src/lib/librumpuser/Makefile:1.9 --- src/lib/librumpuser/Makefile:1.8 Fri Mar 1 18:15:36 2013 +++ src/lib/librumpuser/Makefile Mon Mar 18 13:14:10 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.8 2013/03/01 18:15:36 pooka Exp $ +# $NetBSD: Makefile,v 1.9 2013/03/18 13:14:10 pooka Exp $ # WARNS?= 5 @@ -11,7 +11,7 @@ LIBDPLIBS+= pthread ${.CURDIR}/../libpth CPPFLAGS+= -DLIBRUMPUSER #CPPFLAGS+= -D_DIAGNOSTIC -SRCS= rumpuser.c rumpuser_net.c +SRCS= rumpuser.c SRCS+= rumpuser_pth.c SRCS+= rumpuser_dl.c rumpuser_sp.c rumpuser_daemonize.c SRCS+= rumpuser_component.c Index: src/sys/rump/net/lib/libsockin/Makefile diff -u src/sys/rump/net/lib/libsockin/Makefile:1.5 src/sys/rump/net/lib/libsockin/Makefile:1.6 --- src/sys/rump/net/lib/libsockin/Makefile:1.5 Sat Dec 12 17:10:20 2009 +++ src/sys/rump/net/lib/libsockin/Makefile Mon Mar 18 13:14:11 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.5 2009/12/12 17:10:20 pooka Exp $ +# $NetBSD: Makefile,v 1.6 2013/03/18 13:14:11 pooka Exp $ # LIB= rumpnet_sockin @@ -8,5 +8,7 @@ SRCS+= component.c CPPFLAGS+= -I${RUMPTOP}/librump/rumpkern +RUMPCOMP_USER= #defined + .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.26 src/sys/rump/net/lib/libsockin/sockin.c:1.27 --- src/sys/rump/net/lib/libsockin/sockin.c:1.26 Thu Mar 31 19:40:54 2011 +++ src/sys/rump/net/lib/libsockin/sockin.c Mon Mar 18 13:14:11 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: sockin.c,v 1.26 2011/03/31 19:40:54 dyoung Exp $ */ +/* $NetBSD: sockin.c,v 1.27 2013/03/18 13:14:11 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.26 2011/03/31 19:40:54 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.27 2013/03/18 13:14:11 pooka Exp $"); #include <sys/param.h> #include <sys/condvar.h> @@ -53,6 +53,7 @@ __KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1 #include <rump/rumpuser.h> #include "rump_private.h" +#include "rumpcomp_user.h" /* * An inet communication domain which uses the socket interface. @@ -198,7 +199,7 @@ sockin_process(struct socket *so) rmsg.msg_name = (struct sockaddr *)&from; rmsg.msg_namelen = sizeof(from); - n = rumpuser_net_recvmsg(SO2S(so), &rmsg, 0, &error); + n = rumpcomp_sockin_recvmsg(SO2S(so), &rmsg, 0, &error); if (n <= 0) { m_freem(m); @@ -236,7 +237,7 @@ sockin_accept(struct socket *so) int news, error, slen; slen = sizeof(sin); - news = rumpuser_net_accept(SO2S(so), (struct sockaddr *)&sin, + news = rumpcomp_sockin_accept(SO2S(so), (struct sockaddr *)&sin, &slen, &error); if (news == -1) return; @@ -371,7 +372,7 @@ sockin_usrreq(struct socket *so, int req break; } - news = rumpuser_net_socket(PF_INET, so->so_proto->pr_type, + news = rumpcomp_sockin_socket(PF_INET, so->so_proto->pr_type, 0, &error); if (news == -1) break; @@ -379,10 +380,12 @@ sockin_usrreq(struct socket *so, int req /* for UDP sockets, make sure we can send&recv max */ if (so->so_proto->pr_type == SOCK_DGRAM) { sbsize = SOCKIN_SBSIZE; - rumpuser_net_setsockopt(news, SOL_SOCKET, SO_SNDBUF, + rumpcomp_sockin_setsockopt(news, + SOL_SOCKET, SO_SNDBUF, &sbsize, sizeof(sbsize), &error); sbsize = SOCKIN_SBSIZE; - rumpuser_net_setsockopt(news, SOL_SOCKET, SO_RCVBUF, + rumpcomp_sockin_setsockopt(news, + SOL_SOCKET, SO_RCVBUF, &sbsize, sizeof(sbsize), &error); } @@ -397,12 +400,13 @@ sockin_usrreq(struct socket *so, int req break; case PRU_BIND: - rumpuser_net_bind(SO2S(so), mtod(nam, const struct sockaddr *), + rumpcomp_sockin_bind(SO2S(so), + mtod(nam, const struct sockaddr *), sizeof(struct sockaddr_in), &error); break; case PRU_CONNECT: - rv = rumpuser_net_connect(SO2S(so), + rv = rumpcomp_sockin_connect(SO2S(so), mtod(nam, struct sockaddr *), sizeof(struct sockaddr_in), &error); if (rv == 0) @@ -410,7 +414,7 @@ sockin_usrreq(struct socket *so, int req break; case PRU_LISTEN: - rumpuser_net_listen(SO2S(so), so->so_qlimit, &error); + rumpcomp_sockin_listen(SO2S(so), so->so_qlimit, &error); break; case PRU_SEND: @@ -455,7 +459,7 @@ sockin_usrreq(struct socket *so, int req mhdr.msg_namelen = saddr->sa_len; } - rumpuser_net_sendmsg(s, &mhdr, 0, &error); + rumpcomp_sockin_sendmsg(s, &mhdr, 0, &error); if (iov != iov_buf) kmem_free(iov, sizeof(struct iovec) * iov_max); @@ -477,13 +481,13 @@ sockin_usrreq(struct socket *so, int req case PRU_PEERADDR: { int slen = nam->m_len; - enum rumpuser_getnametype which; + enum rumpcomp_sockin_getnametype which; if (req == PRU_SOCKADDR) - which = RUMPUSER_SOCKNAME; + which = RUMPCOMP_SOCKIN_SOCKNAME; else - which = RUMPUSER_PEERNAME; - rumpuser_net_getname(SO2S(so), + which = RUMPCOMP_SOCKIN_PEERNAME; + rumpcomp_sockin_getname(SO2S(so), mtod(nam, struct sockaddr *), &slen, which, &error); if (error == 0) nam->m_len = slen; @@ -506,7 +510,7 @@ sockin_ctloutput(int op, struct socket * { int error; - rumpuser_net_setsockopt(SO2S(so), sopt->sopt_level, + rumpcomp_sockin_setsockopt(SO2S(so), sopt->sopt_level, sopt->sopt_name, sopt->sopt_data, sopt->sopt_size, &error); return error; } Added files: Index: src/sys/rump/net/lib/libsockin/rumpcomp_user.c diff -u /dev/null src/sys/rump/net/lib/libsockin/rumpcomp_user.c:1.1 --- /dev/null Mon Mar 18 13:14:11 2013 +++ src/sys/rump/net/lib/libsockin/rumpcomp_user.c Mon Mar 18 13:14:11 2013 @@ -0,0 +1,166 @@ +/* $NetBSD: rumpcomp_user.c,v 1.1 2013/03/18 13:14:11 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. + */ + +#include <sys/types.h> +#include <sys/socket.h> + +#include <errno.h> + +#include <rump/rumpuser_component.h> + +#include "rumpcomp_user.h" + +#define seterror() if (rv == -1) *error = errno; else *error = 0; + +int +rumpcomp_sockin_socket(int domain, int type, int proto, int *error) +{ + void *cookie; + int rv; + + cookie = rumpuser_component_unschedule(); + rv = socket(domain, type, proto); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_sendmsg(int s, const struct msghdr *msg, int flags, int *error) +{ + void *cookie; + ssize_t rv; + + cookie = rumpuser_component_unschedule(); + rv = sendmsg(s, msg, flags); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_recvmsg(int s, struct msghdr *msg, int flags, int *error) +{ + void *cookie; + ssize_t rv; + + cookie = rumpuser_component_unschedule(); + rv = recvmsg(s, msg, flags); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_connect(int s, const struct sockaddr *name, int len, int *error) +{ + void *cookie; + int rv; + + cookie = rumpuser_component_unschedule(); + rv = connect(s, name, (socklen_t)len); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_bind(int s, const struct sockaddr *name, int len, int *error) +{ + void *cookie; + int rv; + + cookie = rumpuser_component_unschedule(); + rv = bind(s, name, (socklen_t)len); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_accept(int s, struct sockaddr *name, int *lenp, int *error) +{ + void *cookie; + int rv; + + cookie = rumpuser_component_unschedule(); + rv = accept(s, name, (socklen_t *)lenp); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_listen(int s, int backlog, int *error) +{ + void *cookie; + int rv; + + cookie = rumpuser_component_unschedule(); + rv = listen(s, backlog); + rumpuser_component_schedule(cookie); + + seterror(); + return rv; +} + +int +rumpcomp_sockin_getname(int s, struct sockaddr *so, int *lenp, + enum rumpcomp_sockin_getnametype which, int *error) +{ + socklen_t slen = *lenp; + int rv; + + if (which == RUMPCOMP_SOCKIN_SOCKNAME) + rv = getsockname(s, so, &slen); + else + rv = getpeername(s, so, &slen); + + *lenp = slen; + seterror(); + + return rv; +} + +int +rumpcomp_sockin_setsockopt(int s, int level, int name, + const void *data, int dlen, int *error) +{ + socklen_t slen = dlen; + int rv; + + rv = setsockopt(s, level, name, data, slen); + + seterror(); + return rv; +} Index: src/sys/rump/net/lib/libsockin/rumpcomp_user.h diff -u /dev/null src/sys/rump/net/lib/libsockin/rumpcomp_user.h:1.1 --- /dev/null Mon Mar 18 13:14:11 2013 +++ src/sys/rump/net/lib/libsockin/rumpcomp_user.h Mon Mar 18 13:14:11 2013 @@ -0,0 +1,42 @@ +/* $NetBSD: rumpcomp_user.h,v 1.1 2013/03/18 13:14:11 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, int *); +int rumpcomp_sockin_recvmsg(int, struct msghdr *, int, int *); +int rumpcomp_sockin_connect(int, const struct sockaddr *, int, int *); +int rumpcomp_sockin_bind(int, const struct sockaddr *, int, int *); +int rumpcomp_sockin_accept(int, struct sockaddr *, int *, int *); +int rumpcomp_sockin_listen(int, int, int *); +int rumpcomp_sockin_getname(int, struct sockaddr *, int *, + enum rumpcomp_sockin_getnametype, int *); +int rumpcomp_sockin_setsockopt(int, int, int, const void *, int, int *);