4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _NETINET_SCTP_H
27 #define _NETINET_SCTP_H
33 #include <sys/types.h>
36 * This file contains the structure defintions and function prototypes
37 * described in the IETF SCTP socket API document.
40 /* SCTP association ID type. */
41 typedef int sctp_assoc_t
;
42 typedef int32_t sctp_assoc32_t
;
47 #define SCTP_RTOINFO 1
48 #define SCTP_ASSOCINFO 2
49 #define SCTP_INITMSG 3
50 #define SCTP_NODELAY 4
51 #define SCTP_AUTOCLOSE 5
52 #define SCTP_SET_PEER_PRIMARY_ADDR 6
53 #define SCTP_PRIMARY_ADDR 7
54 #define SCTP_ADAPTATION_LAYER 8
55 #define SCTP_DISABLE_FRAGMENTS 9
56 #define SCTP_PEER_ADDR_PARAMS 10
57 #define SCTP_DEFAULT_SEND_PARAM 11
58 #define SCTP_EVENTS 12
59 #define SCTP_I_WANT_MAPPED_V4_ADDR 13
60 #define SCTP_MAXSEG 14
61 #define SCTP_STATUS 15
62 #define SCTP_GET_PEER_ADDR_INFO 16
65 * Private socket options
67 #define SCTP_GET_NLADDRS 17
68 #define SCTP_GET_LADDRS 18
69 #define SCTP_GET_NPADDRS 19
70 #define SCTP_GET_PADDRS 20
71 #define SCTP_ADD_ADDR 21
72 #define SCTP_REM_ADDR 22
75 * Additional SCTP socket options. This socket option is used to enable or
76 * disable PR-SCTP support prior to establishing an association. By default,
77 * PR-SCTP support is disabled.
79 #define SCTP_PRSCTP 23
82 * SCTP socket option used to read per endpoint association statistics.
84 #define SCTP_GET_ASSOC_STATS 24
87 * Ancillary data identifiers
89 #define SCTP_SNDRCV 0x100
90 #define SCTP_INIT 0x101
95 #define SCTP_ASSOC_CHANGE 1
96 #define SCTP_PEER_ADDR_CHANGE 2
97 #define SCTP_REMOTE_ERROR 3
98 #define SCTP_SEND_FAILED 4
99 #define SCTP_SHUTDOWN_EVENT 5
100 #define SCTP_ADAPTATION_INDICATION 6
101 #define SCTP_PARTIAL_DELIVERY_EVENT 7
104 * SCTP Ancillary Data Definitions
108 * sctp_initmsg structure provides information for initializing new SCTP
109 * associations with sendmsg(). The SCTP_INITMSG socket option uses
110 * this same data structure.
112 struct sctp_initmsg
{
113 uint16_t sinit_num_ostreams
;
114 uint16_t sinit_max_instreams
;
115 uint16_t sinit_max_attempts
;
116 uint16_t sinit_max_init_timeo
;
120 * sctp_sndrcvinfo structure specifies SCTP options for sendmsg() and
121 * describes SCTP header information about a received message through
124 struct sctp_sndrcvinfo
{
125 uint16_t sinfo_stream
;
127 uint16_t sinfo_flags
;
129 uint32_t sinfo_context
;
130 uint32_t sinfo_timetolive
;
132 uint32_t sinfo_cumtsn
;
133 sctp_assoc_t sinfo_assoc_id
;
137 #define MSG_UNORDERED 0x01 /* Unordered data */
138 #define MSG_ABORT 0x02 /* Abort the connection */
139 #define MSG_EOF 0x04 /* Shutdown the connection */
142 * Use destination addr passed as parameter, not the association primary one.
144 #define MSG_ADDR_OVER 0x08
146 * This flag when set in sinfo_flags is used alongwith sinfo_timetolive to
147 * implement the "timed reliability" service discussed in RFC 3758.
149 #define MSG_PR_SCTP 0x10
151 * SCTP notification definitions
155 * To receive any ancillary data or notifications, the application can
156 * register it's interest by calling the SCTP_EVENTS setsockopt() with
157 * the sctp_event_subscribe structure.
159 struct sctp_event_subscribe
{
160 uint8_t sctp_data_io_event
;
161 uint8_t sctp_association_event
;
162 uint8_t sctp_address_event
;
163 uint8_t sctp_send_failure_event
;
164 uint8_t sctp_peer_error_event
;
165 uint8_t sctp_shutdown_event
;
166 uint8_t sctp_partial_delivery_event
;
167 uint8_t sctp_adaptation_layer_event
;
170 /* Association events used in sctp_assoc_change structure */
171 #define SCTP_COMM_UP 0
172 #define SCTP_COMM_LOST 1
173 #define SCTP_RESTART 2
174 #define SCTP_SHUTDOWN_COMP 3
175 #define SCTP_CANT_STR_ASSOC 4
178 * Association flags. This flags is filled in the sac_flags for a SCTP_COMM_UP
179 * event if the association supports PR-SCTP.
181 #define SCTP_PRSCTP_CAPABLE 0x01
184 * sctp_assoc_change notification informs the socket that an SCTP association
185 * has either begun or ended. The identifier for a new association is
186 * provided by this notification.
188 struct sctp_assoc_change
{
194 uint16_t sac_outbound_streams
;
195 uint16_t sac_inbound_streams
;
196 sctp_assoc_t sac_assoc_id
;
198 * The assoc ID can be followed by the ABORT chunk if available.
203 * A remote peer may send an Operational Error message to its peer. This
204 * message indicates a variety of error conditions on an association.
205 * The entire ERROR chunk as it appears on the wire is included in a
206 * SCTP_REMOTE_ERROR event. Refer to the SCTP specification RFC2960
207 * and any extensions for a list of possible error formats.
209 struct sctp_remote_error
{
214 sctp_assoc_t sre_assoc_id
;
216 * The assoc ID is followed by the actual error chunk.
223 * In order to keep the offsets and size of the structure having a
224 * struct sockaddr_storage field the same between a 32-bit application
225 * and a 64-bit amd64 kernel, we use a #pragma pack(4) for those
228 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
232 /* Address change event state */
233 #define SCTP_ADDR_AVAILABLE 0
234 #define SCTP_ADDR_UNREACHABLE 1
235 #define SCTP_ADDR_REMOVED 2
236 #define SCTP_ADDR_ADDED 3
237 #define SCTP_ADDR_MADE_PRIM 4
240 * When a destination address on a multi-homed peer encounters a change,
241 * an interface details event, sctp_paddr_change, is sent to the socket.
243 struct sctp_paddr_change
{
247 struct sockaddr_storage spc_aaddr
;
250 sctp_assoc_t spc_assoc_id
;
253 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
257 /* flags used in sctp_send_failed notification. */
258 #define SCTP_DATA_UNSENT 1
259 #define SCTP_DATA_SENT 2
262 * If SCTP cannot deliver a message it may return the message as a
263 * notification using the following structure.
265 struct sctp_send_failed
{
270 struct sctp_sndrcvinfo ssf_info
;
271 sctp_assoc_t ssf_assoc_id
;
273 * The assoc ID is followed by the failed message.
278 * When a peer sends a SHUTDOWN, SCTP delivers the sctp_shutdown_event
279 * notification to inform the socket user that it should cease sending data.
281 struct sctp_shutdown_event
{
285 sctp_assoc_t sse_assoc_id
;
289 * When a peer sends an Adaptation Layer Indication parameter, SCTP
290 * delivers the sctp_adaptation_event notification to inform the socket
291 * user the peer's requested adaptation layer.
293 struct sctp_adaptation_event
{
297 uint32_t sai_adaptation_ind
;
298 sctp_assoc_t sai_assoc_id
;
301 /* Possible values in pdapi_indication for sctp_pdapi_event notification. */
302 #define SCTP_PARTIAL_DELIVERY_ABORTED 1
305 * When a receiver is engaged in a partial delivery of a message the
306 * sctp_pdapi_event notification is used to indicate various events.
308 struct sctp_pdapi_event
{
310 uint16_t pdapi_flags
;
311 uint32_t pdapi_length
;
312 uint32_t pdapi_indication
;
313 sctp_assoc_t pdapi_assoc_id
;
317 * The sctp_notification structure is defined as the union of all
318 * notification types defined above.
320 union sctp_notification
{
322 uint16_t sn_type
; /* Notification type. */
326 struct sctp_assoc_change sn_assoc_change
;
327 struct sctp_paddr_change sn_paddr_change
;
328 struct sctp_remote_error sn_remote_error
;
329 struct sctp_send_failed sn_send_failed
;
330 struct sctp_shutdown_event sn_shutdown_event
;
331 struct sctp_adaptation_event sn_adaptation_event
;
332 struct sctp_pdapi_event sn_pdapi_event
;
336 * sctp_opt_info() option definitions
340 * The protocol parameters used to initialize and bound retransmission
341 * timeout (RTO) are tunable. See RFC2960 for more information on
342 * how these parameters are used in RTO calculation.
344 * The sctp_rtoinfo structure is used to access and modify these
347 struct sctp_rtoinfo
{
348 sctp_assoc_t srto_assoc_id
;
349 uint32_t srto_initial
;
355 * The sctp_assocparams option is used to both examine and set various
356 * association and endpoint parameters. See RFC2960 for more information
357 * on how this parameter is used. The peer address parameter is ignored
358 * for one-to-one style socket.
360 struct sctp_assocparams
{
361 sctp_assoc_t sasoc_assoc_id
;
362 uint16_t sasoc_asocmaxrxt
;
363 uint16_t sasoc_number_peer_destinations
;
364 uint32_t sasoc_peer_rwnd
;
365 uint32_t sasoc_local_rwnd
;
366 uint32_t sasoc_cookie_life
;
369 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
373 /* sctp_paddrinfo reachability state. */
374 #define SCTP_INACTIVE 1
375 #define SCTP_ACTIVE 2
378 * Applications can retrieve information about a specific peer address
379 * of an association, including its reachability state, congestion
380 * window, and retransmission timer values. This information is
381 * read-only. The sctp_paddrinfo structure is used to access this
384 struct sctp_paddrinfo
{
385 sctp_assoc_t spinfo_assoc_id
;
386 struct sockaddr_storage spinfo_address
;
387 int32_t spinfo_state
;
388 uint32_t spinfo_cwnd
;
389 uint32_t spinfo_srtt
;
395 * Applications can enable or disable heartbeats for any peer address of
396 * an association, modify an address's heartbeat interval, force a
397 * heartbeat to be sent immediately, and adjust the address's maximum
398 * number of retransmissions sent before an address is considered
399 * unreachable. The sctp_paddrparams structure is used to access and modify
400 * an address' parameters.
402 struct sctp_paddrparams
{
403 sctp_assoc_t spp_assoc_id
;
404 struct sockaddr_storage spp_address
;
405 uint32_t spp_hbinterval
;
406 uint16_t spp_pathmaxrxt
;
410 * A socket user can request that the peer mark the enclosed address as the
411 * association's primary. The enclosed address must be one of the
412 * association's locally bound addresses. The sctp_setpeerprim structure is
413 * used to make such request.
415 struct sctp_setpeerprim
{
416 sctp_assoc_t sspp_assoc_id
;
417 struct sockaddr_storage sspp_addr
;
421 * A socket user can request that the local SCTP stack use the enclosed peer
422 * address as the association primary. The enclosed address must be one of
423 * the association peer's addresses. The sctp_setprim structure is used to
426 struct sctp_setprim
{
427 sctp_assoc_t ssp_assoc_id
;
428 struct sockaddr_storage ssp_addr
;
431 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
435 /* SCTP association states */
436 #define SCTPS_IDLE -5 /* idle (opened, but not bound) */
437 #define SCTPS_BOUND -4 /* bound, ready to connect or accept */
438 #define SCTPS_LISTEN -3 /* listening for connection */
439 #define SCTPS_COOKIE_WAIT -2
440 #define SCTPS_COOKIE_ECHOED -1
441 /* states < SCTPS_ESTABLISHED are those where connections not established */
442 #define SCTPS_ESTABLISHED 0 /* established */
443 #define SCTPS_SHUTDOWN_PENDING 1
444 #define SCTPS_SHUTDOWN_SENT 2
445 #define SCTPS_SHUTDOWN_RECEIVED 3
446 #define SCTPS_SHUTDOWN_ACK_SENT 4
449 * Applications can retrieve current status information about an
450 * association, including association state, peer receiver window size,
451 * number of unacked data chunks, and number of data chunks pending
452 * receipt. This information is read-only. The sctp_status structure is
453 * used to access this information:
456 sctp_assoc_t sstat_assoc_id
;
459 uint16_t sstat_unackdata
;
460 uint16_t sstat_penddata
;
461 uint16_t sstat_instrms
;
462 uint16_t sstat_outstrms
;
463 uint32_t sstat_fragmentation_point
;
464 struct sctp_paddrinfo sstat_primary
;
467 /* Possible values for sstat_state */
468 #define SCTP_CLOSED SCTPS_IDLE
469 #define SCTP_BOUND SCTPS_BOUND
470 #define SCTP_LISTEN SCTPS_LISTEN
471 #define SCTP_COOKIE_WAIT SCTPS_COOKIE_WAIT
472 #define SCTP_COOKIE_ECHOED SCTPS_COOKIE_ECHOED
473 #define SCTP_ESTABLISHED SCTPS_ESTABLISHED
474 #define SCTP_SHUTDOWN_PENDING SCTPS_SHUTDOWN_PENDING
475 #define SCTP_SHUTDOWN_SENT SCTPS_SHUTDOWN_SENT
476 #define SCTP_SHUTDOWN_RECEIVED SCTPS_SHUTDOWN_RECEIVED
477 #define SCTP_SHUTDOWN_ACK_SENT SCTPS_SHUTDOWN_ACK_SENT
480 * A socket user can request that the local endpoint set the specified
481 * Adaptation Layer Indication parameter for all future INIT and INIT-ACK
482 * exchanges. The sctp_setadaptation structure is used to make such request.
484 struct sctp_setadaptation
{
485 uint32_t ssb_adaptation_ind
;
489 * A socket user request reads local per endpoint association stats.
490 * All stats are counts except sas_maxrto, which is the max value
491 * since the last user request for stats on this endpoint.
493 typedef struct sctp_assoc_stats
{
494 uint64_t sas_rtxchunks
; /* Retransmitted Chunks */
495 uint64_t sas_gapcnt
; /* Gap Acknowledgements Received */
496 uint64_t sas_maxrto
; /* Maximum Observed RTO this period */
497 uint64_t sas_outseqtsns
; /* TSN received > next expected */
498 uint64_t sas_osacks
; /* SACKs sent */
499 uint64_t sas_isacks
; /* SACKs received */
500 uint64_t sas_octrlchunks
; /* Control chunks sent - no dups */
501 uint64_t sas_ictrlchunks
; /* Control chunks received - no dups */
502 uint64_t sas_oodchunks
; /* Ordered data chunks sent */
503 uint64_t sas_iodchunks
; /* Ordered data chunks received */
504 uint64_t sas_ouodchunks
; /* Unordered data chunks sent */
505 uint64_t sas_iuodchunks
; /* Unordered data chunks received */
506 uint64_t sas_idupchunks
; /* Dups received (ordered+unordered) */
507 } sctp_assoc_stats_t
;
510 * Private ioctl option structure
513 sctp_assoc_t sopt_aid
;
519 #if defined(_SYSCALL32)
521 sctp_assoc32_t sopt_aid
;
526 #endif /* _SYSCALL32 */
528 /* Forward Cumulative TSN chunk entry. */
529 typedef struct ftsn_entry_s
{
535 * New socket functions for SCTP
538 /* sctp_bindx() operations. */
539 #define SCTP_BINDX_ADD_ADDR 1
540 #define SCTP_BINDX_REM_ADDR 2
542 #if !defined(_KERNEL) || defined(_BOOT)
544 extern int sctp_bindx(int, void *, int, int);
545 extern void sctp_freeladdrs(void *);
546 extern void sctp_freepaddrs(void *);
547 extern int sctp_getladdrs(int, sctp_assoc_t
, void **);
548 extern int sctp_getpaddrs(int, sctp_assoc_t
, void **);
549 extern int sctp_opt_info(int, sctp_assoc_t
, int, void *, socklen_t
*);
550 extern int sctp_peeloff(int, sctp_assoc_t
);
551 extern ssize_t
sctp_recvmsg(int, void *, size_t, struct sockaddr
*,
552 socklen_t
*, struct sctp_sndrcvinfo
*, int *msg_flags
);
553 extern ssize_t
sctp_send(int, const void *, size_t,
554 const struct sctp_sndrcvinfo
*, int);
555 extern ssize_t
sctp_sendmsg(int, const void *, size_t, const struct sockaddr
*,
556 socklen_t
, uint32_t, uint32_t, uint16_t, uint32_t, uint32_t);
558 extern int sctp_bindx();
559 extern void sctp_freeladdrs();
560 extern void sctp_freepaddrs();
561 extern int sctp_getladdrs();
562 extern int sctp_getpaddrs();
563 extern int sctp_opt_info();
564 extern int sctp_peeloff();
565 extern ssize_t
sctp_recvmsg();
566 extern ssize_t
sctp_send();
567 extern ssize_t
sctp_sendmsg();
568 #endif /* __STDC__ */
569 #endif /* !defined(_KERNEL) || defined(_BOOT) */
573 * SCTP protocol related elements.
576 /* All SCTP chunks and parameters are 32-bit aligned */
580 * SCTP association optional parameter handling. The top two bits
581 * of the parameter type define how this and further parameters in
582 * the received chunk should be handled.
584 #define SCTP_UNREC_PARAM_MASK 0xc000
585 /* Continue processing parameters after an unrecognized optional param? */
586 #define SCTP_CONT_PROC_PARAMS 0x8000
587 /* Report this unreconized optional parameter or silently ignore it? */
588 #define SCTP_REPORT_THIS_PARAM 0x4000
591 * Data chunk bit manipulations
593 #define SCTP_DATA_EBIT 0x01
594 #define SCTP_TBIT 0x01
595 #define SCTP_DATA_BBIT 0x02
596 #define SCTP_DATA_UBIT 0x04
598 #define SCTP_DATA_GET_BBIT(sdc) ((sdc)->sdh_flags & SCTP_DATA_BBIT)
599 #define SCTP_GET_TBIT(cp) ((cp)->sch_flags & SCTP_TBIT)
600 #define SCTP_DATA_GET_EBIT(sdc) ((sdc)->sdh_flags & SCTP_DATA_EBIT)
601 #define SCTP_DATA_GET_UBIT(sdc) ((sdc)->sdh_flags & SCTP_DATA_UBIT)
603 #define SCTP_DATA_SET_BBIT(sdc) ((sdc)->sdh_flags |= SCTP_DATA_BBIT)
604 #define SCTP_SET_TBIT(cp) ((cp)->sch_flags |= SCTP_TBIT)
605 #define SCTP_DATA_SET_EBIT(sdc) ((sdc)->sdh_flags |= SCTP_DATA_EBIT)
606 #define SCTP_DATA_SET_UBIT(sdc) ((sdc)->sdh_flags |= SCTP_DATA_UBIT)
608 /* SCTP common header */
609 typedef struct sctp_hdr
{
632 CHUNK_SHUTDOWN_COMPLETE
,
633 CHUNK_ASCONF_ACK
= 128,
634 CHUNK_FORWARD_TSN
= 192,
638 /* Common chunk header */
639 typedef struct sctp_chunk_hdr
{
645 /* INIT chunk data definition */
646 typedef struct sctp_init_chunk
{
647 uint32_t sic_inittag
;
651 uint32_t sic_inittsn
;
654 /* SCTP DATA chunk */
655 typedef struct sctp_data_chunk
{
659 uint32_t sdc_payload_id
;
662 /* sctp_data_hdr includes the SCTP chunk hdr and the DATA chunk */
663 typedef struct sctp_data_hdr
{
664 sctp_chunk_hdr_t sdh_chdr
;
665 sctp_data_chunk_t sdh_data
;
666 #define sdh_id sdh_chdr.sch_id
667 #define sdh_flags sdh_chdr.sch_flags
668 #define sdh_len sdh_chdr.sch_len
669 #define sdh_tsn sdh_data.sdc_tsn
670 #define sdh_sid sdh_data.sdc_sid
671 #define sdh_ssn sdh_data.sdc_ssn
672 #define sdh_payload_id sdh_data.sdc_payload_id
675 typedef struct sctp_sack_chunk
{
678 uint16_t ssc_numfrags
;
679 uint16_t ssc_numdups
;
682 typedef struct sctp_sack_frag
{
687 /* Parameter types */
688 #define PARM_UNKNOWN 0
689 #define PARM_HBINFO 1
692 #define PARM_COOKIE 7
693 #define PARM_UNRECOGNIZED 8
694 #define PARM_COOKIE_PRESERVE 9
695 #define PARM_ADDR_HOST_NAME 11
696 #define PARM_SUPP_ADDRS 12
697 #define PARM_ECN 0x8000
698 #define PARM_ECN_CAPABLE PARM_ECN
699 #define PARM_FORWARD_TSN 0xc000
700 #define PARM_ADD_IP 0xc001
701 #define PARM_DEL_IP 0xc002
702 #define PARM_ERROR_IND 0xc003
703 #define PARM_ASCONF_ERROR PARM_ERROR_IND
704 #define PARM_SET_PRIMARY 0xc004
705 #define PARM_PRIMARY_ADDR PARM_SET_PRIMARY
706 #define PARM_SUCCESS 0xc005
707 #define PARM_ASCONF_SUCCESS PARM_SUCCESS
708 #define PARM_ADAPT_LAYER_IND 0xc006
711 /* Lengths from SCTP spec */
712 #define PARM_ADDR4_LEN 8
713 #define PARM_ADDR6_LEN 20
715 /* Parameter header */
716 typedef struct sctp_parm_hdr
{
722 * The following extend sctp_parm_hdr_t
723 * with cause-specfic content used to fill
724 * CAUSE blocks in ABORT or ERROR chunks.
725 * The overall size of the CAUSE block will
726 * be sizeof (sctp_parm_hdr_t) plus the size
727 * of the extended cause structure,
731 * Invalid stream-identifier extended cause.
734 typedef struct sctp_bsc
{
736 uint16_t bsc_pad
; /* RESV = 0 */
740 * Missing parameter extended cause, currently
741 * only one missing parameter is supported.
742 * SCTP_ERR_MISSING_PARM
744 typedef struct sctp_mpc
{
751 #define SCTP_ERR_UNKNOWN 0
752 #define SCTP_ERR_BAD_SID 1
753 #define SCTP_ERR_MISSING_PARM 2
754 #define SCTP_ERR_STALE_COOKIE 3
755 #define SCTP_ERR_NO_RESOURCES 4
756 #define SCTP_ERR_BAD_ADDR 5
757 #define SCTP_ERR_UNREC_CHUNK 6
758 #define SCTP_ERR_BAD_MANDPARM 7
759 #define SCTP_ERR_UNREC_PARM 8
760 #define SCTP_ERR_NO_USR_DATA 9
761 #define SCTP_ERR_COOKIE_SHUT 10
762 #define SCTP_ERR_RESTART_NEW_ADDRS 11
763 #define SCTP_ERR_USER_ABORT 12
764 #define SCTP_ERR_DELETE_LASTADDR 256
765 #define SCTP_ERR_RESOURCE_SHORTAGE 257
766 #define SCTP_ERR_DELETE_SRCADDR 258
767 #define SCTP_ERR_AUTH_ERR 260
773 /* Extended Chunk Types */
774 #define CHUNK_ASCONF 0xc1
775 #define CHUNK_ASCONF_ACK 0x80
777 /* Extension Error Causes */
778 #define SCTP_ERR_DEL_LAST_ADDR 0x0100
779 #define SCTP_ERR_RES_SHORTAGE 0x0101
780 #define SCTP_ERR_DEL_SRC_ADDR 0x0102
781 #define SCTP_ERR_ILLEGAL_ACK 0x0103
782 #define SCTP_ERR_UNAUTHORIZED 0x0104
784 typedef struct sctp_addip4
{
785 sctp_parm_hdr_t sad4_addip_ph
;
786 uint32_t asconf_req_cid
;
787 sctp_parm_hdr_t sad4_addr4_ph
;
791 typedef struct sctp_addip6
{
792 sctp_parm_hdr_t sad6_addip_ph
;
793 uint32_t asconf_req_cid
;
794 sctp_parm_hdr_t sad6_addr6_ph
;
795 in6_addr_t sad6_addr
;
802 #endif /* _NETINET_SCTP_H */