134915Sbostic /* 234915Sbostic * Copyright (c) 1988 Regents of the University of California. 334915Sbostic * All rights reserved. 434915Sbostic * 534915Sbostic * This code is derived from software contributed to Berkeley by 634915Sbostic * Rick Adams. 734915Sbostic * 8*42712Sbostic * %sccs.include.redist.c% 934915Sbostic */ 1034915Sbostic 1126211Skarels #ifndef lint 1234915Sbostic char copyright[] = 1334915Sbostic "@(#) Copyright (c) 1988 Regents of the University of California.\n\ 1434915Sbostic All rights reserved.\n"; 1534915Sbostic #endif /* not lint */ 1634915Sbostic 1734915Sbostic #ifndef lint 18*42712Sbostic static char sccsid[] = "@(#)slattach.c 4.6 (Berkeley) 06/01/90"; 1934915Sbostic #endif /* not lint */ 2034915Sbostic 2126211Skarels #include <sys/param.h> 2226206Skarels #include <sgtty.h> 2326206Skarels #include <sys/socket.h> 2426206Skarels #include <netinet/in.h> 2526206Skarels #include <net/if.h> 2626206Skarels #include <netdb.h> 2726206Skarels #include <fcntl.h> 2837467Sbostic #include <stdio.h> 2937690Sbostic #include <paths.h> 3026206Skarels 3126206Skarels #define DEFAULT_BAUD 9600 3226206Skarels int slipdisc = SLIPDISC; 3326206Skarels 3426206Skarels char devname[32]; 3526211Skarels char hostname[MAXHOSTNAMELEN]; 3626206Skarels 3726206Skarels main(argc, argv) 3826206Skarels int argc; 3926206Skarels char *argv[]; 4026206Skarels { 4126206Skarels register int fd; 4226206Skarels register char *dev = argv[1]; 4326206Skarels struct sgttyb sgtty; 4431988Sbostic int speed; 4526206Skarels 4626211Skarels if (argc < 2 || argc > 3) { 4726211Skarels fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]); 4826211Skarels exit(1); 4926211Skarels } 5026211Skarels speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD); 5126211Skarels if (speed == 0) { 5226211Skarels fprintf(stderr, "unknown speed %s", argv[2]); 5326211Skarels exit(1); 5426211Skarels } 5537467Sbostic if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) { 5637467Sbostic (void)sprintf(devname, "%s/%s", _PATH_DEV, dev); 5726206Skarels dev = devname; 5826206Skarels } 5926211Skarels if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) { 6026211Skarels perror(dev); 6126211Skarels exit(1); 6226211Skarels } 6326206Skarels sgtty.sg_flags = RAW | ANYP; 6426206Skarels sgtty.sg_ispeed = sgtty.sg_ospeed = speed; 6526211Skarels if (ioctl(fd, TIOCSETP, &sgtty) < 0) { 6626211Skarels perror("ioctl(TIOCSETP)"); 6726211Skarels exit(1); 6826211Skarels } 6926211Skarels if (ioctl(fd, TIOCSETD, &slipdisc) < 0) { 7026211Skarels perror("ioctl(TIOCSETD)"); 7126211Skarels exit(1); 7226211Skarels } 7326206Skarels 7426211Skarels if (fork() > 0) 7526211Skarels exit(0); 7626206Skarels for (;;) 7731988Sbostic sigpause(0L); 7826206Skarels } 7926206Skarels 8026206Skarels struct sg_spds { 8126206Skarels int sp_val, sp_name; 8226206Skarels } spds[] = { 8326206Skarels #ifdef B50 8426206Skarels { 50, B50 }, 8526206Skarels #endif 8626206Skarels #ifdef B75 8726206Skarels { 75, B75 }, 8826206Skarels #endif 8926206Skarels #ifdef B110 9026206Skarels { 110, B110 }, 9126206Skarels #endif 9226206Skarels #ifdef B150 9326206Skarels { 150, B150 }, 9426206Skarels #endif 9526206Skarels #ifdef B200 9626206Skarels { 200, B200 }, 9726206Skarels #endif 9826206Skarels #ifdef B300 9926206Skarels { 300, B300 }, 10026206Skarels #endif 10126206Skarels #ifdef B600 10226206Skarels { 600, B600 }, 10326206Skarels #endif 10426206Skarels #ifdef B1200 10526206Skarels { 1200, B1200 }, 10626206Skarels #endif 10726206Skarels #ifdef B1800 10826206Skarels { 1800, B1800 }, 10926206Skarels #endif 11026206Skarels #ifdef B2000 11126206Skarels { 2000, B2000 }, 11226206Skarels #endif 11326206Skarels #ifdef B2400 11426206Skarels { 2400, B2400 }, 11526206Skarels #endif 11626206Skarels #ifdef B3600 11726206Skarels { 3600, B3600 }, 11826206Skarels #endif 11926206Skarels #ifdef B4800 12026206Skarels { 4800, B4800 }, 12126206Skarels #endif 12226206Skarels #ifdef B7200 12326206Skarels { 7200, B7200 }, 12426206Skarels #endif 12526206Skarels #ifdef B9600 12626206Skarels { 9600, B9600 }, 12726206Skarels #endif 12826206Skarels #ifdef EXTA 12926206Skarels { 19200, EXTA }, 13026206Skarels #endif 13126206Skarels #ifdef EXTB 13226206Skarels { 38400, EXTB }, 13326206Skarels #endif 13426206Skarels { 0, 0 } 13526206Skarels }; 13626206Skarels 13726206Skarels findspeed(speed) 13826206Skarels register int speed; 13926206Skarels { 14026206Skarels register struct sg_spds *sp; 14126206Skarels 14226206Skarels sp = spds; 14326206Skarels while (sp->sp_val && sp->sp_val != speed) 14426206Skarels sp++; 14526206Skarels return (sp->sp_name); 14626206Skarels } 147