File Index
Files and directories
Sign in
FILE

sctp.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/sctp.h OBJECTIVE-C
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/* SCTP kernel reference Implementation
  3 * (C) Copyright IBM Corp. 2001, 2004
  4 * Copyright (c) 1999-2000 Cisco, Inc.
  5 * Copyright (c) 1999-2001 Motorola, Inc.
  6 * Copyright (c) 2001 Intel Corp.
  7 * Copyright (c) 2001 Nokia, Inc.
  8 * Copyright (c) 2001 La Monte H.P. Yarroll
  9 *
 10 * This file is part of the SCTP kernel reference Implementation
 11 *
 12 * Various protocol defined structures.
 13 *
 14 * Please send any bug reports or fixes you make to the
 15 * email address(es):
 16 *    lksctp developers <linux-sctp@vger.kernel.org>
 17 *
 18 * Or submit a bug report through the following website:
 19 *    http://www.sf.net/projects/lksctp
 20 *
 21 * Written or modified by:
 22 *    La Monte H.P. Yarroll <piggy@acm.org>
 23 *    Karl Knutson <karl@athena.chicago.il.us>
 24 *    Jon Grimm <jgrimm@us.ibm.com>
 25 *    Xingang Guo <xingang.guo@intel.com>
 26 *    randall@sctp.chicago.il.us
 27 *    kmorneau@cisco.com
 28 *    qxie1@email.mot.com
 29 *    Sridhar Samudrala <sri@us.ibm.com>
 30 *    Kevin Gao <kevin.gao@intel.com>
 31 *
 32 * Any bugs reported given to us we will try to fix... any fixes shared will
 33 * be incorporated into the next SCTP release.
 34 */
 35#ifndef __LINUX_SCTP_H__
 36#define __LINUX_SCTP_H__
 37
 38#include <linux/in.h>		/* We need in_addr.  */
 39#include <linux/in6.h>		/* We need in6_addr.  */
 40#include <linux/skbuff.h>
 41
 42#include <uapi/linux/sctp.h>
 43
 44/* Section 3.1.  SCTP Common Header Format */
 45struct sctphdr {
 46	__be16 source;
 47	__be16 dest;
 48	__be32 vtag;
 49	__le32 checksum;
 50};
 51
 52static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
 53{
 54	return (struct sctphdr *)skb_transport_header(skb);
 55}
 56
 57/* Section 3.2.  Chunk Field Descriptions. */
 58struct sctp_chunkhdr {
 59	__u8 type;
 60	__u8 flags;
 61	__be16 length;
 62};
 63
 64
 65/* Section 3.2.  Chunk Type Values.
 66 * [Chunk Type] identifies the type of information contained in the Chunk
 67 * Value field. It takes a value from 0 to 254. The value of 255 is
 68 * reserved for future use as an extension field.
 69 */
 70enum sctp_cid {
 71	SCTP_CID_DATA			= 0,
 72        SCTP_CID_INIT			= 1,
 73        SCTP_CID_INIT_ACK		= 2,
 74        SCTP_CID_SACK			= 3,
 75        SCTP_CID_HEARTBEAT		= 4,
 76        SCTP_CID_HEARTBEAT_ACK		= 5,
 77        SCTP_CID_ABORT			= 6,
 78        SCTP_CID_SHUTDOWN		= 7,
 79        SCTP_CID_SHUTDOWN_ACK		= 8,
 80        SCTP_CID_ERROR			= 9,
 81        SCTP_CID_COOKIE_ECHO		= 10,
 82        SCTP_CID_COOKIE_ACK	        = 11,
 83        SCTP_CID_ECN_ECNE		= 12,
 84        SCTP_CID_ECN_CWR		= 13,
 85        SCTP_CID_SHUTDOWN_COMPLETE	= 14,
 86
 87	/* AUTH Extension Section 4.1 */
 88	SCTP_CID_AUTH			= 0x0F,
 89
 90	/* sctp ndata 5.1. I-DATA */
 91	SCTP_CID_I_DATA			= 0x40,
 92
 93	/* PR-SCTP Sec 3.2 */
 94	SCTP_CID_FWD_TSN		= 0xC0,
 95
 96	/* Use hex, as defined in ADDIP sec. 3.1 */
 97	SCTP_CID_ASCONF			= 0xC1,
 98	SCTP_CID_I_FWD_TSN		= 0xC2,
 99	SCTP_CID_ASCONF_ACK		= 0x80,
100	SCTP_CID_RECONF			= 0x82,
101	SCTP_CID_PAD			= 0x84,
102}; /* enum */
103
104
105/* Section 3.2
106 *  Chunk Types are encoded such that the highest-order two bits specify
107 *  the action that must be taken if the processing endpoint does not
108 *  recognize the Chunk Type.
109 */
110enum {
111	SCTP_CID_ACTION_DISCARD     = 0x00,
112	SCTP_CID_ACTION_DISCARD_ERR = 0x40,
113	SCTP_CID_ACTION_SKIP        = 0x80,
114	SCTP_CID_ACTION_SKIP_ERR    = 0xc0,
115};
116
117enum { SCTP_CID_ACTION_MASK = 0xc0, };
118
119/* This flag is used in Chunk Flags for ABORT and SHUTDOWN COMPLETE.
120 *
121 * 3.3.7 Abort Association (ABORT) (6):
122 *    The T bit is set to 0 if the sender had a TCB that it destroyed.
123 *    If the sender did not have a TCB it should set this bit to 1.
124 */
125enum { SCTP_CHUNK_FLAG_T = 0x01 };
126
127/*
128 *  Set the T bit
129 *
130 *      0                   1                   2                   3
131 *      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
132 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
133 *     |   Type = 14   |Reserved     |T|      Length = 4               |
134 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
135 *
136 * Chunk Flags: 8 bits
137 *
138 *   Reserved:  7 bits
139 *     Set to 0 on transmit and ignored on receipt.
140 *
141 *   T bit:  1 bit
142 *     The T bit is set to 0 if the sender had a TCB that it destroyed. If
143 *     the sender did NOT have a TCB it should set this bit to 1.
144 *
145 * Note: Special rules apply to this chunk for verification, please
146 * see Section 8.5.1 for details.
147 */
148
149#define sctp_test_T_bit(c)    ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T)
150
151/* RFC 2960
152 * Section 3.2.1 Optional/Variable-length Parmaeter Format.
153 */
154
155struct sctp_paramhdr {
156	__be16 type;
157	__be16 length;
158};
159
160enum sctp_param {
161
162	/* RFC 2960 Section 3.3.5 */
163	SCTP_PARAM_HEARTBEAT_INFO		= cpu_to_be16(1),
164	/* RFC 2960 Section 3.3.2.1 */
165	SCTP_PARAM_IPV4_ADDRESS			= cpu_to_be16(5),
166	SCTP_PARAM_IPV6_ADDRESS			= cpu_to_be16(6),
167	SCTP_PARAM_STATE_COOKIE			= cpu_to_be16(7),
168	SCTP_PARAM_UNRECOGNIZED_PARAMETERS	= cpu_to_be16(8),
169	SCTP_PARAM_COOKIE_PRESERVATIVE		= cpu_to_be16(9),
170	SCTP_PARAM_HOST_NAME_ADDRESS		= cpu_to_be16(11),
171	SCTP_PARAM_SUPPORTED_ADDRESS_TYPES	= cpu_to_be16(12),
172	SCTP_PARAM_ECN_CAPABLE			= cpu_to_be16(0x8000),
173
174	/* AUTH Extension Section 3 */
175	SCTP_PARAM_RANDOM			= cpu_to_be16(0x8002),
176	SCTP_PARAM_CHUNKS			= cpu_to_be16(0x8003),
177	SCTP_PARAM_HMAC_ALGO			= cpu_to_be16(0x8004),
178
179	/* Add-IP: Supported Extensions, Section 4.2 */
180	SCTP_PARAM_SUPPORTED_EXT	= cpu_to_be16(0x8008),
181
182	/* PR-SCTP Sec 3.1 */
183	SCTP_PARAM_FWD_TSN_SUPPORT	= cpu_to_be16(0xc000),
184
185	/* Add-IP Extension. Section 3.2 */
186	SCTP_PARAM_ADD_IP		= cpu_to_be16(0xc001),
187	SCTP_PARAM_DEL_IP		= cpu_to_be16(0xc002),
188	SCTP_PARAM_ERR_CAUSE		= cpu_to_be16(0xc003),
189	SCTP_PARAM_SET_PRIMARY		= cpu_to_be16(0xc004),
190	SCTP_PARAM_SUCCESS_REPORT	= cpu_to_be16(0xc005),
191	SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006),
192
193	/* RE-CONFIG. Section 4 */
194	SCTP_PARAM_RESET_OUT_REQUEST		= cpu_to_be16(0x000d),
195	SCTP_PARAM_RESET_IN_REQUEST		= cpu_to_be16(0x000e),
196	SCTP_PARAM_RESET_TSN_REQUEST		= cpu_to_be16(0x000f),
197	SCTP_PARAM_RESET_RESPONSE		= cpu_to_be16(0x0010),
198	SCTP_PARAM_RESET_ADD_OUT_STREAMS	= cpu_to_be16(0x0011),
199	SCTP_PARAM_RESET_ADD_IN_STREAMS		= cpu_to_be16(0x0012),
200}; /* enum */
201
202
203/* RFC 2960 Section 3.2.1
204 *  The Parameter Types are encoded such that the highest-order two bits
205 *  specify the action that must be taken if the processing endpoint does
206 *  not recognize the Parameter Type.
207 *
208 */
209enum {
210	SCTP_PARAM_ACTION_DISCARD     = cpu_to_be16(0x0000),
211	SCTP_PARAM_ACTION_DISCARD_ERR = cpu_to_be16(0x4000),
212	SCTP_PARAM_ACTION_SKIP        = cpu_to_be16(0x8000),
213	SCTP_PARAM_ACTION_SKIP_ERR    = cpu_to_be16(0xc000),
214};
215
216enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), };
217
218/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
219
220struct sctp_datahdr {
221	__be32 tsn;
222	__be16 stream;
223	__be16 ssn;
224	__u32 ppid;
225};
226
227struct sctp_data_chunk {
228	struct sctp_chunkhdr chunk_hdr;
229	struct sctp_datahdr data_hdr;
230};
231
232struct sctp_idatahdr {
233	__be32 tsn;
234	__be16 stream;
235	__be16 reserved;
236	__be32 mid;
237	union {
238		__u32 ppid;
239		__be32 fsn;
240	};
241};
242
243struct sctp_idata_chunk {
244	struct sctp_chunkhdr chunk_hdr;
245	struct sctp_idatahdr data_hdr;
246};
247
248/* DATA Chuck Specific Flags */
249enum {
250	SCTP_DATA_MIDDLE_FRAG	= 0x00,
251	SCTP_DATA_LAST_FRAG	= 0x01,
252	SCTP_DATA_FIRST_FRAG	= 0x02,
253	SCTP_DATA_NOT_FRAG	= 0x03,
254	SCTP_DATA_UNORDERED	= 0x04,
255	SCTP_DATA_SACK_IMM	= 0x08,
256};
257enum { SCTP_DATA_FRAG_MASK = 0x03, };
258
259
260/* RFC 2960 Section 3.3.2 Initiation (INIT) (1)
261 *
262 *  This chunk is used to initiate a SCTP association between two
263 *  endpoints.
264 */
265struct sctp_inithdr {
266	__be32 init_tag;
267	__be32 a_rwnd;
268	__be16 num_outbound_streams;
269	__be16 num_inbound_streams;
270	__be32 initial_tsn;
271	/* __u8  params[]; */
272};
273
274struct sctp_init_chunk {
275	struct sctp_chunkhdr chunk_hdr;
276	struct sctp_inithdr init_hdr;
277};
278
279
280/* Section 3.3.2.1. IPv4 Address Parameter (5) */
281struct sctp_ipv4addr_param {
282	struct sctp_paramhdr param_hdr;
283	struct in_addr addr;
284};
285
286/* Section 3.3.2.1. IPv6 Address Parameter (6) */
287struct sctp_ipv6addr_param {
288	struct sctp_paramhdr param_hdr;
289	struct in6_addr addr;
290};
291
292/* Section 3.3.2.1 Cookie Preservative (9) */
293struct sctp_cookie_preserve_param {
294	struct sctp_paramhdr param_hdr;
295	__be32 lifespan_increment;
296};
297
298/* Section 3.3.2.1 Host Name Address (11) */
299struct sctp_hostname_param {
300	struct sctp_paramhdr param_hdr;
301	uint8_t hostname[];
302};
303
304/* Section 3.3.2.1 Supported Address Types (12) */
305struct sctp_supported_addrs_param {
306	struct sctp_paramhdr param_hdr;
307	__be16 types[];
308};
309
310/* ADDIP Section 3.2.6 Adaptation Layer Indication */
311struct sctp_adaptation_ind_param {
312	struct sctp_paramhdr param_hdr;
313	__be32 adaptation_ind;
314};
315
316/* ADDIP Section 4.2.7 Supported Extensions Parameter */
317struct sctp_supported_ext_param {
318	struct sctp_paramhdr param_hdr;
319	__u8 chunks[];
320};
321
322/* AUTH Section 3.1 Random */
323struct sctp_random_param {
324	struct sctp_paramhdr param_hdr;
325	__u8 random_val[];
326};
327
328/* AUTH Section 3.2 Chunk List */
329struct sctp_chunks_param {
330	struct sctp_paramhdr param_hdr;
331	__u8 chunks[];
332};
333
334/* AUTH Section 3.3 HMAC Algorithm */
335struct sctp_hmac_algo_param {
336	struct sctp_paramhdr param_hdr;
337	__be16 hmac_ids[];
338};
339
340/* RFC 2960.  Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
341 *   The INIT ACK chunk is used to acknowledge the initiation of an SCTP
342 *   association.
343 */
344struct sctp_initack_chunk {
345	struct sctp_chunkhdr chunk_hdr;
346	struct sctp_inithdr init_hdr;
347};
348
349/* Section 3.3.3.1 State Cookie (7) */
350struct sctp_cookie_param {
351	struct sctp_paramhdr p;
352	__u8 body[];
353};
354
355/* Section 3.3.3.1 Unrecognized Parameters (8) */
356struct sctp_unrecognized_param {
357	struct sctp_paramhdr param_hdr;
358	struct sctp_paramhdr unrecognized;
359};
360
361
362
363/*
364 * 3.3.4 Selective Acknowledgement (SACK) (3):
365 *
366 *  This chunk is sent to the peer endpoint to acknowledge received DATA
367 *  chunks and to inform the peer endpoint of gaps in the received
368 *  subsequences of DATA chunks as represented by their TSNs.
369 */
370
371struct sctp_gap_ack_block {
372	__be16 start;
373	__be16 end;
374};
375
376union sctp_sack_variable {
377	struct sctp_gap_ack_block gab;
378	__be32 dup;
379};
380
381struct sctp_sackhdr {
382	__be32 cum_tsn_ack;
383	__be32 a_rwnd;
384	__be16 num_gap_ack_blocks;
385	__be16 num_dup_tsns;
386	/* union sctp_sack_variable variable[]; */
387};
388
389struct sctp_sack_chunk {
390	struct sctp_chunkhdr chunk_hdr;
391	struct sctp_sackhdr sack_hdr;
392};
393
394
395/* RFC 2960.  Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
396 *
397 *  An endpoint should send this chunk to its peer endpoint to probe the
398 *  reachability of a particular destination transport address defined in
399 *  the present association.
400 */
401
402struct sctp_heartbeathdr {
403	struct sctp_paramhdr info;
404};
405
406struct sctp_heartbeat_chunk {
407	struct sctp_chunkhdr chunk_hdr;
408	struct sctp_heartbeathdr hb_hdr;
409};
410
411
412/* PAD chunk could be bundled with heartbeat chunk to probe pmtu */
413struct sctp_pad_chunk {
414	struct sctp_chunkhdr uh;
415};
416
417
418/* For the abort and shutdown ACK we must carry the init tag in the
419 * common header. Just the common header is all that is needed with a
420 * chunk descriptor.
421 */
422struct sctp_abort_chunk {
423	struct sctp_chunkhdr uh;
424};
425
426
427/* For the graceful shutdown we must carry the tag (in common header)
428 * and the highest consecutive acking value.
429 */
430struct sctp_shutdownhdr {
431	__be32 cum_tsn_ack;
432};
433
434struct sctp_shutdown_chunk {
435	struct sctp_chunkhdr chunk_hdr;
436	struct sctp_shutdownhdr shutdown_hdr;
437};
438
439/* RFC 2960.  Section 3.3.10 Operation Error (ERROR) (9) */
440
441struct sctp_errhdr {
442	__be16 cause;
443	__be16 length;
444	/* __u8  variable[]; */
445};
446
447struct sctp_operr_chunk {
448	struct sctp_chunkhdr chunk_hdr;
449	struct sctp_errhdr err_hdr;
450};
451
452/* RFC 2960 3.3.10 - Operation Error
453 *
454 * Cause Code: 16 bits (unsigned integer)
455 *
456 *     Defines the type of error conditions being reported.
457 *    Cause Code
458 *     Value           Cause Code
459 *     ---------      ----------------
460 *      1              Invalid Stream Identifier
461 *      2              Missing Mandatory Parameter
462 *      3              Stale Cookie Error
463 *      4              Out of Resource
464 *      5              Unresolvable Address
465 *      6              Unrecognized Chunk Type
466 *      7              Invalid Mandatory Parameter
467 *      8              Unrecognized Parameters
468 *      9              No User Data
469 *     10              Cookie Received While Shutting Down
470 */
471enum sctp_error {
472
473	SCTP_ERROR_NO_ERROR	   = cpu_to_be16(0x00),
474	SCTP_ERROR_INV_STRM	   = cpu_to_be16(0x01),
475	SCTP_ERROR_MISS_PARAM 	   = cpu_to_be16(0x02),
476	SCTP_ERROR_STALE_COOKIE	   = cpu_to_be16(0x03),
477	SCTP_ERROR_NO_RESOURCE 	   = cpu_to_be16(0x04),
478	SCTP_ERROR_DNS_FAILED      = cpu_to_be16(0x05),
479	SCTP_ERROR_UNKNOWN_CHUNK   = cpu_to_be16(0x06),
480	SCTP_ERROR_INV_PARAM       = cpu_to_be16(0x07),
481	SCTP_ERROR_UNKNOWN_PARAM   = cpu_to_be16(0x08),
482	SCTP_ERROR_NO_DATA         = cpu_to_be16(0x09),
483	SCTP_ERROR_COOKIE_IN_SHUTDOWN = cpu_to_be16(0x0a),
484
485
486	/* SCTP Implementation Guide:
487	 *  11  Restart of an association with new addresses
488	 *  12  User Initiated Abort
489	 *  13  Protocol Violation
490	 *  14  Restart of an Association with New Encapsulation Port
491	 */
492
493	SCTP_ERROR_RESTART         = cpu_to_be16(0x0b),
494	SCTP_ERROR_USER_ABORT      = cpu_to_be16(0x0c),
495	SCTP_ERROR_PROTO_VIOLATION = cpu_to_be16(0x0d),
496	SCTP_ERROR_NEW_ENCAP_PORT  = cpu_to_be16(0x0e),
497
498	/* ADDIP Section 3.3  New Error Causes
499	 *
500	 * Four new Error Causes are added to the SCTP Operational Errors,
501	 * primarily for use in the ASCONF-ACK chunk.
502	 *
503	 * Value          Cause Code
504	 * ---------      ----------------
505	 * 0x00A0          Request to Delete Last Remaining IP Address.
506	 * 0x00A1          Operation Refused Due to Resource Shortage.
507	 * 0x00A2          Request to Delete Source IP Address.
508	 * 0x00A3          Association Aborted due to illegal ASCONF-ACK
509	 * 0x00A4          Request refused - no authorization.
510	 */
511	SCTP_ERROR_DEL_LAST_IP	= cpu_to_be16(0x00A0),
512	SCTP_ERROR_RSRC_LOW	= cpu_to_be16(0x00A1),
513	SCTP_ERROR_DEL_SRC_IP	= cpu_to_be16(0x00A2),
514	SCTP_ERROR_ASCONF_ACK   = cpu_to_be16(0x00A3),
515	SCTP_ERROR_REQ_REFUSED	= cpu_to_be16(0x00A4),
516
517	/* AUTH Section 4.  New Error Cause
518	 *
519	 * This section defines a new error cause that will be sent if an AUTH
520	 * chunk is received with an unsupported HMAC identifier.
521	 * illustrates the new error cause.
522	 *
523	 * Cause Code      Error Cause Name
524	 * --------------------------------------------------------------
525	 * 0x0105          Unsupported HMAC Identifier
526	 */
527	 SCTP_ERROR_UNSUP_HMAC	= cpu_to_be16(0x0105)
528};
529
530
531
532/* RFC 2960.  Appendix A.  Explicit Congestion Notification.
533 *   Explicit Congestion Notification Echo (ECNE) (12)
534 */
535struct sctp_ecnehdr {
536	__be32 lowest_tsn;
537};
538
539struct sctp_ecne_chunk {
540	struct sctp_chunkhdr chunk_hdr;
541	struct sctp_ecnehdr ence_hdr;
542};
543
544/* RFC 2960.  Appendix A.  Explicit Congestion Notification.
545 *   Congestion Window Reduced (CWR) (13)
546 */
547struct sctp_cwrhdr {
548	__be32 lowest_tsn;
549};
550
551/* PR-SCTP
552 * 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
553 *
554 * Forward Cumulative TSN chunk has the following format:
555 *
556 *        0                   1                   2                   3
557 *        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
558 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
559 *      |   Type = 192  |  Flags = 0x00 |        Length = Variable      |
560 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
561 *      |                      New Cumulative TSN                       |
562 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
563 *      |         Stream-1              |       Stream Sequence-1       |
564 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
565 *      \                                                               /
566 *      /                                                               \
567 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
568 *      |         Stream-N              |       Stream Sequence-N       |
569 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
570 *
571 *      Chunk Flags:
572 *
573 *        Set to all zeros on transmit and ignored on receipt.
574 *
575 *      New Cumulative TSN: 32 bit u_int
576 *
577 *       This indicates the new cumulative TSN to the data receiver. Upon
578 *       the reception of this value, the data receiver MUST consider
579 *       any missing TSNs earlier than or equal to this value as received
580 *       and stop reporting them as gaps in any subsequent SACKs.
581 *
582 *      Stream-N: 16 bit u_int
583 *
584 *       This field holds a stream number that was skipped by this
585 *       FWD-TSN.
586 *
587 *      Stream Sequence-N: 16 bit u_int
588 *       This field holds the sequence number associated with the stream
589 *       that was skipped. The stream sequence field holds the largest stream
590 *       sequence number in this stream being skipped.  The receiver of
591 *       the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
592 *       to enable delivery of any stranded TSN's that remain on the stream
593 *       re-ordering queues. This field MUST NOT report TSN's corresponding
594 *       to DATA chunk that are marked as unordered. For ordered DATA
595 *       chunks this field MUST be filled in.
596 */
597struct sctp_fwdtsn_skip {
598	__be16 stream;
599	__be16 ssn;
600};
601
602struct sctp_fwdtsn_hdr {
603	__be32 new_cum_tsn;
604	/* struct sctp_fwdtsn_skip skip[]; */
605};
606
607struct sctp_fwdtsn_chunk {
608	struct sctp_chunkhdr chunk_hdr;
609	struct sctp_fwdtsn_hdr fwdtsn_hdr;
610};
611
612struct sctp_ifwdtsn_skip {
613	__be16 stream;
614	__u8 reserved;
615	__u8 flags;
616	__be32 mid;
617};
618
619struct sctp_ifwdtsn_hdr {
620	__be32 new_cum_tsn;
621	/* struct sctp_ifwdtsn_skip skip[]; */
622};
623
624struct sctp_ifwdtsn_chunk {
625	struct sctp_chunkhdr chunk_hdr;
626	struct sctp_ifwdtsn_hdr fwdtsn_hdr;
627};
628
629/* ADDIP
630 * Section 3.1.1 Address Configuration Change Chunk (ASCONF)
631 *
632 * 	Serial Number: 32 bits (unsigned integer)
633 *	This value represents a Serial Number for the ASCONF Chunk. The
634 *	valid range of Serial Number is from 0 to 2^32-1.
635 *	Serial Numbers wrap back to 0 after reaching 2^32 -1.
636 *
637 *	Address Parameter: 8 or 20 bytes (depending on type)
638 *	The address is an address of the sender of the ASCONF chunk,
639 *	the address MUST be considered part of the association by the
640 *	peer endpoint. This field may be used by the receiver of the 
641 *	ASCONF to help in finding the association. This parameter MUST
642 *	be present in every ASCONF message i.e. it is a mandatory TLV
643 *	parameter.
644 *
645 *	ASCONF Parameter: TLV format
646 *	Each Address configuration change is represented by a TLV
647 *	parameter as defined in Section 3.2. One or more requests may
648 *	be present in an ASCONF Chunk.
649 *
650 * Section 3.1.2 Address Configuration Acknowledgement Chunk (ASCONF-ACK)
651 * 
652 *	Serial Number: 32 bits (unsigned integer)
653 *	This value represents the Serial Number for the received ASCONF
654 *	Chunk that is acknowledged by this chunk. This value is copied
655 *	from the received ASCONF Chunk. 
656 *
657 *	ASCONF Parameter Response: TLV format
658 *	The ASCONF Parameter Response is used in the ASCONF-ACK to
659 *	report status of ASCONF processing.
660 */
661struct sctp_addip_param {
662	struct sctp_paramhdr param_hdr;
663	__be32 crr_id;
664};
665
666struct sctp_addiphdr {
667	__be32	serial;
668	/* __u8	params[]; */
669};
670
671struct sctp_addip_chunk {
672	struct sctp_chunkhdr chunk_hdr;
673	struct sctp_addiphdr addip_hdr;
674};
675
676/* AUTH
677 * Section 4.1  Authentication Chunk (AUTH)
678 *
679 *   This chunk is used to hold the result of the HMAC calculation.
680 *
681 *    0                   1                   2                   3
682 *    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
683 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
684 *   | Type = 0x0F   |   Flags=0     |             Length            |
685 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
686 *   |     Shared Key Identifier     |   HMAC Identifier             |
687 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
688 *   |                                                               |
689 *   \                             HMAC                              /
690 *   /                                                               \
691 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
692 *
693 *   Type: 1 byte (unsigned integer)
694 *   	This value MUST be set to 0x0F for  all AUTH-chunks.
695 *
696 *   Flags: 1 byte (unsigned integer)
697 *	Set to zero on transmit and ignored on receipt.
698 *
699 *   Length: 2 bytes (unsigned integer)
700 *   	This value holds the length of the HMAC in bytes plus 8.
701 *
702 *  Shared Key Identifier: 2 bytes (unsigned integer)
703 *	This value describes which endpoint pair shared key is used.
704 *
705 *   HMAC Identifier: 2 bytes (unsigned integer)
706 *   	This value describes which message digest is being used.  Table 2
707 *	shows the currently defined values.
708 *
709 *    The following Table 2 shows the currently defined values for HMAC
710 *       identifiers.
711 *
712 *	 +-----------------+--------------------------+
713 *	 | HMAC Identifier | Message Digest Algorithm |
714 *	 +-----------------+--------------------------+
715 *	 | 0               | Reserved                 |
716 *	 | 1               | SHA-1 defined in [8]     |
717 *	 | 2               | Reserved                 |
718 *	 | 3               | SHA-256 defined in [8]   |
719 *	 +-----------------+--------------------------+
720 *
721 *
722 *   HMAC: n bytes (unsigned integer) This hold the result of the HMAC
723 *      calculation.
724 */
725struct sctp_authhdr {
726	__be16 shkey_id;
727	__be16 hmac_id;
728	/* __u8   hmac[]; */
729};
730
731struct sctp_auth_chunk {
732	struct sctp_chunkhdr chunk_hdr;
733	struct sctp_authhdr auth_hdr;
734};
735
736struct sctp_infox {
737	struct sctp_info *sctpinfo;
738	struct sctp_association *asoc;
739};
740
741struct sctp_reconf_chunk {
742	struct sctp_chunkhdr chunk_hdr;
743	/* __u8 params[]; */
744};
745
746struct sctp_strreset_outreq {
747	struct sctp_paramhdr param_hdr;
748	__be32 request_seq;
749	__be32 response_seq;
750	__be32 send_reset_at_tsn;
751	__be16 list_of_streams[];
752};
753
754struct sctp_strreset_inreq {
755	struct sctp_paramhdr param_hdr;
756	__be32 request_seq;
757	__be16 list_of_streams[];
758};
759
760struct sctp_strreset_tsnreq {
761	struct sctp_paramhdr param_hdr;
762	__be32 request_seq;
763};
764
765struct sctp_strreset_addstrm {
766	struct sctp_paramhdr param_hdr;
767	__be32 request_seq;
768	__be16 number_of_streams;
769	__be16 reserved;
770};
771
772enum {
773	SCTP_STRRESET_NOTHING_TO_DO	= 0x00,
774	SCTP_STRRESET_PERFORMED		= 0x01,
775	SCTP_STRRESET_DENIED		= 0x02,
776	SCTP_STRRESET_ERR_WRONG_SSN	= 0x03,
777	SCTP_STRRESET_ERR_IN_PROGRESS	= 0x04,
778	SCTP_STRRESET_ERR_BAD_SEQNO	= 0x05,
779	SCTP_STRRESET_IN_PROGRESS	= 0x06,
780};
781
782struct sctp_strreset_resp {
783	struct sctp_paramhdr param_hdr;
784	__be32 response_seq;
785	__be32 result;
786};
787
788struct sctp_strreset_resptsn {
789	struct sctp_paramhdr param_hdr;
790	__be32 response_seq;
791	__be32 result;
792	__be32 senders_next_tsn;
793	__be32 receivers_next_tsn;
794};
795
796enum {
797	SCTP_DSCP_SET_MASK = 0x1,
798	SCTP_DSCP_VAL_MASK = 0xfc,
799	SCTP_FLOWLABEL_SET_MASK = 0x100000,
800	SCTP_FLOWLABEL_VAL_MASK = 0xfffff
801};
802
803/* UDP Encapsulation
804 * draft-tuexen-tsvwg-sctp-udp-encaps-cons-03.html#section-4-4
805 *
806 *   The error cause indicating an "Restart of an Association with
807 *   New Encapsulation Port"
808 *
809 * 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
810 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
811 * |        Cause Code = 14        |       Cause Length = 8        |
812 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
813 * |   Current Encapsulation Port  |     New Encapsulation Port    |
814 * +-------------------------------+-------------------------------+
815 */
816struct sctp_new_encap_port_hdr {
817	__be16 cur_port;
818	__be16 new_port;
819};
820
821/* Round an int up to the next multiple of 4.  */
822#define SCTP_PAD4(s) (((s)+3)&~3)
823/* Truncate to the previous multiple of 4.  */
824#define SCTP_TRUNC4(s) ((s)&~3)
825
826#endif /* __LINUX_SCTP_H__ */
~/ Read-only file preview.