Merge tag 'kgdb-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt...
[linux-2.6-microblaze.git] / include / linux / netfilter / nf_conntrack_pptp.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* PPTP constants and structs */
3 #ifndef _NF_CONNTRACK_PPTP_H
4 #define _NF_CONNTRACK_PPTP_H
5
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>
12
13 const char *pptp_msg_name(u_int16_t msg);
14
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 */
22 };
23
24 /* state of the call inside the control session */
25 enum pptp_ctrlcall_state {
26         PPTP_CALL_NONE,
27         PPTP_CALL_ERROR,
28         PPTP_CALL_OUT_REQ,
29         PPTP_CALL_OUT_CONF,
30         PPTP_CALL_IN_REQ,
31         PPTP_CALL_IN_REP,
32         PPTP_CALL_IN_CONF,
33         PPTP_CALL_CLEAR_REQ,
34 };
35
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 */
42
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];
46 };
47
48 struct nf_nat_pptp {
49         __be16 pns_call_id;                     /* NAT'ed PNS call id */
50         __be16 pac_call_id;                     /* NAT'ed PAC call id */
51 };
52
53 #define PPTP_CONTROL_PORT       1723
54
55 #define PPTP_PACKET_CONTROL     1
56 #define PPTP_PACKET_MGMT        2
57
58 #define PPTP_MAGIC_COOKIE       0x1a2b3c4d
59
60 struct pptp_pkt_hdr {
61         __u16   packetLength;
62         __be16  packetType;
63         __be32  magicCookie;
64 };
65
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
82
83 #define PPTP_MSG_MAX                    15
84
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
93
94 struct PptpControlHeader {
95         __be16  messageType;
96         __u16   reserved;
97 };
98
99 /* FramingCapability Bitmap Values */
100 #define PPTP_FRAME_CAP_ASYNC            0x1
101 #define PPTP_FRAME_CAP_SYNC             0x2
102
103 /* BearerCapability Bitmap Values */
104 #define PPTP_BEARER_CAP_ANALOG          0x1
105 #define PPTP_BEARER_CAP_DIGITAL         0x2
106
107 struct PptpStartSessionRequest {
108         __be16  protocolVersion;
109         __u16   reserved1;
110         __be32  framingCapability;
111         __be32  bearerCapability;
112         __be16  maxChannels;
113         __be16  firmwareRevision;
114         __u8    hostName[64];
115         __u8    vendorString[64];
116 };
117
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
124
125 struct PptpStartSessionReply {
126         __be16  protocolVersion;
127         __u8    resultCode;
128         __u8    generalErrorCode;
129         __be32  framingCapability;
130         __be32  bearerCapability;
131         __be16  maxChannels;
132         __be16  firmwareRevision;
133         __u8    hostName[64];
134         __u8    vendorString[64];
135 };
136
137 /* PptpStopReasons */
138 #define PPTP_STOP_NONE                  1
139 #define PPTP_STOP_PROTOCOL              2
140 #define PPTP_STOP_LOCAL_SHUTDOWN        3
141
142 struct PptpStopSessionRequest {
143         __u8    reason;
144         __u8    reserved1;
145         __u16   reserved2;
146 };
147
148 /* PptpStopSessionResultCode */
149 #define PPTP_STOP_OK                    1
150 #define PPTP_STOP_GENERAL_ERROR         2
151
152 struct PptpStopSessionReply {
153         __u8    resultCode;
154         __u8    generalErrorCode;
155         __u16   reserved1;
156 };
157
158 struct PptpEchoRequest {
159         __be32 identNumber;
160 };
161
162 /* PptpEchoReplyResultCode */
163 #define PPTP_ECHO_OK                    1
164 #define PPTP_ECHO_GENERAL_ERROR         2
165
166 struct PptpEchoReply {
167         __be32  identNumber;
168         __u8    resultCode;
169         __u8    generalErrorCode;
170         __u16   reserved;
171 };
172
173 /* PptpFramingType */
174 #define PPTP_ASYNC_FRAMING              1
175 #define PPTP_SYNC_FRAMING               2
176 #define PPTP_DONT_CARE_FRAMING          3
177
178 /* PptpCallBearerType */
179 #define PPTP_ANALOG_TYPE                1
180 #define PPTP_DIGITAL_TYPE               2
181 #define PPTP_DONT_CARE_BEARER_TYPE      3
182
183 struct PptpOutCallRequest {
184         __be16  callID;
185         __be16  callSerialNumber;
186         __be32  minBPS;
187         __be32  maxBPS;
188         __be32  bearerType;
189         __be32  framingType;
190         __be16  packetWindow;
191         __be16  packetProcDelay;
192         __be16  phoneNumberLength;
193         __u16   reserved1;
194         __u8    phoneNumber[64];
195         __u8    subAddress[64];
196 };
197
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
206
207 struct PptpOutCallReply {
208         __be16  callID;
209         __be16  peersCallID;
210         __u8    resultCode;
211         __u8    generalErrorCode;
212         __be16  causeCode;
213         __be32  connectSpeed;
214         __be16  packetWindow;
215         __be16  packetProcDelay;
216         __be32  physChannelID;
217 };
218
219 struct PptpInCallRequest {
220         __be16  callID;
221         __be16  callSerialNumber;
222         __be32  callBearerType;
223         __be32  physChannelID;
224         __be16  dialedNumberLength;
225         __be16  dialingNumberLength;
226         __u8    dialedNumber[64];
227         __u8    dialingNumber[64];
228         __u8    subAddress[64];
229 };
230
231 /* PptpInCallResultCode */
232 #define PPTP_INCALL_ACCEPT              1
233 #define PPTP_INCALL_GENERAL_ERROR       2
234 #define PPTP_INCALL_DONT_ACCEPT         3
235
236 struct PptpInCallReply {
237         __be16  callID;
238         __be16  peersCallID;
239         __u8    resultCode;
240         __u8    generalErrorCode;
241         __be16  packetWindow;
242         __be16  packetProcDelay;
243         __u16   reserved;
244 };
245
246 struct PptpInCallConnected {
247         __be16  peersCallID;
248         __u16   reserved;
249         __be32  connectSpeed;
250         __be16  packetWindow;
251         __be16  packetProcDelay;
252         __be32  callFramingType;
253 };
254
255 struct PptpClearCallRequest {
256         __be16  callID;
257         __u16   reserved;
258 };
259
260 struct PptpCallDisconnectNotify {
261         __be16  callID;
262         __u8    resultCode;
263         __u8    generalErrorCode;
264         __be16  causeCode;
265         __u16   reserved;
266         __u8    callStatistics[128];
267 };
268
269 struct PptpWanErrorNotify {
270         __be16  peersCallID;
271         __u16   reserved;
272         __be32  crcErrors;
273         __be32  framingErrors;
274         __be32  hardwareOverRuns;
275         __be32  bufferOverRuns;
276         __be32  timeoutErrors;
277         __be32  alignmentErrors;
278 };
279
280 struct PptpSetLinkInfo {
281         __be16  peersCallID;
282         __u16   reserved;
283         __be32  sendAccm;
284         __be32  recvAccm;
285 };
286
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;
301 };
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 /* _NF_CONNTRACK_PPTP_H */