]> git.saurik.com Git - apple/network_cmds.git/blob - slattach.tproj/slattach.c
7f722d7e8a4d001ad05e87e234d98e08a154705d
[apple/network_cmds.git] / slattach.tproj / slattach.c
1 /*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.0 (the 'License'). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License."
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24 /*
25 * Copyright (c) 1988, 1993
26 * The Regents of the University of California. All rights reserved.
27 *
28 * This code is derived from software contributed to Berkeley by
29 * Rick Adams.
30 *
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
33 * are met:
34 * 1. Redistributions of source code must retain the above copyright
35 * notice, this list of conditions and the following disclaimer.
36 * 2. Redistributions in binary form must reproduce the above copyright
37 * notice, this list of conditions and the following disclaimer in the
38 * documentation and/or other materials provided with the distribution.
39 * 3. All advertising materials mentioning features or use of this software
40 * must display the following acknowledgement:
41 * This product includes software developed by the University of
42 * California, Berkeley and its contributors.
43 * 4. Neither the name of the University nor the names of its contributors
44 * may be used to endorse or promote products derived from this software
45 * without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
48 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
51 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
53 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
54 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
55 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
56 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
57 * SUCH DAMAGE.
58 */
59
60
61 #include <sys/param.h>
62 #include <sgtty.h>
63 #include <sys/socket.h>
64 #include <netinet/in.h>
65 #include <net/if.h>
66 #include <netdb.h>
67 #include <fcntl.h>
68 #include <stdio.h>
69 #include <stdlib.h>
70 #include <string.h>
71 #include <signal.h>
72 #include <sys/types.h>
73 #include <unistd.h>
74 #include <paths.h>
75
76 #define DEFAULT_BAUD 9600
77 int slipdisc = SLIPDISC;
78
79 __private_extern__
80 char dev_name[32] = { '\0' };
81 char hostname[MAXHOSTNAMELEN];
82
83 int findspeed(int);
84
85 int
86 main(argc, argv)
87 int argc;
88 char *argv[];
89 {
90 register int fd;
91 register char *dev = argv[1];
92 struct sgttyb sgtty;
93 int speed;
94
95 if (argc < 2 || argc > 3) {
96 fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]);
97 exit(1);
98 }
99 speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD);
100 if (speed == 0) {
101 fprintf(stderr, "unknown speed %s", argv[2]);
102 exit(1);
103 }
104 if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) {
105 (void)snprintf(dev_name, sizeof(dev_name),
106 "%s%s", _PATH_DEV, dev);
107 dev = dev_name;
108 }
109 if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
110 perror(dev);
111 exit(1);
112 }
113 sgtty.sg_flags = RAW | ANYP;
114 sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
115 if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
116 perror("ioctl(TIOCSETP)");
117 exit(1);
118 }
119 if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
120 perror("ioctl(TIOCSETD)");
121 exit(1);
122 }
123
124 if (fork() > 0)
125 exit(0);
126 for (;;)
127 sigpause(0L);
128 /* NOTREACHED */
129 return 0;
130 }
131
132 struct sg_spds {
133 int sp_val, sp_name;
134 } spds[] = {
135 #ifdef B50
136 { 50, B50 },
137 #endif
138 #ifdef B75
139 { 75, B75 },
140 #endif
141 #ifdef B110
142 { 110, B110 },
143 #endif
144 #ifdef B150
145 { 150, B150 },
146 #endif
147 #ifdef B200
148 { 200, B200 },
149 #endif
150 #ifdef B300
151 { 300, B300 },
152 #endif
153 #ifdef B600
154 { 600, B600 },
155 #endif
156 #ifdef B1200
157 { 1200, B1200 },
158 #endif
159 #ifdef B1800
160 { 1800, B1800 },
161 #endif
162 #ifdef B2000
163 { 2000, B2000 },
164 #endif
165 #ifdef B2400
166 { 2400, B2400 },
167 #endif
168 #ifdef B3600
169 { 3600, B3600 },
170 #endif
171 #ifdef B4800
172 { 4800, B4800 },
173 #endif
174 #ifdef B7200
175 { 7200, B7200 },
176 #endif
177 #ifdef B9600
178 { 9600, B9600 },
179 #endif
180 #ifdef EXTA
181 { 19200, EXTA },
182 #endif
183 #ifdef EXTB
184 { 38400, EXTB },
185 #endif
186 { 0, 0 }
187 };
188
189 int
190 findspeed(speed)
191 register int speed;
192 {
193 register struct sg_spds *sp;
194
195 sp = spds;
196 while (sp->sp_val && sp->sp_val != speed)
197 sp++;
198 return (sp->sp_name);
199 }