xref: /linux/include/linux/netfilter/nf_conntrack_pptp.h (revision 72503791edffe516848d0f01d377fa9cd0711970)
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 			     unsigned int protoff,
307 			     struct PptpControlHeader *ctlh,
308 			     union pptp_ctrl_union *pptpReq);
309 
310 extern int
311 (*nf_nat_pptp_hook_inbound)(struct sk_buff *skb,
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
318 (*nf_nat_pptp_hook_exp_gre)(struct nf_conntrack_expect *exp_orig,
319 			    struct nf_conntrack_expect *exp_reply);
320 
321 extern void
322 (*nf_nat_pptp_hook_expectfn)(struct nf_conn *ct,
323 			     struct nf_conntrack_expect *exp);
324 
325 #endif /* __KERNEL__ */
326 #endif /* _NF_CONNTRACK_PPTP_H */
327