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