1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* PPTP constants and structs */
3 #ifndef _NF_CONNTRACK_PPTP_H
4 #define _NF_CONNTRACK_PPTP_H
6 #include <linux/netfilter.h>
7 #include <linux/skbuff.h>
8 #include <linux/types.h>
9 #include <linux/netfilter/nf_conntrack_common.h>
10 #include <net/netfilter/nf_conntrack_expect.h>
11 #include <uapi/linux/netfilter/nf_conntrack_tuple_common.h>
13 const char *pptp_msg_name(u_int16_t msg
);
15 /* state of the control session */
16 enum pptp_ctrlsess_state
{
17 PPTP_SESSION_NONE
, /* no session present */
18 PPTP_SESSION_ERROR
, /* some session error */
19 PPTP_SESSION_STOPREQ
, /* stop_sess request seen */
20 PPTP_SESSION_REQUESTED
, /* start_sess request seen */
21 PPTP_SESSION_CONFIRMED
, /* session established */
24 /* state of the call inside the control session */
25 enum pptp_ctrlcall_state
{
36 /* conntrack private data */
37 struct nf_ct_pptp_master
{
38 enum pptp_ctrlsess_state sstate
; /* session state */
39 enum pptp_ctrlcall_state cstate
; /* call state */
40 __be16 pac_call_id
; /* call id of PAC */
41 __be16 pns_call_id
; /* call id of PNS */
43 /* in pre-2.6.11 this used to be per-expect. Now it is per-conntrack
44 * and therefore imposes a fixed limit on the number of maps */
45 struct nf_ct_gre_keymap
*keymap
[IP_CT_DIR_MAX
];
49 __be16 pns_call_id
; /* NAT'ed PNS call id */
50 __be16 pac_call_id
; /* NAT'ed PAC call id */
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 __be16 protocolVersion
;
110 __be32 framingCapability
;
111 __be32 bearerCapability
;
113 __be16 firmwareRevision
;
115 __u8 vendorString
[64];
118 /* PptpStartSessionResultCode Values */
119 #define PPTP_START_OK 1
120 #define PPTP_START_GENERAL_ERROR 2
121 #define PPTP_START_ALREADY_CONNECTED 3
122 #define PPTP_START_NOT_AUTHORIZED 4
123 #define PPTP_START_UNKNOWN_PROTOCOL 5
125 struct PptpStartSessionReply
{
126 __be16 protocolVersion
;
128 __u8 generalErrorCode
;
129 __be32 framingCapability
;
130 __be32 bearerCapability
;
132 __be16 firmwareRevision
;
134 __u8 vendorString
[64];
137 /* PptpStopReasons */
138 #define PPTP_STOP_NONE 1
139 #define PPTP_STOP_PROTOCOL 2
140 #define PPTP_STOP_LOCAL_SHUTDOWN 3
142 struct PptpStopSessionRequest
{
148 /* PptpStopSessionResultCode */
149 #define PPTP_STOP_OK 1
150 #define PPTP_STOP_GENERAL_ERROR 2
152 struct PptpStopSessionReply
{
154 __u8 generalErrorCode
;
158 struct PptpEchoRequest
{
162 /* PptpEchoReplyResultCode */
163 #define PPTP_ECHO_OK 1
164 #define PPTP_ECHO_GENERAL_ERROR 2
166 struct PptpEchoReply
{
169 __u8 generalErrorCode
;
173 /* PptpFramingType */
174 #define PPTP_ASYNC_FRAMING 1
175 #define PPTP_SYNC_FRAMING 2
176 #define PPTP_DONT_CARE_FRAMING 3
178 /* PptpCallBearerType */
179 #define PPTP_ANALOG_TYPE 1
180 #define PPTP_DIGITAL_TYPE 2
181 #define PPTP_DONT_CARE_BEARER_TYPE 3
183 struct PptpOutCallRequest
{
185 __be16 callSerialNumber
;
191 __be16 packetProcDelay
;
192 __be16 phoneNumberLength
;
194 __u8 phoneNumber
[64];
198 /* PptpCallResultCode */
199 #define PPTP_OUTCALL_CONNECT 1
200 #define PPTP_OUTCALL_GENERAL_ERROR 2
201 #define PPTP_OUTCALL_NO_CARRIER 3
202 #define PPTP_OUTCALL_BUSY 4
203 #define PPTP_OUTCALL_NO_DIAL_TONE 5
204 #define PPTP_OUTCALL_TIMEOUT 6
205 #define PPTP_OUTCALL_DONT_ACCEPT 7
207 struct PptpOutCallReply
{
211 __u8 generalErrorCode
;
215 __be16 packetProcDelay
;
216 __be32 physChannelID
;
219 struct PptpInCallRequest
{
221 __be16 callSerialNumber
;
222 __be32 callBearerType
;
223 __be32 physChannelID
;
224 __be16 dialedNumberLength
;
225 __be16 dialingNumberLength
;
226 __u8 dialedNumber
[64];
227 __u8 dialingNumber
[64];
231 /* PptpInCallResultCode */
232 #define PPTP_INCALL_ACCEPT 1
233 #define PPTP_INCALL_GENERAL_ERROR 2
234 #define PPTP_INCALL_DONT_ACCEPT 3
236 struct PptpInCallReply
{
240 __u8 generalErrorCode
;
242 __be16 packetProcDelay
;
246 struct PptpInCallConnected
{
251 __be16 packetProcDelay
;
252 __be32 callFramingType
;
255 struct PptpClearCallRequest
{
260 struct PptpCallDisconnectNotify
{
263 __u8 generalErrorCode
;
266 __u8 callStatistics
[128];
269 struct PptpWanErrorNotify
{
273 __be32 framingErrors
;
274 __be32 hardwareOverRuns
;
275 __be32 bufferOverRuns
;
276 __be32 timeoutErrors
;
277 __be32 alignmentErrors
;
280 struct PptpSetLinkInfo
{
287 union pptp_ctrl_union
{
288 struct PptpStartSessionRequest sreq
;
289 struct PptpStartSessionReply srep
;
290 struct PptpStopSessionRequest streq
;
291 struct PptpStopSessionReply strep
;
292 struct PptpOutCallRequest ocreq
;
293 struct PptpOutCallReply ocack
;
294 struct PptpInCallRequest icreq
;
295 struct PptpInCallReply icack
;
296 struct PptpInCallConnected iccon
;
297 struct PptpClearCallRequest clrreq
;
298 struct PptpCallDisconnectNotify disc
;
299 struct PptpWanErrorNotify wanerr
;
300 struct PptpSetLinkInfo setlink
;
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
);
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
);
318 (*nf_nat_pptp_hook_exp_gre
)(struct nf_conntrack_expect
*exp_orig
,
319 struct nf_conntrack_expect
*exp_reply
);
322 (*nf_nat_pptp_hook_expectfn
)(struct nf_conn
*ct
,
323 struct nf_conntrack_expect
*exp
);
325 #endif /* _NF_CONNTRACK_PPTP_H */