1: #ifndef lint 2: static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) 2/17/86"; 3: #endif 4: #include <stdio.h> 5: #include <sys/param.h> 6: #include <sgtty.h> 7: #include <sys/socket.h> 8: #include <netinet/in.h> 9: #include <net/if.h> 10: #include <netdb.h> 11: #include <fcntl.h> 12: 13: #ifndef lint 14: static char rcsid[] = "$Header: slattach.c,v 1.1 84/10/04 12:57:12 rick Exp $"; 15: #endif 16: 17: #define DEFAULT_BAUD 9600 18: int speed; 19: int slipdisc = SLIPDISC; 20: 21: char devname[32]; 22: char hostname[MAXHOSTNAMELEN]; 23: 24: extern int errno; 25: 26: main(argc, argv) 27: int argc; 28: char *argv[]; 29: { 30: register FILE *fp; 31: register int fd; 32: register char *dev = argv[1]; 33: struct sgttyb sgtty; 34: int n; 35: 36: if (argc < 2 || argc > 3) { 37: fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]); 38: exit(1); 39: } 40: speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD); 41: if (speed == 0) { 42: fprintf(stderr, "unknown speed %s", argv[2]); 43: exit(1); 44: } 45: if (strncmp("/dev/", dev, 5)) { 46: sprintf(devname, "/dev/%s", dev); 47: dev = devname; 48: } 49: if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) { 50: perror(dev); 51: exit(1); 52: } 53: sgtty.sg_flags = RAW | ANYP; 54: sgtty.sg_ispeed = sgtty.sg_ospeed = speed; 55: if (ioctl(fd, TIOCSETP, &sgtty) < 0) { 56: perror("ioctl(TIOCSETP)"); 57: exit(1); 58: } 59: if (ioctl(fd, TIOCSETD, &slipdisc) < 0) { 60: perror("ioctl(TIOCSETD)"); 61: exit(1); 62: } 63: 64: if (fork() > 0) 65: exit(0); 66: for (;;) 67: sigpause(0); 68: } 69: 70: struct sg_spds { 71: int sp_val, sp_name; 72: } spds[] = { 73: #ifdef B50 74: { 50, B50 }, 75: #endif 76: #ifdef B75 77: { 75, B75 }, 78: #endif 79: #ifdef B110 80: { 110, B110 }, 81: #endif 82: #ifdef B150 83: { 150, B150 }, 84: #endif 85: #ifdef B200 86: { 200, B200 }, 87: #endif 88: #ifdef B300 89: { 300, B300 }, 90: #endif 91: #ifdef B600 92: { 600, B600 }, 93: #endif 94: #ifdef B1200 95: { 1200, B1200 }, 96: #endif 97: #ifdef B1800 98: { 1800, B1800 }, 99: #endif 100: #ifdef B2000 101: { 2000, B2000 }, 102: #endif 103: #ifdef B2400 104: { 2400, B2400 }, 105: #endif 106: #ifdef B3600 107: { 3600, B3600 }, 108: #endif 109: #ifdef B4800 110: { 4800, B4800 }, 111: #endif 112: #ifdef B7200 113: { 7200, B7200 }, 114: #endif 115: #ifdef B9600 116: { 9600, B9600 }, 117: #endif 118: #ifdef EXTA 119: { 19200, EXTA }, 120: #endif 121: #ifdef EXTB 122: { 38400, EXTB }, 123: #endif 124: { 0, 0 } 125: }; 126: 127: findspeed(speed) 128: register int speed; 129: { 130: register struct sg_spds *sp; 131: 132: sp = spds; 133: while (sp->sp_val && sp->sp_val != speed) 134: sp++; 135: return (sp->sp_name); 136: }