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