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 22a6227e26SJeff Kirsher * along with GNU CC; see the file COPYING. If not, see 23a6227e26SJeff Kirsher * <http://www.gnu.org/licenses/>. 241da177e4SLinus Torvalds * 251da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the 261da177e4SLinus Torvalds * email address(es): 2791705c61SDaniel Borkmann * lksctp developers <linux-sctp@vger.kernel.org> 281da177e4SLinus Torvalds * 291da177e4SLinus Torvalds * Written or modified by: 301da177e4SLinus Torvalds * La Monte H.P. Yarroll <piggy@acm.org> 311da177e4SLinus Torvalds * Karl Knutson <karl@athena.chicago.il.us> 321da177e4SLinus Torvalds * Randall Stewart <randall@stewart.chicago.il.us> 331da177e4SLinus Torvalds * Ken Morneau <kmorneau@cisco.com> 341da177e4SLinus Torvalds * Qiaobing Xie <qxie1@motorola.com> 351da177e4SLinus Torvalds * Xingang Guo <xingang.guo@intel.com> 361da177e4SLinus Torvalds * Sridhar Samudrala <samudrala@us.ibm.com> 371da177e4SLinus Torvalds * Daisy Chang <daisyc@us.ibm.com> 381da177e4SLinus Torvalds */ 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds #ifndef __sctp_constants_h__ 411da177e4SLinus Torvalds #define __sctp_constants_h__ 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds #include <linux/sctp.h> 441da177e4SLinus Torvalds #include <linux/ipv6.h> /* For ipv6hdr. */ 45c752f073SArnaldo Carvalho de Melo #include <net/tcp_states.h> /* For TCP states used in sctp_sock_state_t */ 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds /* Value used for stream negotiation. */ 481da177e4SLinus Torvalds enum { SCTP_MAX_STREAM = 0xffff }; 491da177e4SLinus Torvalds enum { SCTP_DEFAULT_OUTSTREAMS = 10 }; 501da177e4SLinus Torvalds enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM }; 511da177e4SLinus Torvalds 521da177e4SLinus Torvalds /* Since CIDs are sparse, we need all four of the following 531da177e4SLinus Torvalds * symbols. CIDs are dense through SCTP_CID_BASE_MAX. 541da177e4SLinus Torvalds */ 551da177e4SLinus Torvalds #define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds #define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1) 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds #define SCTP_NUM_ADDIP_CHUNK_TYPES 2 601da177e4SLinus Torvalds 611da177e4SLinus Torvalds #define SCTP_NUM_PRSCTP_CHUNK_TYPES 1 621da177e4SLinus Torvalds 63d884aa63SXin Long #define SCTP_NUM_RECONF_CHUNK_TYPES 1 64d884aa63SXin Long 651f485649SVlad Yasevich #define SCTP_NUM_AUTH_CHUNK_TYPES 1 661f485649SVlad Yasevich 671f485649SVlad Yasevich #define SCTP_NUM_CHUNK_TYPES (SCTP_NUM_BASE_CHUNK_TYPES + \ 681f485649SVlad Yasevich SCTP_NUM_ADDIP_CHUNK_TYPES +\ 691f485649SVlad Yasevich SCTP_NUM_PRSCTP_CHUNK_TYPES +\ 70d884aa63SXin Long SCTP_NUM_RECONF_CHUNK_TYPES +\ 711f485649SVlad Yasevich SCTP_NUM_AUTH_CHUNK_TYPES) 721f485649SVlad Yasevich 731da177e4SLinus Torvalds /* These are the different flavours of event. */ 741da177e4SLinus Torvalds typedef enum { 751da177e4SLinus Torvalds 761da177e4SLinus Torvalds SCTP_EVENT_T_CHUNK = 1, 771da177e4SLinus Torvalds SCTP_EVENT_T_TIMEOUT, 781da177e4SLinus Torvalds SCTP_EVENT_T_OTHER, 791da177e4SLinus Torvalds SCTP_EVENT_T_PRIMITIVE 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds } sctp_event_t; 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds /* As a convenience for the state machine, we append SCTP_EVENT_* and 841da177e4SLinus Torvalds * SCTP_ULP_* to the list of possible chunks. 851da177e4SLinus Torvalds */ 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds typedef enum { 881da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_NONE = 0, 891da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T1_COOKIE, 901da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T1_INIT, 911da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T2_SHUTDOWN, 921da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T3_RTX, 931da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T4_RTO, 941da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD, 951da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_HEARTBEAT, 967b9438deSXin Long SCTP_EVENT_TIMEOUT_RECONF, 971da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_SACK, 981da177e4SLinus Torvalds SCTP_EVENT_TIMEOUT_AUTOCLOSE, 991da177e4SLinus Torvalds } sctp_event_timeout_t; 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds #define SCTP_EVENT_TIMEOUT_MAX SCTP_EVENT_TIMEOUT_AUTOCLOSE 1021da177e4SLinus Torvalds #define SCTP_NUM_TIMEOUT_TYPES (SCTP_EVENT_TIMEOUT_MAX + 1) 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds typedef enum { 1051da177e4SLinus Torvalds SCTP_EVENT_NO_PENDING_TSN = 0, 1061da177e4SLinus Torvalds SCTP_EVENT_ICMP_PROTO_UNREACH, 1071da177e4SLinus Torvalds } sctp_event_other_t; 1081da177e4SLinus Torvalds 1091da177e4SLinus Torvalds #define SCTP_EVENT_OTHER_MAX SCTP_EVENT_ICMP_PROTO_UNREACH 1101da177e4SLinus Torvalds #define SCTP_NUM_OTHER_TYPES (SCTP_EVENT_OTHER_MAX + 1) 1111da177e4SLinus Torvalds 1121da177e4SLinus Torvalds /* These are primitive requests from the ULP. */ 1131da177e4SLinus Torvalds typedef enum { 1141da177e4SLinus Torvalds SCTP_PRIMITIVE_ASSOCIATE = 0, 1151da177e4SLinus Torvalds SCTP_PRIMITIVE_SHUTDOWN, 1161da177e4SLinus Torvalds SCTP_PRIMITIVE_ABORT, 1171da177e4SLinus Torvalds SCTP_PRIMITIVE_SEND, 1181da177e4SLinus Torvalds SCTP_PRIMITIVE_REQUESTHEARTBEAT, 1191da177e4SLinus Torvalds SCTP_PRIMITIVE_ASCONF, 1207a090b04SXin Long SCTP_PRIMITIVE_RECONF, 1211da177e4SLinus Torvalds } sctp_event_primitive_t; 1221da177e4SLinus Torvalds 1237a090b04SXin Long #define SCTP_EVENT_PRIMITIVE_MAX SCTP_PRIMITIVE_RECONF 1241da177e4SLinus Torvalds #define SCTP_NUM_PRIMITIVE_TYPES (SCTP_EVENT_PRIMITIVE_MAX + 1) 1251da177e4SLinus Torvalds 1261da177e4SLinus Torvalds /* We define here a utility type for manipulating subtypes. 1271da177e4SLinus Torvalds * The subtype constructors all work like this: 1281da177e4SLinus Torvalds * 1291da177e4SLinus Torvalds * sctp_subtype_t foo = SCTP_ST_CHUNK(SCTP_CID_INIT); 1301da177e4SLinus Torvalds */ 1311da177e4SLinus Torvalds 1321da177e4SLinus Torvalds typedef union { 1336d85e68fSXin Long enum sctp_cid chunk; 1341da177e4SLinus Torvalds sctp_event_timeout_t timeout; 1351da177e4SLinus Torvalds sctp_event_other_t other; 1361da177e4SLinus Torvalds sctp_event_primitive_t primitive; 1371da177e4SLinus Torvalds } sctp_subtype_t; 1381da177e4SLinus Torvalds 1391da177e4SLinus Torvalds #define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \ 1401da177e4SLinus Torvalds static inline sctp_subtype_t \ 1411da177e4SLinus Torvalds SCTP_ST_## _name (_type _arg) \ 1421da177e4SLinus Torvalds { sctp_subtype_t _retval; _retval._elt = _arg; return _retval; } 1431da177e4SLinus Torvalds 1446d85e68fSXin Long SCTP_SUBTYPE_CONSTRUCTOR(CHUNK, enum sctp_cid, chunk) 1451da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT, sctp_event_timeout_t, timeout) 1461da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(OTHER, sctp_event_other_t, other) 1471da177e4SLinus Torvalds SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE, sctp_event_primitive_t, primitive) 1481da177e4SLinus Torvalds 1491da177e4SLinus Torvalds 1501da177e4SLinus Torvalds #define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA) 1511da177e4SLinus Torvalds 1521da177e4SLinus Torvalds /* Calculate the actual data size in a data chunk */ 1531da177e4SLinus Torvalds #define SCTP_DATA_SNDSIZE(c) ((int)((unsigned long)(c->chunk_end)\ 1541da177e4SLinus Torvalds - (unsigned long)(c->chunk_hdr)\ 1551da177e4SLinus Torvalds - sizeof(sctp_data_chunk_t))) 1561da177e4SLinus Torvalds 1571da177e4SLinus Torvalds /* Internal error codes */ 1581da177e4SLinus Torvalds typedef enum { 1591da177e4SLinus Torvalds 1601da177e4SLinus Torvalds SCTP_IERROR_NO_ERROR = 0, 1611da177e4SLinus Torvalds SCTP_IERROR_BASE = 1000, 1621da177e4SLinus Torvalds SCTP_IERROR_NO_COOKIE, 1631da177e4SLinus Torvalds SCTP_IERROR_BAD_SIG, 1641da177e4SLinus Torvalds SCTP_IERROR_STALE_COOKIE, 1651da177e4SLinus Torvalds SCTP_IERROR_NOMEM, 1661da177e4SLinus Torvalds SCTP_IERROR_MALFORMED, 1671da177e4SLinus Torvalds SCTP_IERROR_BAD_TAG, 1681da177e4SLinus Torvalds SCTP_IERROR_BIG_GAP, 1691da177e4SLinus Torvalds SCTP_IERROR_DUP_TSN, 1701da177e4SLinus Torvalds SCTP_IERROR_HIGH_TSN, 1711da177e4SLinus Torvalds SCTP_IERROR_IGNORE_TSN, 1721da177e4SLinus Torvalds SCTP_IERROR_NO_DATA, 1731da177e4SLinus Torvalds SCTP_IERROR_BAD_STREAM, 1741da177e4SLinus Torvalds SCTP_IERROR_BAD_PORTS, 175bbd0d598SVlad Yasevich SCTP_IERROR_AUTH_BAD_HMAC, 176bbd0d598SVlad Yasevich SCTP_IERROR_AUTH_BAD_KEYID, 177bbd0d598SVlad Yasevich SCTP_IERROR_PROTO_VIOLATION, 1787ab90804SVlad Yasevich SCTP_IERROR_ERROR, 1797ab90804SVlad Yasevich SCTP_IERROR_ABORT, 1801da177e4SLinus Torvalds } sctp_ierror_t; 1811da177e4SLinus Torvalds 1821da177e4SLinus Torvalds 1831da177e4SLinus Torvalds 1841da177e4SLinus Torvalds /* SCTP state defines for internal state machine */ 1851da177e4SLinus Torvalds typedef enum { 1861da177e4SLinus Torvalds 1870b8f9e25SVlad Yasevich SCTP_STATE_CLOSED = 0, 1880b8f9e25SVlad Yasevich SCTP_STATE_COOKIE_WAIT = 1, 1890b8f9e25SVlad Yasevich SCTP_STATE_COOKIE_ECHOED = 2, 1900b8f9e25SVlad Yasevich SCTP_STATE_ESTABLISHED = 3, 1910b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_PENDING = 4, 1920b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_SENT = 5, 1930b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_RECEIVED = 6, 1940b8f9e25SVlad Yasevich SCTP_STATE_SHUTDOWN_ACK_SENT = 7, 1951da177e4SLinus Torvalds 1961da177e4SLinus Torvalds } sctp_state_t; 1971da177e4SLinus Torvalds 1981da177e4SLinus Torvalds #define SCTP_STATE_MAX SCTP_STATE_SHUTDOWN_ACK_SENT 1991da177e4SLinus Torvalds #define SCTP_STATE_NUM_STATES (SCTP_STATE_MAX + 1) 2001da177e4SLinus Torvalds 2011da177e4SLinus Torvalds /* These are values for sk->state. 2021da177e4SLinus Torvalds * For a UDP-style SCTP socket, the states are defined as follows 2031da177e4SLinus Torvalds * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to 2041da177e4SLinus Torvalds * accept new associations, but it can initiate the creation of new ones. 2051da177e4SLinus Torvalds * - A socket in SCTP_SS_LISTENING state indicates that it is willing to 2061da177e4SLinus Torvalds * accept new associations and can initiate the creation of new ones. 2071da177e4SLinus Torvalds * - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off 2081da177e4SLinus Torvalds * socket with one association. 2091da177e4SLinus Torvalds * For a TCP-style SCTP socket, the states are defined as follows 2101da177e4SLinus Torvalds * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to 2111da177e4SLinus Torvalds * accept new associations, but it can initiate the creation of new ones. 2121da177e4SLinus Torvalds * - A socket in SCTP_SS_LISTENING state indicates that it is willing to 2131da177e4SLinus Torvalds * accept new associations, but cannot initiate the creation of new ones. 2141da177e4SLinus Torvalds * - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single 2151da177e4SLinus Torvalds * association. 2161da177e4SLinus Torvalds */ 2171da177e4SLinus Torvalds typedef enum { 2181da177e4SLinus Torvalds SCTP_SS_CLOSED = TCP_CLOSE, 2191da177e4SLinus Torvalds SCTP_SS_LISTENING = TCP_LISTEN, 2201da177e4SLinus Torvalds SCTP_SS_ESTABLISHING = TCP_SYN_SENT, 2211da177e4SLinus Torvalds SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, 222df7e88f6SXin Long SCTP_SS_CLOSING = TCP_CLOSE_WAIT, 2231da177e4SLinus Torvalds } sctp_sock_state_t; 2241da177e4SLinus Torvalds 2251da177e4SLinus Torvalds /* These functions map various type to printable names. */ 2261da177e4SLinus Torvalds const char *sctp_cname(const sctp_subtype_t); /* chunk types */ 2271da177e4SLinus Torvalds const char *sctp_oname(const sctp_subtype_t); /* other events */ 2281da177e4SLinus Torvalds const char *sctp_tname(const sctp_subtype_t); /* timeouts */ 2291da177e4SLinus Torvalds const char *sctp_pname(const sctp_subtype_t); /* primitives */ 2301da177e4SLinus Torvalds 2311da177e4SLinus Torvalds /* This is a table of printable names of sctp_state_t's. */ 23236cbd3dcSJan Engelhardt extern const char *const sctp_state_tbl[]; 23336cbd3dcSJan Engelhardt extern const char *const sctp_evttype_tbl[]; 23436cbd3dcSJan Engelhardt extern const char *const sctp_status_tbl[]; 2351da177e4SLinus Torvalds 2361da177e4SLinus Torvalds /* Maximum chunk length considering padding requirements. */ 2371da177e4SLinus Torvalds enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) }; 2381da177e4SLinus Torvalds 2391da177e4SLinus Torvalds /* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little 2401da177e4SLinus Torvalds * harder (until reaching ESTABLISHED state). 2411da177e4SLinus Torvalds */ 2421da177e4SLinus Torvalds enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 }; 2431da177e4SLinus Torvalds 2441da177e4SLinus Torvalds /* Guess at how big to make the TSN mapping array. 2451da177e4SLinus Torvalds * We guarantee that we can handle at least this big a gap between the 2461da177e4SLinus Torvalds * cumulative ACK and the highest TSN. In practice, we can often 2471da177e4SLinus Torvalds * handle up to twice this value. 2481da177e4SLinus Torvalds * 2491da177e4SLinus Torvalds * NEVER make this more than 32767 (2^15-1). The Gap Ack Blocks in a 2501da177e4SLinus Torvalds * SACK (see section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE 2511da177e4SLinus Torvalds * must be less than 65535 (2^16 - 1), or we will have overflow 2521da177e4SLinus Torvalds * problems creating SACK's. 2531da177e4SLinus Torvalds */ 2548e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_INITIAL BITS_PER_LONG 2558e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL 2568e1ee18cSVlad Yasevich #define SCTP_TSN_MAP_SIZE 4096 2571da177e4SLinus Torvalds 2581da177e4SLinus Torvalds /* We will not record more than this many duplicate TSNs between two 2591da177e4SLinus Torvalds * SACKs. The minimum PMTU is 576. Remove all the headers and there 2601da177e4SLinus Torvalds * is enough room for 131 duplicate reports. Round down to the 2611da177e4SLinus Torvalds * nearest power of 2. 2621da177e4SLinus Torvalds */ 2631da177e4SLinus Torvalds enum { SCTP_MIN_PMTU = 576 }; 2641da177e4SLinus Torvalds enum { SCTP_MAX_DUP_TSNS = 16 }; 2651da177e4SLinus Torvalds enum { SCTP_MAX_GABS = 16 }; 2661da177e4SLinus Torvalds 2672f85a429SVlad Yasevich /* Heartbeat interval - 30 secs */ 2683fd091e7SVladislav Yasevich #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30*1000) 2691da177e4SLinus Torvalds 2702f85a429SVlad Yasevich /* Delayed sack timer - 200ms */ 2713fd091e7SVladislav Yasevich #define SCTP_DEFAULT_TIMEOUT_SACK (200) 2721da177e4SLinus Torvalds 2731da177e4SLinus Torvalds /* RTO.Initial - 3 seconds 2741da177e4SLinus Torvalds * RTO.Min - 1 second 2751da177e4SLinus Torvalds * RTO.Max - 60 seconds 2761da177e4SLinus Torvalds * RTO.Alpha - 1/8 2771da177e4SLinus Torvalds * RTO.Beta - 1/4 2781da177e4SLinus Torvalds */ 2793fd091e7SVladislav Yasevich #define SCTP_RTO_INITIAL (3 * 1000) 2803fd091e7SVladislav Yasevich #define SCTP_RTO_MIN (1 * 1000) 2813fd091e7SVladislav Yasevich #define SCTP_RTO_MAX (60 * 1000) 2821da177e4SLinus Torvalds 2831da177e4SLinus Torvalds #define SCTP_RTO_ALPHA 3 /* 1/8 when converted to right shifts. */ 2841da177e4SLinus Torvalds #define SCTP_RTO_BETA 2 /* 1/4 when converted to right shifts. */ 2851da177e4SLinus Torvalds 2861da177e4SLinus Torvalds /* Maximum number of new data packets that can be sent in a burst. */ 28770331571SVlad Yasevich #define SCTP_DEFAULT_MAX_BURST 4 2881da177e4SLinus Torvalds 2891da177e4SLinus Torvalds #define SCTP_CLOCK_GRANULARITY 1 /* 1 jiffy */ 2901da177e4SLinus Torvalds 2913fd091e7SVladislav Yasevich #define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000) /* 60 seconds */ 2921da177e4SLinus Torvalds 2931da177e4SLinus Torvalds #define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */ 2941da177e4SLinus Torvalds #define SCTP_DEFAULT_MAXWINDOW 65535 /* default rwnd size */ 29590f2f531SVlad Yasevich #define SCTP_DEFAULT_RWND_SHIFT 4 /* by default, update on 1/16 of 29690f2f531SVlad Yasevich * rcvbuf, which is 1/8 of initial 29790f2f531SVlad Yasevich * window 29890f2f531SVlad Yasevich */ 2991da177e4SLinus Torvalds #define SCTP_DEFAULT_MAXSEGMENT 1500 /* MTU size, this is the limit 3001da177e4SLinus Torvalds * to which we will raise the P-MTU. 3011da177e4SLinus Torvalds */ 3021da177e4SLinus Torvalds #define SCTP_DEFAULT_MINSEGMENT 512 /* MTU size ... if no mtu disc */ 303570617e7SDaniel Borkmann 3041da177e4SLinus Torvalds #define SCTP_SECRET_SIZE 32 /* Number of octets in a 256 bits. */ 3051da177e4SLinus Torvalds 3061da177e4SLinus Torvalds #define SCTP_SIGNATURE_SIZE 20 /* size of a SLA-1 signature */ 3071da177e4SLinus Torvalds 3081da177e4SLinus Torvalds #define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash 3091da177e4SLinus Torvalds * functions simpler to write. 3101da177e4SLinus Torvalds */ 3111da177e4SLinus Torvalds 3121da177e4SLinus Torvalds /* These return values describe the success or failure of a number of 3131da177e4SLinus Torvalds * routines which form the lower interface to SCTP_outqueue. 3141da177e4SLinus Torvalds */ 3151da177e4SLinus Torvalds typedef enum { 3161da177e4SLinus Torvalds SCTP_XMIT_OK, 3171da177e4SLinus Torvalds SCTP_XMIT_PMTU_FULL, 3181da177e4SLinus Torvalds SCTP_XMIT_RWND_FULL, 319526cbef7SDavid Laight SCTP_XMIT_DELAY, 3201da177e4SLinus Torvalds } sctp_xmit_t; 3211da177e4SLinus Torvalds 3221da177e4SLinus Torvalds /* These are the commands for manipulating transports. */ 3231da177e4SLinus Torvalds typedef enum { 3241da177e4SLinus Torvalds SCTP_TRANSPORT_UP, 3251da177e4SLinus Torvalds SCTP_TRANSPORT_DOWN, 3265aa93bcfSNeil Horman SCTP_TRANSPORT_PF, 3271da177e4SLinus Torvalds } sctp_transport_cmd_t; 3281da177e4SLinus Torvalds 3291da177e4SLinus Torvalds /* These are the address scopes defined mainly for IPv4 addresses 3301da177e4SLinus Torvalds * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>. 3311da177e4SLinus Torvalds * These scopes are hopefully generic enough to be used on scoping both 3321da177e4SLinus Torvalds * IPv4 and IPv6 addresses in SCTP. 3331da177e4SLinus Torvalds * At this point, the IPv6 scopes will be mapped to these internal scopes 3341da177e4SLinus Torvalds * as much as possible. 3351da177e4SLinus Torvalds */ 3361da177e4SLinus Torvalds typedef enum { 3371da177e4SLinus Torvalds SCTP_SCOPE_GLOBAL, /* IPv4 global addresses */ 3381da177e4SLinus Torvalds SCTP_SCOPE_PRIVATE, /* IPv4 private addresses */ 3391da177e4SLinus Torvalds SCTP_SCOPE_LINK, /* IPv4 link local address */ 3401da177e4SLinus Torvalds SCTP_SCOPE_LOOPBACK, /* IPv4 loopback address */ 3411da177e4SLinus Torvalds SCTP_SCOPE_UNUSABLE, /* IPv4 unusable addresses */ 3421da177e4SLinus Torvalds } sctp_scope_t; 3431da177e4SLinus Torvalds 34472388433SBhaskar Dutta typedef enum { 34572388433SBhaskar Dutta SCTP_SCOPE_POLICY_DISABLE, /* Disable IPv4 address scoping */ 34672388433SBhaskar Dutta SCTP_SCOPE_POLICY_ENABLE, /* Enable IPv4 address scoping */ 34772388433SBhaskar Dutta SCTP_SCOPE_POLICY_PRIVATE, /* Follow draft but allow IPv4 private addresses */ 34872388433SBhaskar Dutta SCTP_SCOPE_POLICY_LINK, /* Follow draft but allow IPv4 link local addresses */ 34972388433SBhaskar Dutta } sctp_scope_policy_t; 35072388433SBhaskar Dutta 3511da177e4SLinus Torvalds /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, 3521da177e4SLinus Torvalds * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24, 3531da177e4SLinus Torvalds * 192.88.99.0/24. 3541da177e4SLinus Torvalds * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP 3551da177e4SLinus Torvalds * addresses. 3561da177e4SLinus Torvalds */ 3571da177e4SLinus Torvalds #define IS_IPV4_UNUSABLE_ADDRESS(a) \ 358b5cb2bbcSJoe Perches ((htonl(INADDR_BROADCAST) == a) || \ 359b5cb2bbcSJoe Perches ipv4_is_multicast(a) || \ 360b5cb2bbcSJoe Perches ipv4_is_zeronet(a) || \ 361b5cb2bbcSJoe Perches ipv4_is_test_198(a) || \ 362b5cb2bbcSJoe Perches ipv4_is_anycast_6to4(a)) 3631da177e4SLinus Torvalds 3641da177e4SLinus Torvalds /* Flags used for the bind address copy functions. */ 3651da177e4SLinus Torvalds #define SCTP_ADDR6_ALLOWED 0x00000001 /* IPv6 address is allowed by 3661da177e4SLinus Torvalds local sock family */ 3671da177e4SLinus Torvalds #define SCTP_ADDR4_PEERSUPP 0x00000002 /* IPv4 address is supported by 3681da177e4SLinus Torvalds peer */ 3691da177e4SLinus Torvalds #define SCTP_ADDR6_PEERSUPP 0x00000004 /* IPv6 address is supported by 3701da177e4SLinus Torvalds peer */ 3711da177e4SLinus Torvalds 3721da177e4SLinus Torvalds /* Reasons to retransmit. */ 3731da177e4SLinus Torvalds typedef enum { 3741da177e4SLinus Torvalds SCTP_RTXR_T3_RTX, 3751da177e4SLinus Torvalds SCTP_RTXR_FAST_RTX, 3761da177e4SLinus Torvalds SCTP_RTXR_PMTUD, 377b6157d8eSVlad Yasevich SCTP_RTXR_T1_RTX, 3781da177e4SLinus Torvalds } sctp_retransmit_reason_t; 3791da177e4SLinus Torvalds 3801da177e4SLinus Torvalds /* Reasons to lower cwnd. */ 3811da177e4SLinus Torvalds typedef enum { 3821da177e4SLinus Torvalds SCTP_LOWER_CWND_T3_RTX, 3831da177e4SLinus Torvalds SCTP_LOWER_CWND_FAST_RTX, 3841da177e4SLinus Torvalds SCTP_LOWER_CWND_ECNE, 3851da177e4SLinus Torvalds SCTP_LOWER_CWND_INACTIVE, 3861da177e4SLinus Torvalds } sctp_lower_cwnd_t; 3871da177e4SLinus Torvalds 3881f485649SVlad Yasevich 3891f485649SVlad Yasevich /* SCTP-AUTH Necessary constants */ 3901f485649SVlad Yasevich 3911f485649SVlad Yasevich /* SCTP-AUTH, Section 3.3 3921f485649SVlad Yasevich * 3931f485649SVlad Yasevich * The following Table 2 shows the currently defined values for HMAC 3941f485649SVlad Yasevich * identifiers. 3951f485649SVlad Yasevich * 3961f485649SVlad Yasevich * +-----------------+--------------------------+ 3971f485649SVlad Yasevich * | HMAC Identifier | Message Digest Algorithm | 3981f485649SVlad Yasevich * +-----------------+--------------------------+ 3991f485649SVlad Yasevich * | 0 | Reserved | 4001f485649SVlad Yasevich * | 1 | SHA-1 defined in [8] | 4011f485649SVlad Yasevich * | 2 | Reserved | 4021f485649SVlad Yasevich * | 3 | SHA-256 defined in [8] | 4031f485649SVlad Yasevich * +-----------------+--------------------------+ 4041f485649SVlad Yasevich */ 4051f485649SVlad Yasevich enum { 4061f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_RESERVED_0, 4071f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_SHA1, 4081f485649SVlad Yasevich SCTP_AUTH_HMAC_ID_RESERVED_2, 409b7e0fe9fSVlad Yasevich #if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE) 410b7e0fe9fSVlad Yasevich SCTP_AUTH_HMAC_ID_SHA256, 411b7e0fe9fSVlad Yasevich #endif 412b7e0fe9fSVlad Yasevich __SCTP_AUTH_HMAC_MAX 4131f485649SVlad Yasevich }; 4141f485649SVlad Yasevich 415b7e0fe9fSVlad Yasevich #define SCTP_AUTH_HMAC_ID_MAX __SCTP_AUTH_HMAC_MAX - 1 416b7e0fe9fSVlad Yasevich #define SCTP_AUTH_NUM_HMACS __SCTP_AUTH_HMAC_MAX 4171f485649SVlad Yasevich #define SCTP_SHA1_SIG_SIZE 20 4181f485649SVlad Yasevich #define SCTP_SHA256_SIG_SIZE 32 4191f485649SVlad Yasevich 4201f485649SVlad Yasevich /* SCTP-AUTH, Section 3.2 4211f485649SVlad Yasevich * The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks 4221f485649SVlad Yasevich * MUST NOT be listed in the CHUNKS parameter 4231f485649SVlad Yasevich */ 4241f485649SVlad Yasevich #define SCTP_NUM_NOAUTH_CHUNKS 4 4251f485649SVlad Yasevich #define SCTP_AUTH_MAX_CHUNKS (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS) 4261f485649SVlad Yasevich 4271f485649SVlad Yasevich /* SCTP-AUTH Section 6.1 4281f485649SVlad Yasevich * The RANDOM parameter MUST contain a 32 byte random number. 4291f485649SVlad Yasevich */ 4301f485649SVlad Yasevich #define SCTP_AUTH_RANDOM_LENGTH 32 4311f485649SVlad Yasevich 4321da177e4SLinus Torvalds #endif /* __sctp_constants_h__ */ 433