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