126211Skarels #ifndef lint 2*31988Sbostic static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) 2/17/86"; 326211Skarels #endif 426206Skarels #include <stdio.h> 526211Skarels #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 slipdisc = SLIPDISC; 1926206Skarels 2026206Skarels char devname[32]; 2126211Skarels char hostname[MAXHOSTNAMELEN]; 2226206Skarels 2326206Skarels main(argc, argv) 2426206Skarels int argc; 2526206Skarels char *argv[]; 2626206Skarels { 2726206Skarels register int fd; 2826206Skarels register char *dev = argv[1]; 2926206Skarels struct sgttyb sgtty; 30*31988Sbostic int speed; 3126206Skarels 3226211Skarels if (argc < 2 || argc > 3) { 3326211Skarels fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]); 3426211Skarels exit(1); 3526211Skarels } 3626211Skarels speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD); 3726211Skarels if (speed == 0) { 3826211Skarels fprintf(stderr, "unknown speed %s", argv[2]); 3926211Skarels exit(1); 4026211Skarels } 4126206Skarels if (strncmp("/dev/", dev, 5)) { 42*31988Sbostic (void)sprintf(devname, "/dev/%s", dev); 4326206Skarels dev = devname; 4426206Skarels } 4526211Skarels if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) { 4626211Skarels perror(dev); 4726211Skarels exit(1); 4826211Skarels } 4926206Skarels sgtty.sg_flags = RAW | ANYP; 5026206Skarels sgtty.sg_ispeed = sgtty.sg_ospeed = speed; 5126211Skarels if (ioctl(fd, TIOCSETP, &sgtty) < 0) { 5226211Skarels perror("ioctl(TIOCSETP)"); 5326211Skarels exit(1); 5426211Skarels } 5526211Skarels if (ioctl(fd, TIOCSETD, &slipdisc) < 0) { 5626211Skarels perror("ioctl(TIOCSETD)"); 5726211Skarels exit(1); 5826211Skarels } 5926206Skarels 6026211Skarels if (fork() > 0) 6126211Skarels exit(0); 6226206Skarels for (;;) 63*31988Sbostic sigpause(0L); 6426206Skarels } 6526206Skarels 6626206Skarels struct sg_spds { 6726206Skarels int sp_val, sp_name; 6826206Skarels } spds[] = { 6926206Skarels #ifdef B50 7026206Skarels { 50, B50 }, 7126206Skarels #endif 7226206Skarels #ifdef B75 7326206Skarels { 75, B75 }, 7426206Skarels #endif 7526206Skarels #ifdef B110 7626206Skarels { 110, B110 }, 7726206Skarels #endif 7826206Skarels #ifdef B150 7926206Skarels { 150, B150 }, 8026206Skarels #endif 8126206Skarels #ifdef B200 8226206Skarels { 200, B200 }, 8326206Skarels #endif 8426206Skarels #ifdef B300 8526206Skarels { 300, B300 }, 8626206Skarels #endif 8726206Skarels #ifdef B600 8826206Skarels { 600, B600 }, 8926206Skarels #endif 9026206Skarels #ifdef B1200 9126206Skarels { 1200, B1200 }, 9226206Skarels #endif 9326206Skarels #ifdef B1800 9426206Skarels { 1800, B1800 }, 9526206Skarels #endif 9626206Skarels #ifdef B2000 9726206Skarels { 2000, B2000 }, 9826206Skarels #endif 9926206Skarels #ifdef B2400 10026206Skarels { 2400, B2400 }, 10126206Skarels #endif 10226206Skarels #ifdef B3600 10326206Skarels { 3600, B3600 }, 10426206Skarels #endif 10526206Skarels #ifdef B4800 10626206Skarels { 4800, B4800 }, 10726206Skarels #endif 10826206Skarels #ifdef B7200 10926206Skarels { 7200, B7200 }, 11026206Skarels #endif 11126206Skarels #ifdef B9600 11226206Skarels { 9600, B9600 }, 11326206Skarels #endif 11426206Skarels #ifdef EXTA 11526206Skarels { 19200, EXTA }, 11626206Skarels #endif 11726206Skarels #ifdef EXTB 11826206Skarels { 38400, EXTB }, 11926206Skarels #endif 12026206Skarels { 0, 0 } 12126206Skarels }; 12226206Skarels 12326206Skarels findspeed(speed) 12426206Skarels register int speed; 12526206Skarels { 12626206Skarels register struct sg_spds *sp; 12726206Skarels 12826206Skarels sp = spds; 12926206Skarels while (sp->sp_val && sp->sp_val != speed) 13026206Skarels sp++; 13126206Skarels return (sp->sp_name); 13226206Skarels } 133