This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / include / linux / netfilter / nf_conntrack_pptp.h
1 /* PPTP constants and structs */
2 #ifndef _NF_CONNTRACK_PPTP_H
3 #define _NF_CONNTRACK_PPTP_H
4
5 #include <linux/netfilter/nf_conntrack_common.h>
6
7 /* state of the control session */
8 enum pptp_ctrlsess_state {
9         PPTP_SESSION_NONE,                      /* no session present */
10         PPTP_SESSION_ERROR,                     /* some session error */
11         PPTP_SESSION_STOPREQ,                   /* stop_sess request seen */
12         PPTP_SESSION_REQUESTED,                 /* start_sess request seen */
13         PPTP_SESSION_CONFIRMED,                 /* session established */
14 };
15
16 /* state of the call inside the control session */
17 enum pptp_ctrlcall_state {
18         PPTP_CALL_NONE,
19         PPTP_CALL_ERROR,
20         PPTP_CALL_OUT_REQ,
21         PPTP_CALL_OUT_CONF,
22         PPTP_CALL_IN_REQ,
23         PPTP_CALL_IN_REP,
24         PPTP_CALL_IN_CONF,
25         PPTP_CALL_CLEAR_REQ,
26 };
27
28 /* conntrack private data */
29 struct nf_ct_pptp_master {
30         enum pptp_ctrlsess_state sstate;        /* session state */
31         enum pptp_ctrlcall_state cstate;        /* call state */
32         __be16 pac_call_id;                     /* call id of PAC */
33         __be16 pns_call_id;                     /* call id of PNS */
34
35         /* in pre-2.6.11 this used to be per-expect. Now it is per-conntrack
36          * and therefore imposes a fixed limit on the number of maps */
37         struct nf_ct_gre_keymap *keymap[IP_CT_DIR_MAX];
38 };
39
40 struct nf_nat_pptp {
41         __be16 pns_call_id;                     /* NAT'ed PNS call id */
42         __be16 pac_call_id;                     /* NAT'ed PAC call id */
43 };
44
45 #ifdef __KERNEL__
46
47 #define PPTP_CONTROL_PORT       1723
48
49 #define PPTP_PACKET_CONTROL     1
50 #define PPTP_PACKET_MGMT        2
51
52 #define PPTP_MAGIC_COOKIE       0x1a2b3c4d
53
54 struct pptp_pkt_hdr {
55         __u16   packetLength;
56         __be16  packetType;
57         __be32  magicCookie;
58 };
59
60 /* PptpControlMessageType values */
61 #define PPTP_START_SESSION_REQUEST      1
62 #define PPTP_START_SESSION_REPLY        2
63 #define PPTP_STOP_SESSION_REQUEST       3
64 #define PPTP_STOP_SESSION_REPLY         4
65 #define PPTP_ECHO_REQUEST               5
66 #define PPTP_ECHO_REPLY                 6
67 #define PPTP_OUT_CALL_REQUEST           7
68 #define PPTP_OUT_CALL_REPLY             8
69 #define PPTP_IN_CALL_REQUEST            9
70 #define PPTP_IN_CALL_REPLY              10
71 #define PPTP_IN_CALL_CONNECT            11
72 #define PPTP_CALL_CLEAR_REQUEST         12
73 #define PPTP_CALL_DISCONNECT_NOTIFY     13
74 #define PPTP_WAN_ERROR_NOTIFY           14
75 #define PPTP_SET_LINK_INFO              15
76
77 #define PPTP_MSG_MAX                    15
78
79 /* PptpGeneralError values */
80 #define PPTP_ERROR_CODE_NONE            0
81 #define PPTP_NOT_CONNECTED              1
82 #define PPTP_BAD_FORMAT                 2
83 #define PPTP_BAD_VALUE                  3
84 #define PPTP_NO_RESOURCE                4
85 #define PPTP_BAD_CALLID                 5
86 #define PPTP_REMOVE_DEVICE_ERROR        6
87
88 struct PptpControlHeader {
89         __be16  messageType;
90         __u16   reserved;
91 };
92
93 /* FramingCapability Bitmap Values */
94 #define PPTP_FRAME_CAP_ASYNC            0x1
95 #define PPTP_FRAME_CAP_SYNC             0x2
96
97 /* BearerCapability Bitmap Values */
98 #define PPTP_BEARER_CAP_ANALOG          0x1
99 #define PPTP_BEARER_CAP_DIGITAL         0x2
100
101 struct PptpStartSessionRequest {
102         __be16  protocolVersion;
103         __u16   reserved1;
104         __be32  framingCapability;
105         __be32  bearerCapability;
106         __be16  maxChannels;
107         __be16  firmwareRevision;
108         __u8    hostName[64];
109         __u8    vendorString[64];
110 };
111
112 /* PptpStartSessionResultCode Values */
113 #define PPTP_START_OK                   1
114 #define PPTP_START_GENERAL_ERROR        2
115 #define PPTP_START_ALREADY_CONNECTED    3
116 #define PPTP_START_NOT_AUTHORIZED       4
117 #define PPTP_START_UNKNOWN_PROTOCOL     5
118
119 struct PptpStartSessionReply {
120         __be16  protocolVersion;
121         __u8    resultCode;
122         __u8    generalErrorCode;
123         __be32  framingCapability;
124         __be32  bearerCapability;
125         __be16  maxChannels;
126         __be16  firmwareRevision;
127         __u8    hostName[64];
128         __u8    vendorString[64];
129 };
130
131 /* PptpStopReasons */
132 #define PPTP_STOP_NONE                  1
133 #define PPTP_STOP_PROTOCOL              2
134 #define PPTP_STOP_LOCAL_SHUTDOWN        3
135
136 struct PptpStopSessionRequest {
137         __u8    reason;
138         __u8    reserved1;
139         __u16   reserved2;
140 };
141
142 /* PptpStopSessionResultCode */
143 #define PPTP_STOP_OK                    1
144 #define PPTP_STOP_GENERAL_ERROR         2
145
146 struct PptpStopSessionReply {
147         __u8    resultCode;
148         __u8    generalErrorCode;
149         __u16   reserved1;
150 };
151
152 struct PptpEchoRequest {
153         __be32 identNumber;
154 };
155
156 /* PptpEchoReplyResultCode */
157 #define PPTP_ECHO_OK                    1
158 #define PPTP_ECHO_GENERAL_ERROR         2
159
160 struct PptpEchoReply {
161         __be32  identNumber;
162         __u8    resultCode;
163         __u8    generalErrorCode;
164         __u16   reserved;
165 };
166
167 /* PptpFramingType */
168 #define PPTP_ASYNC_FRAMING              1
169 #define PPTP_SYNC_FRAMING               2
170 #define PPTP_DONT_CARE_FRAMING          3
171
172 /* PptpCallBearerType */
173 #define PPTP_ANALOG_TYPE                1
174 #define PPTP_DIGITAL_TYPE               2
175 #define PPTP_DONT_CARE_BEARER_TYPE      3
176
177 struct PptpOutCallRequest {
178         __be16  callID;
179         __be16  callSerialNumber;
180         __be32  minBPS;
181         __be32  maxBPS;
182         __be32  bearerType;
183         __be32  framingType;
184         __be16  packetWindow;
185         __be16  packetProcDelay;
186         __be16  phoneNumberLength;
187         __u16   reserved1;
188         __u8    phoneNumber[64];
189         __u8    subAddress[64];
190 };
191
192 /* PptpCallResultCode */
193 #define PPTP_OUTCALL_CONNECT            1
194 #define PPTP_OUTCALL_GENERAL_ERROR      2
195 #define PPTP_OUTCALL_NO_CARRIER         3
196 #define PPTP_OUTCALL_BUSY               4
197 #define PPTP_OUTCALL_NO_DIAL_TONE       5
198 #define PPTP_OUTCALL_TIMEOUT            6
199 #define PPTP_OUTCALL_DONT_ACCEPT        7
200
201 struct PptpOutCallReply {
202         __be16  callID;
203         __be16  peersCallID;
204         __u8    resultCode;
205         __u8    generalErrorCode;
206         __be16  causeCode;
207         __be32  connectSpeed;
208         __be16  packetWindow;
209         __be16  packetProcDelay;
210         __be32  physChannelID;
211 };
212
213 struct PptpInCallRequest {
214         __be16  callID;
215         __be16  callSerialNumber;
216         __be32  callBearerType;
217         __be32  physChannelID;
218         __be16  dialedNumberLength;
219         __be16  dialingNumberLength;
220         __u8    dialedNumber[64];
221         __u8    dialingNumber[64];
222         __u8    subAddress[64];
223 };
224
225 /* PptpInCallResultCode */
226 #define PPTP_INCALL_ACCEPT              1
227 #define PPTP_INCALL_GENERAL_ERROR       2
228 #define PPTP_INCALL_DONT_ACCEPT         3
229
230 struct PptpInCallReply {
231         __be16  callID;
232         __be16  peersCallID;
233         __u8    resultCode;
234         __u8    generalErrorCode;
235         __be16  packetWindow;
236         __be16  packetProcDelay;
237         __u16   reserved;
238 };
239
240 struct PptpInCallConnected {
241         __be16  peersCallID;
242         __u16   reserved;
243         __be32  connectSpeed;
244         __be16  packetWindow;
245         __be16  packetProcDelay;
246         __be32  callFramingType;
247 };
248
249 struct PptpClearCallRequest {
250         __be16  callID;
251         __u16   reserved;
252 };
253
254 struct PptpCallDisconnectNotify {
255         __be16  callID;
256         __u8    resultCode;
257         __u8    generalErrorCode;
258         __be16  causeCode;
259         __u16   reserved;
260         __u8    callStatistics[128];
261 };
262
263 struct PptpWanErrorNotify {
264         __be16  peersCallID;
265         __u16   reserved;
266         __be32  crcErrors;
267         __be32  framingErrors;
268         __be32  hardwareOverRuns;
269         __be32  bufferOverRuns;
270         __be32  timeoutErrors;
271         __be32  alignmentErrors;
272 };
273
274 struct PptpSetLinkInfo {
275         __be16  peersCallID;
276         __u16   reserved;
277         __be32  sendAccm;
278         __be32  recvAccm;
279 };
280
281 union pptp_ctrl_union {
282         struct PptpStartSessionRequest  sreq;
283         struct PptpStartSessionReply    srep;
284         struct PptpStopSessionRequest   streq;
285         struct PptpStopSessionReply     strep;
286         struct PptpOutCallRequest       ocreq;
287         struct PptpOutCallReply         ocack;
288         struct PptpInCallRequest        icreq;
289         struct PptpInCallReply          icack;
290         struct PptpInCallConnected      iccon;
291         struct PptpClearCallRequest     clrreq;
292         struct PptpCallDisconnectNotify disc;
293         struct PptpWanErrorNotify       wanerr;
294         struct PptpSetLinkInfo          setlink;
295 };
296
297 /* crap needed for nf_conntrack_compat.h */
298 struct nf_conn;
299 struct nf_conntrack_expect;
300
301 extern int
302 (*nf_nat_pptp_hook_outbound)(struct sk_buff **pskb,
303                              struct nf_conn *ct, enum ip_conntrack_info ctinfo,
304                              struct PptpControlHeader *ctlh,
305                              union pptp_ctrl_union *pptpReq);
306
307 extern int
308 (*nf_nat_pptp_hook_inbound)(struct sk_buff **pskb,
309                             struct nf_conn *ct, enum ip_conntrack_info ctinfo,
310                             struct PptpControlHeader *ctlh,
311                             union pptp_ctrl_union *pptpReq);
312
313 extern void
314 (*nf_nat_pptp_hook_exp_gre)(struct nf_conntrack_expect *exp_orig,
315                             struct nf_conntrack_expect *exp_reply);
316
317 extern void
318 (*nf_nat_pptp_hook_expectfn)(struct nf_conn *ct,
319                              struct nf_conntrack_expect *exp);
320
321 #endif /* __KERNEL__ */
322 #endif /* _NF_CONNTRACK_PPTP_H */