Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nf_conntrack_pptp.h
Go to the documentation of this file.
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 */
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 */
28 };
29 
30 /* conntrack private data */
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 {
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;
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;
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;
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;
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;
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
305  struct nf_conn *ct, enum ip_conntrack_info ctinfo,
306  unsigned int protoff,
307  struct PptpControlHeader *ctlh,
308  union pptp_ctrl_union *pptpReq);
309 
310 extern int
312  struct nf_conn *ct, enum ip_conntrack_info ctinfo,
313  unsigned int protoff,
314  struct PptpControlHeader *ctlh,
315  union pptp_ctrl_union *pptpReq);
316 
317 extern void
319  struct nf_conntrack_expect *exp_reply);
320 
321 extern void
323  struct nf_conntrack_expect *exp);
324 
325 #endif /* __KERNEL__ */
326 #endif /* _NF_CONNTRACK_PPTP_H */