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