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 | |
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 ; |
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 | |