update /etc/dumpdates in place
[unix-history] / usr / src / sbin / slattach / slattach.c
CommitLineData
00c2d469
MK
1#ifndef lint
2static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) %G%";
3#endif
43660e2e 4#include <stdio.h>
00c2d469 5#include <sys/param.h>
43660e2e
MK
6#include <sgtty.h>
7#include <sys/socket.h>
8#include <netinet/in.h>
9#include <net/if.h>
10#include <netdb.h>
11#include <fcntl.h>
12
13#ifndef lint
14static char rcsid[] = "$Header: slattach.c,v 1.1 84/10/04 12:57:12 rick Exp $";
15#endif
16
43660e2e
MK
17#define DEFAULT_BAUD 9600
18int speed;
19int slipdisc = SLIPDISC;
20
21char devname[32];
00c2d469 22char hostname[MAXHOSTNAMELEN];
43660e2e
MK
23
24extern int errno;
25
26main(argc, argv)
27 int argc;
28 char *argv[];
29{
30 register FILE *fp;
31 register int fd;
32 register char *dev = argv[1];
33 struct sgttyb sgtty;
34 int n;
35
00c2d469
MK
36 if (argc < 2 || argc > 3) {
37 fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]);
38 exit(1);
39 }
40 speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD);
41 if (speed == 0) {
42 fprintf(stderr, "unknown speed %s", argv[2]);
43 exit(1);
44 }
43660e2e
MK
45 if (strncmp("/dev/", dev, 5)) {
46 sprintf(devname, "/dev/%s", dev);
47 dev = devname;
48 }
00c2d469
MK
49 if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
50 perror(dev);
51 exit(1);
52 }
43660e2e
MK
53 sgtty.sg_flags = RAW | ANYP;
54 sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
00c2d469
MK
55 if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
56 perror("ioctl(TIOCSETP)");
57 exit(1);
58 }
59 if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
60 perror("ioctl(TIOCSETD)");
61 exit(1);
62 }
43660e2e 63
00c2d469
MK
64 if (fork() > 0)
65 exit(0);
43660e2e
MK
66 for (;;)
67 sigpause(0);
68}
69
70struct sg_spds {
71 int sp_val, sp_name;
72} spds[] = {
73#ifdef B50
74 { 50, B50 },
75#endif
76#ifdef B75
77 { 75, B75 },
78#endif
79#ifdef B110
80 { 110, B110 },
81#endif
82#ifdef B150
83 { 150, B150 },
84#endif
85#ifdef B200
86 { 200, B200 },
87#endif
88#ifdef B300
89 { 300, B300 },
90#endif
91#ifdef B600
92 { 600, B600 },
93#endif
94#ifdef B1200
95 { 1200, B1200 },
96#endif
97#ifdef B1800
98 { 1800, B1800 },
99#endif
100#ifdef B2000
101 { 2000, B2000 },
102#endif
103#ifdef B2400
104 { 2400, B2400 },
105#endif
106#ifdef B3600
107 { 3600, B3600 },
108#endif
109#ifdef B4800
110 { 4800, B4800 },
111#endif
112#ifdef B7200
113 { 7200, B7200 },
114#endif
115#ifdef B9600
116 { 9600, B9600 },
117#endif
118#ifdef EXTA
119 { 19200, EXTA },
120#endif
121#ifdef EXTB
122 { 38400, EXTB },
123#endif
124 { 0, 0 }
125};
126
127findspeed(speed)
128 register int speed;
129{
130 register struct sg_spds *sp;
131
132 sp = spds;
133 while (sp->sp_val && sp->sp_val != speed)
134 sp++;
135 return (sp->sp_name);
136}