OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [lwIP_MCF5235_GCC/] [lwip/] [src/] [netif/] [ppp/] [ppp.h] - Blame information for rev 609

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 583 jeremybenn
/*****************************************************************************
2
* ppp.h - Network Point to Point Protocol header file.
3
*
4
* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.
5
* portions Copyright (c) 1997 Global Election Systems Inc.
6
*
7
* The authors hereby grant permission to use, copy, modify, distribute,
8
* and license this software and its documentation for any purpose, provided
9
* that existing copyright notices are retained in all copies and that this
10
* notice and the following disclaimer are included verbatim in any
11
* distributions. No written agreement, license, or royalty fee is required
12
* for any of the authorized uses.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
15
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
18
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
*
25
******************************************************************************
26
* REVISION HISTORY
27
*
28
* 03-01-01 Marc Boucher <marc@mbsi.ca>
29
*   Ported to lwIP.
30
* 97-11-05 Guy Lancaster <glanca@gesn.com>, Global Election Systems Inc.
31
*       Original derived from BSD codes.
32
*****************************************************************************/
33
 
34
#ifndef PPP_H
35
#define PPP_H
36
 
37
#include "lwip/opt.h"
38
 
39
#if PPP_SUPPORT > 0
40
#include "lwip/sio.h"
41
#include "lwip/api.h"
42
#include "lwip/sockets.h"
43
#include "lwip/stats.h"
44
#include "lwip/mem.h"
45
#include "lwip/tcpip.h"
46
#include "lwip/netif.h"
47
 
48
/*
49
 * pppd.h - PPP daemon global declarations.
50
 *
51
 * Copyright (c) 1989 Carnegie Mellon University.
52
 * All rights reserved.
53
 *
54
 * Redistribution and use in source and binary forms are permitted
55
 * provided that the above copyright notice and this paragraph are
56
 * duplicated in all such forms and that any documentation,
57
 * advertising materials, and other materials related to such
58
 * distribution and use acknowledge that the software was developed
59
 * by Carnegie Mellon University.  The name of the
60
 * University may not be used to endorse or promote products derived
61
 * from this software without specific prior written permission.
62
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
63
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
64
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
65
 *
66
 */
67
/*
68
 * ppp_defs.h - PPP definitions.
69
 *
70
 * Copyright (c) 1994 The Australian National University.
71
 * All rights reserved.
72
 *
73
 * Permission to use, copy, modify, and distribute this software and its
74
 * documentation is hereby granted, provided that the above copyright
75
 * notice appears in all copies.  This software is provided without any
76
 * warranty, express or implied. The Australian National University
77
 * makes no representations about the suitability of this software for
78
 * any purpose.
79
 *
80
 * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
81
 * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
82
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
83
 * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
84
 * OF SUCH DAMAGE.
85
 *
86
 * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
87
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
88
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
89
 * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
90
 * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
91
 * OR MODIFICATIONS.
92
 */
93
 
94
#define TIMEOUT(f, a, t)    sys_untimeout((f), (a)), sys_timeout((t)*1000, (f), (a))
95
#define UNTIMEOUT(f, a)     sys_untimeout((f), (a))
96
 
97
 
98
# ifndef __u_char_defined
99
 
100
/* Type definitions for BSD code. */
101
typedef unsigned long u_long;
102
typedef unsigned int u_int;
103
typedef unsigned short u_short;
104
typedef unsigned char u_char;
105
 
106
#endif
107
 
108
/*
109
 * Constants and structures defined by the internet system,
110
 * Per RFC 790, September 1981, and numerous additions.
111
 */
112
 
113
/*
114
 * The basic PPP frame.
115
 */
116
#define PPP_HDRLEN  4       /* octets for standard ppp header */
117
#define PPP_FCSLEN  2       /* octets for FCS */
118
 
119
 
120
/*
121
 * Significant octet values.
122
 */
123
#define PPP_ALLSTATIONS 0xff    /* All-Stations broadcast address */
124
#define PPP_UI          0x03    /* Unnumbered Information */
125
#define PPP_FLAG        0x7e    /* Flag Sequence */
126
#define PPP_ESCAPE      0x7d    /* Asynchronous Control Escape */
127
#define PPP_TRANS       0x20    /* Asynchronous transparency modifier */
128
 
129
/*
130
 * Protocol field values.
131
 */
132
#define PPP_IP          0x21    /* Internet Protocol */
133
#define PPP_AT          0x29    /* AppleTalk Protocol */
134
#define PPP_VJC_COMP    0x2d    /* VJ compressed TCP */
135
#define PPP_VJC_UNCOMP  0x2f    /* VJ uncompressed TCP */
136
#define PPP_COMP        0xfd    /* compressed packet */
137
#define PPP_IPCP        0x8021  /* IP Control Protocol */
138
#define PPP_ATCP        0x8029  /* AppleTalk Control Protocol */
139
#define PPP_CCP         0x80fd  /* Compression Control Protocol */
140
#define PPP_LCP         0xc021  /* Link Control Protocol */
141
#define PPP_PAP         0xc023  /* Password Authentication Protocol */
142
#define PPP_LQR         0xc025  /* Link Quality Report protocol */
143
#define PPP_CHAP        0xc223  /* Cryptographic Handshake Auth. Protocol */
144
#define PPP_CBCP        0xc029  /* Callback Control Protocol */
145
 
146
/*
147
 * Values for FCS calculations.
148
 */
149
#define PPP_INITFCS 0xffff  /* Initial FCS value */
150
#define PPP_GOODFCS 0xf0b8  /* Good final FCS value */
151
#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
152
 
153
/*
154
 * Extended asyncmap - allows any character to be escaped.
155
 */
156
typedef u_char  ext_accm[32];
157
 
158
/*
159
 * What to do with network protocol (NP) packets.
160
 */
161
enum NPmode {
162
    NPMODE_PASS,        /* pass the packet through */
163
    NPMODE_DROP,        /* silently drop the packet */
164
    NPMODE_ERROR,       /* return an error */
165
    NPMODE_QUEUE        /* save it up for later. */
166
};
167
 
168
/*
169
 * Inline versions of get/put char/short/long.
170
 * Pointer is advanced; we assume that both arguments
171
 * are lvalues and will already be in registers.
172
 * cp MUST be u_char *.
173
 */
174
#define GETCHAR(c, cp) { \
175
    (c) = *(cp)++; \
176
}
177
#define PUTCHAR(c, cp) { \
178
    *(cp)++ = (u_char) (c); \
179
}
180
 
181
 
182
#define GETSHORT(s, cp) { \
183
    (s) = *(cp)++ << 8; \
184
    (s) |= *(cp)++; \
185
}
186
#define PUTSHORT(s, cp) { \
187
    *(cp)++ = (u_char) ((s) >> 8); \
188
    *(cp)++ = (u_char) (s); \
189
}
190
 
191
#define GETLONG(l, cp) { \
192
    (l) = *(cp)++ << 8; \
193
    (l) |= *(cp)++; (l) <<= 8; \
194
    (l) |= *(cp)++; (l) <<= 8; \
195
    (l) |= *(cp)++; \
196
}
197
#define PUTLONG(l, cp) { \
198
    *(cp)++ = (u_char) ((l) >> 24); \
199
    *(cp)++ = (u_char) ((l) >> 16); \
200
    *(cp)++ = (u_char) ((l) >> 8); \
201
    *(cp)++ = (u_char) (l); \
202
}
203
 
204
 
205
#define INCPTR(n, cp)   ((cp) += (n))
206
#define DECPTR(n, cp)   ((cp) -= (n))
207
 
208
#define BCMP(s0, s1, l)     memcmp((u_char *)(s0), (u_char *)(s1), (l))
209
#define BCOPY(s, d, l)      memcpy((d), (s), (l))
210
#define BZERO(s, n)         memset(s, 0, n)
211
#if PPP_DEBUG
212
#define PRINTMSG(m, l)  { m[l] = '\0'; ppp_trace(LOG_INFO, "Remote message: %s\n", m); }
213
#else
214
#define PRINTMSG(m, l)
215
#endif
216
 
217
/*
218
 * MAKEHEADER - Add PPP Header fields to a packet.
219
 */
220
#define MAKEHEADER(p, t) { \
221
    PUTCHAR(PPP_ALLSTATIONS, p); \
222
    PUTCHAR(PPP_UI, p); \
223
    PUTSHORT(t, p); }
224
 
225
/*************************
226
*** PUBLIC DEFINITIONS ***
227
*************************/
228
 
229
/* Error codes. */
230
#define PPPERR_NONE 0                           /* No error. */
231
#define PPPERR_PARAM -1                         /* Invalid parameter. */
232
#define PPPERR_OPEN -2                          /* Unable to open PPP session. */
233
#define PPPERR_DEVICE -3                        /* Invalid I/O device for PPP. */
234
#define PPPERR_ALLOC -4                         /* Unable to allocate resources. */
235
#define PPPERR_USER -5                          /* User interrupt. */
236
#define PPPERR_CONNECT -6                       /* Connection lost. */
237
#define PPPERR_AUTHFAIL -7                      /* Failed authentication challenge. */
238
#define PPPERR_PROTOCOL -8                      /* Failed to meet protocol. */
239
 
240
/*
241
 * PPP IOCTL commands.
242
 */
243
/*
244
 * Get the up status - 0 for down, non-zero for up.  The argument must
245
 * point to an int.
246
 */
247
#define PPPCTLG_UPSTATUS 100    /* Get the up status - 0 down else up */
248
#define PPPCTLS_ERRCODE 101             /* Set the error code */
249
#define PPPCTLG_ERRCODE 102             /* Get the error code */
250
#define PPPCTLG_FD              103             /* Get the fd associated with the ppp */
251
 
252
/************************
253
*** PUBLIC DATA TYPES ***
254
************************/
255
 
256
/*
257
 * The following struct gives the addresses of procedures to call
258
 * for a particular protocol.
259
 */
260
struct protent {
261
    u_short protocol;       /* PPP protocol number */
262
    /* Initialization procedure */
263
    void (*init) (int unit);
264
    /* Process a received packet */
265
    void (*input) (int unit, u_char *pkt, int len);
266
    /* Process a received protocol-reject */
267
    void (*protrej) (int unit);
268
    /* Lower layer has come up */
269
    void (*lowerup) (int unit);
270
    /* Lower layer has gone down */
271
    void (*lowerdown) (int unit);
272
    /* Open the protocol */
273
    void (*open) (int unit);
274
    /* Close the protocol */
275
    void (*close) (int unit, char *reason);
276
#if 0
277
    /* Print a packet in readable form */
278
    int  (*printpkt) (u_char *pkt, int len,
279
              void (*printer) (void *, char *, ...),
280
              void *arg);
281
    /* Process a received data packet */
282
    void (*datainput) (int unit, u_char *pkt, int len);
283
#endif
284
    int  enabled_flag;      /* 0 iff protocol is disabled */
285
    char *name;         /* Text name of protocol */
286
#if 0
287
    /* Check requested options, assign defaults */
288
    void (*check_options) (u_long);
289
    /* Configure interface for demand-dial */
290
    int  (*demand_conf) (int unit);
291
    /* Say whether to bring up link for this pkt */
292
    int  (*active_pkt) (u_char *pkt, int len);
293
#endif
294
};
295
 
296
/*
297
 * The following structure records the time in seconds since
298
 * the last NP packet was sent or received.
299
 */
300
struct ppp_idle {
301
    u_short xmit_idle;      /* seconds since last NP packet sent */
302
    u_short recv_idle;      /* seconds since last NP packet received */
303
};
304
 
305
struct ppp_settings {
306
 
307
        u_int  disable_defaultip : 1;   /* Don't use hostname for default IP addrs */
308
        u_int  auth_required : 1;      /* Peer is required to authenticate */
309
        u_int  explicit_remote : 1;    /* remote_name specified with remotename opt */
310
        u_int  refuse_pap : 1;         /* Don't wanna auth. ourselves with PAP */
311
        u_int  refuse_chap : 1;        /* Don't wanna auth. ourselves with CHAP */
312
        u_int  usehostname : 1;        /* Use hostname for our_name */
313
        u_int  usepeerdns : 1;         /* Ask peer for DNS adds */
314
 
315
        u_short idle_time_limit; /* Shut down link if idle for this long */
316
        int  maxconnect;         /* Maximum connect time (seconds) */
317
 
318
        char user[MAXNAMELEN + 1];/* Username for PAP */
319
        char passwd[MAXSECRETLEN + 1];           /* Password for PAP, secret for CHAP */
320
        char our_name[MAXNAMELEN + 1];         /* Our name for authentication purposes */
321
        char remote_name[MAXNAMELEN + 1];      /* Peer's name for authentication */
322
};
323
 
324
struct ppp_addrs {
325
    struct ip_addr our_ipaddr, his_ipaddr, netmask, dns1, dns2;
326
};
327
 
328
/*****************************
329
*** PUBLIC DATA STRUCTURES ***
330
*****************************/
331
/* Buffers for outgoing packets. */
332
extern u_char outpacket_buf[NUM_PPP][PPP_MRU+PPP_HDRLEN];
333
 
334
extern struct ppp_settings ppp_settings;
335
 
336
extern struct protent *ppp_protocols[];/* Table of pointers to supported protocols */
337
 
338
 
339
/***********************
340
*** PUBLIC FUNCTIONS ***
341
***********************/
342
 
343
/* Initialize the PPP subsystem. */
344
void pppInit(void);
345
 
346
/* Warning: Using PPPAUTHTYPE_ANY might have security consequences.
347
 * RFC 1994 says:
348
 *
349
 * In practice, within or associated with each PPP server, there is a
350
 * database which associates "user" names with authentication
351
 * information ("secrets").  It is not anticipated that a particular
352
 * named user would be authenticated by multiple methods.  This would
353
 * make the user vulnerable to attacks which negotiate the least secure
354
 * method from among a set (such as PAP rather than CHAP).  If the same
355
 * secret was used, PAP would reveal the secret to be used later with
356
 * CHAP.
357
 *
358
 * Instead, for each user name there should be an indication of exactly
359
 * one method used to authenticate that user name.  If a user needs to
360
 * make use of different authentication methods under different
361
 * circumstances, then distinct user names SHOULD be employed, each of
362
 * which identifies exactly one authentication method.
363
 *
364
 */
365
enum pppAuthType {
366
    PPPAUTHTYPE_NONE,
367
    PPPAUTHTYPE_ANY,
368
    PPPAUTHTYPE_PAP,
369
    PPPAUTHTYPE_CHAP
370
};
371
 
372
void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd);
373
 
374
/*
375
 * Open a new PPP connection using the given I/O device.
376
 * This initializes the PPP control block but does not
377
 * attempt to negotiate the LCP session.
378
 * Return a new PPP connection descriptor on success or
379
 * an error code (negative) on failure.
380
 */
381
int pppOpen(sio_fd_t fd, void (*linkStatusCB)(void *ctx, int errCode, void *arg), void *linkStatusCtx);
382
 
383
/*
384
 * Close a PPP connection and release the descriptor.
385
 * Any outstanding packets in the queues are dropped.
386
 * Return 0 on success, an error code on failure.
387
 */
388
int pppClose(int pd);
389
 
390
/*
391
 * Indicate to the PPP process that the line has disconnected.
392
 */
393
void pppSigHUP(int pd);
394
 
395
/*
396
 * Get and set parameters for the given connection.
397
 * Return 0 on success, an error code on failure.
398
 */
399
int  pppIOCtl(int pd, int cmd, void *arg);
400
 
401
/*
402
 * Return the Maximum Transmission Unit for the given PPP connection.
403
 */
404
u_int pppMTU(int pd);
405
 
406
/*
407
 * Write n characters to a ppp link.
408
 *      RETURN: >= 0 Number of characters written
409
 *                       -1 Failed to write to device
410
 */
411
int pppWrite(int pd, const u_char *s, int n);
412
 
413
void pppMainWakeup(int pd);
414
 
415
/* Configure i/f transmit parameters */
416
void ppp_send_config (int, int, u32_t, int, int);
417
/* Set extended transmit ACCM */
418
void ppp_set_xaccm (int, ext_accm *);
419
/* Configure i/f receive parameters */
420
void ppp_recv_config (int, int, u32_t, int, int);
421
/* Find out how long link has been idle */
422
int  get_idle_time (int, struct ppp_idle *);
423
 
424
/* Configure VJ TCP header compression */
425
int  sifvjcomp (int, int, int, int);
426
/* Configure i/f down (for IP) */
427
int  sifup (int);
428
/* Set mode for handling packets for proto */
429
int  sifnpmode (int u, int proto, enum NPmode mode);
430
/* Configure i/f down (for IP) */
431
int  sifdown (int);
432
/* Configure IP addresses for i/f */
433
int  sifaddr (int, u32_t, u32_t, u32_t, u32_t, u32_t);
434
/* Reset i/f IP addresses */
435
int  cifaddr (int, u32_t, u32_t);
436
/* Create default route through i/f */
437
int  sifdefaultroute (int, u32_t, u32_t);
438
/* Delete default route through i/f */
439
int  cifdefaultroute (int, u32_t, u32_t);
440
 
441
/* Get appropriate netmask for address */
442
u32_t GetMask (u32_t);
443
 
444
#endif /* PPP_SUPPORT */
445
 
446
#endif /* PPP_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.