1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/sctp/src/netinet/sctp_constants.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1134 @@ 1.4 +/*- 1.5 + * Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved. 1.6 + * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved. 1.7 + * Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved. 1.8 + * 1.9 + * Redistribution and use in source and binary forms, with or without 1.10 + * modification, are permitted provided that the following conditions are met: 1.11 + * 1.12 + * a) Redistributions of source code must retain the above copyright notice, 1.13 + * this list of conditions and the following disclaimer. 1.14 + * 1.15 + * b) Redistributions in binary form must reproduce the above copyright 1.16 + * notice, this list of conditions and the following disclaimer in 1.17 + * the documentation and/or other materials provided with the distribution. 1.18 + * 1.19 + * c) Neither the name of Cisco Systems, Inc. nor the names of its 1.20 + * contributors may be used to endorse or promote products derived 1.21 + * from this software without specific prior written permission. 1.22 + * 1.23 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1.24 + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1.25 + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.26 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 1.27 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.28 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.29 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.30 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.31 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.32 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 1.33 + * THE POSSIBILITY OF SUCH DAMAGE. 1.34 + */ 1.35 + 1.36 +#ifdef __FreeBSD__ 1.37 +#include <sys/cdefs.h> 1.38 +__FBSDID("$FreeBSD: head/sys/netinet/sctp_constants.h 256556 2013-10-15 20:21:27Z tuexen $"); 1.39 +#endif 1.40 + 1.41 +#ifndef _NETINET_SCTP_CONSTANTS_H_ 1.42 +#define _NETINET_SCTP_CONSTANTS_H_ 1.43 + 1.44 +#if defined(__Userspace_os_Windows) 1.45 +extern void getwintimeofday(struct timeval *tv); 1.46 +#endif 1.47 +/* IANA assigned port number for SCTP over UDP encapsulation */ 1.48 +#ifdef __FreeBSD__ 1.49 +/* For freebsd we cannot bind the port at 1.50 + * startup. Otherwise what will happen is 1.51 + * we really won't be bound. The user must 1.52 + * put it into the sysctl... or we need 1.53 + * to build a special timer for this to allow 1.54 + * us to wait 1 second or so after the system 1.55 + * comes up. 1.56 + */ 1.57 +#define SCTP_OVER_UDP_TUNNELING_PORT 0 1.58 +#else 1.59 +#define SCTP_OVER_UDP_TUNNELING_PORT 9899 1.60 +#endif 1.61 +/* Number of packets to get before sack sent by default */ 1.62 +#define SCTP_DEFAULT_SACK_FREQ 2 1.63 + 1.64 +/* Address limit - This variable is calculated 1.65 + * based on an 65535 byte max ip packet. We take out 100 bytes 1.66 + * for the cookie, 40 bytes for a v6 header and 32 1.67 + * bytes for the init structure. A second init structure 1.68 + * for the init-ack and then finally a third one for the 1.69 + * imbedded init. This yeilds 100+40+(3 * 32) = 236 bytes. 1.70 + * This leaves 65299 bytes for addresses. We throw out the 299 bytes. 1.71 + * Now whatever we send in the INIT() we need to allow to get back in the 1.72 + * INIT-ACK plus all the values from INIT and INIT-ACK 1.73 + * listed in the cookie. Plus we need some overhead for 1.74 + * maybe copied parameters in the COOKIE. If we 1.75 + * allow 1080 addresses, and each side has 1080 V6 addresses 1.76 + * that will be 21600 bytes. In the INIT-ACK we will 1.77 + * see the INIT-ACK 21600 + 43200 in the cookie. This leaves 1.78 + * about 500 bytes slack for misc things in the cookie. 1.79 + */ 1.80 +#define SCTP_ADDRESS_LIMIT 1080 1.81 + 1.82 +/* We need at least 2k of space for us, inits 1.83 + * larger than that lets abort. 1.84 + */ 1.85 +#define SCTP_LARGEST_INIT_ACCEPTED (65535 - 2048) 1.86 + 1.87 +/* Number of addresses where we just skip the counting */ 1.88 +#define SCTP_COUNT_LIMIT 40 1.89 + 1.90 +#define SCTP_ZERO_COPY_TICK_DELAY (((100 * hz) + 999) / 1000) 1.91 +#define SCTP_ZERO_COPY_SENDQ_TICK_DELAY (((100 * hz) + 999) / 1000) 1.92 + 1.93 +/* Number of ticks to delay before running 1.94 + * iterator on an address change. 1.95 + */ 1.96 +#define SCTP_ADDRESS_TICK_DELAY 2 1.97 + 1.98 +#define SCTP_VERSION_STRING "KAME-BSD 1.1" 1.99 +/* #define SCTP_AUDITING_ENABLED 1 used for debug/auditing */ 1.100 +#define SCTP_AUDIT_SIZE 256 1.101 + 1.102 + 1.103 +#define SCTP_KTRHEAD_NAME "sctp_iterator" 1.104 +#define SCTP_KTHREAD_PAGES 0 1.105 + 1.106 +#define SCTP_MCORE_NAME "sctp_core_worker" 1.107 + 1.108 + 1.109 +/* If you support Multi-VRF how big to 1.110 + * make the initial array of VRF's to. 1.111 + */ 1.112 +#define SCTP_DEFAULT_VRF_SIZE 4 1.113 + 1.114 +/* constants for rto calc */ 1.115 +#define sctp_align_safe_nocopy 0 1.116 +#define sctp_align_unsafe_makecopy 1 1.117 + 1.118 +/* JRS - Values defined for the HTCP algorithm */ 1.119 +#define ALPHA_BASE (1<<7) /* 1.0 with shift << 7 */ 1.120 +#define BETA_MIN (1<<6) /* 0.5 with shift << 7 */ 1.121 +#define BETA_MAX 102 /* 0.8 with shift << 7 */ 1.122 + 1.123 +/* Places that CWND log can happen from */ 1.124 +#define SCTP_CWND_LOG_FROM_FR 1 1.125 +#define SCTP_CWND_LOG_FROM_RTX 2 1.126 +#define SCTP_CWND_LOG_FROM_BRST 3 1.127 +#define SCTP_CWND_LOG_FROM_SS 4 1.128 +#define SCTP_CWND_LOG_FROM_CA 5 1.129 +#define SCTP_CWND_LOG_FROM_SAT 6 1.130 +#define SCTP_BLOCK_LOG_INTO_BLK 7 1.131 +#define SCTP_BLOCK_LOG_OUTOF_BLK 8 1.132 +#define SCTP_BLOCK_LOG_CHECK 9 1.133 +#define SCTP_STR_LOG_FROM_INTO_STRD 10 1.134 +#define SCTP_STR_LOG_FROM_IMMED_DEL 11 1.135 +#define SCTP_STR_LOG_FROM_INSERT_HD 12 1.136 +#define SCTP_STR_LOG_FROM_INSERT_MD 13 1.137 +#define SCTP_STR_LOG_FROM_INSERT_TL 14 1.138 +#define SCTP_STR_LOG_FROM_MARK_TSN 15 1.139 +#define SCTP_STR_LOG_FROM_EXPRS_DEL 16 1.140 +#define SCTP_FR_LOG_BIGGEST_TSNS 17 1.141 +#define SCTP_FR_LOG_STRIKE_TEST 18 1.142 +#define SCTP_FR_LOG_STRIKE_CHUNK 19 1.143 +#define SCTP_FR_T3_TIMEOUT 20 1.144 +#define SCTP_MAP_PREPARE_SLIDE 21 1.145 +#define SCTP_MAP_SLIDE_FROM 22 1.146 +#define SCTP_MAP_SLIDE_RESULT 23 1.147 +#define SCTP_MAP_SLIDE_CLEARED 24 1.148 +#define SCTP_MAP_SLIDE_NONE 25 1.149 +#define SCTP_FR_T3_MARK_TIME 26 1.150 +#define SCTP_FR_T3_MARKED 27 1.151 +#define SCTP_FR_T3_STOPPED 28 1.152 +#define SCTP_FR_MARKED 30 1.153 +#define SCTP_CWND_LOG_NOADV_SS 31 1.154 +#define SCTP_CWND_LOG_NOADV_CA 32 1.155 +#define SCTP_MAX_BURST_APPLIED 33 1.156 +#define SCTP_MAX_IFP_APPLIED 34 1.157 +#define SCTP_MAX_BURST_ERROR_STOP 35 1.158 +#define SCTP_INCREASE_PEER_RWND 36 1.159 +#define SCTP_DECREASE_PEER_RWND 37 1.160 +#define SCTP_SET_PEER_RWND_VIA_SACK 38 1.161 +#define SCTP_LOG_MBCNT_INCREASE 39 1.162 +#define SCTP_LOG_MBCNT_DECREASE 40 1.163 +#define SCTP_LOG_MBCNT_CHKSET 41 1.164 +#define SCTP_LOG_NEW_SACK 42 1.165 +#define SCTP_LOG_TSN_ACKED 43 1.166 +#define SCTP_LOG_TSN_REVOKED 44 1.167 +#define SCTP_LOG_LOCK_TCB 45 1.168 +#define SCTP_LOG_LOCK_INP 46 1.169 +#define SCTP_LOG_LOCK_SOCK 47 1.170 +#define SCTP_LOG_LOCK_SOCKBUF_R 48 1.171 +#define SCTP_LOG_LOCK_SOCKBUF_S 49 1.172 +#define SCTP_LOG_LOCK_CREATE 50 1.173 +#define SCTP_LOG_INITIAL_RTT 51 1.174 +#define SCTP_LOG_RTTVAR 52 1.175 +#define SCTP_LOG_SBALLOC 53 1.176 +#define SCTP_LOG_SBFREE 54 1.177 +#define SCTP_LOG_SBRESULT 55 1.178 +#define SCTP_FR_DUPED 56 1.179 +#define SCTP_FR_MARKED_EARLY 57 1.180 +#define SCTP_FR_CWND_REPORT 58 1.181 +#define SCTP_FR_CWND_REPORT_START 59 1.182 +#define SCTP_FR_CWND_REPORT_STOP 60 1.183 +#define SCTP_CWND_LOG_FROM_SEND 61 1.184 +#define SCTP_CWND_INITIALIZATION 62 1.185 +#define SCTP_CWND_LOG_FROM_T3 63 1.186 +#define SCTP_CWND_LOG_FROM_SACK 64 1.187 +#define SCTP_CWND_LOG_NO_CUMACK 65 1.188 +#define SCTP_CWND_LOG_FROM_RESEND 66 1.189 +#define SCTP_FR_LOG_CHECK_STRIKE 67 1.190 +#define SCTP_SEND_NOW_COMPLETES 68 1.191 +#define SCTP_CWND_LOG_FILL_OUTQ_CALLED 69 1.192 +#define SCTP_CWND_LOG_FILL_OUTQ_FILLS 70 1.193 +#define SCTP_LOG_FREE_SENT 71 1.194 +#define SCTP_NAGLE_APPLIED 72 1.195 +#define SCTP_NAGLE_SKIPPED 73 1.196 +#define SCTP_WAKESND_FROM_SACK 74 1.197 +#define SCTP_WAKESND_FROM_FWDTSN 75 1.198 +#define SCTP_NOWAKE_FROM_SACK 76 1.199 +#define SCTP_CWNDLOG_PRESEND 77 1.200 +#define SCTP_CWNDLOG_ENDSEND 78 1.201 +#define SCTP_AT_END_OF_SACK 79 1.202 +#define SCTP_REASON_FOR_SC 80 1.203 +#define SCTP_BLOCK_LOG_INTO_BLKA 81 1.204 +#define SCTP_ENTER_USER_RECV 82 1.205 +#define SCTP_USER_RECV_SACKS 83 1.206 +#define SCTP_SORECV_BLOCKSA 84 1.207 +#define SCTP_SORECV_BLOCKSB 85 1.208 +#define SCTP_SORECV_DONE 86 1.209 +#define SCTP_SACK_RWND_UPDATE 87 1.210 +#define SCTP_SORECV_ENTER 88 1.211 +#define SCTP_SORECV_ENTERPL 89 1.212 +#define SCTP_MBUF_INPUT 90 1.213 +#define SCTP_MBUF_IALLOC 91 1.214 +#define SCTP_MBUF_IFREE 92 1.215 +#define SCTP_MBUF_ICOPY 93 1.216 +#define SCTP_MBUF_SPLIT 94 1.217 +#define SCTP_SORCV_FREECTL 95 1.218 +#define SCTP_SORCV_DOESCPY 96 1.219 +#define SCTP_SORCV_DOESLCK 97 1.220 +#define SCTP_SORCV_DOESADJ 98 1.221 +#define SCTP_SORCV_BOTWHILE 99 1.222 +#define SCTP_SORCV_PASSBF 100 1.223 +#define SCTP_SORCV_ADJD 101 1.224 +#define SCTP_UNKNOWN_MAX 102 1.225 +#define SCTP_RANDY_STUFF 103 1.226 +#define SCTP_RANDY_STUFF1 104 1.227 +#define SCTP_STRMOUT_LOG_ASSIGN 105 1.228 +#define SCTP_STRMOUT_LOG_SEND 106 1.229 +#define SCTP_FLIGHT_LOG_DOWN_CA 107 1.230 +#define SCTP_FLIGHT_LOG_UP 108 1.231 +#define SCTP_FLIGHT_LOG_DOWN_GAP 109 1.232 +#define SCTP_FLIGHT_LOG_DOWN_RSND 110 1.233 +#define SCTP_FLIGHT_LOG_UP_RSND 111 1.234 +#define SCTP_FLIGHT_LOG_DOWN_RSND_TO 112 1.235 +#define SCTP_FLIGHT_LOG_DOWN_WP 113 1.236 +#define SCTP_FLIGHT_LOG_UP_REVOKE 114 1.237 +#define SCTP_FLIGHT_LOG_DOWN_PDRP 115 1.238 +#define SCTP_FLIGHT_LOG_DOWN_PMTU 116 1.239 +#define SCTP_SACK_LOG_NORMAL 117 1.240 +#define SCTP_SACK_LOG_EXPRESS 118 1.241 +#define SCTP_MAP_TSN_ENTERS 119 1.242 +#define SCTP_THRESHOLD_CLEAR 120 1.243 +#define SCTP_THRESHOLD_INCR 121 1.244 +#define SCTP_FLIGHT_LOG_DWN_WP_FWD 122 1.245 +#define SCTP_FWD_TSN_CHECK 123 1.246 +#define SCTP_LOG_MAX_TYPES 124 1.247 +/* 1.248 + * To turn on various logging, you must first enable 'options KTR' and 1.249 + * you might want to bump the entires 'options KTR_ENTRIES=80000'. 1.250 + * To get something to log you define one of the logging defines. 1.251 + * (see LINT). 1.252 + * 1.253 + * This gets the compile in place, but you still need to turn the 1.254 + * logging flag on too in the sysctl (see in sctp.h). 1.255 + */ 1.256 + 1.257 +#define SCTP_LOG_EVENT_UNKNOWN 0 1.258 +#define SCTP_LOG_EVENT_CWND 1 1.259 +#define SCTP_LOG_EVENT_BLOCK 2 1.260 +#define SCTP_LOG_EVENT_STRM 3 1.261 +#define SCTP_LOG_EVENT_FR 4 1.262 +#define SCTP_LOG_EVENT_MAP 5 1.263 +#define SCTP_LOG_EVENT_MAXBURST 6 1.264 +#define SCTP_LOG_EVENT_RWND 7 1.265 +#define SCTP_LOG_EVENT_MBCNT 8 1.266 +#define SCTP_LOG_EVENT_SACK 9 1.267 +#define SCTP_LOG_LOCK_EVENT 10 1.268 +#define SCTP_LOG_EVENT_RTT 11 1.269 +#define SCTP_LOG_EVENT_SB 12 1.270 +#define SCTP_LOG_EVENT_NAGLE 13 1.271 +#define SCTP_LOG_EVENT_WAKE 14 1.272 +#define SCTP_LOG_MISC_EVENT 15 1.273 +#define SCTP_LOG_EVENT_CLOSE 16 1.274 +#define SCTP_LOG_EVENT_MBUF 17 1.275 +#define SCTP_LOG_CHUNK_PROC 18 1.276 +#define SCTP_LOG_ERROR_RET 19 1.277 + 1.278 +#define SCTP_LOG_MAX_EVENT 20 1.279 + 1.280 +#define SCTP_LOCK_UNKNOWN 2 1.281 + 1.282 + 1.283 +/* number of associations by default for zone allocation */ 1.284 +#define SCTP_MAX_NUM_OF_ASOC 40000 1.285 +/* how many addresses per assoc remote and local */ 1.286 +#define SCTP_SCALE_FOR_ADDR 2 1.287 + 1.288 +/* default AUTO_ASCONF mode enable(1)/disable(0) value (sysctl) */ 1.289 +#if defined(__APPLE__) 1.290 +#if !defined(SCTP_APPLE_AUTO_ASCONF) 1.291 +#define SCTP_DEFAULT_AUTO_ASCONF 0 1.292 +#else 1.293 +#define SCTP_DEFAULT_AUTO_ASCONF 1 1.294 +#endif 1.295 +#else 1.296 +#define SCTP_DEFAULT_AUTO_ASCONF 1 1.297 +#endif 1.298 + 1.299 +/* default MULTIPLE_ASCONF mode enable(1)/disable(0) value (sysctl) */ 1.300 +#define SCTP_DEFAULT_MULTIPLE_ASCONFS 0 1.301 + 1.302 +/* default MOBILITY_BASE mode enable(1)/disable(0) value (sysctl) */ 1.303 +#if defined(__APPLE__) 1.304 +#if !defined(SCTP_APPLE_MOBILITY_BASE) 1.305 +#define SCTP_DEFAULT_MOBILITY_BASE 0 1.306 +#else 1.307 +#define SCTP_DEFAULT_MOBILITY_BASE 1 1.308 +#endif 1.309 +#else 1.310 +#define SCTP_DEFAULT_MOBILITY_BASE 0 1.311 +#endif 1.312 + 1.313 +/* default MOBILITY_FASTHANDOFF mode enable(1)/disable(0) value (sysctl) */ 1.314 +#if defined(__APPLE__) 1.315 +#if !defined(SCTP_APPLE_MOBILITY_FASTHANDOFF) 1.316 +#define SCTP_DEFAULT_MOBILITY_FASTHANDOFF 0 1.317 +#else 1.318 +#define SCTP_DEFAULT_MOBILITY_FASTHANDOFF 1 1.319 +#endif 1.320 +#else 1.321 +#define SCTP_DEFAULT_MOBILITY_FASTHANDOFF 0 1.322 +#endif 1.323 + 1.324 +/* 1.325 + * Theshold for rwnd updates, we have to read (sb_hiwat >> 1.326 + * SCTP_RWND_HIWAT_SHIFT) before we will look to see if we need to send a 1.327 + * window update sack. When we look, we compare the last rwnd we sent vs the 1.328 + * current rwnd. It too must be greater than this value. Using 3 divdes the 1.329 + * hiwat by 8, so for 200k rwnd we need to read 24k. For a 64k rwnd we need 1.330 + * to read 8k. This seems about right.. I hope :-D.. we do set a 1.331 + * min of a MTU on it so if the rwnd is real small we will insist 1.332 + * on a full MTU of 1500 bytes. 1.333 + */ 1.334 +#define SCTP_RWND_HIWAT_SHIFT 3 1.335 + 1.336 +/* How much of the rwnd must the 1.337 + * message be taking up to start partial delivery. 1.338 + * We calculate this by shifing the hi_water (recv_win) 1.339 + * left the following .. set to 1, when a message holds 1.340 + * 1/2 the rwnd. If we set it to 2 when a message holds 1.341 + * 1/4 the rwnd...etc.. 1.342 + */ 1.343 + 1.344 +#define SCTP_PARTIAL_DELIVERY_SHIFT 1 1.345 + 1.346 +/* 1.347 + * default HMAC for cookies, etc... use one of the AUTH HMAC id's 1.348 + * SCTP_HMAC is the HMAC_ID to use 1.349 + * SCTP_SIGNATURE_SIZE is the digest length 1.350 + */ 1.351 +#define SCTP_HMAC SCTP_AUTH_HMAC_ID_SHA1 1.352 +#define SCTP_SIGNATURE_SIZE SCTP_AUTH_DIGEST_LEN_SHA1 1.353 +#define SCTP_SIGNATURE_ALOC_SIZE SCTP_SIGNATURE_SIZE 1.354 + 1.355 +/* 1.356 + * the SCTP protocol signature this includes the version number encoded in 1.357 + * the last 4 bits of the signature. 1.358 + */ 1.359 +#define PROTO_SIGNATURE_A 0x30000000 1.360 +#define SCTP_VERSION_NUMBER 0x3 1.361 + 1.362 +#define MAX_TSN 0xffffffff 1.363 + 1.364 +/* how many executions every N tick's */ 1.365 +#define SCTP_ITERATOR_MAX_AT_ONCE 20 1.366 + 1.367 +/* number of clock ticks between iterator executions */ 1.368 +#define SCTP_ITERATOR_TICKS 1 1.369 + 1.370 +/* 1.371 + * option: If you comment out the following you will receive the old behavior 1.372 + * of obeying cwnd for the fast retransmit algorithm. With this defined a FR 1.373 + * happens right away with-out waiting for the flightsize to drop below the 1.374 + * cwnd value (which is reduced by the FR to 1/2 the inflight packets). 1.375 + */ 1.376 +#define SCTP_IGNORE_CWND_ON_FR 1 1.377 + 1.378 +/* 1.379 + * Adds implementors guide behavior to only use newest highest update in SACK 1.380 + * gap ack's to figure out if you need to stroke a chunk for FR. 1.381 + */ 1.382 +#define SCTP_NO_FR_UNLESS_SEGMENT_SMALLER 1 1.383 + 1.384 +/* default max I can burst out after a fast retransmit, 0 disables it */ 1.385 +#define SCTP_DEF_MAX_BURST 4 1.386 +#define SCTP_DEF_HBMAX_BURST 4 1.387 +#define SCTP_DEF_FRMAX_BURST 4 1.388 + 1.389 +/* RTO calculation flag to say if it 1.390 + * is safe to determine local lan or not. 1.391 + */ 1.392 +#define SCTP_RTT_FROM_NON_DATA 0 1.393 +#define SCTP_RTT_FROM_DATA 1 1.394 + 1.395 + 1.396 +/* IP hdr (20/40) + 12+2+2 (enet) + sctp common 12 */ 1.397 +#define SCTP_FIRST_MBUF_RESV 68 1.398 +/* Packet transmit states in the sent field */ 1.399 +#define SCTP_DATAGRAM_UNSENT 0 1.400 +#define SCTP_DATAGRAM_SENT 1 1.401 +#define SCTP_DATAGRAM_RESEND1 2 /* not used (in code, but may 1.402 + * hit this value) */ 1.403 +#define SCTP_DATAGRAM_RESEND2 3 /* not used (in code, but may 1.404 + * hit this value) */ 1.405 +#define SCTP_DATAGRAM_RESEND 4 1.406 +#define SCTP_DATAGRAM_ACKED 10010 1.407 +#define SCTP_DATAGRAM_MARKED 20010 1.408 +#define SCTP_FORWARD_TSN_SKIP 30010 1.409 +#define SCTP_DATAGRAM_NR_ACKED 40010 1.410 + 1.411 +/* chunk output send from locations */ 1.412 +#define SCTP_OUTPUT_FROM_USR_SEND 0 1.413 +#define SCTP_OUTPUT_FROM_T3 1 1.414 +#define SCTP_OUTPUT_FROM_INPUT_ERROR 2 1.415 +#define SCTP_OUTPUT_FROM_CONTROL_PROC 3 1.416 +#define SCTP_OUTPUT_FROM_SACK_TMR 4 1.417 +#define SCTP_OUTPUT_FROM_SHUT_TMR 5 1.418 +#define SCTP_OUTPUT_FROM_HB_TMR 6 1.419 +#define SCTP_OUTPUT_FROM_SHUT_ACK_TMR 7 1.420 +#define SCTP_OUTPUT_FROM_ASCONF_TMR 8 1.421 +#define SCTP_OUTPUT_FROM_STRRST_TMR 9 1.422 +#define SCTP_OUTPUT_FROM_AUTOCLOSE_TMR 10 1.423 +#define SCTP_OUTPUT_FROM_EARLY_FR_TMR 11 1.424 +#define SCTP_OUTPUT_FROM_STRRST_REQ 12 1.425 +#define SCTP_OUTPUT_FROM_USR_RCVD 13 1.426 +#define SCTP_OUTPUT_FROM_COOKIE_ACK 14 1.427 +#define SCTP_OUTPUT_FROM_DRAIN 15 1.428 +#define SCTP_OUTPUT_FROM_CLOSING 16 1.429 +#define SCTP_OUTPUT_FROM_SOCKOPT 17 1.430 + 1.431 +/* SCTP chunk types are moved sctp.h for application (NAT, FW) use */ 1.432 + 1.433 +/* align to 32-bit sizes */ 1.434 +#define SCTP_SIZE32(x) ((((x) + 3) >> 2) << 2) 1.435 + 1.436 +#define IS_SCTP_CONTROL(a) ((a)->chunk_type != SCTP_DATA) 1.437 +#define IS_SCTP_DATA(a) ((a)->chunk_type == SCTP_DATA) 1.438 + 1.439 + 1.440 +/* SCTP parameter types */ 1.441 +/*************0x0000 series*************/ 1.442 +#define SCTP_HEARTBEAT_INFO 0x0001 1.443 +#if defined(__Userspace__) 1.444 +#define SCTP_CONN_ADDRESS 0x0004 1.445 +#endif 1.446 +#define SCTP_IPV4_ADDRESS 0x0005 1.447 +#define SCTP_IPV6_ADDRESS 0x0006 1.448 +#define SCTP_STATE_COOKIE 0x0007 1.449 +#define SCTP_UNRECOG_PARAM 0x0008 1.450 +#define SCTP_COOKIE_PRESERVE 0x0009 1.451 +#define SCTP_HOSTNAME_ADDRESS 0x000b 1.452 +#define SCTP_SUPPORTED_ADDRTYPE 0x000c 1.453 + 1.454 +/* draft-ietf-stewart-tsvwg-strreset-xxx */ 1.455 +#define SCTP_STR_RESET_OUT_REQUEST 0x000d 1.456 +#define SCTP_STR_RESET_IN_REQUEST 0x000e 1.457 +#define SCTP_STR_RESET_TSN_REQUEST 0x000f 1.458 +#define SCTP_STR_RESET_RESPONSE 0x0010 1.459 +#define SCTP_STR_RESET_ADD_OUT_STREAMS 0x0011 1.460 +#define SCTP_STR_RESET_ADD_IN_STREAMS 0x0012 1.461 + 1.462 +#define SCTP_MAX_RESET_PARAMS 2 1.463 +#define SCTP_STREAM_RESET_TSN_DELTA 0x1000 1.464 + 1.465 +/*************0x4000 series*************/ 1.466 + 1.467 +/*************0x8000 series*************/ 1.468 +#define SCTP_ECN_CAPABLE 0x8000 1.469 + 1.470 +/* draft-ietf-tsvwg-auth-xxx */ 1.471 +#define SCTP_RANDOM 0x8002 1.472 +#define SCTP_CHUNK_LIST 0x8003 1.473 +#define SCTP_HMAC_LIST 0x8004 1.474 +/* 1.475 + * draft-ietf-tsvwg-addip-sctp-xx param=0x8008 len=0xNNNN Byte | Byte | Byte 1.476 + * | Byte Byte | Byte ... 1.477 + * 1.478 + * Where each byte is a chunk type extension supported. For example, to support 1.479 + * all chunks one would have (in hex): 1.480 + * 1.481 + * 80 01 00 09 C0 C1 80 81 82 00 00 00 1.482 + * 1.483 + * Has the parameter. C0 = PR-SCTP (RFC3758) C1, 80 = ASCONF (addip draft) 81 1.484 + * = Packet Drop 82 = Stream Reset 83 = Authentication 1.485 + */ 1.486 +#define SCTP_SUPPORTED_CHUNK_EXT 0x8008 1.487 + 1.488 +/*************0xC000 series*************/ 1.489 +#define SCTP_PRSCTP_SUPPORTED 0xc000 1.490 +/* draft-ietf-tsvwg-addip-sctp */ 1.491 +#define SCTP_ADD_IP_ADDRESS 0xc001 1.492 +#define SCTP_DEL_IP_ADDRESS 0xc002 1.493 +#define SCTP_ERROR_CAUSE_IND 0xc003 1.494 +#define SCTP_SET_PRIM_ADDR 0xc004 1.495 +#define SCTP_SUCCESS_REPORT 0xc005 1.496 +#define SCTP_ULP_ADAPTATION 0xc006 1.497 +/* behave-nat-draft */ 1.498 +#define SCTP_HAS_NAT_SUPPORT 0xc007 1.499 +#define SCTP_NAT_VTAGS 0xc008 1.500 + 1.501 +/* bits for TOS field */ 1.502 +#define SCTP_ECT0_BIT 0x02 1.503 +#define SCTP_ECT1_BIT 0x01 1.504 +#define SCTP_CE_BITS 0x03 1.505 + 1.506 +/* below turns off above */ 1.507 +#define SCTP_FLEXIBLE_ADDRESS 0x20 1.508 +#define SCTP_NO_HEARTBEAT 0x40 1.509 + 1.510 +/* mask to get sticky */ 1.511 +#define SCTP_STICKY_OPTIONS_MASK 0x0c 1.512 + 1.513 + 1.514 +/* 1.515 + * SCTP states for internal state machine XXX (should match "user" values) 1.516 + */ 1.517 +#define SCTP_STATE_EMPTY 0x0000 1.518 +#define SCTP_STATE_INUSE 0x0001 1.519 +#define SCTP_STATE_COOKIE_WAIT 0x0002 1.520 +#define SCTP_STATE_COOKIE_ECHOED 0x0004 1.521 +#define SCTP_STATE_OPEN 0x0008 1.522 +#define SCTP_STATE_SHUTDOWN_SENT 0x0010 1.523 +#define SCTP_STATE_SHUTDOWN_RECEIVED 0x0020 1.524 +#define SCTP_STATE_SHUTDOWN_ACK_SENT 0x0040 1.525 +#define SCTP_STATE_SHUTDOWN_PENDING 0x0080 1.526 +#define SCTP_STATE_CLOSED_SOCKET 0x0100 1.527 +#define SCTP_STATE_ABOUT_TO_BE_FREED 0x0200 1.528 +#define SCTP_STATE_PARTIAL_MSG_LEFT 0x0400 1.529 +#define SCTP_STATE_WAS_ABORTED 0x0800 1.530 +#define SCTP_STATE_IN_ACCEPT_QUEUE 0x1000 1.531 +#define SCTP_STATE_MASK 0x007f 1.532 + 1.533 +#define SCTP_GET_STATE(asoc) ((asoc)->state & SCTP_STATE_MASK) 1.534 +#define SCTP_SET_STATE(asoc, newstate) ((asoc)->state = ((asoc)->state & ~SCTP_STATE_MASK) | newstate) 1.535 +#define SCTP_CLEAR_SUBSTATE(asoc, substate) ((asoc)->state &= ~substate) 1.536 +#define SCTP_ADD_SUBSTATE(asoc, substate) ((asoc)->state |= substate) 1.537 + 1.538 +/* SCTP reachability state for each address */ 1.539 +#define SCTP_ADDR_REACHABLE 0x001 1.540 +#define SCTP_ADDR_NO_PMTUD 0x002 1.541 +#define SCTP_ADDR_NOHB 0x004 1.542 +#define SCTP_ADDR_BEING_DELETED 0x008 1.543 +#define SCTP_ADDR_NOT_IN_ASSOC 0x010 1.544 +#define SCTP_ADDR_OUT_OF_SCOPE 0x080 1.545 +#define SCTP_ADDR_UNCONFIRMED 0x200 1.546 +#define SCTP_ADDR_REQ_PRIMARY 0x400 1.547 +/* JRS 5/13/07 - Added potentially failed state for CMT PF */ 1.548 +#define SCTP_ADDR_PF 0x800 1.549 + 1.550 +/* bound address types (e.g. valid address types to allow) */ 1.551 +#define SCTP_BOUND_V6 0x01 1.552 +#define SCTP_BOUND_V4 0x02 1.553 + 1.554 +/* 1.555 + * what is the default number of mbufs in a chain I allow before switching to 1.556 + * a cluster 1.557 + */ 1.558 +#define SCTP_DEFAULT_MBUFS_IN_CHAIN 5 1.559 + 1.560 +/* How long a cookie lives in milli-seconds */ 1.561 +#define SCTP_DEFAULT_COOKIE_LIFE 60000 1.562 + 1.563 +/* Maximum the mapping array will grow to (TSN mapping array) */ 1.564 +#define SCTP_MAPPING_ARRAY 512 1.565 + 1.566 +/* size of the inital malloc on the mapping array */ 1.567 +#define SCTP_INITIAL_MAPPING_ARRAY 16 1.568 +/* how much we grow the mapping array each call */ 1.569 +#define SCTP_MAPPING_ARRAY_INCR 32 1.570 + 1.571 +/* 1.572 + * Here we define the timer types used by the implementation as arguments in 1.573 + * the set/get timer type calls. 1.574 + */ 1.575 +#define SCTP_TIMER_INIT 0 1.576 +#define SCTP_TIMER_RECV 1 1.577 +#define SCTP_TIMER_SEND 2 1.578 +#define SCTP_TIMER_HEARTBEAT 3 1.579 +#define SCTP_TIMER_PMTU 4 1.580 +#define SCTP_TIMER_MAXSHUTDOWN 5 1.581 +#define SCTP_TIMER_SIGNATURE 6 1.582 +/* 1.583 + * number of timer types in the base SCTP structure used in the set/get and 1.584 + * has the base default. 1.585 + */ 1.586 +#define SCTP_NUM_TMRS 7 1.587 + 1.588 +/* timer types */ 1.589 +#define SCTP_TIMER_TYPE_NONE 0 1.590 +#define SCTP_TIMER_TYPE_SEND 1 1.591 +#define SCTP_TIMER_TYPE_INIT 2 1.592 +#define SCTP_TIMER_TYPE_RECV 3 1.593 +#define SCTP_TIMER_TYPE_SHUTDOWN 4 1.594 +#define SCTP_TIMER_TYPE_HEARTBEAT 5 1.595 +#define SCTP_TIMER_TYPE_COOKIE 6 1.596 +#define SCTP_TIMER_TYPE_NEWCOOKIE 7 1.597 +#define SCTP_TIMER_TYPE_PATHMTURAISE 8 1.598 +#define SCTP_TIMER_TYPE_SHUTDOWNACK 9 1.599 +#define SCTP_TIMER_TYPE_ASCONF 10 1.600 +#define SCTP_TIMER_TYPE_SHUTDOWNGUARD 11 1.601 +#define SCTP_TIMER_TYPE_AUTOCLOSE 12 1.602 +#define SCTP_TIMER_TYPE_EVENTWAKE 13 1.603 +#define SCTP_TIMER_TYPE_STRRESET 14 1.604 +#define SCTP_TIMER_TYPE_INPKILL 15 1.605 +#define SCTP_TIMER_TYPE_ASOCKILL 16 1.606 +#define SCTP_TIMER_TYPE_ADDR_WQ 17 1.607 +#define SCTP_TIMER_TYPE_ZERO_COPY 18 1.608 +#define SCTP_TIMER_TYPE_ZCOPY_SENDQ 19 1.609 +#define SCTP_TIMER_TYPE_PRIM_DELETED 20 1.610 +/* add new timers here - and increment LAST */ 1.611 +#define SCTP_TIMER_TYPE_LAST 21 1.612 + 1.613 +#define SCTP_IS_TIMER_TYPE_VALID(t) (((t) > SCTP_TIMER_TYPE_NONE) && \ 1.614 + ((t) < SCTP_TIMER_TYPE_LAST)) 1.615 + 1.616 + 1.617 +#if defined(__APPLE__) 1.618 +/* Number of ticks to run the main timer at in msec */ 1.619 +#define SCTP_MAIN_TIMER_DEFAULT 10 1.620 +#endif 1.621 + 1.622 +/* max number of TSN's dup'd that I will hold */ 1.623 +#define SCTP_MAX_DUP_TSNS 20 1.624 + 1.625 +/* 1.626 + * Here we define the types used when setting the retry amounts. 1.627 + */ 1.628 +/* How many drop re-attempts we make on INIT/COOKIE-ECHO */ 1.629 +#define SCTP_RETRY_DROPPED_THRESH 4 1.630 + 1.631 +/* 1.632 + * Maxmium number of chunks a single association can have on it. Note that 1.633 + * this is a squishy number since the count can run over this if the user 1.634 + * sends a large message down .. the fragmented chunks don't count until 1.635 + * AFTER the message is on queue.. it would be the next send that blocks 1.636 + * things. This number will get tuned up at boot in the sctp_init and use the 1.637 + * number of clusters as a base. This way high bandwidth environments will 1.638 + * not get impacted by the lower bandwidth sending a bunch of 1 byte chunks 1.639 + */ 1.640 +#ifdef __Panda__ 1.641 +#define SCTP_ASOC_MAX_CHUNKS_ON_QUEUE 10240 1.642 +#else 1.643 +#define SCTP_ASOC_MAX_CHUNKS_ON_QUEUE 512 1.644 +#endif 1.645 + 1.646 + 1.647 +/* The conversion from time to ticks and vice versa is done by rounding 1.648 + * upwards. This way we can test in the code the time to be positive and 1.649 + * know that this corresponds to a positive number of ticks. 1.650 + */ 1.651 +#define MSEC_TO_TICKS(x) ((hz == 1000) ? x : ((((x) * hz) + 999) / 1000)) 1.652 +#define TICKS_TO_MSEC(x) ((hz == 1000) ? x : ((((x) * 1000) + (hz - 1)) / hz)) 1.653 + 1.654 +#define SEC_TO_TICKS(x) ((x) * hz) 1.655 +#define TICKS_TO_SEC(x) (((x) + (hz - 1)) / hz) 1.656 + 1.657 +/* 1.658 + * Basically the minimum amount of time before I do a early FR. Making this 1.659 + * value to low will cause duplicate retransmissions. 1.660 + */ 1.661 +#define SCTP_MINFR_MSEC_TIMER 250 1.662 +/* The floor this value is allowed to fall to when starting a timer. */ 1.663 +#define SCTP_MINFR_MSEC_FLOOR 20 1.664 + 1.665 +/* init timer def = 1 sec */ 1.666 +#define SCTP_INIT_SEC 1 1.667 + 1.668 +/* send timer def = 1 seconds */ 1.669 +#define SCTP_SEND_SEC 1 1.670 + 1.671 +/* recv timer def = 200ms */ 1.672 +#define SCTP_RECV_MSEC 200 1.673 + 1.674 +/* 30 seconds + RTO (in ms) */ 1.675 +#define SCTP_HB_DEFAULT_MSEC 30000 1.676 + 1.677 +/* Max time I will wait for Shutdown to complete */ 1.678 +#define SCTP_DEF_MAX_SHUTDOWN_SEC 180 1.679 + 1.680 + 1.681 +/* 1.682 + * This is how long a secret lives, NOT how long a cookie lives how many 1.683 + * ticks the current secret will live. 1.684 + */ 1.685 +#define SCTP_DEFAULT_SECRET_LIFE_SEC 3600 1.686 + 1.687 +#define SCTP_RTO_UPPER_BOUND (60000) /* 60 sec in ms */ 1.688 +#define SCTP_RTO_LOWER_BOUND (1000) /* 1 sec is ms */ 1.689 +#define SCTP_RTO_INITIAL (3000) /* 3 sec in ms */ 1.690 + 1.691 + 1.692 +#define SCTP_INP_KILL_TIMEOUT 20 /* number of ms to retry kill of inpcb */ 1.693 +#define SCTP_ASOC_KILL_TIMEOUT 10 /* number of ms to retry kill of inpcb */ 1.694 + 1.695 +#define SCTP_DEF_MAX_INIT 8 1.696 +#define SCTP_DEF_MAX_SEND 10 1.697 +#define SCTP_DEF_MAX_PATH_RTX 5 1.698 +#define SCTP_DEF_PATH_PF_THRESHOLD SCTP_DEF_MAX_PATH_RTX 1.699 + 1.700 +#define SCTP_DEF_PMTU_RAISE_SEC 600 /* 10 min between raise attempts */ 1.701 + 1.702 + 1.703 +/* How many streams I request initally by default */ 1.704 +#define SCTP_OSTREAM_INITIAL 10 1.705 +#define SCTP_ISTREAM_INITIAL 2048 1.706 + 1.707 +/* 1.708 + * How many smallest_mtu's need to increase before a window update sack is 1.709 + * sent (should be a power of 2). 1.710 + */ 1.711 +/* Send window update (incr * this > hiwat). Should be a power of 2 */ 1.712 +#define SCTP_MINIMAL_RWND (4096) /* minimal rwnd */ 1.713 + 1.714 +#define SCTP_ADDRMAX 16 1.715 + 1.716 +/* SCTP DEBUG Switch parameters */ 1.717 +#define SCTP_DEBUG_TIMER1 0x00000001 1.718 +#define SCTP_DEBUG_TIMER2 0x00000002 /* unused */ 1.719 +#define SCTP_DEBUG_TIMER3 0x00000004 /* unused */ 1.720 +#define SCTP_DEBUG_TIMER4 0x00000008 1.721 +#define SCTP_DEBUG_OUTPUT1 0x00000010 1.722 +#define SCTP_DEBUG_OUTPUT2 0x00000020 1.723 +#define SCTP_DEBUG_OUTPUT3 0x00000040 1.724 +#define SCTP_DEBUG_OUTPUT4 0x00000080 1.725 +#define SCTP_DEBUG_UTIL1 0x00000100 1.726 +#define SCTP_DEBUG_UTIL2 0x00000200 /* unused */ 1.727 +#define SCTP_DEBUG_AUTH1 0x00000400 1.728 +#define SCTP_DEBUG_AUTH2 0x00000800 /* unused */ 1.729 +#define SCTP_DEBUG_INPUT1 0x00001000 1.730 +#define SCTP_DEBUG_INPUT2 0x00002000 1.731 +#define SCTP_DEBUG_INPUT3 0x00004000 1.732 +#define SCTP_DEBUG_INPUT4 0x00008000 /* unused */ 1.733 +#define SCTP_DEBUG_ASCONF1 0x00010000 1.734 +#define SCTP_DEBUG_ASCONF2 0x00020000 1.735 +#define SCTP_DEBUG_OUTPUT5 0x00040000 /* unused */ 1.736 +#define SCTP_DEBUG_XXX 0x00080000 /* unused */ 1.737 +#define SCTP_DEBUG_PCB1 0x00100000 1.738 +#define SCTP_DEBUG_PCB2 0x00200000 /* unused */ 1.739 +#define SCTP_DEBUG_PCB3 0x00400000 1.740 +#define SCTP_DEBUG_PCB4 0x00800000 1.741 +#define SCTP_DEBUG_INDATA1 0x01000000 1.742 +#define SCTP_DEBUG_INDATA2 0x02000000 /* unused */ 1.743 +#define SCTP_DEBUG_INDATA3 0x04000000 /* unused */ 1.744 +#define SCTP_DEBUG_CRCOFFLOAD 0x08000000 /* unused */ 1.745 +#define SCTP_DEBUG_USRREQ1 0x10000000 /* unused */ 1.746 +#define SCTP_DEBUG_USRREQ2 0x20000000 /* unused */ 1.747 +#define SCTP_DEBUG_PEEL1 0x40000000 1.748 +#if defined(__Userspace__) 1.749 +#define SCTP_DEBUG_USR 0x80000000 1.750 +#else 1.751 +#define SCTP_DEBUG_XXXXX 0x80000000 /* unused */ 1.752 +#endif 1.753 +#define SCTP_DEBUG_ALL 0x7ff3ffff 1.754 +#define SCTP_DEBUG_NOISY 0x00040000 1.755 + 1.756 +/* What sender needs to see to avoid SWS or we consider peers rwnd 0 */ 1.757 +#define SCTP_SWS_SENDER_DEF 1420 1.758 + 1.759 +/* 1.760 + * SWS is scaled to the sb_hiwat of the socket. A value of 2 is hiwat/4, 1 1.761 + * would be hiwat/2 etc. 1.762 + */ 1.763 +/* What receiver needs to see in sockbuf or we tell peer its 1 */ 1.764 +#define SCTP_SWS_RECEIVER_DEF 3000 1.765 + 1.766 +#define SCTP_INITIAL_CWND 4380 1.767 + 1.768 +#define SCTP_DEFAULT_MTU 1500 /* emergency default MTU */ 1.769 +/* amount peer is obligated to have in rwnd or I will abort */ 1.770 +#define SCTP_MIN_RWND 1500 1.771 + 1.772 +#define SCTP_DEFAULT_MAXSEGMENT 65535 1.773 + 1.774 +#define SCTP_CHUNK_BUFFER_SIZE 512 1.775 +#define SCTP_PARAM_BUFFER_SIZE 512 1.776 + 1.777 +/* small chunk store for looking at chunk_list in auth */ 1.778 +#define SCTP_SMALL_CHUNK_STORE 260 1.779 + 1.780 +#define SCTP_HOW_MANY_SECRETS 2 /* how many secrets I keep */ 1.781 + 1.782 +#define SCTP_NUMBER_OF_SECRETS 8 /* or 8 * 4 = 32 octets */ 1.783 +#define SCTP_SECRET_SIZE 32 /* number of octets in a 256 bits */ 1.784 + 1.785 + 1.786 +/* 1.787 + * SCTP upper layer notifications 1.788 + */ 1.789 +#define SCTP_NOTIFY_ASSOC_UP 1 1.790 +#define SCTP_NOTIFY_ASSOC_DOWN 2 1.791 +#define SCTP_NOTIFY_INTERFACE_DOWN 3 1.792 +#define SCTP_NOTIFY_INTERFACE_UP 4 1.793 +#define SCTP_NOTIFY_SENT_DG_FAIL 5 1.794 +#define SCTP_NOTIFY_UNSENT_DG_FAIL 6 1.795 +#define SCTP_NOTIFY_SPECIAL_SP_FAIL 7 1.796 +#define SCTP_NOTIFY_ASSOC_LOC_ABORTED 8 1.797 +#define SCTP_NOTIFY_ASSOC_REM_ABORTED 9 1.798 +#define SCTP_NOTIFY_ASSOC_RESTART 10 1.799 +#define SCTP_NOTIFY_PEER_SHUTDOWN 11 1.800 +#define SCTP_NOTIFY_ASCONF_ADD_IP 12 1.801 +#define SCTP_NOTIFY_ASCONF_DELETE_IP 13 1.802 +#define SCTP_NOTIFY_ASCONF_SET_PRIMARY 14 1.803 +#define SCTP_NOTIFY_PARTIAL_DELVIERY_INDICATION 15 1.804 +#define SCTP_NOTIFY_INTERFACE_CONFIRMED 16 1.805 +#define SCTP_NOTIFY_STR_RESET_RECV 17 1.806 +#define SCTP_NOTIFY_STR_RESET_SEND 18 1.807 +#define SCTP_NOTIFY_STR_RESET_FAILED_OUT 19 1.808 +#define SCTP_NOTIFY_STR_RESET_FAILED_IN 20 1.809 +#define SCTP_NOTIFY_STR_RESET_DENIED_OUT 21 1.810 +#define SCTP_NOTIFY_STR_RESET_DENIED_IN 22 1.811 +#define SCTP_NOTIFY_AUTH_NEW_KEY 23 1.812 +#define SCTP_NOTIFY_AUTH_FREE_KEY 24 1.813 +#define SCTP_NOTIFY_NO_PEER_AUTH 25 1.814 +#define SCTP_NOTIFY_SENDER_DRY 26 1.815 +#define SCTP_NOTIFY_REMOTE_ERROR 27 1.816 + 1.817 +/* This is the value for messages that are NOT completely 1.818 + * copied down where we will start to split the message. 1.819 + * So, with our default, we split only if the piece we 1.820 + * want to take will fill up a full MTU (assuming 1.821 + * a 1500 byte MTU). 1.822 + */ 1.823 +#define SCTP_DEFAULT_SPLIT_POINT_MIN 2904 1.824 + 1.825 +/* ABORT CODES and other tell-tale location 1.826 + * codes are generated by adding the below 1.827 + * to the instance id. 1.828 + */ 1.829 + 1.830 +/* File defines */ 1.831 +#define SCTP_FROM_SCTP_INPUT 0x10000000 1.832 +#define SCTP_FROM_SCTP_PCB 0x20000000 1.833 +#define SCTP_FROM_SCTP_INDATA 0x30000000 1.834 +#define SCTP_FROM_SCTP_TIMER 0x40000000 1.835 +#define SCTP_FROM_SCTP_USRREQ 0x50000000 1.836 +#define SCTP_FROM_SCTPUTIL 0x60000000 1.837 +#define SCTP_FROM_SCTP6_USRREQ 0x70000000 1.838 +#define SCTP_FROM_SCTP_ASCONF 0x80000000 1.839 +#define SCTP_FROM_SCTP_OUTPUT 0x90000000 1.840 +#define SCTP_FROM_SCTP_PEELOFF 0xa0000000 1.841 +#define SCTP_FROM_SCTP_PANDA 0xb0000000 1.842 +#define SCTP_FROM_SCTP_SYSCTL 0xc0000000 1.843 + 1.844 +/* Location ID's */ 1.845 +#define SCTP_LOC_1 0x00000001 1.846 +#define SCTP_LOC_2 0x00000002 1.847 +#define SCTP_LOC_3 0x00000003 1.848 +#define SCTP_LOC_4 0x00000004 1.849 +#define SCTP_LOC_5 0x00000005 1.850 +#define SCTP_LOC_6 0x00000006 1.851 +#define SCTP_LOC_7 0x00000007 1.852 +#define SCTP_LOC_8 0x00000008 1.853 +#define SCTP_LOC_9 0x00000009 1.854 +#define SCTP_LOC_10 0x0000000a 1.855 +#define SCTP_LOC_11 0x0000000b 1.856 +#define SCTP_LOC_12 0x0000000c 1.857 +#define SCTP_LOC_13 0x0000000d 1.858 +#define SCTP_LOC_14 0x0000000e 1.859 +#define SCTP_LOC_15 0x0000000f 1.860 +#define SCTP_LOC_16 0x00000010 1.861 +#define SCTP_LOC_17 0x00000011 1.862 +#define SCTP_LOC_18 0x00000012 1.863 +#define SCTP_LOC_19 0x00000013 1.864 +#define SCTP_LOC_20 0x00000014 1.865 +#define SCTP_LOC_21 0x00000015 1.866 +#define SCTP_LOC_22 0x00000016 1.867 +#define SCTP_LOC_23 0x00000017 1.868 +#define SCTP_LOC_24 0x00000018 1.869 +#define SCTP_LOC_25 0x00000019 1.870 +#define SCTP_LOC_26 0x0000001a 1.871 +#define SCTP_LOC_27 0x0000001b 1.872 +#define SCTP_LOC_28 0x0000001c 1.873 +#define SCTP_LOC_29 0x0000001d 1.874 +#define SCTP_LOC_30 0x0000001e 1.875 +#define SCTP_LOC_31 0x0000001f 1.876 +#define SCTP_LOC_32 0x00000020 1.877 +#define SCTP_LOC_33 0x00000021 1.878 + 1.879 + 1.880 +/* Free assoc codes */ 1.881 +#define SCTP_NORMAL_PROC 0 1.882 +#define SCTP_PCBFREE_NOFORCE 1 1.883 +#define SCTP_PCBFREE_FORCE 2 1.884 + 1.885 +/* From codes for adding addresses */ 1.886 +#define SCTP_ADDR_IS_CONFIRMED 8 1.887 +#define SCTP_ADDR_DYNAMIC_ADDED 6 1.888 +#define SCTP_IN_COOKIE_PROC 100 1.889 +#define SCTP_ALLOC_ASOC 1 1.890 +#define SCTP_LOAD_ADDR_2 2 1.891 +#define SCTP_LOAD_ADDR_3 3 1.892 +#define SCTP_LOAD_ADDR_4 4 1.893 +#define SCTP_LOAD_ADDR_5 5 1.894 + 1.895 +#define SCTP_DONOT_SETSCOPE 0 1.896 +#define SCTP_DO_SETSCOPE 1 1.897 + 1.898 + 1.899 +/* This value determines the default for when 1.900 + * we try to add more on the send queue., if 1.901 + * there is room. This prevents us from cycling 1.902 + * into the copy_resume routine to often if 1.903 + * we have not got enough space to add a decent 1.904 + * enough size message. Note that if we have enough 1.905 + * space to complete the message copy we will always 1.906 + * add to the message, no matter what the size. Its 1.907 + * only when we reach the point that we have some left 1.908 + * to add, there is only room for part of it that we 1.909 + * will use this threshold. Its also a sysctl. 1.910 + */ 1.911 +#define SCTP_DEFAULT_ADD_MORE 1452 1.912 + 1.913 +#ifndef SCTP_PCBHASHSIZE 1.914 +/* default number of association hash buckets in each endpoint */ 1.915 +#define SCTP_PCBHASHSIZE 256 1.916 +#endif 1.917 +#ifndef SCTP_TCBHASHSIZE 1.918 +#define SCTP_TCBHASHSIZE 1024 1.919 +#endif 1.920 + 1.921 +#ifndef SCTP_CHUNKQUEUE_SCALE 1.922 +#define SCTP_CHUNKQUEUE_SCALE 10 1.923 +#endif 1.924 + 1.925 +#ifdef __FreeBSD__ 1.926 +/* clock variance is 1 ms */ 1.927 +#define SCTP_CLOCK_GRANULARITY 1 1.928 +#else 1.929 +/* clock variance is 10 ms */ 1.930 +#define SCTP_CLOCK_GRANULARITY 10 1.931 +#endif 1.932 +#define IP_HDR_SIZE 40 /* we use the size of a IP6 header here this 1.933 + * detracts a small amount for ipv4 but it 1.934 + * simplifies the ipv6 addition */ 1.935 + 1.936 +/* Argument magic number for sctp_inpcb_free() */ 1.937 + 1.938 +/* third argument */ 1.939 +#define SCTP_CALLED_DIRECTLY_NOCMPSET 0 1.940 +#define SCTP_CALLED_AFTER_CMPSET_OFCLOSE 1 1.941 +#define SCTP_CALLED_FROM_INPKILL_TIMER 2 1.942 +/* second argument */ 1.943 +#define SCTP_FREE_SHOULD_USE_ABORT 1 1.944 +#define SCTP_FREE_SHOULD_USE_GRACEFUL_CLOSE 0 1.945 + 1.946 +#ifndef IPPROTO_SCTP 1.947 +#define IPPROTO_SCTP 132 /* the Official IANA number :-) */ 1.948 +#endif /* !IPPROTO_SCTP */ 1.949 + 1.950 +#define SCTP_MAX_DATA_BUNDLING 256 1.951 + 1.952 +/* modular comparison */ 1.953 +/* See RFC 1982 for details. */ 1.954 +#define SCTP_SSN_GT(a, b) (((a < b) && ((uint16_t)(b - a) > (1U<<15))) || \ 1.955 + ((a > b) && ((uint16_t)(a - b) < (1U<<15)))) 1.956 +#define SCTP_SSN_GE(a, b) (SCTP_SSN_GT(a, b) || (a == b)) 1.957 +#define SCTP_TSN_GT(a, b) (((a < b) && ((uint32_t)(b - a) > (1U<<31))) || \ 1.958 + ((a > b) && ((uint32_t)(a - b) < (1U<<31)))) 1.959 +#define SCTP_TSN_GE(a, b) (SCTP_TSN_GT(a, b) || (a == b)) 1.960 + 1.961 +/* Mapping array manipulation routines */ 1.962 +#define SCTP_IS_TSN_PRESENT(arry, gap) ((arry[(gap >> 3)] >> (gap & 0x07)) & 0x01) 1.963 +#define SCTP_SET_TSN_PRESENT(arry, gap) (arry[(gap >> 3)] |= (0x01 << ((gap & 0x07)))) 1.964 +#define SCTP_UNSET_TSN_PRESENT(arry, gap) (arry[(gap >> 3)] &= ((~(0x01 << ((gap & 0x07)))) & 0xff)) 1.965 +#define SCTP_CALC_TSN_TO_GAP(gap, tsn, mapping_tsn) do { \ 1.966 + if (tsn >= mapping_tsn) { \ 1.967 + gap = tsn - mapping_tsn; \ 1.968 + } else { \ 1.969 + gap = (MAX_TSN - mapping_tsn) + tsn + 1; \ 1.970 + } \ 1.971 + } while (0) 1.972 + 1.973 + 1.974 +#define SCTP_RETRAN_DONE -1 1.975 +#define SCTP_RETRAN_EXIT -2 1.976 + 1.977 +/* 1.978 + * This value defines the number of vtag block time wait entry's per list 1.979 + * element. Each entry will take 2 4 byte ints (and of course the overhead 1.980 + * of the next pointer as well). Using 15 as an example will yield * ((8 * 1.981 + * 15) + 8) or 128 bytes of overhead for each timewait block that gets 1.982 + * initialized. Increasing it to 31 would yeild 256 bytes per block. 1.983 + */ 1.984 +#define SCTP_NUMBER_IN_VTAG_BLOCK 15 1.985 +/* 1.986 + * If we use the STACK option, we have an array of this size head pointers. 1.987 + * This array is mod'd the with the size to find which bucket and then all 1.988 + * entries must be searched to see if the tag is in timed wait. If so we 1.989 + * reject it. 1.990 + */ 1.991 +#define SCTP_STACK_VTAG_HASH_SIZE 32 1.992 + 1.993 +/* 1.994 + * Number of seconds of time wait for a vtag. 1.995 + */ 1.996 +#define SCTP_TIME_WAIT 60 1.997 + 1.998 +/* How many micro seconds is the cutoff from 1.999 + * local lan type rtt's 1.1000 + */ 1.1001 + /* 1.1002 + * We allow 900us for the rtt. 1.1003 + */ 1.1004 +#define SCTP_LOCAL_LAN_RTT 900 1.1005 +#define SCTP_LAN_UNKNOWN 0 1.1006 +#define SCTP_LAN_LOCAL 1 1.1007 +#define SCTP_LAN_INTERNET 2 1.1008 + 1.1009 +#define SCTP_SEND_BUFFER_SPLITTING 0x00000001 1.1010 +#define SCTP_RECV_BUFFER_SPLITTING 0x00000002 1.1011 + 1.1012 +/* The system retains a cache of free chunks such to 1.1013 + * cut down on calls the memory allocation system. There 1.1014 + * is a per association limit of free items and a overall 1.1015 + * system limit. If either one gets hit then the resource 1.1016 + * stops being cached. 1.1017 + */ 1.1018 + 1.1019 +#define SCTP_DEF_ASOC_RESC_LIMIT 10 1.1020 +#define SCTP_DEF_SYSTEM_RESC_LIMIT 1000 1.1021 + 1.1022 +/*- 1.1023 + * defines for socket lock states. 1.1024 + * Used by __APPLE__ and SCTP_SO_LOCK_TESTING 1.1025 + */ 1.1026 +#define SCTP_SO_LOCKED 1 1.1027 +#define SCTP_SO_NOT_LOCKED 0 1.1028 + 1.1029 + 1.1030 +#define SCTP_HOLDS_LOCK 1 1.1031 +#define SCTP_NOT_LOCKED 0 1.1032 + 1.1033 +/*- 1.1034 + * For address locks, do we hold the lock? 1.1035 + */ 1.1036 +#define SCTP_ADDR_LOCKED 1 1.1037 +#define SCTP_ADDR_NOT_LOCKED 0 1.1038 + 1.1039 +#define IN4_ISPRIVATE_ADDRESS(a) \ 1.1040 + ((((uint8_t *)&(a)->s_addr)[0] == 10) || \ 1.1041 + ((((uint8_t *)&(a)->s_addr)[0] == 172) && \ 1.1042 + (((uint8_t *)&(a)->s_addr)[1] >= 16) && \ 1.1043 + (((uint8_t *)&(a)->s_addr)[1] <= 32)) || \ 1.1044 + ((((uint8_t *)&(a)->s_addr)[0] == 192) && \ 1.1045 + (((uint8_t *)&(a)->s_addr)[1] == 168))) 1.1046 + 1.1047 +#define IN4_ISLOOPBACK_ADDRESS(a) \ 1.1048 + ((((uint8_t *)&(a)->s_addr)[0] == 127) && \ 1.1049 + (((uint8_t *)&(a)->s_addr)[1] == 0) && \ 1.1050 + (((uint8_t *)&(a)->s_addr)[2] == 0) && \ 1.1051 + (((uint8_t *)&(a)->s_addr)[3] == 1)) 1.1052 + 1.1053 +#define IN4_ISLINKLOCAL_ADDRESS(a) \ 1.1054 + ((((uint8_t *)&(a)->s_addr)[0] == 169) && \ 1.1055 + (((uint8_t *)&(a)->s_addr)[1] == 254)) 1.1056 + 1.1057 +#if defined(__Userspace__) 1.1058 +#if defined(__Userspace_os_Windows) 1.1059 +#define SCTP_GETTIME_TIMEVAL(x) getwintimeofday(x) 1.1060 +#define SCTP_GETPTIME_TIMEVAL(x) getwintimeofday(x) /* this doesn't seem to ever be used.. */ 1.1061 +#else 1.1062 +#define SCTP_GETTIME_TIMEVAL(x) gettimeofday(x, NULL) 1.1063 +#define SCTP_GETPTIME_TIMEVAL(x) gettimeofday(x, NULL) 1.1064 +#endif 1.1065 +#endif 1.1066 + 1.1067 +#if defined(_KERNEL) 1.1068 +#define SCTP_GETTIME_TIMEVAL(x) (getmicrouptime(x)) 1.1069 +#define SCTP_GETPTIME_TIMEVAL(x) (microuptime(x)) 1.1070 +#endif 1.1071 + 1.1072 +#if defined(_KERNEL) || defined(__Userspace__) 1.1073 +#define sctp_sowwakeup(inp, so) \ 1.1074 +do { \ 1.1075 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1076 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEOUTPUT; \ 1.1077 + } else { \ 1.1078 + sowwakeup(so); \ 1.1079 + } \ 1.1080 +} while (0) 1.1081 + 1.1082 +#if defined(__FreeBSD__) || defined(__Windows__) || defined(__Userspace__) 1.1083 +#define sctp_sowwakeup_locked(inp, so) \ 1.1084 +do { \ 1.1085 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1086 + SOCKBUF_UNLOCK(&((so)->so_snd)); \ 1.1087 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEOUTPUT; \ 1.1088 + } else { \ 1.1089 + sowwakeup_locked(so); \ 1.1090 + } \ 1.1091 +} while (0) 1.1092 +#else 1.1093 +#define sctp_sowwakeup_locked(inp, so) \ 1.1094 +do { \ 1.1095 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1096 + SOCKBUF_UNLOCK(&((so)->so_snd)); \ 1.1097 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEOUTPUT; \ 1.1098 + } else { \ 1.1099 + sowwakeup(so); \ 1.1100 + } \ 1.1101 +} while (0) 1.1102 +#endif 1.1103 + 1.1104 +#define sctp_sorwakeup(inp, so) \ 1.1105 +do { \ 1.1106 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1107 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEINPUT; \ 1.1108 + } else { \ 1.1109 + sorwakeup(so); \ 1.1110 + } \ 1.1111 +} while (0) 1.1112 + 1.1113 +#if defined(__FreeBSD__) || defined(__Windows__) || defined(__Userspace__) 1.1114 +#define sctp_sorwakeup_locked(inp, so) \ 1.1115 +do { \ 1.1116 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1117 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEINPUT; \ 1.1118 + SOCKBUF_UNLOCK(&((so)->so_rcv)); \ 1.1119 + } else { \ 1.1120 + sorwakeup_locked(so); \ 1.1121 + } \ 1.1122 +} while (0) 1.1123 +#else 1.1124 + 1.1125 +#define sctp_sorwakeup_locked(inp, so) \ 1.1126 +do { \ 1.1127 + if (inp->sctp_flags & SCTP_PCB_FLAGS_DONT_WAKE) { \ 1.1128 + inp->sctp_flags |= SCTP_PCB_FLAGS_WAKEINPUT; \ 1.1129 + SOCKBUF_UNLOCK(&((so)->so_rcv)); \ 1.1130 + } else { \ 1.1131 + sorwakeup(so); \ 1.1132 + } \ 1.1133 +} while (0) 1.1134 +#endif 1.1135 + 1.1136 +#endif /* _KERNEL || __Userspace__*/ 1.1137 +#endif