1*26211Skarels #ifndef lint 2*26211Skarels static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) 02/17/86"; 3*26211Skarels #endif 426206Skarels #include <stdio.h> 5*26211Skarels #include <sys/param.h> 626206Skarels #include <sgtty.h> 726206Skarels #include <sys/socket.h> 826206Skarels #include <netinet/in.h> 926206Skarels #include <net/if.h> 1026206Skarels #include <netdb.h> 1126206Skarels #include <fcntl.h> 1226206Skarels 1326206Skarels #ifndef lint 1426206Skarels static char rcsid[] = "$Header: slattach.c,v 1.1 84/10/04 12:57:12 rick Exp $"; 1526206Skarels #endif 1626206Skarels 1726206Skarels #define DEFAULT_BAUD 9600 1826206Skarels int speed; 1926206Skarels int slipdisc = SLIPDISC; 2026206Skarels 2126206Skarels char devname[32]; 22*26211Skarels char hostname[MAXHOSTNAMELEN]; 2326206Skarels 2426206Skarels extern int errno; 2526206Skarels 2626206Skarels main(argc, argv) 2726206Skarels int argc; 2826206Skarels char *argv[]; 2926206Skarels { 3026206Skarels register FILE *fp; 3126206Skarels register int fd; 3226206Skarels register char *dev = argv[1]; 3326206Skarels struct sgttyb sgtty; 3426206Skarels int n; 3526206Skarels 36*26211Skarels if (argc < 2 || argc > 3) { 37*26211Skarels fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]); 38*26211Skarels exit(1); 39*26211Skarels } 40*26211Skarels speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD); 41*26211Skarels if (speed == 0) { 42*26211Skarels fprintf(stderr, "unknown speed %s", argv[2]); 43*26211Skarels exit(1); 44*26211Skarels } 4526206Skarels if (strncmp("/dev/", dev, 5)) { 4626206Skarels sprintf(devname, "/dev/%s", dev); 4726206Skarels dev = devname; 4826206Skarels } 49*26211Skarels if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) { 50*26211Skarels perror(dev); 51*26211Skarels exit(1); 52*26211Skarels } 5326206Skarels sgtty.sg_flags = RAW | ANYP; 5426206Skarels sgtty.sg_ispeed = sgtty.sg_ospeed = speed; 55*26211Skarels if (ioctl(fd, TIOCSETP, &sgtty) < 0) { 56*26211Skarels perror("ioctl(TIOCSETP)"); 57*26211Skarels exit(1); 58*26211Skarels } 59*26211Skarels if (ioctl(fd, TIOCSETD, &slipdisc) < 0) { 60*26211Skarels perror("ioctl(TIOCSETD)"); 61*26211Skarels exit(1); 62*26211Skarels } 6326206Skarels 64*26211Skarels if (fork() > 0) 65*26211Skarels exit(0); 6626206Skarels for (;;) 6726206Skarels sigpause(0); 6826206Skarels } 6926206Skarels 7026206Skarels struct sg_spds { 7126206Skarels int sp_val, sp_name; 7226206Skarels } spds[] = { 7326206Skarels #ifdef B50 7426206Skarels { 50, B50 }, 7526206Skarels #endif 7626206Skarels #ifdef B75 7726206Skarels { 75, B75 }, 7826206Skarels #endif 7926206Skarels #ifdef B110 8026206Skarels { 110, B110 }, 8126206Skarels #endif 8226206Skarels #ifdef B150 8326206Skarels { 150, B150 }, 8426206Skarels #endif 8526206Skarels #ifdef B200 8626206Skarels { 200, B200 }, 8726206Skarels #endif 8826206Skarels #ifdef B300 8926206Skarels { 300, B300 }, 9026206Skarels #endif 9126206Skarels #ifdef B600 9226206Skarels { 600, B600 }, 9326206Skarels #endif 9426206Skarels #ifdef B1200 9526206Skarels { 1200, B1200 }, 9626206Skarels #endif 9726206Skarels #ifdef B1800 9826206Skarels { 1800, B1800 }, 9926206Skarels #endif 10026206Skarels #ifdef B2000 10126206Skarels { 2000, B2000 }, 10226206Skarels #endif 10326206Skarels #ifdef B2400 10426206Skarels { 2400, B2400 }, 10526206Skarels #endif 10626206Skarels #ifdef B3600 10726206Skarels { 3600, B3600 }, 10826206Skarels #endif 10926206Skarels #ifdef B4800 11026206Skarels { 4800, B4800 }, 11126206Skarels #endif 11226206Skarels #ifdef B7200 11326206Skarels { 7200, B7200 }, 11426206Skarels #endif 11526206Skarels #ifdef B9600 11626206Skarels { 9600, B9600 }, 11726206Skarels #endif 11826206Skarels #ifdef EXTA 11926206Skarels { 19200, EXTA }, 12026206Skarels #endif 12126206Skarels #ifdef EXTB 12226206Skarels { 38400, EXTB }, 12326206Skarels #endif 12426206Skarels { 0, 0 } 12526206Skarels }; 12626206Skarels 12726206Skarels findspeed(speed) 12826206Skarels register int speed; 12926206Skarels { 13026206Skarels register struct sg_spds *sp; 13126206Skarels 13226206Skarels sp = spds; 13326206Skarels while (sp->sp_val && sp->sp_val != speed) 13426206Skarels sp++; 13526206Skarels return (sp->sp_name); 13626206Skarels } 137