|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)slattach.c 4.1 (Berkeley) 2/17/86";
3: #endif
4: #include <stdio.h>
5: #include <sys/param.h>
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
14: static char rcsid[] = "$Header: slattach.c,v 1.1 84/10/04 12:57:12 rick Exp $";
15: #endif
16:
17: #define DEFAULT_BAUD 9600
18: int speed;
19: int slipdisc = SLIPDISC;
20:
21: char devname[32];
22: char hostname[MAXHOSTNAMELEN];
23:
24: extern int errno;
25:
26: main(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:
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: }
45: if (strncmp("/dev/", dev, 5)) {
46: sprintf(devname, "/dev/%s", dev);
47: dev = devname;
48: }
49: if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
50: perror(dev);
51: exit(1);
52: }
53: sgtty.sg_flags = RAW | ANYP;
54: sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
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: }
63:
64: if (fork() > 0)
65: exit(0);
66: for (;;)
67: sigpause(0);
68: }
69:
70: struct 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:
127: findspeed(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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.