| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* SCTP kernel reference Implementation | 
|  | 2 | * (C) Copyright IBM Corp. 2001, 2004 | 
|  | 3 | * Copyright (c) 1999-2000 Cisco, Inc. | 
|  | 4 | * Copyright (c) 1999-2001 Motorola, Inc. | 
|  | 5 | * Copyright (c) 2001 Intel Corp. | 
|  | 6 | * | 
|  | 7 | * This file is part of the SCTP kernel reference Implementation | 
|  | 8 | * | 
|  | 9 | * The SCTP reference implementation is free software; | 
|  | 10 | * you can redistribute it and/or modify it under the terms of | 
|  | 11 | * the GNU General Public License as published by | 
|  | 12 | * the Free Software Foundation; either version 2, or (at your option) | 
|  | 13 | * any later version. | 
|  | 14 | * | 
|  | 15 | * The SCTP reference implementation is distributed in the hope that it | 
|  | 16 | * will be useful, but WITHOUT ANY WARRANTY; without even the implied | 
|  | 17 | *                 ************************ | 
|  | 18 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | 19 | * See the GNU General Public License for more details. | 
|  | 20 | * | 
|  | 21 | * You should have received a copy of the GNU General Public License | 
|  | 22 | * along with GNU CC; see the file COPYING.  If not, write to | 
|  | 23 | * the Free Software Foundation, 59 Temple Place - Suite 330, | 
|  | 24 | * Boston, MA 02111-1307, USA. | 
|  | 25 | * | 
|  | 26 | * Please send any bug reports or fixes you make to the | 
|  | 27 | * email address(es): | 
|  | 28 | *    lksctp developers <lksctp-developers@lists.sourceforge.net> | 
|  | 29 | * | 
|  | 30 | * Or submit a bug report through the following website: | 
|  | 31 | *    http://www.sf.net/projects/lksctp | 
|  | 32 | * | 
|  | 33 | * Written or modified by: | 
|  | 34 | *   La Monte H.P. Yarroll <piggy@acm.org> | 
|  | 35 | *   Karl Knutson          <karl@athena.chicago.il.us> | 
|  | 36 | *   Randall Stewart       <randall@stewart.chicago.il.us> | 
|  | 37 | *   Ken Morneau           <kmorneau@cisco.com> | 
|  | 38 | *   Qiaobing Xie          <qxie1@motorola.com> | 
|  | 39 | *   Xingang Guo           <xingang.guo@intel.com> | 
|  | 40 | *   Sridhar Samudrala     <samudrala@us.ibm.com> | 
|  | 41 | *   Daisy Chang           <daisyc@us.ibm.com> | 
|  | 42 | * | 
|  | 43 | * Any bugs reported given to us we will try to fix... any fixes shared will | 
|  | 44 | * be incorporated into the next SCTP release. | 
|  | 45 | */ | 
|  | 46 |  | 
|  | 47 | #ifndef __sctp_constants_h__ | 
|  | 48 | #define __sctp_constants_h__ | 
|  | 49 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 50 | #include <linux/sctp.h> | 
|  | 51 | #include <linux/ipv6.h> /* For ipv6hdr. */ | 
|  | 52 | #include <net/sctp/user.h> | 
| Arnaldo Carvalho de Melo | c752f07 | 2005-08-09 20:08:28 -0700 | [diff] [blame] | 53 | #include <net/tcp_states.h>  /* For TCP states used in sctp_sock_state_t */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 54 |  | 
|  | 55 | /* Value used for stream negotiation. */ | 
|  | 56 | enum { SCTP_MAX_STREAM = 0xffff }; | 
|  | 57 | enum { SCTP_DEFAULT_OUTSTREAMS = 10 }; | 
|  | 58 | enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM }; | 
|  | 59 |  | 
|  | 60 | /* Since CIDs are sparse, we need all four of the following | 
|  | 61 | * symbols.  CIDs are dense through SCTP_CID_BASE_MAX. | 
|  | 62 | */ | 
|  | 63 | #define SCTP_CID_BASE_MAX		SCTP_CID_SHUTDOWN_COMPLETE | 
|  | 64 | #define SCTP_CID_MAX			SCTP_CID_ASCONF_ACK | 
|  | 65 |  | 
|  | 66 | #define SCTP_NUM_BASE_CHUNK_TYPES	(SCTP_CID_BASE_MAX + 1) | 
|  | 67 | #define SCTP_NUM_CHUNK_TYPES		(SCTP_NUM_BASE_CHUNKTYPES + 2) | 
|  | 68 |  | 
|  | 69 | #define SCTP_NUM_ADDIP_CHUNK_TYPES	2 | 
|  | 70 |  | 
|  | 71 | #define SCTP_NUM_PRSCTP_CHUNK_TYPES	1 | 
|  | 72 |  | 
|  | 73 | /* These are the different flavours of event.  */ | 
|  | 74 | typedef enum { | 
|  | 75 |  | 
|  | 76 | SCTP_EVENT_T_CHUNK = 1, | 
|  | 77 | SCTP_EVENT_T_TIMEOUT, | 
|  | 78 | SCTP_EVENT_T_OTHER, | 
|  | 79 | SCTP_EVENT_T_PRIMITIVE | 
|  | 80 |  | 
|  | 81 | } sctp_event_t; | 
|  | 82 |  | 
|  | 83 | #define SCTP_EVENT_T_MAX SCTP_EVENT_T_PRIMITIVE | 
|  | 84 | #define SCTP_EVENT_T_NUM (SCTP_EVENT_T_MAX + 1) | 
|  | 85 |  | 
|  | 86 | /* As a convenience for the state machine, we append SCTP_EVENT_* and | 
|  | 87 | * SCTP_ULP_* to the list of possible chunks. | 
|  | 88 | */ | 
|  | 89 |  | 
|  | 90 | typedef enum { | 
|  | 91 | SCTP_EVENT_TIMEOUT_NONE = 0, | 
|  | 92 | SCTP_EVENT_TIMEOUT_T1_COOKIE, | 
|  | 93 | SCTP_EVENT_TIMEOUT_T1_INIT, | 
|  | 94 | SCTP_EVENT_TIMEOUT_T2_SHUTDOWN, | 
|  | 95 | SCTP_EVENT_TIMEOUT_T3_RTX, | 
|  | 96 | SCTP_EVENT_TIMEOUT_T4_RTO, | 
|  | 97 | SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD, | 
|  | 98 | SCTP_EVENT_TIMEOUT_HEARTBEAT, | 
|  | 99 | SCTP_EVENT_TIMEOUT_SACK, | 
|  | 100 | SCTP_EVENT_TIMEOUT_AUTOCLOSE, | 
|  | 101 | } sctp_event_timeout_t; | 
|  | 102 |  | 
|  | 103 | #define SCTP_EVENT_TIMEOUT_MAX		SCTP_EVENT_TIMEOUT_AUTOCLOSE | 
|  | 104 | #define SCTP_NUM_TIMEOUT_TYPES		(SCTP_EVENT_TIMEOUT_MAX + 1) | 
|  | 105 |  | 
|  | 106 | typedef enum { | 
|  | 107 | SCTP_EVENT_NO_PENDING_TSN = 0, | 
|  | 108 | SCTP_EVENT_ICMP_PROTO_UNREACH, | 
|  | 109 | } sctp_event_other_t; | 
|  | 110 |  | 
|  | 111 | #define SCTP_EVENT_OTHER_MAX		SCTP_EVENT_ICMP_PROTO_UNREACH | 
|  | 112 | #define SCTP_NUM_OTHER_TYPES		(SCTP_EVENT_OTHER_MAX + 1) | 
|  | 113 |  | 
|  | 114 | /* These are primitive requests from the ULP.  */ | 
|  | 115 | typedef enum { | 
|  | 116 | SCTP_PRIMITIVE_ASSOCIATE = 0, | 
|  | 117 | SCTP_PRIMITIVE_SHUTDOWN, | 
|  | 118 | SCTP_PRIMITIVE_ABORT, | 
|  | 119 | SCTP_PRIMITIVE_SEND, | 
|  | 120 | SCTP_PRIMITIVE_REQUESTHEARTBEAT, | 
|  | 121 | SCTP_PRIMITIVE_ASCONF, | 
|  | 122 | } sctp_event_primitive_t; | 
|  | 123 |  | 
|  | 124 | #define SCTP_EVENT_PRIMITIVE_MAX	SCTP_PRIMITIVE_ASCONF | 
|  | 125 | #define SCTP_NUM_PRIMITIVE_TYPES	(SCTP_EVENT_PRIMITIVE_MAX + 1) | 
|  | 126 |  | 
|  | 127 | /* We define here a utility type for manipulating subtypes. | 
|  | 128 | * The subtype constructors all work like this: | 
|  | 129 | * | 
|  | 130 | * 	sctp_subtype_t foo = SCTP_ST_CHUNK(SCTP_CID_INIT); | 
|  | 131 | */ | 
|  | 132 |  | 
|  | 133 | typedef union { | 
|  | 134 | sctp_cid_t chunk; | 
|  | 135 | sctp_event_timeout_t timeout; | 
|  | 136 | sctp_event_other_t other; | 
|  | 137 | sctp_event_primitive_t primitive; | 
|  | 138 | } sctp_subtype_t; | 
|  | 139 |  | 
|  | 140 | #define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \ | 
|  | 141 | static inline sctp_subtype_t	\ | 
|  | 142 | SCTP_ST_## _name (_type _arg)		\ | 
|  | 143 | { sctp_subtype_t _retval; _retval._elt = _arg; return _retval; } | 
|  | 144 |  | 
|  | 145 | SCTP_SUBTYPE_CONSTRUCTOR(CHUNK,		sctp_cid_t,		chunk) | 
|  | 146 | SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT,	sctp_event_timeout_t,	timeout) | 
|  | 147 | SCTP_SUBTYPE_CONSTRUCTOR(OTHER,		sctp_event_other_t,	other) | 
|  | 148 | SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE,	sctp_event_primitive_t,	primitive) | 
|  | 149 |  | 
|  | 150 |  | 
|  | 151 | #define sctp_chunk_is_control(a) (a->chunk_hdr->type != SCTP_CID_DATA) | 
|  | 152 | #define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA) | 
|  | 153 |  | 
|  | 154 | /* Calculate the actual data size in a data chunk */ | 
|  | 155 | #define SCTP_DATA_SNDSIZE(c) ((int)((unsigned long)(c->chunk_end)\ | 
|  | 156 | - (unsigned long)(c->chunk_hdr)\ | 
|  | 157 | - sizeof(sctp_data_chunk_t))) | 
|  | 158 |  | 
|  | 159 | #define SCTP_MAX_ERROR_CAUSE  SCTP_ERROR_NONEXIST_IP | 
|  | 160 | #define SCTP_NUM_ERROR_CAUSE  10 | 
|  | 161 |  | 
|  | 162 | /* Internal error codes */ | 
|  | 163 | typedef enum { | 
|  | 164 |  | 
|  | 165 | SCTP_IERROR_NO_ERROR	        = 0, | 
|  | 166 | SCTP_IERROR_BASE		= 1000, | 
|  | 167 | SCTP_IERROR_NO_COOKIE, | 
|  | 168 | SCTP_IERROR_BAD_SIG, | 
|  | 169 | SCTP_IERROR_STALE_COOKIE, | 
|  | 170 | SCTP_IERROR_NOMEM, | 
|  | 171 | SCTP_IERROR_MALFORMED, | 
|  | 172 | SCTP_IERROR_BAD_TAG, | 
|  | 173 | SCTP_IERROR_BIG_GAP, | 
|  | 174 | SCTP_IERROR_DUP_TSN, | 
|  | 175 | SCTP_IERROR_HIGH_TSN, | 
|  | 176 | SCTP_IERROR_IGNORE_TSN, | 
|  | 177 | SCTP_IERROR_NO_DATA, | 
|  | 178 | SCTP_IERROR_BAD_STREAM, | 
|  | 179 | SCTP_IERROR_BAD_PORTS, | 
|  | 180 |  | 
|  | 181 | } sctp_ierror_t; | 
|  | 182 |  | 
|  | 183 |  | 
|  | 184 |  | 
|  | 185 | /* SCTP state defines for internal state machine */ | 
|  | 186 | typedef enum { | 
|  | 187 |  | 
|  | 188 | SCTP_STATE_EMPTY		= 0, | 
|  | 189 | SCTP_STATE_CLOSED		= 1, | 
|  | 190 | SCTP_STATE_COOKIE_WAIT		= 2, | 
|  | 191 | SCTP_STATE_COOKIE_ECHOED	= 3, | 
|  | 192 | SCTP_STATE_ESTABLISHED		= 4, | 
|  | 193 | SCTP_STATE_SHUTDOWN_PENDING	= 5, | 
|  | 194 | SCTP_STATE_SHUTDOWN_SENT	= 6, | 
|  | 195 | SCTP_STATE_SHUTDOWN_RECEIVED	= 7, | 
|  | 196 | SCTP_STATE_SHUTDOWN_ACK_SENT	= 8, | 
|  | 197 |  | 
|  | 198 | } sctp_state_t; | 
|  | 199 |  | 
|  | 200 | #define SCTP_STATE_MAX			SCTP_STATE_SHUTDOWN_ACK_SENT | 
|  | 201 | #define SCTP_STATE_NUM_STATES		(SCTP_STATE_MAX + 1) | 
|  | 202 |  | 
|  | 203 | /* These are values for sk->state. | 
|  | 204 | * For a UDP-style SCTP socket, the states are defined as follows | 
|  | 205 | * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to | 
|  | 206 | *   accept new associations, but it can initiate the creation of new ones. | 
|  | 207 | * - A socket in SCTP_SS_LISTENING state indicates that it is willing to | 
|  | 208 | *   accept new  associations and can initiate the creation of new ones. | 
|  | 209 | * - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off | 
|  | 210 | *   socket with one association. | 
|  | 211 | * For a TCP-style SCTP socket, the states are defined as follows | 
|  | 212 | * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to | 
|  | 213 | *   accept new associations, but it can initiate the creation of new ones. | 
|  | 214 | * - A socket in SCTP_SS_LISTENING state indicates that it is willing to | 
|  | 215 | *   accept new associations, but cannot initiate the creation of new ones. | 
|  | 216 | * - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single | 
|  | 217 | *   association. | 
|  | 218 | */ | 
|  | 219 | typedef enum { | 
|  | 220 | SCTP_SS_CLOSED         = TCP_CLOSE, | 
|  | 221 | SCTP_SS_LISTENING      = TCP_LISTEN, | 
|  | 222 | SCTP_SS_ESTABLISHING   = TCP_SYN_SENT, | 
|  | 223 | SCTP_SS_ESTABLISHED    = TCP_ESTABLISHED, | 
|  | 224 | SCTP_SS_DISCONNECTING  = TCP_CLOSING, | 
|  | 225 | } sctp_sock_state_t; | 
|  | 226 |  | 
|  | 227 | /* These functions map various type to printable names.  */ | 
|  | 228 | const char *sctp_cname(const sctp_subtype_t);	/* chunk types */ | 
|  | 229 | const char *sctp_oname(const sctp_subtype_t);	/* other events */ | 
|  | 230 | const char *sctp_tname(const sctp_subtype_t);	/* timeouts */ | 
|  | 231 | const char *sctp_pname(const sctp_subtype_t);	/* primitives */ | 
|  | 232 |  | 
|  | 233 | /* This is a table of printable names of sctp_state_t's.  */ | 
|  | 234 | extern const char *sctp_state_tbl[], *sctp_evttype_tbl[], *sctp_status_tbl[]; | 
|  | 235 |  | 
|  | 236 | /* Maximum chunk length considering padding requirements. */ | 
|  | 237 | enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) }; | 
|  | 238 |  | 
|  | 239 | /* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little | 
|  | 240 | * harder (until reaching ESTABLISHED state). | 
|  | 241 | */ | 
|  | 242 | enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 }; | 
|  | 243 |  | 
|  | 244 | /* Guess at how big to make the TSN mapping array. | 
|  | 245 | * We guarantee that we can handle at least this big a gap between the | 
|  | 246 | * cumulative ACK and the highest TSN.  In practice, we can often | 
|  | 247 | * handle up to twice this value. | 
|  | 248 | * | 
|  | 249 | * NEVER make this more than 32767 (2^15-1).  The Gap Ack Blocks in a | 
|  | 250 | * SACK (see  section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE | 
|  | 251 | * must be less than 65535 (2^16 - 1), or we will have overflow | 
|  | 252 | * problems creating SACK's. | 
|  | 253 | */ | 
|  | 254 | #define SCTP_TSN_MAP_SIZE 2048 | 
|  | 255 | #define SCTP_TSN_MAX_GAP  65535 | 
|  | 256 |  | 
|  | 257 | /* We will not record more than this many duplicate TSNs between two | 
|  | 258 | * SACKs.  The minimum PMTU is 576.  Remove all the headers and there | 
|  | 259 | * is enough room for 131 duplicate reports.  Round down to the | 
|  | 260 | * nearest power of 2. | 
|  | 261 | */ | 
|  | 262 | enum { SCTP_MIN_PMTU = 576 }; | 
|  | 263 | enum { SCTP_MAX_DUP_TSNS = 16 }; | 
|  | 264 | enum { SCTP_MAX_GABS = 16 }; | 
|  | 265 |  | 
| Vlad Yasevich | 2f85a42 | 2005-06-28 13:24:23 -0700 | [diff] [blame] | 266 | /* Heartbeat interval - 30 secs */ | 
|  | 267 | #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT	(30 * HZ) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 268 |  | 
| Vlad Yasevich | 2f85a42 | 2005-06-28 13:24:23 -0700 | [diff] [blame] | 269 | /* Delayed sack timer - 200ms */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 270 | #define SCTP_DEFAULT_TIMEOUT_SACK	((200 * HZ) / 1000) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 271 |  | 
|  | 272 | /* RTO.Initial              - 3  seconds | 
|  | 273 | * RTO.Min                  - 1  second | 
|  | 274 | * RTO.Max                  - 60 seconds | 
|  | 275 | * RTO.Alpha                - 1/8 | 
|  | 276 | * RTO.Beta                 - 1/4 | 
|  | 277 | */ | 
|  | 278 | #define SCTP_RTO_INITIAL	(3 * HZ) | 
|  | 279 | #define SCTP_RTO_MIN		(1 * HZ) | 
|  | 280 | #define SCTP_RTO_MAX		(60 * HZ) | 
|  | 281 |  | 
|  | 282 | #define SCTP_RTO_ALPHA          3   /* 1/8 when converted to right shifts. */ | 
|  | 283 | #define SCTP_RTO_BETA           2   /* 1/4 when converted to right shifts. */ | 
|  | 284 |  | 
|  | 285 | /* Maximum number of new data packets that can be sent in a burst.  */ | 
|  | 286 | #define SCTP_MAX_BURST		4 | 
|  | 287 |  | 
|  | 288 | #define SCTP_CLOCK_GRANULARITY	1	/* 1 jiffy */ | 
|  | 289 |  | 
|  | 290 | #define SCTP_DEF_MAX_INIT 6 | 
|  | 291 | #define SCTP_DEF_MAX_SEND 10 | 
|  | 292 |  | 
|  | 293 | #define SCTP_DEFAULT_COOKIE_LIFE_SEC	60 /* seconds */ | 
|  | 294 | #define SCTP_DEFAULT_COOKIE_LIFE_USEC	0  /* microseconds */ | 
|  | 295 |  | 
|  | 296 | #define SCTP_DEFAULT_MINWINDOW	1500	/* default minimum rwnd size */ | 
|  | 297 | #define SCTP_DEFAULT_MAXWINDOW	65535	/* default rwnd size */ | 
|  | 298 | #define SCTP_DEFAULT_MAXSEGMENT 1500	/* MTU size, this is the limit | 
|  | 299 | * to which we will raise the P-MTU. | 
|  | 300 | */ | 
|  | 301 | #define SCTP_DEFAULT_MINSEGMENT 512	/* MTU size ... if no mtu disc */ | 
|  | 302 | #define SCTP_HOW_MANY_SECRETS 2		/* How many secrets I keep */ | 
|  | 303 | #define SCTP_HOW_LONG_COOKIE_LIVE 3600	/* How many seconds the current | 
|  | 304 | * secret will live? | 
|  | 305 | */ | 
|  | 306 | #define SCTP_SECRET_SIZE 32		/* Number of octets in a 256 bits. */ | 
|  | 307 |  | 
|  | 308 | #define SCTP_SIGNATURE_SIZE 20	        /* size of a SLA-1 signature */ | 
|  | 309 |  | 
|  | 310 | #define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash | 
|  | 311 | * functions simpler to write. | 
|  | 312 | */ | 
|  | 313 |  | 
|  | 314 | #if defined (CONFIG_SCTP_HMAC_MD5) | 
|  | 315 | #define SCTP_COOKIE_HMAC_ALG "md5" | 
|  | 316 | #elif defined (CONFIG_SCTP_HMAC_SHA1) | 
|  | 317 | #define SCTP_COOKIE_HMAC_ALG "sha1" | 
|  | 318 | #else | 
|  | 319 | #define SCTP_COOKIE_HMAC_ALG NULL | 
|  | 320 | #endif | 
|  | 321 |  | 
|  | 322 | /* These return values describe the success or failure of a number of | 
|  | 323 | * routines which form the lower interface to SCTP_outqueue. | 
|  | 324 | */ | 
|  | 325 | typedef enum { | 
|  | 326 | SCTP_XMIT_OK, | 
|  | 327 | SCTP_XMIT_PMTU_FULL, | 
|  | 328 | SCTP_XMIT_RWND_FULL, | 
|  | 329 | SCTP_XMIT_NAGLE_DELAY, | 
|  | 330 | } sctp_xmit_t; | 
|  | 331 |  | 
|  | 332 | /* These are the commands for manipulating transports.  */ | 
|  | 333 | typedef enum { | 
|  | 334 | SCTP_TRANSPORT_UP, | 
|  | 335 | SCTP_TRANSPORT_DOWN, | 
|  | 336 | } sctp_transport_cmd_t; | 
|  | 337 |  | 
|  | 338 | /* These are the address scopes defined mainly for IPv4 addresses | 
|  | 339 | * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>. | 
|  | 340 | * These scopes are hopefully generic enough to be used on scoping both | 
|  | 341 | * IPv4 and IPv6 addresses in SCTP. | 
|  | 342 | * At this point, the IPv6 scopes will be mapped to these internal scopes | 
|  | 343 | * as much as possible. | 
|  | 344 | */ | 
|  | 345 | typedef enum { | 
|  | 346 | SCTP_SCOPE_GLOBAL,		/* IPv4 global addresses */ | 
|  | 347 | SCTP_SCOPE_PRIVATE,		/* IPv4 private addresses */ | 
|  | 348 | SCTP_SCOPE_LINK,		/* IPv4 link local address */ | 
|  | 349 | SCTP_SCOPE_LOOPBACK,		/* IPv4 loopback address */ | 
|  | 350 | SCTP_SCOPE_UNUSABLE,		/* IPv4 unusable addresses */ | 
|  | 351 | } sctp_scope_t; | 
|  | 352 |  | 
|  | 353 | /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, | 
|  | 354 | * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24, | 
|  | 355 | * 192.88.99.0/24. | 
|  | 356 | * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP | 
|  | 357 | * addresses. | 
|  | 358 | */ | 
|  | 359 | #define IS_IPV4_UNUSABLE_ADDRESS(a) \ | 
|  | 360 | ((INADDR_BROADCAST == *a) || \ | 
|  | 361 | (MULTICAST(*a)) || \ | 
|  | 362 | (((unsigned char *)(a))[0] == 0) || \ | 
|  | 363 | ((((unsigned char *)(a))[0] == 198) && \ | 
|  | 364 | (((unsigned char *)(a))[1] == 18) && \ | 
|  | 365 | (((unsigned char *)(a))[2] == 0)) || \ | 
|  | 366 | ((((unsigned char *)(a))[0] == 192) && \ | 
|  | 367 | (((unsigned char *)(a))[1] == 88) && \ | 
|  | 368 | (((unsigned char *)(a))[2] == 99))) | 
|  | 369 |  | 
|  | 370 | /* IPv4 Link-local addresses: 169.254.0.0/16.  */ | 
|  | 371 | #define IS_IPV4_LINK_ADDRESS(a) \ | 
|  | 372 | ((((unsigned char *)(a))[0] == 169) && \ | 
|  | 373 | (((unsigned char *)(a))[1] == 254)) | 
|  | 374 |  | 
|  | 375 | /* RFC 1918 "Address Allocation for Private Internets" defines the IPv4 | 
|  | 376 | * private address space as the following: | 
|  | 377 | * | 
|  | 378 | * 10.0.0.0 - 10.255.255.255 (10/8 prefix) | 
|  | 379 | * 172.16.0.0.0 - 172.31.255.255 (172.16/12 prefix) | 
|  | 380 | * 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) | 
|  | 381 | */ | 
|  | 382 | #define IS_IPV4_PRIVATE_ADDRESS(a) \ | 
|  | 383 | ((((unsigned char *)(a))[0] == 10) || \ | 
|  | 384 | ((((unsigned char *)(a))[0] == 172) && \ | 
|  | 385 | (((unsigned char *)(a))[1] >= 16) && \ | 
|  | 386 | (((unsigned char *)(a))[1] < 32)) || \ | 
|  | 387 | ((((unsigned char *)(a))[0] == 192) && \ | 
|  | 388 | (((unsigned char *)(a))[1] == 168))) | 
|  | 389 |  | 
|  | 390 | /* Flags used for the bind address copy functions.  */ | 
|  | 391 | #define SCTP_ADDR6_ALLOWED	0x00000001	/* IPv6 address is allowed by | 
|  | 392 | local sock family */ | 
|  | 393 | #define SCTP_ADDR4_PEERSUPP	0x00000002	/* IPv4 address is supported by | 
|  | 394 | peer */ | 
|  | 395 | #define SCTP_ADDR6_PEERSUPP	0x00000004	/* IPv6 address is supported by | 
|  | 396 | peer */ | 
|  | 397 |  | 
|  | 398 | /* Reasons to retransmit. */ | 
|  | 399 | typedef enum { | 
|  | 400 | SCTP_RTXR_T3_RTX, | 
|  | 401 | SCTP_RTXR_FAST_RTX, | 
|  | 402 | SCTP_RTXR_PMTUD, | 
|  | 403 | } sctp_retransmit_reason_t; | 
|  | 404 |  | 
|  | 405 | /* Reasons to lower cwnd. */ | 
|  | 406 | typedef enum { | 
|  | 407 | SCTP_LOWER_CWND_T3_RTX, | 
|  | 408 | SCTP_LOWER_CWND_FAST_RTX, | 
|  | 409 | SCTP_LOWER_CWND_ECNE, | 
|  | 410 | SCTP_LOWER_CWND_INACTIVE, | 
|  | 411 | } sctp_lower_cwnd_t; | 
|  | 412 |  | 
|  | 413 | #endif /* __sctp_constants_h__ */ |