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