]> git.saurik.com Git - apple/network_cmds.git/blame - slattach.tproj/slattach.c
network_cmds-307.1.1.tar.gz
[apple/network_cmds.git] / slattach.tproj / slattach.c
CommitLineData
b7080c8e
A
1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
a2c93a76
A
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.
b7080c8e
A
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,
a2c93a76
A
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."
b7080c8e
A
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>
b8dff150
A
69#include <stdlib.h>
70#include <string.h>
71#include <signal.h>
72#include <sys/types.h>
73#include <unistd.h>
b7080c8e
A
74#include <paths.h>
75
76#define DEFAULT_BAUD 9600
77int slipdisc = SLIPDISC;
78
79__private_extern__
b8dff150 80char dev_name[32] = { '\0' };
b7080c8e
A
81char hostname[MAXHOSTNAMELEN];
82
b8dff150
A
83int findspeed(int);
84
85int
b7080c8e
A
86main(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)) {
b8dff150 105 (void)snprintf(dev_name, sizeof(dev_name),
b7080c8e 106 "%s%s", _PATH_DEV, dev);
b8dff150 107 dev = dev_name;
b7080c8e
A
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);
b8dff150
A
128 /* NOTREACHED */
129 return 0;
b7080c8e
A
130}
131
132struct 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
b8dff150 189int
b7080c8e
A
190findspeed(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}