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