sctp_var.h revision 1.1 1 /* $KAME: sctp_var.h,v 1.24 2005/03/06 16:04:19 itojun Exp $ */
2 /* $NetBSD: sctp_var.h,v 1.1 2015/10/13 21:28:35 rjs Exp $ */
3
4 /*
5 * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by Cisco Systems, Inc.
19 * 4. Neither the name of the project nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY CISCO SYSTEMS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL CISCO SYSTEMS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36 #ifndef _NETINET_SCTP_VAR_H_
37 #define _NETINET_SCTP_VAR_H_
38
39 #include <sys/socketvar.h>
40 #include <netinet/sctp_uio.h>
41
42 /* SCTP Kernel structures */
43
44 /*
45 * Names for SCTP sysctl objects
46 */
47 #ifndef __APPLE__
48 #define SCTPCTL_MAXDGRAM 1 /* max datagram size */
49 #define SCTPCTL_RECVSPACE 2 /* default receive buffer space */
50 #define SCTPCTL_AUTOASCONF 3 /* auto asconf enable/disable flag */
51 #define SCTPCTL_ECN_ENABLE 4 /* Is ecn allowed */
52 #define SCTPCTL_ECN_NONCE 5 /* Is ecn nonce allowed */
53 #define SCTPCTL_STRICT_SACK 6 /* strictly require sack'd TSN's to be
54 * smaller than sndnxt.
55 */
56 #define SCTPCTL_NOCSUM_LO 7 /* Require that the Loopback NOT have
57 * the crc32 checksum on packets routed over
58 * it.
59 */
60 #define SCTPCTL_STRICT_INIT 8
61 #define SCTPCTL_PEER_CHK_OH 9
62 #define SCTPCTL_MAXBURST 10
63 #define SCTPCTL_MAXCHUNKONQ 11
64 #define SCTPCTL_DELAYED_SACK 12
65 #define SCTPCTL_HB_INTERVAL 13
66 #define SCTPCTL_PMTU_RAISE 14
67 #define SCTPCTL_SHUTDOWN_GUARD 15
68 #define SCTPCTL_SECRET_LIFETIME 16
69 #define SCTPCTL_RTO_MAX 17
70 #define SCTPCTL_RTO_MIN 18
71 #define SCTPCTL_RTO_INITIAL 19
72 #define SCTPCTL_INIT_RTO_MAX 20
73 #define SCTPCTL_COOKIE_LIFE 21
74 #define SCTPCTL_INIT_RTX_MAX 22
75 #define SCTPCTL_ASSOC_RTX_MAX 23
76 #define SCTPCTL_PATH_RTX_MAX 24
77 #define SCTPCTL_NR_OUTGOING_STREAMS 25
78 #ifdef SCTP_DEBUG
79 #define SCTPCTL_DEBUG 26
80 #define SCTPCTL_MAXID 27
81 #else
82 #define SCTPCTL_MAXID 26
83 #endif
84
85 #endif
86
87 #ifdef SCTP_DEBUG
88 #define SCTPCTL_NAMES { \
89 { 0, 0 }, \
90 { "maxdgram", CTLTYPE_INT }, \
91 { "recvspace", CTLTYPE_INT }, \
92 { "autoasconf", CTLTYPE_INT }, \
93 { "ecn_enable", CTLTYPE_INT }, \
94 { "ecn_nonce", CTLTYPE_INT }, \
95 { "strict_sack", CTLTYPE_INT }, \
96 { "looback_nocsum", CTLTYPE_INT }, \
97 { "strict_init", CTLTYPE_INT }, \
98 { "peer_chkoh", CTLTYPE_INT }, \
99 { "maxburst", CTLTYPE_INT }, \
100 { "maxchunks", CTLTYPE_INT }, \
101 { "delayed_sack_time", CTLTYPE_INT }, \
102 { "heartbeat_interval", CTLTYPE_INT }, \
103 { "pmtu_raise_time", CTLTYPE_INT }, \
104 { "shutdown_guard_time", CTLTYPE_INT }, \
105 { "secret_lifetime", CTLTYPE_INT }, \
106 { "rto_max", CTLTYPE_INT }, \
107 { "rto_min", CTLTYPE_INT }, \
108 { "rto_initial", CTLTYPE_INT }, \
109 { "init_rto_max", CTLTYPE_INT }, \
110 { "valid_cookie_life", CTLTYPE_INT }, \
111 { "init_rtx_max", CTLTYPE_INT }, \
112 { "assoc_rtx_max", CTLTYPE_INT }, \
113 { "path_rtx_max", CTLTYPE_INT }, \
114 { "nr_outgoing_streams", CTLTYPE_INT }, \
115 { "debug", CTLTYPE_INT }, \
116 }
117 #else
118 #define SCTPCTL_NAMES { \
119 { 0, 0 }, \
120 { "maxdgram", CTLTYPE_INT }, \
121 { "recvspace", CTLTYPE_INT }, \
122 { "autoasconf", CTLTYPE_INT }, \
123 { "ecn_enable", CTLTYPE_INT }, \
124 { "ecn_nonce", CTLTYPE_INT }, \
125 { "strict_sack", CTLTYPE_INT }, \
126 { "looback_nocsum", CTLTYPE_INT }, \
127 { "strict_init", CTLTYPE_INT }, \
128 { "peer_chkoh", CTLTYPE_INT }, \
129 { "maxburst", CTLTYPE_INT }, \
130 { "maxchunks", CTLTYPE_INT }, \
131 { "delayed_sack_time", CTLTYPE_INT }, \
132 { "heartbeat_interval", CTLTYPE_INT }, \
133 { "pmtu_raise_time", CTLTYPE_INT }, \
134 { "shutdown_guard_time", CTLTYPE_INT }, \
135 { "secret_lifetime", CTLTYPE_INT }, \
136 { "rto_max", CTLTYPE_INT }, \
137 { "rto_min", CTLTYPE_INT }, \
138 { "rto_initial", CTLTYPE_INT }, \
139 { "init_rto_max", CTLTYPE_INT }, \
140 { "valid_cookie_life", CTLTYPE_INT }, \
141 { "init_rtx_max", CTLTYPE_INT }, \
142 { "assoc_rtx_max", CTLTYPE_INT }, \
143 { "path_rtx_max", CTLTYPE_INT }, \
144 { "nr_outgoing_streams", CTLTYPE_INT }, \
145 }
146 #endif
147
148 #if defined(_KERNEL)
149
150 extern const struct pr_usrreqs sctp_usrreqs;
151
152 int sctp_usrreq(struct socket *, int, struct mbuf *, struct mbuf *,
153 struct mbuf *, struct lwp *);
154
155 #define sctp_sbspace(sb) ((long) (((sb)->sb_hiwat > (sb)->sb_cc) ? ((sb)->sb_hiwat - (sb)->sb_cc) : 0))
156
157 #define sctp_sbspace_sub(a,b) ((a > b) ? (a - b) : 0)
158
159 extern int sctp_sendspace;
160 extern int sctp_recvspace;
161 extern int sctp_ecn;
162 extern int sctp_ecn_nonce;
163
164 #define sctp_ucount_incr(val) { \
165 val++; \
166 }
167
168 #define sctp_ucount_decr(val) { \
169 if (val > 0) { \
170 val--; \
171 } else { \
172 val = 0; \
173 } \
174 }
175
176 #define sctp_flight_size_decrease(tp1) do { \
177 if (tp1->whoTo->flight_size >= tp1->book_size) \
178 tp1->whoTo->flight_size -= tp1->book_size; \
179 else \
180 tp1->whoTo->flight_size = 0; \
181 } while (0)
182
183 #define sctp_flight_size_increase(tp1) do { \
184 (tp1)->whoTo->flight_size += (tp1)->book_size; \
185 } while (0)
186
187 #define sctp_total_flight_decrease(stcb, tp1) do { \
188 if (stcb->asoc.total_flight >= tp1->book_size) { \
189 stcb->asoc.total_flight -= tp1->book_size; \
190 if (stcb->asoc.total_flight_count > 0) \
191 stcb->asoc.total_flight_count--; \
192 } else { \
193 stcb->asoc.total_flight = 0; \
194 stcb->asoc.total_flight_count = 0; \
195 } \
196 } while (0)
197
198 #define sctp_total_flight_increase(stcb, tp1) do { \
199 (stcb)->asoc.total_flight_count++; \
200 (stcb)->asoc.total_flight += (tp1)->book_size; \
201 } while (0)
202
203
204 struct sctp_nets;
205 struct sctp_inpcb;
206 struct sctp_tcb;
207 struct sctphdr;
208
209 void* sctp_ctlinput(int, const struct sockaddr *, void *);
210 int sctp_ctloutput(int, struct socket *, struct sockopt *);
211 void sctp_input(struct mbuf *, ... );
212 void sctp_drain(void);
213 void sctp_init(void);
214 int sctp_shutdown(struct socket *);
215 void sctp_notify(struct sctp_inpcb *, int, struct sctphdr *,
216 struct sockaddr *, struct sctp_tcb *,
217 struct sctp_nets *);
218 int sctp_rcvd(struct socket *, int, struct lwp *);
219 int sctp_send(struct socket *, struct mbuf *, struct sockaddr *,
220 struct mbuf *, struct lwp *);
221
222 #if defined(INET6)
223 void ip_2_ip6_hdr(struct ip6_hdr *, struct ip *);
224 #endif
225
226 int sctp_bindx(struct socket *, int, struct sockaddr_storage *,
227 int, int, struct lwp *);
228
229 /* can't use sctp_assoc_t here */
230 int sctp_peeloff(struct socket *, struct socket *, int, vaddr_t, int *);
231
232
233 sctp_assoc_t sctp_getassocid(struct sockaddr *);
234 int sctp_sockaddr(struct socket *, struct sockaddr *);
235 int sctp_peeraddr(struct socket *, struct sockaddr *);
236 int sctp_listen(struct socket *, struct lwp *);
237 int sctp_accept(struct socket *, struct sockaddr *);
238
239 int sctp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
240
241 #endif /* _KERNEL */
242
243 #endif /* !_NETINET_SCTP_VAR_H_ */
244