xref: /csrg-svn/sbin/slattach/slattach.c (revision 31988)
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