134915Sbostic /*
261550Sbostic * Copyright (c) 1988, 1993
361550Sbostic * The Regents of the University of California. All rights reserved.
434915Sbostic *
534915Sbostic * This code is derived from software contributed to Berkeley by
634915Sbostic * Rick Adams.
734915Sbostic *
842712Sbostic * %sccs.include.redist.c%
934915Sbostic */
1034915Sbostic
1126211Skarels #ifndef lint
1261550Sbostic static char copyright[] =
1361550Sbostic "@(#) Copyright (c) 1988, 1993\n\
1461550Sbostic The Regents of the University of California. All rights reserved.\n";
1534915Sbostic #endif /* not lint */
1634915Sbostic
1734915Sbostic #ifndef lint
18*65571Sbostic static char sccsid[] = "@(#)slattach.c 8.2 (Berkeley) 01/07/94";
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
main(argc,argv)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)) {
56*65571Sbostic (void)snprintf(devname, sizeof(devname),
57*65571Sbostic "%s%s", _PATH_DEV, dev);
5826206Skarels dev = devname;
5926206Skarels }
6026211Skarels if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
6126211Skarels perror(dev);
6226211Skarels exit(1);
6326211Skarels }
6426206Skarels sgtty.sg_flags = RAW | ANYP;
6526206Skarels sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
6626211Skarels if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
6726211Skarels perror("ioctl(TIOCSETP)");
6826211Skarels exit(1);
6926211Skarels }
7026211Skarels if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
7126211Skarels perror("ioctl(TIOCSETD)");
7226211Skarels exit(1);
7326211Skarels }
7426206Skarels
7526211Skarels if (fork() > 0)
7626211Skarels exit(0);
7726206Skarels for (;;)
7831988Sbostic sigpause(0L);
7926206Skarels }
8026206Skarels
8126206Skarels struct sg_spds {
8226206Skarels int sp_val, sp_name;
8326206Skarels } spds[] = {
8426206Skarels #ifdef B50
8526206Skarels { 50, B50 },
8626206Skarels #endif
8726206Skarels #ifdef B75
8826206Skarels { 75, B75 },
8926206Skarels #endif
9026206Skarels #ifdef B110
9126206Skarels { 110, B110 },
9226206Skarels #endif
9326206Skarels #ifdef B150
9426206Skarels { 150, B150 },
9526206Skarels #endif
9626206Skarels #ifdef B200
9726206Skarels { 200, B200 },
9826206Skarels #endif
9926206Skarels #ifdef B300
10026206Skarels { 300, B300 },
10126206Skarels #endif
10226206Skarels #ifdef B600
10326206Skarels { 600, B600 },
10426206Skarels #endif
10526206Skarels #ifdef B1200
10626206Skarels { 1200, B1200 },
10726206Skarels #endif
10826206Skarels #ifdef B1800
10926206Skarels { 1800, B1800 },
11026206Skarels #endif
11126206Skarels #ifdef B2000
11226206Skarels { 2000, B2000 },
11326206Skarels #endif
11426206Skarels #ifdef B2400
11526206Skarels { 2400, B2400 },
11626206Skarels #endif
11726206Skarels #ifdef B3600
11826206Skarels { 3600, B3600 },
11926206Skarels #endif
12026206Skarels #ifdef B4800
12126206Skarels { 4800, B4800 },
12226206Skarels #endif
12326206Skarels #ifdef B7200
12426206Skarels { 7200, B7200 },
12526206Skarels #endif
12626206Skarels #ifdef B9600
12726206Skarels { 9600, B9600 },
12826206Skarels #endif
12926206Skarels #ifdef EXTA
13026206Skarels { 19200, EXTA },
13126206Skarels #endif
13226206Skarels #ifdef EXTB
13326206Skarels { 38400, EXTB },
13426206Skarels #endif
13526206Skarels { 0, 0 }
13626206Skarels };
13726206Skarels
findspeed(speed)13826206Skarels findspeed(speed)
13926206Skarels register int speed;
14026206Skarels {
14126206Skarels register struct sg_spds *sp;
14226206Skarels
14326206Skarels sp = spds;
14426206Skarels while (sp->sp_val && sp->sp_val != speed)
14526206Skarels sp++;
14626206Skarels return (sp->sp_name);
14726206Skarels }
148