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