1/* $KAME: sctp_uio.h,v 1.11 2005/03/06 16:04:18 itojun Exp $ */ 2/* $NetBSD: sctp_uio.h,v 1.4 2018/07/31 13:36:31 rjs 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 42typedef 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 */ 49struct 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 73struct 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 */ 82struct 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 89struct 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 101struct 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 109struct 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 120struct 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 128struct sctp_prinfo { 129 u_int16_t pr_policy; 130 u_int32_t pr_value; 131}; 132 133struct sctp_authinfo { 134 u_int16_t auth_keynumber; 135} __packed; 136 137struct 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 */ 156struct 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 166struct 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 180struct 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 */ 206struct 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 */ 250struct 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 */ 260struct 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 */ 275struct 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 */ 283struct 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 291struct sctp_setadaption { 292 u_int32_t ssb_adaption_ind; 293} __packed; 294 295/* pdapi indications */ 296struct 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 */ 310struct 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 319struct 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 335struct 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 354struct 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 */ 362union 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 380struct 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 400struct 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 410struct 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 417struct 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 426struct sctp_setprim { 427 sctp_assoc_t ssp_assoc_id; 428 struct sockaddr_storage ssp_addr; 429} __packed; 430 431struct sctp_setpeerprim { 432 sctp_assoc_t sspp_assoc_id; 433 struct sockaddr_storage sspp_addr; 434} __packed; 435 436struct 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 442struct 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 449struct 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 461struct 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 468struct 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 489struct 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 497struct 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 */ 504struct 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 511struct sctp_fr_log { 512 u_int32_t largest_tsn; 513 u_int32_t largest_new_tsn; 514 u_int32_t tsn; 515} __packed; 516 517struct sctp_fr_map { 518 u_int32_t base; 519 u_int32_t cum; 520 u_int32_t high; 521} __packed; 522 523struct 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 530struct 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 537struct 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 552struct 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 560struct 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 577struct 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 587struct 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 602int sctp_peeloff(int, sctp_assoc_t); 603int sctp_bindx(int, struct sockaddr *, int, int); 604int sctp_connectx(int, struct sockaddr *, int, sctp_assoc_t *); 605int sctp_getpaddrs(int, sctp_assoc_t, struct sockaddr **); 606void sctp_freepaddrs(struct sockaddr *); 607int sctp_getladdrs(int, sctp_assoc_t, struct sockaddr **); 608void sctp_freeladdrs(struct sockaddr *); 609int sctp_opt_info(int, sctp_assoc_t, int, void *, socklen_t *); 610 611ssize_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 615ssize_t sctp_send(int, const void *, size_t, 616 const struct sctp_sndrcvinfo *, int); 617 618ssize_t 619sctp_sendx(int, const void *, size_t, struct sockaddr *, int, 620 struct sctp_sndrcvinfo *, int); 621ssize_t 622sctp_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); 625ssize_t sctp_sendv(int, const struct iovec *, int, struct sockaddr *, int, 626 void *, socklen_t, unsigned int, int); 627 628sctp_assoc_t 629sctp_getassocid(int sd, struct sockaddr *sa); 630 631ssize_t sctp_recvmsg(int, void *, size_t, struct sockaddr *, 632 socklen_t *, struct sctp_sndrcvinfo *, int *); 633ssize_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