Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
sctp
constants.h
Go to the documentation of this file.
1
/* SCTP kernel implementation
2
* (C) Copyright IBM Corp. 2001, 2004
3
* Copyright (c) 1999-2000 Cisco, Inc.
4
* Copyright (c) 1999-2001 Motorola, Inc.
5
* Copyright (c) 2001 Intel Corp.
6
*
7
* This file is part of the SCTP kernel implementation
8
*
9
* This SCTP implementation is free software;
10
* you can redistribute it and/or modify it under the terms of
11
* the GNU General Public License as published by
12
* the Free Software Foundation; either version 2, or (at your option)
13
* any later version.
14
*
15
* This SCTP implementation is distributed in the hope that it
16
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
17
* ************************
18
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19
* See the GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with GNU CC; see the file COPYING. If not, write to
23
* the Free Software Foundation, 59 Temple Place - Suite 330,
24
* Boston, MA 02111-1307, USA.
25
*
26
* Please send any bug reports or fixes you make to the
27
* email address(es):
28
* lksctp developers <
[email protected]
>
29
*
30
* Or submit a bug report through the following website:
31
* http://www.sf.net/projects/lksctp
32
*
33
* Written or modified by:
34
* La Monte H.P. Yarroll <
[email protected]
>
35
* Karl Knutson <
[email protected]
>
36
* Randall Stewart <
[email protected]
>
37
* Ken Morneau <
[email protected]
>
38
* Qiaobing Xie <
[email protected]
>
39
* Xingang Guo <
[email protected]
>
40
* Sridhar Samudrala <
[email protected]
>
41
* Daisy Chang <
[email protected]
>
42
*
43
* Any bugs reported given to us we will try to fix... any fixes shared will
44
* be incorporated into the next SCTP release.
45
*/
46
47
#ifndef __sctp_constants_h__
48
#define __sctp_constants_h__
49
50
#include <
linux/sctp.h
>
51
#include <linux/ipv6.h>
/* For ipv6hdr. */
52
#include <
net/sctp/user.h
>
53
#include <
net/tcp_states.h
>
/* For TCP states used in sctp_sock_state_t */
54
55
/* Value used for stream negotiation. */
56
enum
{
SCTP_MAX_STREAM
= 0xffff };
57
enum
{
SCTP_DEFAULT_OUTSTREAMS
= 10 };
58
enum
{
SCTP_DEFAULT_INSTREAMS
=
SCTP_MAX_STREAM
};
59
60
/* Since CIDs are sparse, we need all four of the following
61
* symbols. CIDs are dense through SCTP_CID_BASE_MAX.
62
*/
63
#define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE
64
65
#define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1)
66
67
#define SCTP_NUM_ADDIP_CHUNK_TYPES 2
68
69
#define SCTP_NUM_PRSCTP_CHUNK_TYPES 1
70
71
#define SCTP_NUM_AUTH_CHUNK_TYPES 1
72
73
#define SCTP_NUM_CHUNK_TYPES (SCTP_NUM_BASE_CHUNK_TYPES + \
74
SCTP_NUM_ADDIP_CHUNK_TYPES +\
75
SCTP_NUM_PRSCTP_CHUNK_TYPES +\
76
SCTP_NUM_AUTH_CHUNK_TYPES)
77
78
/* These are the different flavours of event. */
79
typedef
enum
{
80
81
SCTP_EVENT_T_CHUNK
= 1,
82
SCTP_EVENT_T_TIMEOUT
,
83
SCTP_EVENT_T_OTHER
,
84
SCTP_EVENT_T_PRIMITIVE
85
86
}
sctp_event_t
;
87
88
/* As a convenience for the state machine, we append SCTP_EVENT_* and
89
* SCTP_ULP_* to the list of possible chunks.
90
*/
91
92
typedef
enum
{
93
SCTP_EVENT_TIMEOUT_NONE
= 0,
94
SCTP_EVENT_TIMEOUT_T1_COOKIE
,
95
SCTP_EVENT_TIMEOUT_T1_INIT
,
96
SCTP_EVENT_TIMEOUT_T2_SHUTDOWN
,
97
SCTP_EVENT_TIMEOUT_T3_RTX
,
98
SCTP_EVENT_TIMEOUT_T4_RTO
,
99
SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD
,
100
SCTP_EVENT_TIMEOUT_HEARTBEAT
,
101
SCTP_EVENT_TIMEOUT_SACK
,
102
SCTP_EVENT_TIMEOUT_AUTOCLOSE
,
103
}
sctp_event_timeout_t
;
104
105
#define SCTP_EVENT_TIMEOUT_MAX SCTP_EVENT_TIMEOUT_AUTOCLOSE
106
#define SCTP_NUM_TIMEOUT_TYPES (SCTP_EVENT_TIMEOUT_MAX + 1)
107
108
typedef
enum
{
109
SCTP_EVENT_NO_PENDING_TSN
= 0,
110
SCTP_EVENT_ICMP_PROTO_UNREACH
,
111
}
sctp_event_other_t
;
112
113
#define SCTP_EVENT_OTHER_MAX SCTP_EVENT_ICMP_PROTO_UNREACH
114
#define SCTP_NUM_OTHER_TYPES (SCTP_EVENT_OTHER_MAX + 1)
115
116
/* These are primitive requests from the ULP. */
117
typedef
enum
{
118
SCTP_PRIMITIVE_ASSOCIATE
= 0,
119
SCTP_PRIMITIVE_SHUTDOWN
,
120
SCTP_PRIMITIVE_ABORT
,
121
SCTP_PRIMITIVE_SEND
,
122
SCTP_PRIMITIVE_REQUESTHEARTBEAT
,
123
SCTP_PRIMITIVE_ASCONF
,
124
}
sctp_event_primitive_t
;
125
126
#define SCTP_EVENT_PRIMITIVE_MAX SCTP_PRIMITIVE_ASCONF
127
#define SCTP_NUM_PRIMITIVE_TYPES (SCTP_EVENT_PRIMITIVE_MAX + 1)
128
129
/* We define here a utility type for manipulating subtypes.
130
* The subtype constructors all work like this:
131
*
132
* sctp_subtype_t foo = SCTP_ST_CHUNK(SCTP_CID_INIT);
133
*/
134
135
typedef
union
{
136
sctp_cid_t
chunk
;
137
sctp_event_timeout_t
timeout
;
138
sctp_event_other_t
other
;
139
sctp_event_primitive_t
primitive
;
140
}
sctp_subtype_t
;
141
142
#define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \
143
static inline sctp_subtype_t \
144
SCTP_ST_## _name (_type _arg) \
145
{ sctp_subtype_t _retval; _retval._elt = _arg; return _retval; }
146
147
SCTP_SUBTYPE_CONSTRUCTOR
(CHUNK,
sctp_cid_t
,
chunk
)
148
SCTP_SUBTYPE_CONSTRUCTOR
(
TIMEOUT
,
sctp_event_timeout_t
, timeout)
149
SCTP_SUBTYPE_CONSTRUCTOR
(
OTHER
,
sctp_event_other_t
,
other
)
150
SCTP_SUBTYPE_CONSTRUCTOR
(PRIMITIVE,
sctp_event_primitive_t
, primitive)
151
152
153
#define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA)
154
155
/* Calculate the actual data size in a data chunk */
156
#define SCTP_DATA_SNDSIZE(c) ((int)((unsigned long)(c->chunk_end)\
157
- (unsigned long)(c->chunk_hdr)\
158
- sizeof(sctp_data_chunk_t)))
159
160
/* Internal error codes */
161
typedef
enum
{
162
163
SCTP_IERROR_NO_ERROR
= 0,
164
SCTP_IERROR_BASE
= 1000,
165
SCTP_IERROR_NO_COOKIE
,
166
SCTP_IERROR_BAD_SIG
,
167
SCTP_IERROR_STALE_COOKIE
,
168
SCTP_IERROR_NOMEM
,
169
SCTP_IERROR_MALFORMED
,
170
SCTP_IERROR_BAD_TAG
,
171
SCTP_IERROR_BIG_GAP
,
172
SCTP_IERROR_DUP_TSN
,
173
SCTP_IERROR_HIGH_TSN
,
174
SCTP_IERROR_IGNORE_TSN
,
175
SCTP_IERROR_NO_DATA
,
176
SCTP_IERROR_BAD_STREAM
,
177
SCTP_IERROR_BAD_PORTS
,
178
SCTP_IERROR_AUTH_BAD_HMAC
,
179
SCTP_IERROR_AUTH_BAD_KEYID
,
180
SCTP_IERROR_PROTO_VIOLATION
,
181
SCTP_IERROR_ERROR
,
182
SCTP_IERROR_ABORT
,
183
}
sctp_ierror_t
;
184
185
186
187
/* SCTP state defines for internal state machine */
188
typedef
enum
{
189
190
SCTP_STATE_CLOSED
= 0,
191
SCTP_STATE_COOKIE_WAIT
= 1,
192
SCTP_STATE_COOKIE_ECHOED
= 2,
193
SCTP_STATE_ESTABLISHED
= 3,
194
SCTP_STATE_SHUTDOWN_PENDING
= 4,
195
SCTP_STATE_SHUTDOWN_SENT
= 5,
196
SCTP_STATE_SHUTDOWN_RECEIVED
= 6,
197
SCTP_STATE_SHUTDOWN_ACK_SENT
= 7,
198
199
}
sctp_state_t
;
200
201
#define SCTP_STATE_MAX SCTP_STATE_SHUTDOWN_ACK_SENT
202
#define SCTP_STATE_NUM_STATES (SCTP_STATE_MAX + 1)
203
204
/* These are values for sk->state.
205
* For a UDP-style SCTP socket, the states are defined as follows
206
* - A socket in SCTP_SS_CLOSED state indicates that it is not willing to
207
* accept new associations, but it can initiate the creation of new ones.
208
* - A socket in SCTP_SS_LISTENING state indicates that it is willing to
209
* accept new associations and can initiate the creation of new ones.
210
* - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off
211
* socket with one association.
212
* For a TCP-style SCTP socket, the states are defined as follows
213
* - A socket in SCTP_SS_CLOSED state indicates that it is not willing to
214
* accept new associations, but it can initiate the creation of new ones.
215
* - A socket in SCTP_SS_LISTENING state indicates that it is willing to
216
* accept new associations, but cannot initiate the creation of new ones.
217
* - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single
218
* association.
219
*/
220
typedef
enum
{
221
SCTP_SS_CLOSED
=
TCP_CLOSE
,
222
SCTP_SS_LISTENING
=
TCP_LISTEN
,
223
SCTP_SS_ESTABLISHING
=
TCP_SYN_SENT
,
224
SCTP_SS_ESTABLISHED
=
TCP_ESTABLISHED
,
225
SCTP_SS_CLOSING
=
TCP_CLOSING
,
226
}
sctp_sock_state_t
;
227
228
/* These functions map various type to printable names. */
229
const
char
*
sctp_cname
(
const
sctp_subtype_t
);
/* chunk types */
230
const
char
*
sctp_oname
(
const
sctp_subtype_t
);
/* other events */
231
const
char
*
sctp_tname
(
const
sctp_subtype_t
);
/* timeouts */
232
const
char
*
sctp_pname
(
const
sctp_subtype_t
);
/* primitives */
233
234
/* This is a table of printable names of sctp_state_t's. */
235
extern
const
char
*
const
sctp_state_tbl
[];
236
extern
const
char
*
const
sctp_evttype_tbl
[];
237
extern
const
char
*
const
sctp_status_tbl
[];
238
239
/* Maximum chunk length considering padding requirements. */
240
enum
{
SCTP_MAX_CHUNK_LEN
= ((1<<16) -
sizeof
(
__u32
)) };
241
242
/* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little
243
* harder (until reaching ESTABLISHED state).
244
*/
245
enum
{
SCTP_ARBITRARY_COOKIE_ECHO_LEN
= 200 };
246
247
/* Guess at how big to make the TSN mapping array.
248
* We guarantee that we can handle at least this big a gap between the
249
* cumulative ACK and the highest TSN. In practice, we can often
250
* handle up to twice this value.
251
*
252
* NEVER make this more than 32767 (2^15-1). The Gap Ack Blocks in a
253
* SACK (see section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE
254
* must be less than 65535 (2^16 - 1), or we will have overflow
255
* problems creating SACK's.
256
*/
257
#define SCTP_TSN_MAP_INITIAL BITS_PER_LONG
258
#define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL
259
#define SCTP_TSN_MAP_SIZE 4096
260
261
/* We will not record more than this many duplicate TSNs between two
262
* SACKs. The minimum PMTU is 576. Remove all the headers and there
263
* is enough room for 131 duplicate reports. Round down to the
264
* nearest power of 2.
265
*/
266
enum
{
SCTP_MIN_PMTU
= 576 };
267
enum
{
SCTP_MAX_DUP_TSNS
= 16 };
268
enum
{
SCTP_MAX_GABS
= 16 };
269
270
/* Heartbeat interval - 30 secs */
271
#define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30*1000)
272
273
/* Delayed sack timer - 200ms */
274
#define SCTP_DEFAULT_TIMEOUT_SACK (200)
275
276
/* RTO.Initial - 3 seconds
277
* RTO.Min - 1 second
278
* RTO.Max - 60 seconds
279
* RTO.Alpha - 1/8
280
* RTO.Beta - 1/4
281
*/
282
#define SCTP_RTO_INITIAL (3 * 1000)
283
#define SCTP_RTO_MIN (1 * 1000)
284
#define SCTP_RTO_MAX (60 * 1000)
285
286
#define SCTP_RTO_ALPHA 3
/* 1/8 when converted to right shifts. */
287
#define SCTP_RTO_BETA 2
/* 1/4 when converted to right shifts. */
288
289
/* Maximum number of new data packets that can be sent in a burst. */
290
#define SCTP_DEFAULT_MAX_BURST 4
291
292
#define SCTP_CLOCK_GRANULARITY 1
/* 1 jiffy */
293
294
#define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000)
/* 60 seconds */
295
296
#define SCTP_DEFAULT_MINWINDOW 1500
/* default minimum rwnd size */
297
#define SCTP_DEFAULT_MAXWINDOW 65535
/* default rwnd size */
298
#define SCTP_DEFAULT_RWND_SHIFT 4
/* by default, update on 1/16 of
299
* rcvbuf, which is 1/8 of initial
300
* window
301
*/
302
#define SCTP_DEFAULT_MAXSEGMENT 1500
/* MTU size, this is the limit
303
* to which we will raise the P-MTU.
304
*/
305
#define SCTP_DEFAULT_MINSEGMENT 512
/* MTU size ... if no mtu disc */
306
#define SCTP_HOW_MANY_SECRETS 2
/* How many secrets I keep */
307
#define SCTP_SECRET_SIZE 32
/* Number of octets in a 256 bits. */
308
309
#define SCTP_SIGNATURE_SIZE 20
/* size of a SLA-1 signature */
310
311
#define SCTP_COOKIE_MULTIPLE 32
/* Pad out our cookie to make our hash
312
* functions simpler to write.
313
*/
314
315
#if defined (CONFIG_SCTP_HMAC_MD5)
316
#define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
317
#elif defined (CONFIG_SCTP_HMAC_SHA1)
318
#define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
319
#else
320
#define SCTP_COOKIE_HMAC_ALG NULL
321
#endif
322
323
/* These return values describe the success or failure of a number of
324
* routines which form the lower interface to SCTP_outqueue.
325
*/
326
typedef
enum
{
327
SCTP_XMIT_OK
,
328
SCTP_XMIT_PMTU_FULL
,
329
SCTP_XMIT_RWND_FULL
,
330
SCTP_XMIT_NAGLE_DELAY
,
331
}
sctp_xmit_t
;
332
333
/* These are the commands for manipulating transports. */
334
typedef
enum
{
335
SCTP_TRANSPORT_UP
,
336
SCTP_TRANSPORT_DOWN
,
337
SCTP_TRANSPORT_PF
,
338
}
sctp_transport_cmd_t
;
339
340
/* These are the address scopes defined mainly for IPv4 addresses
341
* based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>.
342
* These scopes are hopefully generic enough to be used on scoping both
343
* IPv4 and IPv6 addresses in SCTP.
344
* At this point, the IPv6 scopes will be mapped to these internal scopes
345
* as much as possible.
346
*/
347
typedef
enum
{
348
SCTP_SCOPE_GLOBAL
,
/* IPv4 global addresses */
349
SCTP_SCOPE_PRIVATE
,
/* IPv4 private addresses */
350
SCTP_SCOPE_LINK
,
/* IPv4 link local address */
351
SCTP_SCOPE_LOOPBACK
,
/* IPv4 loopback address */
352
SCTP_SCOPE_UNUSABLE
,
/* IPv4 unusable addresses */
353
}
sctp_scope_t
;
354
355
typedef
enum
{
356
SCTP_SCOPE_POLICY_DISABLE
,
/* Disable IPv4 address scoping */
357
SCTP_SCOPE_POLICY_ENABLE
,
/* Enable IPv4 address scoping */
358
SCTP_SCOPE_POLICY_PRIVATE
,
/* Follow draft but allow IPv4 private addresses */
359
SCTP_SCOPE_POLICY_LINK
,
/* Follow draft but allow IPv4 link local addresses */
360
}
sctp_scope_policy_t
;
361
362
/* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>,
363
* SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24,
364
* 192.88.99.0/24.
365
* Also, RFC 8.4, non-unicast addresses are not considered valid SCTP
366
* addresses.
367
*/
368
#define IS_IPV4_UNUSABLE_ADDRESS(a) \
369
((htonl(INADDR_BROADCAST) == a) || \
370
ipv4_is_multicast(a) || \
371
ipv4_is_zeronet(a) || \
372
ipv4_is_test_198(a) || \
373
ipv4_is_anycast_6to4(a))
374
375
/* Flags used for the bind address copy functions. */
376
#define SCTP_ADDR6_ALLOWED 0x00000001
/* IPv6 address is allowed by
377
local sock family */
378
#define SCTP_ADDR4_PEERSUPP 0x00000002
/* IPv4 address is supported by
379
peer */
380
#define SCTP_ADDR6_PEERSUPP 0x00000004
/* IPv6 address is supported by
381
peer */
382
383
/* Reasons to retransmit. */
384
typedef
enum
{
385
SCTP_RTXR_T3_RTX
,
386
SCTP_RTXR_FAST_RTX
,
387
SCTP_RTXR_PMTUD
,
388
SCTP_RTXR_T1_RTX
,
389
}
sctp_retransmit_reason_t
;
390
391
/* Reasons to lower cwnd. */
392
typedef
enum
{
393
SCTP_LOWER_CWND_T3_RTX
,
394
SCTP_LOWER_CWND_FAST_RTX
,
395
SCTP_LOWER_CWND_ECNE
,
396
SCTP_LOWER_CWND_INACTIVE
,
397
}
sctp_lower_cwnd_t
;
398
399
400
/* SCTP-AUTH Necessary constants */
401
402
/* SCTP-AUTH, Section 3.3
403
*
404
* The following Table 2 shows the currently defined values for HMAC
405
* identifiers.
406
*
407
* +-----------------+--------------------------+
408
* | HMAC Identifier | Message Digest Algorithm |
409
* +-----------------+--------------------------+
410
* | 0 | Reserved |
411
* | 1 | SHA-1 defined in [8] |
412
* | 2 | Reserved |
413
* | 3 | SHA-256 defined in [8] |
414
* +-----------------+--------------------------+
415
*/
416
enum
{
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
/* SCTP-AUTH, Section 3.2
432
* The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks
433
* MUST NOT be listed in the CHUNKS parameter
434
*/
435
#define SCTP_NUM_NOAUTH_CHUNKS 4
436
#define SCTP_AUTH_MAX_CHUNKS (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS)
437
438
/* SCTP-AUTH Section 6.1
439
* The RANDOM parameter MUST contain a 32 byte random number.
440
*/
441
#define SCTP_AUTH_RANDOM_LENGTH 32
442
443
#endif
/* __sctp_constants_h__ */
Generated on Thu Jan 10 2013 14:53:16 for Linux Kernel by
1.8.2