1 /* PPTP constants and structs */
2 #ifndef _CONNTRACK_PPTP_H
3 #define _CONNTRACK_PPTP_H
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 */
14 /* state of the call inside the control session */
15 enum pptp_ctrlcall_state {
27 /* conntrack private data */
28 struct ip_ct_pptp_master {
29 enum pptp_ctrlsess_state sstate; /* session state */
31 /* everything below is going to be per-expectation in newnat,
32 * since there could be more than one call within one session */
33 enum pptp_ctrlcall_state cstate; /* call state */
34 u_int16_t pac_call_id; /* call id of PAC, host byte order */
35 u_int16_t pns_call_id; /* call id of PNS, host byte order */
38 /* conntrack_expect private member */
39 struct ip_ct_pptp_expect {
40 enum pptp_ctrlcall_state cstate; /* call state */
41 u_int16_t pac_call_id; /* call id of PAC */
42 u_int16_t pns_call_id; /* call id of PNS */
48 #include <linux/netfilter_ipv4/lockhelp.h>
49 DECLARE_LOCK_EXTERN(ip_pptp_lock);
51 #define IP_CONNTR_PPTP PPTP_CONTROL_PORT
53 #define PPTP_CONTROL_PORT 1723
55 #define PPTP_PACKET_CONTROL 1
56 #define PPTP_PACKET_MGMT 2
58 #define PPTP_MAGIC_COOKIE 0x1a2b3c4d
66 /* PptpControlMessageType values */
67 #define PPTP_START_SESSION_REQUEST 1
68 #define PPTP_START_SESSION_REPLY 2
69 #define PPTP_STOP_SESSION_REQUEST 3
70 #define PPTP_STOP_SESSION_REPLY 4
71 #define PPTP_ECHO_REQUEST 5
72 #define PPTP_ECHO_REPLY 6
73 #define PPTP_OUT_CALL_REQUEST 7
74 #define PPTP_OUT_CALL_REPLY 8
75 #define PPTP_IN_CALL_REQUEST 9
76 #define PPTP_IN_CALL_REPLY 10
77 #define PPTP_IN_CALL_CONNECT 11
78 #define PPTP_CALL_CLEAR_REQUEST 12
79 #define PPTP_CALL_DISCONNECT_NOTIFY 13
80 #define PPTP_WAN_ERROR_NOTIFY 14
81 #define PPTP_SET_LINK_INFO 15
83 #define PPTP_MSG_MAX 15
85 /* PptpGeneralError values */
86 #define PPTP_ERROR_CODE_NONE 0
87 #define PPTP_NOT_CONNECTED 1
88 #define PPTP_BAD_FORMAT 2
89 #define PPTP_BAD_VALUE 3
90 #define PPTP_NO_RESOURCE 4
91 #define PPTP_BAD_CALLID 5
92 #define PPTP_REMOVE_DEVICE_ERROR 6
94 struct PptpControlHeader {
99 /* FramingCapability Bitmap Values */
100 #define PPTP_FRAME_CAP_ASYNC 0x1
101 #define PPTP_FRAME_CAP_SYNC 0x2
103 /* BearerCapability Bitmap Values */
104 #define PPTP_BEARER_CAP_ANALOG 0x1
105 #define PPTP_BEARER_CAP_DIGITAL 0x2
107 struct PptpStartSessionRequest {
108 __u16 protocolVersion;
111 __u32 framingCapability;
112 __u32 bearerCapability;
114 __u16 firmwareRevision;
116 __u8 vendorString[64];
119 /* PptpStartSessionResultCode Values */
120 #define PPTP_START_OK 1
121 #define PPTP_START_GENERAL_ERROR 2
122 #define PPTP_START_ALREADY_CONNECTED 3
123 #define PPTP_START_NOT_AUTHORIZED 4
124 #define PPTP_START_UNKNOWN_PROTOCOL 5
126 struct PptpStartSessionReply {
127 __u16 protocolVersion;
129 __u8 generalErrorCode;
130 __u32 framingCapability;
131 __u32 bearerCapability;
133 __u16 firmwareRevision;
135 __u8 vendorString[64];
138 /* PptpStopReasons */
139 #define PPTP_STOP_NONE 1
140 #define PPTP_STOP_PROTOCOL 2
141 #define PPTP_STOP_LOCAL_SHUTDOWN 3
143 struct PptpStopSessionRequest {
147 /* PptpStopSessionResultCode */
148 #define PPTP_STOP_OK 1
149 #define PPTP_STOP_GENERAL_ERROR 2
151 struct PptpStopSessionReply {
153 __u8 generalErrorCode;
156 struct PptpEchoRequest {
160 /* PptpEchoReplyResultCode */
161 #define PPTP_ECHO_OK 1
162 #define PPTP_ECHO_GENERAL_ERROR 2
164 struct PptpEchoReply {
167 __u8 generalErrorCode;
171 /* PptpFramingType */
172 #define PPTP_ASYNC_FRAMING 1
173 #define PPTP_SYNC_FRAMING 2
174 #define PPTP_DONT_CARE_FRAMING 3
176 /* PptpCallBearerType */
177 #define PPTP_ANALOG_TYPE 1
178 #define PPTP_DIGITAL_TYPE 2
179 #define PPTP_DONT_CARE_BEARER_TYPE 3
181 struct PptpOutCallRequest {
183 __u16 callSerialNumber;
189 __u16 packetProcDelay;
191 __u16 phoneNumberLength;
193 __u8 phoneNumber[64];
197 /* PptpCallResultCode */
198 #define PPTP_OUTCALL_CONNECT 1
199 #define PPTP_OUTCALL_GENERAL_ERROR 2
200 #define PPTP_OUTCALL_NO_CARRIER 3
201 #define PPTP_OUTCALL_BUSY 4
202 #define PPTP_OUTCALL_NO_DIAL_TONE 5
203 #define PPTP_OUTCALL_TIMEOUT 6
204 #define PPTP_OUTCALL_DONT_ACCEPT 7
206 struct PptpOutCallReply {
210 __u8 generalErrorCode;
214 __u16 packetProcDelay;
218 struct PptpInCallRequest {
220 __u16 callSerialNumber;
221 __u32 callBearerType;
223 __u16 dialedNumberLength;
224 __u16 dialingNumberLength;
225 __u8 dialedNumber[64];
226 __u8 dialingNumber[64];
230 /* PptpInCallResultCode */
231 #define PPTP_INCALL_ACCEPT 1
232 #define PPTP_INCALL_GENERAL_ERROR 2
233 #define PPTP_INCALL_DONT_ACCEPT 3
235 struct PptpInCallReply {
239 __u8 generalErrorCode;
241 __u16 packetProcDelay;
245 struct PptpInCallConnected {
250 __u16 packetProcDelay;
251 __u32 callFramingType;
254 struct PptpClearCallRequest {
259 struct PptpCallDisconnectNotify {
262 __u8 generalErrorCode;
265 __u8 callStatistics[128];
268 struct PptpWanErrorNotify {
273 __u32 hardwareOverRuns;
274 __u32 bufferOverRuns;
276 __u32 alignmentErrors;
279 struct PptpSetLinkInfo {
287 struct pptp_priv_data {
293 union pptp_ctrl_union {
294 struct PptpStartSessionRequest sreq;
295 struct PptpStartSessionReply srep;
296 struct PptpStopSessionRequest streq;
297 struct PptpStopSessionReply strep;
298 struct PptpOutCallRequest ocreq;
299 struct PptpOutCallReply ocack;
300 struct PptpInCallRequest icreq;
301 struct PptpInCallReply icack;
302 struct PptpInCallConnected iccon;
303 struct PptpClearCallRequest clrreq;
304 struct PptpCallDisconnectNotify disc;
305 struct PptpWanErrorNotify wanerr;
306 struct PptpSetLinkInfo setlink;
309 #endif /* __KERNEL__ */
310 #endif /* _CONNTRACK_PPTP_H */