]> git.saurik.com Git - apple/network_cmds.git/blob - slattach.tproj/slattach.c
network_cmds-245.1.4.tar.gz
[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 <paths.h>
70
71 #define DEFAULT_BAUD 9600
72 int slipdisc = SLIPDISC;
73
74 __private_extern__
75 char devname[32] = { '\0' };
76 char hostname[MAXHOSTNAMELEN];
77
78 main(argc, argv)
79 int argc;
80 char *argv[];
81 {
82 register int fd;
83 register char *dev = argv[1];
84 struct sgttyb sgtty;
85 int speed;
86
87 if (argc < 2 || argc > 3) {
88 fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]);
89 exit(1);
90 }
91 speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD);
92 if (speed == 0) {
93 fprintf(stderr, "unknown speed %s", argv[2]);
94 exit(1);
95 }
96 if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) {
97 (void)snprintf(devname, sizeof(devname),
98 "%s%s", _PATH_DEV, dev);
99 dev = devname;
100 }
101 if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
102 perror(dev);
103 exit(1);
104 }
105 sgtty.sg_flags = RAW | ANYP;
106 sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
107 if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
108 perror("ioctl(TIOCSETP)");
109 exit(1);
110 }
111 if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
112 perror("ioctl(TIOCSETD)");
113 exit(1);
114 }
115
116 if (fork() > 0)
117 exit(0);
118 for (;;)
119 sigpause(0L);
120 }
121
122 struct sg_spds {
123 int sp_val, sp_name;
124 } spds[] = {
125 #ifdef B50
126 { 50, B50 },
127 #endif
128 #ifdef B75
129 { 75, B75 },
130 #endif
131 #ifdef B110
132 { 110, B110 },
133 #endif
134 #ifdef B150
135 { 150, B150 },
136 #endif
137 #ifdef B200
138 { 200, B200 },
139 #endif
140 #ifdef B300
141 { 300, B300 },
142 #endif
143 #ifdef B600
144 { 600, B600 },
145 #endif
146 #ifdef B1200
147 { 1200, B1200 },
148 #endif
149 #ifdef B1800
150 { 1800, B1800 },
151 #endif
152 #ifdef B2000
153 { 2000, B2000 },
154 #endif
155 #ifdef B2400
156 { 2400, B2400 },
157 #endif
158 #ifdef B3600
159 { 3600, B3600 },
160 #endif
161 #ifdef B4800
162 { 4800, B4800 },
163 #endif
164 #ifdef B7200
165 { 7200, B7200 },
166 #endif
167 #ifdef B9600
168 { 9600, B9600 },
169 #endif
170 #ifdef EXTA
171 { 19200, EXTA },
172 #endif
173 #ifdef EXTB
174 { 38400, EXTB },
175 #endif
176 { 0, 0 }
177 };
178
179 findspeed(speed)
180 register int speed;
181 {
182 register struct sg_spds *sp;
183
184 sp = spds;
185 while (sp->sp_val && sp->sp_val != speed)
186 sp++;
187 return (sp->sp_name);
188 }