linux/include/net/sctp/constants.h
<<
>>
Prefs
   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. */
  56enum { SCTP_MAX_STREAM = 0xffff };
  57enum { SCTP_DEFAULT_OUTSTREAMS = 10 };
  58enum { 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.  */
  80typedef 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
  96typedef 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
 112typedef 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.  */
 121typedef 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
 139typedef 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) \
 147static inline sctp_subtype_t    \
 148SCTP_ST_## _name (_type _arg)           \
 149{ sctp_subtype_t _retval; _retval._elt = _arg; return _retval; }
 150
 151SCTP_SUBTYPE_CONSTRUCTOR(CHUNK,         sctp_cid_t,             chunk)
 152SCTP_SUBTYPE_CONSTRUCTOR(TIMEOUT,       sctp_event_timeout_t,   timeout)
 153SCTP_SUBTYPE_CONSTRUCTOR(OTHER,         sctp_event_other_t,     other)
 154SCTP_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 */
 169typedef 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 */
 196typedef 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 */
 229typedef 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_CLOSING        = TCP_CLOSING,
 235} sctp_sock_state_t;
 236
 237/* These functions map various type to printable names.  */
 238const char *sctp_cname(const sctp_subtype_t);   /* chunk types */
 239const char *sctp_oname(const sctp_subtype_t);   /* other events */
 240const char *sctp_tname(const sctp_subtype_t);   /* timeouts */
 241const char *sctp_pname(const sctp_subtype_t);   /* primitives */
 242
 243/* This is a table of printable names of sctp_state_t's.  */
 244extern const char *const sctp_state_tbl[];
 245extern const char *const sctp_evttype_tbl[];
 246extern const char *const sctp_status_tbl[];
 247
 248/* Maximum chunk length considering padding requirements. */
 249enum { SCTP_MAX_CHUNK_LEN = ((1<<16) - sizeof(__u32)) };
 250
 251/* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little
 252 * harder (until reaching ESTABLISHED state).
 253 */
 254enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 };
 255
 256/* Guess at how big to make the TSN mapping array.
 257 * We guarantee that we can handle at least this big a gap between the
 258 * cumulative ACK and the highest TSN.  In practice, we can often
 259 * handle up to twice this value.
 260 *
 261 * NEVER make this more than 32767 (2^15-1).  The Gap Ack Blocks in a
 262 * SACK (see  section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE
 263 * must be less than 65535 (2^16 - 1), or we will have overflow
 264 * problems creating SACK's.
 265 */
 266#define SCTP_TSN_MAP_INITIAL BITS_PER_LONG
 267#define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL
 268#define SCTP_TSN_MAP_SIZE 4096
 269#define SCTP_TSN_MAX_GAP  65535
 270
 271/* We will not record more than this many duplicate TSNs between two
 272 * SACKs.  The minimum PMTU is 576.  Remove all the headers and there
 273 * is enough room for 131 duplicate reports.  Round down to the
 274 * nearest power of 2.
 275 */
 276enum { SCTP_MIN_PMTU = 576 };
 277enum { SCTP_MAX_DUP_TSNS = 16 };
 278enum { SCTP_MAX_GABS = 16 };
 279
 280/* Heartbeat interval - 30 secs */
 281#define SCTP_DEFAULT_TIMEOUT_HEARTBEAT  (30*1000)
 282
 283/* Delayed sack timer - 200ms */
 284#define SCTP_DEFAULT_TIMEOUT_SACK       (200)
 285
 286/* RTO.Initial              - 3  seconds
 287 * RTO.Min                  - 1  second
 288 * RTO.Max                  - 60 seconds
 289 * RTO.Alpha                - 1/8
 290 * RTO.Beta                 - 1/4
 291 */
 292#define SCTP_RTO_INITIAL        (3 * 1000)
 293#define SCTP_RTO_MIN            (1 * 1000)
 294#define SCTP_RTO_MAX            (60 * 1000)
 295
 296#define SCTP_RTO_ALPHA          3   /* 1/8 when converted to right shifts. */
 297#define SCTP_RTO_BETA           2   /* 1/4 when converted to right shifts. */
 298
 299/* Maximum number of new data packets that can be sent in a burst.  */
 300#define SCTP_DEFAULT_MAX_BURST          4
 301
 302#define SCTP_CLOCK_GRANULARITY  1       /* 1 jiffy */
 303
 304#define SCTP_DEF_MAX_INIT 6
 305#define SCTP_DEF_MAX_SEND 10
 306
 307#define SCTP_DEFAULT_COOKIE_LIFE        (60 * 1000) /* 60 seconds */
 308
 309#define SCTP_DEFAULT_MINWINDOW  1500    /* default minimum rwnd size */
 310#define SCTP_DEFAULT_MAXWINDOW  65535   /* default rwnd size */
 311#define SCTP_DEFAULT_MAXSEGMENT 1500    /* MTU size, this is the limit
 312                                         * to which we will raise the P-MTU.
 313                                         */
 314#define SCTP_DEFAULT_MINSEGMENT 512     /* MTU size ... if no mtu disc */
 315#define SCTP_HOW_MANY_SECRETS 2         /* How many secrets I keep */
 316#define SCTP_HOW_LONG_COOKIE_LIVE 3600  /* How many seconds the current
 317                                         * secret will live?
 318                                         */
 319#define SCTP_SECRET_SIZE 32             /* Number of octets in a 256 bits. */
 320
 321#define SCTP_SIGNATURE_SIZE 20          /* size of a SLA-1 signature */
 322
 323#define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash
 324                                 * functions simpler to write.
 325                                 */
 326
 327#if defined (CONFIG_SCTP_HMAC_MD5)
 328#define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
 329#elif defined (CONFIG_SCTP_HMAC_SHA1)
 330#define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
 331#else
 332#define SCTP_COOKIE_HMAC_ALG NULL
 333#endif
 334
 335/* These return values describe the success or failure of a number of
 336 * routines which form the lower interface to SCTP_outqueue.
 337 */
 338typedef enum {
 339        SCTP_XMIT_OK,
 340        SCTP_XMIT_PMTU_FULL,
 341        SCTP_XMIT_RWND_FULL,
 342        SCTP_XMIT_NAGLE_DELAY,
 343} sctp_xmit_t;
 344
 345/* These are the commands for manipulating transports.  */
 346typedef enum {
 347        SCTP_TRANSPORT_UP,
 348        SCTP_TRANSPORT_DOWN,
 349} sctp_transport_cmd_t;
 350
 351/* These are the address scopes defined mainly for IPv4 addresses
 352 * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>.
 353 * These scopes are hopefully generic enough to be used on scoping both
 354 * IPv4 and IPv6 addresses in SCTP.
 355 * At this point, the IPv6 scopes will be mapped to these internal scopes
 356 * as much as possible.
 357 */
 358typedef enum {
 359        SCTP_SCOPE_GLOBAL,              /* IPv4 global addresses */
 360        SCTP_SCOPE_PRIVATE,             /* IPv4 private addresses */
 361        SCTP_SCOPE_LINK,                /* IPv4 link local address */
 362        SCTP_SCOPE_LOOPBACK,            /* IPv4 loopback address */
 363        SCTP_SCOPE_UNUSABLE,            /* IPv4 unusable addresses */
 364} sctp_scope_t;
 365
 366typedef enum {
 367        SCTP_SCOPE_POLICY_DISABLE,      /* Disable IPv4 address scoping */
 368        SCTP_SCOPE_POLICY_ENABLE,       /* Enable IPv4 address scoping */
 369        SCTP_SCOPE_POLICY_PRIVATE,      /* Follow draft but allow IPv4 private addresses */
 370        SCTP_SCOPE_POLICY_LINK,         /* Follow draft but allow IPv4 link local addresses */
 371} sctp_scope_policy_t;
 372
 373/* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>,
 374 * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 198.18.0.0/24,
 375 * 192.88.99.0/24.
 376 * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP
 377 * addresses.
 378 */
 379#define IS_IPV4_UNUSABLE_ADDRESS(a)         \
 380        ((htonl(INADDR_BROADCAST) == a) ||  \
 381         ipv4_is_multicast(a) ||            \
 382         ipv4_is_zeronet(a) ||              \
 383         ipv4_is_test_198(a) ||             \
 384         ipv4_is_anycast_6to4(a))
 385
 386/* Flags used for the bind address copy functions.  */
 387#define SCTP_ADDR6_ALLOWED      0x00000001      /* IPv6 address is allowed by
 388                                                   local sock family */
 389#define SCTP_ADDR4_PEERSUPP     0x00000002      /* IPv4 address is supported by
 390                                                   peer */
 391#define SCTP_ADDR6_PEERSUPP     0x00000004      /* IPv6 address is supported by
 392                                                   peer */
 393
 394/* Reasons to retransmit. */
 395typedef enum {
 396        SCTP_RTXR_T3_RTX,
 397        SCTP_RTXR_FAST_RTX,
 398        SCTP_RTXR_PMTUD,
 399        SCTP_RTXR_T1_RTX,
 400} sctp_retransmit_reason_t;
 401
 402/* Reasons to lower cwnd. */
 403typedef enum {
 404        SCTP_LOWER_CWND_T3_RTX,
 405        SCTP_LOWER_CWND_FAST_RTX,
 406        SCTP_LOWER_CWND_ECNE,
 407        SCTP_LOWER_CWND_INACTIVE,
 408} sctp_lower_cwnd_t;
 409
 410
 411/* SCTP-AUTH Necessary constants */
 412
 413/* SCTP-AUTH, Section 3.3
 414 *
 415 *  The following Table 2 shows the currently defined values for HMAC
 416 *  identifiers.
 417 *
 418 *  +-----------------+--------------------------+
 419 *  | HMAC Identifier | Message Digest Algorithm |
 420 *  +-----------------+--------------------------+
 421 *  | 0               | Reserved                 |
 422 *  | 1               | SHA-1 defined in [8]     |
 423 *  | 2               | Reserved                 |
 424 *  | 3               | SHA-256 defined in [8]   |
 425 *  +-----------------+--------------------------+
 426 */
 427enum {
 428        SCTP_AUTH_HMAC_ID_RESERVED_0,
 429        SCTP_AUTH_HMAC_ID_SHA1,
 430        SCTP_AUTH_HMAC_ID_RESERVED_2,
 431#if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE)
 432        SCTP_AUTH_HMAC_ID_SHA256,
 433#endif
 434        __SCTP_AUTH_HMAC_MAX
 435};
 436
 437#define SCTP_AUTH_HMAC_ID_MAX   __SCTP_AUTH_HMAC_MAX - 1
 438#define SCTP_AUTH_NUM_HMACS     __SCTP_AUTH_HMAC_MAX
 439#define SCTP_SHA1_SIG_SIZE 20
 440#define SCTP_SHA256_SIG_SIZE 32
 441
 442/*  SCTP-AUTH, Section 3.2
 443 *     The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks
 444 *     MUST NOT be listed in the CHUNKS parameter
 445 */
 446#define SCTP_NUM_NOAUTH_CHUNKS  4
 447#define SCTP_AUTH_MAX_CHUNKS    (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS)
 448
 449/* SCTP-AUTH Section 6.1
 450 * The RANDOM parameter MUST contain a 32 byte random number.
 451 */
 452#define SCTP_AUTH_RANDOM_LENGTH 32
 453
 454#endif /* __sctp_constants_h__ */
 455