1: /* 2: * SCCS id @(#)sysent.c 2.1 (Berkeley) 9/4/83 3: */ 4: 5: #include "param.h" 6: #include <sys/systm.h> 7: #ifdef UCB_QUOTAS 8: #include <sys/quota.h> 9: #endif 10: 11: /* 12: * This table is the switch used to transfer 13: * to the appropriate routine for processing a system call. 14: * Each row contains the number of arguments expected 15: * and a pointer to the routine. 16: */ 17: int alarm(); 18: #ifdef MPX_FILS 19: int mpxchan(); 20: #else 21: #define mpxchan nosys 22: #endif 23: int chdir(); 24: int chmod(); 25: int chown(); 26: int chroot(); 27: int close(); 28: int creat(); 29: int dup(); 30: int exec(); 31: int exece(); 32: int fork(); 33: int fstat(); 34: int getgid(); 35: int getpid(); 36: int getuid(); 37: int gtime(); 38: int gtty(); 39: int ioctl(); 40: int kill(); 41: int link(); 42: int mknod(); 43: int nice(); 44: int nosys(); 45: int nullsys(); 46: int open(); 47: int pause(); 48: int pipe(); 49: int profil(); 50: int ptrace(); 51: int read(); 52: #ifdef UCB_AUTOBOOT 53: int reboot(); 54: #else 55: #define reboot nosys 56: #endif 57: int rexit(); 58: int saccess(); 59: int sbreak(); 60: int seek(); 61: int setgid(); 62: #ifdef MENLO_JCL 63: int setpgrp(); 64: #else 65: #define setpgrp nosys 66: #endif 67: int setuid(); 68: int smount(); 69: int ssig(); 70: int stat(); 71: int stime(); 72: int stty(); 73: int sumount(); 74: int ftime(); 75: #ifdef ACCT 76: int sysacct(); 77: #else 78: #define sysacct nosys 79: #endif 80: int syslock(); 81: int sysphys(); 82: int times(); 83: int umask(); 84: int unlink(); 85: int update(); 86: int utime(); 87: int wait(); 88: int write(); 89: #ifdef CGL_RTP 90: int rtp(); 91: #else 92: #define rtp nosys 93: #endif 94: #ifdef VIRUS_VFORK 95: int vfork(); 96: #else 97: #define vfork nosys 98: #endif 99: 100: struct sysent sysent[64] = 101: { 102: 1, 0, nullsys, /* 0 = indir */ 103: 1, 1, rexit, /* 1 = exit */ 104: 0, 0, fork, /* 2 = fork */ 105: 3, 1, read, /* 3 = read */ 106: 3, 1, write, /* 4 = write */ 107: 2, 0, open, /* 5 = open */ 108: 1, 1, close, /* 6 = close */ 109: 0, 0, wait, /* 7 = wait */ 110: 2, 0, creat, /* 8 = creat */ 111: 2, 0, link, /* 9 = link */ 112: 1, 0, unlink, /* 10 = unlink */ 113: 2, 0, exec, /* 11 = exec */ 114: 1, 0, chdir, /* 12 = chdir */ 115: 0, 0, gtime, /* 13 = time */ 116: 3, 0, mknod, /* 14 = mknod */ 117: 2, 0, chmod, /* 15 = chmod */ 118: 3, 0, chown, /* 16 = chown; now 3 args */ 119: 1, 0, sbreak, /* 17 = break */ 120: 2, 0, stat, /* 18 = stat */ 121: 4, 1, seek, /* 19 = seek; now 3 args */ 122: 0, 0, getpid, /* 20 = getpid */ 123: 3, 0, smount, /* 21 = mount */ 124: 1, 0, sumount, /* 22 = umount */ 125: 1, 1, setuid, /* 23 = setuid */ 126: 0, 0, getuid, /* 24 = getuid */ 127: 2, 2, stime, /* 25 = stime */ 128: 4, 1, ptrace, /* 26 = ptrace */ 129: 1, 1, alarm, /* 27 = alarm */ 130: 2, 1, fstat, /* 28 = fstat */ 131: 0, 0, pause, /* 29 = pause */ 132: 2, 0, utime, /* 30 = utime */ 133: 2, 1, stty, /* 31 = stty */ 134: 2, 1, gtty, /* 32 = gtty */ 135: 2, 0, saccess, /* 33 = access */ 136: 1, 1, nice, /* 34 = nice */ 137: 1, 0, ftime, /* 35 = ftime; formerly sleep */ 138: 0, 0, update, /* 36 = sync */ 139: 2, 1, kill, /* 37 = kill */ 140: 0, 0, nullsys, /* 38 = switch; inoperative */ 141: 2, 1, setpgrp, /* 39 = setpgrp */ 142: 1, 1, nosys, /* 40 = tell (obsolete) */ 143: 2, 2, dup, /* 41 = dup */ 144: 0, 0, pipe, /* 42 = pipe */ 145: 1, 0, times, /* 43 = times */ 146: 4, 0, profil, /* 44 = prof */ 147: 0, 0, nosys, /* 45 = unused */ 148: 1, 1, setgid, /* 46 = setgid */ 149: 0, 0, getgid, /* 47 = getgid */ 150: 2, 0, ssig, /* 48 = sig */ 151: 1, 1, rtp, /* 49 = real time process */ 152: 0, 0, nosys, /* 50 = reserved for USG */ 153: 1, 0, sysacct, /* 51 = turn acct off/on */ 154: 3, 0, sysphys, /* 52 = set user physical addresses */ 155: 1, 0, syslock, /* 53 = lock user in core */ 156: 3, 0, ioctl, /* 54 = ioctl */ 157: 2, 0, reboot, /* 55 = reboot */ 158: 4, 0, mpxchan, /* 56 = creat mpx comm channel */ 159: 0, 0, vfork, /* 57 = vfork */ 160: 1, 0, nosys, /* 58 = local system calls */ 161: 3, 0, exece, /* 59 = exece */ 162: 1, 0, umask, /* 60 = umask */ 163: 1, 0, chroot, /* 61 = chroot */ 164: 0, 0, nosys, /* 62 = x */ 165: 0, 0, nosys /* 63 = used internally */ 166: }; 167: 168: #ifdef UCB_LOGIN 169: int login(); 170: #else 171: #define login nosys 172: #endif 173: #ifdef UCB_SUBM 174: int submit(); 175: int killbkg(); 176: #else 177: #define submit nosys 178: #define killbkg nosys 179: #endif 180: int nostk(); 181: #ifndef MENLO_JCL 182: int killpg(); 183: #else 184: #define killpg nosys 185: #undef setpgrp 186: int setpgrp(); 187: #endif 188: #if !defined(NONSEPARATE) && defined(NONFP) 189: int fetchi(); 190: #else 191: #define fetchi nosys 192: #endif 193: #ifdef UCB_QUOTAS 194: int quota(); 195: int qfstat(); 196: int qstat(); 197: #else 198: #define quota nosys 199: #define qfstat nosys 200: #define qstat nosys 201: #endif 202: #ifdef UCB_LOAD 203: int gldav(); 204: #else 205: #define gldav nosys 206: #endif 207: #ifndef NONFP 208: int fperr(); 209: #else 210: #define fperr nosys 211: #endif 212: #ifdef UCB_VHANGUP 213: int vhangup(); 214: #else 215: #define vhangup nosys 216: #endif 217: #ifdef UCB_RENICE 218: int renice(); 219: #else 220: #define renice nosys 221: #endif 222: int ucall(); 223: #ifdef UCB_NET 224: int gethostid(); 225: int gethostname(); 226: int saccept(); 227: int sconnect(); 228: int select(); 229: int sethostid(); 230: int sethostname(); 231: int setregid(); 232: int setreuid(); 233: int sreceive(); 234: int ssend(); 235: int ssocket(); 236: int ssocketaddr(); 237: #else 238: #define gethostid nosys 239: #define gethostname nosys 240: #define saccept nosys 241: #define sconnect nosys 242: #define select nosys 243: #define sethostid nosys 244: #define sethostname nosys 245: #define setregid nosys 246: #define setreuid nosys 247: #define sreceive nosys 248: #define ssend nosys 249: #define ssocket nosys 250: #define ssocketaddr nosys 251: #endif 252: #ifdef UCB_SYMLINKS 253: int lstat(); 254: int readlink(); 255: int symlink(); 256: #else 257: #define lstat nosys 258: #define readlink nosys 259: #define symlink nosys 260: #endif 261: 262: struct sysent syslocal[] = { 263: 0, 0, nosys, /* 0 = illegal local call */ 264: 3, 0, login, /* 1 = login */ 265: 2, 0, lstat, /* 2 = like stat, don't follow links */ 266: 1, 1, submit, /* 3 = submit - allow after logout */ 267: 0, 0, nostk, /* 4 = nostk */ 268: 2, 0, killbkg, /* 5 = killbkg - kill background */ 269: 2, 0, killpg, /* 6 = killpg - kill process group */ 270: 2, 0, renice, /* 7 = renice - change a nice value */ 271: 1, 1, fetchi, /* 8 = fetchi */ 272: 4, 0, ucall, /* 9 = ucall - call sub from user */ 273: 5, 0, quota, /* 10 = quota - set quota parameters */ 274: 2, 1, qfstat, /* 11 = qfstat- long fstat for quotas */ 275: 2, 0, qstat, /* 12 = qstat - long stat for quotas */ 276: 0, 0, setpgrp, /* 13 = setpgrp - set process group */ 277: 1, 1, gldav, /* 14 = gldav */ 278: 0, 0, fperr, /* 15 = fperr - get FP error regs */ 279: 0, 0, vhangup, /* 16 = vhangup - close tty files */ 280: 0, 0, nosys, /* 17 = unused */ 281: #ifdef UCB_NET 282: 4, 0, select, /* 18 = select active file descr */ 283: 2, 0, gethostname, /* 19 = get host name */ 284: 2, 0, sethostname, /* 20 = set host name */ 285: 4, 0, ssocket, /* 21 = get socket fd */ 286: 2, 0, sconnect, /* 22 = connect socket */ 287: 2, 0, saccept, /* 23 = accept socket connection */ 288: 4, 0, ssend, /* 24 = send datagram */ 289: 4, 0, sreceive, /* 25 = receive datagram */ 290: 2, 0, ssocketaddr, /* 26 = get socket address */ 291: 2, 2, setreuid, /* 27 = set real user id */ 292: 2, 2, setregid, /* 28 = set real group id */ 293: 2, 1, symlink, /* 29 = symlink */ 294: 3, 1, readlink, /* 30 = readlink */ 295: 0, 0, gethostid, /* 31 = gethostid */ 296: 2, 0, sethostid, /* 32 = sethostid */ 297: #endif UCB_NET 298: }; 299: 300: int nlocalsys = sizeof(syslocal) / sizeof(syslocal[0]);