1a89a6767416760e852d85b2db374f6eebc4e93d7tuexen/*-
2829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2009-2010 Brad Penoff
3829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2009-2010 Humaira Kamal
4ba857dde2243e04659483722fba8d1c4174b9f2atuexen * Copyright (c) 2011-2012 Irene Ruengeler
5ba857dde2243e04659483722fba8d1c4174b9f2atuexen * Copyright (c) 2011-2012 Michael Tuexen
6a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *
7a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * All rights reserved.
8a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *
9a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * Redistribution and use in source and binary forms, with or without
10a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * modification, are permitted provided that the following conditions
11a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * are met:
12a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * 1. Redistributions of source code must retain the above copyright
13a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *    notice, this list of conditions and the following disclaimer.
14a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * 2. Redistributions in binary form must reproduce the above copyright
15a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *    notice, this list of conditions and the following disclaimer in the
16a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *    documentation and/or other materials provided with the distribution.
17a89a6767416760e852d85b2db374f6eebc4e93d7tuexen *
18a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28a89a6767416760e852d85b2db374f6eebc4e93d7tuexen * SUCH DAMAGE.
29a89a6767416760e852d85b2db374f6eebc4e93d7tuexen */
30a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
31a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#ifndef __USRSCTP_H__
32a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#define __USRSCTP_H__
33a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
3464b1fe24847c778a491d59be651e79e2ba7c3ef3tuexen#ifdef  __cplusplus
3564b1fe24847c778a491d59be651e79e2ba7c3ef3tuexenextern "C" {
3664b1fe24847c778a491d59be651e79e2ba7c3ef3tuexen#endif
37a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
3839787b51de19ae4f2a58466971e9fb3363aa4691t#include <errno.h>
39a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#include <sys/types.h>
409d961e5c3872d113c13a30d9f7b5af3c09d82b3et#ifdef _WIN32
416360d2ea88e442fccfc07b485e0e4d806a09c76bt#ifdef _MSC_VER
426360d2ea88e442fccfc07b485e0e4d806a09c76bt#pragma warning(disable: 4200)
436360d2ea88e442fccfc07b485e0e4d806a09c76bt#endif
44a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#include <winsock2.h>
45a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#include <ws2tcpip.h>
469d961e5c3872d113c13a30d9f7b5af3c09d82b3et#else
479d961e5c3872d113c13a30d9f7b5af3c09d82b3et#include <sys/socket.h>
489d961e5c3872d113c13a30d9f7b5af3c09d82b3et#include <netinet/in.h>
497e830fdac5548eb9e0872307995c038baa218313tuexen#endif
50a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
519d961e5c3872d113c13a30d9f7b5af3c09d82b3et#ifndef MSG_NOTIFICATION
529d961e5c3872d113c13a30d9f7b5af3c09d82b3et/* This definition MUST be in sync with usrsctplib/user_socketvar.h */
539d961e5c3872d113c13a30d9f7b5af3c09d82b3et#define MSG_NOTIFICATION 0x2000
54a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#endif
55a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
569d961e5c3872d113c13a30d9f7b5af3c09d82b3et#ifndef IPPROTO_SCTP
579d961e5c3872d113c13a30d9f7b5af3c09d82b3et/* This is the IANA assigned protocol number of SCTP. */
589d961e5c3872d113c13a30d9f7b5af3c09d82b3et#define IPPROTO_SCTP 132
599d961e5c3872d113c13a30d9f7b5af3c09d82b3et#endif
609d961e5c3872d113c13a30d9f7b5af3c09d82b3et
619d961e5c3872d113c13a30d9f7b5af3c09d82b3et#ifdef _WIN32
629d961e5c3872d113c13a30d9f7b5af3c09d82b3et#if defined(_MSC_VER) && _MSC_VER >= 1600
639d961e5c3872d113c13a30d9f7b5af3c09d82b3et#include <stdint.h>
649d961e5c3872d113c13a30d9f7b5af3c09d82b3et#elif defined(SCTP_STDINT_INCLUDE)
659d961e5c3872d113c13a30d9f7b5af3c09d82b3et#include SCTP_STDINT_INCLUDE
669d961e5c3872d113c13a30d9f7b5af3c09d82b3et#else
67a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define uint8_t   unsigned __int8
68a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define uint16_t  unsigned __int16
69a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define uint32_t  unsigned __int32
70d06ed84a7f9442e23a4203392f5a39132a38bedbtuexen#define int16_t   __int16
71a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define int32_t   __int32
729d961e5c3872d113c13a30d9f7b5af3c09d82b3et#endif
739d961e5c3872d113c13a30d9f7b5af3c09d82b3et
74a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define ssize_t   __int64
75a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define MSG_EOR   0x8
76a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#ifndef EWOULDBLOCK
77a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define EWOULDBLOCK  WSAEWOULDBLOCK
78a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#endif
79b9f8eb2c31816c49332b0c41296baa787bfc6067t#ifndef EINPROGRESS
80b9f8eb2c31816c49332b0c41296baa787bfc6067t#define EINPROGRESS  WSAEINPROGRESS
81b9f8eb2c31816c49332b0c41296baa787bfc6067t#endif
82a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SHUT_RD    1
83a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SHUT_WR    2
84a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SHUT_RDWR  3
85a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#endif
86a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
87a25381bbb4e92ac98a657a15d83a6531c03937b5tuexentypedef uint32_t sctp_assoc_t;
88a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
89de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen#define AF_CONN 123
90b8c1a51578940ce82d1c8dbe4aafcf3828d8d06at/* The definition of struct sockaddr_conn MUST be in
91b8c1a51578940ce82d1c8dbe4aafcf3828d8d06at * tune with other sockaddr_* structures.
92b8c1a51578940ce82d1c8dbe4aafcf3828d8d06at */
93b8c1a51578940ce82d1c8dbe4aafcf3828d8d06at#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__)
94de2407b8522030fd0cbc1eb4e71847d6e981d49atuexenstruct sockaddr_conn {
95de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen	uint8_t sconn_len;
969375131f54244940f5aabe1c0c509a5a02ec14actuexen	uint8_t sconn_family;
97de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen	uint16_t sconn_port;
98de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen	void *sconn_addr;
99de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen};
100fef7059ee474735150a8bed0548676bfff57d5f8tuexen#else
101fef7059ee474735150a8bed0548676bfff57d5f8tuexenstruct sockaddr_conn {
102fef7059ee474735150a8bed0548676bfff57d5f8tuexen	uint16_t sconn_family;
103fef7059ee474735150a8bed0548676bfff57d5f8tuexen	uint16_t sconn_port;
104fef7059ee474735150a8bed0548676bfff57d5f8tuexen	void *sconn_addr;
105fef7059ee474735150a8bed0548676bfff57d5f8tuexen};
106fef7059ee474735150a8bed0548676bfff57d5f8tuexen#endif
107de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen
108a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenunion sctp_sockstore {
109de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen#if defined(INET)
110a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_in sin;
111a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#endif
112de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen#if defined(INET6)
113a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_in6 sin6;
114a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#endif
115de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen	struct sockaddr_conn sconn;
116a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr sa;
117a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
118a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
119a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_FUTURE_ASSOC  0
120a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CURRENT_ASSOC 1
121a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ALL_ASSOC     2
122a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
123a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/***  Structures and definitions to use the socket API  ***/
124a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
125a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ALIGN_RESV_PAD 92
126a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ALIGN_RESV_PAD_SHORT 76
127a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
128a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_rcvinfo {
129a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t rcv_sid;
130a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t rcv_ssn;
131a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t rcv_flags;
132a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t rcv_ppid;
133a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t rcv_tsn;
134a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t rcv_cumtsn;
135a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t rcv_context;
136a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t rcv_assoc_id;
137a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
138a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
139a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_nxtinfo {
140a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t nxt_sid;
141a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t nxt_flags;
142a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t nxt_ppid;
143a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t nxt_length;
144a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t nxt_assoc_id;
145a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
146a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
147a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NO_NEXT_MSG           0x0000
148a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NEXT_MSG_AVAIL        0x0001
149a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NEXT_MSG_ISCOMPLETE   0x0002
150a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NEXT_MSG_IS_UNORDERED 0x0004
151a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NEXT_MSG_IS_NOTIFICATION 0x0008
152a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
153a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_recvv_rn {
154a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_rcvinfo recvv_rcvinfo;
155a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_nxtinfo recvv_nxtinfo;
156a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
157a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
158a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVV_NOINFO  0
159a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVV_RCVINFO 1
160a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVV_NXTINFO 2
161a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVV_RN      3
162a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
163a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDV_NOINFO   0
164a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDV_SNDINFO  1
165a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDV_PRINFO   2
166a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDV_AUTHINFO 3
167a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDV_SPA      4
168a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
169a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SEND_SNDINFO_VALID  0x00000001
170a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SEND_PRINFO_VALID   0x00000002
171a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SEND_AUTHINFO_VALID 0x00000004
172a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
173a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_snd_all_completes {
174a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sall_stream;
175a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sall_flags;
176a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sall_ppid;
177a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sall_context;
178a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sall_num_sent;
179a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sall_num_failed;
180a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
181a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
182a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_sndinfo {
183a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t snd_sid;
184a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t snd_flags;
185a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t snd_ppid;
186a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t snd_context;
187a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t snd_assoc_id;
188a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
189a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
190a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_prinfo {
191a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t pr_policy;
192a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pr_value;
193a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
194a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
195a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authinfo {
196a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t auth_keynumber;
197a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
198a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
199a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_sendv_spa {
200a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sendv_flags;
201a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_sndinfo sendv_sndinfo;
202a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_prinfo sendv_prinfo;
203a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_authinfo sendv_authinfo;
204a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
205a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
206a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_udpencaps {
207a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage sue_address;
208a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sue_assoc_id;
209a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sue_port;
210a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
211a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
212a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/********  Notifications  **************/
213a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
214a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* notification types */
215a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASSOC_CHANGE                 0x0001
216a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PEER_ADDR_CHANGE             0x0002
217a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_REMOTE_ERROR                 0x0003
218a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SEND_FAILED                  0x0004
219a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_EVENT               0x0005
220a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADAPTATION_INDICATION        0x0006
221a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PARTIAL_DELIVERY_EVENT       0x0007
222a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTHENTICATION_EVENT         0x0008
223a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_EVENT           0x0009
224a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDER_DRY_EVENT             0x000a
225a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NOTIFICATIONS_STOPPED_EVENT  0x000b
226a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASSOC_RESET_EVENT            0x000c
227a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_CHANGE_EVENT          0x000d
228ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_SEND_FAILED_EVENT            0x000e
229a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
230a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* notification event structures */
231a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
232a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
233a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* association change event */
234a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_assoc_change {
235a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_type;
236a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_flags;
237a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sac_length;
238a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_state;
239a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_error;
240a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_outbound_streams;
241a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sac_inbound_streams;
242a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sac_assoc_id;
243a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sac_info[]; /* not available yet */
244a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
245a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
246a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* sac_state values */
247a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COMM_UP        0x0001
248a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COMM_LOST      0x0002
249a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RESTART        0x0003
250a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_COMP  0x0004
251a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CANT_STR_ASSOC 0x0005
252a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
253ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler/* sac_info values */
254ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_PR        0x01
255ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_AUTH      0x02
256ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_ASCONF    0x03
257ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_MULTIBUF  0x04
258ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_RE_CONFIG 0x05
259ce48ba0b4e00c12138426873ad6b4134be0aee87ruengeler#define SCTP_ASSOC_SUPPORTS_MAX       0x05
260a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
261a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Address event */
262a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_paddr_change {
263a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t spc_type;
264a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t spc_flags;
265a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spc_length;
266a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage spc_aaddr;
267a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spc_state;
268a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spc_error;
269a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t spc_assoc_id;
270a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t spc_padding[4];
271a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
272a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
273a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* paddr state values */
274a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_AVAILABLE   0x0001
275a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_UNREACHABLE 0x0002
276a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_REMOVED     0x0003
277a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_ADDED       0x0004
278a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_MADE_PRIM   0x0005
279a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_CONFIRMED   0x0006
280a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
281a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* remote error events */
282a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_remote_error {
283a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sre_type;
284a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sre_flags;
285a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sre_length;
286a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sre_error;
287a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sre_assoc_id;
288a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sre_data[4];
289a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
290a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
291a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* shutdown event */
292a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_shutdown_event {
293a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sse_type;
294a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sse_flags;
295a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sse_length;
296a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sse_assoc_id;
297a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
298a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
299a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Adaptation layer indication */
300a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_adaptation_event {
301a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sai_type;
302a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sai_flags;
303a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sai_length;
304a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sai_adaptation_ind;
305a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sai_assoc_id;
306a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
307a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
308a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Partial delivery event */
309a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_pdapi_event {
310a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t pdapi_type;
311a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t pdapi_flags;
312a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pdapi_length;
313a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pdapi_indication;
314a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pdapi_stream;
315a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pdapi_seq;
316a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t pdapi_assoc_id;
317a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
318a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
319a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* indication values */
320a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PARTIAL_DELIVERY_ABORTED  0x0001
321a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
322a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* SCTP authentication event */
323a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authkey_event {
324a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t auth_type;
325a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t auth_flags;
326a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t auth_length;
327a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t auth_keynumber;
328a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t auth_indication;
329a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t auth_assoc_id;
330a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
331a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
332a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* indication values */
333a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_NEW_KEY   0x0001
334a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_NO_AUTH   0x0002
335a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_FREE_KEY  0x0003
336a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
337a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* SCTP sender dry event */
338a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_sender_dry_event {
339a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sender_dry_type;
340a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sender_dry_flags;
341a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sender_dry_length;
342a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sender_dry_assoc_id;
343a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
344a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
345a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
346a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Stream reset event - subscribe to SCTP_STREAM_RESET_EVENT */
347a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_stream_reset_event {
348a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strreset_type;
349a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strreset_flags;
350a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t strreset_length;
351a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t strreset_assoc_id;
352a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strreset_stream_list[];
353a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
354a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
355a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* flags in stream_reset_event (strreset_flags) */
356a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_INCOMING_SSN  0x0001
357a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_OUTGOING_SSN  0x0002
358a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_DENIED        0x0004 /* SCTP_STRRESET_FAILED */
359a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_FAILED        0x0008 /* SCTP_STRRESET_FAILED */
360a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_CHANGED_DENIED      0x0010
361a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
362a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_INCOMING      0x00000001
363a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET_OUTGOING      0x00000002
364a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
365a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
366a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Assoc reset event - subscribe to SCTP_ASSOC_RESET_EVENT */
367a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_assoc_reset_event {
368a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t assocreset_type;
369a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t assocreset_flags;
370a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t assocreset_length;
371a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t assocreset_assoc_id;
372a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t assocreset_local_tsn;
373a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t assocreset_remote_tsn;
374a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
375a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
376a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASSOC_RESET_DENIED        0x0004
377a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASSOC_RESET_FAILED        0x0008
378a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
379a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
380a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Stream change event - subscribe to SCTP_STREAM_CHANGE_EVENT */
381a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_stream_change_event {
382a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strchange_type;
383a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strchange_flags;
384a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t strchange_length;
385a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t strchange_assoc_id;
386a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strchange_instrms;
387a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t strchange_outstrms;
388a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
389a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
390a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_CHANGE_DENIED	0x0004
391a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_CHANGE_FAILED	0x0008
392a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
393a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
394a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* SCTP send failed event */
395a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_send_failed_event {
396a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t ssfe_type;
397a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t ssfe_flags;
398a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t ssfe_length;
399a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t ssfe_error;
400a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_sndinfo ssfe_info;
401a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t ssfe_assoc_id;
402a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t  ssfe_data[];
403a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
404a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
405a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* flag that indicates state of data */
406a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DATA_UNSENT  0x0001	/* inqueue never on wire */
407a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DATA_SENT    0x0002	/* on wire at failure */
408a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
409a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* SCTP event option */
410a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_event {
411a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t   se_assoc_id;
412a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t       se_type;
413a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t        se_on;
414a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
415a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
416a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenunion sctp_notification {
417a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_tlv {
418a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen		uint16_t sn_type;
419a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen		uint16_t sn_flags;
420a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen		uint32_t sn_length;
421a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	} sn_header;
422a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_assoc_change sn_assoc_change;
423a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_paddr_change sn_paddr_change;
424a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_remote_error sn_remote_error;
425a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_shutdown_event sn_shutdown_event;
426a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_adaptation_event sn_adaptation_event;
427a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_pdapi_event sn_pdapi_event;
428a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_authkey_event sn_auth_event;
429a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_sender_dry_event sn_sender_dry_event;
430a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_send_failed_event sn_send_failed_event;
431a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_stream_reset_event sn_strreset_event;
432a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_assoc_reset_event  sn_assocreset_event;
433a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_stream_change_event sn_strchange_event;
434a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
435a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
436a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_event_subscribe {
437a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_data_io_event;
438a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_association_event;
439a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_address_event;
440a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_send_failure_event;
441a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_peer_error_event;
442a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_shutdown_event;
443a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_partial_delivery_event;
444a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_adaptation_layer_event;
445a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_authentication_event;
446a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_sender_dry_event;
447a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sctp_stream_reset_event;
448a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
449a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
450a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
451a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
452a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Flags that go into the sinfo->sinfo_flags field */
453a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NOTIFICATION     0x0010 /* next message is a notification */
454a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COMPLETE         0x0020 /* next message is complete */
455a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_EOF              0x0100 /* Start shutdown procedures */
456a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ABORT            0x0200 /* Send an ABORT to peer */
457a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_UNORDERED        0x0400 /* Message is un-ordered */
458a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADDR_OVER        0x0800 /* Override the primary-address */
459a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SENDALL          0x1000 /* Send this on all associations */
460a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_EOR              0x2000 /* end of message signal */
461a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SACK_IMMEDIATELY 0x4000 /* Set I-Bit */
462a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
463a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define INVALID_SINFO_FLAG(x) (((x) & 0xfffffff0 \
464a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen                                    & ~(SCTP_EOF | SCTP_ABORT | SCTP_UNORDERED |\
465a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen				        SCTP_ADDR_OVER | SCTP_SENDALL | SCTP_EOR |\
466a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen					SCTP_SACK_IMMEDIATELY)) != 0)
467a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* for the endpoint */
468a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
469a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* The lower byte is an enumeration of PR-SCTP policies */
470a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PR_SCTP_NONE 0x0000 /* Reliable transfer */
471a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PR_SCTP_TTL  0x0001 /* Time based PR-SCTP */
472a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PR_SCTP_BUF  0x0002 /* Buffer based PR-SCTP */
473a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PR_SCTP_RTX  0x0003 /* Number of retransmissions based PR-SCTP */
474a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
475a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_POLICY(x)         ((x) & 0x0f)
476a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_ENABLED(x)        (PR_SCTP_POLICY(x) != SCTP_PR_SCTP_NONE)
477a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_TTL_ENABLED(x)    (PR_SCTP_POLICY(x) == SCTP_PR_SCTP_TTL)
478a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_BUF_ENABLED(x)    (PR_SCTP_POLICY(x) == SCTP_PR_SCTP_BUF)
479a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_RTX_ENABLED(x)    (PR_SCTP_POLICY(x) == SCTP_PR_SCTP_RTX)
480a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define PR_SCTP_INVALID_POLICY(x) (PR_SCTP_POLICY(x) > SCTP_PR_SCTP_RTX)
481a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
482a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
483a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
484a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * user socket options: socket API defined
485a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
486a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
487a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * read-write options
488a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
489a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RTOINFO                    0x00000001
490a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASSOCINFO                  0x00000002
491a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_INITMSG                    0x00000003
492a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NODELAY                    0x00000004
493a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTOCLOSE                  0x00000005
494a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PRIMARY_ADDR               0x00000007
495a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADAPTATION_LAYER           0x00000008
496a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DISABLE_FRAGMENTS          0x00000009
497a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PEER_ADDR_PARAMS           0x0000000a
498a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* ancillary data/notification interest options */
499a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Without this applied we will give V4 and V6 addresses on a V6 socket */
500a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_I_WANT_MAPPED_V4_ADDR      0x0000000d
501a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_MAXSEG                     0x0000000e
502a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DELAYED_SACK               0x0000000f
503a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_FRAGMENT_INTERLEAVE        0x00000010
504a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PARTIAL_DELIVERY_POINT     0x00000011
505a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* authentication support */
506a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_HMAC_IDENT                 0x00000014
507a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_ACTIVE_KEY            0x00000015
508a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTO_ASCONF                0x00000018
509a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_MAX_BURST                  0x00000019
510a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* assoc level context */
511a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CONTEXT                    0x0000001a
512a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* explicit EOR signalling */
513a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_EXPLICIT_EOR               0x0000001b
514a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_REUSE_PORT                 0x0000001c
515a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
516a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_EVENT                      0x0000001e
517a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVRCVINFO                0x0000001f
518a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RECVNXTINFO                0x00000020
519a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DEFAULT_SNDINFO            0x00000021
520a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DEFAULT_PRINFO             0x00000022
521a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_REMOTE_UDP_ENCAPS_PORT     0x00000024
522a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
523a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ENABLE_STREAM_RESET        0x00000900 /* struct sctp_assoc_value */
524a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
525a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
526a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * read-only options
527a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
528a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STATUS                     0x00000100
529a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_GET_PEER_ADDR_INFO         0x00000101
530a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* authentication support */
531a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PEER_AUTH_CHUNKS           0x00000102
532a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_LOCAL_AUTH_CHUNKS          0x00000103
533a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_GET_ASSOC_NUMBER           0x00000104
534a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_GET_ASSOC_ID_LIST          0x00000105
535a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
536a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
537a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * write-only options
538a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
539a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SET_PEER_PRIMARY_ADDR      0x00000006
540a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_CHUNK                 0x00000012
541a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_KEY                   0x00000013
542a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_DEACTIVATE_KEY        0x0000001d
543a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_DELETE_KEY            0x00000016
544a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RESET_STREAMS              0x00000901 /* struct sctp_reset_streams */
545a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_RESET_ASSOC                0x00000902 /* sctp_assoc_t */
546a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ADD_STREAMS                0x00000903 /* struct sctp_add_streams */
547a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
54839df7203213f23b32fc6ca3afca6b4fdf60f59c1tstruct sctp_initmsg {
54939df7203213f23b32fc6ca3afca6b4fdf60f59c1t	uint16_t sinit_num_ostreams;
55039df7203213f23b32fc6ca3afca6b4fdf60f59c1t	uint16_t sinit_max_instreams;
55139df7203213f23b32fc6ca3afca6b4fdf60f59c1t	uint16_t sinit_max_attempts;
55239df7203213f23b32fc6ca3afca6b4fdf60f59c1t	uint16_t sinit_max_init_timeo;
55339df7203213f23b32fc6ca3afca6b4fdf60f59c1t};
55439df7203213f23b32fc6ca3afca6b4fdf60f59c1t
555a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_rtoinfo {
556a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t srto_assoc_id;
557a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t srto_initial;
558a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t srto_max;
559a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t srto_min;
560a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
561a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
562a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_assocparams {
563a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sasoc_assoc_id;
564a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sasoc_peer_rwnd;
565a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sasoc_local_rwnd;
566a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sasoc_cookie_life;
567a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sasoc_asocmaxrxt;
568a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sasoc_number_peer_destinations;
569a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
570a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
571a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_setprim {
572a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage ssp_addr;
573a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t ssp_assoc_id;
574a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t ssp_padding[4];
575a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
576a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
577a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_setadaptation {
578a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t   ssb_adaptation_ind;
579a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
580a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
581a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_paddrparams {
582a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage spp_address;
583a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t spp_assoc_id;
584a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spp_hbinterval;
585a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spp_pathmtu;
586a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spp_flags;
587a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spp_ipv6_flowlabel;
588a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t spp_pathmaxrxt;
589a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t spp_dscp;
590a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
591a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
592a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_HB_ENABLE       0x00000001
593a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_HB_DISABLE      0x00000002
594a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_HB_DEMAND       0x00000004
595a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_PMTUD_ENABLE    0x00000008
596a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_PMTUD_DISABLE   0x00000010
597a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_HB_TIME_IS_ZERO 0x00000080
598a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_IPV6_FLOWLABEL  0x00000100
599a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SPP_DSCP            0x00000200
600a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
601a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Used for SCTP_MAXSEG, SCTP_MAX_BURST, SCTP_ENABLE_STREAM_RESET, and SCTP_CONTEXT */
602a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_assoc_value {
603a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t assoc_id;
604a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t assoc_value;
605a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
606a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
607a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* To enable stream reset */
608a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ENABLE_RESET_STREAM_REQ  0x00000001
609a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ENABLE_RESET_ASSOC_REQ   0x00000002
610a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ENABLE_CHANGE_ASSOC_REQ  0x00000004
611a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ENABLE_VALUE_MASK        0x00000007
612a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
613a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_reset_streams {
614a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t srs_assoc_id;
615a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t srs_flags;
616a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t srs_number_streams;  /* 0 == ALL */
617a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t srs_stream_list[];   /* list if strrst_num_streams is not 0 */
618a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
619a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
620a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_add_streams {
621a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t	sas_assoc_id;
622a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t	sas_instrms;
623a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t	sas_outstrms;
624a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
625a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
626a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_hmacalgo {
627a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t shmac_number_of_idents;
628a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t shmac_idents[];
629a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
630a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
631a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* AUTH hmac_id */
632a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_RSVD    0x0000
633a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_SHA1    0x0001	/* default, mandatory */
634a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_SHA256  0x0003
635a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_SHA224  0x0004
636a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_SHA384  0x0005
637a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTH_HMAC_ID_SHA512  0x0006
638a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
639a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
640a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_sack_info {
641a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sack_assoc_id;
642a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sack_delay;
643a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sack_freq;
644a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
645a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
646a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_default_prinfo {
647a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t pr_policy;
648a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pr_value;
649a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t pr_assoc_id;
650a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
651a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
652a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_paddrinfo {
653a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage spinfo_address;
654a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t spinfo_assoc_id;
655a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	int32_t spinfo_state;
656a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spinfo_cwnd;
657a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spinfo_srtt;
658a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spinfo_rto;
659a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t spinfo_mtu;
660a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
661a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
662a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_status {
663a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sstat_assoc_id;
664a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	int32_t  sstat_state;
665a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sstat_rwnd;
666a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sstat_unackdata;
667a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sstat_penddata;
668a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sstat_instrms;
669a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sstat_outstrms;
670a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sstat_fragmentation_point;
671a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_paddrinfo sstat_primary;
672a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
673a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
674a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
675a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * user state values
676a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
677a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CLOSED             0x0000
678a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_BOUND              0x1000
679a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_LISTEN             0x2000
680a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COOKIE_WAIT        0x0002
681a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COOKIE_ECHOED      0x0004
682a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ESTABLISHED        0x0008
683a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_SENT      0x0010
684a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_RECEIVED  0x0020
685a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_ACK_SENT  0x0040
686a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_PENDING   0x0080
687a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
688a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
689a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ACTIVE       0x0001  /* SCTP_ADDR_REACHABLE */
690a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_INACTIVE     0x0002  /* neither SCTP_ADDR_REACHABLE
691a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen                                     nor SCTP_ADDR_UNCONFIRMED */
692a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_UNCONFIRMED  0x0200  /* SCTP_ADDR_UNCONFIRMED */
693a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
694a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authchunks {
695a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t gauth_assoc_id;
696a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*	uint32_t gauth_number_of_chunks; not available */
697a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t  gauth_chunks[];
698a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
699a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
700a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_assoc_ids {
701a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t gaids_number_of_ids;
702a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t gaids_assoc_id[];
703a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
704a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
705a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_setpeerprim {
706a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sockaddr_storage sspp_addr;
707a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sspp_assoc_id;
708a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sspp_padding[4];
709a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
710a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
711a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authchunk {
712a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t sauth_chunk;
713a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
714a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
715a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
716a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_get_nonce_values {
717a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t gn_assoc_id;
718a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t gn_peers_tag;
719a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t gn_local_tag;
720a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
721a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
722a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
723a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/*
724a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * Main SCTP chunk types
725a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
726a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/************0x00 series ***********/
727a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_DATA               0x00
728a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_INITIATION         0x01
729a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_INITIATION_ACK     0x02
730a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SELECTIVE_ACK      0x03
731a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_HEARTBEAT_REQUEST  0x04
732a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_HEARTBEAT_ACK      0x05
733a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ABORT_ASSOCIATION  0x06
734a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN           0x07
735a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_ACK       0x08
736a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_OPERATION_ERROR    0x09
737a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COOKIE_ECHO        0x0a
738a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_COOKIE_ACK         0x0b
739a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ECN_ECHO           0x0c
740a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ECN_CWR            0x0d
741a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SHUTDOWN_COMPLETE  0x0e
742a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RFC4895 */
743a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_AUTHENTICATION     0x0f
744a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* EY nr_sack chunk id*/
745a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_NR_SELECTIVE_ACK   0x10
746a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/************0x40 series ***********/
747a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/************0x80 series ***********/
748a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RFC5061 */
749a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define	SCTP_ASCONF_ACK         0x80
750a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* draft-ietf-stewart-pktdrpsctp */
751a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PACKET_DROPPED     0x81
752a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* draft-ietf-stewart-strreset-xxx */
753a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_STREAM_RESET       0x82
754a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
755a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RFC4820                         */
756a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_PAD_CHUNK          0x84
757a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/************0xc0 series ***********/
758a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RFC3758 */
759a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_FORWARD_CUM_TSN    0xc0
760a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RFC5061 */
761a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_ASCONF             0xc1
762a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
763a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authkey {
764a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t sca_assoc_id;
765a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sca_keynumber;
766a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t sca_keylength;
767a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t  sca_key[];
768a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
769a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
770a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_authkeyid {
771a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t scact_assoc_id;
772a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t scact_keynumber;
773a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
774a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
775a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_cc_option {
776a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	int option;
777a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_assoc_value aid_value;
778a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
779a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
780a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_cwnd_args {
781a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	struct sctp_nets *net;   /* network to */ /* FIXME: LP64 issue */
782a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t cwnd_new_value; /* cwnd in k */
783a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t pseudo_cumack;
784a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t inflight;       /* flightsize in k */
785a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t cwnd_augment;   /* increment to it */
786a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t meets_pseudo_cumack;
787a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t need_new_pseudo_cumack;
788a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t cnt_in_send;
789a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint8_t cnt_in_str;
790a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
791a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
792a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_blk_args {
793a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t onsb;            /* in 1k bytes */
794a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t sndlen;          /* len of send being attempted */
795a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t peer_rwnd;       /* rwnd of peer */
796a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t send_sent_qcnt;  /* chnk cnt */
797a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t stream_qcnt;     /* chnk cnt */
798a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t chunks_on_oque;  /* chunks out */
799a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint16_t flight_size;     /* flight size in k */
800a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
801a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
802a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenstruct sctp_timeouts {
803a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	sctp_assoc_t stimo_assoc_id;
804a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_init;
805a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_data;
806a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_sack;
807a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_shutdown;
808a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_heartbeat;
809a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_cookie;
810a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen	uint32_t stimo_shutdownack;
811a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen};
812a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
813a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
814a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Standard TCP Congestion Control */
815a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_RFC2581         0x00000000
816a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* High Speed TCP Congestion Control (Floyd) */
817a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_HSTCP           0x00000001
818a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* HTCP Congestion Control */
819a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_HTCP            0x00000002
820a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RTCC Congestion Control - RFC2581 plus */
821a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_RTCC            0x00000003
822a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
823a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_OPT_RTCC_SETMODE 0x00002000
824a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_OPT_USE_DCCC_EC  0x00002001
825a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CC_OPT_STEADY_STEP  0x00002002
826a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
827a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_OFF            0
828a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_BASE           1
829a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_RPV1           2
830a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_RPV2           3
831a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_MPTCP          4
832a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_CMT_MAX            SCTP_CMT_MPTCP
833a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
834a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* RS - Supported stream scheduling modules for pluggable
835a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen * stream scheduling
836a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen */
837a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Default simple round-robin */
838a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_DEFAULT             0x00000000
839a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Real round-robin */
840a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_ROUND_ROBIN         0x00000001
841a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Real round-robin per packet */
842a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_ROUND_ROBIN_PACKET  0x00000002
843a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Priority */
844a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_PRIORITY            0x00000003
845a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* Fair Bandwidth */
846a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_FAIR_BANDWITH       0x00000004
847a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/* First-come, first-serve */
848a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen#define SCTP_SS_FIRST_COME          0x00000005
849a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
850a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen/******************** System calls *************/
851a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
8525387386a7cfb154b9260ae352035da8e3cc24487tuexenvoid
853de2407b8522030fd0cbc1eb4e71847d6e981d49atuexenusrsctp_init(uint16_t,
854e6b8257902dfec8b1e5d9b80d5364a78c06777cat             int (*)(void *addr, void *buffer, size_t length, uint8_t tos, uint8_t set_df),
855e6b8257902dfec8b1e5d9b80d5364a78c06777cat             void (*)(const char *format, ...));
856a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
85705f72811b7f7e985fdbed34d08b0498f0b3bc529tuexenstruct socket *
85824ade1274bd81681ec1d2493b89c018b85f64f7atuexenusrsctp_socket(int domain, int type, int protocol,
859a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen               int (*receive_cb)(struct socket *sock, union sctp_sockstore addr, void *data,
860d47a4475eeacc9978923e35a6c44a6c5cb6c2227tuexen                                 size_t datalen, struct sctp_rcvinfo, int flags, void *ulp_info),
861a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen               int (*send_cb)(struct socket *sock, uint32_t sb_free),
862d47a4475eeacc9978923e35a6c44a6c5cb6c2227tuexen               uint32_t sb_threshold,
863d47a4475eeacc9978923e35a6c44a6c5cb6c2227tuexen               void *ulp_info);
86405f72811b7f7e985fdbed34d08b0498f0b3bc529tuexen
8655387386a7cfb154b9260ae352035da8e3cc24487tuexenint
866a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_setsockopt(struct socket *so,
867e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   int level,
868e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   int option_name,
869e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   const void *option_value,
870e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   socklen_t option_len);
871a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
872a89a6767416760e852d85b2db374f6eebc4e93d7tuexenint
873a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_getsockopt(struct socket *so,
874e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   int level,
875e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   int option_name,
876e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   void *option_value,
877e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                   socklen_t *option_len);
878a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
879112778d60644c1996a35706fa9d415885ace3feftint
880112778d60644c1996a35706fa9d415885ace3feftusrsctp_getpaddrs(struct socket *so,
881112778d60644c1996a35706fa9d415885ace3feft                  sctp_assoc_t id,
882112778d60644c1996a35706fa9d415885ace3feft                  struct sockaddr **raddrs);
883112778d60644c1996a35706fa9d415885ace3feft
884112778d60644c1996a35706fa9d415885ace3feftvoid
885112778d60644c1996a35706fa9d415885ace3feftusrsctp_freepaddrs(struct sockaddr *addrs);
886112778d60644c1996a35706fa9d415885ace3feft
887112778d60644c1996a35706fa9d415885ace3feftint
888112778d60644c1996a35706fa9d415885ace3feftusrsctp_getladdrs(struct socket *so,
889112778d60644c1996a35706fa9d415885ace3feft                  sctp_assoc_t id,
890112778d60644c1996a35706fa9d415885ace3feft                  struct sockaddr **raddrs);
891112778d60644c1996a35706fa9d415885ace3feft
892112778d60644c1996a35706fa9d415885ace3feftvoid
893112778d60644c1996a35706fa9d415885ace3feftusrsctp_freeladdrs(struct sockaddr *addrs);
894112778d60644c1996a35706fa9d415885ace3feft
895a89a6767416760e852d85b2db374f6eebc4e93d7tuexenssize_t
896a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_sendv(struct socket *so,
897e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              const void *data,
898e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              size_t len,
899e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              struct sockaddr *to,
900e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              int addrcnt,
901e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              void *info,
902e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              socklen_t infolen,
903e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              unsigned int infotype,
904e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              int flags);
905a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
906a89a6767416760e852d85b2db374f6eebc4e93d7tuexenssize_t
907a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_recvv(struct socket *so,
908a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              void *dbuf,
909a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              size_t len,
910a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              struct sockaddr *from,
911a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              socklen_t * fromlen,
912a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              void *info,
913a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              socklen_t *infolen,
914a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              unsigned int *infotype,
915a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen              int *msg_flags);
916a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
917a89a6767416760e852d85b2db374f6eebc4e93d7tuexenint
918a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_bind(struct socket *so,
919e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t             struct sockaddr *name,
920e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t             socklen_t namelen);
921a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
9222197490ffe2e29c94e582a12421263c1e235940dt#define SCTP_BINDX_ADD_ADDR 0x00008001
9232197490ffe2e29c94e582a12421263c1e235940dt#define SCTP_BINDX_REM_ADDR 0x00008002
9242197490ffe2e29c94e582a12421263c1e235940dt
925a89a6767416760e852d85b2db374f6eebc4e93d7tuexenint
926a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_bindx(struct socket *so,
927e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              struct sockaddr *addrs,
928e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              int addrcnt,
929e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t              int flags);
930a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
931a89a6767416760e852d85b2db374f6eebc4e93d7tuexenint
932a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_listen(struct socket *so,
933e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t               int backlog);
934a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
935a89a6767416760e852d85b2db374f6eebc4e93d7tuexenstruct socket *
936a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_accept(struct socket *so,
937e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t               struct sockaddr * aname,
938e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t               socklen_t * anamelen);
939a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
94056c7d1c81c55fda0619d96eac39e093789bca063tstruct socket *
94156c7d1c81c55fda0619d96eac39e093789bca063tusrsctp_peeloff(struct socket *, sctp_assoc_t);
94256c7d1c81c55fda0619d96eac39e093789bca063t
94324ade1274bd81681ec1d2493b89c018b85f64f7atuexenint
944a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_connect(struct socket *so,
945e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                struct sockaddr *name,
946e4ec7d80d1b1dfbe5b9997c8e748f4986e2c8e28t                socklen_t namelen);
947a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
94872939a60100d9d293742c8a3afbbd761c3e1dff2tint
94972939a60100d9d293742c8a3afbbd761c3e1dff2tusrsctp_connectx(struct socket *so,
95072939a60100d9d293742c8a3afbbd761c3e1dff2t                 const struct sockaddr *addrs, int addrcnt,
95172939a60100d9d293742c8a3afbbd761c3e1dff2t                 sctp_assoc_t *id);
95272939a60100d9d293742c8a3afbbd761c3e1dff2t
9535387386a7cfb154b9260ae352035da8e3cc24487tuexenvoid
954a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_close(struct socket *so);
955a89a6767416760e852d85b2db374f6eebc4e93d7tuexen
9568ce022ed129a3194d3375fa629352f152d79031dtuexenint
957a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_finish(void);
958f3d0e4fa975902501df7fabd3b516785f6da64e3tuexen
959f3d0e4fa975902501df7fabd3b516785f6da64e3tuexenint
960a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenusrsctp_shutdown(struct socket *so, int how);
961a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
962de2407b8522030fd0cbc1eb4e71847d6e981d49atuexenvoid
9639d961e5c3872d113c13a30d9f7b5af3c09d82b3etusrsctp_conninput(void *, const void *, size_t, uint8_t);
964de2407b8522030fd0cbc1eb4e71847d6e981d49atuexen
965b053ad542619e62e893d4e34d861e3268072e1c6tuexenint
966bd9d6dcb4436122e5bce43995e794ddde63df6c7tuexenusrsctp_set_non_blocking(struct socket *, int);
967b053ad542619e62e893d4e34d861e3268072e1c6tuexen
968131dc2ec8efa5113339f8c81d44f0c262f78ce55tuexenint
969131dc2ec8efa5113339f8c81d44f0c262f78ce55tuexenusrsctp_get_non_blocking(struct socket *);
970131dc2ec8efa5113339f8c81d44f0c262f78ce55tuexen
97120307bcab26fb6709f0fe85d19d4c6f717b610b1tvoid
97220307bcab26fb6709f0fe85d19d4c6f717b610b1tusrsctp_register_address(void *);
97320307bcab26fb6709f0fe85d19d4c6f717b610b1t
97420307bcab26fb6709f0fe85d19d4c6f717b610b1tvoid
97520307bcab26fb6709f0fe85d19d4c6f717b610b1tusrsctp_deregister_address(void *);
97620307bcab26fb6709f0fe85d19d4c6f717b610b1t
977c9b21eb3acad1a7e2e86debaabb106fa268c4e9ft#define SCTP_DUMP_OUTBOUND 1
978c9b21eb3acad1a7e2e86debaabb106fa268c4e9ft#define SCTP_DUMP_INBOUND  0
979c9b21eb3acad1a7e2e86debaabb106fa268c4e9ft
98056c7d1c81c55fda0619d96eac39e093789bca063tchar *
981c9b21eb3acad1a7e2e86debaabb106fa268c4e9ftusrsctp_dumppacket(void *, size_t, int);
98256c7d1c81c55fda0619d96eac39e093789bca063t
98356c7d1c81c55fda0619d96eac39e093789bca063tvoid
98456c7d1c81c55fda0619d96eac39e093789bca063tusrsctp_freedumpbuffer(char *);
98556c7d1c81c55fda0619d96eac39e093789bca063t
986fb3816eaffe5878bb1286adb120fd160da178a05t#define USRSCTP_SYSCTL_DECL(__field)                \
987a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenvoid usrsctp_sysctl_set_ ## __field(uint32_t value);\
988a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenuint32_t usrsctp_sysctl_get_ ## __field(void);
989a25381bbb4e92ac98a657a15d83a6531c03937b5tuexen
990a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_sendspace)
991a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_recvspace)
992a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_auto_asconf)
993a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_multiple_asconfs)
994a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_ecn_enable)
995a8657c4fc04fb9cc82100f648810d51ec6ab155atUSRSCTP_SYSCTL_DECL(sctp_pr_enable)
9960602fd0eeb08e1999c7f28f21c8dde1f4503a03ftUSRSCTP_SYSCTL_DECL(sctp_auth_enable)
997fb3816eaffe5878bb1286adb120fd160da178a05tUSRSCTP_SYSCTL_DECL(sctp_asconf_enable)
9982344bfccffeb80545fca6a86e8cda3d56a6f50bftUSRSCTP_SYSCTL_DECL(sctp_reconfig_enable)
99944318e900a771ba1a5bafb510c38f33fd5cd8a39tUSRSCTP_SYSCTL_DECL(sctp_nrsack_enable)
1000669cffca0ac8ad73a3c16bb63d1fa0f829f84c10tUSRSCTP_SYSCTL_DECL(sctp_pktdrop_enable)
1001a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_strict_sacks)
1002a84e47fce6e5dd47a37cce19c040652bd9cc2ecat#if !defined(SCTP_WITH_NO_CSUM)
1003a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_no_csum_on_loopback)
1004a84e47fce6e5dd47a37cce19c040652bd9cc2ecat#endif
1005a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_peer_chunk_oh)
1006a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_max_burst_default)
1007a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_max_chunks_on_queue)
1008a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_hashtblsize)
1009a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_pcbtblsize)
1010a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_min_split_point)
1011a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_chunkscale)
1012a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_delayed_sack_time_default)
1013a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_sack_freq_default)
1014a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_system_free_resc_limit)
1015a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_asoc_free_resc_limit)
1016a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_heartbeat_interval_default)
1017a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_pmtu_raise_time_default)
1018a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_shutdown_guard_time_default)
1019a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_secret_lifetime_default)
1020a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rto_max_default)
1021a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rto_min_default)
1022a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rto_initial_default)
1023a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_init_rto_max_default)
1024a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_valid_cookie_life_default)
1025a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_init_rtx_max_default)
1026a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_assoc_rtx_max_default)
1027a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_path_rtx_max_default)
1028a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_add_more_threshold)
1029475e0d98af362c2614fe6ce5e72abd6b9fe15123tUSRSCTP_SYSCTL_DECL(sctp_nr_incoming_streams_default)
1030a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_nr_outgoing_streams_default)
1031a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_cmt_on_off)
1032a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_cmt_use_dac)
1033a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_use_cwnd_based_maxburst)
1034a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_nat_friendly)
1035a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_L2_abc_variable)
1036a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_mbuf_threshold_count)
1037a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_do_drain)
1038a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_hb_maxburst)
1039a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_abort_if_one_2_one_hits_limit)
1040a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_strict_data_order)
1041a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_min_residual)
1042a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_max_retran_chunk)
1043a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_logging_level)
1044a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_default_cc_module)
1045a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_default_frag_interleave)
1046a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_mobility_base)
1047a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_mobility_fasthandoff)
1048a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_inits_include_nat_friendly)
1049a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_udp_tunneling_port)
1050a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_enable_sack_immediately)
1051a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_vtag_time_wait)
1052a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_blackhole)
10538f9e45fea288542b24a6bda01269c6fc184d991atUSRSCTP_SYSCTL_DECL(sctp_diag_info_code)
1054a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_fr_max_burst_default)
1055a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_path_pf_threshold)
1056a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_default_ss_module)
1057a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rttvar_bw)
1058a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rttvar_rtt)
1059a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_rttvar_eqret)
1060a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_steady_step)
1061a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_use_dccc_ecn)
1062a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_buffer_splitting)
1063a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_initial_cwnd)
1064a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#ifdef SCTP_DEBUG
1065a25381bbb4e92ac98a657a15d83a6531c03937b5tuexenUSRSCTP_SYSCTL_DECL(sctp_debug_on)
10669d961e5c3872d113c13a30d9f7b5af3c09d82b3et/* More specific values can be found in sctp_constants, but
10679d961e5c3872d113c13a30d9f7b5af3c09d82b3et * are not considered to be part of the API.
10689d961e5c3872d113c13a30d9f7b5af3c09d82b3et */
10699d961e5c3872d113c13a30d9f7b5af3c09d82b3et#define SCTP_DEBUG_NONE 0x00000000
10709d961e5c3872d113c13a30d9f7b5af3c09d82b3et#define SCTP_DEBUG_ALL  0xffffffff
1071a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#endif
107299e6850159eeef502c42debbacc3790910fec791t#undef USRSCTP_SYSCTL_DECL
10736b5474dec62bc128acb56d0ad4ae413b91fedb09tstruct sctp_timeval {
10746b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t tv_sec;
10756b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t tv_usec;
10766b5474dec62bc128acb56d0ad4ae413b91fedb09t};
10776b5474dec62bc128acb56d0ad4ae413b91fedb09t
10786b5474dec62bc128acb56d0ad4ae413b91fedb09tstruct sctpstat {
10796b5474dec62bc128acb56d0ad4ae413b91fedb09t	struct sctp_timeval sctps_discontinuitytime; /* sctpStats 18 (TimeStamp) */
10806b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* MIB according to RFC 3873 */
10816b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_currestab;           /* sctpStats  1   (Gauge32) */
10826b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_activeestab;         /* sctpStats  2 (Counter32) */
10836b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_restartestab;
10846b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_collisionestab;
10856b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_passiveestab;        /* sctpStats  3 (Counter32) */
10866b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_aborted;             /* sctpStats  4 (Counter32) */
10876b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_shutdown;            /* sctpStats  5 (Counter32) */
10886b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_outoftheblue;        /* sctpStats  6 (Counter32) */
10896b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_checksumerrors;      /* sctpStats  7 (Counter32) */
10906b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_outcontrolchunks;    /* sctpStats  8 (Counter64) */
10916b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_outorderchunks;      /* sctpStats  9 (Counter64) */
10926b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_outunorderchunks;    /* sctpStats 10 (Counter64) */
10936b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_incontrolchunks;     /* sctpStats 11 (Counter64) */
10946b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_inorderchunks;       /* sctpStats 12 (Counter64) */
10956b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_inunorderchunks;     /* sctpStats 13 (Counter64) */
10966b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_fragusrmsgs;         /* sctpStats 14 (Counter64) */
10976b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_reasmusrmsgs;        /* sctpStats 15 (Counter64) */
10986b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_outpackets;          /* sctpStats 16 (Counter64) */
10996b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_inpackets;           /* sctpStats 17 (Counter64) */
11006b5474dec62bc128acb56d0ad4ae413b91fedb09t
11016b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* input statistics: */
11026b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvpackets;         /* total input packets        */
11036b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvdatagrams;       /* total input datagrams      */
11046b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvpktwithdata;     /* total packets that had data */
11056b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvsacks;           /* total input SACK chunks    */
11066b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvdata;            /* total input DATA chunks    */
11076b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvdupdata;         /* total input duplicate DATA chunks */
11086b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvheartbeat;       /* total input HB chunks      */
11096b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvheartbeatack;    /* total input HB-ACK chunks  */
11106b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvecne;            /* total input ECNE chunks    */
11116b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvauth;            /* total input AUTH chunks    */
11126b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvauthmissing;     /* total input chunks missing AUTH */
11136b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvivalhmacid;      /* total number of invalid HMAC ids received */
11146b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvivalkeyid;       /* total number of invalid secret ids received */
11156b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvauthfailed;      /* total number of auth failed */
11166b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvexpress;         /* total fast path receives all one chunk */
11176b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvexpressm;        /* total fast path multi-part data */
11186b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvnocrc;
11196b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvswcrc;
11206b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_recvhwcrc;
11216b5474dec62bc128acb56d0ad4ae413b91fedb09t
11226b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* output statistics: */
11236b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendpackets;         /* total output packets       */
11246b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendsacks;           /* total output SACKs         */
11256b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_senddata;            /* total output DATA chunks   */
11266b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendretransdata;     /* total output retransmitted DATA chunks */
11276b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendfastretrans;     /* total output fast retransmitted DATA chunks */
11286b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendmultfastretrans; /* total FR's that happened more than once
11296b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * to same chunk (u-del multi-fr algo).
11306b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      */
11316b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendheartbeat;       /* total output HB chunks     */
11326b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendecne;            /* total output ECNE chunks    */
11336b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendauth;            /* total output AUTH chunks FIXME   */
11346b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_senderrors;          /* ip_output error counter */
11356b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendnocrc;
11366b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendswcrc;
11376b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sendhwcrc;
11386b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* PCKDROPREP statistics: */
11396b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpfmbox;           /* Packet drop from middle box */
11406b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpfehos;           /* P-drop from end host */
11416b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpmbda;            /* P-drops with data */
11426b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpmbct;            /* P-drops, non-data, non-endhost */
11436b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpbwrpt;           /* P-drop, non-endhost, bandwidth rep only */
11446b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpcrupt;           /* P-drop, not enough for chunk header */
11456b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpnedat;           /* P-drop, not enough data to confirm */
11466b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrppdbrk;           /* P-drop, where process_chunk_drop said break */
11476b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrptsnnf;           /* P-drop, could not find TSN */
11486b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpdnfnd;           /* P-drop, attempt reverse TSN lookup */
11496b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpdiwnp;           /* P-drop, e-host confirms zero-rwnd */
11506b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpdizrw;           /* P-drop, midbox confirms no space */
11516b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpbadd;            /* P-drop, data did not match TSN */
11526b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_pdrpmark;            /* P-drop, TSN's marked for Fast Retran */
11536b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* timeouts */
11546b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoiterator;        /* Number of iterator timers that fired */
11556b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timodata;            /* Number of T3 data time outs */
11566b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timowindowprobe;     /* Number of window probe (T3) timers that fired */
11576b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoinit;            /* Number of INIT timers that fired */
11586b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timosack;            /* Number of sack timers that fired */
11596b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoshutdown;        /* Number of shutdown timers that fired */
11606b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoheartbeat;       /* Number of heartbeat timers that fired */
11616b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timocookie;          /* Number of times a cookie timeout fired */
11626b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timosecret;          /* Number of times an endpoint changed its cookie secret*/
11636b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timopathmtu;         /* Number of PMTU timers that fired */
11646b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoshutdownack;     /* Number of shutdown ack timers that fired */
11656b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoshutdownguard;   /* Number of shutdown guard timers that fired */
11666b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timostrmrst;         /* Number of stream reset timers that fired */
11676b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoearlyfr;         /* Number of early FR timers that fired */
11686b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoasconf;          /* Number of times an asconf timer fired */
11696b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timodelprim;	     /* Number of times a prim_deleted timer fired */
11706b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoautoclose;       /* Number of times auto close timer fired */
11716b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoassockill;       /* Number of asoc free timers expired */
11726b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_timoinpkill;         /* Number of inp free timers expired */
11736b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* former early FR counters */
11746b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_spare[11];
11756b5474dec62bc128acb56d0ad4ae413b91fedb09t	/* others */
11766b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_hdrops;              /* packet shorter than header */
11776b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_badsum;              /* checksum error             */
11786b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_noport;              /* no endpoint for port       */
11796b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_badvtag;             /* bad v-tag                  */
11806b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_badsid;              /* bad SID                    */
11816b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_nomem;               /* no memory                  */
11826b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_fastretransinrtt;    /* number of multiple FR in a RTT window */
11836b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_markedretrans;
11846b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_naglesent;           /* nagle allowed sending      */
11856b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_naglequeued;         /* nagle doesn't allow sending */
11866b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_maxburstqueued;      /* max burst doesn't allow sending */
11876b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_ifnomemqueued;       /* look ahead tells us no memory in
11886b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * interface ring buffer OR we had a
11896b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * send error and are queuing one send.
11906b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      */
11916b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_windowprobed;        /* total number of window probes sent */
11926b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_lowlevelerr;         /* total times an output error causes us
11936b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * to clamp down on next user send.
11946b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      */
11956b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_lowlevelerrusr;      /* total times sctp_senderrors were caused from
11966b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * a user send from a user invoked send not
11976b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      * a sack response
11986b5474dec62bc128acb56d0ad4ae413b91fedb09t	                                      */
11996b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_datadropchklmt;      /* Number of in data drops due to chunk limit reached */
12006b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_datadroprwnd;        /* Number of in data drops due to rwnd limit reached */
12016b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_ecnereducedcwnd;     /* Number of times a ECN reduced the cwnd */
12026b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_vtagexpress;         /* Used express lookup via vtag */
12036b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_vtagbogus;           /* Collision in express lookup. */
12046b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_primary_randry;      /* Number of times the sender ran dry of user data on primary */
12056b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_cmt_randry;          /* Same for above */
12066b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_slowpath_sack;       /* Sacks the slow way */
12076b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_wu_sacks_sent;       /* Window Update only sacks sent */
12086b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sends_with_flags;    /* number of sends with sinfo_flags !=0 */
12096b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sends_with_unord;    /* number of unordered sends */
12106b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sends_with_eof;      /* number of sends with EOF flag set */
12116b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_sends_with_abort;    /* number of sends with ABORT flag set */
12126b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_protocol_drain_calls;/* number of times protocol drain called */
12136b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_protocol_drains_done;/* number of times we did a protocol drain */
12146b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_read_peeks;          /* Number of times recv was called with peek */
12156b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_cached_chk;          /* Number of cached chunks used */
12166b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_cached_strmoq;       /* Number of cached stream oq's used */
12176b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_left_abandon;        /* Number of unread messages abandoned by close */
12186b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_send_burst_avoid;    /* Unused */
12196b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_send_cwnd_avoid;     /* Send cwnd full  avoidance, already max burst inflight to net */
12206b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_fwdtsn_map_over;     /* number of map array over-runs via fwd-tsn's */
12216b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_queue_upd_ecne;      /* Number of times we queued or updated an ECN chunk on send queue */
12226b5474dec62bc128acb56d0ad4ae413b91fedb09t	uint32_t  sctps_reserved[31];        /* Future ABI compat - remove int's from here when adding new */
12236b5474dec62bc128acb56d0ad4ae413b91fedb09t};
12246b5474dec62bc128acb56d0ad4ae413b91fedb09t
12256b5474dec62bc128acb56d0ad4ae413b91fedb09tvoid
12266b5474dec62bc128acb56d0ad4ae413b91fedb09tusrsctp_get_stat(struct sctpstat *);
12276b5474dec62bc128acb56d0ad4ae413b91fedb09t
12286360d2ea88e442fccfc07b485e0e4d806a09c76bt#ifdef _WIN32
12296360d2ea88e442fccfc07b485e0e4d806a09c76bt#ifdef _MSC_VER
1230062bff767b4ad4c70476e94c7d0e2a62f57306bbt#pragma warning(default: 4200)
12316360d2ea88e442fccfc07b485e0e4d806a09c76bt#endif
12326360d2ea88e442fccfc07b485e0e4d806a09c76bt#endif
123364b1fe24847c778a491d59be651e79e2ba7c3ef3tuexen#ifdef  __cplusplus
123464b1fe24847c778a491d59be651e79e2ba7c3ef3tuexen}
123564b1fe24847c778a491d59be651e79e2ba7c3ef3tuexen#endif
1236a89a6767416760e852d85b2db374f6eebc4e93d7tuexen#endif
1237