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