ibcs2_socksys.c revision 11397
1/*
2 * Copyright (c) 1994, 1995 Scott Bartram
3 * Copyright (c) 1994 Arne H Juul
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. The name of the author may not be used to endorse or promote products
12 *    derived from this software without specific prior written permission
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include <sys/param.h>
27#include <sys/systm.h>
28#include <sys/proc.h>
29#include <sys/file.h>
30#include <sys/filedesc.h>
31#include <sys/ioctl.h>
32#include <sys/termios.h>
33#include <sys/tty.h>
34#include <sys/socket.h>
35#include <sys/ioctl.h>
36#include <sys/sysproto.h>
37#include <net/if.h>
38
39#include <i386/ibcs2/ibcs2_socksys.h>
40#include <i386/ibcs2/ibcs2_util.h>
41
42/*
43 * iBCS2 socksys calls.
44 */
45
46int
47ibcs2_socksys(p, uap, retval)
48	register struct proc *p;
49	register struct ibcs2_socksys_args *uap;
50	int *retval;
51{
52	register struct filedesc *fdp = p->p_fd;
53	register struct file *fp;
54	int error;
55	int realargs[7]; /* 1 for command, 6 for recvfrom */
56	void *passargs;
57
58	/*
59	 * SOCKET should only be legal on /dev/socksys.
60	 * GETIPDOMAINNAME should only be legal on /dev/socksys ?
61	 * The others are (and should be) only legal on sockets.
62	 */
63
64	if (error = copyin(uap->argsp, (caddr_t)realargs, sizeof(realargs)))
65		return error;
66	DPRINTF(("ibcs2_socksys: %08x %08x %08x %08x %08x %08x %08x\n",
67	       realargs[0], realargs[1], realargs[2], realargs[3],
68	       realargs[4], realargs[5], realargs[6]));
69
70	passargs = (void *)(realargs + 1);
71	switch (realargs[0]) {
72	case SOCKSYS_ACCEPT:
73		return accept(p, passargs, retval);
74	case SOCKSYS_BIND:
75		return bind(p, passargs, retval);
76	case SOCKSYS_CONNECT:
77		return connect(p, passargs, retval);
78	case SOCKSYS_GETPEERNAME:
79		return getpeername(p, passargs, retval);
80	case SOCKSYS_GETSOCKNAME:
81		return getsockname(p, passargs, retval);
82	case SOCKSYS_GETSOCKOPT:
83		return getsockopt(p, passargs, retval);
84	case SOCKSYS_LISTEN:
85		return listen(p, passargs, retval);
86	case SOCKSYS_RECV:
87		realargs[5] = realargs[6] = 0;
88		/* FALLTHROUGH */
89	case SOCKSYS_RECVFROM:
90		return recvfrom(p, passargs, retval);
91	case SOCKSYS_SEND:
92		realargs[5] = realargs[6] = 0;
93		/* FALLTHROUGH */
94	case SOCKSYS_SENDTO:
95		return sendto(p, passargs, retval);
96	case SOCKSYS_SETSOCKOPT:
97		return setsockopt(p, passargs, retval);
98	case SOCKSYS_SHUTDOWN:
99		return shutdown(p, passargs, retval);
100	case SOCKSYS_SOCKET:
101		return socket(p, passargs, retval);
102	case SOCKSYS_SELECT:
103		return select(p, passargs, retval);
104	case SOCKSYS_GETIPDOMAIN:
105		return getdomainname(p, passargs, retval);
106	case SOCKSYS_SETIPDOMAIN:
107		return setdomainname(p, passargs, retval);
108	case SOCKSYS_ADJTIME:
109		return adjtime(p, passargs, retval);
110	case SOCKSYS_SETREUID:
111		return setreuid(p, passargs, retval);
112	case SOCKSYS_SETREGID:
113		return setregid(p, passargs, retval);
114	case SOCKSYS_GETTIME:
115		return gettimeofday(p, passargs, retval);
116	case SOCKSYS_SETTIME:
117		return settimeofday(p, passargs, retval);
118	case SOCKSYS_GETITIMER:
119		return getitimer(p, passargs, retval);
120	case SOCKSYS_SETITIMER:
121		return setitimer(p, passargs, retval);
122
123	default:
124		printf("socksys unknown %08x %08x %08x %08x %08x %08x %08x\n",
125                       realargs[0], realargs[1], realargs[2], realargs[3],
126                       realargs[4], realargs[5], realargs[6]);
127		return EINVAL;
128	}
129	/* NOTREACHED */
130}
131