annotate packages/net/ppp/current/src/sys-ecos.c @ 1777:c16341b1bac6 default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Mon, 12 Oct 2009 02:26:09 +0100
parents 5629b7c30ed2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
2 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
3 // src/sys-ecos.c
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
4 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
5 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
6 //####ECOSGPLCOPYRIGHTBEGIN####
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
7 // -------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
8 // This file is part of eCos, the Embedded Configurable Operating System.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
9 // Portions created by Nick Garnett are
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
10 // Copyright (C) 2003, 2004 eCosCentric Ltd.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
11 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
12 // eCos is free software; you can redistribute it and/or modify it under
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
13 // the terms of the GNU General Public License as published by the Free
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
14 // Software Foundation; either version 2 or (at your option) any later version.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
15 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
16 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
17 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
18 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
19 // for more details.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
20 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
21 // You should have received a copy of the GNU General Public License along
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
22 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
23 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
24 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
25 // As a special exception, if other files instantiate templates or use macros
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
26 // or inline functions from this file, or you compile this file and link it
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
27 // with other works to produce a work based on this file, this file does not
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
28 // by itself cause the resulting work to be covered by the GNU General Public
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
29 // License. However the source code for this file must still be made available
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
30 // in accordance with section (3) of the GNU General Public License.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
31 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
32 // This exception does not invalidate any other reasons why a work based on
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
33 // this file might be covered by the GNU General Public License.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
34 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
35 // -------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
36 //####ECOSGPLCOPYRIGHTEND####
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
37 //####BSDCOPYRIGHTBEGIN####
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
38 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
39 // -------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
40 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
41 // Portions of this software may have been derived from OpenBSD,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
42 // FreeBSD or other sources, and are covered by the appropriate
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
43 // copyright disclaimers included herein.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
44 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
45 // -------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
46 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
47 //####BSDCOPYRIGHTEND####
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
48 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
49
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
50 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
51 * sys-bsd.c - System-dependent procedures for setting up
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
52 * PPP interfaces on bsd-4.4-ish systems (including 386BSD, NetBSD, etc.)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
53 *
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
54 * Copyright (c) 1989 Carnegie Mellon University.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
55 * Copyright (c) 1995 The Australian National University.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
56 * All rights reserved.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
57 *
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
58 * Redistribution and use in source and binary forms are permitted
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
59 * provided that the above copyright notice and this paragraph are
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
60 * duplicated in all such forms and that any documentation,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
61 * advertising materials, and other materials related to such
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
62 * distribution and use acknowledge that the software was developed
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
63 * by Carnegie Mellon University and The Australian National University.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
64 * The names of the Universities may not be used to endorse or promote
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
65 * products derived from this software without specific prior written
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
66 * permission.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
67 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
68 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
69 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
70 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
71
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
72 #ifndef lint
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
73 //static char rcsid[] = "$FreeBSD: src/usr.sbin/pppd/sys-bsd.c,v 1.17 1999/08/28 01:19:08 peter Exp $";
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
74 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
75 /* $NetBSD: sys-bsd.c,v 1.1.1.3 1997/09/26 18:53:04 christos Exp $ */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
76
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
77 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
78 * TODO:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
79 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
80
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
81 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
82
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
83 #include <pkgconf/system.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
84 #include <pkgconf/net.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
85 #include <pkgconf/ppp.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
86
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
87 #include <stdio.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
88 #include <string.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
89 #include <stdlib.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
90 #include <unistd.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
91 #include <errno.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
92 #include <fcntl.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
93 #include <termios.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
94 #include <signal.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
95 #define _KERNEL 1
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
96 #include <sys/param.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
97 #undef _KERNEL
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
98 #include <sys/ioctl.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
99 #include <sys/types.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
100 #include <sys/socket.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
101 #include <sys/time.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
102 #include <sys/stat.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
103 #ifdef NetBSD1_2
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
104 #include <util.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
105 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
106 #ifdef PPP_FILTER
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
107 #include <net/bpf.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
108 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
109
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
110 #include <cyg/ppp/syslog.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
111
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
112 #include <net/if.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
113 #include <cyg/ppp/net/ppp_defs.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
114 #include <cyg/ppp/net/if_ppp.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
115 #include <net/route.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
116 #include <net/if_dl.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
117 #include <netinet/in.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
118
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
119 #ifdef IPX_CHANGE
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
120 #include <netipx/ipx.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
121 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
122
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
123 #if RTM_VERSION >= 3
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
124 #include <sys/param.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
125 #if defined(NetBSD) && (NetBSD >= 199703)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
126 #include <netinet/if_inarp.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
127 #else /* NetBSD 1.2D or later */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
128 #include <netinet/if_ether.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
129 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
130 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
131
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
132 #include "cyg/ppp/pppd.h"
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
133 #include "cyg/ppp/fsm.h"
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
134 #include "cyg/ppp/ipcp.h"
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
135
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
136 #include "cyg/ppp/ppp_io.h"
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
137
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
138 #include <cyg/ppp/ppp.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
139
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
140 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
141
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
142 static int rtm_seq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
143
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
144 static cyg_io_handle_t ppp_handle; /* IO subsystem handle to PPP stream */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
145 struct tty ppp_tty; /* dummy TTY structure */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
146
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
147 static cyg_handle_t ppp_rtc;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
148 static cyg_resolution_t ppp_rtc_resolution;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
149
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
150 static int loop_slave = -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
151 static int loop_master;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
152
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
153 static unsigned char inbuf[PPP_MTU + PPP_HDRLEN + 100]; /* buffer for chars read from input */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
154
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
155 static int sockfd = -1; /* socket for doing interface ioctls */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
156
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
157 static int if_is_up; /* the interface is currently up */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
158 static u_int32_t ifaddrs[2]; /* local and remote addresses we set */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
159 static u_int32_t default_route_gateway; /* gateway addr for default route */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
160 static u_int32_t proxy_arp_addr; /* remote addr for proxy arp */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
161
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
162 /* Prototypes for procedures local to this file. */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
163 static int dodefaultroute __P((u_int32_t, int));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
164 static int get_ether_addr __P((u_int32_t, struct sockaddr_dl *));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
165
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
166 static void wait_input_alarm(cyg_handle_t alarm, cyg_addrword_t data);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
167 #ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
168 void cyg_ppp_serial_callback( cyg_serial_line_status_t *s,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
169 CYG_ADDRWORD priv );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
170 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
171
1628
2e1811d4f88c * src/auth.c: Don't use non-eCos <paths.h>
jlarmour
parents: 1586
diff changeset
172 extern u_int32_t netmask; /* IP netmask to set on interface */
1586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
173
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
174 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
175 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
176 * sys_init - System-dependent initialization.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
177 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
178 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
179 sys_init()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
180 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
181 if( sockfd == -1 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
182 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
183 /* Get an internet socket for doing socket ioctl's on. */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
184 if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
185 syslog(LOG_ERR, "Couldn't create IP socket: %d",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
186 die(1);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
187 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
188 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
189
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
190 ppp_tty.pppd_wakeup = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
191 ppp_tty.pppd_thread_running = true;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
192
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
193 ppp_rtc = cyg_real_time_clock();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
194 ppp_rtc_resolution = cyg_clock_get_resolution( ppp_rtc );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
195
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
196 cyg_alarm_create( ppp_rtc,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
197 wait_input_alarm,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
198 (cyg_addrword_t)&ppp_tty,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
199 &ppp_tty.alarm,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
200 &ppp_tty.alarm_obj);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
201 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
202
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
203 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
204 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
205 * sys_cleanup - restore any system state we modified before exiting:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
206 * mark the interface down, delete default route and/or proxy arp entry.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
207 * This should call die() because it's called from die().
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
208 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
209 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
210 sys_cleanup()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
211 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
212 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
213
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
214 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
215 if (if_is_up) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
216 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
217 if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) >= 0
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
218 && ((ifr.ifr_flags & IFF_UP) != 0)) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
219 ifr.ifr_flags &= ~IFF_UP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
220 ioctl(sockfd, SIOCSIFFLAGS, &ifr);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
221 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
222 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
223 if (ifaddrs[0] != 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
224 cifaddr(0, ifaddrs[0], ifaddrs[1]);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
225 if (default_route_gateway)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
226 cifdefaultroute(0, 0, default_route_gateway);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
227 if (proxy_arp_addr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
228 cifproxyarp(0, proxy_arp_addr);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
229
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
230 if( sockfd != -1 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
231 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
232 close(sockfd);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
233 sockfd = -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
234 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
235 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
236
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
237 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
238
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
239 #ifdef __ECOS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
240
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
241 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
242 sys_exit(void)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
243 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
244 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
245 phase = PHASE_DEAD;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
246 while( ppp_tty.tx_thread_running )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
247 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
248 db_printf("kick tx thread\n");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
249 cyg_semaphore_post( &ppp_tty.tx_sem );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
250 cyg_thread_delay(100);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
251 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
252 ppp_tty.pppd_thread_running = false;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
253 cyg_thread_exit();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
254 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
255 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
256
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
257 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
258 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
259 * sys_close - Clean up in a child process before execing.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
260 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
261 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
262 sys_close()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
263 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
264 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
265 if (loop_slave >= 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
266 close(loop_slave);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
267 close(loop_master);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
268 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
269 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
270
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
271 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
272 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
273 * sys_check_options - check the options that the user specified
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
274 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
275 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
276 sys_check_options()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
277 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
278 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
279 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
280
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
281 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
282 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
283 * ppp_available - check whether the system has any ppp interfaces
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
284 * (in fact we check whether we can do an ioctl on ppp0).
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
285 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
286 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
287 ppp_available()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
288 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
289 int s, ok;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
290 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
291 extern char *no_ppp_msg;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
292
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
293 if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
294 return 1; /* can't tell */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
295
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
296 strncpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
297 ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
298 close(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
299
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
300 no_ppp_msg = "\
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
301 This system lacks kernel support for PPP. To include PPP support\n\
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
302 in the kernel, please follow the steps detailed in the README.bsd\n\
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
303 file in the ppp-2.2 distribution.\n";
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
304 return ok;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
305 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
306
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
307 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
308 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
309 * establish_ppp - Turn the serial port into a ppp interface.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
310 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
311 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
312 establish_ppp(cyg_io_handle_t handle)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
313 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
314 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
315 int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
316 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
317
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
318 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
319
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
320 ppp_handle = ppp_tty.t_handle = handle;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
321 ppp_tty.t_sc = NULL;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
322
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
323 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
324
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
325 err = cyg_ppp_pppopen( &ppp_tty );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
326
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
327 if( err != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
328 syslog( LOG_ERR, "Couldn't establish PPP interface: %d", err );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
329
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
330 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
331 * Enable debug in the driver if requested.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
332 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
333 if (kdebugflag) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
334 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
335 syslog(LOG_WARNING, "ioctl (PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
336 } else {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
337 x |= (kdebugflag & 0xFF) * SC_DEBUG;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
338 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSFLAGS, (caddr_t) &x, 0)) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
339 syslog(LOG_WARNING, "ioctl(PPPIOCSFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
340 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
341 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
342
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
343 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
344 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
345
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
346 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
347 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
348 * restore_loop - reattach the ppp unit to the loopback.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
349 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
350 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
351 restore_loop()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
352 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
353 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
354 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
355
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
356
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
357 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
358 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
359 * disestablish_ppp - Restore the serial port to normal operation.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
360 * This shouldn't call die() because it's called from die().
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
361 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
362 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
363 disestablish_ppp(cyg_io_handle_t handle)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
364 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
365 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
366 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
367
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
368 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
369 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
370 * Check whether the link seems not to be 8-bit clean.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
371 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
372 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
373 clean_check()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
374 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
375 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
376 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
377
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
378 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
379 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
380 * set_up_tty: Set up the serial port on `fd' for 8 bits, no parity,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
381 * at the requested speed, etc. If `local' is true, set CLOCAL
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
382 * regardless of whether the modem option was specified.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
383 *
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
384 * For *BSD, we assume that speed_t values numerically equal bits/second.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
385 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
386 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
387 set_up_tty(cyg_io_handle_t handle, int local)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
388 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
389 cyg_serial_info_t cfg;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
390 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
391 int len = sizeof(cfg);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
392
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
393 err = cyg_io_get_config( handle,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
394 CYG_IO_GET_CONFIG_SERIAL_INFO,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
395 &cfg,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
396 &len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
397
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
398 if( err != 0 ) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
399 syslog(LOG_ERR, "cyg_io_get_config: %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
400 die(1);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
401 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
402
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
403 switch ( flowctl )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
404 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
405 case CYG_PPP_FLOWCTL_DEFAULT:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
406 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
407
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
408 case CYG_PPP_FLOWCTL_NONE:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
409 cfg.flags &= ~(CYGNUM_SERIAL_FLOW_RTSCTS_RX|CYGNUM_SERIAL_FLOW_RTSCTS_TX|
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
410 CYGNUM_SERIAL_FLOW_XONXOFF_RX|CYGNUM_SERIAL_FLOW_XONXOFF_TX);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
411 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
412
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
413 case CYG_PPP_FLOWCTL_HARDWARE:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
414 cfg.flags &= ~(CYGNUM_SERIAL_FLOW_XONXOFF_RX|CYGNUM_SERIAL_FLOW_XONXOFF_TX);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
415 cfg.flags |= CYGNUM_SERIAL_FLOW_RTSCTS_RX|CYGNUM_SERIAL_FLOW_RTSCTS_TX;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
416 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
417
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
418 case CYG_PPP_FLOWCTL_SOFTWARE:
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
419 cfg.flags &= ~(CYGNUM_SERIAL_FLOW_RTSCTS_RX|CYGNUM_SERIAL_FLOW_RTSCTS_TX);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
420 cfg.flags |= CYGNUM_SERIAL_FLOW_XONXOFF_RX|CYGNUM_SERIAL_FLOW_XONXOFF_TX;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
421 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
422 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
423
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
424 if( inspeed != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
425 cfg.baud = inspeed;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
426
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
427 err = cyg_io_set_config( handle,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
428 CYG_IO_SET_CONFIG_SERIAL_INFO,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
429 &cfg,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
430 &len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
431
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
432 if( err != 0 ) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
433 syslog(LOG_ERR, "cyg_io_set_config: %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
434 die(1);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
435 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
436 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
437
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
438 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
439 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
440 * restore_tty - restore the terminal to the saved settings.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
441 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
442 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
443 restore_tty(cyg_io_handle_t handle)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
444 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
445 #ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
446 if( modem )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
447 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
448 // Restore callback handler if it was set.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
449
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
450 Cyg_ErrNo err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
451 cyg_uint32 len = sizeof(ppp_tty.serial_callbacks);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
452
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
453 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
454
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
455 err = cyg_io_set_config( handle,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
456 CYG_IO_SET_CONFIG_SERIAL_STATUS_CALLBACK,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
457 &ppp_tty.serial_callbacks,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
458 &len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
459
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
460 if( err != 0 ) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
461 syslog(LOG_ERR, "cyg_io_set_config(restore serial callbacks): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
462 die(1);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
463 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
464 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
465 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
466 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
467
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
468 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
469 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
470 * setdtr - control the DTR line on the serial port.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
471 * This is called from die(), so it shouldn't call die().
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
472 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
473 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
474 setdtr(fd, on)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
475 int fd, on;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
476 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
477 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
478 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
479
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
480 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
481 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
482 * output - Output PPP packet.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
483 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
484 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
485 output(unit, p, len)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
486 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
487 u_char *p;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
488 int len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
489 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
490 Cyg_ErrNo err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
491 struct uio uio;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
492 struct iovec iov;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
493 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
494
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
495 if (debug)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
496 log_packet(p, len, "sent ", LOG_DEBUG);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
497
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
498
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
499 iov.iov_base = p;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
500 iov.iov_len = len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
501 uio.uio_iov = &iov;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
502 uio.uio_iovcnt = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
503 uio.uio_resid = len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
504 uio.uio_segflg = UIO_USERSPACE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
505 uio.uio_rw = UIO_WRITE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
506
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
507 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
508
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
509 err = cyg_ppp_pppwrite( &ppp_tty, &uio, 0 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
510
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
511 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
512
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
513 if( err != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
514 syslog(LOG_ERR, "write: %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
515
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
516 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
517
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
518 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
519
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
520 #ifdef __ECOS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
521
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
522 static void wait_input_alarm(cyg_handle_t alarm, cyg_addrword_t data)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
523 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
524 cyg_thread_release( ppp_tty.pppd_thread );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
525 ppp_tty.pppd_wakeup = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
526 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
527
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
528 #ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
529 void cyg_ppp_serial_callback( cyg_serial_line_status_t *s,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
530 CYG_ADDRWORD priv )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
531 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
532 externC int kill_link;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
533
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
534 // db_printf("serial callback %d %x\n",s->which, s->value );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
535
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
536 if( s->which == CYGNUM_SERIAL_STATUS_CARRIERDETECT )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
537 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
538 if( s->value == 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
539 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
540 // CD lost
1694
5629b7c30ed2 Various patches from Matt Jerdonek and Oyvind Harboe:
nickg
parents: 1629
diff changeset
541 ppp_tty.carrier_detected = 0;
1586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
542 kill_link = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
543 cyg_thread_release( ppp_tty.pppd_thread );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
544 ppp_tty.pppd_wakeup = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
545 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
546 else
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
547 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
548 // CD up
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
549 ppp_tty.carrier_detected = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
550 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
551 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
552 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
553 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
554
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
555 static void cyg_ppp_tx_thread(CYG_ADDRWORD arg)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
556 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
557 ppp_tty.tx_thread_running = true;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
558
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
559 // Wait for the PPPD thread to get going and start the PPP
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
560 // initialization phase.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
561 while(phase == PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
562 cyg_thread_delay(100);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
563
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
564 // Now loop until the link goes back down.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
565 while( phase != PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
566 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
567 cyg_semaphore_wait( &ppp_tty.tx_sem );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
568
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
569 if( phase == PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
570 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
571
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
572 // Call into PPP driver to get transmissions going. This is
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
573 // only called if some other thread has failed to transmit all
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
574 // of a packet due to a full buffer, or flow control.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
575
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
576 cyg_ppp_pppstart( &ppp_tty );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
577 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
578
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
579 db_printf("%s exiting\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
580 ppp_tty.tx_thread_running = false;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
581 cyg_thread_exit();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
582 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
583
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
584 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
585
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
587 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
588 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
589 * wait_input - wait until there is data available on ttyfd,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
590 * for the length of time specified by *timo (indefinite
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
591 * if timo is NULL).
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
592 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
593 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
594 wait_input(timo)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
595 struct timeval *timo;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
596 {
1629
2609240c9126 * src/ppp_io.c:
nickg
parents: 1628
diff changeset
597 // If there are any packets still waiting on the input queue then
2609240c9126 * src/ppp_io.c:
nickg
parents: 1628
diff changeset
598 // return immediately to let the PPPD handle them.
2609240c9126 * src/ppp_io.c:
nickg
parents: 1628
diff changeset
599 if (cyg_ppp_pppcheck(&ppp_tty) != 0)
2609240c9126 * src/ppp_io.c:
nickg
parents: 1628
diff changeset
600 return;
2609240c9126 * src/ppp_io.c:
nickg
parents: 1628
diff changeset
601
1586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
602 if( timo != NULL )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
603 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
604 cyg_tick_count_t trigger = timo->tv_sec*ppp_rtc_resolution.divisor;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
605
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
606 // If the timeval has a microseconds value, just add another
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
607 // second on to the trigger time. These are after all just
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
608 // timeouts, not accurate timings, so a bit of imprecision
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
609 // will not hurt.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
610 if( timo->tv_usec != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
611 trigger += ppp_rtc_resolution.divisor;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
612
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
613 trigger += cyg_current_time();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
614
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
615 // We set the alarm to retrigger after a second. This is in
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
616 // case it catches cyg_io_read() at an uninterruptible
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
617 // point. The alarm is disabled as soon as the read returns,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
618 // so the retrigger will usually not happen.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
619 cyg_alarm_initialize( ppp_tty.alarm,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
620 trigger,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
621 ppp_rtc_resolution.divisor );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
622 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
623
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
624 for(;;)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
625 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
626 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
627 int len = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
628 Cyg_ErrNo err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
629 cyg_serial_buf_info_t info;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
630 cyg_uint32 ilen = sizeof(info);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
631
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
632 #if 1
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
633 // Work out how many bytes are waiting in the serial device
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
634 // buffer and read them all at once. If there are none, we
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
635 // just wait for a single character to arrive.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
636
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
637 if( cyg_io_get_config( ppp_tty.t_handle, CYG_IO_GET_CONFIG_SERIAL_BUFFER_INFO,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
638 &info, &ilen ) == 0 && info.rx_count > 1 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
639 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
640 len = info.rx_count-1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
641 if( len > sizeof(inbuf) )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
642 len = sizeof(inbuf);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
643 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
644 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
645
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
646 if( timo != NULL )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
647 cyg_alarm_enable( ppp_tty.alarm );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
648
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
649 err = cyg_io_read( ppp_handle, &inbuf, &len );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
650
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
651 if( timo != NULL )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
652 cyg_alarm_disable( ppp_tty.alarm );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
653
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
654 // db_printf("read: err %d len %d byte %02x\n",err,len,inbuf[0]);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
655
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
656 if( err == 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
657 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
658 int i;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
659
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
660 // Pass all input data to PPP driver for analysis. If this
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
661 // turns out to be for the PPPD, it will call
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
662 // pppasyncctlp() which in turn will set
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
663 // ppp_tty.pppd_wakeup. We detect that on return from
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
664 // pppinput() and return to the caller to do pppd
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
665 // processing.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
666
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
667 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
668
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
669 for( i = 0; i < len; i++ )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
670 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
671 err = cyg_ppp_pppinput( inbuf[i], &ppp_tty );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
672
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
673 if( err != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
674 syslog( LOG_ERR, "pppinput error: %d", err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
675
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
676 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
677
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
678 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
679
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
680 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
681 else if( err != -EINTR )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
682 syslog( LOG_ERR, "Read error: %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
683
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
684 if( ppp_tty.pppd_wakeup )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
685 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
686 ppp_tty.pppd_wakeup = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
687 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
688 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
689 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
690 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
691
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
692 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
693 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
694 * wait_time - wait for a given length of time or until a
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
695 * signal is received.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
696 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
697 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
698 wait_time(timo)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
699 struct timeval *timo;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
700 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
701 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
702 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
703
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
704
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
705 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
706 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
707 * read_packet - get a PPP packet from the serial device.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
708 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
709 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
710 read_packet(buf)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
711 u_char *buf;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
712 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
713 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
714 struct uio uio;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
715 struct iovec iov;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
716 int len = PPP_MTU + PPP_HDRLEN;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
717 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
718
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
719 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
720
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
721 iov.iov_base = buf;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
722 iov.iov_len = len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
723 uio.uio_iov = &iov;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
724 uio.uio_iovcnt = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
725 uio.uio_resid = len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
726 uio.uio_segflg = UIO_USERSPACE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
727 uio.uio_rw = UIO_READ;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
728
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
729 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
730
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
731 err = cyg_ppp_pppread( &ppp_tty, &uio, 0 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
732
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
733 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
734
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
735 if( err == EWOULDBLOCK )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
736 return -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
737
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
738 if( err != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
739 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
740 syslog(LOG_ERR, "pppread: %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
741 die(1);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
742 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
743
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
744 len -= uio.uio_resid;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
745
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
746 return len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
747 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
748
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
749 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
750 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
751 * ppp_send_config - configure the transmit characteristics of
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
752 * the ppp interface.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
753 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
754 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
755 ppp_send_config(unit, mtu, asyncmap, pcomp, accomp)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
756 int unit, mtu;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
757 u_int32_t asyncmap;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
758 int pcomp, accomp;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
759 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
760 u_int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
761 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
762 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
763 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
764
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
765 // db_printf("%s: unit %d mtu %d asyncmap %08x pcomp %08x accomp %08x\n", __PRETTY_FUNCTION__,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
766 // unit,mtu,asyncmap,pcomp,accomp);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
767
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
768 strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
769 ifr.ifr_mtu = mtu;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
770 if (ioctl(sockfd, SIOCSIFMTU, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
771 syslog(LOG_ERR, "ioctl(SIOCSIFMTU): %d",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
772 quit();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
773 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
774
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
775
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
776 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
777
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
778 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSASYNCMAP, (caddr_t) &asyncmap, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
779 syslog(LOG_ERR, "ioctl(PPPIOCSASYNCMAP): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
780 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
781
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
782 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
783 syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
784 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
785 x = pcomp? x | SC_COMP_PROT: x &~ SC_COMP_PROT;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
786 x = accomp? x | SC_COMP_AC: x &~ SC_COMP_AC;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
787 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSFLAGS, (caddr_t) &x, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
788 syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
789 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
790
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
791 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
792 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
793
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
794
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
795 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
796 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
797 * ppp_set_xaccm - set the extended transmit ACCM for the interface.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
798 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
799 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
800 ppp_set_xaccm(unit, accm)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
801 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
802 ext_accm accm;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
803 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
804 int error;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
805 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
806
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
807 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
808
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
809 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
810
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
811 error = cyg_ppp_ppptioctl( &ppp_tty, PPPIOCSXASYNCMAP, (caddr_t)accm, 0 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
812
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
813 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
814
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
815 if( error != 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
816 syslog(LOG_WARNING, "ioctl(set extended ACCM): %d",error);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
817 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
818
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
819
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
820 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
821 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
822 * ppp_recv_config - configure the receive-side characteristics of
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
823 * the ppp interface.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
824 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
825 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
826 ppp_recv_config(unit, mru, asyncmap, pcomp, accomp)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
827 int unit, mru;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
828 u_int32_t asyncmap;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
829 int pcomp, accomp;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
830 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
831 int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
832 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
833 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
834
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
835 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
836
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
837 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSMRU, (caddr_t) &mru, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
838 syslog(LOG_ERR, "ioctl(PPPIOCSMRU): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
839 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
840 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSRASYNCMAP, (caddr_t) &asyncmap, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
841 syslog(LOG_ERR, "ioctl(PPPIOCSRASYNCMAP): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
842 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
843 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
844 syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
845 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
846 x = !accomp? x | SC_REJ_COMP_AC: x &~ SC_REJ_COMP_AC;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
847 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSFLAGS, (caddr_t) &x, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
848 syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
849 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
850
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
851 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
852 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
853
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
854 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
855 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
856 * ccp_test - ask kernel whether a given compression method
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
857 * is acceptable for use. Returns 1 if the method and parameters
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
858 * are OK, 0 if the method is known but the parameters are not OK
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
859 * (e.g. code size should be reduced), or -1 if the method is unknown.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
860 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
861 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
862 ccp_test(unit, opt_ptr, opt_len, for_transmit)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
863 int unit, opt_len, for_transmit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
864 u_char *opt_ptr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
865 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
866 struct ppp_option_data data;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
867 int s;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
868
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
869 data.ptr = opt_ptr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
870 data.length = opt_len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
871 data.transmit = for_transmit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
872 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
873
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
874 s = splsoftnet();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
875
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
876 errno = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSCOMPRESS, (caddr_t) &data, 0 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
877
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
878 splx(s);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
879
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
880 if (errno == 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
881 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
882 else return (errno == ENOBUFS)? 0: -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
883
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
884 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
885
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
886 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
887 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
888 * ccp_flags_set - inform kernel about the current state of CCP.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
889 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
890 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
891 ccp_flags_set(unit, isopen, isup)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
892 int unit, isopen, isup;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
893 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
894 int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
895
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
896 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
897 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
898 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) != 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
899 syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
900 return;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
901 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
902 x = isopen? x | SC_CCP_OPEN: x &~ SC_CCP_OPEN;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
903 x = isup? x | SC_CCP_UP: x &~ SC_CCP_UP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
904 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSFLAGS, (caddr_t) &x,0)) != 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
905 syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
906 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
907
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
908 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
909 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
910 * ccp_fatal_error - returns 1 if decompression was disabled as a
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
911 * result of an error detected after decompression of a packet,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
912 * 0 otherwise. This is necessary because of patent nonsense.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
913 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
914 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
915 ccp_fatal_error(unit)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
916 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
917 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
918 int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
919 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
920
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
921 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
922 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) != 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
923 syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
924 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
925 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
926 return x & SC_DC_FERROR;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
927 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
928
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
929 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
930 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
931 * get_idle_time - return how long the link has been idle.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
932 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
933 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
934 get_idle_time(u, ip)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
935 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
936 struct ppp_idle *ip;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
937 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
938 return cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGIDLE, (caddr_t)ip, 0) == 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
939 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
940
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
941
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
942 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
943
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
944 #ifdef PPP_FILTER
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
945 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
946 * set_filters - transfer the pass and active filters to the kernel.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
947 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
948 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
949 set_filters(pass, active)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
950 struct bpf_program *pass, *active;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
951 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
952 int ret = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
953
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
954 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
955 if (pass->bf_len > 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
956 if (ioctl(ppp_fd, PPPIOCSPASS, pass) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
957 syslog(LOG_ERR, "Couldn't set pass-filter in kernel: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
958 ret = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
959 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
960 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
961 if (active->bf_len > 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
962 if (ioctl(ppp_fd, PPPIOCSACTIVE, active) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
963 syslog(LOG_ERR, "Couldn't set active-filter in kernel: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
964 ret = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
965 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
966 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
967 return ret;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
968 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
969 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
970
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
971 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
972 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
973 * sifvjcomp - config tcp header compression
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
974 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
975 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
976 sifvjcomp(u, vjcomp, cidcomp, maxcid)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
977 int u, vjcomp, cidcomp, maxcid;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
978 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
979 u_int x;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
980 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
981
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
982 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCGFLAGS, (caddr_t) &x, 0)) != 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
983 syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
984 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
985 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
986 x = vjcomp ? x | SC_COMP_TCP: x &~ SC_COMP_TCP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
987 x = cidcomp? x & ~SC_NO_TCP_CCID: x | SC_NO_TCP_CCID;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
988 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSFLAGS, (caddr_t) &x, 0)) != 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
989 syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
990 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
991 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
992 if (vjcomp && ((err=cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSMAXCID, (caddr_t) &maxcid, 0)) != 0)) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
993 syslog(LOG_ERR, "ioctl(PPPIOCSMAXCID): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
994 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
995 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
996 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
997 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
998
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
999 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1000 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1001 * sifup - Config the interface up and enable IP packets to pass.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1002 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1003 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1004 sifup(u)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1005 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1006 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1007 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1008
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1009 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1010 strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1011 if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1012 syslog(LOG_ERR, "ioctl (SIOCGIFFLAGS): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1013 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1014 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1015 ifr.ifr_flags |= IFF_UP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1016 if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1017 syslog(LOG_ERR, "ioctl(SIOCSIFFLAGS): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1018 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1019 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1020 if_is_up = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1021 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1022 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1023
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1024 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1025 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1026 * sifnpmode - Set the mode for handling packets for a given NP.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1027 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1028 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1029 sifnpmode(u, proto, mode)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1030 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1031 int proto;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1032 enum NPmode mode;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1033 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1034 struct npioctl npi;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1035
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1036 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1037 npi.protocol = proto;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1038 npi.mode = mode;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1039 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1040 int err;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1041
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1042 if ((err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSNPMODE, (caddr_t)&npi, 0)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1043 syslog(LOG_ERR, "ioctl(set NP %d mode to %d): %d", proto, mode,err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1044 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1045 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1046 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1047
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1048 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1049 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1050
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1051 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1052 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1053 * sifdown - Config the interface down and disable IP.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1054 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1055 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1056 sifdown(u)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1057 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1058 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1059 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1060 int rv;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1061 struct npioctl npi;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1062
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1063 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1064 rv = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1065 npi.protocol = PPP_IP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1066 npi.mode = NPMODE_ERROR;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1067 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1068 int err = cyg_ppp_ppptioctl(&ppp_tty, PPPIOCSNPMODE, (caddr_t) &npi, 0);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1069 if( err < 0 )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1070 syslog(LOG_WARNING, "ioctl(PPPIOCSNPMODE): %d",err);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1071 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1072 strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1073 if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1074 syslog(LOG_ERR, "ioctl (SIOCGIFFLAGS): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1075 rv = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1076 } else {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1077 ifr.ifr_flags &= ~IFF_UP;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1078 if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1079 syslog(LOG_ERR, "ioctl(SIOCSIFFLAGS): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1080 rv = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1081 } else
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1082 if_is_up = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1083 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1084 return rv;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1085 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1086 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1087
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1088 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1089 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1090 * SET_SA_FAMILY - set the sa_family field of a struct sockaddr,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1091 * if it exists.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1092 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1093 #define SET_SA_FAMILY(addr, family) \
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1094 BZERO((char *) &(addr), sizeof(addr)); \
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1095 addr.sa_family = (family); \
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1096 addr.sa_len = sizeof(addr);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1097
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1098 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1099 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1100 * sifaddr - Config the interface IP addresses and netmask.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1101 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1102 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1103 sifaddr(u, o, h, m)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1104 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1105 u_int32_t o, h, m;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1106 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1107 struct ifaliasreq ifra;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1108 struct ifreq ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1109
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1110 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1111 strncpy(ifra.ifra_name, ifname, sizeof(ifra.ifra_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1112 SET_SA_FAMILY(ifra.ifra_addr, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1113 ((struct sockaddr_in *) &ifra.ifra_addr)->sin_addr.s_addr = o;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1114 SET_SA_FAMILY(ifra.ifra_broadaddr, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1115 ((struct sockaddr_in *) &ifra.ifra_broadaddr)->sin_addr.s_addr = h;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1116 if (m != 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1117 SET_SA_FAMILY(ifra.ifra_mask, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1118 ((struct sockaddr_in *) &ifra.ifra_mask)->sin_addr.s_addr = m;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1119 } else
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1120 BZERO(&ifra.ifra_mask, sizeof(ifra.ifra_mask));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1121 BZERO(&ifr, sizeof(ifr));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1122 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1123 if (ioctl(sockfd, SIOCDIFADDR, (caddr_t) &ifr) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1124 if (errno != EADDRNOTAVAIL)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1125 syslog(LOG_WARNING, "Couldn't remove interface address: %d",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1126 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1127 if (ioctl(sockfd, SIOCAIFADDR, (caddr_t) &ifra) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1128 if (errno != EEXIST) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1129 syslog(LOG_ERR, "Couldn't set interface address: %d",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1130 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1131 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1132 syslog(LOG_WARNING,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1133 "Couldn't set interface address: Address %s already exists",
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1134 ip_ntoa(o));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1135 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1136 ifaddrs[0] = o;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1137 ifaddrs[1] = h;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1138 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1139 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1140
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1141 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1142 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1143 * cifaddr - Clear the interface IP addresses, and delete routes
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1144 * through the interface if possible.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1145 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1146 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1147 cifaddr(u, o, h)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1148 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1149 u_int32_t o, h;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1150 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1151 struct ifaliasreq ifra;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1152
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1153 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1154 ifaddrs[0] = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1155 strncpy(ifra.ifra_name, ifname, sizeof(ifra.ifra_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1156 SET_SA_FAMILY(ifra.ifra_addr, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1157 ((struct sockaddr_in *) &ifra.ifra_addr)->sin_addr.s_addr = o;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1158 SET_SA_FAMILY(ifra.ifra_broadaddr, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1159 ((struct sockaddr_in *) &ifra.ifra_broadaddr)->sin_addr.s_addr = h;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1160 BZERO(&ifra.ifra_mask, sizeof(ifra.ifra_mask));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1161 if (ioctl(sockfd, SIOCDIFADDR, (caddr_t) &ifra) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1162 if (errno != EADDRNOTAVAIL)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1163 syslog(LOG_WARNING, "Couldn't delete interface address: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1164 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1165 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1166 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1167 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1168
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1169 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1170 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1171 * sifdefaultroute - assign a default route through the address given.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1172 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1173 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1174 sifdefaultroute(u, l, g)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1175 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1176 u_int32_t l, g;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1177 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1178 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1179 return dodefaultroute(g, 's');
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1180 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1181
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1182 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1183 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1184 * cifdefaultroute - delete a default route through the address given.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1185 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1186 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1187 cifdefaultroute(u, l, g)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1188 int u;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1189 u_int32_t l, g;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1190 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1191 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1192 return dodefaultroute(g, 'c');
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1193 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1194
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1195 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1196 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1197 * dodefaultroute - talk to a routing socket to add/delete a default route.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1198 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1199 static int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1200 dodefaultroute(g, cmd)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1201 u_int32_t g;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1202 int cmd;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1203 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1204 int routes;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1205 struct {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1206 struct rt_msghdr hdr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1207 struct sockaddr_in dst;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1208 struct sockaddr_in gway;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1209 struct sockaddr_in mask;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1210 } rtmsg;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1211
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1212 db_printf("%s %08x %c\n", __PRETTY_FUNCTION__,g,cmd);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1213 if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1214 syslog(LOG_ERR, "Couldn't %s default route: socket: %d",
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1215 cmd=='s'? "add": "delete",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1216 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1217 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1218
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1219 memset(&rtmsg, 0, sizeof(rtmsg));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1220 rtmsg.hdr.rtm_type = cmd == 's'? RTM_ADD: RTM_DELETE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1221 rtmsg.hdr.rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1222 rtmsg.hdr.rtm_version = RTM_VERSION;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1223 rtmsg.hdr.rtm_seq = ++rtm_seq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1224 rtmsg.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY | RTA_NETMASK;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1225 rtmsg.dst.sin_len = sizeof(rtmsg.dst);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1226 rtmsg.dst.sin_family = AF_INET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1227 rtmsg.gway.sin_len = sizeof(rtmsg.gway);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1228 rtmsg.gway.sin_family = AF_INET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1229 rtmsg.gway.sin_addr.s_addr = g;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1230 rtmsg.mask.sin_len = sizeof(rtmsg.dst);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1231 rtmsg.mask.sin_family = AF_INET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1232
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1233 rtmsg.hdr.rtm_msglen = sizeof(rtmsg);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1234 if (write(routes, &rtmsg, sizeof(rtmsg)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1235 syslog(LOG_ERR, "Couldn't %s default route: %d",
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1236 cmd=='s'? "add": "delete",errno);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1237 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1238 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1239 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1240
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1241 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1242 default_route_gateway = (cmd == 's')? g: 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1243 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1244 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1245
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1246 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1247
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1248 #if RTM_VERSION >= 3
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1249
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1250 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1251 * sifproxyarp - Make a proxy ARP entry for the peer.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1252 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1253 static struct {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1254 struct rt_msghdr hdr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1255 struct sockaddr_inarp dst;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1256 struct sockaddr_dl hwa;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1257 char extra[128];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1258 } arpmsg;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1259
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1260 static int arpmsg_valid;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1261
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1262 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1263 sifproxyarp(unit, hisaddr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1264 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1265 u_int32_t hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1266 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1267 int routes;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1268
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1269 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1270 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1271 * Get the hardware address of an interface on the same subnet
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1272 * as our local address.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1273 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1274 memset(&arpmsg, 0, sizeof(arpmsg));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1275 if (!get_ether_addr(hisaddr, &arpmsg.hwa)) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1276 syslog(LOG_ERR, "Cannot determine ethernet address for proxy ARP");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1277 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1278 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1279
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1280 if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1281 syslog(LOG_ERR, "Couldn't add proxy arp entry: socket: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1282 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1283 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1284
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1285 arpmsg.hdr.rtm_type = RTM_ADD;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1286 arpmsg.hdr.rtm_flags = RTF_ANNOUNCE | RTF_HOST | RTF_STATIC;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1287 arpmsg.hdr.rtm_version = RTM_VERSION;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1288 arpmsg.hdr.rtm_seq = ++rtm_seq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1289 arpmsg.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1290 arpmsg.hdr.rtm_inits = RTV_EXPIRE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1291 arpmsg.dst.sin_len = sizeof(struct sockaddr_inarp);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1292 arpmsg.dst.sin_family = AF_INET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1293 arpmsg.dst.sin_addr.s_addr = hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1294 arpmsg.dst.sin_other = SIN_PROXY;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1295
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1296 arpmsg.hdr.rtm_msglen = (char *) &arpmsg.hwa - (char *) &arpmsg
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1297 + arpmsg.hwa.sdl_len;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1298 if (write(routes, &arpmsg, arpmsg.hdr.rtm_msglen) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1299 syslog(LOG_ERR, "Couldn't add proxy arp entry: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1300 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1301 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1302 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1303
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1304 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1305 arpmsg_valid = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1306 proxy_arp_addr = hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1307 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1308 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1309
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1310 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1311 * cifproxyarp - Delete the proxy ARP entry for the peer.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1312 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1313 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1314 cifproxyarp(unit, hisaddr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1315 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1316 u_int32_t hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1317 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1318 int routes;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1319
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1320 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1321 if (!arpmsg_valid)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1322 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1323 arpmsg_valid = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1324
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1325 arpmsg.hdr.rtm_type = RTM_DELETE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1326 arpmsg.hdr.rtm_seq = ++rtm_seq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1327
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1328 if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1329 syslog(LOG_ERR, "Couldn't delete proxy arp entry: socket: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1330 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1331 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1332
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1333 if (write(routes, &arpmsg, arpmsg.hdr.rtm_msglen) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1334 syslog(LOG_ERR, "Couldn't delete proxy arp entry: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1335 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1336 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1337 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1338
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1339 close(routes);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1340 proxy_arp_addr = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1341 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1342 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1343
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1344 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1345
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1346 #else /* RTM_VERSION */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1347
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1348 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1349 * sifproxyarp - Make a proxy ARP entry for the peer.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1350 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1351 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1352 sifproxyarp(unit, hisaddr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1353 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1354 u_int32_t hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1355 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1356 struct arpreq arpreq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1357 struct {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1358 struct sockaddr_dl sdl;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1359 char space[128];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1360 } dls;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1361
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1362 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1363 BZERO(&arpreq, sizeof(arpreq));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1364
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1365 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1366 * Get the hardware address of an interface on the same subnet
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1367 * as our local address.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1368 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1369 if (!get_ether_addr(hisaddr, &dls.sdl)) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1370 syslog(LOG_ERR, "Cannot determine ethernet address for proxy ARP");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1371 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1372 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1373
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1374 arpreq.arp_ha.sa_len = sizeof(struct sockaddr);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1375 arpreq.arp_ha.sa_family = AF_UNSPEC;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1376 BCOPY(LLADDR(&dls.sdl), arpreq.arp_ha.sa_data, dls.sdl.sdl_alen);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1377 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1378 ((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1379 arpreq.arp_flags = ATF_PERM | ATF_PUBL;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1380 if (ioctl(sockfd, SIOCSARP, (caddr_t)&arpreq) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1381 syslog(LOG_ERR, "Couldn't add proxy arp entry: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1382 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1383 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1384
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1385 proxy_arp_addr = hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1386 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1387 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1388
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1389 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1390 * cifproxyarp - Delete the proxy ARP entry for the peer.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1391 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1392 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1393 cifproxyarp(unit, hisaddr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1394 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1395 u_int32_t hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1396 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1397 struct arpreq arpreq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1398
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1399 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1400 BZERO(&arpreq, sizeof(arpreq));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1401 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1402 ((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1403 if (ioctl(sockfd, SIOCDARP, (caddr_t)&arpreq) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1404 syslog(LOG_WARNING, "Couldn't delete proxy arp entry: %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1405 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1406 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1407 proxy_arp_addr = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1408 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1409 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1410 #endif /* RTM_VERSION */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1411
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1412
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1413 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1414 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1415 * get_ether_addr - get the hardware address of an interface on the
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1416 * the same subnet as ipaddr.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1417 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1418 #define MAX_IFS 32
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1419
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1420 static int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1421 get_ether_addr(ipaddr, hwaddr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1422 u_int32_t ipaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1423 struct sockaddr_dl *hwaddr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1424 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1425 struct ifreq *ifr, *ifend, *ifp;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1426 u_int32_t ina, mask;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1427 struct sockaddr_dl *dla;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1428 struct ifreq ifreq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1429 struct ifconf ifc;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1430 struct ifreq ifs[MAX_IFS];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1431
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1432 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1433 ifc.ifc_len = sizeof(ifs);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1434 ifc.ifc_req = ifs;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1435 if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1436 syslog(LOG_ERR, "ioctl(SIOCGIFCONF): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1437 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1438 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1439
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1440 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1441 * Scan through looking for an interface with an Internet
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1442 * address on the same subnet as `ipaddr'.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1443 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1444 ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1445 for (ifr = ifc.ifc_req; ifr < ifend;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1446 ifr = (struct ifreq *) ((char *)&ifr->ifr_addr
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1447 + MAX(ifr->ifr_addr.sa_len, sizeof(ifr->ifr_addr)))) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1448 if (ifr->ifr_addr.sa_family == AF_INET) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1449 ina = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1450 strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1451 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1452 * Check that the interface is up, and not point-to-point
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1453 * or loopback.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1454 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1455 if (ioctl(sockfd, SIOCGIFFLAGS, &ifreq) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1456 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1457 if ((ifreq.ifr_flags &
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1458 (IFF_UP|IFF_BROADCAST|IFF_POINTOPOINT|IFF_LOOPBACK|IFF_NOARP))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1459 != (IFF_UP|IFF_BROADCAST))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1460 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1461 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1462 * Get its netmask and check that it's on the right subnet.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1463 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1464 if (ioctl(sockfd, SIOCGIFNETMASK, &ifreq) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1465 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1466 mask = ((struct sockaddr_in *) &ifreq.ifr_addr)->sin_addr.s_addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1467 if ((ipaddr & mask) != (ina & mask))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1468 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1469
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1470 break;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1471 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1472 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1473
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1474 if (ifr >= ifend)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1475 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1476 syslog(LOG_INFO, "found interface %s for proxy arp", ifr->ifr_name);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1477
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1478 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1479 * Now scan through again looking for a link-level address
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1480 * for this interface.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1481 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1482 ifp = ifr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1483 for (ifr = ifc.ifc_req; ifr < ifend; ) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1484 if (strcmp(ifp->ifr_name, ifr->ifr_name) == 0
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1485 && ifr->ifr_addr.sa_family == AF_LINK) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1486 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1487 * Found the link-level address - copy it out
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1488 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1489 dla = (struct sockaddr_dl *) &ifr->ifr_addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1490 BCOPY(dla, hwaddr, dla->sdl_len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1491 return 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1492 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1493 ifr = (struct ifreq *) ((char *)&ifr->ifr_addr
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1494 + MAX(ifr->ifr_addr.sa_len, sizeof(ifr->ifr_addr)));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1495 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1496
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1497 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1498 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1499
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1500 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1501 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1502 * Return user specified netmask, modified by any mask we might determine
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1503 * for address `addr' (in network byte order).
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1504 * Here we scan through the system's list of interfaces, looking for
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1505 * any non-point-to-point interfaces which might appear to be on the same
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1506 * network as `addr'. If we find any, we OR in their netmask to the
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1507 * user-specified netmask.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1508 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1509 u_int32_t
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1510 GetMask(addr)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1511 u_int32_t addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1512 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1513 u_int32_t mask, nmask, ina;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1514 struct ifreq *ifr, *ifend, ifreq;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1515 struct ifconf ifc;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1516 struct ifreq ifs[MAX_IFS];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1517
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1518 addr = ntohl(addr);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1519 if (IN_CLASSA(addr)) /* determine network mask for address class */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1520 nmask = IN_CLASSA_NET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1521 else if (IN_CLASSB(addr))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1522 nmask = IN_CLASSB_NET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1523 else
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1524 nmask = IN_CLASSC_NET;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1525 /* class D nets are disallowed by bad_ip_adrs */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1526 mask = netmask | htonl(nmask);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1527
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1528 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1529 * Scan through the system's network interfaces.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1530 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1531 ifc.ifc_len = sizeof(ifs);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1532 ifc.ifc_req = ifs;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1533 if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1534 syslog(LOG_WARNING, "ioctl(SIOCGIFCONF): %m");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1535 return mask;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1536 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1537 ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1538 for (ifr = ifc.ifc_req; ifr < ifend;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1539 ifr = (struct ifreq *) ((char *)&ifr->ifr_addr
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1540 + MAX(ifr->ifr_addr.sa_len, sizeof(ifr->ifr_addr)))) {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1541 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1542 * Check the interface's internet address.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1543 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1544 if (ifr->ifr_addr.sa_family != AF_INET)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1545 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1546 ina = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1547 if ((ntohl(ina) & nmask) != (addr & nmask))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1548 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1549 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1550 * Check that the interface is up, and not point-to-point or loopback.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1551 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1552 strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1553 if (ioctl(sockfd, SIOCGIFFLAGS, &ifreq) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1554 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1555 if ((ifreq.ifr_flags & (IFF_UP|IFF_POINTOPOINT|IFF_LOOPBACK))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1556 != IFF_UP)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1557 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1558 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1559 * Get its netmask and OR it into our mask.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1560 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1561 if (ioctl(sockfd, SIOCGIFNETMASK, &ifreq) < 0)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1562 continue;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1563 mask |= ((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr.s_addr;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1564 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1565
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1566 return mask;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1567 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1568
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1569 //==========================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1570 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1571 * Use the hostid as part of the random number seed.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1572 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1573 int
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1574 get_host_seed()
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1575 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1576 //db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1577 #ifndef __ECOS
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1578 return gethostid();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1579 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1580 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1581 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1582
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1583 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1584 // PAP stubs
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1585 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1586 // When omitting PAP, these fill in the dangling references from auth.c
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1587 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1588
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1589 #ifndef CYGPKG_PPP_PAP
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1590
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1591 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1592 upap_authwithpeer(unit, user, password)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1593 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1594 char *user, *password;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1595 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1596 unit=unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1597 user=user;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1598 password=password;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1599 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1600
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1601 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1602 upap_authpeer(unit)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1603 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1604 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1605 unit=unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1606 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1607
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1608 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1609
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1610 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1611 // CHAP stubs
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1612 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1613 // When omitting CHAP, these fill in the dangling references from auth.c
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1614 //
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1615
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1616 #ifndef CYGPKG_PPP_CHAP
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1617
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1618 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1619 ChapAuthWithPeer(unit, our_name, digest)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1620 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1621 char *our_name;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1622 int digest;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1623 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1624 unit=unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1625 our_name=our_name;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1626 digest=digest;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1627 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1628
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1629 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1630 ChapAuthPeer(unit, our_name, digest)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1631 int unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1632 char *our_name;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1633 int digest;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1634 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1635 unit=unit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1636 our_name=our_name;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1637 digest=digest;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1638 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1639
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1640 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1641
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1642 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1643 // eCos API
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1644
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1645 externC cyg_int32 cyg_ppp_options_init( cyg_ppp_options_t *options )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1646 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1647 if( options == NULL )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1648 return -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1649
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1650 options->debug = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1651 options->kdebugflag = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1652 options->default_route = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1653 options->modem = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1654 options->flowctl = CYG_PPP_FLOWCTL_HARDWARE;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1655 options->refuse_pap = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1656 options->refuse_chap = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1657
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1658 options->baud = CYGNUM_SERIAL_BAUD_115200;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1659
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1660 options->idle_time_limit = 1*60;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1661 options->maxconnect = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1662
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1663 options->our_address = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1664 options->his_address = 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1665
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1666 options->script = NULL;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1667
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1668 strncpy( options->user, CYGPKG_PPP_AUTH_DEFAULT_USER, MAXNAMELEN );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1669 strncpy( options->passwd, CYGPKG_PPP_AUTH_DEFAULT_PASSWD, MAXSECRETLEN );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1670
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1671 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1672 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1673
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1674 // -------------------------------------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1675
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1676
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1677 #define CYGNUM_PPP_PPPD_THREAD_STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL+0x1000)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1678
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1679 static char cyg_pppd_stack[CYGNUM_PPP_PPPD_THREAD_STACK_SIZE];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1680 static cyg_thread cyg_pppd_thread_obj;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1681
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1682 static char cyg_ppp_tx_thread_stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1683 static cyg_thread cyg_ppp_tx_thread_obj;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1684
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1685
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1686 externC void cyg_pppd_main(CYG_ADDRWORD arg);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1687
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1688
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1689 externC cyg_ppp_handle_t cyg_ppp_up( const char *devnam_arg,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1690 const cyg_ppp_options_t *options )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1691 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1692
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1693 if( options == NULL || phase != PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1694 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1695
1694
5629b7c30ed2 Various patches from Matt Jerdonek and Oyvind Harboe:
nickg
parents: 1629
diff changeset
1696 // Initialize control block
5629b7c30ed2 Various patches from Matt Jerdonek and Oyvind Harboe:
nickg
parents: 1629
diff changeset
1697 memset(&ppp_tty, 0, sizeof(struct tty));
5629b7c30ed2 Various patches from Matt Jerdonek and Oyvind Harboe:
nickg
parents: 1629
diff changeset
1698
1586
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1699 strncpy( devnam, devnam_arg, PATH_MAX );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1700
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1701 ppp_tty.options = options;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1702
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1703 // Start the PPPD thread
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1704 cyg_thread_create(CYGNUM_PPP_PPPD_THREAD_PRIORITY,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1705 cyg_pppd_main,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1706 (CYG_ADDRWORD)&ppp_tty,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1707 "PPPD",
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1708 &cyg_pppd_stack[0],
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1709 CYGNUM_PPP_PPPD_THREAD_STACK_SIZE,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1710 &ppp_tty.pppd_thread,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1711 &cyg_pppd_thread_obj
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1712 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1713 cyg_thread_resume(ppp_tty.pppd_thread);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1714
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1715 // Start the TX thread
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1716 cyg_semaphore_init( &ppp_tty.tx_sem, 0 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1717
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1718 cyg_thread_create(CYGNUM_PPP_PPPD_THREAD_PRIORITY+1,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1719 cyg_ppp_tx_thread,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1720 (CYG_ADDRWORD)&ppp_tty,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1721 "PPP Tx Thread",
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1722 &cyg_ppp_tx_thread_stack[0],
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1723 sizeof(cyg_ppp_tx_thread_stack),
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1724 &ppp_tty.tx_thread,
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1725 &cyg_ppp_tx_thread_obj
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1726 );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1727 cyg_thread_resume(ppp_tty.tx_thread);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1728
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1729 // Wait for the PPPD thread to get going and start the PPP
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1730 // initialization phase.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1731 while(phase == PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1732 cyg_thread_delay(100);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1733
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1734 return (cyg_ppp_handle_t)&ppp_tty;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1735 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1736
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1737 // -------------------------------------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1738
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1739 externC char **script;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1740
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1741 externC void cyg_ppp_options_install( const cyg_ppp_options_t *options )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1742 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1743 debug = options->debug;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1744 kdebugflag = options->kdebugflag;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1745
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1746 modem = options->modem;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1747 flowctl = options->flowctl;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1748 refuse_pap = options->refuse_pap;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1749 refuse_chap = options->refuse_chap;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1750
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1751 inspeed = options->baud;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1752
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1753 idle_time_limit = options->idle_time_limit;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1754 maxconnect = options->maxconnect;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1755
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1756 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1757 ipcp_options *wo = &ipcp_wantoptions[0];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1758
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1759 wo->ouraddr = options->our_address;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1760 wo->hisaddr = options->his_address;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1761
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1762 wo->default_route = options->default_route;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1763
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1764 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1765
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1766 script = options->script;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1767
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1768 strncpy( user, &options->user[0], MAXNAMELEN );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1769 strncpy( passwd, &options->passwd[0], MAXSECRETLEN );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1770
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1771 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1772
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1773 // -------------------------------------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1774
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1775 externC cyg_int32 cyg_ppp_down( const cyg_ppp_handle_t handle )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1776 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1777 if( phase != PHASE_DEAD )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1778 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1779 externC int kill_link;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1780 kill_link = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1781 cyg_thread_release( ppp_tty.pppd_thread );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1782 ppp_tty.pppd_wakeup = 1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1783 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1784 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1785 else
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1786 return -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1787 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1788
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1789 // -------------------------------------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1790
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1791 externC cyg_int32 cyg_ppp_wait_up( cyg_ppp_handle_t handle )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1792 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1793 while(!( (phase == PHASE_NETWORK && ifaddrs[0] != 0) ||
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1794 phase == PHASE_DEAD ) )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1795 cyg_thread_delay(100);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1796
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1797 return phase == PHASE_NETWORK ? 0 : -1;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1798 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1799
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1800 // -------------------------------------------------------------------------
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1801
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1802 externC void cyg_ppp_wait_down( cyg_ppp_handle_t handle )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1803 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1804 while( ppp_tty.tx_thread_running || ppp_tty.pppd_thread_running )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1805 cyg_thread_delay(100);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1806
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1807 cyg_thread_delete( ppp_tty.tx_thread );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1808 cyg_thread_delete( ppp_tty.pppd_thread );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1809 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1810
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1811 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1812 // eCos extras
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1813
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1814 void syslog( int level, char *fmt, ... )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1815 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1816 va_list ap;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1817 int ret;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1818
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1819 #ifdef CYGPKG_PPP_DEBUG_WARN_ONLY
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1820 if(!( level == LOG_ERR ||
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1821 level == LOG_WARNING ))
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1822 return;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1823 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1824
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1825 va_start(ap, fmt);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1826 diag_printf("SYSLOG %02x: ",level);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1827 ret = diag_vprintf(fmt, ap);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1828 diag_printf("\n");
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1829 va_end(ap);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1830 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1831
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1832 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1833
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1834 int gettimeofday(struct timeval *tv, struct timezone *tz)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1835 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1836 cyg_tick_count_t time = cyg_current_time();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1837
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1838 tv->tv_sec = time/CYGNUM_HAL_RTC_DENOMINATOR;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1839 tv->tv_usec = (time%CYGNUM_HAL_RTC_DENOMINATOR)*10000;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1840
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1841 // db_printf("%s: %d %d\n", __PRETTY_FUNCTION__, tv->tv_sec, tv->tv_usec);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1842
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1843 return 0;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1844 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1845
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1846 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1847
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1848 char *crypt (const char *key, const char *salt)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1849 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1850 static char res[13];
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1851
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1852 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1853
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1854 return res;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1855 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1856
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1857
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1858 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1859 /*
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1860 * Substitute procedures for those systems which don't have
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1861 * drand48 et al.
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1862 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1863
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1864 double
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1865 drand48(void)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1866 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1867 return (double)rand() / (double)0x7fffffffL; /* 2**31-1 */
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1868 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1869
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1870 long
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1871 mrand48(void)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1872 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1873 return rand();
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1874 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1875
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1876 void
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1877 srand48(long seedval)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1878 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1879 srand(seedval);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1880 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1881
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1882
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1883 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1884
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1885 #if 0
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1886
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1887 #undef MD5Init
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1888 #undef MD5Update
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1889 #undef MD5Final
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1890
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1891 #include <sys/types.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1892
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1893 #include <sys/md5.h>
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1894
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1895
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1896 void cyg_MD5Init( MD5_CTX *ctx );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1897 void cyg_MD5Update (MD5_CTX *ctx, const unsigned char *buf, unsigned int size);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1898 void cyg_MD5Final (unsigned char hash[16], MD5_CTX *ctx);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1899
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1900
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1901 void cyg_ppp_MD5Init( MD5_CTX *ctx )
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1902 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1903 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1904 cyg_MD5Init( ctx );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1905 return;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1906 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1907
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1908 void cyg_ppp_MD5Update (MD5_CTX *ctx, const unsigned char *buf, unsigned int size)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1909 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1910 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1911 cyg_MD5Update( ctx, buf, size );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1912 return;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1913 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1914
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1915 void cyg_ppp_MD5Final (unsigned char hash[16], MD5_CTX *ctx)
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1916 {
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1917 db_printf("%s called\n", __PRETTY_FUNCTION__);
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1918 cyg_MD5Final( hash, ctx );
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1919 return;
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1920 }
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1921
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1922 #endif
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1923
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1924 //=====================================================================
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1925 // End of sys-ecos.c
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1926
e0d88dc6a92f Added PPP network support.
nickg
parents:
diff changeset
1927