Home | History | Annotate | Download | only in linux
      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) 2002 Intel Corp.
      6  *
      7  * This file is part of the SCTP kernel implementation
      8  *
      9  * This header represents the structures and constants needed to support
     10  * the SCTP Extension to the Sockets API.
     11  *
     12  * This SCTP implementation is free software;
     13  * you can redistribute it and/or modify it under the terms of
     14  * the GNU General Public License as published by
     15  * the Free Software Foundation; either version 2, or (at your option)
     16  * any later version.
     17  *
     18  * This SCTP implementation is distributed in the hope that it
     19  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
     20  *                 ************************
     21  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     22  * See the GNU General Public License for more details.
     23  *
     24  * You should have received a copy of the GNU General Public License
     25  * along with GNU CC; see the file COPYING.  If not, see
     26  * <http://www.gnu.org/licenses/>.
     27  *
     28  * Please send any bug reports or fixes you make to the
     29  * email address(es):
     30  *    lksctp developers <linux-sctp (at) vger.kernel.org>
     31  *
     32  * Or submit a bug report through the following website:
     33  *    http://www.sf.net/projects/lksctp
     34  *
     35  * Written or modified by:
     36  *    La Monte H.P. Yarroll    <piggy (at) acm.org>
     37  *    R. Stewart               <randall (at) sctp.chicago.il.us>
     38  *    K. Morneau               <kmorneau (at) cisco.com>
     39  *    Q. Xie                   <qxie1 (at) email.mot.com>
     40  *    Karl Knutson             <karl (at) athena.chicago.il.us>
     41  *    Jon Grimm                <jgrimm (at) us.ibm.com>
     42  *    Daisy Chang              <daisyc (at) us.ibm.com>
     43  *    Ryan Layer               <rmlayer (at) us.ibm.com>
     44  *    Ardelle Fan              <ardelle.fan (at) intel.com>
     45  *    Sridhar Samudrala        <sri (at) us.ibm.com>
     46  *    Inaky Perez-Gonzalez     <inaky.gonzalez (at) intel.com>
     47  *    Vlad Yasevich            <vladislav.yasevich (at) hp.com>
     48  *
     49  * Any bugs reported given to us we will try to fix... any fixes shared will
     50  * be incorporated into the next SCTP release.
     51  */
     52 
     53 #ifndef _UAPI_SCTP_H
     54 #define _UAPI_SCTP_H
     55 
     56 #include <linux/types.h>
     57 #include <linux/socket.h>
     58 
     59 typedef __s32 sctp_assoc_t;
     60 
     61 /* The following symbols come from the Sockets API Extensions for
     62  * SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
     63  */
     64 #define SCTP_RTOINFO	0
     65 #define SCTP_ASSOCINFO  1
     66 #define SCTP_INITMSG	2
     67 #define SCTP_NODELAY	3		/* Get/set nodelay option. */
     68 #define SCTP_AUTOCLOSE	4
     69 #define SCTP_SET_PEER_PRIMARY_ADDR 5
     70 #define SCTP_PRIMARY_ADDR	6
     71 #define SCTP_ADAPTATION_LAYER	7
     72 #define SCTP_DISABLE_FRAGMENTS	8
     73 #define SCTP_PEER_ADDR_PARAMS	9
     74 #define SCTP_DEFAULT_SEND_PARAM	10
     75 #define SCTP_EVENTS	11
     76 #define SCTP_I_WANT_MAPPED_V4_ADDR 12	/* Turn on/off mapped v4 addresses  */
     77 #define SCTP_MAXSEG	13		/* Get/set maximum fragment. */
     78 #define SCTP_STATUS	14
     79 #define SCTP_GET_PEER_ADDR_INFO	15
     80 #define SCTP_DELAYED_ACK_TIME	16
     81 #define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
     82 #define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
     83 #define SCTP_CONTEXT	17
     84 #define SCTP_FRAGMENT_INTERLEAVE	18
     85 #define SCTP_PARTIAL_DELIVERY_POINT	19 /* Set/Get partial delivery point */
     86 #define SCTP_MAX_BURST	20		/* Set/Get max burst */
     87 #define SCTP_AUTH_CHUNK	21	/* Set only: add a chunk type to authenticate */
     88 #define SCTP_HMAC_IDENT	22
     89 #define SCTP_AUTH_KEY	23
     90 #define SCTP_AUTH_ACTIVE_KEY	24
     91 #define SCTP_AUTH_DELETE_KEY	25
     92 #define SCTP_PEER_AUTH_CHUNKS	26	/* Read only */
     93 #define SCTP_LOCAL_AUTH_CHUNKS	27	/* Read only */
     94 #define SCTP_GET_ASSOC_NUMBER	28	/* Read only */
     95 #define SCTP_GET_ASSOC_ID_LIST	29	/* Read only */
     96 #define SCTP_AUTO_ASCONF       30
     97 #define SCTP_PEER_ADDR_THLDS	31
     98 
     99 /* Internal Socket Options. Some of the sctp library functions are
    100  * implemented using these socket options.
    101  */
    102 #define SCTP_SOCKOPT_BINDX_ADD	100	/* BINDX requests for adding addrs */
    103 #define SCTP_SOCKOPT_BINDX_REM	101	/* BINDX requests for removing addrs. */
    104 #define SCTP_SOCKOPT_PEELOFF	102	/* peel off association. */
    105 /* Options 104-106 are deprecated and removed. Do not use this space */
    106 #define SCTP_SOCKOPT_CONNECTX_OLD	107	/* CONNECTX old requests. */
    107 #define SCTP_GET_PEER_ADDRS	108		/* Get all peer address. */
    108 #define SCTP_GET_LOCAL_ADDRS	109		/* Get all local address. */
    109 #define SCTP_SOCKOPT_CONNECTX	110		/* CONNECTX requests. */
    110 #define SCTP_SOCKOPT_CONNECTX3	111	/* CONNECTX requests (updated) */
    111 #define SCTP_GET_ASSOC_STATS	112	/* Read only */
    112 
    113 /*
    114  * 5.2.1 SCTP Initiation Structure (SCTP_INIT)
    115  *
    116  *   This cmsghdr structure provides information for initializing new
    117  *   SCTP associations with sendmsg().  The SCTP_INITMSG socket option
    118  *   uses this same data structure.  This structure is not used for
    119  *   recvmsg().
    120  *
    121  *   cmsg_level    cmsg_type      cmsg_data[]
    122  *   ------------  ------------   ----------------------
    123  *   IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
    124  *
    125  */
    126 struct sctp_initmsg {
    127 	__u16 sinit_num_ostreams;
    128 	__u16 sinit_max_instreams;
    129 	__u16 sinit_max_attempts;
    130 	__u16 sinit_max_init_timeo;
    131 };
    132 
    133 /*
    134  * 5.2.2 SCTP Header Information Structure (SCTP_SNDRCV)
    135  *
    136  *   This cmsghdr structure specifies SCTP options for sendmsg() and
    137  *   describes SCTP header information about a received message through
    138  *   recvmsg().
    139  *
    140  *   cmsg_level    cmsg_type      cmsg_data[]
    141  *   ------------  ------------   ----------------------
    142  *   IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
    143  *
    144  */
    145 struct sctp_sndrcvinfo {
    146 	__u16 sinfo_stream;
    147 	__u16 sinfo_ssn;
    148 	__u16 sinfo_flags;
    149 	__u32 sinfo_ppid;
    150 	__u32 sinfo_context;
    151 	__u32 sinfo_timetolive;
    152 	__u32 sinfo_tsn;
    153 	__u32 sinfo_cumtsn;
    154 	sctp_assoc_t sinfo_assoc_id;
    155 };
    156 
    157 /*
    158  *  sinfo_flags: 16 bits (unsigned integer)
    159  *
    160  *   This field may contain any of the following flags and is composed of
    161  *   a bitwise OR of these values.
    162  */
    163 
    164 enum sctp_sinfo_flags {
    165 	SCTP_UNORDERED = 1,  /* Send/receive message unordered. */
    166 	SCTP_ADDR_OVER = 2,  /* Override the primary destination. */
    167 	SCTP_ABORT=4,        /* Send an ABORT message to the peer. */
    168 	SCTP_SACK_IMMEDIATELY = 8,	/* SACK should be sent without delay */
    169 	SCTP_EOF=MSG_FIN,    /* Initiate graceful shutdown process. */
    170 };
    171 
    172 typedef union {
    173 	__u8   			raw;
    174 	struct sctp_initmsg	init;
    175 	struct sctp_sndrcvinfo	sndrcv;
    176 } sctp_cmsg_data_t;
    177 
    178 /* These are cmsg_types.  */
    179 typedef enum sctp_cmsg_type {
    180 	SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
    181 #define SCTP_INIT	SCTP_INIT
    182 	SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
    183 #define SCTP_SNDRCV	SCTP_SNDRCV
    184 } sctp_cmsg_t;
    185 
    186 /*
    187  * 5.3.1.1 SCTP_ASSOC_CHANGE
    188  *
    189  *   Communication notifications inform the ULP that an SCTP association
    190  *   has either begun or ended. The identifier for a new association is
    191  *   provided by this notificaion. The notification information has the
    192  *   following format:
    193  *
    194  */
    195 struct sctp_assoc_change {
    196 	__u16 sac_type;
    197 	__u16 sac_flags;
    198 	__u32 sac_length;
    199 	__u16 sac_state;
    200 	__u16 sac_error;
    201 	__u16 sac_outbound_streams;
    202 	__u16 sac_inbound_streams;
    203 	sctp_assoc_t sac_assoc_id;
    204 	__u8 sac_info[0];
    205 };
    206 
    207 /*
    208  *   sac_state: 32 bits (signed integer)
    209  *
    210  *   This field holds one of a number of values that communicate the
    211  *   event that happened to the association.  They include:
    212  *
    213  *   Note:  The following state names deviate from the API draft as
    214  *   the names clash too easily with other kernel symbols.
    215  */
    216 enum sctp_sac_state {
    217 	SCTP_COMM_UP,
    218 	SCTP_COMM_LOST,
    219 	SCTP_RESTART,
    220 	SCTP_SHUTDOWN_COMP,
    221 	SCTP_CANT_STR_ASSOC,
    222 };
    223 
    224 /*
    225  * 5.3.1.2 SCTP_PEER_ADDR_CHANGE
    226  *
    227  *   When a destination address on a multi-homed peer encounters a change
    228  *   an interface details event is sent.  The information has the
    229  *   following structure:
    230  */
    231 struct sctp_paddr_change {
    232 	__u16 spc_type;
    233 	__u16 spc_flags;
    234 	__u32 spc_length;
    235 	struct sockaddr_storage spc_aaddr;
    236 	int spc_state;
    237 	int spc_error;
    238 	sctp_assoc_t spc_assoc_id;
    239 } __attribute__((packed, aligned(4)));
    240 
    241 /*
    242  *    spc_state:  32 bits (signed integer)
    243  *
    244  *   This field holds one of a number of values that communicate the
    245  *   event that happened to the address.  They include:
    246  */
    247 enum sctp_spc_state {
    248 	SCTP_ADDR_AVAILABLE,
    249 	SCTP_ADDR_UNREACHABLE,
    250 	SCTP_ADDR_REMOVED,
    251 	SCTP_ADDR_ADDED,
    252 	SCTP_ADDR_MADE_PRIM,
    253 	SCTP_ADDR_CONFIRMED,
    254 };
    255 
    256 
    257 /*
    258  * 5.3.1.3 SCTP_REMOTE_ERROR
    259  *
    260  *   A remote peer may send an Operational Error message to its peer.
    261  *   This message indicates a variety of error conditions on an
    262  *   association. The entire error TLV as it appears on the wire is
    263  *   included in a SCTP_REMOTE_ERROR event.  Please refer to the SCTP
    264  *   specification [SCTP] and any extensions for a list of possible
    265  *   error formats. SCTP error TLVs have the format:
    266  */
    267 struct sctp_remote_error {
    268 	__u16 sre_type;
    269 	__u16 sre_flags;
    270 	__u32 sre_length;
    271 	__u16 sre_error;
    272 	sctp_assoc_t sre_assoc_id;
    273 	__u8 sre_data[0];
    274 };
    275 
    276 
    277 /*
    278  * 5.3.1.4 SCTP_SEND_FAILED
    279  *
    280  *   If SCTP cannot deliver a message it may return the message as a
    281  *   notification.
    282  */
    283 struct sctp_send_failed {
    284 	__u16 ssf_type;
    285 	__u16 ssf_flags;
    286 	__u32 ssf_length;
    287 	__u32 ssf_error;
    288 	struct sctp_sndrcvinfo ssf_info;
    289 	sctp_assoc_t ssf_assoc_id;
    290 	__u8 ssf_data[0];
    291 };
    292 
    293 /*
    294  *   ssf_flags: 16 bits (unsigned integer)
    295  *
    296  *   The flag value will take one of the following values
    297  *
    298  *   SCTP_DATA_UNSENT  - Indicates that the data was never put on
    299  *                       the wire.
    300  *
    301  *   SCTP_DATA_SENT    - Indicates that the data was put on the wire.
    302  *                       Note that this does not necessarily mean that the
    303  *                       data was (or was not) successfully delivered.
    304  */
    305 enum sctp_ssf_flags {
    306 	SCTP_DATA_UNSENT,
    307 	SCTP_DATA_SENT,
    308 };
    309 
    310 /*
    311  * 5.3.1.5 SCTP_SHUTDOWN_EVENT
    312  *
    313  *   When a peer sends a SHUTDOWN, SCTP delivers this notification to
    314  *   inform the application that it should cease sending data.
    315  */
    316 struct sctp_shutdown_event {
    317 	__u16 sse_type;
    318 	__u16 sse_flags;
    319 	__u32 sse_length;
    320 	sctp_assoc_t sse_assoc_id;
    321 };
    322 
    323 /*
    324  * 5.3.1.6 SCTP_ADAPTATION_INDICATION
    325  *
    326  *   When a peer sends a Adaptation Layer Indication parameter , SCTP
    327  *   delivers this notification to inform the application
    328  *   that of the peers requested adaptation layer.
    329  */
    330 struct sctp_adaptation_event {
    331 	__u16 sai_type;
    332 	__u16 sai_flags;
    333 	__u32 sai_length;
    334 	__u32 sai_adaptation_ind;
    335 	sctp_assoc_t sai_assoc_id;
    336 };
    337 
    338 /*
    339  * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT
    340  *
    341  *   When a receiver is engaged in a partial delivery of a
    342  *   message this notification will be used to indicate
    343  *   various events.
    344  */
    345 struct sctp_pdapi_event {
    346 	__u16 pdapi_type;
    347 	__u16 pdapi_flags;
    348 	__u32 pdapi_length;
    349 	__u32 pdapi_indication;
    350 	sctp_assoc_t pdapi_assoc_id;
    351 };
    352 
    353 enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
    354 
    355 /*
    356  * 5.3.1.8.  SCTP_AUTHENTICATION_EVENT
    357  *
    358  *  When a receiver is using authentication this message will provide
    359  *  notifications regarding new keys being made active as well as errors.
    360  */
    361 struct sctp_authkey_event {
    362 	__u16 auth_type;
    363 	__u16 auth_flags;
    364 	__u32 auth_length;
    365 	__u16 auth_keynumber;
    366 	__u16 auth_altkeynumber;
    367 	__u32 auth_indication;
    368 	sctp_assoc_t auth_assoc_id;
    369 };
    370 
    371 enum { SCTP_AUTH_NEWKEY = 0, };
    372 
    373 /*
    374  * 6.1.9. SCTP_SENDER_DRY_EVENT
    375  *
    376  * When the SCTP stack has no more user data to send or retransmit, this
    377  * notification is given to the user. Also, at the time when a user app
    378  * subscribes to this event, if there is no data to be sent or
    379  * retransmit, the stack will immediately send up this notification.
    380  */
    381 struct sctp_sender_dry_event {
    382 	__u16 sender_dry_type;
    383 	__u16 sender_dry_flags;
    384 	__u32 sender_dry_length;
    385 	sctp_assoc_t sender_dry_assoc_id;
    386 };
    387 
    388 /*
    389  * Described in Section 7.3
    390  *   Ancillary Data and Notification Interest Options
    391  */
    392 struct sctp_event_subscribe {
    393 	__u8 sctp_data_io_event;
    394 	__u8 sctp_association_event;
    395 	__u8 sctp_address_event;
    396 	__u8 sctp_send_failure_event;
    397 	__u8 sctp_peer_error_event;
    398 	__u8 sctp_shutdown_event;
    399 	__u8 sctp_partial_delivery_event;
    400 	__u8 sctp_adaptation_layer_event;
    401 	__u8 sctp_authentication_event;
    402 	__u8 sctp_sender_dry_event;
    403 };
    404 
    405 /*
    406  * 5.3.1 SCTP Notification Structure
    407  *
    408  *   The notification structure is defined as the union of all
    409  *   notification types.
    410  *
    411  */
    412 union sctp_notification {
    413 	struct {
    414 		__u16 sn_type;             /* Notification type. */
    415 		__u16 sn_flags;
    416 		__u32 sn_length;
    417 	} sn_header;
    418 	struct sctp_assoc_change sn_assoc_change;
    419 	struct sctp_paddr_change sn_paddr_change;
    420 	struct sctp_remote_error sn_remote_error;
    421 	struct sctp_send_failed sn_send_failed;
    422 	struct sctp_shutdown_event sn_shutdown_event;
    423 	struct sctp_adaptation_event sn_adaptation_event;
    424 	struct sctp_pdapi_event sn_pdapi_event;
    425 	struct sctp_authkey_event sn_authkey_event;
    426 	struct sctp_sender_dry_event sn_sender_dry_event;
    427 };
    428 
    429 /* Section 5.3.1
    430  * All standard values for sn_type flags are greater than 2^15.
    431  * Values from 2^15 and down are reserved.
    432  */
    433 
    434 enum sctp_sn_type {
    435 	SCTP_SN_TYPE_BASE     = (1<<15),
    436 	SCTP_ASSOC_CHANGE,
    437 #define SCTP_ASSOC_CHANGE		SCTP_ASSOC_CHANGE
    438 	SCTP_PEER_ADDR_CHANGE,
    439 #define SCTP_PEER_ADDR_CHANGE		SCTP_PEER_ADDR_CHANGE
    440 	SCTP_SEND_FAILED,
    441 #define SCTP_SEND_FAILED		SCTP_SEND_FAILED
    442 	SCTP_REMOTE_ERROR,
    443 #define SCTP_REMOTE_ERROR		SCTP_REMOTE_ERROR
    444 	SCTP_SHUTDOWN_EVENT,
    445 #define SCTP_SHUTDOWN_EVENT		SCTP_SHUTDOWN_EVENT
    446 	SCTP_PARTIAL_DELIVERY_EVENT,
    447 #define SCTP_PARTIAL_DELIVERY_EVENT	SCTP_PARTIAL_DELIVERY_EVENT
    448 	SCTP_ADAPTATION_INDICATION,
    449 #define SCTP_ADAPTATION_INDICATION	SCTP_ADAPTATION_INDICATION
    450 	SCTP_AUTHENTICATION_EVENT,
    451 #define SCTP_AUTHENTICATION_INDICATION	SCTP_AUTHENTICATION_EVENT
    452 	SCTP_SENDER_DRY_EVENT,
    453 #define SCTP_SENDER_DRY_EVENT		SCTP_SENDER_DRY_EVENT
    454 };
    455 
    456 /* Notification error codes used to fill up the error fields in some
    457  * notifications.
    458  * SCTP_PEER_ADDRESS_CHAGE 	: spc_error
    459  * SCTP_ASSOC_CHANGE		: sac_error
    460  * These names should be potentially included in the draft 04 of the SCTP
    461  * sockets API specification.
    462  */
    463 typedef enum sctp_sn_error {
    464 	SCTP_FAILED_THRESHOLD,
    465 	SCTP_RECEIVED_SACK,
    466 	SCTP_HEARTBEAT_SUCCESS,
    467 	SCTP_RESPONSE_TO_USER_REQ,
    468 	SCTP_INTERNAL_ERROR,
    469 	SCTP_SHUTDOWN_GUARD_EXPIRES,
    470 	SCTP_PEER_FAULTY,
    471 } sctp_sn_error_t;
    472 
    473 /*
    474  * 7.1.1 Retransmission Timeout Parameters (SCTP_RTOINFO)
    475  *
    476  *   The protocol parameters used to initialize and bound retransmission
    477  *   timeout (RTO) are tunable.  See [SCTP] for more information on how
    478  *   these parameters are used in RTO calculation.
    479  */
    480 struct sctp_rtoinfo {
    481 	sctp_assoc_t	srto_assoc_id;
    482 	__u32		srto_initial;
    483 	__u32		srto_max;
    484 	__u32		srto_min;
    485 };
    486 
    487 /*
    488  * 7.1.2 Association Parameters (SCTP_ASSOCINFO)
    489  *
    490  *   This option is used to both examine and set various association and
    491  *   endpoint parameters.
    492  */
    493 struct sctp_assocparams {
    494 	sctp_assoc_t	sasoc_assoc_id;
    495 	__u16		sasoc_asocmaxrxt;
    496 	__u16		sasoc_number_peer_destinations;
    497 	__u32		sasoc_peer_rwnd;
    498 	__u32		sasoc_local_rwnd;
    499 	__u32		sasoc_cookie_life;
    500 };
    501 
    502 /*
    503  * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
    504  *
    505  *  Requests that the peer mark the enclosed address as the association
    506  *  primary. The enclosed address must be one of the association's
    507  *  locally bound addresses. The following structure is used to make a
    508  *   set primary request:
    509  */
    510 struct sctp_setpeerprim {
    511 	sctp_assoc_t            sspp_assoc_id;
    512 	struct sockaddr_storage sspp_addr;
    513 } __attribute__((packed, aligned(4)));
    514 
    515 /*
    516  * 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
    517  *
    518  *  Requests that the local SCTP stack use the enclosed peer address as
    519  *  the association primary. The enclosed address must be one of the
    520  *  association peer's addresses. The following structure is used to
    521  *  make a set peer primary request:
    522  */
    523 struct sctp_prim {
    524 	sctp_assoc_t            ssp_assoc_id;
    525 	struct sockaddr_storage ssp_addr;
    526 } __attribute__((packed, aligned(4)));
    527 
    528 /* For backward compatibility use, define the old name too */
    529 #define sctp_setprim	sctp_prim
    530 
    531 /*
    532  * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
    533  *
    534  * Requests that the local endpoint set the specified Adaptation Layer
    535  * Indication parameter for all future INIT and INIT-ACK exchanges.
    536  */
    537 struct sctp_setadaptation {
    538 	__u32	ssb_adaptation_ind;
    539 };
    540 
    541 /*
    542  * 7.1.13 Peer Address Parameters  (SCTP_PEER_ADDR_PARAMS)
    543  *
    544  *   Applications can enable or disable heartbeats for any peer address
    545  *   of an association, modify an address's heartbeat interval, force a
    546  *   heartbeat to be sent immediately, and adjust the address's maximum
    547  *   number of retransmissions sent before an address is considered
    548  *   unreachable. The following structure is used to access and modify an
    549  *   address's parameters:
    550  */
    551 enum  sctp_spp_flags {
    552 	SPP_HB_ENABLE = 1<<0,		/*Enable heartbeats*/
    553 	SPP_HB_DISABLE = 1<<1,		/*Disable heartbeats*/
    554 	SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
    555 	SPP_HB_DEMAND = 1<<2,		/*Send heartbeat immediately*/
    556 	SPP_PMTUD_ENABLE = 1<<3,	/*Enable PMTU discovery*/
    557 	SPP_PMTUD_DISABLE = 1<<4,	/*Disable PMTU discovery*/
    558 	SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
    559 	SPP_SACKDELAY_ENABLE = 1<<5,	/*Enable SACK*/
    560 	SPP_SACKDELAY_DISABLE = 1<<6,	/*Disable SACK*/
    561 	SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
    562 	SPP_HB_TIME_IS_ZERO = 1<<7,	/* Set HB delay to 0 */
    563 };
    564 
    565 struct sctp_paddrparams {
    566 	sctp_assoc_t		spp_assoc_id;
    567 	struct sockaddr_storage	spp_address;
    568 	__u32			spp_hbinterval;
    569 	__u16			spp_pathmaxrxt;
    570 	__u32			spp_pathmtu;
    571 	__u32			spp_sackdelay;
    572 	__u32			spp_flags;
    573 } __attribute__((packed, aligned(4)));
    574 
    575 /*
    576  * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
    577  *
    578  * This set option adds a chunk type that the user is requesting to be
    579  * received only in an authenticated way.  Changes to the list of chunks
    580  * will only effect future associations on the socket.
    581  */
    582 struct sctp_authchunk {
    583 	__u8		sauth_chunk;
    584 };
    585 
    586 /*
    587  * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
    588  *
    589  * This option gets or sets the list of HMAC algorithms that the local
    590  * endpoint requires the peer to use.
    591  */
    592 #ifndef __KERNEL__
    593 /* This here is only used by user space as is. It might not be a good idea
    594  * to export/reveal the whole structure with reserved fields etc.
    595  */
    596 enum {
    597 	SCTP_AUTH_HMAC_ID_SHA1 = 1,
    598 	SCTP_AUTH_HMAC_ID_SHA256 = 3,
    599 };
    600 #endif
    601 
    602 struct sctp_hmacalgo {
    603 	__u32		shmac_num_idents;
    604 	__u16		shmac_idents[];
    605 };
    606 
    607 /* Sadly, user and kernel space have different names for
    608  * this structure member, so this is to not break anything.
    609  */
    610 #define shmac_number_of_idents	shmac_num_idents
    611 
    612 /*
    613  * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
    614  *
    615  * This option will set a shared secret key which is used to build an
    616  * association shared key.
    617  */
    618 struct sctp_authkey {
    619 	sctp_assoc_t	sca_assoc_id;
    620 	__u16		sca_keynumber;
    621 	__u16		sca_keylength;
    622 	__u8		sca_key[];
    623 };
    624 
    625 /*
    626  * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
    627  *
    628  * This option will get or set the active shared key to be used to build
    629  * the association shared key.
    630  */
    631 
    632 struct sctp_authkeyid {
    633 	sctp_assoc_t	scact_assoc_id;
    634 	__u16		scact_keynumber;
    635 };
    636 
    637 
    638 /*
    639  * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
    640  *
    641  * This option will effect the way delayed acks are performed.  This
    642  * option allows you to get or set the delayed ack time, in
    643  * milliseconds.  It also allows changing the delayed ack frequency.
    644  * Changing the frequency to 1 disables the delayed sack algorithm.  If
    645  * the assoc_id is 0, then this sets or gets the endpoints default
    646  * values.  If the assoc_id field is non-zero, then the set or get
    647  * effects the specified association for the one to many model (the
    648  * assoc_id field is ignored by the one to one model).  Note that if
    649  * sack_delay or sack_freq are 0 when setting this option, then the
    650  * current values will remain unchanged.
    651  */
    652 struct sctp_sack_info {
    653 	sctp_assoc_t	sack_assoc_id;
    654 	uint32_t	sack_delay;
    655 	uint32_t	sack_freq;
    656 };
    657 
    658 struct sctp_assoc_value {
    659     sctp_assoc_t            assoc_id;
    660     uint32_t                assoc_value;
    661 };
    662 
    663 /*
    664  * 7.2.2 Peer Address Information
    665  *
    666  *   Applications can retrieve information about a specific peer address
    667  *   of an association, including its reachability state, congestion
    668  *   window, and retransmission timer values.  This information is
    669  *   read-only. The following structure is used to access this
    670  *   information:
    671  */
    672 struct sctp_paddrinfo {
    673 	sctp_assoc_t		spinfo_assoc_id;
    674 	struct sockaddr_storage	spinfo_address;
    675 	__s32			spinfo_state;
    676 	__u32			spinfo_cwnd;
    677 	__u32			spinfo_srtt;
    678 	__u32			spinfo_rto;
    679 	__u32			spinfo_mtu;
    680 } __attribute__((packed, aligned(4)));
    681 
    682 /* Peer addresses's state. */
    683 /* UNKNOWN: Peer address passed by the upper layer in sendmsg or connect[x]
    684  * calls.
    685  * UNCONFIRMED: Peer address received in INIT/INIT-ACK address parameters.
    686  *              Not yet confirmed by a heartbeat and not available for data
    687  *		transfers.
    688  * ACTIVE : Peer address confirmed, active and available for data transfers.
    689  * INACTIVE: Peer address inactive and not available for data transfers.
    690  */
    691 enum sctp_spinfo_state {
    692 	SCTP_INACTIVE,
    693 	SCTP_PF,
    694 	SCTP_ACTIVE,
    695 	SCTP_UNCONFIRMED,
    696 	SCTP_UNKNOWN = 0xffff  /* Value used for transport state unknown */
    697 };
    698 
    699 /*
    700  * 7.2.1 Association Status (SCTP_STATUS)
    701  *
    702  *   Applications can retrieve current status information about an
    703  *   association, including association state, peer receiver window size,
    704  *   number of unacked data chunks, and number of data chunks pending
    705  *   receipt.  This information is read-only.  The following structure is
    706  *   used to access this information:
    707  */
    708 struct sctp_status {
    709 	sctp_assoc_t		sstat_assoc_id;
    710 	__s32			sstat_state;
    711 	__u32			sstat_rwnd;
    712 	__u16			sstat_unackdata;
    713 	__u16			sstat_penddata;
    714 	__u16			sstat_instrms;
    715 	__u16			sstat_outstrms;
    716 	__u32			sstat_fragmentation_point;
    717 	struct sctp_paddrinfo	sstat_primary;
    718 };
    719 
    720 /*
    721  * 7.2.3.  Get the list of chunks the peer requires to be authenticated
    722  *         (SCTP_PEER_AUTH_CHUNKS)
    723  *
    724  * This option gets a list of chunks for a specified association that
    725  * the peer requires to be received authenticated only.
    726  */
    727 struct sctp_authchunks {
    728 	sctp_assoc_t	gauth_assoc_id;
    729 	__u32		gauth_number_of_chunks;
    730 	uint8_t		gauth_chunks[];
    731 };
    732 
    733 /* The broken spelling has been released already in lksctp-tools header,
    734  * so don't break anyone, now that it's fixed.
    735  */
    736 #define guth_number_of_chunks	gauth_number_of_chunks
    737 
    738 /* Association states.  */
    739 enum sctp_sstat_state {
    740 	SCTP_EMPTY                = 0,
    741 	SCTP_CLOSED               = 1,
    742 	SCTP_COOKIE_WAIT          = 2,
    743 	SCTP_COOKIE_ECHOED        = 3,
    744 	SCTP_ESTABLISHED          = 4,
    745 	SCTP_SHUTDOWN_PENDING     = 5,
    746 	SCTP_SHUTDOWN_SENT        = 6,
    747 	SCTP_SHUTDOWN_RECEIVED    = 7,
    748 	SCTP_SHUTDOWN_ACK_SENT    = 8,
    749 };
    750 
    751 /*
    752  * 8.2.6. Get the Current Identifiers of Associations
    753  *        (SCTP_GET_ASSOC_ID_LIST)
    754  *
    755  * This option gets the current list of SCTP association identifiers of
    756  * the SCTP associations handled by a one-to-many style socket.
    757  */
    758 struct sctp_assoc_ids {
    759 	__u32		gaids_number_of_ids;
    760 	sctp_assoc_t	gaids_assoc_id[];
    761 };
    762 
    763 /*
    764  * 8.3, 8.5 get all peer/local addresses in an association.
    765  * This parameter struct is used by SCTP_GET_PEER_ADDRS and
    766  * SCTP_GET_LOCAL_ADDRS socket options used internally to implement
    767  * sctp_getpaddrs() and sctp_getladdrs() API.
    768  */
    769 struct sctp_getaddrs_old {
    770 	sctp_assoc_t            assoc_id;
    771 	int			addr_num;
    772 #ifdef __KERNEL__
    773 	struct sockaddr		__user *addrs;
    774 #else
    775 	struct sockaddr		*addrs;
    776 #endif
    777 };
    778 
    779 struct sctp_getaddrs {
    780 	sctp_assoc_t		assoc_id; /*input*/
    781 	__u32			addr_num; /*output*/
    782 	__u8			addrs[0]; /*output, variable size*/
    783 };
    784 
    785 /* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
    786  * association stats. All stats are counts except sas_maxrto and
    787  * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
    788  * the last call. Will return 0 when RTO was not update since last call
    789  */
    790 struct sctp_assoc_stats {
    791 	sctp_assoc_t	sas_assoc_id;    /* Input */
    792 					 /* Transport of observed max RTO */
    793 	struct sockaddr_storage sas_obs_rto_ipaddr;
    794 	__u64		sas_maxrto;      /* Maximum Observed RTO for period */
    795 	__u64		sas_isacks;	 /* SACKs received */
    796 	__u64		sas_osacks;	 /* SACKs sent */
    797 	__u64		sas_opackets;	 /* Packets sent */
    798 	__u64		sas_ipackets;	 /* Packets received */
    799 	__u64		sas_rtxchunks;   /* Retransmitted Chunks */
    800 	__u64		sas_outofseqtsns;/* TSN received > next expected */
    801 	__u64		sas_idupchunks;  /* Dups received (ordered+unordered) */
    802 	__u64		sas_gapcnt;      /* Gap Acknowledgements Received */
    803 	__u64		sas_ouodchunks;  /* Unordered data chunks sent */
    804 	__u64		sas_iuodchunks;  /* Unordered data chunks received */
    805 	__u64		sas_oodchunks;	 /* Ordered data chunks sent */
    806 	__u64		sas_iodchunks;	 /* Ordered data chunks received */
    807 	__u64		sas_octrlchunks; /* Control chunks sent */
    808 	__u64		sas_ictrlchunks; /* Control chunks received */
    809 };
    810 
    811 /* These are bit fields for msghdr->msg_flags.  See section 5.1.  */
    812 /* On user space Linux, these live in <bits/socket.h> as an enum.  */
    813 enum sctp_msg_flags {
    814 	MSG_NOTIFICATION = 0x8000,
    815 #define MSG_NOTIFICATION MSG_NOTIFICATION
    816 };
    817 
    818 /*
    819  * 8.1 sctp_bindx()
    820  *
    821  * The flags parameter is formed from the bitwise OR of zero or more of the
    822  * following currently defined flags:
    823  */
    824 #define SCTP_BINDX_ADD_ADDR 0x01
    825 #define SCTP_BINDX_REM_ADDR 0x02
    826 
    827 /* This is the structure that is passed as an argument(optval) to
    828  * getsockopt(SCTP_SOCKOPT_PEELOFF).
    829  */
    830 typedef struct {
    831 	sctp_assoc_t associd;
    832 	int sd;
    833 } sctp_peeloff_arg_t;
    834 
    835 /*
    836  *  Peer Address Thresholds socket option
    837  */
    838 struct sctp_paddrthlds {
    839 	sctp_assoc_t spt_assoc_id;
    840 	struct sockaddr_storage spt_address;
    841 	__u16 spt_pathmaxrxt;
    842 	__u16 spt_pathpfthld;
    843 };
    844 
    845 #endif /* _UAPI_SCTP_H */
    846