160c778b2SVlad Yasevich /* SCTP kernel implementation 21da177e4SLinus Torvalds * (C) Copyright IBM Corp. 2001, 2004 31da177e4SLinus Torvalds * Copyright (c) 1999-2000 Cisco, Inc. 41da177e4SLinus Torvalds * Copyright (c) 1999-2001 Motorola, Inc. 51da177e4SLinus Torvalds * Copyright (c) 2001 Intel Corp. 61da177e4SLinus Torvalds * 760c778b2SVlad Yasevich * This file is part of the SCTP kernel implementation 81da177e4SLinus Torvalds * 960c778b2SVlad Yasevich * This SCTP implementation is free software; 101da177e4SLinus Torvalds * you can redistribute it and/or modify it under the terms of 111da177e4SLinus Torvalds * the GNU General Public License as published by 121da177e4SLinus Torvalds * the Free Software Foundation; either version 2, or (at your option) 131da177e4SLinus Torvalds * any later version. 141da177e4SLinus Torvalds * 1560c778b2SVlad Yasevich * This SCTP implementation is distributed in the hope that it 161da177e4SLinus Torvalds * will be useful, but WITHOUT ANY WARRANTY; without even the implied 171da177e4SLinus Torvalds * ************************ 181da177e4SLinus Torvalds * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 191da177e4SLinus Torvalds * See the GNU General Public License for more details. 201da177e4SLinus Torvalds * 211da177e4SLinus Torvalds * You should have received a copy of the GNU General Public License 221da177e4SLinus Torvalds * along with GNU CC; see the file COPYING. If not, write to 231da177e4SLinus Torvalds * the Free Software Foundation, 59 Temple Place - Suite 330, 241da177e4SLinus Torvalds * Boston, MA 02111-1307, USA. 251da177e4SLinus Torvalds * 261da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the 271da177e4SLinus Torvalds * email address(es): 2891705c61SDaniel Borkmann * lksctp developers <linux-sctp@vger.kernel.org> 291da177e4SLinus Torvalds * 301da177e4SLinus Torvalds * Or submit a bug report through the following website: 311da177e4SLinus Torvalds * http://www.sf.net/projects/lksctp 321da177e4SLinus Torvalds * 331da177e4SLinus Torvalds * Written or modified by: 341da177e4SLinus Torvalds * La Monte H.P. Yarroll <piggy@acm.org> 351da177e4SLinus Torvalds * Karl Knutson <karl@athena.chicago.il.us> 361da177e4SLinus Torvalds * Randall Stewart <randall@stewart.chicago.il.us> 371da177e4SLinus Torvalds * Ken Morneau <kmorneau@cisco.com> 381da177e4SLinus Torvalds * Qiaobing Xie <qxie1@motorola.com> 391da177e4SLinus Torvalds * Xingang Guo <xingang.guo@intel.com> 401da177e4SLinus Torvalds * Sridhar Samudrala <samudrala@us.ibm.com> 411da177e4SLinus Torvalds * Daisy Chang <daisyc@us.ibm.com> 421da177e4SLinus Torvalds * 431da177e4SLinus Torvalds * Any bugs reported given to us we will try to fix... any fixes shared will 441da177e4SLinus Torvalds * be incorporated into the next SCTP release. 451da177e4SLinus Torvalds */ 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds #ifndef __sctp_constants_h__ 481da177e4SLinus Torvalds #define __sctp_constants_h__ 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds #include <linux/sctp.h> 511da177e4SLinus Torvalds #include <linux/ipv6.h> /* For ipv6hdr. */ 52c752f073SArnaldo Carvalho de Melo #include <net/tcp_states.h> /* For TCP states used in sctp_sock_state_t */ 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds /* Value used for stream negotiation. */ 551da177e4SLinus Torvalds enum { SCTP_MAX_STREAM = 0xffff }; 561da177e4SLinus Torvalds enum { SCTP_DEFAULT_OUTSTREAMS = 10 }; 571da177e4SLinus Torvalds enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM }; 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds /* Since CIDs are sparse, we need all four of the following 601da177e4SLinus Torvalds * symbols. CIDs are dense through SCTP_CID_BASE_MAX. 611da177e4SLinus Torvalds */ 621da177e4SLinus Torvalds #define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE 631da177e4SLinus Torvalds 641da177e4SLinus Torvalds #define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1) 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds #define SCTP_NUM_ADDIP_CHUNK_TYPES 2 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds #define SCTP_NUM_PRSCTP_CHUNK_TYPES 1 691da177e4SLinus Torvalds 701f485649SVlad Yasevich #define SCTP_NUM_AUTH_CHUNK_TYPES 1 711f485649SVlad Yasevich 721f485649SVlad Yasevich #define SCTP_NUM_CHUNK_TYPES (SCTP_NUM_BASE_CHUNK_TYPES + \ 731f485649SVlad Yasevich SCTP_NUM_ADDIP_CHUNK_TYPES +\ 741f485649SVlad Yasevich SCTP_NUM_PRSCTP_CHUNK_TYPES +\ 751f485649SVlad Yasevich SCTP_NUM_AUTH_CHUNK_TYPES) 761f485649SVlad Yasevich 771da177e4SLinus Torvalds /* These are the different flavours of event. */ 781da177e4SLinus Torvalds typedef enum { 791da177e4SLinus Torvalds 801da177e4SLinus Torvalds SCTP_EVENT_T_CHUNK = 1, 811da177e4SLinus Torvalds SCTP_EVENT_T_TIMEOUT, 821da177e4SLinus Torvalds SCTP_EVENT_T_OTHER, 831da177e4SLinus Torvalds SCTP_EVENT_T_PRIMITIVE 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds } sctp_event_t; 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds /* As a convenience for the state machine, we append SCTP_EVENT_* and 881da177e4SLinus Torvalds * SCTP_ULP_* to the list of possible chunks. 891da177e4SLinus Torvalds */ 901da177e4SLinus Torvalds 911da177e4SLinus Torvalds typedef enum { 921da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_NONE = 0, 931da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T1_COOKIE, 941da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T1_INIT, 951da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T2_SHUTDOWN, 961da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T3_RTX, 971da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T4_RTO, 981da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD, 991da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_HEARTBEAT, 1001da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_SACK, 1011da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_AUTOCLOSE, 1021da177e4SLinus Torvalds } sctp_event_timeout_t; 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds #define SCTP_EVENT_TIMEOUT_MAX SCTP_EVENT_TIMEOUT_AUTOCLOSE 1051da177e4SLinus Torvalds #define SCTP_NUM_TIMEOUT_TYPES (SCTP_EVENT_TIMEOUT_MAX + 1) 1061da177e4SLinus Torvalds 1071da177e4SLinus Torvalds typedef enum { 1081da177e4SLinus Torvalds SCTP_EVENT_NO_PENDING_TSN = 0, 1091da177e4SLinus Torvalds SCTP_EVENT_ICMP_PROTO_UNREACH, 1101da177e4SLinus Torvalds } sctp_event_other_t; 1111da177e4SLinus Torvalds 1121da177e4SLinus Torvalds #define SCTP_EVENT_OTHER_MAX SCTP_EVENT_ICMP_PROTO_UNREACH 1131da177e4SLinus Torvalds #define SCTP_NUM_OTHER_TYPES (SCTP_EVENT_OTHER_MAX + 1) 1141da177e4SLinus Torvalds 1151da177e4SLinus Torvalds /* These are primitive requests from the ULP. */ 1161da177e4SLinus Torvalds typedef enum { 1171da177e4SLinus Torvalds SCTP_PRIMITIVE_ASSOCIATE = 0, 1181da177e4SLinus Torvalds SCTP_PRIMITIVE_SHUTDOWN, 1191da177e4SLinus Torvalds SCTP_PRIMITIVE_ABORT, 1201da177e4SLinus Torvalds SCTP_PRIMITIVE_SEND, 1211da177e4SLinus Torvalds SCTP_PRIMITIVE_REQUESTHEARTBEAT, 1221da177e4SLinus Torvalds SCTP_PRIMITIVE_ASCONF, 1231da177e4SLinus Torvalds } sctp_event_primitive_t; 1241da177e4SLinus Torvalds 1251da177e4SLinus Torvalds #define SCTP_EVENT_PRIMITIVE_MAX SCTP_PRIMITIVE_ASCONF 1261da177e4SLinus Torvalds #define SCTP_NUM_PRIMITIVE_TYPES (SCTP_EVENT_PRIMITIVE_MAX + 1) 1271da177e4SLinus Torvalds 1281da177e4SLinus Torvalds /* We define here a utility type for manipulating subtypes. 1291da177e4SLinus Torvalds * The subtype constructors all work like this: 1301da177e4SLinus Torvalds * 1311da177e4SLinus Torvalds * sctp_subtype_t foo = SCTP_ST_CHUNK(SCTP_CID_INIT); 1321da177e4SLinus Torvalds */ 1331da177e4SLinus Torvalds 1341da177e4SLinus Torvalds typedef union { 1351da177e4SLinus Torvalds sctp_cid_t chunk; 1361da177e4SLinus Torvalds sctp_event_timeout_t timeout; 1371da177e4SLinus Torvalds sctp_event_other_t other; 1381da177e4SLinus Torvalds sctp_event_primitive_t primitive; 1391da177e4SLinus Torvalds } sctp_subtype_t; 1401da177e4SLinus Torvalds 1411da177e4SLinus Torvalds #define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \ 1421da177e4SLinus Torvalds static inline sctp_subtype_t \ 1431da177e4SLinus Torvalds SCTP_ST_## _name (_type _arg) \ 1441da177e4SLinus Torvalds { sctp_subtype_t _retval; _retval._elt = _arg; return _retval; } 1451da177e4SLinus Torvalds 1461da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(CHUNK, sctp_cid_t, chunk) 1471da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT, sctp_event_timeout_t, timeout) 1481da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(OTHER, sctp_event_other_t, other) 1491da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE, sctp_event_primitive_t, primitive) 1501da177e4SLinus Torvalds 1511da177e4SLinus Torvalds 1521da177e4SLinus Torvalds #define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA) 1531da177e4SLinus Torvalds 1541da177e4SLinus Torvalds /* Calculate the actual data size in a data chunk */ 1551da177e4SLinus Torvalds #define SCTP_DATA_SNDSIZE(c) ((int)((unsigned long)(c->chunk_end)\ 1561da177e4SLinus Torvalds - (unsigned long)(c->chunk_hdr)\ 1571da177e4SLinus Torvalds - sizeof(sctp_data_chunk_t))) 1581da177e4SLinus Torvalds 1591da177e4SLinus Torvalds /* Internal error codes */ 1601da177e4SLinus Torvalds typedef enum { 1611da177e4SLinus Torvalds 1621da177e4SLinus Torvalds SCTP_IERROR_NO_ERROR = 0, 1631da177e4SLinus Torvalds SCTP_IERROR_BASE = 1000, 1641da177e4SLinus Torvalds SCTP_IERROR_NO_COOKIE, 1651da177e4SLinus Torvalds SCTP_IERROR_BAD_SIG, 1661da177e4SLinus Torvalds SCTP_IERROR_STALE_COOKIE, 1671da177e4SLinus Torvalds SCTP_IERROR_NOMEM, 1681da177e4SLinus Torvalds SCTP_IERROR_MALFORMED, 1691da177e4SLinus Torvalds SCTP_IERROR_BAD_TAG, 1701da177e4SLinus Torvalds SCTP_IERROR_BIG_GAP, 1711da177e4SLinus Torvalds SCTP_IERROR_DUP_TSN, 1721da177e4SLinus Torvalds SCTP_IERROR_HIGH_TSN, 1731da177e4SLinus Torvalds SCTP_IERROR_IGNORE_TSN, 1741da177e4SLinus Torvalds SCTP_IERROR_NO_DATA, 1751da177e4SLinus Torvalds SCTP_IERROR_BAD_STREAM, 1761da177e4SLinus Torvalds SCTP_IERROR_BAD_PORTS, 177bbd0d598SVlad Yasevich SCTP_IERROR_AUTH_BAD_HMAC, 178bbd0d598SVlad Yasevich SCTP_IERROR_AUTH_BAD_KEYID, 179bbd0d598SVlad Yasevich SCTP_IERROR_PROTO_VIOLATION, 1807ab90804SVlad Yasevich SCTP_IERROR_ERROR, 1817ab90804SVlad Yasevich SCTP_IERROR_ABORT, 1821da177e4SLinus Torvalds } sctp_ierror_t; 1831da177e4SLinus Torvalds 1841da177e4SLinus Torvalds 1851da177e4SLinus Torvalds 1861da177e4SLinus Torvalds /* SCTP state defines for internal state machine */ 1871da177e4SLinus Torvalds typedef enum { 1881da177e4SLinus Torvalds 1890b8f9e25SVlad Yasevich SCTP_STATE_CLOSED = 0, 1900b8f9e25SVlad Yasevich SCTP_STATE_COOKIE_WAIT = 1, 1910b8f9e25SVlad Yasevich SCTP_STATE_COOKIE_ECHOED = 2, 1920b8f9e25SVlad Yasevich SCTP_STATE_ESTABLISHED = 3, 1930b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_PENDING = 4, 1940b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_SENT = 5, 1950b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_RECEIVED = 6, 1960b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_ACK_SENT = 7, 1971da177e4SLinus Torvalds 1981da177e4SLinus Torvalds } sctp_state_t; 1991da177e4SLinus Torvalds 2001da177e4SLinus Torvalds #define SCTP_STATE_MAX SCTP_STATE_SHUTDOWN_ACK_SENT 2011da177e4SLinus Torvalds #define SCTP_STATE_NUM_STATES (SCTP_STATE_MAX + 1) 2021da177e4SLinus Torvalds 2031da177e4SLinus Torvalds /* These are values for sk->state. 2041da177e4SLinus Torvalds * For a UDP-style SCTP socket, the states are defined as follows 2051da177e4SLinus Torvalds * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to 2061da177e4SLinus Torvalds * accept new associations, but it can initiate the creation of new ones. 2071da177e4SLinus Torvalds * - A socket in SCTP_SS_LISTENING state indicates that it is willing to 2081da177e4SLinus Torvalds * accept new associations and can initiate the creation of new ones. 2091da177e4SLinus Torvalds * - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off 2101da177e4SLinus Torvalds * socket with one association. 2111da177e4SLinus Torvalds * For a TCP-style SCTP socket, the states are defined as follows 2121da177e4SLinus Torvalds * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to 2131da177e4SLinus Torvalds * accept new associations, but it can initiate the creation of new ones. 2141da177e4SLinus Torvalds * - A socket in SCTP_SS_LISTENING state indicates that it is willing to 2151da177e4SLinus Torvalds * accept new associations, but cannot initiate the creation of new ones. 2161da177e4SLinus Torvalds * - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single 2171da177e4SLinus Torvalds * association. 2181da177e4SLinus Torvalds */ 2191da177e4SLinus Torvalds typedef enum { 2201da177e4SLinus Torvalds SCTP_SS_CLOSED = TCP_CLOSE, 2211da177e4SLinus Torvalds SCTP_SS_LISTENING = TCP_LISTEN, 2221da177e4SLinus Torvalds SCTP_SS_ESTABLISHING = TCP_SYN_SENT, 2231da177e4SLinus Torvalds SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, 224bec9640bSVlad Yasevich SCTP_SS_CLOSING = TCP_CLOSING, 2251da177e4SLinus Torvalds } sctp_sock_state_t; 2261da177e4SLinus Torvalds 2271da177e4SLinus Torvalds /* These functions map various type to printable names. */ 2281da177e4SLinus Torvalds const char *sctp_cname(const sctp_subtype_t); /* chunk types */ 2291da177e4SLinus Torvalds const char *sctp_oname(const sctp_subtype_t); /* other events */ 2301da177e4SLinus Torvalds const char *sctp_tname(const sctp_subtype_t); /* timeouts */ 2311da177e4SLinus Torvalds const char *sctp_pname(const sctp_subtype_t); /* primitives */ 2321da177e4SLinus Torvalds 2331da177e4SLinus Torvalds /* This is a table of printable names of sctp_state_t's. */ 23436cbd3dcSJan Engelhardt extern const char *const sctp_state_tbl[]; 23536cbd3dcSJan Engelhardt extern const char *const sctp_evttype_tbl[]; 23636cbd3dcSJan Engelhardt extern const char *const sctp_status_tbl[]; 2371da177e4SLinus Torvalds 2381da177e4SLinus Torvalds /* Maximum chunk length considering padding requirements. */ 2391da177e4SLinus Torvalds enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) }; 2401da177e4SLinus Torvalds 2411da177e4SLinus Torvalds /* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little 2421da177e4SLinus Torvalds * harder (until reaching ESTABLISHED state). 2431da177e4SLinus Torvalds */ 2441da177e4SLinus Torvalds enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 }; 2451da177e4SLinus Torvalds 2461da177e4SLinus Torvalds /* Guess at how big to make the TSN mapping array. 2471da177e4SLinus Torvalds * We guarantee that we can handle at least this big a gap between the 2481da177e4SLinus Torvalds * cumulative ACK and the highest TSN. In practice, we can often 2491da177e4SLinus Torvalds * handle up to twice this value. 2501da177e4SLinus Torvalds * 2511da177e4SLinus Torvalds * NEVER make this more than 32767 (2^15-1). The Gap Ack Blocks in a 2521da177e4SLinus Torvalds * SACK (see section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE 2531da177e4SLinus Torvalds * must be less than 65535 (2^16 - 1), or we will have overflow 2541da177e4SLinus Torvalds * problems creating SACK's. 2551da177e4SLinus Torvalds */ 2568e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_INITIAL BITS_PER_LONG 2578e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL 2588e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_SIZE 4096 2591da177e4SLinus Torvalds 2601da177e4SLinus Torvalds /* We will not record more than this many duplicate TSNs between two 2611da177e4SLinus Torvalds * SACKs. The minimum PMTU is 576. Remove all the headers and there 2621da177e4SLinus Torvalds * is enough room for 131 duplicate reports. Round down to the 2631da177e4SLinus Torvalds * nearest power of 2. 2641da177e4SLinus Torvalds */ 2651da177e4SLinus Torvalds enum { SCTP_MIN_PMTU = 576 }; 2661da177e4SLinus Torvalds enum { SCTP_MAX_DUP_TSNS = 16 }; 2671da177e4SLinus Torvalds enum { SCTP_MAX_GABS = 16 }; 2681da177e4SLinus Torvalds 2692f85a429SVlad Yasevich /* Heartbeat interval - 30 secs */ 2703fd091e7SVladislav Yasevich #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30*1000) 2711da177e4SLinus Torvalds 2722f85a429SVlad Yasevich /* Delayed sack timer - 200ms */ 2733fd091e7SVladislav Yasevich #define SCTP_DEFAULT_TIMEOUT_SACK (200) 2741da177e4SLinus Torvalds 2751da177e4SLinus Torvalds /* RTO.Initial - 3 seconds 2761da177e4SLinus Torvalds * RTO.Min - 1 second 2771da177e4SLinus Torvalds * RTO.Max - 60 seconds 2781da177e4SLinus Torvalds * RTO.Alpha - 1/8 2791da177e4SLinus Torvalds * RTO.Beta - 1/4 2801da177e4SLinus Torvalds */ 2813fd091e7SVladislav Yasevich #define SCTP_RTO_INITIAL (3 * 1000) 2823fd091e7SVladislav Yasevich #define SCTP_RTO_MIN (1 * 1000) 2833fd091e7SVladislav Yasevich #define SCTP_RTO_MAX (60 * 1000) 2841da177e4SLinus Torvalds 2851da177e4SLinus Torvalds #define SCTP_RTO_ALPHA 3 /* 1/8 when converted to right shifts. */ 2861da177e4SLinus Torvalds #define SCTP_RTO_BETA 2 /* 1/4 when converted to right shifts. */ 2871da177e4SLinus Torvalds 2881da177e4SLinus Torvalds /* Maximum number of new data packets that can be sent in a burst. */ 28970331571SVlad Yasevich #define SCTP_DEFAULT_MAX_BURST 4 2901da177e4SLinus Torvalds 2911da177e4SLinus Torvalds #define SCTP_CLOCK_GRANULARITY 1 /* 1 jiffy */ 2921da177e4SLinus Torvalds 2933fd091e7SVladislav Yasevich #define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000) /* 60 seconds */ 2941da177e4SLinus Torvalds 2951da177e4SLinus Torvalds #define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */ 2961da177e4SLinus Torvalds #define SCTP_DEFAULT_MAXWINDOW 65535 /* default rwnd size */ 29790f2f531SVlad Yasevich #define SCTP_DEFAULT_RWND_SHIFT 4 /* by default, update on 1/16 of 29890f2f531SVlad Yasevich * rcvbuf, which is 1/8 of initial 29990f2f531SVlad Yasevich * window 30090f2f531SVlad Yasevich */ 3011da177e4SLinus Torvalds #define SCTP_DEFAULT_MAXSEGMENT 1500 /* MTU size, this is the limit 3021da177e4SLinus Torvalds * to which we will raise the P-MTU. 3031da177e4SLinus Torvalds */ 3041da177e4SLinus Torvalds #define SCTP_DEFAULT_MINSEGMENT 512 /* MTU size ... if no mtu disc */ 305570617e7SDaniel Borkmann 3061da177e4SLinus Torvalds #define SCTP_SECRET_SIZE 32 /* Number of octets in a 256 bits. */ 3071da177e4SLinus Torvalds 3081da177e4SLinus Torvalds #define SCTP_SIGNATURE_SIZE 20 /* size of a SLA-1 signature */ 3091da177e4SLinus Torvalds 3101da177e4SLinus Torvalds #define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash 3111da177e4SLinus Torvalds * functions simpler to write. 3121da177e4SLinus Torvalds */ 3131da177e4SLinus Torvalds 3141da177e4SLinus Torvalds /* These return values describe the success or failure of a number of 3151da177e4SLinus Torvalds * routines which form the lower interface to SCTP_outqueue. 3161da177e4SLinus Torvalds */ 3171da177e4SLinus Torvalds typedef enum { 3181da177e4SLinus Torvalds SCTP_XMIT_OK, 3191da177e4SLinus Torvalds SCTP_XMIT_PMTU_FULL, 3201da177e4SLinus Torvalds SCTP_XMIT_RWND_FULL, 3211da177e4SLinus Torvalds SCTP_XMIT_NAGLE_DELAY, 3221da177e4SLinus Torvalds } sctp_xmit_t; 3231da177e4SLinus Torvalds 3241da177e4SLinus Torvalds /* These are the commands for manipulating transports. */ 3251da177e4SLinus Torvalds typedef enum { 3261da177e4SLinus Torvalds SCTP_TRANSPORT_UP, 3271da177e4SLinus Torvalds SCTP_TRANSPORT_DOWN, 3285aa93bcfSNeil Horman SCTP_TRANSPORT_PF, 3291da177e4SLinus Torvalds } sctp_transport_cmd_t; 3301da177e4SLinus Torvalds 3311da177e4SLinus Torvalds /* These are the address scopes defined mainly for IPv4 addresses 3321da177e4SLinus Torvalds * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>. 3331da177e4SLinus Torvalds * These scopes are hopefully generic enough to be used on scoping both 3341da177e4SLinus Torvalds * IPv4 and IPv6 addresses in SCTP. 3351da177e4SLinus Torvalds * At this point, the IPv6 scopes will be mapped to these internal scopes 3361da177e4SLinus Torvalds * as much as possible. 3371da177e4SLinus Torvalds */ 3381da177e4SLinus Torvalds typedef enum { 3391da177e4SLinus Torvalds SCTP_SCOPE_GLOBAL, /* IPv4 global addresses */ 3401da177e4SLinus Torvalds SCTP_SCOPE_PRIVATE, /* IPv4 private addresses */ 3411da177e4SLinus Torvalds SCTP_SCOPE_LINK, /* IPv4 link local address */ 3421da177e4SLinus Torvalds SCTP_SCOPE_LOOPBACK, /* IPv4 loopback address */ 3431da177e4SLinus Torvalds SCTP_SCOPE_UNUSABLE, /* IPv4 unusable addresses */ 3441da177e4SLinus Torvalds } sctp_scope_t; 3451da177e4SLinus Torvalds 34672388433SBhaskar Dutta typedef enum { 34772388433SBhaskar Dutta SCTP_SCOPE_POLICY_DISABLE, /* Disable IPv4 address scoping */ 34872388433SBhaskar Dutta SCTP_SCOPE_POLICY_ENABLE, /* Enable IPv4 address scoping */ 34972388433SBhaskar Dutta SCTP_SCOPE_POLICY_PRIVATE, /* Follow draft but allow IPv4 private addresses */ 35072388433SBhaskar Dutta SCTP_SCOPE_POLICY_LINK, /* Follow draft but allow IPv4 link local addresses */ 35172388433SBhaskar Dutta } sctp_scope_policy_t; 35272388433SBhaskar Dutta 3531da177e4SLinus Torvalds /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, 3541da177e4SLinus Torvalds * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24, 3551da177e4SLinus Torvalds * 192.88.99.0/24. 3561da177e4SLinus Torvalds * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP 3571da177e4SLinus Torvalds * addresses. 3581da177e4SLinus Torvalds */ 3591da177e4SLinus Torvalds #define IS_IPV4_UNUSABLE_ADDRESS(a) \ 360b5cb2bbcSJoe Perches ((htonl(INADDR_BROADCAST) == a) || \ 361b5cb2bbcSJoe Perches ipv4_is_multicast(a) || \ 362b5cb2bbcSJoe Perches ipv4_is_zeronet(a) || \ 363b5cb2bbcSJoe Perches ipv4_is_test_198(a) || \ 364b5cb2bbcSJoe Perches ipv4_is_anycast_6to4(a)) 3651da177e4SLinus Torvalds 3661da177e4SLinus Torvalds /* Flags used for the bind address copy functions. */ 3671da177e4SLinus Torvalds #define SCTP_ADDR6_ALLOWED 0x00000001 /* IPv6 address is allowed by 3681da177e4SLinus Torvalds local sock family */ 3691da177e4SLinus Torvalds #define SCTP_ADDR4_PEERSUPP 0x00000002 /* IPv4 address is supported by 3701da177e4SLinus Torvalds peer */ 3711da177e4SLinus Torvalds #define SCTP_ADDR6_PEERSUPP 0x00000004 /* IPv6 address is supported by 3721da177e4SLinus Torvalds peer */ 3731da177e4SLinus Torvalds 3741da177e4SLinus Torvalds /* Reasons to retransmit. */ 3751da177e4SLinus Torvalds typedef enum { 3761da177e4SLinus Torvalds SCTP_RTXR_T3_RTX, 3771da177e4SLinus Torvalds SCTP_RTXR_FAST_RTX, 3781da177e4SLinus Torvalds SCTP_RTXR_PMTUD, 379b6157d8eSVlad Yasevich SCTP_RTXR_T1_RTX, 3801da177e4SLinus Torvalds } sctp_retransmit_reason_t; 3811da177e4SLinus Torvalds 3821da177e4SLinus Torvalds /* Reasons to lower cwnd. */ 3831da177e4SLinus Torvalds typedef enum { 3841da177e4SLinus Torvalds SCTP_LOWER_CWND_T3_RTX, 3851da177e4SLinus Torvalds SCTP_LOWER_CWND_FAST_RTX, 3861da177e4SLinus Torvalds SCTP_LOWER_CWND_ECNE, 3871da177e4SLinus Torvalds SCTP_LOWER_CWND_INACTIVE, 3881da177e4SLinus Torvalds } sctp_lower_cwnd_t; 3891da177e4SLinus Torvalds 3901f485649SVlad Yasevich 3911f485649SVlad Yasevich /* SCTP-AUTH Necessary constants */ 3921f485649SVlad Yasevich 3931f485649SVlad Yasevich /* SCTP-AUTH, Section 3.3 3941f485649SVlad Yasevich * 3951f485649SVlad Yasevich * The following Table 2 shows the currently defined values for HMAC 3961f485649SVlad Yasevich * identifiers. 3971f485649SVlad Yasevich * 3981f485649SVlad Yasevich * +-----------------+--------------------------+ 3991f485649SVlad Yasevich * | HMAC Identifier | Message Digest Algorithm | 4001f485649SVlad Yasevich * +-----------------+--------------------------+ 4011f485649SVlad Yasevich * | 0 | Reserved | 4021f485649SVlad Yasevich * | 1 | SHA-1 defined in [8] | 4031f485649SVlad Yasevich * | 2 | Reserved | 4041f485649SVlad Yasevich * | 3 | SHA-256 defined in [8] | 4051f485649SVlad Yasevich * +-----------------+--------------------------+ 4061f485649SVlad Yasevich */ 4071f485649SVlad Yasevich enum { 4081f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_RESERVED_0, 4091f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_SHA1, 4101f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_RESERVED_2, 411b7e0fe9fSVlad Yasevich #if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE) 412b7e0fe9fSVlad Yasevich SCTP_AUTH_HMAC_ID_SHA256, 413b7e0fe9fSVlad Yasevich #endif 414b7e0fe9fSVlad Yasevich __SCTP_AUTH_HMAC_MAX 4151f485649SVlad Yasevich }; 4161f485649SVlad Yasevich 417b7e0fe9fSVlad Yasevich #define SCTP_AUTH_HMAC_ID_MAX __SCTP_AUTH_HMAC_MAX - 1 418b7e0fe9fSVlad Yasevich #define SCTP_AUTH_NUM_HMACS __SCTP_AUTH_HMAC_MAX 4191f485649SVlad Yasevich #define SCTP_SHA1_SIG_SIZE 20 4201f485649SVlad Yasevich #define SCTP_SHA256_SIG_SIZE 32 4211f485649SVlad Yasevich 4221f485649SVlad Yasevich /* SCTP-AUTH, Section 3.2 4231f485649SVlad Yasevich * The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks 4241f485649SVlad Yasevich * MUST NOT be listed in the CHUNKS parameter 4251f485649SVlad Yasevich */ 4261f485649SVlad Yasevich #define SCTP_NUM_NOAUTH_CHUNKS 4 4271f485649SVlad Yasevich #define SCTP_AUTH_MAX_CHUNKS (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS) 4281f485649SVlad Yasevich 4291f485649SVlad Yasevich /* SCTP-AUTH Section 6.1 4301f485649SVlad Yasevich * The RANDOM parameter MUST contain a 32 byte random number. 4311f485649SVlad Yasevich */ 4321f485649SVlad Yasevich #define SCTP_AUTH_RANDOM_LENGTH 32 4331f485649SVlad Yasevich 4341da177e4SLinus Torvalds #endif /* __sctp_constants_h__ */ 435