/* SPDX-License-Identifier: GPL-2.0-or-later */ /* SCTP kernel implementation * (C) Copyright IBM Corp. 2001, 2004 * Copyright (c) 1999-2000 Cisco, Inc. * Copyright (c) 1999-2001 Motorola, Inc. * Copyright (c) 2001 Intel Corp. * * This file is part of the SCTP kernel implementation * * Please send any bug reports or fixes you make to the * email address(es): * lksctp developers <linux-sctp@vger.kernel.org> * * Written or modified by: * La Monte H.P. Yarroll <piggy@acm.org> * Karl Knutson <karl@athena.chicago.il.us> * Randall Stewart <randall@stewart.chicago.il.us> * Ken Morneau <kmorneau@cisco.com> * Qiaobing Xie <qxie1@motorola.com> * Xingang Guo <xingang.guo@intel.com> * Sridhar Samudrala <samudrala@us.ibm.com> * Daisy Chang <daisyc@us.ibm.com>
*/
#include <linux/sctp.h> #include <linux/ipv6.h> /* For ipv6hdr. */ #include <net/tcp_states.h> /* For TCP states used in enum sctp_sock_state */
/* Value used for stream negotiation. */ enum { SCTP_MAX_STREAM = 0xffff }; enum { SCTP_DEFAULT_OUTSTREAMS = 10 }; enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM };
/* Since CIDs are sparse, we need all four of the following * symbols. CIDs are dense through SCTP_CID_BASE_MAX.
*/ #define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE
/* These are the different flavours of event. */ enum sctp_event_type {
SCTP_EVENT_T_CHUNK = 1,
SCTP_EVENT_T_TIMEOUT,
SCTP_EVENT_T_OTHER,
SCTP_EVENT_T_PRIMITIVE
};
/* As a convenience for the state machine, we append SCTP_EVENT_* and * SCTP_ULP_* to the list of possible chunks.
*/
/* We define here a utility type for manipulating subtypes. * The subtype constructors all work like this: * * union sctp_subtype foo = SCTP_ST_CHUNK(SCTP_CID_INIT);
*/
/* These are values for sk->state. * For a UDP-style SCTP socket, the states are defined as follows * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to * accept new associations, but it can initiate the creation of new ones. * - A socket in SCTP_SS_LISTENING state indicates that it is willing to * accept new associations and can initiate the creation of new ones. * - A socket in SCTP_SS_ESTABLISHED state indicates that it is a peeled off * socket with one association. * For a TCP-style SCTP socket, the states are defined as follows * - A socket in SCTP_SS_CLOSED state indicates that it is not willing to * accept new associations, but it can initiate the creation of new ones. * - A socket in SCTP_SS_LISTENING state indicates that it is willing to * accept new associations, but cannot initiate the creation of new ones. * - A socket in SCTP_SS_ESTABLISHED state indicates that it has a single * association.
*/ enum sctp_sock_state {
SCTP_SS_CLOSED = TCP_CLOSE,
SCTP_SS_LISTENING = TCP_LISTEN,
SCTP_SS_ESTABLISHING = TCP_SYN_SENT,
SCTP_SS_ESTABLISHED = TCP_ESTABLISHED,
SCTP_SS_CLOSING = TCP_CLOSE_WAIT,
};
/* These functions map various type to printable names. */ constchar *sctp_cname(constunion sctp_subtype id); /* chunk types */ constchar *sctp_oname(constunion sctp_subtype id); /* other events */ constchar *sctp_tname(constunion sctp_subtype id); /* timeouts */ constchar *sctp_pname(constunion sctp_subtype id); /* primitives */
/* This is a table of printable names of sctp_state_t's. */ externconstchar *const sctp_state_tbl[]; externconstchar *const sctp_evttype_tbl[]; externconstchar *const sctp_status_tbl[];
/* Encourage Cookie-Echo bundling by pre-fragmenting chunks a little * harder (until reaching ESTABLISHED state).
*/ enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 };
/* Guess at how big to make the TSN mapping array. * We guarantee that we can handle at least this big a gap between the * cumulative ACK and the highest TSN. In practice, we can often * handle up to twice this value. * * NEVER make this more than 32767 (2^15-1). The Gap Ack Blocks in a * SACK (see section 3.3.4) are only 16 bits, so 2*SCTP_TSN_MAP_SIZE * must be less than 65535 (2^16 - 1), or we will have overflow * problems creating SACK's.
*/ #define SCTP_TSN_MAP_INITIAL BITS_PER_LONG #define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL #define SCTP_TSN_MAP_SIZE 4096
/* We will not record more than this many duplicate TSNs between two * SACKs. The minimum PMTU is 512. Remove all the headers and there * is enough room for 117 duplicate reports. Round down to the * nearest power of 2.
*/ enum { SCTP_MAX_DUP_TSNS = 16 }; enum { SCTP_MAX_GABS = 16 };
#define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */ #define SCTP_DEFAULT_MAXWINDOW 65535 /* default rwnd size */ #define SCTP_DEFAULT_RWND_SHIFT 4 /* by default, update on 1/16 of * rcvbuf, which is 1/8 of initial * window
*/ #define SCTP_DEFAULT_MAXSEGMENT 1500 /* MTU size, this is the limit * to which we will raise the P-MTU.
*/ #define SCTP_DEFAULT_MINSEGMENT 512 /* MTU size ... if no mtu disc */
#define SCTP_SECRET_SIZE 32 /* Number of octets in a 256 bits. */
#define SCTP_SIGNATURE_SIZE 20 /* size of a SLA-1 signature */
#define SCTP_COOKIE_MULTIPLE 32 /* Pad out our cookie to make our hash * functions simpler to write.
*/
#define SCTP_DEFAULT_UDP_PORT 9899 /* default UDP tunneling port */
/* These are the values for pf exposure, UNUSED is to keep compatible with old * applications by default.
*/ enum {
SCTP_PF_EXPOSE_UNSET,
SCTP_PF_EXPOSE_DISABLE,
SCTP_PF_EXPOSE_ENABLE,
}; #define SCTP_PF_EXPOSE_MAX SCTP_PF_EXPOSE_ENABLE
#define SCTP_PS_RETRANS_MAX 0xffff
/* These return values describe the success or failure of a number of * routines which form the lower interface to SCTP_outqueue.
*/ enum sctp_xmit {
SCTP_XMIT_OK,
SCTP_XMIT_PMTU_FULL,
SCTP_XMIT_RWND_FULL,
SCTP_XMIT_DELAY,
};
/* These are the commands for manipulating transports. */ enum sctp_transport_cmd {
SCTP_TRANSPORT_UP,
SCTP_TRANSPORT_DOWN,
SCTP_TRANSPORT_PF,
};
/* These are the address scopes defined mainly for IPv4 addresses * based on draft of SCTP IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>. * These scopes are hopefully generic enough to be used on scoping both * IPv4 and IPv6 addresses in SCTP. * At this point, the IPv6 scopes will be mapped to these internal scopes * as much as possible.
*/ enum sctp_scope {
SCTP_SCOPE_GLOBAL, /* IPv4 global addresses */
SCTP_SCOPE_PRIVATE, /* IPv4 private addresses */
SCTP_SCOPE_LINK, /* IPv4 link local address */
SCTP_SCOPE_LOOPBACK, /* IPv4 loopback address */
SCTP_SCOPE_UNUSABLE, /* IPv4 unusable addresses */
};
enum {
SCTP_SCOPE_POLICY_DISABLE, /* Disable IPv4 address scoping */
SCTP_SCOPE_POLICY_ENABLE, /* Enable IPv4 address scoping */
SCTP_SCOPE_POLICY_PRIVATE, /* Follow draft but allow IPv4 private addresses */
SCTP_SCOPE_POLICY_LINK, /* Follow draft but allow IPv4 link local addresses */
};
/* Based on IPv4 scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>, * SCTP IPv4 unusable addresses: 0.0.0.0/8, 224.0.0.0/4, 192.88.99.0/24. * Also, RFC 8.4, non-unicast addresses are not considered valid SCTP * addresses.
*/ #define IS_IPV4_UNUSABLE_ADDRESS(a) \
((htonl(INADDR_BROADCAST) == a) || \
ipv4_is_multicast(a) || \
ipv4_is_zeronet(a) || \
ipv4_is_anycast_6to4(a))
/* Flags used for the bind address copy functions. */ #define SCTP_ADDR4_ALLOWED 0x00000001 /* IPv4 address is allowed by
local sock family */ #define SCTP_ADDR6_ALLOWED 0x00000002 /* IPv6 address is allowed by
local sock family */ #define SCTP_ADDR4_PEERSUPP 0x00000004 /* IPv4 address is supported by
peer */ #define SCTP_ADDR6_PEERSUPP 0x00000008 /* IPv6 address is supported by
peer */
/* SCTP-AUTH, Section 3.2 * The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH chunks * MUST NOT be listed in the CHUNKS parameter
*/ #define SCTP_NUM_NOAUTH_CHUNKS 4 #define SCTP_AUTH_MAX_CHUNKS (SCTP_NUM_CHUNK_TYPES - SCTP_NUM_NOAUTH_CHUNKS)
/* SCTP-AUTH Section 6.1 * The RANDOM parameter MUST contain a 32 byte random number.
*/ #define SCTP_AUTH_RANDOM_LENGTH 32
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.