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