xref: /netbsd-src/sys/netinet/sctp_var.h (revision 7cd04caf486a92c434ec2dbb98b908dede1b2a2e)
18c2654abSrjs /*	$KAME: sctp_var.h,v 1.24 2005/03/06 16:04:19 itojun Exp $	*/
2*7cd04cafSrjs /*	$NetBSD: sctp_var.h,v 1.4 2020/04/27 19:21:43 rjs Exp $ */
38c2654abSrjs 
48c2654abSrjs /*
58c2654abSrjs  * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc.
68c2654abSrjs  * All rights reserved.
78c2654abSrjs  *
88c2654abSrjs  * Redistribution and use in source and binary forms, with or without
98c2654abSrjs  * modification, are permitted provided that the following conditions
108c2654abSrjs  * are met:
118c2654abSrjs  * 1. Redistributions of source code must retain the above copyright
128c2654abSrjs  *    notice, this list of conditions and the following disclaimer.
138c2654abSrjs  * 2. Redistributions in binary form must reproduce the above copyright
148c2654abSrjs  *    notice, this list of conditions and the following disclaimer in the
158c2654abSrjs  *    documentation and/or other materials provided with the distribution.
168c2654abSrjs  * 3. All advertising materials mentioning features or use of this software
178c2654abSrjs  *    must display the following acknowledgement:
188c2654abSrjs  *      This product includes software developed by Cisco Systems, Inc.
198c2654abSrjs  * 4. Neither the name of the project nor the names of its contributors
208c2654abSrjs  *    may be used to endorse or promote products derived from this software
218c2654abSrjs  *    without specific prior written permission.
228c2654abSrjs  *
238c2654abSrjs  * THIS SOFTWARE IS PROVIDED BY CISCO SYSTEMS AND CONTRIBUTORS ``AS IS'' AND
248c2654abSrjs  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
258c2654abSrjs  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
268c2654abSrjs  * ARE DISCLAIMED.  IN NO EVENT SHALL CISCO SYSTEMS OR CONTRIBUTORS BE LIABLE
278c2654abSrjs  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
288c2654abSrjs  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
298c2654abSrjs  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
308c2654abSrjs  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
318c2654abSrjs  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
328c2654abSrjs  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
338c2654abSrjs  * SUCH DAMAGE.
348c2654abSrjs  */
358c2654abSrjs 
368c2654abSrjs #ifndef _NETINET_SCTP_VAR_H_
378c2654abSrjs #define _NETINET_SCTP_VAR_H_
388c2654abSrjs 
398c2654abSrjs #include <sys/socketvar.h>
408c2654abSrjs #include <netinet/sctp_uio.h>
418c2654abSrjs 
428c2654abSrjs /* SCTP Kernel structures */
438c2654abSrjs 
448c2654abSrjs /*
458c2654abSrjs  * Names for SCTP sysctl objects
468c2654abSrjs  */
478c2654abSrjs #ifndef __APPLE__
488c2654abSrjs #define	SCTPCTL_MAXDGRAM	    1	/* max datagram size */
498c2654abSrjs #define	SCTPCTL_RECVSPACE	    2	/* default receive buffer space */
508c2654abSrjs #define SCTPCTL_AUTOASCONF          3   /* auto asconf enable/disable flag */
518c2654abSrjs #define SCTPCTL_ECN_ENABLE          4	/* Is ecn allowed */
528c2654abSrjs #define SCTPCTL_ECN_NONCE           5   /* Is ecn nonce allowed */
538c2654abSrjs #define SCTPCTL_STRICT_SACK         6	/* strictly require sack'd TSN's to be
548c2654abSrjs 					 * smaller than sndnxt.
558c2654abSrjs 					 */
568c2654abSrjs #define SCTPCTL_NOCSUM_LO           7   /* Require that the Loopback NOT have
578c2654abSrjs 				         * the crc32 checksum on packets routed over
588c2654abSrjs 					 * it.
598c2654abSrjs 				         */
608c2654abSrjs #define SCTPCTL_STRICT_INIT         8
618c2654abSrjs #define SCTPCTL_PEER_CHK_OH         9
628c2654abSrjs #define SCTPCTL_MAXBURST            10
638c2654abSrjs #define SCTPCTL_MAXCHUNKONQ         11
648c2654abSrjs #define SCTPCTL_DELAYED_SACK        12
658c2654abSrjs #define SCTPCTL_HB_INTERVAL         13
668c2654abSrjs #define SCTPCTL_PMTU_RAISE          14
678c2654abSrjs #define SCTPCTL_SHUTDOWN_GUARD      15
688c2654abSrjs #define SCTPCTL_SECRET_LIFETIME     16
698c2654abSrjs #define SCTPCTL_RTO_MAX             17
708c2654abSrjs #define SCTPCTL_RTO_MIN             18
718c2654abSrjs #define SCTPCTL_RTO_INITIAL         19
728c2654abSrjs #define SCTPCTL_INIT_RTO_MAX        20
738c2654abSrjs #define SCTPCTL_COOKIE_LIFE         21
748c2654abSrjs #define SCTPCTL_INIT_RTX_MAX        22
758c2654abSrjs #define SCTPCTL_ASSOC_RTX_MAX       23
768c2654abSrjs #define SCTPCTL_PATH_RTX_MAX        24
778c2654abSrjs #define SCTPCTL_NR_OUTGOING_STREAMS 25
788c2654abSrjs #ifdef SCTP_DEBUG
798c2654abSrjs #define SCTPCTL_DEBUG               26
808c2654abSrjs #endif
818c2654abSrjs 
828c2654abSrjs #endif
838c2654abSrjs 
848c2654abSrjs #if defined(_KERNEL)
858c2654abSrjs 
868c2654abSrjs extern const struct pr_usrreqs sctp_usrreqs;
878c2654abSrjs 
888c2654abSrjs int sctp_usrreq(struct socket *, int, struct mbuf *, struct mbuf *,
898c2654abSrjs 		      struct mbuf *, struct lwp *);
908c2654abSrjs 
918c2654abSrjs #define	sctp_sbspace(sb) ((long) (((sb)->sb_hiwat > (sb)->sb_cc) ? ((sb)->sb_hiwat - (sb)->sb_cc) : 0))
928c2654abSrjs 
938c2654abSrjs #define sctp_sbspace_sub(a,b) ((a > b) ? (a - b) : 0)
948c2654abSrjs 
958c2654abSrjs extern int	sctp_sendspace;
968c2654abSrjs extern int	sctp_recvspace;
978c2654abSrjs extern int      sctp_ecn;
988c2654abSrjs extern int      sctp_ecn_nonce;
998c2654abSrjs 
1008c2654abSrjs #define sctp_ucount_incr(val) { \
1018c2654abSrjs 	val++; \
1028c2654abSrjs }
1038c2654abSrjs 
1048c2654abSrjs #define sctp_ucount_decr(val) { \
1058c2654abSrjs 	if (val > 0) { \
1068c2654abSrjs 		val--; \
1078c2654abSrjs 	} else { \
1088c2654abSrjs 		val = 0; \
1098c2654abSrjs 	} \
1108c2654abSrjs }
1118c2654abSrjs 
1128c2654abSrjs #define sctp_flight_size_decrease(tp1) do { \
1138c2654abSrjs 	if (tp1->whoTo->flight_size >= tp1->book_size) \
1148c2654abSrjs 		tp1->whoTo->flight_size -= tp1->book_size; \
1158c2654abSrjs 	else \
1168c2654abSrjs 		tp1->whoTo->flight_size = 0; \
1178c2654abSrjs } while (0)
1188c2654abSrjs 
1198c2654abSrjs #define sctp_flight_size_increase(tp1) do { \
1208c2654abSrjs        (tp1)->whoTo->flight_size += (tp1)->book_size; \
1218c2654abSrjs } while (0)
1228c2654abSrjs 
1238c2654abSrjs #define sctp_total_flight_decrease(stcb, tp1) do { \
1248c2654abSrjs 	if (stcb->asoc.total_flight >= tp1->book_size) { \
1258c2654abSrjs 		stcb->asoc.total_flight -= tp1->book_size; \
1268c2654abSrjs 		if (stcb->asoc.total_flight_count > 0) \
1278c2654abSrjs 			stcb->asoc.total_flight_count--; \
1288c2654abSrjs 	} else { \
1298c2654abSrjs 		stcb->asoc.total_flight = 0; \
1308c2654abSrjs 		stcb->asoc.total_flight_count = 0; \
1318c2654abSrjs 	} \
1328c2654abSrjs } while (0)
1338c2654abSrjs 
1348c2654abSrjs #define sctp_total_flight_increase(stcb, tp1) do { \
1358c2654abSrjs        (stcb)->asoc.total_flight_count++; \
1368c2654abSrjs        (stcb)->asoc.total_flight += (tp1)->book_size; \
1378c2654abSrjs } while (0)
1388c2654abSrjs 
1398c2654abSrjs 
1408c2654abSrjs struct sctp_nets;
1418c2654abSrjs struct sctp_inpcb;
1428c2654abSrjs struct sctp_tcb;
1438c2654abSrjs struct sctphdr;
1448c2654abSrjs 
1458c2654abSrjs void*	sctp_ctlinput(int, const struct sockaddr *, void *);
1468c2654abSrjs int	sctp_ctloutput(int, struct socket *, struct sockopt *);
14715652348Smaxv void	sctp_input(struct mbuf *, int, int);
1488c2654abSrjs void	sctp_drain(void);
1498c2654abSrjs void	sctp_init(void);
1508c2654abSrjs int	sctp_shutdown(struct socket *);
1518c2654abSrjs void	sctp_notify(struct sctp_inpcb *, int, struct sctphdr *,
1528c2654abSrjs 			 struct sockaddr *, struct sctp_tcb *,
1538c2654abSrjs 			 struct sctp_nets *);
1548c2654abSrjs int sctp_rcvd(struct socket *, int, struct lwp *);
1558c2654abSrjs int sctp_send(struct socket *, struct mbuf *, struct sockaddr *,
1568c2654abSrjs 		struct mbuf *, struct lwp *);
1578c2654abSrjs 
1588c2654abSrjs #if defined(INET6)
1598c2654abSrjs void ip_2_ip6_hdr(struct ip6_hdr *, struct ip *);
1608c2654abSrjs #endif
1618c2654abSrjs 
1628c2654abSrjs int sctp_bindx(struct socket *, int, struct sockaddr_storage *,
1638c2654abSrjs 	int, int, struct lwp *);
164*7cd04cafSrjs int sctp_do_connect_x(struct socket *, struct sctp_connectx_addrs *,
165*7cd04cafSrjs 	struct lwp *, int);
1668c2654abSrjs 
1678c2654abSrjs /* can't use sctp_assoc_t here */
1688c2654abSrjs int sctp_peeloff(struct socket *, struct socket *, int, vaddr_t, int *);
1698c2654abSrjs 
1708c2654abSrjs 
1718c2654abSrjs sctp_assoc_t sctp_getassocid(struct sockaddr *);
1728c2654abSrjs int sctp_sockaddr(struct socket *, struct sockaddr *);
1738c2654abSrjs int sctp_peeraddr(struct socket *, struct sockaddr *);
1748c2654abSrjs int sctp_listen(struct socket *, struct lwp *);
1758c2654abSrjs int sctp_accept(struct socket *, struct sockaddr *);
1768c2654abSrjs 
1778c2654abSrjs int sctp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
1788c2654abSrjs 
1798c2654abSrjs #endif /* _KERNEL */
1808c2654abSrjs 
1818c2654abSrjs #endif /* !_NETINET_SCTP_VAR_H_ */
182