ReactOS
0.4.16-dev-1946-g52006dd
pppol2tp.h
Go to the documentation of this file.
1
7
/*
8
* Redistribution and use in source and binary forms, with or without modification,
9
* are permitted provided that the following conditions are met:
10
*
11
* 1. Redistributions of source code must retain the above copyright notice,
12
* this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright notice,
14
* this list of conditions and the following disclaimer in the documentation
15
* and/or other materials provided with the distribution.
16
* 3. The name of the author may not be used to endorse or promote products
17
* derived from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
20
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
22
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
28
* OF SUCH DAMAGE.
29
*
30
* This file is part of the lwIP TCP/IP stack.
31
*
32
*/
33
34
#include "
netif/ppp/ppp_opts.h
"
35
#if PPP_SUPPORT && PPPOL2TP_SUPPORT
/* don't build if not configured for use in lwipopts.h */
36
37
#ifndef PPPOL2TP_H
38
#define PPPOL2TP_H
39
40
#include "
ppp.h
"
41
42
#ifdef __cplusplus
43
extern
"C"
{
44
#endif
45
46
/* Timeout */
47
#define PPPOL2TP_CONTROL_TIMEOUT (5*1000)
/* base for quick timeout calculation */
48
#define PPPOL2TP_SLOW_RETRY (60*1000)
/* persistent retry interval */
49
50
#define PPPOL2TP_MAXSCCRQ 4
/* retry SCCRQ four times (quickly) */
51
#define PPPOL2TP_MAXICRQ 4
/* retry IRCQ four times */
52
#define PPPOL2TP_MAXICCN 4
/* retry ICCN four times */
53
54
/* L2TP header flags */
55
#define PPPOL2TP_HEADERFLAG_CONTROL 0x8000
56
#define PPPOL2TP_HEADERFLAG_LENGTH 0x4000
57
#define PPPOL2TP_HEADERFLAG_SEQUENCE 0x0800
58
#define PPPOL2TP_HEADERFLAG_OFFSET 0x0200
59
#define PPPOL2TP_HEADERFLAG_PRIORITY 0x0100
60
#define PPPOL2TP_HEADERFLAG_VERSION 0x0002
61
62
/* Mandatory bits for control: Control, Length, Sequence, Version 2 */
63
#define PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY (PPPOL2TP_HEADERFLAG_CONTROL|PPPOL2TP_HEADERFLAG_LENGTH|PPPOL2TP_HEADERFLAG_SEQUENCE|PPPOL2TP_HEADERFLAG_VERSION)
64
/* Forbidden bits for control: Offset, Priority */
65
#define PPPOL2TP_HEADERFLAG_CONTROL_FORBIDDEN (PPPOL2TP_HEADERFLAG_OFFSET|PPPOL2TP_HEADERFLAG_PRIORITY)
66
67
/* Mandatory bits for data: Version 2 */
68
#define PPPOL2TP_HEADERFLAG_DATA_MANDATORY (PPPOL2TP_HEADERFLAG_VERSION)
69
70
/* AVP (Attribute Value Pair) header */
71
#define PPPOL2TP_AVPHEADERFLAG_MANDATORY 0x8000
72
#define PPPOL2TP_AVPHEADERFLAG_HIDDEN 0x4000
73
#define PPPOL2TP_AVPHEADERFLAG_LENGTHMASK 0x03ff
74
75
/* -- AVP - Message type */
76
#define PPPOL2TP_AVPTYPE_MESSAGE 0
/* Message type */
77
78
/* Control Connection Management */
79
#define PPPOL2TP_MESSAGETYPE_SCCRQ 1
/* Start Control Connection Request */
80
#define PPPOL2TP_MESSAGETYPE_SCCRP 2
/* Start Control Connection Reply */
81
#define PPPOL2TP_MESSAGETYPE_SCCCN 3
/* Start Control Connection Connected */
82
#define PPPOL2TP_MESSAGETYPE_STOPCCN 4
/* Stop Control Connection Notification */
83
#define PPPOL2TP_MESSAGETYPE_HELLO 6
/* Hello */
84
/* Call Management */
85
#define PPPOL2TP_MESSAGETYPE_OCRQ 7
/* Outgoing Call Request */
86
#define PPPOL2TP_MESSAGETYPE_OCRP 8
/* Outgoing Call Reply */
87
#define PPPOL2TP_MESSAGETYPE_OCCN 9
/* Outgoing Call Connected */
88
#define PPPOL2TP_MESSAGETYPE_ICRQ 10
/* Incoming Call Request */
89
#define PPPOL2TP_MESSAGETYPE_ICRP 11
/* Incoming Call Reply */
90
#define PPPOL2TP_MESSAGETYPE_ICCN 12
/* Incoming Call Connected */
91
#define PPPOL2TP_MESSAGETYPE_CDN 14
/* Call Disconnect Notify */
92
/* Error reporting */
93
#define PPPOL2TP_MESSAGETYPE_WEN 15
/* WAN Error Notify */
94
/* PPP Session Control */
95
#define PPPOL2TP_MESSAGETYPE_SLI 16
/* Set Link Info */
96
97
/* -- AVP - Result code */
98
#define PPPOL2TP_AVPTYPE_RESULTCODE 1
/* Result code */
99
#define PPPOL2TP_RESULTCODE 1
/* General request to clear control connection */
100
101
/* -- AVP - Protocol version (!= L2TP Header version) */
102
#define PPPOL2TP_AVPTYPE_VERSION 2
103
#define PPPOL2TP_VERSION 0x0100
/* L2TP Protocol version 1, revision 0 */
104
105
/* -- AVP - Framing capabilities */
106
#define PPPOL2TP_AVPTYPE_FRAMINGCAPABILITIES 3
/* Bearer capabilities */
107
#define PPPOL2TP_FRAMINGCAPABILITIES 0x00000003
/* Async + Sync framing */
108
109
/* -- AVP - Bearer capabilities */
110
#define PPPOL2TP_AVPTYPE_BEARERCAPABILITIES 4
/* Bearer capabilities */
111
#define PPPOL2TP_BEARERCAPABILITIES 0x00000003
/* Analog + Digital Access */
112
113
/* -- AVP - Tie breaker */
114
#define PPPOL2TP_AVPTYPE_TIEBREAKER 5
115
116
/* -- AVP - Host name */
117
#define PPPOL2TP_AVPTYPE_HOSTNAME 7
/* Host name */
118
#define PPPOL2TP_HOSTNAME "lwIP"
/* FIXME: make it configurable */
119
120
/* -- AVP - Vendor name */
121
#define PPPOL2TP_AVPTYPE_VENDORNAME 8
/* Vendor name */
122
#define PPPOL2TP_VENDORNAME "lwIP"
/* FIXME: make it configurable */
123
124
/* -- AVP - Assign tunnel ID */
125
#define PPPOL2TP_AVPTYPE_TUNNELID 9
/* Assign Tunnel ID */
126
127
/* -- AVP - Receive window size */
128
#define PPPOL2TP_AVPTYPE_RECEIVEWINDOWSIZE 10
/* Receive window size */
129
#define PPPOL2TP_RECEIVEWINDOWSIZE 8
/* FIXME: make it configurable */
130
131
/* -- AVP - Challenge */
132
#define PPPOL2TP_AVPTYPE_CHALLENGE 11
/* Challenge */
133
134
/* -- AVP - Cause code */
135
#define PPPOL2TP_AVPTYPE_CAUSECODE 12
/* Cause code*/
136
137
/* -- AVP - Challenge response */
138
#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE 13
/* Challenge response */
139
#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE_SIZE 16
140
141
/* -- AVP - Assign session ID */
142
#define PPPOL2TP_AVPTYPE_SESSIONID 14
/* Assign Session ID */
143
144
/* -- AVP - Call serial number */
145
#define PPPOL2TP_AVPTYPE_CALLSERIALNUMBER 15
/* Call Serial Number */
146
147
/* -- AVP - Framing type */
148
#define PPPOL2TP_AVPTYPE_FRAMINGTYPE 19
/* Framing Type */
149
#define PPPOL2TP_FRAMINGTYPE 0x00000001
/* Sync framing */
150
151
/* -- AVP - TX Connect Speed */
152
#define PPPOL2TP_AVPTYPE_TXCONNECTSPEED 24
/* TX Connect Speed */
153
#define PPPOL2TP_TXCONNECTSPEED 100000000
/* Connect speed: 100 Mbits/s */
154
155
/* L2TP Session state */
156
#define PPPOL2TP_STATE_INITIAL 0
157
#define PPPOL2TP_STATE_SCCRQ_SENT 1
158
#define PPPOL2TP_STATE_ICRQ_SENT 2
159
#define PPPOL2TP_STATE_ICCN_SENT 3
160
#define PPPOL2TP_STATE_DATA 4
161
162
#define PPPOL2TP_OUTPUT_DATA_HEADER_LEN 6
/* Our data header len */
163
164
/*
165
* PPPoL2TP interface control block.
166
*/
167
typedef
struct
pppol2tp_pcb_s pppol2tp_pcb;
168
struct
pppol2tp_pcb_s {
169
ppp_pcb *ppp;
/* PPP PCB */
170
u8_t
phase;
/* L2TP phase */
171
struct
udp_pcb *udp;
/* UDP L2TP Socket */
172
struct
netif
*
netif
;
/* Output interface, used as a default route */
173
ip_addr_t
remote_ip;
/* LNS IP Address */
174
u16_t
remote_port;
/* LNS port */
175
#if PPPOL2TP_AUTH_SUPPORT
176
const
u8_t
*
secret
;
/* Secret string */
177
u8_t
secret_len;
/* Secret string length */
178
u8_t
secret_rv[16];
/* Random vector */
179
u8_t
challenge_hash[16];
/* Challenge response */
180
u8_t
send_challenge;
/* Boolean whether the next sent packet should contains a challenge response */
181
#endif
/* PPPOL2TP_AUTH_SUPPORT */
182
183
u16_t
tunnel_port;
/* Tunnel port */
184
u16_t
our_ns;
/* NS to peer */
185
u16_t
peer_nr;
/* NR from peer */
186
u16_t
peer_ns;
/* Expected NS from peer */
187
u16_t
source_tunnel_id;
/* Tunnel ID assigned by peer */
188
u16_t
remote_tunnel_id;
/* Tunnel ID assigned to peer */
189
u16_t
source_session_id;
/* Session ID assigned by peer */
190
u16_t
remote_session_id;
/* Session ID assigned to peer */
191
192
u8_t
sccrq_retried;
/* number of SCCRQ retries already done */
193
u8_t
icrq_retried;
/* number of ICRQ retries already done */
194
u8_t
iccn_retried;
/* number of ICCN retries already done */
195
};
196
197
198
/* Create a new L2TP session. */
199
ppp_pcb *pppol2tp_create(
struct
netif
*pppif,
200
struct
netif
*
netif
,
const
ip_addr_t
*ipaddr,
u16_t
port
,
201
const
u8_t
*
secret
,
u8_t
secret_len,
202
ppp_link_status_cb_fn link_status_cb,
void
*ctx_cb);
203
204
#ifdef __cplusplus
205
}
206
#endif
207
208
#endif
/* PPPOL2TP_H */
209
#endif
/* PPP_SUPPORT && PPPOL2TP_SUPPORT */
port
USHORT port
Definition:
uri.c:228
u8_t
uint8_t u8_t
Definition:
arch.h:125
u16_t
uint16_t u16_t
Definition:
arch.h:127
ip_addr_t
ip6_addr_t ip_addr_t
Definition:
ip_addr.h:344
secret
static char secret[]
Definition:
protectdata.c:30
ppp.h
ppp_opts.h
netif
Definition:
netif.h:269
drivers
network
tcpip
lwip
src
include
netif
ppp
pppol2tp.h
Generated on Thu Dec 4 2025 06:06:27 for ReactOS by
1.9.6