home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / sctp / constants.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  13.6 KB  |  414 lines

  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.  
  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. #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.  
  266. /* Heartbeat interval - 30 secs */
  267. #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT    (30 * HZ)
  268.  
  269. /* Delayed sack timer - 200ms */
  270. #define SCTP_DEFAULT_TIMEOUT_SACK    ((200 * HZ) / 1000)
  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__ */
  414.