1 #ifndef lint 2 static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) 02/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 } 137