home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / sctp / constants.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  14.4 KB  |  446 lines

  1. /* SCTP kernel 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 implementation
  8.  *
  9.  * This SCTP 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.  * This SCTP 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.  
  50. #include <linux/sctp.h>
  51. #include <linux/ipv6.h> /* For ipv6hdr. */
  52. #include <net/sctp/user.h>
  53. #include <net/tcp_states.h>  /* For TCP states used in sctp_sock_state_t */
  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.  
  68. #define SCTP_NUM_ADDIP_CHUNK_TYPES    2
  69.  
  70. #define SCTP_NUM_PRSCTP_CHUNK_TYPES    1
  71.  
  72. #define SCTP_NUM_AUTH_CHUNK_TYPES    1
  73.  
  74. #define SCTP_NUM_CHUNK_TYPES        (SCTP_NUM_BASE_CHUNK_TYPES + \
  75.                      SCTP_NUM_ADDIP_CHUNK_TYPES +\
  76.                      SCTP_NUM_PRSCTP_CHUNK_TYPES +\
  77.                      SCTP_NUM_AUTH_CHUNK_TYPES)
  78.  
  79. /* These are the different flavours of event.  */
  80. typedef enum {
  81.  
  82.     SCTP_EVENT_T_CHUNK = 1,
  83.     SCTP_EVENT_T_TIMEOUT,
  84.     SCTP_EVENT_T_OTHER,
  85.     SCTP_EVENT_T_PRIMITIVE
  86.  
  87. } sctp_event_t;
  88.  
  89. #define SCTP_EVENT_T_MAX SCTP_EVENT_T_PRIMITIVE
  90. #define SCTP_EVENT_T_NUM (SCTP_EVENT_T_MAX + 1)
  91.  
  92. /* As a convenience for the state machine, we append SCTP_EVENT_* and
  93.  * SCTP_ULP_* to the list of possible chunks.
  94.  */
  95.  
  96. typedef enum {
  97.     SCTP_EVENT_TIMEOUT_NONE = 0,
  98.     SCTP_EVENT_TIMEOUT_T1_COOKIE,
  99.     SCTP_EVENT_TIMEOUT_T1_INIT,
  100.     SCTP_EVENT_TIMEOUT_T2_SHUTDOWN,
  101.     SCTP_EVENT_TIMEOUT_T3_RTX,
  102.     SCTP_EVENT_TIMEOUT_T4_RTO,
  103.     SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD,
  104.     SCTP_EVENT_TIMEOUT_HEARTBEAT,
  105.     SCTP_EVENT_TIMEOUT_SACK,
  106.     SCTP_EVENT_TIMEOUT_AUTOCLOSE,
  107. } sctp_event_timeout_t;
  108.  
  109. #define SCTP_EVENT_TIMEOUT_MAX        SCTP_EVENT_TIMEOUT_AUTOCLOSE
  110. #define SCTP_NUM_TIMEOUT_TYPES        (SCTP_EVENT_TIMEOUT_MAX + 1)
  111.  
  112. typedef enum {
  113.     SCTP_EVENT_NO_PENDING_TSN = 0,
  114.     SCTP_EVENT_ICMP_PROTO_UNREACH,
  115. } sctp_event_other_t;
  116.  
  117. #define SCTP_EVENT_OTHER_MAX        SCTP_EVENT_ICMP_PROTO_UNREACH
  118. #define SCTP_NUM_OTHER_TYPES        (SCTP_EVENT_OTHER_MAX + 1)
  119.  
  120. /* These are primitive requests from the ULP.  */
  121. typedef enum {
  122.     SCTP_PRIMITIVE_ASSOCIATE = 0,
  123.     SCTP_PRIMITIVE_SHUTDOWN,
  124.     SCTP_PRIMITIVE_ABORT,
  125.     SCTP_PRIMITIVE_SEND,
  126.     SCTP_PRIMITIVE_REQUESTHEARTBEAT,
  127.     SCTP_PRIMITIVE_ASCONF,
  128. } sctp_event_primitive_t;
  129.  
  130. #define SCTP_EVENT_PRIMITIVE_MAX    SCTP_PRIMITIVE_ASCONF
  131. #define SCTP_NUM_PRIMITIVE_TYPES    (SCTP_EVENT_PRIMITIVE_MAX + 1)
  132.  
  133. /* We define here a utility type for manipulating subtypes.
  134.  * The subtype constructors all work like this:
  135.  *
  136.  *     sctp_subtype_t foo = SCTP_ST_CHUNK(SCTP_CID_INIT);
  137.  */
  138.  
  139. typedef union {
  140.     sctp_cid_t chunk;
  141.     sctp_event_timeout_t timeout;
  142.     sctp_event_other_t other;
  143.     sctp_event_primitive_t primitive;
  144. } sctp_subtype_t;
  145.  
  146. #define SCTP_SUBTYPE_CONSTRUCTOR(_name, _type, _elt) \
  147. static inline sctp_subtype_t    \
  148. SCTP_ST_## _name (_type _arg)        \
  149. { sctp_subtype_t _retval; _retval._elt = _arg; return _retval; }
  150.  
  151. SCTP_SUBTYPE_CONSTRUCTOR(CHUNK,        sctp_cid_t,        chunk)
  152. SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT,    sctp_event_timeout_t,    timeout)
  153. SCTP_SUBTYPE_CONSTRUCTOR(OTHER,        sctp_event_other_t,    other)
  154. SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE,    sctp_event_primitive_t,    primitive)
  155.  
  156.  
  157. #define sctp_chunk_is_control(a) (a->chunk_hdr->type != SCTP_CID_DATA)
  158. #define sctp_chunk_is_data(a) (a->chunk_hdr->type == SCTP_CID_DATA)
  159.  
  160. /* Calculate the actual data size in a data chunk */
  161. #define SCTP_DATA_SNDSIZE(c) ((int)((unsigned long)(c->chunk_end)\
  162.                        - (unsigned long)(c->chunk_hdr)\
  163.                 - sizeof(sctp_data_chunk_t)))
  164.  
  165. #define SCTP_MAX_ERROR_CAUSE  SCTP_ERROR_NONEXIST_IP
  166. #define SCTP_NUM_ERROR_CAUSE  10
  167.  
  168. /* Internal error codes */
  169. typedef enum {
  170.  
  171.     SCTP_IERROR_NO_ERROR            = 0,
  172.     SCTP_IERROR_BASE        = 1000,
  173.     SCTP_IERROR_NO_COOKIE,
  174.     SCTP_IERROR_BAD_SIG,
  175.     SCTP_IERROR_STALE_COOKIE,
  176.     SCTP_IERROR_NOMEM,
  177.     SCTP_IERROR_MALFORMED,
  178.     SCTP_IERROR_BAD_TAG,
  179.     SCTP_IERROR_BIG_GAP,
  180.     SCTP_IERROR_DUP_TSN,
  181.     SCTP_IERROR_HIGH_TSN,
  182.     SCTP_IERROR_IGNORE_TSN,
  183.     SCTP_IERROR_NO_DATA,
  184.     SCTP_IERROR_BAD_STREAM,
  185.     SCTP_IERROR_BAD_PORTS,
  186.     SCTP_IERROR_AUTH_BAD_HMAC,
  187.     SCTP_IERROR_AUTH_BAD_KEYID,
  188.     SCTP_IERROR_PROTO_VIOLATION,
  189.     SCTP_IERROR_ERROR,
  190.     SCTP_IERROR_ABORT,
  191. } sctp_ierror_t;
  192.  
  193.  
  194.  
  195. /* SCTP state defines for internal state machine */
  196. typedef enum {
  197.  
  198.     SCTP_STATE_EMPTY        = 0,
  199.     SCTP_STATE_CLOSED        = 1,
  200.     SCTP_STATE_COOKIE_WAIT        = 2,
  201.     SCTP_STATE_COOKIE_ECHOED    = 3,
  202.     SCTP_STATE_ESTABLISHED        = 4,
  203.     SCTP_STATE_SHUTDOWN_PENDING    = 5,
  204.     SCTP_STATE_SHUTDOWN_SENT    = 6,
  205.     SCTP_STATE_SHUTDOWN_RECEIVED    = 7,
  206.     SCTP_STATE_SHUTDOWN_ACK_SENT    = 8,
  207.  
  208. } sctp_state_t;
  209.  
  210. #define SCTP_STATE_MAX            SCTP_STATE_SHUTDOWN_ACK_SENT
  211. #define SCTP_STATE_NUM_STATES        (SCTP_STATE_MAX + 1)
  212.  
  213. /* These are values for sk->state.
  214.  * For a UDP-style SCTP socket, the states are defined as follows
  215.  * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to
  216.  *   accept new associations, but it can initiate the creation of new ones.
  217.  * - A socket in SCTP_SS_LISTENING state indicates that it is willing to
  218.  *   accept new  associations and can initiate the creation of new ones.
  219.  * - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off
  220.  *   socket with one association.
  221.  * For a TCP-style SCTP socket, the states are defined as follows
  222.  * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to
  223.  *   accept new associations, but it can initiate the creation of new ones.
  224.  * - A socket in SCTP_SS_LISTENING state indicates that it is willing to
  225.  *   accept new associations, but cannot initiate the creation of new ones.
  226.  * - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single 
  227.  *   association.
  228.  */
  229. typedef enum {
  230.     SCTP_SS_CLOSED         = TCP_CLOSE,
  231.     SCTP_SS_LISTENING      = TCP_LISTEN,
  232.     SCTP_SS_ESTABLISHING   = TCP_SYN_SENT,
  233.     SCTP_SS_ESTABLISHED    = TCP_ESTABLISHED,
  234.     SCTP_SS_DISCONNECTING  = TCP_CLOSING,
  235. } sctp_sock_state_t;
  236.  
  237. /* These functions map various type to printable names.  */
  238. const char *sctp_cname(const sctp_subtype_t);    /* chunk types */
  239. const char *sctp_oname(const sctp_subtype_t);    /* other events */
  240. const char *sctp_tname(const sctp_subtype_t);    /* timeouts */
  241. const char *sctp_pname(const sctp_subtype_t);    /* primitives */
  242.  
  243. /* This is a table of printable names of sctp_state_t's.  */
  244. extern const char *sctp_state_tbl[], *sctp_evttype_tbl[], *sctp_status_tbl[];
  245.  
  246. /* Maximum chunk length considering padding requirements. */
  247. enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) };
  248.  
  249. /* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little
  250.  * harder (until reaching ESTABLISHED state).
  251.  */
  252. enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 };
  253.  
  254. /* Guess at how big to make the TSN mapping array.
  255.  * We guarantee that we can handle at least this big a gap between the
  256.  * cumulative ACK and the highest TSN.  In practice, we can often
  257.  * handle up to twice this value.
  258.  *
  259.  * NEVER make this more than 32767 (2^15-1).  The Gap Ack Blocks in a
  260.  * SACK (see  section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE
  261.  * must be less than 65535 (2^16 - 1), or we will have overflow
  262.  * problems creating SACK's.
  263.  */
  264. #define SCTP_TSN_MAP_INITIAL BITS_PER_LONG
  265. #define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL
  266. #define SCTP_TSN_MAP_SIZE 4096
  267. #define SCTP_TSN_MAX_GAP  65535
  268.  
  269. /* We will not record more than this many duplicate TSNs between two
  270.  * SACKs.  The minimum PMTU is 576.  Remove all the headers and there
  271.  * is enough room for 131 duplicate reports.  Round down to the
  272.  * nearest power of 2.
  273.  */
  274. enum { SCTP_MIN_PMTU = 576 };
  275. enum { SCTP_MAX_DUP_TSNS = 16 };
  276. enum { SCTP_MAX_GABS = 16 };
  277.  
  278. /* Heartbeat interval - 30 secs */
  279. #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT    (30*1000)
  280.  
  281. /* Delayed sack timer - 200ms */
  282. #define SCTP_DEFAULT_TIMEOUT_SACK    (200)
  283.  
  284. /* RTO.Initial              - 3  seconds
  285.  * RTO.Min                  - 1  second
  286.  * RTO.Max                  - 60 seconds
  287.  * RTO.Alpha                - 1/8
  288.  * RTO.Beta                 - 1/4
  289.  */
  290. #define SCTP_RTO_INITIAL    (3 * 1000)
  291. #define SCTP_RTO_MIN        (1 * 1000)
  292. #define SCTP_RTO_MAX        (60 * 1000)
  293.  
  294. #define SCTP_RTO_ALPHA          3   /* 1/8 when converted to right shifts. */
  295. #define SCTP_RTO_BETA           2   /* 1/4 when converted to right shifts. */
  296.  
  297. /* Maximum number of new data packets that can be sent in a burst.  */
  298. #define SCTP_DEFAULT_MAX_BURST        4
  299.  
  300. #define SCTP_CLOCK_GRANULARITY    1    /* 1 jiffy */
  301.  
  302. #define SCTP_DEF_MAX_INIT 6
  303. #define SCTP_DEF_MAX_SEND 10
  304.  
  305. #define SCTP_DEFAULT_COOKIE_LIFE    (60 * 1000) /* 60 seconds */
  306.  
  307. #define SCTP_DEFAULT_MINWINDOW    1500    /* default minimum rwnd size */
  308. #define SCTP_DEFAULT_MAXWINDOW    65535    /* default rwnd size */
  309. #define SCTP_DEFAULT_MAXSEGMENT 1500    /* MTU size, this is the limit
  310.                                          * to which we will raise the P-MTU.
  311.                      */
  312. #define SCTP_DEFAULT_MINSEGMENT 512    /* MTU size ... if no mtu disc */
  313. #define SCTP_HOW_MANY_SECRETS 2        /* How many secrets I keep */
  314. #define SCTP_HOW_LONG_COOKIE_LIVE 3600    /* How many seconds the current
  315.                      * secret will live?
  316.                      */
  317. #define SCTP_SECRET_SIZE 32        /* Number of octets in a 256 bits. */
  318.  
  319. #define SCTP_SIGNATURE_SIZE 20            /* size of a SLA-1 signature */
  320.  
  321. #define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash
  322.                  * functions simpler to write.
  323.                  */
  324.  
  325. #if defined (CONFIG_SCTP_HMAC_MD5)
  326. #define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
  327. #elif defined (CONFIG_SCTP_HMAC_SHA1)
  328. #define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
  329. #else
  330. #define SCTP_COOKIE_HMAC_ALG NULL
  331. #endif
  332.  
  333. /* These return values describe the success or failure of a number of
  334.  * routines which form the lower interface to SCTP_outqueue.
  335.  */
  336. typedef enum {
  337.     SCTP_XMIT_OK,
  338.     SCTP_XMIT_PMTU_FULL,
  339.     SCTP_XMIT_RWND_FULL,
  340.     SCTP_XMIT_NAGLE_DELAY,
  341. } sctp_xmit_t;
  342.  
  343. /* These are the commands for manipulating transports.  */
  344. typedef enum {
  345.     SCTP_TRANSPORT_UP,
  346.     SCTP_TRANSPORT_DOWN,
  347. } sctp_transport_cmd_t;
  348.  
  349. /* These are the address scopes defined mainly for IPv4 addresses
  350.  * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>.
  351.  * These scopes are hopefully generic enough to be used on scoping both
  352.  * IPv4 and IPv6 addresses in SCTP.
  353.  * At this point, the IPv6 scopes will be mapped to these internal scopes
  354.  * as much as possible.
  355.  */
  356. typedef enum {
  357.     SCTP_SCOPE_GLOBAL,        /* IPv4 global addresses */
  358.     SCTP_SCOPE_PRIVATE,        /* IPv4 private addresses */
  359.     SCTP_SCOPE_LINK,        /* IPv4 link local address */
  360.     SCTP_SCOPE_LOOPBACK,        /* IPv4 loopback address */
  361.     SCTP_SCOPE_UNUSABLE,        /* IPv4 unusable addresses */
  362. } sctp_scope_t;
  363.  
  364. /* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>,
  365.  * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24,
  366.  * 192.88.99.0/24.
  367.  * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP
  368.  * addresses.
  369.  */
  370. #define IS_IPV4_UNUSABLE_ADDRESS(a)        \
  371.     ((htonl(INADDR_BROADCAST) == a) ||  \
  372.      ipv4_is_multicast(a) ||        \
  373.      ipv4_is_zeronet(a) ||            \
  374.      ipv4_is_test_198(a) ||            \
  375.      ipv4_is_anycast_6to4(a))
  376.  
  377. /* Flags used for the bind address copy functions.  */
  378. #define SCTP_ADDR6_ALLOWED    0x00000001    /* IPv6 address is allowed by
  379.                            local sock family */
  380. #define SCTP_ADDR4_PEERSUPP    0x00000002    /* IPv4 address is supported by
  381.                            peer */
  382. #define SCTP_ADDR6_PEERSUPP    0x00000004    /* IPv6 address is supported by
  383.                            peer */
  384.  
  385. /* Reasons to retransmit. */
  386. typedef enum {
  387.     SCTP_RTXR_T3_RTX,
  388.     SCTP_RTXR_FAST_RTX,
  389.     SCTP_RTXR_PMTUD,
  390.     SCTP_RTXR_T1_RTX,
  391. } sctp_retransmit_reason_t;
  392.  
  393. /* Reasons to lower cwnd. */
  394. typedef enum {
  395.     SCTP_LOWER_CWND_T3_RTX,
  396.     SCTP_LOWER_CWND_FAST_RTX,
  397.     SCTP_LOWER_CWND_ECNE,
  398.     SCTP_LOWER_CWND_INACTIVE,
  399. } sctp_lower_cwnd_t;
  400.  
  401.  
  402. /* SCTP-AUTH Necessary constants */
  403.  
  404. /* SCTP-AUTH, Section 3.3
  405.  *
  406.  *  The following Table 2 shows the currently defined values for HMAC
  407.  *  identifiers.
  408.  *
  409.  *  +-----------------+--------------------------+
  410.  *  | HMAC Identifier | Message Digest Algorithm |
  411.  *  +-----------------+--------------------------+
  412.  *  | 0               | Reserved                 |
  413.  *  | 1               | SHA-1 defined in [8]     |
  414.  *  | 2               | Reserved                 |
  415.  *  | 3               | SHA-256 defined in [8]   |
  416.  *  +-----------------+--------------------------+
  417.  */
  418. enum {
  419.     SCTP_AUTH_HMAC_ID_RESERVED_0,
  420.     SCTP_AUTH_HMAC_ID_SHA1,
  421.     SCTP_AUTH_HMAC_ID_RESERVED_2,
  422. #if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE)
  423.     SCTP_AUTH_HMAC_ID_SHA256,
  424. #endif
  425.     __SCTP_AUTH_HMAC_MAX
  426. };
  427.  
  428. #define SCTP_AUTH_HMAC_ID_MAX    __SCTP_AUTH_HMAC_MAX - 1
  429. #define SCTP_AUTH_NUM_HMACS     __SCTP_AUTH_HMAC_MAX
  430. #define SCTP_SHA1_SIG_SIZE 20
  431. #define SCTP_SHA256_SIG_SIZE 32
  432.  
  433. /*  SCTP-AUTH, Section 3.2
  434.  *     The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks
  435.  *     MUST NOT be listed in the CHUNKS parameter
  436.  */
  437. #define SCTP_NUM_NOAUTH_CHUNKS    4
  438. #define SCTP_AUTH_MAX_CHUNKS    (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS)
  439.  
  440. /* SCTP-AUTH Section 6.1
  441.  * The RANDOM parameter MUST contain a 32 byte random number.
  442.  */
  443. #define SCTP_AUTH_RANDOM_LENGTH 32
  444.  
  445. #endif /* __sctp_constants_h__ */
  446.