Home | History | Annotate | Line # | Download | only in netinet
sctp_uio.h revision 1.4
      1  1.1  rjs /*	$KAME: sctp_uio.h,v 1.11 2005/03/06 16:04:18 itojun Exp $	*/
      2  1.4  rjs /*	$NetBSD: sctp_uio.h,v 1.4 2018/07/31 13:36:31 rjs Exp $ */
      3  1.1  rjs 
      4  1.1  rjs #ifndef __SCTP_UIO_H__
      5  1.1  rjs #define __SCTP_UIO_H__
      6  1.1  rjs 
      7  1.1  rjs /*
      8  1.1  rjs  * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc.
      9  1.1  rjs  * All rights reserved.
     10  1.1  rjs  *
     11  1.1  rjs  * Redistribution and use in source and binary forms, with or without
     12  1.1  rjs  * modification, are permitted provided that the following conditions
     13  1.1  rjs  * are met:
     14  1.1  rjs  * 1. Redistributions of source code must retain the above copyright
     15  1.1  rjs  *    notice, this list of conditions and the following disclaimer.
     16  1.1  rjs  * 2. Redistributions in binary form must reproduce the above copyright
     17  1.1  rjs  *    notice, this list of conditions and the following disclaimer in the
     18  1.1  rjs  *    documentation and/or other materials provided with the distribution.
     19  1.1  rjs  * 3. All advertising materials mentioning features or use of this software
     20  1.1  rjs  *    must display the following acknowledgement:
     21  1.1  rjs  *      This product includes software developed by Cisco Systems, Inc.
     22  1.1  rjs  * 4. Neither the name of the project nor the names of its contributors
     23  1.1  rjs  *    may be used to endorse or promote products derived from this software
     24  1.1  rjs  *    without specific prior written permission.
     25  1.1  rjs  *
     26  1.1  rjs  * THIS SOFTWARE IS PROVIDED BY CISCO SYSTEMS AND CONTRIBUTORS ``AS IS'' AND
     27  1.1  rjs  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     28  1.1  rjs  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     29  1.1  rjs  * ARE DISCLAIMED.  IN NO EVENT SHALL CISCO SYSTEMS OR CONTRIBUTORS BE LIABLE
     30  1.1  rjs  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     31  1.1  rjs  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     32  1.1  rjs  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     33  1.1  rjs  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     34  1.1  rjs  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     35  1.1  rjs  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     36  1.1  rjs  * SUCH DAMAGE.
     37  1.1  rjs  */
     38  1.1  rjs 
     39  1.1  rjs #include <sys/types.h>
     40  1.1  rjs #include <sys/socket.h>
     41  1.1  rjs 
     42  1.1  rjs typedef u_int32_t sctp_assoc_t;
     43  1.1  rjs 
     44  1.3  rjs #define SCTP_FUTURE_ASSOC	0
     45  1.3  rjs #define SCTP_CURRENT_ASSOC	1
     46  1.3  rjs #define SCTP_ALL_ASSOC		2
     47  1.3  rjs 
     48  1.1  rjs /* On/Off setup for subscription to events */
     49  1.1  rjs struct sctp_event_subscribe {
     50  1.1  rjs 	u_int8_t sctp_data_io_event;
     51  1.1  rjs 	u_int8_t sctp_association_event;
     52  1.1  rjs 	u_int8_t sctp_address_event;
     53  1.1  rjs 	u_int8_t sctp_send_failure_event;
     54  1.1  rjs 	u_int8_t sctp_peer_error_event;
     55  1.1  rjs 	u_int8_t sctp_shutdown_event;
     56  1.1  rjs 	u_int8_t sctp_partial_delivery_event;
     57  1.1  rjs 	u_int8_t sctp_adaption_layer_event;
     58  1.1  rjs 	u_int8_t sctp_stream_reset_events;
     59  1.2  rjs } __packed;
     60  1.1  rjs 
     61  1.1  rjs /* ancillary data types */
     62  1.1  rjs #define SCTP_INIT	0x0001
     63  1.1  rjs #define SCTP_SNDRCV	0x0002
     64  1.3  rjs #define SCTP_EXTRCV	0x0003
     65  1.3  rjs #define SCTP_SNDINFO	0x0004
     66  1.3  rjs #define SCTP_RCVINFO	0x0005
     67  1.3  rjs #define SCTP_NXTINFO	0x0006
     68  1.3  rjs #define SCTP_PRINFO	0x0007
     69  1.3  rjs #define SCTP_AUTHINFO	0x0008
     70  1.3  rjs #define SCTP_DSTADDRV4	0x0009
     71  1.3  rjs #define SCTP_DSTADDRV6	0x000a
     72  1.3  rjs 
     73  1.3  rjs struct sctp_event {
     74  1.3  rjs 	sctp_assoc_t se_assoc_id;
     75  1.3  rjs 	u_int16_t se_type;
     76  1.3  rjs 	u_int8_t se_on;
     77  1.3  rjs } __packed;
     78  1.1  rjs 
     79  1.1  rjs /*
     80  1.1  rjs  * ancillary data structures
     81  1.1  rjs  */
     82  1.1  rjs struct sctp_initmsg {
     83  1.1  rjs 	u_int32_t sinit_num_ostreams;
     84  1.1  rjs 	u_int32_t sinit_max_instreams;
     85  1.1  rjs 	u_int16_t sinit_max_attempts;
     86  1.1  rjs 	u_int16_t sinit_max_init_timeo;
     87  1.2  rjs } __packed;
     88  1.1  rjs 
     89  1.1  rjs struct sctp_sndrcvinfo {
     90  1.1  rjs 	u_int16_t sinfo_stream;
     91  1.1  rjs 	u_int16_t sinfo_ssn;
     92  1.1  rjs 	u_int16_t sinfo_flags;
     93  1.1  rjs 	u_int32_t sinfo_ppid;
     94  1.1  rjs 	u_int32_t sinfo_context;
     95  1.1  rjs 	u_int32_t sinfo_timetolive;
     96  1.1  rjs 	u_int32_t sinfo_tsn;
     97  1.1  rjs 	u_int32_t sinfo_cumtsn;
     98  1.1  rjs 	sctp_assoc_t sinfo_assoc_id;
     99  1.2  rjs } __packed;
    100  1.1  rjs 
    101  1.3  rjs struct sctp_sndinfo {
    102  1.3  rjs 	u_int16_t snd_sid;
    103  1.3  rjs 	u_int16_t snd_flags;
    104  1.3  rjs 	u_int32_t snd_ppid;
    105  1.3  rjs 	u_int32_t snd_context;
    106  1.3  rjs 	sctp_assoc_t snd_assoc_id;
    107  1.3  rjs } __packed;
    108  1.3  rjs 
    109  1.3  rjs struct sctp_rcvinfo {
    110  1.3  rjs 	u_int16_t rcv_sid;
    111  1.3  rjs 	u_int16_t rcv_ssn;
    112  1.3  rjs 	u_int16_t rcv_flags;
    113  1.3  rjs 	u_int32_t rcv_ppid;
    114  1.3  rjs 	u_int32_t rcv_tsn;
    115  1.3  rjs 	u_int32_t rcv_cumtsn;
    116  1.3  rjs 	u_int32_t rcv_context;
    117  1.3  rjs 	sctp_assoc_t rcv_assoc_id;
    118  1.3  rjs };
    119  1.3  rjs 
    120  1.3  rjs struct sctp_nxtinfo {
    121  1.3  rjs 	u_int16_t nxt_sid;
    122  1.3  rjs 	u_int16_t nxt_flags;
    123  1.3  rjs 	u_int32_t nxt_ppid;
    124  1.3  rjs 	u_int32_t nxt_length;
    125  1.3  rjs 	sctp_assoc_t nxt_assoc_id;
    126  1.3  rjs } __packed;
    127  1.3  rjs 
    128  1.3  rjs struct sctp_prinfo {
    129  1.3  rjs 	u_int16_t pr_policy;
    130  1.3  rjs 	u_int32_t pr_value;
    131  1.3  rjs };
    132  1.3  rjs 
    133  1.3  rjs struct sctp_authinfo {
    134  1.3  rjs 	u_int16_t auth_keynumber;
    135  1.3  rjs } __packed;
    136  1.3  rjs 
    137  1.1  rjs struct sctp_snd_all_completes {
    138  1.1  rjs 	u_int16_t sall_stream;
    139  1.1  rjs 	u_int16_t sall_flags;
    140  1.1  rjs 	u_int32_t sall_ppid;
    141  1.1  rjs 	u_int32_t sall_context;
    142  1.1  rjs 	u_int32_t sall_num_sent;
    143  1.1  rjs 	u_int32_t sall_num_failed;
    144  1.2  rjs } __packed;
    145  1.1  rjs 
    146  1.1  rjs /* send/recv flags */
    147  1.3  rjs #define SCTP_SENDALL     	0x0200
    148  1.3  rjs #define SCTP_PR_SCTP_TTL	0x0400	/* Partial Reliable on this msg */
    149  1.3  rjs #define SCTP_PR_SCTP_BUF	0x0800	/* Buffer based PR-SCTP */
    150  1.3  rjs #define SCTP_EOF 		0x1000	/* Start shutdown procedures */
    151  1.3  rjs #define SCTP_UNORDERED 		0x2000	/* Message is un-ordered */
    152  1.3  rjs #define SCTP_ADDR_OVER		0x4000	/* Override the primary-address */
    153  1.3  rjs #define SCTP_ABORT		0x8000	/* Send an ABORT to peer */
    154  1.1  rjs 
    155  1.1  rjs /* Stat's */
    156  1.1  rjs struct sctp_pcbinfo {
    157  1.1  rjs 	u_int32_t ep_count;
    158  1.1  rjs 	u_int32_t asoc_count;
    159  1.1  rjs 	u_int32_t laddr_count;
    160  1.1  rjs 	u_int32_t raddr_count;
    161  1.1  rjs 	u_int32_t chk_count;
    162  1.1  rjs 	u_int32_t sockq_count;
    163  1.1  rjs 	u_int32_t mbuf_track;
    164  1.2  rjs } __packed;
    165  1.1  rjs 
    166  1.1  rjs struct sctp_sockstat {
    167  1.1  rjs 	sctp_assoc_t ss_assoc_id;
    168  1.1  rjs 	u_int32_t ss_total_sndbuf;
    169  1.1  rjs 	u_int32_t ss_total_mbuf_sndbuf;
    170  1.1  rjs 	u_int32_t ss_total_recv_buf;
    171  1.2  rjs } __packed;
    172  1.1  rjs 
    173  1.1  rjs /*
    174  1.1  rjs  * notification event structures
    175  1.1  rjs  */
    176  1.1  rjs 
    177  1.1  rjs 
    178  1.1  rjs /* association change events */
    179  1.1  rjs 
    180  1.1  rjs struct sctp_assoc_change {
    181  1.1  rjs 	u_int16_t sac_type;
    182  1.1  rjs 	u_int16_t sac_flags;
    183  1.1  rjs 	u_int32_t sac_length;
    184  1.1  rjs 	u_int16_t sac_state;
    185  1.1  rjs 	u_int16_t sac_error;
    186  1.1  rjs 	u_int16_t sac_outbound_streams;
    187  1.1  rjs 	u_int16_t sac_inbound_streams;
    188  1.1  rjs 	sctp_assoc_t sac_assoc_id;
    189  1.3  rjs 	u_int8_t sac_info[0];
    190  1.2  rjs } __packed;
    191  1.1  rjs /* sac_state values */
    192  1.1  rjs 
    193  1.1  rjs #define SCTP_COMM_UP		0x0001
    194  1.1  rjs #define SCTP_COMM_LOST		0x0002
    195  1.1  rjs #define SCTP_RESTART		0x0003
    196  1.1  rjs #define SCTP_SHUTDOWN_COMP	0x0004
    197  1.1  rjs #define SCTP_CANT_STR_ASSOC	0x0005
    198  1.1  rjs 
    199  1.3  rjs /* sac_info values */
    200  1.3  rjs #define SCTP_ASSOC_SUPPORTS_PR		0x0001
    201  1.3  rjs #define SCTP_ASSOC_SUPPORTS_AUTH	0x0002
    202  1.3  rjs #define SCTP_ASSOC_SUPPORTS_ASCONF	0x0003
    203  1.3  rjs #define SCTP_ASSOC_SUPPORTS_MULTIBUF	0x0004
    204  1.1  rjs 
    205  1.1  rjs /* Address events */
    206  1.1  rjs struct sctp_paddr_change {
    207  1.1  rjs 	u_int16_t spc_type;
    208  1.1  rjs 	u_int16_t spc_flags;
    209  1.1  rjs 	u_int32_t spc_length;
    210  1.1  rjs 	struct sockaddr_storage spc_aaddr;
    211  1.1  rjs 	u_int32_t spc_state;
    212  1.1  rjs 	u_int32_t spc_error;
    213  1.1  rjs 	sctp_assoc_t spc_assoc_id;
    214  1.2  rjs } __packed;
    215  1.1  rjs /* paddr state values */
    216  1.1  rjs #define SCTP_ADDR_AVAILABLE	0x0001
    217  1.1  rjs #define SCTP_ADDR_UNREACHABLE	0x0002
    218  1.1  rjs #define SCTP_ADDR_REMOVED	0x0003
    219  1.1  rjs #define SCTP_ADDR_ADDED		0x0004
    220  1.1  rjs #define SCTP_ADDR_MADE_PRIM	0x0005
    221  1.3  rjs #define SCTP_ADDR_CONFIRMED	0x0006 /* XXX */
    222  1.1  rjs 
    223  1.1  rjs /*
    224  1.1  rjs  * CAUTION: these are user exposed SCTP addr reachability states
    225  1.1  rjs  *          must be compatible with SCTP_ADDR states in sctp_constants.h
    226  1.1  rjs  */
    227  1.1  rjs #ifdef SCTP_ACTIVE
    228  1.1  rjs #undef SCTP_ACTIVE
    229  1.1  rjs #endif
    230  1.1  rjs #define SCTP_ACTIVE		0x0001	/* SCTP_ADDR_REACHABLE */
    231  1.1  rjs 
    232  1.1  rjs #ifdef SCTP_INACTIVE
    233  1.1  rjs #undef SCTP_INACTIVE
    234  1.1  rjs #endif
    235  1.1  rjs #define SCTP_INACTIVE		0x0002	/* SCTP_ADDR_NOT_REACHABLE */
    236  1.1  rjs 
    237  1.1  rjs 
    238  1.1  rjs #ifdef SCTP_UNCONFIRMED
    239  1.1  rjs #undef SCTP_UNCONFIRMED
    240  1.1  rjs #endif
    241  1.1  rjs #define SCTP_UNCONFIRMED	0x0200  /* SCTP_ADDR_UNCONFIRMED */
    242  1.1  rjs 
    243  1.1  rjs #ifdef SCTP_NOHEARTBEAT
    244  1.1  rjs #undef SCTP_NOHEARTBEAT
    245  1.1  rjs #endif
    246  1.1  rjs #define SCTP_NOHEARTBEAT        0x0040 /* SCTP_ADDR_NOHB */
    247  1.1  rjs 
    248  1.1  rjs 
    249  1.1  rjs /* remote error events */
    250  1.1  rjs struct sctp_remote_error {
    251  1.1  rjs 	u_int16_t sre_type;
    252  1.1  rjs 	u_int16_t sre_flags;
    253  1.1  rjs 	u_int32_t sre_length;
    254  1.1  rjs 	u_int16_t sre_error;
    255  1.1  rjs 	sctp_assoc_t sre_assoc_id;
    256  1.1  rjs 	u_int8_t  sre_data[4];
    257  1.2  rjs } __packed;
    258  1.1  rjs 
    259  1.1  rjs /* data send failure event */
    260  1.1  rjs struct sctp_send_failed {
    261  1.1  rjs 	u_int16_t ssf_type;
    262  1.1  rjs 	u_int16_t ssf_flags;
    263  1.1  rjs 	u_int32_t ssf_length;
    264  1.1  rjs 	u_int32_t ssf_error;
    265  1.1  rjs 	struct sctp_sndrcvinfo ssf_info;
    266  1.1  rjs 	sctp_assoc_t ssf_assoc_id;
    267  1.1  rjs 	u_int8_t ssf_data[4];
    268  1.2  rjs } __packed;
    269  1.1  rjs 
    270  1.1  rjs /* flag that indicates state of data */
    271  1.1  rjs #define SCTP_DATA_UNSENT	0x0001	/* inqueue never on wire */
    272  1.1  rjs #define SCTP_DATA_SENT		0x0002	/* on wire at failure */
    273  1.1  rjs 
    274  1.1  rjs /* shutdown event */
    275  1.1  rjs struct sctp_shutdown_event {
    276  1.1  rjs 	u_int16_t	sse_type;
    277  1.1  rjs 	u_int16_t	sse_flags;
    278  1.1  rjs 	u_int32_t	sse_length;
    279  1.1  rjs 	sctp_assoc_t	sse_assoc_id;
    280  1.2  rjs } __packed;
    281  1.1  rjs 
    282  1.1  rjs /* Adaption layer indication stuff */
    283  1.1  rjs struct sctp_adaption_event {
    284  1.1  rjs 	u_int16_t	sai_type;
    285  1.1  rjs 	u_int16_t	sai_flags;
    286  1.1  rjs 	u_int32_t	sai_length;
    287  1.1  rjs 	u_int32_t	sai_adaption_ind;
    288  1.1  rjs 	sctp_assoc_t	sai_assoc_id;
    289  1.2  rjs } __packed;
    290  1.1  rjs 
    291  1.1  rjs struct sctp_setadaption {
    292  1.1  rjs 	u_int32_t	ssb_adaption_ind;
    293  1.2  rjs } __packed;
    294  1.1  rjs 
    295  1.1  rjs /* pdapi indications */
    296  1.1  rjs struct sctp_pdapi_event {
    297  1.1  rjs 	u_int16_t	pdapi_type;
    298  1.1  rjs 	u_int16_t	pdapi_flags;
    299  1.1  rjs 	u_int32_t	pdapi_length;
    300  1.1  rjs 	u_int32_t	pdapi_indication;
    301  1.3  rjs 	u_int32_t	pdapi_stream;
    302  1.3  rjs 	u_int32_t	pdapi_seq;
    303  1.1  rjs 	sctp_assoc_t	pdapi_assoc_id;
    304  1.2  rjs } __packed;
    305  1.1  rjs 
    306  1.1  rjs 
    307  1.1  rjs #define SCTP_PARTIAL_DELIVERY_ABORTED	0x0001
    308  1.1  rjs 
    309  1.3  rjs /* sender dry indications */
    310  1.3  rjs struct sctp_sender_dry_event {
    311  1.3  rjs 	u_int16_t sender_dry_type;
    312  1.3  rjs 	u_int16_t sender_dry_flags;
    313  1.3  rjs 	u_int32_t sender_dry_length;
    314  1.3  rjs 	sctp_assoc_t sender_dry_assoc_id;
    315  1.3  rjs } __packed;
    316  1.3  rjs 
    317  1.1  rjs /* stream reset stuff */
    318  1.1  rjs 
    319  1.1  rjs struct sctp_stream_reset_event {
    320  1.1  rjs 	u_int16_t	strreset_type;
    321  1.1  rjs 	u_int16_t	strreset_flags;
    322  1.1  rjs 	u_int32_t	strreset_length;
    323  1.1  rjs 	sctp_assoc_t    strreset_assoc_id;
    324  1.1  rjs 	u_int16_t       strreset_list[0];
    325  1.2  rjs } __packed;
    326  1.1  rjs 
    327  1.1  rjs /* flags in strreset_flags filed */
    328  1.1  rjs #define SCTP_STRRESET_INBOUND_STR  0x0001
    329  1.1  rjs #define SCTP_STRRESET_OUTBOUND_STR 0x0002
    330  1.1  rjs #define SCTP_STRRESET_ALL_STREAMS  0x0004
    331  1.1  rjs #define SCTP_STRRESET_STREAM_LIST  0x0008
    332  1.1  rjs 
    333  1.1  rjs #define MAX_ASOC_IDS_RET 255
    334  1.1  rjs 
    335  1.1  rjs struct sctp_assoc_ids {
    336  1.1  rjs 	u_int16_t asls_assoc_start;	/* array of index's start at 0 */
    337  1.1  rjs 	u_int8_t asls_numb_present;
    338  1.1  rjs 	u_int8_t asls_more_to_get;
    339  1.1  rjs 	sctp_assoc_t asls_assoc_id[MAX_ASOC_IDS_RET];
    340  1.2  rjs } __packed;
    341  1.1  rjs 
    342  1.1  rjs /* notification types */
    343  1.1  rjs #define SCTP_ASSOC_CHANGE		0x0001
    344  1.1  rjs #define SCTP_PEER_ADDR_CHANGE		0x0002
    345  1.1  rjs #define SCTP_REMOTE_ERROR		0x0003
    346  1.1  rjs #define SCTP_SEND_FAILED		0x0004
    347  1.1  rjs #define SCTP_SHUTDOWN_EVENT		0x0005
    348  1.1  rjs #define SCTP_ADAPTION_INDICATION	0x0006
    349  1.1  rjs #define SCTP_PARTIAL_DELIVERY_EVENT	0x0007
    350  1.3  rjs #define SCTP_STREAM_RESET_EVENT         0x0008 /* XXX */
    351  1.3  rjs #define SCTP_AUTHENTICATION_EVENT	0x0009
    352  1.3  rjs #define SCT_SENDER_DRY_EVENT		0x000a
    353  1.1  rjs 
    354  1.1  rjs struct sctp_tlv {
    355  1.1  rjs 	u_int16_t sn_type;
    356  1.1  rjs 	u_int16_t sn_flags;
    357  1.1  rjs 	u_int32_t sn_length;
    358  1.2  rjs } __packed;
    359  1.1  rjs 
    360  1.1  rjs 
    361  1.1  rjs /* notification event */
    362  1.1  rjs union sctp_notification {
    363  1.1  rjs 	struct sctp_tlv sn_header;
    364  1.1  rjs 	struct sctp_assoc_change sn_assoc_change;
    365  1.1  rjs 	struct sctp_paddr_change sn_paddr_change;
    366  1.1  rjs 	struct sctp_remote_error sn_remote_error;
    367  1.1  rjs 	struct sctp_send_failed	sn_send_failed;
    368  1.1  rjs 	struct sctp_shutdown_event sn_shutdown_event;
    369  1.1  rjs 	struct sctp_adaption_event sn_adaption_event;
    370  1.1  rjs 	struct sctp_pdapi_event sn_pdapi_event;
    371  1.1  rjs 	struct sctp_stream_reset_event sn_strreset_event;
    372  1.2  rjs } __packed;
    373  1.1  rjs 
    374  1.1  rjs /*
    375  1.1  rjs  * socket option structs
    376  1.1  rjs  */
    377  1.1  rjs #define SCTP_ISSUE_HB 0xffffffff	/* get a on-demand hb */
    378  1.1  rjs #define SCTP_NO_HB    0x0		/* turn off hb's */
    379  1.1  rjs 
    380  1.1  rjs struct sctp_paddrparams {
    381  1.1  rjs 	sctp_assoc_t spp_assoc_id;
    382  1.1  rjs 	struct sockaddr_storage spp_address;
    383  1.1  rjs 	u_int32_t spp_hbinterval;
    384  1.1  rjs 	u_int16_t spp_pathmaxrxt;
    385  1.3  rjs 	u_int32_t spp_pathmtu;
    386  1.3  rjs 	u_int32_t spp_flags;
    387  1.3  rjs 	u_int32_t spp_ipv6_flowlabel;
    388  1.3  rjs 	u_int8_t spp_dscp;
    389  1.2  rjs } __packed;
    390  1.1  rjs 
    391  1.3  rjs #define SPP_HB_ENABLE		0x0001
    392  1.3  rjs #define SPP_HB_DISABLE		0x0002
    393  1.3  rjs #define SPP_HB_DEMAND		0x0004
    394  1.3  rjs #define SPP_HB_TIME_IS_ZERO	0x0008
    395  1.3  rjs #define SPP_PMTUD_ENABLE	0x0010
    396  1.3  rjs #define SPP_PMTUD_DISABLE	0x0020
    397  1.3  rjs #define SPP_IPV6_FLOWLABEL	0x0040
    398  1.3  rjs #define SPP_DSCP		0x0080
    399  1.3  rjs 
    400  1.1  rjs struct sctp_paddrinfo {
    401  1.1  rjs 	sctp_assoc_t spinfo_assoc_id;
    402  1.1  rjs 	struct sockaddr_storage spinfo_address;
    403  1.1  rjs 	int32_t spinfo_state;
    404  1.1  rjs 	u_int32_t spinfo_cwnd;
    405  1.1  rjs 	u_int32_t spinfo_srtt;
    406  1.1  rjs 	u_int32_t spinfo_rto;
    407  1.1  rjs 	u_int32_t spinfo_mtu;
    408  1.2  rjs } __packed;
    409  1.1  rjs 
    410  1.1  rjs struct sctp_rtoinfo {
    411  1.1  rjs 	sctp_assoc_t srto_assoc_id;
    412  1.1  rjs 	u_int32_t srto_initial;
    413  1.1  rjs 	u_int32_t srto_max;
    414  1.1  rjs 	u_int32_t srto_min;
    415  1.2  rjs } __packed;
    416  1.1  rjs 
    417  1.1  rjs struct sctp_assocparams {
    418  1.1  rjs 	sctp_assoc_t sasoc_assoc_id;
    419  1.1  rjs 	u_int16_t sasoc_asocmaxrxt;
    420  1.1  rjs         u_int16_t sasoc_number_peer_destinations;
    421  1.1  rjs         u_int32_t sasoc_peer_rwnd;
    422  1.1  rjs         u_int32_t sasoc_local_rwnd;
    423  1.1  rjs         u_int32_t sasoc_cookie_life;
    424  1.2  rjs } __packed;
    425  1.1  rjs 
    426  1.1  rjs struct sctp_setprim {
    427  1.1  rjs 	sctp_assoc_t ssp_assoc_id;
    428  1.1  rjs 	struct sockaddr_storage ssp_addr;
    429  1.2  rjs } __packed;
    430  1.1  rjs 
    431  1.1  rjs struct sctp_setpeerprim {
    432  1.1  rjs 	sctp_assoc_t sspp_assoc_id;
    433  1.1  rjs 	struct sockaddr_storage sspp_addr;
    434  1.2  rjs } __packed;
    435  1.1  rjs 
    436  1.1  rjs struct sctp_getaddresses {
    437  1.1  rjs 	sctp_assoc_t sget_assoc_id;
    438  1.1  rjs 	/* addr is filled in for N * sockaddr_storage */
    439  1.1  rjs 	struct sockaddr addr[1];
    440  1.2  rjs } __packed;
    441  1.1  rjs 
    442  1.1  rjs struct sctp_setstrm_timeout {
    443  1.1  rjs 	sctp_assoc_t ssto_assoc_id;
    444  1.1  rjs 	u_int32_t ssto_timeout;
    445  1.1  rjs 	u_int32_t ssto_streamid_start;
    446  1.1  rjs 	u_int32_t ssto_streamid_end;
    447  1.2  rjs } __packed;
    448  1.1  rjs 
    449  1.1  rjs struct sctp_status {
    450  1.1  rjs 	sctp_assoc_t sstat_assoc_id;
    451  1.1  rjs 	int32_t sstat_state;
    452  1.1  rjs 	u_int32_t sstat_rwnd;
    453  1.1  rjs 	u_int16_t sstat_unackdata;
    454  1.1  rjs 	u_int16_t sstat_penddata;
    455  1.1  rjs         u_int16_t sstat_instrms;
    456  1.1  rjs         u_int16_t sstat_outstrms;
    457  1.1  rjs         u_int32_t sstat_fragmentation_point;
    458  1.1  rjs 	struct sctp_paddrinfo sstat_primary;
    459  1.2  rjs } __packed;
    460  1.1  rjs 
    461  1.1  rjs struct sctp_cwnd_args {
    462  1.1  rjs 	struct sctp_nets *net;		/* network to */
    463  1.1  rjs 	u_int32_t cwnd_new_value;	/* cwnd in k */
    464  1.1  rjs 	u_int32_t inflight;		/* flightsize in k */
    465  1.1  rjs 	int cwnd_augment;		/* increment to it */
    466  1.2  rjs } __packed;
    467  1.1  rjs 
    468  1.1  rjs struct sctp_blk_args {
    469  1.1  rjs 	u_int32_t onmb;			/* in 1k bytes */
    470  1.1  rjs 	u_int32_t onsb;			/* in 1k bytes */
    471  1.1  rjs 	u_int16_t maxmb;		/* in 1k bytes */
    472  1.1  rjs 	u_int16_t maxsb;		/* in 1k bytes */
    473  1.1  rjs 	u_int16_t send_sent_qcnt;	/* chnk cnt */
    474  1.1  rjs 	u_int16_t stream_qcnt;		/* chnk cnt */
    475  1.2  rjs } __packed;
    476  1.1  rjs 
    477  1.1  rjs /*
    478  1.1  rjs  * Max we can reset in one setting, note this is dictated not by the
    479  1.1  rjs  * define but the size of a mbuf cluster so don't change this define
    480  1.1  rjs  * and think you can specify more. You must do multiple resets if you
    481  1.1  rjs  * want to reset more than SCTP_MAX_EXPLICIT_STR_RESET.
    482  1.1  rjs  */
    483  1.1  rjs #define SCTP_MAX_EXPLICT_STR_RESET   1000
    484  1.1  rjs 
    485  1.1  rjs #define SCTP_RESET_LOCAL_RECV  0x0001
    486  1.1  rjs #define SCTP_RESET_LOCAL_SEND  0x0002
    487  1.1  rjs #define SCTP_RESET_BOTH        0x0003
    488  1.1  rjs 
    489  1.1  rjs struct sctp_stream_reset {
    490  1.1  rjs 	sctp_assoc_t strrst_assoc_id;
    491  1.1  rjs 	u_int16_t    strrst_flags;
    492  1.1  rjs 	u_int16_t    strrst_num_streams;	/* 0 == ALL */
    493  1.1  rjs 	u_int16_t    strrst_list[0];		/* list if strrst_num_streams is not 0*/
    494  1.2  rjs } __packed;
    495  1.1  rjs 
    496  1.1  rjs 
    497  1.1  rjs struct sctp_get_nonce_values {
    498  1.1  rjs 	sctp_assoc_t gn_assoc_id;
    499  1.1  rjs 	u_int32_t    gn_peers_tag;
    500  1.1  rjs 	u_int32_t    gn_local_tag;
    501  1.2  rjs } __packed;
    502  1.1  rjs 
    503  1.1  rjs /* Debugging logs */
    504  1.1  rjs struct sctp_str_log{
    505  1.1  rjs 	u_int32_t n_tsn;
    506  1.1  rjs 	u_int32_t e_tsn;
    507  1.1  rjs 	u_int16_t n_sseq;
    508  1.1  rjs 	u_int16_t e_sseq;
    509  1.2  rjs } __packed;
    510  1.1  rjs 
    511  1.1  rjs struct sctp_fr_log {
    512  1.1  rjs 	u_int32_t largest_tsn;
    513  1.1  rjs 	u_int32_t largest_new_tsn;
    514  1.1  rjs 	u_int32_t tsn;
    515  1.2  rjs } __packed;
    516  1.1  rjs 
    517  1.1  rjs struct sctp_fr_map {
    518  1.1  rjs 	u_int32_t base;
    519  1.1  rjs 	u_int32_t cum;
    520  1.1  rjs 	u_int32_t high;
    521  1.2  rjs } __packed;
    522  1.1  rjs 
    523  1.1  rjs struct sctp_rwnd_log {
    524  1.1  rjs 	u_int32_t rwnd;
    525  1.1  rjs 	u_int32_t send_size;
    526  1.1  rjs 	u_int32_t overhead;
    527  1.1  rjs 	u_int32_t new_rwnd;
    528  1.2  rjs } __packed;
    529  1.1  rjs 
    530  1.1  rjs struct sctp_mbcnt_log {
    531  1.1  rjs 	u_int32_t total_queue_size;
    532  1.1  rjs 	u_int32_t size_change;
    533  1.1  rjs 	u_int32_t total_queue_mb_size;
    534  1.1  rjs 	u_int32_t mbcnt_change;
    535  1.2  rjs } __packed;
    536  1.1  rjs 
    537  1.3  rjs struct sctp_cwnd_log {
    538  1.1  rjs 	union {
    539  1.1  rjs 		struct sctp_blk_args blk;
    540  1.1  rjs 		struct sctp_cwnd_args cwnd;
    541  1.1  rjs 		struct sctp_str_log strlog;
    542  1.1  rjs 		struct sctp_fr_log fr;
    543  1.1  rjs 		struct sctp_fr_map map;
    544  1.1  rjs 		struct sctp_rwnd_log rwnd;
    545  1.1  rjs 		struct sctp_mbcnt_log mbcnt;
    546  1.1  rjs 	}x;
    547  1.1  rjs 	u_int8_t from;
    548  1.1  rjs 	u_int8_t event_type;
    549  1.1  rjs 
    550  1.2  rjs } __packed;
    551  1.1  rjs 
    552  1.3  rjs struct sctp_cwnd_log_req {
    553  1.1  rjs 	int num_in_log;     /* Number in log */
    554  1.1  rjs 	int num_ret;        /* Number returned */
    555  1.1  rjs 	int start_at;       /* start at this one */
    556  1.1  rjs 	int end_at;         /* end at this one */
    557  1.1  rjs 	struct sctp_cwnd_log log[0];
    558  1.2  rjs } __packed;
    559  1.1  rjs 
    560  1.3  rjs struct sctp_sendv_spa {
    561  1.3  rjs 	u_int32_t sendv_flags;
    562  1.3  rjs 	struct sctp_sndinfo sendv_sndinfo;
    563  1.3  rjs 	struct sctp_prinfo sendv_prinfo;
    564  1.3  rjs 	struct sctp_authinfo sendv_authinfo;
    565  1.3  rjs } __packed;
    566  1.3  rjs 
    567  1.3  rjs #define SCTP_SEND_SNDINFO_VALID		0x00000001
    568  1.3  rjs #define SCTP_SEND_PRINFO_VALID		0x00000002
    569  1.3  rjs #define SCTP_SEND_AUTHINFO_VALID	0x00000004
    570  1.3  rjs 
    571  1.3  rjs #define SCTP_SENDV_NOINFO	0x0000
    572  1.3  rjs #define SCTP_SENDV_SNDINFO	0x0001
    573  1.3  rjs #define SCTP_SENDV_PRINFO	0x0002
    574  1.3  rjs #define SCTP_SENDV_AUTHINFO	0x0003
    575  1.3  rjs #define SCTP_SENDV_SPA		0x0004
    576  1.3  rjs 
    577  1.3  rjs struct sctp_recvv_rn {
    578  1.3  rjs 	struct sctp_rcvinfo recvv_rcvinfo;
    579  1.3  rjs 	struct sctp_nxtinfo recvv_nxtinfo;
    580  1.3  rjs } __packed;
    581  1.3  rjs 
    582  1.3  rjs #define SCTP_RECVV_NOINFO	0x0000
    583  1.3  rjs #define SCTP_RECVV_RCVINFO	0x0001
    584  1.3  rjs #define SCTP_RECVV_NXTINFO	0x0002
    585  1.3  rjs #define SCTP_RECVV_RN		0x0003
    586  1.1  rjs 
    587  1.4  rjs struct sctp_connectx_addrs {
    588  1.4  rjs 	int cx_num;
    589  1.4  rjs 	int cx_len;
    590  1.4  rjs 	void *cx_addrs;
    591  1.4  rjs } __packed;
    592  1.4  rjs 
    593  1.4  rjs #define SIOCCONNECTX	_IOWR('s', 11, struct sctp_connectx_addrs)
    594  1.4  rjs #define SIOCCONNECTXDEL	_IOWR('s', 12, struct sctp_connectx_addrs)
    595  1.1  rjs 
    596  1.1  rjs /*
    597  1.1  rjs  * API system calls
    598  1.1  rjs  */
    599  1.1  rjs #if !defined(_KERNEL)
    600  1.1  rjs 
    601  1.1  rjs __BEGIN_DECLS
    602  1.1  rjs int sctp_peeloff(int, sctp_assoc_t);
    603  1.1  rjs int	sctp_bindx(int, struct sockaddr *, int, int);
    604  1.3  rjs int     sctp_connectx(int, struct sockaddr *, int, sctp_assoc_t *);
    605  1.1  rjs int	sctp_getpaddrs(int, sctp_assoc_t, struct sockaddr **);
    606  1.1  rjs void	sctp_freepaddrs(struct sockaddr *);
    607  1.1  rjs int	sctp_getladdrs(int, sctp_assoc_t, struct sockaddr **);
    608  1.1  rjs void	sctp_freeladdrs(struct sockaddr *);
    609  1.1  rjs int     sctp_opt_info(int, sctp_assoc_t, int, void *, socklen_t *);
    610  1.1  rjs 
    611  1.1  rjs ssize_t sctp_sendmsg(int, const void *, size_t,
    612  1.1  rjs 	const struct sockaddr *,
    613  1.1  rjs 	socklen_t, u_int32_t, u_int32_t, u_int16_t, u_int32_t, u_int32_t);
    614  1.1  rjs 
    615  1.3  rjs ssize_t sctp_send(int, const void *, size_t,
    616  1.3  rjs 	const struct sctp_sndrcvinfo *, int);
    617  1.1  rjs 
    618  1.1  rjs ssize_t
    619  1.3  rjs sctp_sendx(int, const void *, size_t, struct sockaddr *, int,
    620  1.3  rjs 		struct sctp_sndrcvinfo *, int);
    621  1.1  rjs ssize_t
    622  1.1  rjs sctp_sendmsgx(int sd, const void *, size_t,
    623  1.3  rjs 	      struct sockaddr *, int,
    624  1.3  rjs 	      u_int32_t, u_int32_t, u_int16_t, u_int32_t, u_int32_t);
    625  1.3  rjs ssize_t sctp_sendv(int, const struct iovec *, int, struct sockaddr *, int,
    626  1.3  rjs                       void *, socklen_t, unsigned int, int);
    627  1.1  rjs 
    628  1.1  rjs sctp_assoc_t
    629  1.1  rjs sctp_getassocid(int sd, struct sockaddr *sa);
    630  1.1  rjs 
    631  1.1  rjs ssize_t sctp_recvmsg(int, void *, size_t, struct sockaddr *,
    632  1.1  rjs         socklen_t *, struct sctp_sndrcvinfo *, int *);
    633  1.3  rjs ssize_t sctp_recvv(int, const struct iovec *, int, struct sockaddr *,
    634  1.3  rjs                       socklen_t *, void *, socklen_t *, unsigned int *,
    635  1.3  rjs                       int *);
    636  1.1  rjs 
    637  1.1  rjs __END_DECLS
    638  1.1  rjs 
    639  1.1  rjs #endif /* !_KERNEL */
    640  1.1  rjs #endif /* !__SCTP_UIO_H__ */
    641