16f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* SCTP kernel Implementation: User API extensions.
289de9aa86469604a61fb72f8073f984442b8c011uid *
364a341fc42c967890a9fb5d8855568e23104bef6mridge * sctp.h
489de9aa86469604a61fb72f8073f984442b8c011uid *
564a341fc42c967890a9fb5d8855568e23104bef6mridge * Distributed under the terms of the LGPL v2.1 as described in
66f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *    http://www.gnu.org/copyleft/lesser.txt
789de9aa86469604a61fb72f8073f984442b8c011uid *
864a341fc42c967890a9fb5d8855568e23104bef6mridge * This file is part of the user library that offers support for the
96f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * Linux Kernel SCTP Implementation. The main purpose of this
1064a341fc42c967890a9fb5d8855568e23104bef6mridge * code is to provide the SCTP Socket API mappings for user
1164a341fc42c967890a9fb5d8855568e23104bef6mridge * application to interface with SCTP in kernel.
1289de9aa86469604a61fb72f8073f984442b8c011uid *
1364a341fc42c967890a9fb5d8855568e23104bef6mridge * This header represents the structures and constants needed to support
1464a341fc42c967890a9fb5d8855568e23104bef6mridge * the SCTP Extension to the Sockets API.
1589de9aa86469604a61fb72f8073f984442b8c011uid *
1664a341fc42c967890a9fb5d8855568e23104bef6mridge * (C) Copyright IBM Corp. 2001, 2004
1764a341fc42c967890a9fb5d8855568e23104bef6mridge * Copyright (c) 1999-2000 Cisco, Inc.
1864a341fc42c967890a9fb5d8855568e23104bef6mridge * Copyright (c) 1999-2001 Motorola, Inc.
1989de9aa86469604a61fb72f8073f984442b8c011uid *
2089de9aa86469604a61fb72f8073f984442b8c011uid * Written or modified by:
2189de9aa86469604a61fb72f8073f984442b8c011uid *    La Monte H.P. Yarroll    <piggy@acm.org>
2289de9aa86469604a61fb72f8073f984442b8c011uid *    R. Stewart               <randall@sctp.chicago.il.us>
2389de9aa86469604a61fb72f8073f984442b8c011uid *    K. Morneau               <kmorneau@cisco.com>
2489de9aa86469604a61fb72f8073f984442b8c011uid *    Q. Xie                   <qxie1@email.mot.com>
2589de9aa86469604a61fb72f8073f984442b8c011uid *    Karl Knutson             <karl@athena.chicago.il.us>
2689de9aa86469604a61fb72f8073f984442b8c011uid *    Jon Grimm                <jgrimm@austin.ibm.com>
2789de9aa86469604a61fb72f8073f984442b8c011uid *    Daisy Chang              <daisyc@us.ibm.com>
2889de9aa86469604a61fb72f8073f984442b8c011uid *    Inaky Perez-Gonzalez     <inaky.gonzalez@intel.com>
2989de9aa86469604a61fb72f8073f984442b8c011uid *    Sridhar Samudrala        <sri@us.ibm.com>
306f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *    Vlad Yasevich		<vladislav.yasevich@hp.com>
3189de9aa86469604a61fb72f8073f984442b8c011uid */
3289de9aa86469604a61fb72f8073f984442b8c011uid
3389de9aa86469604a61fb72f8073f984442b8c011uid#ifndef __linux_sctp_h__
3489de9aa86469604a61fb72f8073f984442b8c011uid#define __linux_sctp_h__
3589de9aa86469604a61fb72f8073f984442b8c011uid
3689de9aa86469604a61fb72f8073f984442b8c011uid#include <stdint.h>
3789de9aa86469604a61fb72f8073f984442b8c011uid#include <linux/types.h>
3889de9aa86469604a61fb72f8073f984442b8c011uid#include <sys/socket.h>
3989de9aa86469604a61fb72f8073f984442b8c011uid
4064a341fc42c967890a9fb5d8855568e23104bef6mridge__BEGIN_DECLS
4164a341fc42c967890a9fb5d8855568e23104bef6mridge
4264a341fc42c967890a9fb5d8855568e23104bef6mridgetypedef __s32 sctp_assoc_t;
4389de9aa86469604a61fb72f8073f984442b8c011uid
4489de9aa86469604a61fb72f8073f984442b8c011uid/* Socket option layer for SCTP */
4589de9aa86469604a61fb72f8073f984442b8c011uid#ifndef SOL_SCTP
4689de9aa86469604a61fb72f8073f984442b8c011uid#define SOL_SCTP	132
4789de9aa86469604a61fb72f8073f984442b8c011uid#endif
4889de9aa86469604a61fb72f8073f984442b8c011uid
4989de9aa86469604a61fb72f8073f984442b8c011uid#ifndef IPPROTO_SCTP
5089de9aa86469604a61fb72f8073f984442b8c011uid#define IPPROTO_SCTP    132
5189de9aa86469604a61fb72f8073f984442b8c011uid#endif
5289de9aa86469604a61fb72f8073f984442b8c011uid
5389de9aa86469604a61fb72f8073f984442b8c011uid/* 9. Preprocessor constants */
5489de9aa86469604a61fb72f8073f984442b8c011uid#define HAVE_SCTP
5589de9aa86469604a61fb72f8073f984442b8c011uid#define HAVE_KERNEL_SCTP
5689de9aa86469604a61fb72f8073f984442b8c011uid#define HAVE_SCTP_MULTIBUF
5789de9aa86469604a61fb72f8073f984442b8c011uid#define HAVE_SCTP_NOCONNECT
5864a341fc42c967890a9fb5d8855568e23104bef6mridge#define HAVE_SCTP_PRSCTP
5964a341fc42c967890a9fb5d8855568e23104bef6mridge#define HAVE_SCTP_ADDIP
6064a341fc42c967890a9fb5d8855568e23104bef6mridge#define HAVE_SCTP_CANSET_PRIMARY
6189de9aa86469604a61fb72f8073f984442b8c011uid
6289de9aa86469604a61fb72f8073f984442b8c011uid/* The following symbols come from the Sockets API Extensions for
6389de9aa86469604a61fb72f8073f984442b8c011uid * SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
6489de9aa86469604a61fb72f8073f984442b8c011uid */
656f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_RTOINFO	0
666f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_ASSOCINFO  1
676f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_INITMSG	2
686f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_NODELAY	3		/* Get/set nodelay option. */
696f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTOCLOSE	4
706f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SET_PEER_PRIMARY_ADDR 5
716f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PRIMARY_ADDR	6
726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_ADAPTATION_LAYER	7
736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_DISABLE_FRAGMENTS	8
746f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PEER_ADDR_PARAMS	9
756f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_DEFAULT_SEND_PARAM	10
766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_EVENTS	11
776f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_I_WANT_MAPPED_V4_ADDR 12	/* Turn on/off mapped v4 addresses  */
786f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_MAXSEG	13		/* Get/set maximum fragment. */
796f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_STATUS	14
806f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_GET_PEER_ADDR_INFO	15
816f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_DELAYED_ACK_TIME	16
826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
836f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
846f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_CONTEXT	17
856f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_FRAGMENT_INTERLEAVE	18
866f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PARTIAL_DELIVERY_POINT	19 /* Set/Get partial delivery point */
876f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_MAX_BURST	20		/* Set/Get max burst */
886f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTH_CHUNK	21	/* Set only: add a chunk type to authenticate */
896f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_HMAC_IDENT	22
906f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTH_KEY	23
916f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTH_ACTIVE_KEY	24
926f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTH_DELETE_KEY	25
936f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PEER_AUTH_CHUNKS	26	/* Read only */
946f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_LOCAL_AUTH_CHUNKS	27	/* Read only */
956f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_GET_ASSOC_NUMBER	28	/* Read only */
966f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
976f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* Internal Socket Options. Some of the sctp library functions are
986f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * implemented using these socket options.
996f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
1006f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_BINDX_ADD	100	/* BINDX requests for adding addrs */
1016f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_BINDX_REM	101	/* BINDX requests for removing addrs. */
1026f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_PEELOFF	102	/* peel off association. */
1036f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* Options 104-106 are deprecated and removed. Do not use this space */
1046f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_CONNECTX_OLD	107	/* CONNECTX old requests. */
1056f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_GET_PEER_ADDRS	108		/* Get all peer addresss. */
1066f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_GET_LOCAL_ADDRS	109		/* Get all local addresss. */
1076f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_CONNECTX	110		/* CONNECTX requests. */
1086f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SOCKOPT_CONNECTX3	111	/* CONNECTX requests (updated) */
1096f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
1106f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* SCTP socket option used to read per endpoint association statistics. */
1116f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_GET_ASSOC_STATS    112      /* Read only */
11289de9aa86469604a61fb72f8073f984442b8c011uid
11389de9aa86469604a61fb72f8073f984442b8c011uid/*
11489de9aa86469604a61fb72f8073f984442b8c011uid * 5.2.1 SCTP Initiation Structure (SCTP_INIT)
11589de9aa86469604a61fb72f8073f984442b8c011uid *
11689de9aa86469604a61fb72f8073f984442b8c011uid *   This cmsghdr structure provides information for initializing new
11789de9aa86469604a61fb72f8073f984442b8c011uid *   SCTP associations with sendmsg().  The SCTP_INITMSG socket option
11889de9aa86469604a61fb72f8073f984442b8c011uid *   uses this same data structure.  This structure is not used for
11989de9aa86469604a61fb72f8073f984442b8c011uid *   recvmsg().
12089de9aa86469604a61fb72f8073f984442b8c011uid *
12189de9aa86469604a61fb72f8073f984442b8c011uid *   cmsg_level    cmsg_type      cmsg_data[]
12289de9aa86469604a61fb72f8073f984442b8c011uid *   ------------  ------------   ----------------------
12389de9aa86469604a61fb72f8073f984442b8c011uid *   IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
12489de9aa86469604a61fb72f8073f984442b8c011uid *
12589de9aa86469604a61fb72f8073f984442b8c011uid */
12689de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_initmsg {
12789de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinit_num_ostreams;
12889de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinit_max_instreams;
12989de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinit_max_attempts;
13089de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinit_max_init_timeo;
13189de9aa86469604a61fb72f8073f984442b8c011uid};
13289de9aa86469604a61fb72f8073f984442b8c011uid
13389de9aa86469604a61fb72f8073f984442b8c011uid/*
13489de9aa86469604a61fb72f8073f984442b8c011uid * 5.2.2 SCTP Header Information Structure (SCTP_SNDRCV)
13589de9aa86469604a61fb72f8073f984442b8c011uid *
13689de9aa86469604a61fb72f8073f984442b8c011uid *   This cmsghdr structure specifies SCTP options for sendmsg() and
13789de9aa86469604a61fb72f8073f984442b8c011uid *   describes SCTP header information about a received message through
13889de9aa86469604a61fb72f8073f984442b8c011uid *   recvmsg().
13989de9aa86469604a61fb72f8073f984442b8c011uid *
14089de9aa86469604a61fb72f8073f984442b8c011uid *   cmsg_level    cmsg_type      cmsg_data[]
14189de9aa86469604a61fb72f8073f984442b8c011uid *   ------------  ------------   ----------------------
14289de9aa86469604a61fb72f8073f984442b8c011uid *   IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
14389de9aa86469604a61fb72f8073f984442b8c011uid *
14489de9aa86469604a61fb72f8073f984442b8c011uid */
14589de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_sndrcvinfo {
14689de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinfo_stream;
14789de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinfo_ssn;
14889de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sinfo_flags;
14989de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sinfo_ppid;
15089de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sinfo_context;
15189de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sinfo_timetolive;
15289de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sinfo_tsn;
15389de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sinfo_cumtsn;
15489de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t sinfo_assoc_id;
15589de9aa86469604a61fb72f8073f984442b8c011uid};
15689de9aa86469604a61fb72f8073f984442b8c011uid
15789de9aa86469604a61fb72f8073f984442b8c011uid/*
15889de9aa86469604a61fb72f8073f984442b8c011uid *  sinfo_flags: 16 bits (unsigned integer)
15989de9aa86469604a61fb72f8073f984442b8c011uid *
16089de9aa86469604a61fb72f8073f984442b8c011uid *   This field may contain any of the following flags and is composed of
16189de9aa86469604a61fb72f8073f984442b8c011uid *   a bitwise OR of these values.
16289de9aa86469604a61fb72f8073f984442b8c011uid */
16389de9aa86469604a61fb72f8073f984442b8c011uid
16489de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_sinfo_flags {
16564a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_UNORDERED = 1,  /* Send/receive message unordered. */
16664a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_ADDR_OVER = 2,  /* Override the primary destination. */
16764a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_ABORT=4,        /* Send an ABORT message to the peer. */
1686f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_SACK_IMMEDIATELY = 8,      /* SACK should be sent without delay */
16937550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman	SCTP_EOF=MSG_FIN,    /* Initiate graceful shutdown process. */
17089de9aa86469604a61fb72f8073f984442b8c011uid};
17189de9aa86469604a61fb72f8073f984442b8c011uid
17289de9aa86469604a61fb72f8073f984442b8c011uid
17389de9aa86469604a61fb72f8073f984442b8c011uidtypedef union {
17489de9aa86469604a61fb72f8073f984442b8c011uid	__u8   			raw;
17589de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_initmsg	init;
17689de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_sndrcvinfo	sndrcv;
17789de9aa86469604a61fb72f8073f984442b8c011uid} sctp_cmsg_data_t;
17889de9aa86469604a61fb72f8073f984442b8c011uid
17989de9aa86469604a61fb72f8073f984442b8c011uid/* These are cmsg_types.  */
18089de9aa86469604a61fb72f8073f984442b8c011uidtypedef enum sctp_cmsg_type {
18189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
1826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_INIT SCTP_INIT
18389de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
1846f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SNDRCV SCTP_SNDRCV
18589de9aa86469604a61fb72f8073f984442b8c011uid} sctp_cmsg_t;
18689de9aa86469604a61fb72f8073f984442b8c011uid
18789de9aa86469604a61fb72f8073f984442b8c011uid
18889de9aa86469604a61fb72f8073f984442b8c011uid/*
18989de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.1 SCTP_ASSOC_CHANGE
19089de9aa86469604a61fb72f8073f984442b8c011uid *
19189de9aa86469604a61fb72f8073f984442b8c011uid *   Communication notifications inform the ULP that an SCTP association
19289de9aa86469604a61fb72f8073f984442b8c011uid *   has either begun or ended. The identifier for a new association is
19389de9aa86469604a61fb72f8073f984442b8c011uid *   provided by this notificaion. The notification information has the
19489de9aa86469604a61fb72f8073f984442b8c011uid *   following format:
19589de9aa86469604a61fb72f8073f984442b8c011uid *
19689de9aa86469604a61fb72f8073f984442b8c011uid */
19789de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_assoc_change {
19889de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_type;
19989de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_flags;
20089de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sac_length;
20189de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_state;
20289de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_error;
20389de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_outbound_streams;
20489de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sac_inbound_streams;
20589de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t sac_assoc_id;
2066f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8 sac_info[0];
20789de9aa86469604a61fb72f8073f984442b8c011uid};
20889de9aa86469604a61fb72f8073f984442b8c011uid
20989de9aa86469604a61fb72f8073f984442b8c011uid/*
21089de9aa86469604a61fb72f8073f984442b8c011uid *   sac_state: 32 bits (signed integer)
21189de9aa86469604a61fb72f8073f984442b8c011uid *
21289de9aa86469604a61fb72f8073f984442b8c011uid *   This field holds one of a number of values that communicate the
21389de9aa86469604a61fb72f8073f984442b8c011uid *   event that happened to the association.  They include:
21489de9aa86469604a61fb72f8073f984442b8c011uid *
21589de9aa86469604a61fb72f8073f984442b8c011uid *   Note:  The following state names deviate from the API draft as
21689de9aa86469604a61fb72f8073f984442b8c011uid *   the names clash too easily with other kernel symbols.
21789de9aa86469604a61fb72f8073f984442b8c011uid */
21889de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_sac_state {
21989de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_COMM_UP,
22089de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_COMM_LOST,
22189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_RESTART,
22289de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SHUTDOWN_COMP,
22389de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_CANT_STR_ASSOC,
22489de9aa86469604a61fb72f8073f984442b8c011uid};
22589de9aa86469604a61fb72f8073f984442b8c011uid
22689de9aa86469604a61fb72f8073f984442b8c011uid/*
22789de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.2 SCTP_PEER_ADDR_CHANGE
22889de9aa86469604a61fb72f8073f984442b8c011uid *
22989de9aa86469604a61fb72f8073f984442b8c011uid *   When a destination address on a multi-homed peer encounters a change
23089de9aa86469604a61fb72f8073f984442b8c011uid *   an interface details event is sent.  The information has the
23189de9aa86469604a61fb72f8073f984442b8c011uid *   following structure:
23289de9aa86469604a61fb72f8073f984442b8c011uid */
23389de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_paddr_change {
23489de9aa86469604a61fb72f8073f984442b8c011uid	__u16 spc_type;
23589de9aa86469604a61fb72f8073f984442b8c011uid	__u16 spc_flags;
23689de9aa86469604a61fb72f8073f984442b8c011uid	__u32 spc_length;
23789de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr_storage spc_aaddr;
23889de9aa86469604a61fb72f8073f984442b8c011uid	int spc_state;
23989de9aa86469604a61fb72f8073f984442b8c011uid	int spc_error;
24089de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t spc_assoc_id;
24164a341fc42c967890a9fb5d8855568e23104bef6mridge} __attribute__((packed, aligned(4)));
24289de9aa86469604a61fb72f8073f984442b8c011uid
24389de9aa86469604a61fb72f8073f984442b8c011uid/*
24489de9aa86469604a61fb72f8073f984442b8c011uid *    spc_state:  32 bits (signed integer)
24589de9aa86469604a61fb72f8073f984442b8c011uid *
24689de9aa86469604a61fb72f8073f984442b8c011uid *   This field holds one of a number of values that communicate the
24789de9aa86469604a61fb72f8073f984442b8c011uid *   event that happened to the address.  They include:
24889de9aa86469604a61fb72f8073f984442b8c011uid */
24989de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_spc_state {
25064a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_ADDR_AVAILABLE,
25189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ADDR_UNREACHABLE,
25289de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ADDR_REMOVED,
25389de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ADDR_ADDED,
25489de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ADDR_MADE_PRIM,
2556f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_ADDR_CONFIRMED,
25689de9aa86469604a61fb72f8073f984442b8c011uid};
25789de9aa86469604a61fb72f8073f984442b8c011uid
25889de9aa86469604a61fb72f8073f984442b8c011uid
25989de9aa86469604a61fb72f8073f984442b8c011uid/*
26089de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.3 SCTP_REMOTE_ERROR
26189de9aa86469604a61fb72f8073f984442b8c011uid *
26289de9aa86469604a61fb72f8073f984442b8c011uid *   A remote peer may send an Operational Error message to its peer.
26389de9aa86469604a61fb72f8073f984442b8c011uid *   This message indicates a variety of error conditions on an
26489de9aa86469604a61fb72f8073f984442b8c011uid *   association. The entire error TLV as it appears on the wire is
26589de9aa86469604a61fb72f8073f984442b8c011uid *   included in a SCTP_REMOTE_ERROR event.  Please refer to the SCTP
26689de9aa86469604a61fb72f8073f984442b8c011uid *   specification [SCTP] and any extensions for a list of possible
26789de9aa86469604a61fb72f8073f984442b8c011uid *   error formats. SCTP error TLVs have the format:
26889de9aa86469604a61fb72f8073f984442b8c011uid */
26989de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_remote_error {
27089de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sre_type;
27189de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sre_flags;
27289de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sre_length;
27389de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sre_error;
27489de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t sre_assoc_id;
27589de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sre_data[0];
27689de9aa86469604a61fb72f8073f984442b8c011uid};
27789de9aa86469604a61fb72f8073f984442b8c011uid
27889de9aa86469604a61fb72f8073f984442b8c011uid
27989de9aa86469604a61fb72f8073f984442b8c011uid/*
28089de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.4 SCTP_SEND_FAILED
28189de9aa86469604a61fb72f8073f984442b8c011uid *
28289de9aa86469604a61fb72f8073f984442b8c011uid *   If SCTP cannot deliver a message it may return the message as a
28389de9aa86469604a61fb72f8073f984442b8c011uid *   notification.
28489de9aa86469604a61fb72f8073f984442b8c011uid */
28589de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_send_failed {
28689de9aa86469604a61fb72f8073f984442b8c011uid	__u16 ssf_type;
28789de9aa86469604a61fb72f8073f984442b8c011uid	__u16 ssf_flags;
28889de9aa86469604a61fb72f8073f984442b8c011uid	__u32 ssf_length;
28989de9aa86469604a61fb72f8073f984442b8c011uid	__u32 ssf_error;
29089de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_sndrcvinfo ssf_info;
29189de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t ssf_assoc_id;
29289de9aa86469604a61fb72f8073f984442b8c011uid	__u8 ssf_data[0];
29389de9aa86469604a61fb72f8073f984442b8c011uid};
29489de9aa86469604a61fb72f8073f984442b8c011uid
29589de9aa86469604a61fb72f8073f984442b8c011uid/*
29689de9aa86469604a61fb72f8073f984442b8c011uid *   ssf_flags: 16 bits (unsigned integer)
29789de9aa86469604a61fb72f8073f984442b8c011uid *
29889de9aa86469604a61fb72f8073f984442b8c011uid *   The flag value will take one of the following values
29989de9aa86469604a61fb72f8073f984442b8c011uid *
30089de9aa86469604a61fb72f8073f984442b8c011uid *   SCTP_DATA_UNSENT  - Indicates that the data was never put on
30189de9aa86469604a61fb72f8073f984442b8c011uid *                       the wire.
30289de9aa86469604a61fb72f8073f984442b8c011uid *
30389de9aa86469604a61fb72f8073f984442b8c011uid *   SCTP_DATA_SENT    - Indicates that the data was put on the wire.
30489de9aa86469604a61fb72f8073f984442b8c011uid *                       Note that this does not necessarily mean that the
30589de9aa86469604a61fb72f8073f984442b8c011uid *                       data was (or was not) successfully delivered.
30689de9aa86469604a61fb72f8073f984442b8c011uid */
30789de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_ssf_flags {
30889de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_DATA_UNSENT,
30989de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_DATA_SENT,
31089de9aa86469604a61fb72f8073f984442b8c011uid};
31189de9aa86469604a61fb72f8073f984442b8c011uid
31289de9aa86469604a61fb72f8073f984442b8c011uid/*
31389de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.5 SCTP_SHUTDOWN_EVENT
31489de9aa86469604a61fb72f8073f984442b8c011uid *
31589de9aa86469604a61fb72f8073f984442b8c011uid *   When a peer sends a SHUTDOWN, SCTP delivers this notification to
31689de9aa86469604a61fb72f8073f984442b8c011uid *   inform the application that it should cease sending data.
31789de9aa86469604a61fb72f8073f984442b8c011uid */
31889de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_shutdown_event {
31989de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sse_type;
32089de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sse_flags;
32189de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sse_length;
32289de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t sse_assoc_id;
32389de9aa86469604a61fb72f8073f984442b8c011uid};
32489de9aa86469604a61fb72f8073f984442b8c011uid
32589de9aa86469604a61fb72f8073f984442b8c011uid/*
3266f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 5.3.1.6 SCTP_ADAPTATION_INDICATION
32789de9aa86469604a61fb72f8073f984442b8c011uid *
3286f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *   When a peer sends a Adaptation Layer Indication parameter , SCTP
32989de9aa86469604a61fb72f8073f984442b8c011uid *   delivers this notification to inform the application
3306f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *   that of the peers requested adaptation layer.
33189de9aa86469604a61fb72f8073f984442b8c011uid */
3326f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_adaptation_event {
33389de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sai_type;
33489de9aa86469604a61fb72f8073f984442b8c011uid	__u16 sai_flags;
33589de9aa86469604a61fb72f8073f984442b8c011uid	__u32 sai_length;
3366f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32 sai_adaptation_ind;
33789de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t sai_assoc_id;
33889de9aa86469604a61fb72f8073f984442b8c011uid};
33989de9aa86469604a61fb72f8073f984442b8c011uid
34089de9aa86469604a61fb72f8073f984442b8c011uid/*
34189de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT
34289de9aa86469604a61fb72f8073f984442b8c011uid *
3436f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *   When a receiver is engaged in a partial delivery of a
3446f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *   message this notification will be used to indicate
34589de9aa86469604a61fb72f8073f984442b8c011uid *   various events.
34689de9aa86469604a61fb72f8073f984442b8c011uid */
34789de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_pdapi_event {
34889de9aa86469604a61fb72f8073f984442b8c011uid	__u16 pdapi_type;
34989de9aa86469604a61fb72f8073f984442b8c011uid	__u16 pdapi_flags;
35089de9aa86469604a61fb72f8073f984442b8c011uid	__u32 pdapi_length;
35189de9aa86469604a61fb72f8073f984442b8c011uid	__u32 pdapi_indication;
35289de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t pdapi_assoc_id;
35389de9aa86469604a61fb72f8073f984442b8c011uid};
35489de9aa86469604a61fb72f8073f984442b8c011uid
35589de9aa86469604a61fb72f8073f984442b8c011uidenum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
35689de9aa86469604a61fb72f8073f984442b8c011uid
35789de9aa86469604a61fb72f8073f984442b8c011uid/*
3586f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu* 5.3.1.8.  SCTP_AUTHENTICATION_EVENT
3596f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu*
3606f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu*  When a receiver is using authentication this message will provide
3616f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu*  notifications regarding new keys being made active as well as errors.
3626f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu*/
3636f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
3646f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_authkey_event {
3656f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16 auth_type;
3666f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16 auth_flags;
3676f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32 auth_length;
3686f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16 auth_keynumber;
3696f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16 auth_altkeynumber;
3706f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32 auth_indication;
3716f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t auth_assoc_id;
3726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
3736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
3746f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuenum { SCTP_AUTH_NEWKEY = 0, };
3756f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
3766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_sender_dry_event {
3776f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu       __u16 sender_dry_type;
3786f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu       __u16 sender_dry_flags;
3796f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu       __u32 sender_dry_length;
3806f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu       sctp_assoc_t sender_dry_assoc_id;
3816f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
3826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
3836f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
38489de9aa86469604a61fb72f8073f984442b8c011uid * Described in Section 7.3
38589de9aa86469604a61fb72f8073f984442b8c011uid *   Ancillary Data and Notification Interest Options
38689de9aa86469604a61fb72f8073f984442b8c011uid */
38789de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_event_subscribe {
38889de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_data_io_event;
38989de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_association_event;
39089de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_address_event;
39189de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_send_failure_event;
39289de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_peer_error_event;
39389de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_shutdown_event;
39489de9aa86469604a61fb72f8073f984442b8c011uid	__u8 sctp_partial_delivery_event;
3956f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8 sctp_adaptation_layer_event;
3966f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8 sctp_authentication_event;
3976f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8 sctp_sender_dry_event;
39889de9aa86469604a61fb72f8073f984442b8c011uid};
39989de9aa86469604a61fb72f8073f984442b8c011uid
40089de9aa86469604a61fb72f8073f984442b8c011uid/*
40189de9aa86469604a61fb72f8073f984442b8c011uid * 5.3.1 SCTP Notification Structure
40289de9aa86469604a61fb72f8073f984442b8c011uid *
40389de9aa86469604a61fb72f8073f984442b8c011uid *   The notification structure is defined as the union of all
40489de9aa86469604a61fb72f8073f984442b8c011uid *   notification types.
40589de9aa86469604a61fb72f8073f984442b8c011uid *
40689de9aa86469604a61fb72f8073f984442b8c011uid */
40789de9aa86469604a61fb72f8073f984442b8c011uidunion sctp_notification {
40889de9aa86469604a61fb72f8073f984442b8c011uid	struct {
40989de9aa86469604a61fb72f8073f984442b8c011uid		__u16 sn_type;             /* Notification type. */
41089de9aa86469604a61fb72f8073f984442b8c011uid		__u16 sn_flags;
41189de9aa86469604a61fb72f8073f984442b8c011uid		__u32 sn_length;
41289de9aa86469604a61fb72f8073f984442b8c011uid	} sn_header;
41389de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_assoc_change sn_assoc_change;
41489de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_paddr_change sn_paddr_change;
41589de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_remote_error sn_remote_error;
41689de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_send_failed sn_send_failed;
41789de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_shutdown_event sn_shutdown_event;
4186f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	struct sctp_adaptation_event sn_adaptation_event;
41989de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_pdapi_event sn_pdapi_event;
4206f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	struct sctp_authkey_event sn_authkey_event;
4216f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	struct sctp_sender_dry_event sn_sender_dry_event;
42289de9aa86469604a61fb72f8073f984442b8c011uid};
42389de9aa86469604a61fb72f8073f984442b8c011uid
42489de9aa86469604a61fb72f8073f984442b8c011uid/* Section 5.3.1
42589de9aa86469604a61fb72f8073f984442b8c011uid * All standard values for sn_type flags are greater than 2^15.
42689de9aa86469604a61fb72f8073f984442b8c011uid * Values from 2^15 and down are reserved.
42789de9aa86469604a61fb72f8073f984442b8c011uid */
42889de9aa86469604a61fb72f8073f984442b8c011uid
42989de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_sn_type {
43089de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SN_TYPE_BASE     = (1<<15),
43189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ASSOC_CHANGE,
4326f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_ASSOC_CHANGE SCTP_ASSOC_CHANGE
43389de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_PEER_ADDR_CHANGE,
4346f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PEER_ADDR_CHANGE SCTP_PEER_ADDR_CHANGE
43589de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SEND_FAILED,
4366f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SEND_FAILED SCTP_SEND_FAILED
43789de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_REMOTE_ERROR,
4386f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_REMOTE_ERROR SCTP_REMOTE_ERROR
43989de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SHUTDOWN_EVENT,
4406f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SHUTDOWN_EVENT SCTP_SHUTDOWN_EVENT
44189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_PARTIAL_DELIVERY_EVENT,
4426f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_PARTIAL_DELIVERY_EVENT SCTP_PARTIAL_DELIVERY_EVENT
4436f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_ADAPTATION_INDICATION,
4446f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_ADAPTATION_INDICATION SCTP_ADAPTATION_INDICATION
4456f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_AUTHENTICATION_INDICATION,
4466f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_INDICATION
4476f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_SENDER_DRY_EVENT,
4486f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define SCTP_SENDER_DRY_EVENT SCTP_SENDER_DRY_EVENT
44989de9aa86469604a61fb72f8073f984442b8c011uid};
45089de9aa86469604a61fb72f8073f984442b8c011uid
45189de9aa86469604a61fb72f8073f984442b8c011uid/* Notification error codes used to fill up the error fields in some
45289de9aa86469604a61fb72f8073f984442b8c011uid * notifications.
45389de9aa86469604a61fb72f8073f984442b8c011uid * SCTP_PEER_ADDRESS_CHAGE 	: spc_error
45489de9aa86469604a61fb72f8073f984442b8c011uid * SCTP_ASSOC_CHANGE		: sac_error
45589de9aa86469604a61fb72f8073f984442b8c011uid * These names should be potentially included in the draft 04 of the SCTP
45689de9aa86469604a61fb72f8073f984442b8c011uid * sockets API specification.
45789de9aa86469604a61fb72f8073f984442b8c011uid */
45889de9aa86469604a61fb72f8073f984442b8c011uidtypedef enum sctp_sn_error {
45989de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_FAILED_THRESHOLD,
46089de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_RECEIVED_SACK,
46189de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_HEARTBEAT_SUCCESS,
46289de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_RESPONSE_TO_USER_REQ,
46389de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_INTERNAL_ERROR,
46489de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_SHUTDOWN_GUARD_EXPIRES,
46589de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_PEER_FAULTY,
46689de9aa86469604a61fb72f8073f984442b8c011uid} sctp_sn_error_t;
46789de9aa86469604a61fb72f8073f984442b8c011uid
46889de9aa86469604a61fb72f8073f984442b8c011uid/*
46989de9aa86469604a61fb72f8073f984442b8c011uid * 7.1.1 Retransmission Timeout Parameters (SCTP_RTOINFO)
47089de9aa86469604a61fb72f8073f984442b8c011uid *
47189de9aa86469604a61fb72f8073f984442b8c011uid *   The protocol parameters used to initialize and bound retransmission
47289de9aa86469604a61fb72f8073f984442b8c011uid *   timeout (RTO) are tunable.  See [SCTP] for more information on how
4736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *   these parameters are used in RTO calculation.
47489de9aa86469604a61fb72f8073f984442b8c011uid */
47589de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_rtoinfo {
47689de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t	srto_assoc_id;
47789de9aa86469604a61fb72f8073f984442b8c011uid	__u32		srto_initial;
47889de9aa86469604a61fb72f8073f984442b8c011uid	__u32		srto_max;
47989de9aa86469604a61fb72f8073f984442b8c011uid	__u32		srto_min;
48089de9aa86469604a61fb72f8073f984442b8c011uid};
48189de9aa86469604a61fb72f8073f984442b8c011uid
48289de9aa86469604a61fb72f8073f984442b8c011uid/*
48389de9aa86469604a61fb72f8073f984442b8c011uid * 7.1.2 Association Parameters (SCTP_ASSOCINFO)
48489de9aa86469604a61fb72f8073f984442b8c011uid *
48589de9aa86469604a61fb72f8073f984442b8c011uid *   This option is used to both examine and set various association and
48689de9aa86469604a61fb72f8073f984442b8c011uid *   endpoint parameters.
48789de9aa86469604a61fb72f8073f984442b8c011uid */
48889de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_assocparams {
48989de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t	sasoc_assoc_id;
49089de9aa86469604a61fb72f8073f984442b8c011uid	__u16		sasoc_asocmaxrxt;
49189de9aa86469604a61fb72f8073f984442b8c011uid	__u16		sasoc_number_peer_destinations;
49289de9aa86469604a61fb72f8073f984442b8c011uid	__u32		sasoc_peer_rwnd;
49389de9aa86469604a61fb72f8073f984442b8c011uid	__u32		sasoc_local_rwnd;
49489de9aa86469604a61fb72f8073f984442b8c011uid	__u32		sasoc_cookie_life;
49589de9aa86469604a61fb72f8073f984442b8c011uid};
49689de9aa86469604a61fb72f8073f984442b8c011uid
49789de9aa86469604a61fb72f8073f984442b8c011uid/*
49889de9aa86469604a61fb72f8073f984442b8c011uid * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
49989de9aa86469604a61fb72f8073f984442b8c011uid *
50089de9aa86469604a61fb72f8073f984442b8c011uid *  Requests that the peer mark the enclosed address as the association
50189de9aa86469604a61fb72f8073f984442b8c011uid *  primary. The enclosed address must be one of the association's
50289de9aa86469604a61fb72f8073f984442b8c011uid *  locally bound addresses. The following structure is used to make a
50389de9aa86469604a61fb72f8073f984442b8c011uid *   set primary request:
50489de9aa86469604a61fb72f8073f984442b8c011uid */
50589de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_setpeerprim {
50689de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t            sspp_assoc_id;
50789de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr_storage sspp_addr;
50864a341fc42c967890a9fb5d8855568e23104bef6mridge} __attribute__((packed, aligned(4)));
50989de9aa86469604a61fb72f8073f984442b8c011uid
51089de9aa86469604a61fb72f8073f984442b8c011uid/*
51189de9aa86469604a61fb72f8073f984442b8c011uid * 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
51289de9aa86469604a61fb72f8073f984442b8c011uid *
51389de9aa86469604a61fb72f8073f984442b8c011uid *  Requests that the local SCTP stack use the enclosed peer address as
51489de9aa86469604a61fb72f8073f984442b8c011uid *  the association primary. The enclosed address must be one of the
51589de9aa86469604a61fb72f8073f984442b8c011uid *  association peer's addresses. The following structure is used to
51689de9aa86469604a61fb72f8073f984442b8c011uid *  make a set peer primary request:
51789de9aa86469604a61fb72f8073f984442b8c011uid */
5186f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_setprim {
51989de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t            ssp_assoc_id;
52089de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr_storage ssp_addr;
52164a341fc42c967890a9fb5d8855568e23104bef6mridge} __attribute__((packed, aligned(4)));
52289de9aa86469604a61fb72f8073f984442b8c011uid
5236f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* For backward compatibility use, define the old name too */
5246f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define sctp_prim sctp_setprim
5256f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
52689de9aa86469604a61fb72f8073f984442b8c011uid/*
5276f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
52889de9aa86469604a61fb72f8073f984442b8c011uid *
5296f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * Requests that the local endpoint set the specified Adaptation Layer
53089de9aa86469604a61fb72f8073f984442b8c011uid * Indication parameter for all future INIT and INIT-ACK exchanges.
53189de9aa86469604a61fb72f8073f984442b8c011uid */
5326f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_setadaptation {
5336f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32	ssb_adaptation_ind;
53489de9aa86469604a61fb72f8073f984442b8c011uid};
53589de9aa86469604a61fb72f8073f984442b8c011uid
53689de9aa86469604a61fb72f8073f984442b8c011uid/*
53789de9aa86469604a61fb72f8073f984442b8c011uid * 7.1.13 Peer Address Parameters  (SCTP_PEER_ADDR_PARAMS)
53889de9aa86469604a61fb72f8073f984442b8c011uid *
53989de9aa86469604a61fb72f8073f984442b8c011uid *   Applications can enable or disable heartbeats for any peer address
54089de9aa86469604a61fb72f8073f984442b8c011uid *   of an association, modify an address's heartbeat interval, force a
54189de9aa86469604a61fb72f8073f984442b8c011uid *   heartbeat to be sent immediately, and adjust the address's maximum
54289de9aa86469604a61fb72f8073f984442b8c011uid *   number of retransmissions sent before an address is considered
54389de9aa86469604a61fb72f8073f984442b8c011uid *   unreachable. The following structure is used to access and modify an
54489de9aa86469604a61fb72f8073f984442b8c011uid *   address's parameters:
54589de9aa86469604a61fb72f8073f984442b8c011uid */
5466f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuenum  sctp_spp_flags {
5476f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_HB_ENABLE = 1<<0,		/*Enable heartbeats*/
5486f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_HB_DISABLE = 1<<1,		/*Disable heartbeats*/
5496f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
5506f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_HB_DEMAND = 1<<2,		/*Send heartbeat immediately*/
5516f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_PMTUD_ENABLE = 1<<3,	/*Enable PMTU discovery*/
5526f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_PMTUD_DISABLE = 1<<4,	/*Disable PMTU discovery*/
5536f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
5546f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_SACKDELAY_ENABLE = 1<<5,	/*Enable SACK*/
5556f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_SACKDELAY_DISABLE = 1<<6,	/*Disable SACK*/
5566f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
5576f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SPP_HB_TIME_IS_ZERO = 1<<7,	/* Set HB delay to 0 */
5586f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
5596f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
56089de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_paddrparams {
56189de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t		spp_assoc_id;
56289de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr_storage	spp_address;
56389de9aa86469604a61fb72f8073f984442b8c011uid	__u32			spp_hbinterval;
56489de9aa86469604a61fb72f8073f984442b8c011uid	__u16			spp_pathmaxrxt;
5656f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32			spp_pathmtu;
5666f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32			spp_sackdelay;
5676f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32			spp_flags;
56864a341fc42c967890a9fb5d8855568e23104bef6mridge} __attribute__((packed, aligned(4)));
56989de9aa86469604a61fb72f8073f984442b8c011uid
57089de9aa86469604a61fb72f8073f984442b8c011uid/*
5716f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
5726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
5736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This set option adds a chunk type that the user is requesting to be
5746f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * received only in an authenticated way.  Changes to the list of chunks
5756f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * will only effect future associations on the socket.
5766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
5776f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_authchunk {
5786f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8		sauth_chunk;
5796f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
5806f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
5816f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
5826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
5836f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
5846f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This option gets or sets the list of HMAC algorithms that the local
5856f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * endpoint requires the peer to use.
5866f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu*/
5876f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
5886f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuenum {
5896f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_AUTH_HMAC_ID_SHA1 = 1,
5906f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_AUTH_HMAC_ID_SHA256 = 3,
5916f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
5926f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
5936f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_hmacalgo {
5946f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32		shmac_number_of_idents;
5956f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16		shmac_idents[];
5966f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
5976f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
5986f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
5996f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
6006f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
6016f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This option will set a shared secret key which is used to build an
6026f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * association shared key.
6036f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
6046f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_authkey {
6056f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t	sca_assoc_id;
6066f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16		sca_keynumber;
6076f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16		sca_keylength;
6086f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8		sca_key[];
6096f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
6106f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6116f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
6126f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
6136f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
6146f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This option will get or set the active shared key to be used to build
6156f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * the association shared key.
6166f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
6176f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6186f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_authkeyid {
6196f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t	scact_assoc_id;
6206f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u16		scact_keynumber;
6216f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
6226f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6236f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6246f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
6256f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
6266f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
6276f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This option will effect the way delayed acks are performed.  This
6286f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * option allows you to get or set the delayed ack time, in
6296f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * milliseconds.  It also allows changing the delayed ack frequency.
6306f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * Changing the frequency to 1 disables the delayed sack algorithm.  If
6316f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * the assoc_id is 0, then this sets or gets the endpoints default
6326f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * values.  If the assoc_id field is non-zero, then the set or get
6336f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * effects the specified association for the one to many model (the
6346f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * assoc_id field is ignored by the one to one model).  Note that if
6356f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * sack_delay or sack_freq are 0 when setting this option, then the
6366f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * current values will remain unchanged.
6376f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
6386f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_sack_info {
6396f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t	sack_assoc_id;
6406f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	uint32_t	sack_delay;
6416f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	uint32_t	sack_freq;
6426f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
6436f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6446f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_assoc_value {
6456f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu    sctp_assoc_t            assoc_id;
6466f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu    uint32_t                assoc_value;
6476f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
6486f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
6496f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
65089de9aa86469604a61fb72f8073f984442b8c011uid * 7.2.2 Peer Address Information
65189de9aa86469604a61fb72f8073f984442b8c011uid *
65289de9aa86469604a61fb72f8073f984442b8c011uid *   Applications can retrieve information about a specific peer address
65389de9aa86469604a61fb72f8073f984442b8c011uid *   of an association, including its reachability state, congestion
65489de9aa86469604a61fb72f8073f984442b8c011uid *   window, and retransmission timer values.  This information is
65589de9aa86469604a61fb72f8073f984442b8c011uid *   read-only. The following structure is used to access this
65689de9aa86469604a61fb72f8073f984442b8c011uid *   information:
65789de9aa86469604a61fb72f8073f984442b8c011uid */
65889de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_paddrinfo {
65989de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t		spinfo_assoc_id;
66089de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr_storage	spinfo_address;
66189de9aa86469604a61fb72f8073f984442b8c011uid	__s32			spinfo_state;
66289de9aa86469604a61fb72f8073f984442b8c011uid	__u32			spinfo_cwnd;
66389de9aa86469604a61fb72f8073f984442b8c011uid	__u32			spinfo_srtt;
66489de9aa86469604a61fb72f8073f984442b8c011uid	__u32			spinfo_rto;
66589de9aa86469604a61fb72f8073f984442b8c011uid	__u32			spinfo_mtu;
66664a341fc42c967890a9fb5d8855568e23104bef6mridge} __attribute__((packed, aligned(4)));
66789de9aa86469604a61fb72f8073f984442b8c011uid
66889de9aa86469604a61fb72f8073f984442b8c011uid/* Peer addresses's state. */
6696f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* UNKNOWN: Peer address passed by the upper layer in sendmsg or connect[x]
6706f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * calls.
6716f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * UNCONFIRMED: Peer address received in INIT/INIT-ACK address parameters.
6726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *              Not yet confirmed by a heartbeat and not available for data
6736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *		transfers.
6746f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * ACTIVE : Peer address confirmed, active and available for data transfers.
6756f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * INACTIVE: Peer address inactive and not available for data transfers.
6766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
67789de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_spinfo_state {
67889de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_INACTIVE,
6796f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_PF,
68089de9aa86469604a61fb72f8073f984442b8c011uid	SCTP_ACTIVE,
6816f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_UNCONFIRMED,
6826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	SCTP_UNKNOWN = 0xffff
68389de9aa86469604a61fb72f8073f984442b8c011uid};
68489de9aa86469604a61fb72f8073f984442b8c011uid
68589de9aa86469604a61fb72f8073f984442b8c011uid/*
68689de9aa86469604a61fb72f8073f984442b8c011uid * 7.2.1 Association Status (SCTP_STATUS)
68789de9aa86469604a61fb72f8073f984442b8c011uid *
68889de9aa86469604a61fb72f8073f984442b8c011uid *   Applications can retrieve current status information about an
68989de9aa86469604a61fb72f8073f984442b8c011uid *   association, including association state, peer receiver window size,
69089de9aa86469604a61fb72f8073f984442b8c011uid *   number of unacked data chunks, and number of data chunks pending
69189de9aa86469604a61fb72f8073f984442b8c011uid *   receipt.  This information is read-only.  The following structure is
69289de9aa86469604a61fb72f8073f984442b8c011uid *   used to access this information:
69389de9aa86469604a61fb72f8073f984442b8c011uid */
69489de9aa86469604a61fb72f8073f984442b8c011uidstruct sctp_status {
69589de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t		sstat_assoc_id;
69689de9aa86469604a61fb72f8073f984442b8c011uid	__s32			sstat_state;
69789de9aa86469604a61fb72f8073f984442b8c011uid	__u32			sstat_rwnd;
69889de9aa86469604a61fb72f8073f984442b8c011uid	__u16			sstat_unackdata;
69989de9aa86469604a61fb72f8073f984442b8c011uid	__u16			sstat_penddata;
70089de9aa86469604a61fb72f8073f984442b8c011uid	__u16			sstat_instrms;
70189de9aa86469604a61fb72f8073f984442b8c011uid	__u16			sstat_outstrms;
70289de9aa86469604a61fb72f8073f984442b8c011uid	__u32			sstat_fragmentation_point;
70389de9aa86469604a61fb72f8073f984442b8c011uid	struct sctp_paddrinfo	sstat_primary;
70489de9aa86469604a61fb72f8073f984442b8c011uid};
70589de9aa86469604a61fb72f8073f984442b8c011uid
7066f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/*
7076f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * 7.2.3.  Get the list of chunks the peer requires to be authenticated
7086f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *         (SCTP_PEER_AUTH_CHUNKS)
7096f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *
7106f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * This option gets a list of chunks for a specified association that
7116f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * the peer requires to be received authenticated only.
7126f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
7136f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_authchunks {
7146f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t	gauth_assoc_id;
7156f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32		gauth_number_of_chunks;
7166f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	uint8_t		gauth_chunks[];
7176f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
7186f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* The broken spelling has been released already,
7196f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * so don't break anyone, now that it's fixed.
7206f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
7216f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#define guth_number_of_chunks gauth_number_of_chunks
7226f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
72364a341fc42c967890a9fb5d8855568e23104bef6mridge/* Association states.  */
72464a341fc42c967890a9fb5d8855568e23104bef6mridgeenum sctp_sstat_state {
72564a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_EMPTY                = 0,
72664a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_CLOSED               = 1,
72764a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_COOKIE_WAIT          = 2,
72864a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_COOKIE_ECHOED        = 3,
72964a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_ESTABLISHED          = 4,
73064a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_SHUTDOWN_PENDING     = 5,
73164a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_SHUTDOWN_SENT        = 6,
73264a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_SHUTDOWN_RECEIVED    = 7,
73364a341fc42c967890a9fb5d8855568e23104bef6mridge	SCTP_SHUTDOWN_ACK_SENT    = 8,
73464a341fc42c967890a9fb5d8855568e23104bef6mridge};
73564a341fc42c967890a9fb5d8855568e23104bef6mridge
73689de9aa86469604a61fb72f8073f984442b8c011uid/*
73737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman * 8.3, 8.5 get all peer/local addresses in an association.
73864a341fc42c967890a9fb5d8855568e23104bef6mridge * This parameter struct is used by SCTP_GET_PEER_ADDRS and
73964a341fc42c967890a9fb5d8855568e23104bef6mridge * SCTP_GET_LOCAL_ADDRS socket options used internally to implement
7406f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * sctp_getpaddrs() and sctp_getladdrs() API.
74189de9aa86469604a61fb72f8073f984442b8c011uid */
74264a341fc42c967890a9fb5d8855568e23104bef6mridgestruct sctp_getaddrs_old {
74389de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t            assoc_id;
74489de9aa86469604a61fb72f8073f984442b8c011uid	int			addr_num;
74589de9aa86469604a61fb72f8073f984442b8c011uid	struct sockaddr		*addrs;
74689de9aa86469604a61fb72f8073f984442b8c011uid};
74764a341fc42c967890a9fb5d8855568e23104bef6mridgestruct sctp_getaddrs {
7486f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t		assoc_id; /*input*/
7496f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u32			addr_num; /*output*/
7506f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u8			addrs[0]; /*output, variable size*/
7516f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu};
7526f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
7536f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
7546f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * association stats. All stats are counts except sas_maxrto and
7556f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
7566f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * the last call. Will return 0 when did not change since last call
7576f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu */
7586f22494d19b605ded308dc0fa713e91cb873f44aSimon Xustruct sctp_assoc_stats {
7596f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	sctp_assoc_t	sas_assoc_id;    /* Input */
7606f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu					 /* Transport of the observed max RTO spike */
7616f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	struct sockaddr_storage sas_obs_rto_ipaddr;
7626f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_maxrto;      /* Maximum Observed RTO for period */
7636f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_isacks;	 /* SACKs received */
7646f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_osacks;	 /* SACKs sent */
7656f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_opackets;	 /* Packets sent */
7666f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_ipackets;	 /* Packets received */
7676f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_rtxchunks;   /* Retransmitted Chunks */
7686f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_outofseqtsns;/* TSN received > next expected */
7696f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_idupchunks;  /* Dups received (ordered+unordered) */
7706f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_gapcnt;      /* Gap Acknowledgements Received */
7716f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_ouodchunks;  /* Unordered data chunks sent */
7726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_iuodchunks;  /* Unordered data chunks received */
7736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_oodchunks;	 /* Ordered data chunks sent */
7746f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_iodchunks;	 /* Ordered data chunks received */
7756f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_octrlchunks; /* Control chunks sent */
7766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	__u64		sas_ictrlchunks; /* Control chunks received */
77764a341fc42c967890a9fb5d8855568e23104bef6mridge};
77889de9aa86469604a61fb72f8073f984442b8c011uid
77989de9aa86469604a61fb72f8073f984442b8c011uid/* These are bit fields for msghdr->msg_flags.  See section 5.1.  */
78089de9aa86469604a61fb72f8073f984442b8c011uid/* On user space Linux, these live in <bits/socket.h> as an enum.  */
78189de9aa86469604a61fb72f8073f984442b8c011uidenum sctp_msg_flags {
78289de9aa86469604a61fb72f8073f984442b8c011uid	MSG_NOTIFICATION = 0x8000,
78389de9aa86469604a61fb72f8073f984442b8c011uid#define MSG_NOTIFICATION MSG_NOTIFICATION
78489de9aa86469604a61fb72f8073f984442b8c011uid};
78589de9aa86469604a61fb72f8073f984442b8c011uid
78689de9aa86469604a61fb72f8073f984442b8c011uid/*
78789de9aa86469604a61fb72f8073f984442b8c011uid * 8.1 sctp_bindx()
78889de9aa86469604a61fb72f8073f984442b8c011uid *
78989de9aa86469604a61fb72f8073f984442b8c011uid * The flags parameter is formed from the bitwise OR of zero or more of the
79089de9aa86469604a61fb72f8073f984442b8c011uid * following currently defined flags:
79189de9aa86469604a61fb72f8073f984442b8c011uid */
79289de9aa86469604a61fb72f8073f984442b8c011uid#define SCTP_BINDX_ADD_ADDR 0x01
79389de9aa86469604a61fb72f8073f984442b8c011uid#define SCTP_BINDX_REM_ADDR 0x02
79489de9aa86469604a61fb72f8073f984442b8c011uid
79589de9aa86469604a61fb72f8073f984442b8c011uid/* This is the structure that is passed as an argument(optval) to
79689de9aa86469604a61fb72f8073f984442b8c011uid * getsockopt(SCTP_SOCKOPT_PEELOFF).
79789de9aa86469604a61fb72f8073f984442b8c011uid */
79889de9aa86469604a61fb72f8073f984442b8c011uidtypedef struct {
79989de9aa86469604a61fb72f8073f984442b8c011uid	sctp_assoc_t associd;
80089de9aa86469604a61fb72f8073f984442b8c011uid	int sd;
80189de9aa86469604a61fb72f8073f984442b8c011uid} sctp_peeloff_arg_t;
80289de9aa86469604a61fb72f8073f984442b8c011uid
80389de9aa86469604a61fb72f8073f984442b8c011uid
80489de9aa86469604a61fb72f8073f984442b8c011uidint sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt, int flags);
80589de9aa86469604a61fb72f8073f984442b8c011uid
8066f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuint sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt,
8076f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu		  sctp_assoc_t *id);
80864a341fc42c967890a9fb5d8855568e23104bef6mridge
80989de9aa86469604a61fb72f8073f984442b8c011uidint sctp_peeloff(int sd, sctp_assoc_t assoc_id);
81089de9aa86469604a61fb72f8073f984442b8c011uid
81189de9aa86469604a61fb72f8073f984442b8c011uid/* Prototype for the library function sctp_opt_info defined in
81289de9aa86469604a61fb72f8073f984442b8c011uid * API 7. Socket Options.
81389de9aa86469604a61fb72f8073f984442b8c011uid */
81489de9aa86469604a61fb72f8073f984442b8c011uidint sctp_opt_info(int sd, sctp_assoc_t id, int opt, void *arg, socklen_t *size);
81589de9aa86469604a61fb72f8073f984442b8c011uid
81689de9aa86469604a61fb72f8073f984442b8c011uid/* Get all peer address on a socket.  This is a new SCTP API
81789de9aa86469604a61fb72f8073f984442b8c011uid * described in the section 8.3 of the Sockets API Extensions for SCTP.
81889de9aa86469604a61fb72f8073f984442b8c011uid * This is implemented using the getsockopt() interface.
81989de9aa86469604a61fb72f8073f984442b8c011uid */
82089de9aa86469604a61fb72f8073f984442b8c011uidint sctp_getpaddrs(int sd, sctp_assoc_t id, struct sockaddr **addrs);
82189de9aa86469604a61fb72f8073f984442b8c011uid
82289de9aa86469604a61fb72f8073f984442b8c011uid/* Frees all resources allocated by sctp_getpaddrs().  This is a new SCTP API
82389de9aa86469604a61fb72f8073f984442b8c011uid * described in the section 8.4 of the Sockets API Extensions for SCTP.
82489de9aa86469604a61fb72f8073f984442b8c011uid */
82589de9aa86469604a61fb72f8073f984442b8c011uidint sctp_freepaddrs(struct sockaddr *addrs);
82689de9aa86469604a61fb72f8073f984442b8c011uid
82789de9aa86469604a61fb72f8073f984442b8c011uid/* Get all locally bound address on a socket.  This is a new SCTP API
82889de9aa86469604a61fb72f8073f984442b8c011uid * described in the section 8.5 of the Sockets API Extensions for SCTP.
82989de9aa86469604a61fb72f8073f984442b8c011uid * This is implemented using the getsockopt() interface.
83089de9aa86469604a61fb72f8073f984442b8c011uid */
83189de9aa86469604a61fb72f8073f984442b8c011uidint sctp_getladdrs(int sd, sctp_assoc_t id, struct sockaddr **addrs);
83289de9aa86469604a61fb72f8073f984442b8c011uid
83389de9aa86469604a61fb72f8073f984442b8c011uid/* Frees all resources allocated by sctp_getladdrs().  This is a new SCTP API
83489de9aa86469604a61fb72f8073f984442b8c011uid * described in the section 8.6 of the Sockets API Extensions for SCTP.
83589de9aa86469604a61fb72f8073f984442b8c011uid */
83689de9aa86469604a61fb72f8073f984442b8c011uidint sctp_freeladdrs(struct sockaddr *addrs);
83789de9aa86469604a61fb72f8073f984442b8c011uid
83889de9aa86469604a61fb72f8073f984442b8c011uid/* This library function assists the user with the advanced features
83989de9aa86469604a61fb72f8073f984442b8c011uid * of SCTP.  This is a new SCTP API described in the section 8.7 of the
84089de9aa86469604a61fb72f8073f984442b8c011uid * Sockets API Extensions for SCTP. This is implemented using the
84189de9aa86469604a61fb72f8073f984442b8c011uid * sendmsg() interface.
84289de9aa86469604a61fb72f8073f984442b8c011uid */
84389de9aa86469604a61fb72f8073f984442b8c011uidint sctp_sendmsg(int s, const void *msg, size_t len, struct sockaddr *to,
84489de9aa86469604a61fb72f8073f984442b8c011uid		 socklen_t tolen, uint32_t ppid, uint32_t flags,
84589de9aa86469604a61fb72f8073f984442b8c011uid		 uint16_t stream_no, uint32_t timetolive, uint32_t context);
84689de9aa86469604a61fb72f8073f984442b8c011uid
84764a341fc42c967890a9fb5d8855568e23104bef6mridge/* This library function assist the user with sending a message without
84864a341fc42c967890a9fb5d8855568e23104bef6mridge * dealing directly with the CMSG header.
84964a341fc42c967890a9fb5d8855568e23104bef6mridge */
85064a341fc42c967890a9fb5d8855568e23104bef6mridgeint sctp_send(int s, const void *msg, size_t len,
85164a341fc42c967890a9fb5d8855568e23104bef6mridge              const struct sctp_sndrcvinfo *sinfo, int flags);
85264a341fc42c967890a9fb5d8855568e23104bef6mridge
85389de9aa86469604a61fb72f8073f984442b8c011uid/* This library function assists the user with the advanced features
85489de9aa86469604a61fb72f8073f984442b8c011uid * of SCTP.  This is a new SCTP API described in the section 8.8 of the
85589de9aa86469604a61fb72f8073f984442b8c011uid * Sockets API Extensions for SCTP. This is implemented using the
85689de9aa86469604a61fb72f8073f984442b8c011uid * recvmsg() interface.
85789de9aa86469604a61fb72f8073f984442b8c011uid */
85864a341fc42c967890a9fb5d8855568e23104bef6mridgeint sctp_recvmsg(int s, void *msg, size_t len, struct sockaddr *from,
85989de9aa86469604a61fb72f8073f984442b8c011uid		 socklen_t *fromlen, struct sctp_sndrcvinfo *sinfo,
86089de9aa86469604a61fb72f8073f984442b8c011uid		 int *msg_flags);
86189de9aa86469604a61fb72f8073f984442b8c011uid
8626f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* Return the address length for an address family. */
8636f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuint sctp_getaddrlen(sa_family_t family);
8646f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu
86564a341fc42c967890a9fb5d8855568e23104bef6mridge__END_DECLS
86664a341fc42c967890a9fb5d8855568e23104bef6mridge
86789de9aa86469604a61fb72f8073f984442b8c011uid#endif /* __linux_sctp_h__ */
868