1163953Srrs/*- 2169382Srrs * Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved. 3235828Stuexen * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved. 4235828Stuexen * Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved. 5163953Srrs * 6163953Srrs * Redistribution and use in source and binary forms, with or without 7163953Srrs * modification, are permitted provided that the following conditions are met: 8163953Srrs * 9163953Srrs * a) Redistributions of source code must retain the above copyright notice, 10228653Stuexen * this list of conditions and the following disclaimer. 11163953Srrs * 12163953Srrs * b) Redistributions in binary form must reproduce the above copyright 13163953Srrs * notice, this list of conditions and the following disclaimer in 14228653Stuexen * the documentation and/or other materials provided with the distribution. 15163953Srrs * 16163953Srrs * c) Neither the name of Cisco Systems, Inc. nor the names of its 17163953Srrs * contributors may be used to endorse or promote products derived 18163953Srrs * from this software without specific prior written permission. 19163953Srrs * 20163953Srrs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21163953Srrs * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22163953Srrs * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23163953Srrs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24163953Srrs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25163953Srrs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26163953Srrs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27163953Srrs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28163953Srrs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29163953Srrs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30163953Srrs * THE POSSIBILITY OF SUCH DAMAGE. 31163953Srrs */ 32163953Srrs 33163953Srrs#include <sys/cdefs.h> 34163953Srrs__FBSDID("$FreeBSD: stable/11/sys/netinet/sctp_output.h 360731 2020-05-07 01:13:02Z tuexen $"); 35163953Srrs 36235828Stuexen#ifndef _NETINET_SCTP_OUTPUT_H_ 37235828Stuexen#define _NETINET_SCTP_OUTPUT_H_ 38163953Srrs 39163953Srrs#include <netinet/sctp_header.h> 40163953Srrs 41180387Srrs#if defined(_KERNEL) || defined(__Userspace__) 42167598Srrs 43167598Srrs 44167598Srrsstruct mbuf * 45167598Srrssctp_add_addresses_to_i_ia(struct sctp_inpcb *inp, 46221904Stuexen struct sctp_tcb *stcb, 47167598Srrs struct sctp_scoping *scope, 48167598Srrs struct mbuf *m_at, 49244021Stuexen int cnt_inits_to, 50310773Stuexen uint16_t *padding_len, uint16_t *chunk_len); 51167598Srrs 52167598Srrs 53167598Srrsint sctp_is_addr_restricted(struct sctp_tcb *, struct sctp_ifa *); 54167598Srrs 55167598Srrs 56167598Srrsint 57167598Srrssctp_is_address_in_scope(struct sctp_ifa *ifa, 58246595Stuexen struct sctp_scoping *scope, 59167598Srrs int do_update); 60246595Stuexen 61167598Srrsint 62167598Srrs sctp_is_addr_in_ep(struct sctp_inpcb *inp, struct sctp_ifa *ifa); 63167598Srrs 64167598Srrsstruct sctp_ifa * 65167598Srrssctp_source_address_selection(struct sctp_inpcb *inp, 66167598Srrs struct sctp_tcb *stcb, 67310773Stuexen sctp_route_t *ro, struct sctp_nets *net, 68167598Srrs int non_asoc_addr_ok, uint32_t vrf_id); 69167598Srrs 70171990Srrsint 71310773Stuexen sctp_v6src_match_nexthop(struct sockaddr_in6 *src6, sctp_route_t *ro); 72171990Srrsint 73310773Stuexen sctp_v4src_match_nexthop(struct sctp_ifa *sifa, sctp_route_t *ro); 74167598Srrs 75347154Stuexenvoid 76172090Srrssctp_send_initiate(struct sctp_inpcb *, struct sctp_tcb *, int 77172090Srrs#if !defined(__APPLE__) && !defined(SCTP_SO_LOCK_TESTING) 78172090Srrs SCTP_UNUSED 79172090Srrs#endif 80172090Srrs); 81163953Srrs 82163953Srrsvoid 83295072Stuexensctp_send_initiate_ack(struct sctp_inpcb *, struct sctp_tcb *, 84295072Stuexen struct sctp_nets *, struct mbuf *, 85237715Stuexen int, int, 86237715Stuexen struct sockaddr *, struct sockaddr *, 87237715Stuexen struct sctphdr *, struct sctp_init_chunk *, 88237049Stuexen uint8_t, uint32_t, 89332201Stuexen uint32_t, uint16_t); 90163953Srrs 91163953Srrsstruct mbuf * 92163953Srrssctp_arethere_unrecognized_parameters(struct mbuf *, int, int *, 93360731Stuexen struct sctp_chunkhdr *, int *, int *); 94163953Srrsvoid sctp_queue_op_err(struct sctp_tcb *, struct mbuf *); 95163953Srrs 96163953Srrsint 97360731Stuexensctp_send_cookie_echo(struct mbuf *, int, int, struct sctp_tcb *, 98163953Srrs struct sctp_nets *); 99163953Srrs 100169378Srrsvoid sctp_send_cookie_ack(struct sctp_tcb *); 101169378Srrs 102163953Srrsvoid 103163953Srrssctp_send_heartbeat_ack(struct sctp_tcb *, struct mbuf *, int, int, 104163953Srrs struct sctp_nets *); 105163953Srrs 106189121Srrsvoid 107189121Srrssctp_remove_from_wheel(struct sctp_tcb *stcb, 108189121Srrs struct sctp_association *asoc, 109189121Srrs struct sctp_stream_out *strq, int holds_lock); 110163953Srrs 111189121Srrs 112169378Srrsvoid sctp_send_shutdown(struct sctp_tcb *, struct sctp_nets *); 113163953Srrs 114169378Srrsvoid sctp_send_shutdown_ack(struct sctp_tcb *, struct sctp_nets *); 115163953Srrs 116204141Stuexenvoid sctp_send_shutdown_complete(struct sctp_tcb *, struct sctp_nets *, int); 117163953Srrs 118347154Stuexenvoid 119237715Stuexensctp_send_shutdown_complete2(struct sockaddr *, struct sockaddr *, 120237715Stuexen struct sctphdr *, 121284515Stuexen uint8_t, uint32_t, uint16_t, 122179157Srrs uint32_t, uint16_t); 123163953Srrs 124172190Srrsvoid sctp_send_asconf(struct sctp_tcb *, struct sctp_nets *, int addr_locked); 125163953Srrs 126171990Srrsvoid sctp_send_asconf_ack(struct sctp_tcb *); 127163953Srrs 128163953Srrsint sctp_get_frag_point(struct sctp_tcb *, struct sctp_association *); 129163953Srrs 130163953Srrsvoid sctp_toss_old_cookies(struct sctp_tcb *, struct sctp_association *); 131163953Srrs 132163953Srrsvoid sctp_toss_old_asconf(struct sctp_tcb *); 133163953Srrs 134163953Srrsvoid sctp_fix_ecn_echo(struct sctp_association *); 135163953Srrs 136212712Stuexenvoid sctp_move_chunks_from_net(struct sctp_tcb *stcb, struct sctp_nets *net); 137212712Stuexen 138332169Stuexen 139332169Stuexen#define SCTP_DATA_CHUNK_OVERHEAD(stcb) ((stcb)->asoc.idata_supported ? \ 140332169Stuexen sizeof(struct sctp_idata_chunk) : \ 141332169Stuexen sizeof(struct sctp_data_chunk)) 142332169Stuexen 143163953Srrsint 144163953Srrssctp_output(struct sctp_inpcb *, struct mbuf *, struct sockaddr *, 145163953Srrs struct mbuf *, struct thread *, int); 146163953Srrs 147347154Stuexenvoid 148172090Srrssctp_chunk_output(struct sctp_inpcb *, struct sctp_tcb *, int, int 149172090Srrs#if !defined(__APPLE__) && !defined(SCTP_SO_LOCK_TESTING) 150172090Srrs SCTP_UNUSED 151172090Srrs#endif 152172090Srrs); 153347154Stuexenvoid 154172090Srrssctp_send_abort_tcb(struct sctp_tcb *, struct mbuf *, int 155172090Srrs#if !defined(__APPLE__) && !defined(SCTP_SO_LOCK_TESTING) 156172090Srrs SCTP_UNUSED 157172090Srrs#endif 158172090Srrs); 159163953Srrs 160163953Srrsvoid send_forward_tsn(struct sctp_tcb *, struct sctp_association *); 161163953Srrs 162221627Stuexenvoid sctp_send_sack(struct sctp_tcb *, int); 163163953Srrs 164224641Stuexenvoid sctp_send_hb(struct sctp_tcb *, struct sctp_nets *, int); 165163953Srrs 166163953Srrsvoid sctp_send_ecn_echo(struct sctp_tcb *, struct sctp_nets *, uint32_t); 167163953Srrs 168163953Srrs 169163953Srrsvoid 170163953Srrssctp_send_packet_dropped(struct sctp_tcb *, struct sctp_nets *, struct mbuf *, 171237542Stuexen int, int, int); 172163953Srrs 173163953Srrs 174163953Srrs 175218072Srrsvoid sctp_send_cwr(struct sctp_tcb *, struct sctp_nets *, uint32_t, uint8_t); 176163953Srrs 177163953Srrs 178163953Srrsvoid 179285792Srrs sctp_add_stream_reset_result(struct sctp_tmit_chunk *, uint32_t, uint32_t); 180163953Srrs 181163953Srrsvoid 182285792Srrssctp_send_deferred_reset_response(struct sctp_tcb *, 183285792Srrs struct sctp_stream_reset_list *, 184285792Srrs int); 185163953Srrs 186163953Srrsvoid 187240826Stuexensctp_add_stream_reset_result_tsn(struct sctp_tmit_chunk *, 188240826Stuexen uint32_t, uint32_t, uint32_t, uint32_t); 189285792Srrsint 190285837Srrs sctp_send_stream_reset_out_if_possible(struct sctp_tcb *, int); 191163953Srrs 192163953Srrsint 193285792Srrssctp_send_str_reset_req(struct sctp_tcb *, uint16_t, uint16_t *, 194272751Stuexen uint8_t, uint8_t, uint8_t, uint16_t, uint16_t, uint8_t); 195163953Srrs 196163953Srrsvoid 197237715Stuexensctp_send_abort(struct mbuf *, int, struct sockaddr *, struct sockaddr *, 198237715Stuexen struct sctphdr *, uint32_t, struct mbuf *, 199284515Stuexen uint8_t, uint32_t, uint16_t, 200237049Stuexen uint32_t, uint16_t); 201163953Srrs 202347154Stuexenvoid 203237715Stuexensctp_send_operr_to(struct sockaddr *, struct sockaddr *, 204237715Stuexen struct sctphdr *, uint32_t, struct mbuf *, 205284515Stuexen uint8_t, uint32_t, uint16_t, 206237049Stuexen uint32_t, uint16_t); 207163953Srrs 208180387Srrs#endif /* _KERNEL || __Userspace__ */ 209180387Srrs 210237049Stuexen#if defined(_KERNEL) || defined(__Userspace__) 211163953Srrsint 212163953Srrssctp_sosend(struct socket *so, 213163953Srrs struct sockaddr *addr, 214163953Srrs struct uio *uio, 215163953Srrs struct mbuf *top, 216163953Srrs struct mbuf *control, 217163953Srrs int flags, 218163953Srrs struct thread *p 219163953Srrs); 220163953Srrs 221163953Srrs#endif 222163953Srrs#endif 223