| 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 */ | 
|---|
| 45 | struct sctphdr { | 
|---|
| 46 | __be16 source; | 
|---|
| 47 | __be16 dest; | 
|---|
| 48 | __be32 vtag; | 
|---|
| 49 | __le32 checksum; | 
|---|
| 50 | }; | 
|---|
| 51 |  | 
|---|
| 52 | static 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. */ | 
|---|
| 58 | struct 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 | */ | 
|---|
| 70 | enum 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 | */ | 
|---|
| 110 | enum { | 
|---|
| 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 |  | 
|---|
| 117 | enum { 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 | */ | 
|---|
| 125 | enum { 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 |  | 
|---|
| 155 | struct sctp_paramhdr { | 
|---|
| 156 | __be16 type; | 
|---|
| 157 | __be16 length; | 
|---|
| 158 | }; | 
|---|
| 159 |  | 
|---|
| 160 | enum 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 | */ | 
|---|
| 209 | enum { | 
|---|
| 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 |  | 
|---|
| 216 | enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), }; | 
|---|
| 217 |  | 
|---|
| 218 | /* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */ | 
|---|
| 219 |  | 
|---|
| 220 | struct sctp_datahdr { | 
|---|
| 221 | __be32 tsn; | 
|---|
| 222 | __be16 stream; | 
|---|
| 223 | __be16 ssn; | 
|---|
| 224 | __u32 ppid; | 
|---|
| 225 | }; | 
|---|
| 226 |  | 
|---|
| 227 | struct sctp_data_chunk { | 
|---|
| 228 | struct sctp_chunkhdr chunk_hdr; | 
|---|
| 229 | struct sctp_datahdr data_hdr; | 
|---|
| 230 | }; | 
|---|
| 231 |  | 
|---|
| 232 | struct 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 |  | 
|---|
| 243 | struct sctp_idata_chunk { | 
|---|
| 244 | struct sctp_chunkhdr chunk_hdr; | 
|---|
| 245 | struct sctp_idatahdr data_hdr; | 
|---|
| 246 | }; | 
|---|
| 247 |  | 
|---|
| 248 | /* DATA Chuck Specific Flags */ | 
|---|
| 249 | enum { | 
|---|
| 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 | }; | 
|---|
| 257 | enum { 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 | */ | 
|---|
| 265 | struct 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 |  | 
|---|
| 274 | struct 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) */ | 
|---|
| 281 | struct 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) */ | 
|---|
| 287 | struct 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) */ | 
|---|
| 293 | struct 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) */ | 
|---|
| 299 | struct 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) */ | 
|---|
| 305 | struct sctp_supported_addrs_param { | 
|---|
| 306 | struct sctp_paramhdr param_hdr; | 
|---|
| 307 | __be16 types[]; | 
|---|
| 308 | }; | 
|---|
| 309 |  | 
|---|
| 310 | /* ADDIP Section 3.2.6 Adaptation Layer Indication */ | 
|---|
| 311 | struct 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 */ | 
|---|
| 317 | struct sctp_supported_ext_param { | 
|---|
| 318 | struct sctp_paramhdr param_hdr; | 
|---|
| 319 | __u8 chunks[]; | 
|---|
| 320 | }; | 
|---|
| 321 |  | 
|---|
| 322 | /* AUTH Section 3.1 Random */ | 
|---|
| 323 | struct sctp_random_param { | 
|---|
| 324 | struct sctp_paramhdr param_hdr; | 
|---|
| 325 | __u8 random_val[]; | 
|---|
| 326 | }; | 
|---|
| 327 |  | 
|---|
| 328 | /* AUTH Section 3.2 Chunk List */ | 
|---|
| 329 | struct sctp_chunks_param { | 
|---|
| 330 | struct sctp_paramhdr param_hdr; | 
|---|
| 331 | __u8 chunks[]; | 
|---|
| 332 | }; | 
|---|
| 333 |  | 
|---|
| 334 | /* AUTH Section 3.3 HMAC Algorithm */ | 
|---|
| 335 | struct 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 | */ | 
|---|
| 344 | struct 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) */ | 
|---|
| 350 | struct sctp_cookie_param { | 
|---|
| 351 | struct sctp_paramhdr p; | 
|---|
| 352 | __u8 body[]; | 
|---|
| 353 | }; | 
|---|
| 354 |  | 
|---|
| 355 | /* Section 3.3.3.1 Unrecognized Parameters (8) */ | 
|---|
| 356 | struct 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 |  | 
|---|
| 371 | struct sctp_gap_ack_block { | 
|---|
| 372 | __be16 start; | 
|---|
| 373 | __be16 end; | 
|---|
| 374 | }; | 
|---|
| 375 |  | 
|---|
| 376 | union sctp_sack_variable { | 
|---|
| 377 | struct sctp_gap_ack_block gab; | 
|---|
| 378 | __be32 dup; | 
|---|
| 379 | }; | 
|---|
| 380 |  | 
|---|
| 381 | struct 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 |  | 
|---|
| 389 | struct 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 |  | 
|---|
| 402 | struct sctp_heartbeathdr { | 
|---|
| 403 | struct sctp_paramhdr info; | 
|---|
| 404 | }; | 
|---|
| 405 |  | 
|---|
| 406 | struct 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 */ | 
|---|
| 413 | struct 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 | */ | 
|---|
| 422 | struct 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 | */ | 
|---|
| 430 | struct sctp_shutdownhdr { | 
|---|
| 431 | __be32 cum_tsn_ack; | 
|---|
| 432 | }; | 
|---|
| 433 |  | 
|---|
| 434 | struct 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 |  | 
|---|
| 441 | struct sctp_errhdr { | 
|---|
| 442 | __be16 cause; | 
|---|
| 443 | __be16 length; | 
|---|
| 444 | /* __u8  variable[]; */ | 
|---|
| 445 | }; | 
|---|
| 446 |  | 
|---|
| 447 | struct 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 | */ | 
|---|
| 471 | enum 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 | */ | 
|---|
| 535 | struct sctp_ecnehdr { | 
|---|
| 536 | __be32 lowest_tsn; | 
|---|
| 537 | }; | 
|---|
| 538 |  | 
|---|
| 539 | struct 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 | */ | 
|---|
| 547 | struct 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 | */ | 
|---|
| 597 | struct sctp_fwdtsn_skip { | 
|---|
| 598 | __be16 stream; | 
|---|
| 599 | __be16 ssn; | 
|---|
| 600 | }; | 
|---|
| 601 |  | 
|---|
| 602 | struct sctp_fwdtsn_hdr { | 
|---|
| 603 | __be32 new_cum_tsn; | 
|---|
| 604 | /* struct sctp_fwdtsn_skip skip[]; */ | 
|---|
| 605 | }; | 
|---|
| 606 |  | 
|---|
| 607 | struct sctp_fwdtsn_chunk { | 
|---|
| 608 | struct sctp_chunkhdr chunk_hdr; | 
|---|
| 609 | struct sctp_fwdtsn_hdr fwdtsn_hdr; | 
|---|
| 610 | }; | 
|---|
| 611 |  | 
|---|
| 612 | struct sctp_ifwdtsn_skip { | 
|---|
| 613 | __be16 stream; | 
|---|
| 614 | __u8 reserved; | 
|---|
| 615 | __u8 flags; | 
|---|
| 616 | __be32 mid; | 
|---|
| 617 | }; | 
|---|
| 618 |  | 
|---|
| 619 | struct sctp_ifwdtsn_hdr { | 
|---|
| 620 | __be32 new_cum_tsn; | 
|---|
| 621 | /* struct sctp_ifwdtsn_skip skip[]; */ | 
|---|
| 622 | }; | 
|---|
| 623 |  | 
|---|
| 624 | struct 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 | */ | 
|---|
| 661 | struct sctp_addip_param { | 
|---|
| 662 | struct sctp_paramhdr param_hdr; | 
|---|
| 663 | __be32 crr_id; | 
|---|
| 664 | }; | 
|---|
| 665 |  | 
|---|
| 666 | struct sctp_addiphdr { | 
|---|
| 667 | __be32	serial; | 
|---|
| 668 | /* __u8	params[]; */ | 
|---|
| 669 | }; | 
|---|
| 670 |  | 
|---|
| 671 | struct 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 | */ | 
|---|
| 725 | struct sctp_authhdr { | 
|---|
| 726 | __be16 shkey_id; | 
|---|
| 727 | __be16 hmac_id; | 
|---|
| 728 | /* __u8   hmac[]; */ | 
|---|
| 729 | }; | 
|---|
| 730 |  | 
|---|
| 731 | struct sctp_auth_chunk { | 
|---|
| 732 | struct sctp_chunkhdr chunk_hdr; | 
|---|
| 733 | struct sctp_authhdr auth_hdr; | 
|---|
| 734 | }; | 
|---|
| 735 |  | 
|---|
| 736 | struct sctp_infox { | 
|---|
| 737 | struct sctp_info *sctpinfo; | 
|---|
| 738 | struct sctp_association *asoc; | 
|---|
| 739 | }; | 
|---|
| 740 |  | 
|---|
| 741 | struct sctp_reconf_chunk { | 
|---|
| 742 | struct sctp_chunkhdr chunk_hdr; | 
|---|
| 743 | /* __u8 params[]; */ | 
|---|
| 744 | }; | 
|---|
| 745 |  | 
|---|
| 746 | struct 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 |  | 
|---|
| 754 | struct sctp_strreset_inreq { | 
|---|
| 755 | struct sctp_paramhdr param_hdr; | 
|---|
| 756 | __be32 request_seq; | 
|---|
| 757 | __be16 list_of_streams[]; | 
|---|
| 758 | }; | 
|---|
| 759 |  | 
|---|
| 760 | struct sctp_strreset_tsnreq { | 
|---|
| 761 | struct sctp_paramhdr param_hdr; | 
|---|
| 762 | __be32 request_seq; | 
|---|
| 763 | }; | 
|---|
| 764 |  | 
|---|
| 765 | struct sctp_strreset_addstrm { | 
|---|
| 766 | struct sctp_paramhdr param_hdr; | 
|---|
| 767 | __be32 request_seq; | 
|---|
| 768 | __be16 number_of_streams; | 
|---|
| 769 | __be16 reserved; | 
|---|
| 770 | }; | 
|---|
| 771 |  | 
|---|
| 772 | enum { | 
|---|
| 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 |  | 
|---|
| 782 | struct sctp_strreset_resp { | 
|---|
| 783 | struct sctp_paramhdr param_hdr; | 
|---|
| 784 | __be32 response_seq; | 
|---|
| 785 | __be32 result; | 
|---|
| 786 | }; | 
|---|
| 787 |  | 
|---|
| 788 | struct 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 |  | 
|---|
| 796 | enum { | 
|---|
| 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 | */ | 
|---|
| 816 | struct 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__ */ | 
|---|
| 827 |  | 
|---|