1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef __sctp_constants_h__
26#define __sctp_constants_h__
27
28#include <linux/sctp.h>
29#include <linux/ipv6.h>
30#include <net/tcp_states.h>
31
32
33enum { SCTP_MAX_STREAM = 0xffff };
34enum { SCTP_DEFAULT_OUTSTREAMS = 10 };
35enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM };
36
37
38
39
40#define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE
41
42#define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1)
43
44#define SCTP_NUM_ADDIP_CHUNK_TYPES 2
45
46#define SCTP_NUM_PRSCTP_CHUNK_TYPES 1
47
48#define SCTP_NUM_RECONF_CHUNK_TYPES 1
49
50#define SCTP_NUM_AUTH_CHUNK_TYPES 1
51
52#define SCTP_NUM_CHUNK_TYPES (SCTP_NUM_BASE_CHUNK_TYPES + \
53 SCTP_NUM_ADDIP_CHUNK_TYPES +\
54 SCTP_NUM_PRSCTP_CHUNK_TYPES +\
55 SCTP_NUM_RECONF_CHUNK_TYPES +\
56 SCTP_NUM_AUTH_CHUNK_TYPES)
57
58
59enum sctp_event_type {
60 SCTP_EVENT_T_CHUNK = 1,
61 SCTP_EVENT_T_TIMEOUT,
62 SCTP_EVENT_T_OTHER,
63 SCTP_EVENT_T_PRIMITIVE
64};
65
66
67
68
69
70enum sctp_event_timeout {
71 SCTP_EVENT_TIMEOUT_NONE = 0,
72 SCTP_EVENT_TIMEOUT_T1_COOKIE,
73 SCTP_EVENT_TIMEOUT_T1_INIT,
74 SCTP_EVENT_TIMEOUT_T2_SHUTDOWN,
75 SCTP_EVENT_TIMEOUT_T3_RTX,
76 SCTP_EVENT_TIMEOUT_T4_RTO,
77 SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD,
78 SCTP_EVENT_TIMEOUT_HEARTBEAT,
79 SCTP_EVENT_TIMEOUT_RECONF,
80 SCTP_EVENT_TIMEOUT_PROBE,
81 SCTP_EVENT_TIMEOUT_SACK,
82 SCTP_EVENT_TIMEOUT_AUTOCLOSE,
83};
84
85#define SCTP_EVENT_TIMEOUT_MAX SCTP_EVENT_TIMEOUT_AUTOCLOSE
86#define SCTP_NUM_TIMEOUT_TYPES (SCTP_EVENT_TIMEOUT_MAX + 1)
87
88enum sctp_event_other {
89 SCTP_EVENT_NO_PENDING_TSN = 0,
90 SCTP_EVENT_ICMP_PROTO_UNREACH,
91};
92
93#define SCTP_EVENT_OTHER_MAX SCTP_EVENT_ICMP_PROTO_UNREACH
94#define SCTP_NUM_OTHER_TYPES (SCTP_EVENT_OTHER_MAX + 1)
95
96
97enum sctp_event_primitive {
98 SCTP_PRIMITIVE_ASSOCIATE = 0,
99 SCTP_PRIMITIVE_SHUTDOWN,
100 SCTP_PRIMITIVE_ABORT,
101 SCTP_PRIMITIVE_SEND,
102 SCTP_PRIMITIVE_REQUESTHEARTBEAT,
103 SCTP_PRIMITIVE_ASCONF,
104 SCTP_PRIMITIVE_RECONF,
105};
106
107#define SCTP_EVENT_PRIMITIVE_MAX SCTP_PRIMITIVE_RECONF
108#define SCTP_NUM_PRIMITIVE_TYPES (SCTP_EVENT_PRIMITIVE_MAX + 1)
109
110
111
112
113
114
115
116union sctp_subtype {
117 enum sctp_cid chunk;
118 enum sctp_event_timeout timeout;
119 enum sctp_event_other other;
120 enum sctp_event_primitive primitive;
121};
122
123#define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \
124static inline union sctp_subtype \
125SCTP_ST_## _name (_type _arg) \
126{ union sctp_subtype _retval; _retval._elt = _arg; return _retval; }
127
128SCTP_SUBTYPE_CONSTRUCTOR(CHUNK, enum sctp_cid, chunk)
129SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT, enum sctp_event_timeout, timeout)
130SCTP_SUBTYPE_CONSTRUCTOR(OTHER, enum sctp_event_other, other)
131SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE, enum sctp_event_primitive, primitive)
132
133
134#define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA || \
135 a->chunk_hdr->type == SCTP_CID_I_DATA)
136
137
138enum sctp_ierror {
139 SCTP_IERROR_NO_ERROR = 0,
140 SCTP_IERROR_BASE = 1000,
141 SCTP_IERROR_NO_COOKIE,
142 SCTP_IERROR_BAD_SIG,
143 SCTP_IERROR_STALE_COOKIE,
144 SCTP_IERROR_NOMEM,
145 SCTP_IERROR_MALFORMED,
146 SCTP_IERROR_BAD_TAG,
147 SCTP_IERROR_BIG_GAP,
148 SCTP_IERROR_DUP_TSN,
149 SCTP_IERROR_HIGH_TSN,
150 SCTP_IERROR_IGNORE_TSN,
151 SCTP_IERROR_NO_DATA,
152 SCTP_IERROR_BAD_STREAM,
153 SCTP_IERROR_BAD_PORTS,
154 SCTP_IERROR_AUTH_BAD_HMAC,
155 SCTP_IERROR_AUTH_BAD_KEYID,
156 SCTP_IERROR_PROTO_VIOLATION,
157 SCTP_IERROR_ERROR,
158 SCTP_IERROR_ABORT,
159};
160
161
162
163
164enum sctp_state {
165
166 SCTP_STATE_CLOSED = 0,
167 SCTP_STATE_COOKIE_WAIT = 1,
168 SCTP_STATE_COOKIE_ECHOED = 2,
169 SCTP_STATE_ESTABLISHED = 3,
170 SCTP_STATE_SHUTDOWN_PENDING = 4,
171 SCTP_STATE_SHUTDOWN_SENT = 5,
172 SCTP_STATE_SHUTDOWN_RECEIVED = 6,
173 SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
174
175};
176
177#define SCTP_STATE_MAX SCTP_STATE_SHUTDOWN_ACK_SENT
178#define SCTP_STATE_NUM_STATES (SCTP_STATE_MAX + 1)
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196enum sctp_sock_state {
197 SCTP_SS_CLOSED = TCP_CLOSE,
198 SCTP_SS_LISTENING = TCP_LISTEN,
199 SCTP_SS_ESTABLISHING = TCP_SYN_SENT,
200 SCTP_SS_ESTABLISHED = TCP_ESTABLISHED,
201 SCTP_SS_CLOSING = TCP_CLOSE_WAIT,
202};
203
204enum sctp_plpmtud_state {
205 SCTP_PL_DISABLED,
206 SCTP_PL_BASE,
207 SCTP_PL_SEARCH,
208 SCTP_PL_COMPLETE,
209 SCTP_PL_ERROR,
210};
211
212#define SCTP_BASE_PLPMTU 1200
213#define SCTP_MAX_PLPMTU 9000
214#define SCTP_MIN_PLPMTU 512
215
216#define SCTP_MAX_PROBES 3
217
218#define SCTP_PL_BIG_STEP 32
219#define SCTP_PL_MIN_STEP 4
220
221
222const char *sctp_cname(const union sctp_subtype id);
223const char *sctp_oname(const union sctp_subtype id);
224const char *sctp_tname(const union sctp_subtype id);
225const char *sctp_pname(const union sctp_subtype id);
226
227
228extern const char *const sctp_state_tbl[];
229extern const char *const sctp_evttype_tbl[];
230extern const char *const sctp_status_tbl[];
231
232
233enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) };
234
235
236
237
238enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 };
239
240
241
242
243
244
245
246
247
248
249
250#define SCTP_TSN_MAP_INITIAL BITS_PER_LONG
251#define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL
252#define SCTP_TSN_MAP_SIZE 4096
253
254
255
256
257
258
259enum { SCTP_MAX_DUP_TSNS = 16 };
260enum { SCTP_MAX_GABS = 16 };
261
262
263#define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30*1000)
264
265
266#define SCTP_DEFAULT_TIMEOUT_SACK (200)
267
268
269
270
271
272
273
274#define SCTP_RTO_INITIAL (3 * 1000)
275#define SCTP_RTO_MIN (1 * 1000)
276#define SCTP_RTO_MAX (60 * 1000)
277
278#define SCTP_RTO_ALPHA 3
279#define SCTP_RTO_BETA 2
280
281
282#define SCTP_DEFAULT_MAX_BURST 4
283
284#define SCTP_CLOCK_GRANULARITY 1
285
286#define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000)
287
288#define SCTP_DEFAULT_MINWINDOW 1500
289#define SCTP_DEFAULT_MAXWINDOW 65535
290#define SCTP_DEFAULT_RWND_SHIFT 4
291
292
293
294#define SCTP_DEFAULT_MAXSEGMENT 1500
295
296
297#define SCTP_DEFAULT_MINSEGMENT 512
298
299#define SCTP_SECRET_SIZE 32
300
301#define SCTP_SIGNATURE_SIZE 20
302
303#define SCTP_COOKIE_MULTIPLE 32
304
305
306
307#define SCTP_DEFAULT_UDP_PORT 9899
308
309
310
311
312enum {
313 SCTP_PF_EXPOSE_UNSET,
314 SCTP_PF_EXPOSE_DISABLE,
315 SCTP_PF_EXPOSE_ENABLE,
316};
317#define SCTP_PF_EXPOSE_MAX SCTP_PF_EXPOSE_ENABLE
318
319#define SCTP_PS_RETRANS_MAX 0xffff
320
321
322
323
324enum sctp_xmit {
325 SCTP_XMIT_OK,
326 SCTP_XMIT_PMTU_FULL,
327 SCTP_XMIT_RWND_FULL,
328 SCTP_XMIT_DELAY,
329};
330
331
332enum sctp_transport_cmd {
333 SCTP_TRANSPORT_UP,
334 SCTP_TRANSPORT_DOWN,
335 SCTP_TRANSPORT_PF,
336};
337
338
339
340
341
342
343
344
345enum sctp_scope {
346 SCTP_SCOPE_GLOBAL,
347 SCTP_SCOPE_PRIVATE,
348 SCTP_SCOPE_LINK,
349 SCTP_SCOPE_LOOPBACK,
350 SCTP_SCOPE_UNUSABLE,
351};
352
353enum {
354 SCTP_SCOPE_POLICY_DISABLE,
355 SCTP_SCOPE_POLICY_ENABLE,
356 SCTP_SCOPE_POLICY_PRIVATE,
357 SCTP_SCOPE_POLICY_LINK,
358};
359
360#define SCTP_SCOPE_POLICY_MAX SCTP_SCOPE_POLICY_LINK
361
362
363
364
365
366
367#define IS_IPV4_UNUSABLE_ADDRESS(a) \
368 ((htonl(INADDR_BROADCAST) == a) || \
369 ipv4_is_multicast(a) || \
370 ipv4_is_zeronet(a) || \
371 ipv4_is_anycast_6to4(a))
372
373
374#define SCTP_ADDR4_ALLOWED 0x00000001
375
376#define SCTP_ADDR6_ALLOWED 0x00000002
377
378#define SCTP_ADDR4_PEERSUPP 0x00000004
379
380#define SCTP_ADDR6_PEERSUPP 0x00000008
381
382
383
384enum sctp_retransmit_reason {
385 SCTP_RTXR_T3_RTX,
386 SCTP_RTXR_FAST_RTX,
387 SCTP_RTXR_PMTUD,
388 SCTP_RTXR_T1_RTX,
389};
390
391
392enum sctp_lower_cwnd {
393 SCTP_LOWER_CWND_T3_RTX,
394 SCTP_LOWER_CWND_FAST_RTX,
395 SCTP_LOWER_CWND_ECNE,
396 SCTP_LOWER_CWND_INACTIVE,
397};
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416enum {
417 SCTP_AUTH_HMAC_ID_RESERVED_0,
418 SCTP_AUTH_HMAC_ID_SHA1,
419 SCTP_AUTH_HMAC_ID_RESERVED_2,
420#if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE)
421 SCTP_AUTH_HMAC_ID_SHA256,
422#endif
423 __SCTP_AUTH_HMAC_MAX
424};
425
426#define SCTP_AUTH_HMAC_ID_MAX __SCTP_AUTH_HMAC_MAX - 1
427#define SCTP_AUTH_NUM_HMACS __SCTP_AUTH_HMAC_MAX
428#define SCTP_SHA1_SIG_SIZE 20
429#define SCTP_SHA256_SIG_SIZE 32
430
431
432
433
434
435#define SCTP_NUM_NOAUTH_CHUNKS 4
436#define SCTP_AUTH_MAX_CHUNKS (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS)
437
438
439
440
441#define SCTP_AUTH_RANDOM_LENGTH 32
442
443#define SCTP_PROBE_TIMER_MIN 5000
444
445#endif
446