|
|
1.1 root 1: /*
2: * Copyright (c) 1988 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Rick Adams.
7: *
8: * Redistribution and use in source and binary forms are permitted
9: * provided that: (1) source distributions retain this entire copyright
10: * notice and comment, and (2) distributions including binaries display
11: * the following acknowledgement: ``This product includes software
12: * developed by the University of California, Berkeley and its contributors''
13: * in the documentation or other materials provided with the distribution
14: * and in all advertising materials mentioning features or use of this
15: * software. Neither the name of the University nor the names of its
16: * contributors may be used to endorse or promote products derived
17: * from this software without specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: char copyright[] =
25: "@(#) Copyright (c) 1988 Regents of the University of California.\n\
26: All rights reserved.\n";
27: #endif /* not lint */
28:
29: #ifndef lint
30: static char sccsid[] = "@(#)slattach.c 4.6 (Berkeley) 6/1/90";
31: #endif /* not lint */
32:
33: #include <sys/param.h>
34: #include <sgtty.h>
35: #include <sys/socket.h>
36: #include <netinet/in.h>
37: #include <net/if.h>
38: #include <netdb.h>
39: #include <fcntl.h>
40: #include <stdio.h>
41: #include <paths.h>
42:
43: #define DEFAULT_BAUD 9600
44: int slipdisc = SLIPDISC;
45:
46: char devname[32];
47: char hostname[MAXHOSTNAMELEN];
48:
49: main(argc, argv)
50: int argc;
51: char *argv[];
52: {
53: register int fd;
54: register char *dev = argv[1];
55: struct sgttyb sgtty;
56: int speed;
57:
58: if (argc < 2 || argc > 3) {
59: fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]);
60: exit(1);
61: }
62: speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD);
63: if (speed == 0) {
64: fprintf(stderr, "unknown speed %s", argv[2]);
65: exit(1);
66: }
67: if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) {
68: (void)sprintf(devname, "%s/%s", _PATH_DEV, dev);
69: dev = devname;
70: }
71: if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
72: perror(dev);
73: exit(1);
74: }
75: sgtty.sg_flags = RAW | ANYP;
76: sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
77: if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
78: perror("ioctl(TIOCSETP)");
79: exit(1);
80: }
81: if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
82: perror("ioctl(TIOCSETD)");
83: exit(1);
84: }
85:
86: if (fork() > 0)
87: exit(0);
88: for (;;)
89: sigpause(0L);
90: }
91:
92: struct sg_spds {
93: int sp_val, sp_name;
94: } spds[] = {
95: #ifdef B50
96: { 50, B50 },
97: #endif
98: #ifdef B75
99: { 75, B75 },
100: #endif
101: #ifdef B110
102: { 110, B110 },
103: #endif
104: #ifdef B150
105: { 150, B150 },
106: #endif
107: #ifdef B200
108: { 200, B200 },
109: #endif
110: #ifdef B300
111: { 300, B300 },
112: #endif
113: #ifdef B600
114: { 600, B600 },
115: #endif
116: #ifdef B1200
117: { 1200, B1200 },
118: #endif
119: #ifdef B1800
120: { 1800, B1800 },
121: #endif
122: #ifdef B2000
123: { 2000, B2000 },
124: #endif
125: #ifdef B2400
126: { 2400, B2400 },
127: #endif
128: #ifdef B3600
129: { 3600, B3600 },
130: #endif
131: #ifdef B4800
132: { 4800, B4800 },
133: #endif
134: #ifdef B7200
135: { 7200, B7200 },
136: #endif
137: #ifdef B9600
138: { 9600, B9600 },
139: #endif
140: #ifdef EXTA
141: { 19200, EXTA },
142: #endif
143: #ifdef EXTB
144: { 38400, EXTB },
145: #endif
146: { 0, 0 }
147: };
148:
149: findspeed(speed)
150: register int speed;
151: {
152: register struct sg_spds *sp;
153:
154: sp = spds;
155: while (sp->sp_val && sp->sp_val != speed)
156: sp++;
157: return (sp->sp_name);
158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.