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
linux
sctp.h
Go to the documentation of this file.
1
/* SCTP kernel reference 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
* Copyright (c) 2001 Nokia, Inc.
7
* Copyright (c) 2001 La Monte H.P. Yarroll
8
*
9
* This file is part of the SCTP kernel reference Implementation
10
*
11
* Various protocol defined structures.
12
*
13
* This SCTP implementation is free software;
14
* you can redistribute it and/or modify it under the terms of
15
* the GNU General Public License as published by
16
* the Free Software Foundation; either version 2, or (at your option)
17
* any later version.
18
*
19
* This SCTP implementation is distributed in the hope that it
20
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
21
* ************************
22
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23
* See the GNU General Public License for more details.
24
*
25
* You should have received a copy of the GNU General Public License
26
* along with GNU CC; see the file COPYING. If not, write to
27
* the Free Software Foundation, 59 Temple Place - Suite 330,
28
* Boston, MA 02111-1307, USA.
29
*
30
* Please send any bug reports or fixes you make to the
31
* email address(es):
32
* lksctp developers <
[email protected]
>
33
*
34
* Or submit a bug report through the following website:
35
* http://www.sf.net/projects/lksctp
36
*
37
* Written or modified by:
38
* La Monte H.P. Yarroll <
[email protected]
>
39
* Karl Knutson <
[email protected]
>
40
* Jon Grimm <
[email protected]
>
41
* Xingang Guo <
[email protected]
>
42
*
[email protected]
43
*
[email protected]
44
*
[email protected]
45
* Sridhar Samudrala <
[email protected]
>
46
* Kevin Gao <
[email protected]
>
47
*
48
* Any bugs reported given to us we will try to fix... any fixes shared will
49
* be incorporated into the next SCTP release.
50
*/
51
#ifndef __LINUX_SCTP_H__
52
#define __LINUX_SCTP_H__
53
54
#include <linux/in.h>
/* We need in_addr. */
55
#include <linux/in6.h>
/* We need in6_addr. */
56
57
58
/* Section 3.1. SCTP Common Header Format */
59
typedef
struct
sctphdr
{
60
__be16
source
;
61
__be16
dest
;
62
__be32
vtag
;
63
__le32
checksum
;
64
}
__packed
sctp_sctphdr_t
;
65
66
#ifdef __KERNEL__
67
#include <
linux/skbuff.h
>
68
69
static
inline
struct
sctphdr
*sctp_hdr(
const
struct
sk_buff
*
skb
)
70
{
71
return
(
struct
sctphdr
*)skb_transport_header(skb);
72
}
73
#endif
74
75
/* Section 3.2. Chunk Field Descriptions. */
76
typedef
struct
sctp_chunkhdr
{
77
__u8
type
;
78
__u8
flags
;
79
__be16
length
;
80
}
__packed
sctp_chunkhdr_t
;
81
82
83
/* Section 3.2. Chunk Type Values.
84
* [Chunk Type] identifies the type of information contained in the Chunk
85
* Value field. It takes a value from 0 to 254. The value of 255 is
86
* reserved for future use as an extension field.
87
*/
88
typedef
enum
{
89
SCTP_CID_DATA
= 0,
90
SCTP_CID_INIT
= 1,
91
SCTP_CID_INIT_ACK
= 2,
92
SCTP_CID_SACK
= 3,
93
SCTP_CID_HEARTBEAT
= 4,
94
SCTP_CID_HEARTBEAT_ACK
= 5,
95
SCTP_CID_ABORT
= 6,
96
SCTP_CID_SHUTDOWN
= 7,
97
SCTP_CID_SHUTDOWN_ACK
= 8,
98
SCTP_CID_ERROR
= 9,
99
SCTP_CID_COOKIE_ECHO
= 10,
100
SCTP_CID_COOKIE_ACK
= 11,
101
SCTP_CID_ECN_ECNE
= 12,
102
SCTP_CID_ECN_CWR
= 13,
103
SCTP_CID_SHUTDOWN_COMPLETE
= 14,
104
105
/* AUTH Extension Section 4.1 */
106
SCTP_CID_AUTH
= 0x0F,
107
108
/* PR-SCTP Sec 3.2 */
109
SCTP_CID_FWD_TSN
= 0xC0,
110
111
/* Use hex, as defined in ADDIP sec. 3.1 */
112
SCTP_CID_ASCONF
= 0xC1,
113
SCTP_CID_ASCONF_ACK
= 0x80,
114
}
sctp_cid_t
;
/* enum */
115
116
117
/* Section 3.2
118
* Chunk Types are encoded such that the highest-order two bits specify
119
* the action that must be taken if the processing endpoint does not
120
* recognize the Chunk Type.
121
*/
122
typedef
enum
{
123
SCTP_CID_ACTION_DISCARD
= 0x00,
124
SCTP_CID_ACTION_DISCARD_ERR
= 0x40,
125
SCTP_CID_ACTION_SKIP
= 0x80,
126
SCTP_CID_ACTION_SKIP_ERR
= 0xc0,
127
}
sctp_cid_action_t
;
128
129
enum
{
SCTP_CID_ACTION_MASK
= 0xc0, };
130
131
/* This flag is used in Chunk Flags for ABORT and SHUTDOWN COMPLETE.
132
*
133
* 3.3.7 Abort Association (ABORT) (6):
134
* The T bit is set to 0 if the sender had a TCB that it destroyed.
135
* If the sender did not have a TCB it should set this bit to 1.
136
*/
137
enum
{
SCTP_CHUNK_FLAG_T
= 0x01 };
138
139
/*
140
* Set the T bit
141
*
142
* 0 1 2 3
143
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
144
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
145
* | Type = 14 |Reserved |T| Length = 4 |
146
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
147
*
148
* Chunk Flags: 8 bits
149
*
150
* Reserved: 7 bits
151
* Set to 0 on transmit and ignored on receipt.
152
*
153
* T bit: 1 bit
154
* The T bit is set to 0 if the sender had a TCB that it destroyed. If
155
* the sender did NOT have a TCB it should set this bit to 1.
156
*
157
* Note: Special rules apply to this chunk for verification, please
158
* see Section 8.5.1 for details.
159
*/
160
161
#define sctp_test_T_bit(c) ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T)
162
163
/* RFC 2960
164
* Section 3.2.1 Optional/Variable-length Parmaeter Format.
165
*/
166
167
typedef
struct
sctp_paramhdr
{
168
__be16
type
;
169
__be16
length
;
170
}
__packed
sctp_paramhdr_t
;
171
172
typedef
enum
{
173
174
/* RFC 2960 Section 3.3.5 */
175
SCTP_PARAM_HEARTBEAT_INFO
=
cpu_to_be16
(1),
176
/* RFC 2960 Section 3.3.2.1 */
177
SCTP_PARAM_IPV4_ADDRESS
=
cpu_to_be16
(5),
178
SCTP_PARAM_IPV6_ADDRESS
=
cpu_to_be16
(6),
179
SCTP_PARAM_STATE_COOKIE
=
cpu_to_be16
(7),
180
SCTP_PARAM_UNRECOGNIZED_PARAMETERS
=
cpu_to_be16
(8),
181
SCTP_PARAM_COOKIE_PRESERVATIVE
=
cpu_to_be16
(9),
182
SCTP_PARAM_HOST_NAME_ADDRESS
=
cpu_to_be16
(11),
183
SCTP_PARAM_SUPPORTED_ADDRESS_TYPES
=
cpu_to_be16
(12),
184
SCTP_PARAM_ECN_CAPABLE
=
cpu_to_be16
(0x8000),
185
186
/* AUTH Extension Section 3 */
187
SCTP_PARAM_RANDOM
=
cpu_to_be16
(0x8002),
188
SCTP_PARAM_CHUNKS
=
cpu_to_be16
(0x8003),
189
SCTP_PARAM_HMAC_ALGO
=
cpu_to_be16
(0x8004),
190
191
/* Add-IP: Supported Extensions, Section 4.2 */
192
SCTP_PARAM_SUPPORTED_EXT
=
cpu_to_be16
(0x8008),
193
194
/* PR-SCTP Sec 3.1 */
195
SCTP_PARAM_FWD_TSN_SUPPORT
=
cpu_to_be16
(0xc000),
196
197
/* Add-IP Extension. Section 3.2 */
198
SCTP_PARAM_ADD_IP
=
cpu_to_be16
(0xc001),
199
SCTP_PARAM_DEL_IP
=
cpu_to_be16
(0xc002),
200
SCTP_PARAM_ERR_CAUSE
=
cpu_to_be16
(0xc003),
201
SCTP_PARAM_SET_PRIMARY
=
cpu_to_be16
(0xc004),
202
SCTP_PARAM_SUCCESS_REPORT
=
cpu_to_be16
(0xc005),
203
SCTP_PARAM_ADAPTATION_LAYER_IND
=
cpu_to_be16
(0xc006),
204
205
}
sctp_param_t
;
/* enum */
206
207
208
/* RFC 2960 Section 3.2.1
209
* The Parameter Types are encoded such that the highest-order two bits
210
* specify the action that must be taken if the processing endpoint does
211
* not recognize the Parameter Type.
212
*
213
*/
214
typedef
enum
{
215
SCTP_PARAM_ACTION_DISCARD
=
cpu_to_be16
(0x0000),
216
SCTP_PARAM_ACTION_DISCARD_ERR
=
cpu_to_be16
(0x4000),
217
SCTP_PARAM_ACTION_SKIP
=
cpu_to_be16
(0x8000),
218
SCTP_PARAM_ACTION_SKIP_ERR
=
cpu_to_be16
(0xc000),
219
}
sctp_param_action_t
;
220
221
enum
{
SCTP_PARAM_ACTION_MASK
=
cpu_to_be16
(0xc000), };
222
223
/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
224
225
typedef
struct
sctp_datahdr
{
226
__be32
tsn
;
227
__be16
stream
;
228
__be16
ssn
;
229
__be32
ppid
;
230
__u8
payload
[0];
231
}
__packed
sctp_datahdr_t
;
232
233
typedef
struct
sctp_data_chunk
{
234
sctp_chunkhdr_t
chunk_hdr
;
235
sctp_datahdr_t
data_hdr
;
236
}
__packed
sctp_data_chunk_t
;
237
238
/* DATA Chuck Specific Flags */
239
enum
{
240
SCTP_DATA_MIDDLE_FRAG
= 0x00,
241
SCTP_DATA_LAST_FRAG
= 0x01,
242
SCTP_DATA_FIRST_FRAG
= 0x02,
243
SCTP_DATA_NOT_FRAG
= 0x03,
244
SCTP_DATA_UNORDERED
= 0x04,
245
SCTP_DATA_SACK_IMM
= 0x08,
246
};
247
enum
{
SCTP_DATA_FRAG_MASK
= 0x03, };
248
249
250
/* RFC 2960 Section 3.3.2 Initiation (INIT) (1)
251
*
252
* This chunk is used to initiate a SCTP association between two
253
* endpoints.
254
*/
255
typedef
struct
sctp_inithdr
{
256
__be32
init_tag
;
257
__be32
a_rwnd
;
258
__be16
num_outbound_streams
;
259
__be16
num_inbound_streams
;
260
__be32
initial_tsn
;
261
__u8
params
[0];
262
}
__packed
sctp_inithdr_t
;
263
264
typedef
struct
sctp_init_chunk
{
265
sctp_chunkhdr_t
chunk_hdr
;
266
sctp_inithdr_t
init_hdr
;
267
}
__packed
sctp_init_chunk_t
;
268
269
270
/* Section 3.3.2.1. IPv4 Address Parameter (5) */
271
typedef
struct
sctp_ipv4addr_param
{
272
sctp_paramhdr_t
param_hdr
;
273
struct
in_addr
addr
;
274
}
__packed
sctp_ipv4addr_param_t
;
275
276
/* Section 3.3.2.1. IPv6 Address Parameter (6) */
277
typedef
struct
sctp_ipv6addr_param
{
278
sctp_paramhdr_t
param_hdr
;
279
struct
in6_addr
addr
;
280
}
__packed
sctp_ipv6addr_param_t
;
281
282
/* Section 3.3.2.1 Cookie Preservative (9) */
283
typedef
struct
sctp_cookie_preserve_param
{
284
sctp_paramhdr_t
param_hdr
;
285
__be32
lifespan_increment
;
286
}
__packed
sctp_cookie_preserve_param_t
;
287
288
/* Section 3.3.2.1 Host Name Address (11) */
289
typedef
struct
sctp_hostname_param
{
290
sctp_paramhdr_t
param_hdr
;
291
uint8_t
hostname
[0];
292
}
__packed
sctp_hostname_param_t
;
293
294
/* Section 3.3.2.1 Supported Address Types (12) */
295
typedef
struct
sctp_supported_addrs_param
{
296
sctp_paramhdr_t
param_hdr
;
297
__be16
types
[0];
298
}
__packed
sctp_supported_addrs_param_t
;
299
300
/* Appendix A. ECN Capable (32768) */
301
typedef
struct
sctp_ecn_capable_param
{
302
sctp_paramhdr_t
param_hdr
;
303
}
__packed
sctp_ecn_capable_param_t
;
304
305
/* ADDIP Section 3.2.6 Adaptation Layer Indication */
306
typedef
struct
sctp_adaptation_ind_param
{
307
struct
sctp_paramhdr
param_hdr
;
308
__be32
adaptation_ind
;
309
}
__packed
sctp_adaptation_ind_param_t
;
310
311
/* ADDIP Section 4.2.7 Supported Extensions Parameter */
312
typedef
struct
sctp_supported_ext_param
{
313
struct
sctp_paramhdr
param_hdr
;
314
__u8
chunks
[0];
315
}
__packed
sctp_supported_ext_param_t
;
316
317
/* AUTH Section 3.1 Random */
318
typedef
struct
sctp_random_param
{
319
sctp_paramhdr_t
param_hdr
;
320
__u8
random_val
[0];
321
}
__packed
sctp_random_param_t
;
322
323
/* AUTH Section 3.2 Chunk List */
324
typedef
struct
sctp_chunks_param
{
325
sctp_paramhdr_t
param_hdr
;
326
__u8
chunks
[0];
327
}
__packed
sctp_chunks_param_t
;
328
329
/* AUTH Section 3.3 HMAC Algorithm */
330
typedef
struct
sctp_hmac_algo_param
{
331
sctp_paramhdr_t
param_hdr
;
332
__be16
hmac_ids
[0];
333
}
__packed
sctp_hmac_algo_param_t
;
334
335
/* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
336
* The INIT ACK chunk is used to acknowledge the initiation of an SCTP
337
* association.
338
*/
339
typedef
sctp_init_chunk_t
sctp_initack_chunk_t
;
340
341
/* Section 3.3.3.1 State Cookie (7) */
342
typedef
struct
sctp_cookie_param
{
343
sctp_paramhdr_t
p
;
344
__u8
body
[0];
345
}
__packed
sctp_cookie_param_t
;
346
347
/* Section 3.3.3.1 Unrecognized Parameters (8) */
348
typedef
struct
sctp_unrecognized_param
{
349
sctp_paramhdr_t
param_hdr
;
350
sctp_paramhdr_t
unrecognized
;
351
}
__packed
sctp_unrecognized_param_t
;
352
353
354
355
/*
356
* 3.3.4 Selective Acknowledgement (SACK) (3):
357
*
358
* This chunk is sent to the peer endpoint to acknowledge received DATA
359
* chunks and to inform the peer endpoint of gaps in the received
360
* subsequences of DATA chunks as represented by their TSNs.
361
*/
362
363
typedef
struct
sctp_gap_ack_block
{
364
__be16
start
;
365
__be16
end
;
366
}
__packed
sctp_gap_ack_block_t
;
367
368
typedef
__be32
sctp_dup_tsn_t
;
369
370
typedef
union
{
371
sctp_gap_ack_block_t
gab
;
372
sctp_dup_tsn_t
dup
;
373
}
sctp_sack_variable_t
;
374
375
typedef
struct
sctp_sackhdr
{
376
__be32
cum_tsn_ack
;
377
__be32
a_rwnd
;
378
__be16
num_gap_ack_blocks
;
379
__be16
num_dup_tsns
;
380
sctp_sack_variable_t
variable
[0];
381
}
__packed
sctp_sackhdr_t
;
382
383
typedef
struct
sctp_sack_chunk
{
384
sctp_chunkhdr_t
chunk_hdr
;
385
sctp_sackhdr_t
sack_hdr
;
386
}
__packed
sctp_sack_chunk_t
;
387
388
389
/* RFC 2960. Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
390
*
391
* An endpoint should send this chunk to its peer endpoint to probe the
392
* reachability of a particular destination transport address defined in
393
* the present association.
394
*/
395
396
typedef
struct
sctp_heartbeathdr
{
397
sctp_paramhdr_t
info
;
398
}
__packed
sctp_heartbeathdr_t
;
399
400
typedef
struct
sctp_heartbeat_chunk
{
401
sctp_chunkhdr_t
chunk_hdr
;
402
sctp_heartbeathdr_t
hb_hdr
;
403
}
__packed
sctp_heartbeat_chunk_t
;
404
405
406
/* For the abort and shutdown ACK we must carry the init tag in the
407
* common header. Just the common header is all that is needed with a
408
* chunk descriptor.
409
*/
410
typedef
struct
sctp_abort_chunk
{
411
sctp_chunkhdr_t
uh
;
412
}
__packed
sctp_abort_chunk_t
;
413
414
415
/* For the graceful shutdown we must carry the tag (in common header)
416
* and the highest consecutive acking value.
417
*/
418
typedef
struct
sctp_shutdownhdr
{
419
__be32
cum_tsn_ack
;
420
}
__packed
sctp_shutdownhdr_t
;
421
422
struct
sctp_shutdown_chunk_t
{
423
sctp_chunkhdr_t
chunk_hdr
;
424
sctp_shutdownhdr_t
shutdown_hdr
;
425
}
__packed
;
426
427
/* RFC 2960. Section 3.3.10 Operation Error (ERROR) (9) */
428
429
typedef
struct
sctp_errhdr
{
430
__be16
cause
;
431
__be16
length
;
432
__u8
variable
[0];
433
}
__packed
sctp_errhdr_t
;
434
435
typedef
struct
sctp_operr_chunk
{
436
sctp_chunkhdr_t
chunk_hdr
;
437
sctp_errhdr_t
err_hdr
;
438
}
__packed
sctp_operr_chunk_t
;
439
440
/* RFC 2960 3.3.10 - Operation Error
441
*
442
* Cause Code: 16 bits (unsigned integer)
443
*
444
* Defines the type of error conditions being reported.
445
* Cause Code
446
* Value Cause Code
447
* --------- ----------------
448
* 1 Invalid Stream Identifier
449
* 2 Missing Mandatory Parameter
450
* 3 Stale Cookie Error
451
* 4 Out of Resource
452
* 5 Unresolvable Address
453
* 6 Unrecognized Chunk Type
454
* 7 Invalid Mandatory Parameter
455
* 8 Unrecognized Parameters
456
* 9 No User Data
457
* 10 Cookie Received While Shutting Down
458
*/
459
typedef
enum
{
460
461
SCTP_ERROR_NO_ERROR
=
cpu_to_be16
(0x00),
462
SCTP_ERROR_INV_STRM
=
cpu_to_be16
(0x01),
463
SCTP_ERROR_MISS_PARAM
=
cpu_to_be16
(0x02),
464
SCTP_ERROR_STALE_COOKIE
=
cpu_to_be16
(0x03),
465
SCTP_ERROR_NO_RESOURCE
=
cpu_to_be16
(0x04),
466
SCTP_ERROR_DNS_FAILED
=
cpu_to_be16
(0x05),
467
SCTP_ERROR_UNKNOWN_CHUNK
=
cpu_to_be16
(0x06),
468
SCTP_ERROR_INV_PARAM
=
cpu_to_be16
(0x07),
469
SCTP_ERROR_UNKNOWN_PARAM
=
cpu_to_be16
(0x08),
470
SCTP_ERROR_NO_DATA
=
cpu_to_be16
(0x09),
471
SCTP_ERROR_COOKIE_IN_SHUTDOWN
=
cpu_to_be16
(0x0a),
472
473
474
/* SCTP Implementation Guide:
475
* 11 Restart of an association with new addresses
476
* 12 User Initiated Abort
477
* 13 Protocol Violation
478
*/
479
480
SCTP_ERROR_RESTART
=
cpu_to_be16
(0x0b),
481
SCTP_ERROR_USER_ABORT
=
cpu_to_be16
(0x0c),
482
SCTP_ERROR_PROTO_VIOLATION
=
cpu_to_be16
(0x0d),
483
484
/* ADDIP Section 3.3 New Error Causes
485
*
486
* Four new Error Causes are added to the SCTP Operational Errors,
487
* primarily for use in the ASCONF-ACK chunk.
488
*
489
* Value Cause Code
490
* --------- ----------------
491
* 0x00A0 Request to Delete Last Remaining IP Address.
492
* 0x00A1 Operation Refused Due to Resource Shortage.
493
* 0x00A2 Request to Delete Source IP Address.
494
* 0x00A3 Association Aborted due to illegal ASCONF-ACK
495
* 0x00A4 Request refused - no authorization.
496
*/
497
SCTP_ERROR_DEL_LAST_IP
=
cpu_to_be16
(0x00A0),
498
SCTP_ERROR_RSRC_LOW
=
cpu_to_be16
(0x00A1),
499
SCTP_ERROR_DEL_SRC_IP
=
cpu_to_be16
(0x00A2),
500
SCTP_ERROR_ASCONF_ACK
=
cpu_to_be16
(0x00A3),
501
SCTP_ERROR_REQ_REFUSED
=
cpu_to_be16
(0x00A4),
502
503
/* AUTH Section 4. New Error Cause
504
*
505
* This section defines a new error cause that will be sent if an AUTH
506
* chunk is received with an unsupported HMAC identifier.
507
* illustrates the new error cause.
508
*
509
* Cause Code Error Cause Name
510
* --------------------------------------------------------------
511
* 0x0105 Unsupported HMAC Identifier
512
*/
513
SCTP_ERROR_UNSUP_HMAC
=
cpu_to_be16
(0x0105)
514
}
sctp_error_t
;
515
516
517
518
/* RFC 2960. Appendix A. Explicit Congestion Notification.
519
* Explicit Congestion Notification Echo (ECNE) (12)
520
*/
521
typedef
struct
sctp_ecnehdr
{
522
__be32
lowest_tsn
;
523
}
sctp_ecnehdr_t
;
524
525
typedef
struct
sctp_ecne_chunk
{
526
sctp_chunkhdr_t
chunk_hdr
;
527
sctp_ecnehdr_t
ence_hdr
;
528
}
__packed
sctp_ecne_chunk_t
;
529
530
/* RFC 2960. Appendix A. Explicit Congestion Notification.
531
* Congestion Window Reduced (CWR) (13)
532
*/
533
typedef
struct
sctp_cwrhdr
{
534
__be32
lowest_tsn
;
535
}
sctp_cwrhdr_t
;
536
537
typedef
struct
sctp_cwr_chunk
{
538
sctp_chunkhdr_t
chunk_hdr
;
539
sctp_cwrhdr_t
cwr_hdr
;
540
}
__packed
sctp_cwr_chunk_t
;
541
542
/* PR-SCTP
543
* 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
544
*
545
* Forward Cumulative TSN chunk has the following format:
546
*
547
* 0 1 2 3
548
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
549
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
550
* | Type = 192 | Flags = 0x00 | Length = Variable |
551
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
552
* | New Cumulative TSN |
553
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
554
* | Stream-1 | Stream Sequence-1 |
555
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
556
* \ /
557
* / \
558
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
559
* | Stream-N | Stream Sequence-N |
560
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
561
*
562
* Chunk Flags:
563
*
564
* Set to all zeros on transmit and ignored on receipt.
565
*
566
* New Cumulative TSN: 32 bit u_int
567
*
568
* This indicates the new cumulative TSN to the data receiver. Upon
569
* the reception of this value, the data receiver MUST consider
570
* any missing TSNs earlier than or equal to this value as received
571
* and stop reporting them as gaps in any subsequent SACKs.
572
*
573
* Stream-N: 16 bit u_int
574
*
575
* This field holds a stream number that was skipped by this
576
* FWD-TSN.
577
*
578
* Stream Sequence-N: 16 bit u_int
579
* This field holds the sequence number associated with the stream
580
* that was skipped. The stream sequence field holds the largest stream
581
* sequence number in this stream being skipped. The receiver of
582
* the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
583
* to enable delivery of any stranded TSN's that remain on the stream
584
* re-ordering queues. This field MUST NOT report TSN's corresponding
585
* to DATA chunk that are marked as unordered. For ordered DATA
586
* chunks this field MUST be filled in.
587
*/
588
struct
sctp_fwdtsn_skip
{
589
__be16
stream
;
590
__be16
ssn
;
591
}
__packed
;
592
593
struct
sctp_fwdtsn_hdr
{
594
__be32
new_cum_tsn
;
595
struct
sctp_fwdtsn_skip
skip
[0];
596
}
__packed
;
597
598
struct
sctp_fwdtsn_chunk
{
599
struct
sctp_chunkhdr
chunk_hdr
;
600
struct
sctp_fwdtsn_hdr
fwdtsn_hdr
;
601
}
__packed
;
602
603
604
/* ADDIP
605
* Section 3.1.1 Address Configuration Change Chunk (ASCONF)
606
*
607
* Serial Number: 32 bits (unsigned integer)
608
* This value represents a Serial Number for the ASCONF Chunk. The
609
* valid range of Serial Number is from 0 to 2^32-1.
610
* Serial Numbers wrap back to 0 after reaching 2^32 -1.
611
*
612
* Address Parameter: 8 or 20 bytes (depending on type)
613
* The address is an address of the sender of the ASCONF chunk,
614
* the address MUST be considered part of the association by the
615
* peer endpoint. This field may be used by the receiver of the
616
* ASCONF to help in finding the association. This parameter MUST
617
* be present in every ASCONF message i.e. it is a mandatory TLV
618
* parameter.
619
*
620
* ASCONF Parameter: TLV format
621
* Each Address configuration change is represented by a TLV
622
* parameter as defined in Section 3.2. One or more requests may
623
* be present in an ASCONF Chunk.
624
*
625
* Section 3.1.2 Address Configuration Acknowledgement Chunk (ASCONF-ACK)
626
*
627
* Serial Number: 32 bits (unsigned integer)
628
* This value represents the Serial Number for the received ASCONF
629
* Chunk that is acknowledged by this chunk. This value is copied
630
* from the received ASCONF Chunk.
631
*
632
* ASCONF Parameter Response: TLV format
633
* The ASCONF Parameter Response is used in the ASCONF-ACK to
634
* report status of ASCONF processing.
635
*/
636
typedef
struct
sctp_addip_param
{
637
sctp_paramhdr_t
param_hdr
;
638
__be32
crr_id
;
639
}
__packed
sctp_addip_param_t
;
640
641
typedef
struct
sctp_addiphdr
{
642
__be32
serial
;
643
__u8
params
[0];
644
}
__packed
sctp_addiphdr_t
;
645
646
typedef
struct
sctp_addip_chunk
{
647
sctp_chunkhdr_t
chunk_hdr
;
648
sctp_addiphdr_t
addip_hdr
;
649
}
__packed
sctp_addip_chunk_t
;
650
651
/* AUTH
652
* Section 4.1 Authentication Chunk (AUTH)
653
*
654
* This chunk is used to hold the result of the HMAC calculation.
655
*
656
* 0 1 2 3
657
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
658
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
659
* | Type = 0x0F | Flags=0 | Length |
660
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
661
* | Shared Key Identifier | HMAC Identifier |
662
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
663
* | |
664
* \ HMAC /
665
* / \
666
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
667
*
668
* Type: 1 byte (unsigned integer)
669
* This value MUST be set to 0x0F for all AUTH-chunks.
670
*
671
* Flags: 1 byte (unsigned integer)
672
* Set to zero on transmit and ignored on receipt.
673
*
674
* Length: 2 bytes (unsigned integer)
675
* This value holds the length of the HMAC in bytes plus 8.
676
*
677
* Shared Key Identifier: 2 bytes (unsigned integer)
678
* This value describes which endpoint pair shared key is used.
679
*
680
* HMAC Identifier: 2 bytes (unsigned integer)
681
* This value describes which message digest is being used. Table 2
682
* shows the currently defined values.
683
*
684
* The following Table 2 shows the currently defined values for HMAC
685
* identifiers.
686
*
687
* +-----------------+--------------------------+
688
* | HMAC Identifier | Message Digest Algorithm |
689
* +-----------------+--------------------------+
690
* | 0 | Reserved |
691
* | 1 | SHA-1 defined in [8] |
692
* | 2 | Reserved |
693
* | 3 | SHA-256 defined in [8] |
694
* +-----------------+--------------------------+
695
*
696
*
697
* HMAC: n bytes (unsigned integer) This hold the result of the HMAC
698
* calculation.
699
*/
700
typedef
struct
sctp_authhdr
{
701
__be16
shkey_id
;
702
__be16
hmac_id
;
703
__u8
hmac
[0];
704
}
__packed
sctp_authhdr_t
;
705
706
typedef
struct
sctp_auth_chunk
{
707
sctp_chunkhdr_t
chunk_hdr
;
708
sctp_authhdr_t
auth_hdr
;
709
}
__packed
sctp_auth_chunk_t
;
710
711
#endif
/* __LINUX_SCTP_H__ */
Generated on Thu Jan 10 2013 14:52:30 for Linux Kernel by
1.8.2