1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/sctp/src/netinet/sctp_sysctl.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1694 @@ 1.4 +/*- 1.5 + * Copyright (c) 2007, by Cisco Systems, Inc. All rights reserved. 1.6 + * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved. 1.7 + * Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved. 1.8 + * 1.9 + * Redistribution and use in source and binary forms, with or without 1.10 + * modification, are permitted provided that the following conditions are met: 1.11 + * 1.12 + * a) Redistributions of source code must retain the above copyright notice, 1.13 + * this list of conditions and the following disclaimer. 1.14 + * 1.15 + * b) Redistributions in binary form must reproduce the above copyright 1.16 + * notice, this list of conditions and the following disclaimer in 1.17 + * the documentation and/or other materials provided with the distribution. 1.18 + * 1.19 + * c) Neither the name of Cisco Systems, Inc. nor the names of its 1.20 + * contributors may be used to endorse or promote products derived 1.21 + * from this software without specific prior written permission. 1.22 + * 1.23 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1.24 + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1.25 + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.26 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 1.27 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.28 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.29 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.30 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.31 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.32 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 1.33 + * THE POSSIBILITY OF SUCH DAMAGE. 1.34 + */ 1.35 + 1.36 +#ifdef __FreeBSD__ 1.37 +#include <sys/cdefs.h> 1.38 +__FBSDID("$FreeBSD: head/sys/netinet/sctp_sysctl.c 254672 2013-08-22 20:29:57Z tuexen $"); 1.39 +#endif 1.40 + 1.41 +#include <netinet/sctp_os.h> 1.42 +#include <netinet/sctp.h> 1.43 +#include <netinet/sctp_constants.h> 1.44 +#include <netinet/sctp_sysctl.h> 1.45 +#include <netinet/sctp_pcb.h> 1.46 +#include <netinet/sctputil.h> 1.47 +#include <netinet/sctp_output.h> 1.48 +#ifdef __FreeBSD__ 1.49 +#include <sys/smp.h> 1.50 +#endif 1.51 +#if defined(__APPLE__) 1.52 +#include <netinet/sctp_bsd_addr.h> 1.53 +#endif 1.54 + 1.55 +/* 1.56 + * sysctl tunable variables 1.57 + */ 1.58 + 1.59 +void 1.60 +sctp_init_sysctls() 1.61 +{ 1.62 + SCTP_BASE_SYSCTL(sctp_sendspace) = SCTPCTL_MAXDGRAM_DEFAULT; 1.63 + SCTP_BASE_SYSCTL(sctp_recvspace) = SCTPCTL_RECVSPACE_DEFAULT; 1.64 + SCTP_BASE_SYSCTL(sctp_auto_asconf) = SCTPCTL_AUTOASCONF_DEFAULT; 1.65 + SCTP_BASE_SYSCTL(sctp_multiple_asconfs) = SCTPCTL_MULTIPLEASCONFS_DEFAULT; 1.66 + SCTP_BASE_SYSCTL(sctp_ecn_enable) = SCTPCTL_ECN_ENABLE_DEFAULT; 1.67 + SCTP_BASE_SYSCTL(sctp_strict_sacks) = SCTPCTL_STRICT_SACKS_DEFAULT; 1.68 +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 800000) 1.69 +#if !defined(SCTP_WITH_NO_CSUM) 1.70 + SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback) = SCTPCTL_LOOPBACK_NOCSUM_DEFAULT; 1.71 +#endif 1.72 +#endif 1.73 + SCTP_BASE_SYSCTL(sctp_peer_chunk_oh) = SCTPCTL_PEER_CHKOH_DEFAULT; 1.74 + SCTP_BASE_SYSCTL(sctp_max_burst_default) = SCTPCTL_MAXBURST_DEFAULT; 1.75 + SCTP_BASE_SYSCTL(sctp_fr_max_burst_default) = SCTPCTL_FRMAXBURST_DEFAULT; 1.76 + SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue) = SCTPCTL_MAXCHUNKS_DEFAULT; 1.77 + SCTP_BASE_SYSCTL(sctp_hashtblsize) = SCTPCTL_TCBHASHSIZE_DEFAULT; 1.78 + SCTP_BASE_SYSCTL(sctp_pcbtblsize) = SCTPCTL_PCBHASHSIZE_DEFAULT; 1.79 + SCTP_BASE_SYSCTL(sctp_min_split_point) = SCTPCTL_MIN_SPLIT_POINT_DEFAULT; 1.80 + SCTP_BASE_SYSCTL(sctp_chunkscale) = SCTPCTL_CHUNKSCALE_DEFAULT; 1.81 + SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default) = SCTPCTL_DELAYED_SACK_TIME_DEFAULT; 1.82 + SCTP_BASE_SYSCTL(sctp_sack_freq_default) = SCTPCTL_SACK_FREQ_DEFAULT; 1.83 + SCTP_BASE_SYSCTL(sctp_system_free_resc_limit) = SCTPCTL_SYS_RESOURCE_DEFAULT; 1.84 + SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit) = SCTPCTL_ASOC_RESOURCE_DEFAULT; 1.85 + SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default) = SCTPCTL_HEARTBEAT_INTERVAL_DEFAULT; 1.86 + SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default) = SCTPCTL_PMTU_RAISE_TIME_DEFAULT; 1.87 + SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default) = SCTPCTL_SHUTDOWN_GUARD_TIME_DEFAULT; 1.88 + SCTP_BASE_SYSCTL(sctp_secret_lifetime_default) = SCTPCTL_SECRET_LIFETIME_DEFAULT; 1.89 + SCTP_BASE_SYSCTL(sctp_rto_max_default) = SCTPCTL_RTO_MAX_DEFAULT; 1.90 + SCTP_BASE_SYSCTL(sctp_rto_min_default) = SCTPCTL_RTO_MIN_DEFAULT; 1.91 + SCTP_BASE_SYSCTL(sctp_rto_initial_default) = SCTPCTL_RTO_INITIAL_DEFAULT; 1.92 + SCTP_BASE_SYSCTL(sctp_init_rto_max_default) = SCTPCTL_INIT_RTO_MAX_DEFAULT; 1.93 + SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default) = SCTPCTL_VALID_COOKIE_LIFE_DEFAULT; 1.94 + SCTP_BASE_SYSCTL(sctp_init_rtx_max_default) = SCTPCTL_INIT_RTX_MAX_DEFAULT; 1.95 + SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default) = SCTPCTL_ASSOC_RTX_MAX_DEFAULT; 1.96 + SCTP_BASE_SYSCTL(sctp_path_rtx_max_default) = SCTPCTL_PATH_RTX_MAX_DEFAULT; 1.97 + SCTP_BASE_SYSCTL(sctp_path_pf_threshold) = SCTPCTL_PATH_PF_THRESHOLD_DEFAULT; 1.98 + SCTP_BASE_SYSCTL(sctp_add_more_threshold) = SCTPCTL_ADD_MORE_ON_OUTPUT_DEFAULT; 1.99 + SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default) = SCTPCTL_INCOMING_STREAMS_DEFAULT; 1.100 + SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default) = SCTPCTL_OUTGOING_STREAMS_DEFAULT; 1.101 + SCTP_BASE_SYSCTL(sctp_cmt_on_off) = SCTPCTL_CMT_ON_OFF_DEFAULT; 1.102 + /* EY */ 1.103 + SCTP_BASE_SYSCTL(sctp_nr_sack_on_off) = SCTPCTL_NR_SACK_ON_OFF_DEFAULT; 1.104 + SCTP_BASE_SYSCTL(sctp_cmt_use_dac) = SCTPCTL_CMT_USE_DAC_DEFAULT; 1.105 + SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst) = SCTPCTL_CWND_MAXBURST_DEFAULT; 1.106 + SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk) = SCTPCTL_ASCONF_AUTH_NOCHK_DEFAULT; 1.107 + SCTP_BASE_SYSCTL(sctp_auth_disable) = SCTPCTL_AUTH_DISABLE_DEFAULT; 1.108 + SCTP_BASE_SYSCTL(sctp_nat_friendly) = SCTPCTL_NAT_FRIENDLY_DEFAULT; 1.109 + SCTP_BASE_SYSCTL(sctp_L2_abc_variable) = SCTPCTL_ABC_L_VAR_DEFAULT; 1.110 + SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count) = SCTPCTL_MAX_CHAINED_MBUFS_DEFAULT; 1.111 + SCTP_BASE_SYSCTL(sctp_do_drain) = SCTPCTL_DO_SCTP_DRAIN_DEFAULT; 1.112 + SCTP_BASE_SYSCTL(sctp_hb_maxburst) = SCTPCTL_HB_MAX_BURST_DEFAULT; 1.113 + SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit) = SCTPCTL_ABORT_AT_LIMIT_DEFAULT; 1.114 + SCTP_BASE_SYSCTL(sctp_strict_data_order) = SCTPCTL_STRICT_DATA_ORDER_DEFAULT; 1.115 + SCTP_BASE_SYSCTL(sctp_min_residual) = SCTPCTL_MIN_RESIDUAL_DEFAULT; 1.116 + SCTP_BASE_SYSCTL(sctp_max_retran_chunk) = SCTPCTL_MAX_RETRAN_CHUNK_DEFAULT; 1.117 + SCTP_BASE_SYSCTL(sctp_logging_level) = SCTPCTL_LOGGING_LEVEL_DEFAULT; 1.118 + /* JRS - Variable for default congestion control module */ 1.119 + SCTP_BASE_SYSCTL(sctp_default_cc_module) = SCTPCTL_DEFAULT_CC_MODULE_DEFAULT; 1.120 + /* RS - Variable for default stream scheduling module */ 1.121 + SCTP_BASE_SYSCTL(sctp_default_ss_module) = SCTPCTL_DEFAULT_SS_MODULE_DEFAULT; 1.122 + SCTP_BASE_SYSCTL(sctp_default_frag_interleave) = SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DEFAULT; 1.123 + SCTP_BASE_SYSCTL(sctp_mobility_base) = SCTPCTL_MOBILITY_BASE_DEFAULT; 1.124 + SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff) = SCTPCTL_MOBILITY_FASTHANDOFF_DEFAULT; 1.125 + SCTP_BASE_SYSCTL(sctp_vtag_time_wait) = SCTPCTL_TIME_WAIT_DEFAULT; 1.126 + SCTP_BASE_SYSCTL(sctp_buffer_splitting) = SCTPCTL_BUFFER_SPLITTING_DEFAULT; 1.127 + SCTP_BASE_SYSCTL(sctp_initial_cwnd) = SCTPCTL_INITIAL_CWND_DEFAULT; 1.128 + SCTP_BASE_SYSCTL(sctp_rttvar_bw) = SCTPCTL_RTTVAR_BW_DEFAULT; 1.129 + SCTP_BASE_SYSCTL(sctp_rttvar_rtt) = SCTPCTL_RTTVAR_RTT_DEFAULT; 1.130 + SCTP_BASE_SYSCTL(sctp_rttvar_eqret) = SCTPCTL_RTTVAR_EQRET_DEFAULT; 1.131 + SCTP_BASE_SYSCTL(sctp_steady_step) = SCTPCTL_RTTVAR_STEADYS_DEFAULT; 1.132 + SCTP_BASE_SYSCTL(sctp_use_dccc_ecn) = SCTPCTL_RTTVAR_DCCCECN_DEFAULT; 1.133 + SCTP_BASE_SYSCTL(sctp_blackhole) = SCTPCTL_BLACKHOLE_DEFAULT; 1.134 + 1.135 +#if defined(SCTP_LOCAL_TRACE_BUF) 1.136 +#if defined(__Windows__) 1.137 + /* On Windows, the resource for global variables is limited. */ 1.138 + MALLOC(SCTP_BASE_SYSCTL(sctp_log), struct sctp_log *, sizeof(struct sctp_log), M_SYSCTL, M_ZERO); 1.139 +#else 1.140 + memset(&SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log)); 1.141 +#endif 1.142 +#endif 1.143 + SCTP_BASE_SYSCTL(sctp_udp_tunneling_port) = SCTPCTL_UDP_TUNNELING_PORT_DEFAULT; 1.144 + SCTP_BASE_SYSCTL(sctp_enable_sack_immediately) = SCTPCTL_SACK_IMMEDIATELY_ENABLE_DEFAULT; 1.145 + SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly) = SCTPCTL_NAT_FRIENDLY_INITS_DEFAULT; 1.146 +#if defined(SCTP_DEBUG) 1.147 + SCTP_BASE_SYSCTL(sctp_debug_on) = SCTPCTL_DEBUG_DEFAULT; 1.148 +#endif 1.149 +#if defined(__APPLE__) 1.150 + SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces) = SCTPCTL_IGNORE_VMWARE_INTERFACES_DEFAULT; 1.151 + SCTP_BASE_SYSCTL(sctp_main_timer) = SCTPCTL_MAIN_TIMER_DEFAULT; 1.152 + SCTP_BASE_SYSCTL(sctp_addr_watchdog_limit) = SCTPCTL_ADDR_WATCHDOG_LIMIT_DEFAULT; 1.153 + SCTP_BASE_SYSCTL(sctp_vtag_watchdog_limit) = SCTPCTL_VTAG_WATCHDOG_LIMIT_DEFAULT; 1.154 +#endif 1.155 +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) 1.156 + SCTP_BASE_SYSCTL(sctp_output_unlocked) = SCTPCTL_OUTPUT_UNLOCKED_DEFAULT; 1.157 +#endif 1.158 +} 1.159 + 1.160 +#if defined(__Windows__) 1.161 +void 1.162 +sctp_finish_sysctls() 1.163 +{ 1.164 +#if defined(SCTP_LOCAL_TRACE_BUF) 1.165 + if (SCTP_BASE_SYSCTL(sctp_log) != NULL) { 1.166 + FREE(SCTP_BASE_SYSCTL(sctp_log), M_SYSCTL); 1.167 + SCTP_BASE_SYSCTL(sctp_log) = NULL; 1.168 + } 1.169 +#endif 1.170 +} 1.171 +#endif 1.172 + 1.173 +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__Windows__) 1.174 +/* It returns an upper limit. No filtering is done here */ 1.175 +static unsigned int 1.176 +number_of_addresses(struct sctp_inpcb *inp) 1.177 +{ 1.178 + unsigned int cnt; 1.179 + struct sctp_vrf *vrf; 1.180 + struct sctp_ifn *sctp_ifn; 1.181 + struct sctp_ifa *sctp_ifa; 1.182 + struct sctp_laddr *laddr; 1.183 + 1.184 + cnt = 0; 1.185 + /* neither Mac OS X nor FreeBSD support mulitple routing functions */ 1.186 + if ((vrf = sctp_find_vrf(inp->def_vrf_id)) == NULL) { 1.187 + return (0); 1.188 + } 1.189 + if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) { 1.190 + LIST_FOREACH(sctp_ifn, &vrf->ifnlist, next_ifn) { 1.191 + LIST_FOREACH(sctp_ifa, &sctp_ifn->ifalist, next_ifa) { 1.192 + switch (sctp_ifa->address.sa.sa_family) { 1.193 +#ifdef INET 1.194 + case AF_INET: 1.195 +#endif 1.196 +#ifdef INET6 1.197 + case AF_INET6: 1.198 +#endif 1.199 + cnt++; 1.200 + break; 1.201 + default: 1.202 + break; 1.203 + } 1.204 + } 1.205 + } 1.206 + } else { 1.207 + LIST_FOREACH(laddr, &inp->sctp_addr_list, sctp_nxt_addr) { 1.208 + switch (laddr->ifa->address.sa.sa_family) { 1.209 +#ifdef INET 1.210 + case AF_INET: 1.211 +#endif 1.212 +#ifdef INET6 1.213 + case AF_INET6: 1.214 +#endif 1.215 + cnt++; 1.216 + break; 1.217 + default: 1.218 + break; 1.219 + } 1.220 + } 1.221 + } 1.222 + return (cnt); 1.223 +} 1.224 + 1.225 +static int 1.226 +copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sysctl_req *req) 1.227 +{ 1.228 + struct sctp_ifn *sctp_ifn; 1.229 + struct sctp_ifa *sctp_ifa; 1.230 + int loopback_scope, ipv4_local_scope, local_scope, site_scope; 1.231 + int ipv4_addr_legal, ipv6_addr_legal; 1.232 +#if defined(__Userspace__) 1.233 + int conn_addr_legal; 1.234 +#endif 1.235 + struct sctp_vrf *vrf; 1.236 + struct xsctp_laddr xladdr; 1.237 + struct sctp_laddr *laddr; 1.238 + int error; 1.239 + 1.240 + /* Turn on all the appropriate scope */ 1.241 + if (stcb) { 1.242 + /* use association specific values */ 1.243 + loopback_scope = stcb->asoc.scope.loopback_scope; 1.244 + ipv4_local_scope = stcb->asoc.scope.ipv4_local_scope; 1.245 + local_scope = stcb->asoc.scope.local_scope; 1.246 + site_scope = stcb->asoc.scope.site_scope; 1.247 + ipv4_addr_legal = stcb->asoc.scope.ipv4_addr_legal; 1.248 + ipv6_addr_legal = stcb->asoc.scope.ipv6_addr_legal; 1.249 +#if defined(__Userspace__) 1.250 + conn_addr_legal = stcb->asoc.scope.conn_addr_legal; 1.251 +#endif 1.252 + } else { 1.253 + /* Use generic values for endpoints. */ 1.254 + loopback_scope = 1; 1.255 + ipv4_local_scope = 1; 1.256 + local_scope = 1; 1.257 + site_scope = 1; 1.258 + if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) { 1.259 + ipv6_addr_legal = 1; 1.260 + if (SCTP_IPV6_V6ONLY(inp)) { 1.261 + ipv4_addr_legal = 0; 1.262 + } else { 1.263 + ipv4_addr_legal = 1; 1.264 + } 1.265 +#if defined(__Userspace__) 1.266 + conn_addr_legal = 0; 1.267 +#endif 1.268 + } else { 1.269 + ipv6_addr_legal = 0; 1.270 +#if defined(__Userspace__) 1.271 + if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_CONN) { 1.272 + conn_addr_legal = 1; 1.273 + ipv4_addr_legal = 0; 1.274 + } else { 1.275 + conn_addr_legal = 0; 1.276 + ipv4_addr_legal = 1; 1.277 + } 1.278 +#else 1.279 + ipv4_addr_legal = 1; 1.280 +#endif 1.281 + } 1.282 + } 1.283 + 1.284 + /* neither Mac OS X nor FreeBSD support mulitple routing functions */ 1.285 + if ((vrf = sctp_find_vrf(inp->def_vrf_id)) == NULL) { 1.286 + SCTP_INP_RUNLOCK(inp); 1.287 + SCTP_INP_INFO_RUNLOCK(); 1.288 + return (-1); 1.289 + } 1.290 + if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) { 1.291 + LIST_FOREACH(sctp_ifn, &vrf->ifnlist, next_ifn) { 1.292 + if ((loopback_scope == 0) && SCTP_IFN_IS_IFT_LOOP(sctp_ifn)) 1.293 + /* Skip loopback if loopback_scope not set */ 1.294 + continue; 1.295 + LIST_FOREACH(sctp_ifa, &sctp_ifn->ifalist, next_ifa) { 1.296 + if (stcb) { 1.297 + /* 1.298 + * ignore if blacklisted at 1.299 + * association level 1.300 + */ 1.301 + if (sctp_is_addr_restricted(stcb, sctp_ifa)) 1.302 + continue; 1.303 + } 1.304 + switch (sctp_ifa->address.sa.sa_family) { 1.305 +#ifdef INET 1.306 + case AF_INET: 1.307 + if (ipv4_addr_legal) { 1.308 + struct sockaddr_in *sin; 1.309 + 1.310 + sin = (struct sockaddr_in *)&sctp_ifa->address.sa; 1.311 + if (sin->sin_addr.s_addr == 0) 1.312 + continue; 1.313 + if ((ipv4_local_scope == 0) && (IN4_ISPRIVATE_ADDRESS(&sin->sin_addr))) 1.314 + continue; 1.315 + } else { 1.316 + continue; 1.317 + } 1.318 + break; 1.319 +#endif 1.320 +#ifdef INET6 1.321 + case AF_INET6: 1.322 + if (ipv6_addr_legal) { 1.323 + struct sockaddr_in6 *sin6; 1.324 + 1.325 +#if defined(SCTP_EMBEDDED_V6_SCOPE) && !defined(SCTP_KAME) 1.326 + struct sockaddr_in6 lsa6; 1.327 +#endif 1.328 + sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sa; 1.329 + if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) 1.330 + continue; 1.331 + if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) { 1.332 + if (local_scope == 0) 1.333 + continue; 1.334 +#if defined(SCTP_EMBEDDED_V6_SCOPE) 1.335 + if (sin6->sin6_scope_id == 0) { 1.336 +#ifdef SCTP_KAME 1.337 + /* bad link local address */ 1.338 + if (sa6_recoverscope(sin6) != 0) 1.339 + continue; 1.340 +#else 1.341 + lsa6 = *sin6; 1.342 + /* bad link local address */ 1.343 + if (in6_recoverscope(&lsa6, &lsa6.sin6_addr, NULL)) 1.344 + continue; 1.345 + sin6 = &lsa6; 1.346 +#endif /* SCTP_KAME */ 1.347 + } 1.348 +#endif /* SCTP_EMBEDDED_V6_SCOPE */ 1.349 + } 1.350 + if ((site_scope == 0) && (IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr))) 1.351 + continue; 1.352 + } else { 1.353 + continue; 1.354 + } 1.355 + break; 1.356 +#endif 1.357 +#if defined(__Userspace__) 1.358 + case AF_CONN: 1.359 + if (!conn_addr_legal) { 1.360 + continue; 1.361 + } 1.362 + break; 1.363 +#endif 1.364 + default: 1.365 + continue; 1.366 + } 1.367 + memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr)); 1.368 + memcpy((void *)&xladdr.address, (const void *)&sctp_ifa->address, sizeof(union sctp_sockstore)); 1.369 + SCTP_INP_RUNLOCK(inp); 1.370 + SCTP_INP_INFO_RUNLOCK(); 1.371 + error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr)); 1.372 + if (error) { 1.373 + return (error); 1.374 + } else { 1.375 + SCTP_INP_INFO_RLOCK(); 1.376 + SCTP_INP_RLOCK(inp); 1.377 + } 1.378 + } 1.379 + } 1.380 + } else { 1.381 + LIST_FOREACH(laddr, &inp->sctp_addr_list, sctp_nxt_addr) { 1.382 + /* ignore if blacklisted at association level */ 1.383 + if (stcb && sctp_is_addr_restricted(stcb, laddr->ifa)) 1.384 + continue; 1.385 + memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr)); 1.386 + memcpy((void *)&xladdr.address, (const void *)&laddr->ifa->address, sizeof(union sctp_sockstore)); 1.387 + xladdr.start_time.tv_sec = (uint32_t)laddr->start_time.tv_sec; 1.388 + xladdr.start_time.tv_usec = (uint32_t)laddr->start_time.tv_usec; 1.389 + SCTP_INP_RUNLOCK(inp); 1.390 + SCTP_INP_INFO_RUNLOCK(); 1.391 + error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr)); 1.392 + if (error) { 1.393 + return (error); 1.394 + } else { 1.395 + SCTP_INP_INFO_RLOCK(); 1.396 + SCTP_INP_RLOCK(inp); 1.397 + } 1.398 + } 1.399 + } 1.400 + memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr)); 1.401 + xladdr.last = 1; 1.402 + SCTP_INP_RUNLOCK(inp); 1.403 + SCTP_INP_INFO_RUNLOCK(); 1.404 + error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr)); 1.405 + 1.406 + if (error) { 1.407 + return (error); 1.408 + } else { 1.409 + SCTP_INP_INFO_RLOCK(); 1.410 + SCTP_INP_RLOCK(inp); 1.411 + return (0); 1.412 + } 1.413 +} 1.414 + 1.415 +/* 1.416 + * sysctl functions 1.417 + */ 1.418 +#if defined(__APPLE__) 1.419 +static int 1.420 +sctp_assoclist SYSCTL_HANDLER_ARGS 1.421 +{ 1.422 +#pragma unused(oidp, arg1, arg2) 1.423 +#else 1.424 +static int 1.425 +sctp_assoclist(SYSCTL_HANDLER_ARGS) 1.426 +{ 1.427 +#endif 1.428 + unsigned int number_of_endpoints; 1.429 + unsigned int number_of_local_addresses; 1.430 + unsigned int number_of_associations; 1.431 + unsigned int number_of_remote_addresses; 1.432 + unsigned int n; 1.433 + int error; 1.434 + struct sctp_inpcb *inp; 1.435 + struct sctp_tcb *stcb; 1.436 + struct sctp_nets *net; 1.437 + struct xsctp_inpcb xinpcb; 1.438 + struct xsctp_tcb xstcb; 1.439 + struct xsctp_raddr xraddr; 1.440 + struct socket *so; 1.441 + 1.442 + number_of_endpoints = 0; 1.443 + number_of_local_addresses = 0; 1.444 + number_of_associations = 0; 1.445 + number_of_remote_addresses = 0; 1.446 + 1.447 + SCTP_INP_INFO_RLOCK(); 1.448 +#if !defined(__Windows__) 1.449 + if (req->oldptr == USER_ADDR_NULL) { 1.450 +#else 1.451 + if (req->data == NULL) { 1.452 +#endif 1.453 + LIST_FOREACH(inp, &SCTP_BASE_INFO(listhead), sctp_list) { 1.454 + SCTP_INP_RLOCK(inp); 1.455 + number_of_endpoints++; 1.456 + number_of_local_addresses += number_of_addresses(inp); 1.457 + LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) { 1.458 + number_of_associations++; 1.459 + number_of_local_addresses += number_of_addresses(inp); 1.460 + TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { 1.461 + number_of_remote_addresses++; 1.462 + } 1.463 + } 1.464 + SCTP_INP_RUNLOCK(inp); 1.465 + } 1.466 + SCTP_INP_INFO_RUNLOCK(); 1.467 + n = (number_of_endpoints + 1) * sizeof(struct xsctp_inpcb) + 1.468 + (number_of_local_addresses + number_of_endpoints + number_of_associations) * sizeof(struct xsctp_laddr) + 1.469 + (number_of_associations + number_of_endpoints) * sizeof(struct xsctp_tcb) + 1.470 + (number_of_remote_addresses + number_of_associations) * sizeof(struct xsctp_raddr); 1.471 + 1.472 + /* request some more memory than needed */ 1.473 +#if !defined(__Windows__) 1.474 + req->oldidx = (n + n / 8); 1.475 +#else 1.476 + req->dataidx = (n + n / 8); 1.477 +#endif 1.478 + return (0); 1.479 + } 1.480 +#if !defined(__Windows__) 1.481 + if (req->newptr != USER_ADDR_NULL) { 1.482 +#else 1.483 + if (req->new_data != NULL) { 1.484 +#endif 1.485 + SCTP_INP_INFO_RUNLOCK(); 1.486 + SCTP_LTRACE_ERR_RET(NULL, NULL, NULL, SCTP_FROM_SCTP_SYSCTL, EPERM); 1.487 + return (EPERM); 1.488 + } 1.489 + LIST_FOREACH(inp, &SCTP_BASE_INFO(listhead), sctp_list) { 1.490 + SCTP_INP_RLOCK(inp); 1.491 + if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) { 1.492 + /* if its allgone it is being freed - skip it */ 1.493 + goto skip; 1.494 + } 1.495 + xinpcb.last = 0; 1.496 + xinpcb.local_port = ntohs(inp->sctp_lport); 1.497 + xinpcb.flags = inp->sctp_flags; 1.498 +#if defined(__FreeBSD__) && __FreeBSD_version < 1000048 1.499 + xinpcb.features = (uint32_t)inp->sctp_features; 1.500 +#else 1.501 + xinpcb.features = inp->sctp_features; 1.502 +#endif 1.503 + xinpcb.total_sends = inp->total_sends; 1.504 + xinpcb.total_recvs = inp->total_recvs; 1.505 + xinpcb.total_nospaces = inp->total_nospaces; 1.506 + xinpcb.fragmentation_point = inp->sctp_frag_point; 1.507 + so = inp->sctp_socket; 1.508 + if ((so == NULL) || 1.509 + (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) { 1.510 + xinpcb.qlen = 0; 1.511 + xinpcb.maxqlen = 0; 1.512 + } else { 1.513 + xinpcb.qlen = so->so_qlen; 1.514 + xinpcb.maxqlen = so->so_qlimit; 1.515 + } 1.516 + SCTP_INP_INCR_REF(inp); 1.517 + SCTP_INP_RUNLOCK(inp); 1.518 + SCTP_INP_INFO_RUNLOCK(); 1.519 + error = SYSCTL_OUT(req, &xinpcb, sizeof(struct xsctp_inpcb)); 1.520 + if (error) { 1.521 + SCTP_INP_DECR_REF(inp); 1.522 + return (error); 1.523 + } 1.524 + SCTP_INP_INFO_RLOCK(); 1.525 + SCTP_INP_RLOCK(inp); 1.526 + error = copy_out_local_addresses(inp, NULL, req); 1.527 + if (error) { 1.528 + SCTP_INP_DECR_REF(inp); 1.529 + return (error); 1.530 + } 1.531 + LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) { 1.532 + SCTP_TCB_LOCK(stcb); 1.533 + atomic_add_int(&stcb->asoc.refcnt, 1); 1.534 + SCTP_TCB_UNLOCK(stcb); 1.535 + xstcb.last = 0; 1.536 + xstcb.local_port = ntohs(inp->sctp_lport); 1.537 + xstcb.remote_port = ntohs(stcb->rport); 1.538 + if (stcb->asoc.primary_destination != NULL) 1.539 + xstcb.primary_addr = stcb->asoc.primary_destination->ro._l_addr; 1.540 + xstcb.heartbeat_interval = stcb->asoc.heart_beat_delay; 1.541 + xstcb.state = SCTP_GET_STATE(&stcb->asoc); /* FIXME */ 1.542 +#if defined(__FreeBSD__) 1.543 +#if __FreeBSD_version >= 800000 1.544 + /* 7.0 does not support these */ 1.545 + xstcb.assoc_id = sctp_get_associd(stcb); 1.546 + xstcb.peers_rwnd = stcb->asoc.peers_rwnd; 1.547 +#endif 1.548 +#else 1.549 + xstcb.assoc_id = sctp_get_associd(stcb); 1.550 + xstcb.peers_rwnd = stcb->asoc.peers_rwnd; 1.551 +#endif 1.552 + xstcb.in_streams = stcb->asoc.streamincnt; 1.553 + xstcb.out_streams = stcb->asoc.streamoutcnt; 1.554 + xstcb.max_nr_retrans = stcb->asoc.overall_error_count; 1.555 + xstcb.primary_process = 0; /* not really supported yet */ 1.556 + xstcb.T1_expireries = stcb->asoc.timoinit + stcb->asoc.timocookie; 1.557 + xstcb.T2_expireries = stcb->asoc.timoshutdown + stcb->asoc.timoshutdownack; 1.558 + xstcb.retransmitted_tsns = stcb->asoc.marked_retrans; 1.559 + xstcb.start_time.tv_sec = (uint32_t)stcb->asoc.start_time.tv_sec; 1.560 + xstcb.start_time.tv_usec = (uint32_t)stcb->asoc.start_time.tv_usec; 1.561 + xstcb.discontinuity_time.tv_sec = (uint32_t)stcb->asoc.discontinuity_time.tv_sec; 1.562 + xstcb.discontinuity_time.tv_usec = (uint32_t)stcb->asoc.discontinuity_time.tv_usec; 1.563 + xstcb.total_sends = stcb->total_sends; 1.564 + xstcb.total_recvs = stcb->total_recvs; 1.565 + xstcb.local_tag = stcb->asoc.my_vtag; 1.566 + xstcb.remote_tag = stcb->asoc.peer_vtag; 1.567 + xstcb.initial_tsn = stcb->asoc.init_seq_number; 1.568 + xstcb.highest_tsn = stcb->asoc.sending_seq - 1; 1.569 + xstcb.cumulative_tsn = stcb->asoc.last_acked_seq; 1.570 + xstcb.cumulative_tsn_ack = stcb->asoc.cumulative_tsn; 1.571 + xstcb.mtu = stcb->asoc.smallest_mtu; 1.572 + xstcb.refcnt = stcb->asoc.refcnt; 1.573 + SCTP_INP_RUNLOCK(inp); 1.574 + SCTP_INP_INFO_RUNLOCK(); 1.575 + error = SYSCTL_OUT(req, &xstcb, sizeof(struct xsctp_tcb)); 1.576 + if (error) { 1.577 + SCTP_INP_DECR_REF(inp); 1.578 + atomic_subtract_int(&stcb->asoc.refcnt, 1); 1.579 + return (error); 1.580 + } 1.581 + SCTP_INP_INFO_RLOCK(); 1.582 + SCTP_INP_RLOCK(inp); 1.583 + error = copy_out_local_addresses(inp, stcb, req); 1.584 + if (error) { 1.585 + SCTP_INP_DECR_REF(inp); 1.586 + atomic_subtract_int(&stcb->asoc.refcnt, 1); 1.587 + return (error); 1.588 + } 1.589 + TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { 1.590 + xraddr.last = 0; 1.591 + xraddr.address = net->ro._l_addr; 1.592 + xraddr.active = ((net->dest_state & SCTP_ADDR_REACHABLE) == SCTP_ADDR_REACHABLE); 1.593 + xraddr.confirmed = ((net->dest_state & SCTP_ADDR_UNCONFIRMED) == 0); 1.594 + xraddr.heartbeat_enabled = ((net->dest_state & SCTP_ADDR_NOHB) == 0); 1.595 + xraddr.potentially_failed = ((net->dest_state & SCTP_ADDR_PF) == SCTP_ADDR_PF); 1.596 + xraddr.rto = net->RTO; 1.597 + xraddr.max_path_rtx = net->failure_threshold; 1.598 + xraddr.rtx = net->marked_retrans; 1.599 + xraddr.error_counter = net->error_count; 1.600 + xraddr.cwnd = net->cwnd; 1.601 + xraddr.flight_size = net->flight_size; 1.602 + xraddr.mtu = net->mtu; 1.603 +#if defined(__FreeBSD__) 1.604 +#if __FreeBSD_version >= 800000 1.605 + xraddr.rtt = net->rtt / 1000; 1.606 + xraddr.heartbeat_interval = net->heart_beat_delay; 1.607 +#endif 1.608 +#else 1.609 + xraddr.rtt = net->rtt / 1000; 1.610 + xraddr.heartbeat_interval = net->heart_beat_delay; 1.611 +#endif 1.612 + xraddr.start_time.tv_sec = (uint32_t)net->start_time.tv_sec; 1.613 + xraddr.start_time.tv_usec = (uint32_t)net->start_time.tv_usec; 1.614 + SCTP_INP_RUNLOCK(inp); 1.615 + SCTP_INP_INFO_RUNLOCK(); 1.616 + error = SYSCTL_OUT(req, &xraddr, sizeof(struct xsctp_raddr)); 1.617 + if (error) { 1.618 + SCTP_INP_DECR_REF(inp); 1.619 + atomic_subtract_int(&stcb->asoc.refcnt, 1); 1.620 + return (error); 1.621 + } 1.622 + SCTP_INP_INFO_RLOCK(); 1.623 + SCTP_INP_RLOCK(inp); 1.624 + } 1.625 + atomic_subtract_int(&stcb->asoc.refcnt, 1); 1.626 + memset((void *)&xraddr, 0, sizeof(struct xsctp_raddr)); 1.627 + xraddr.last = 1; 1.628 + SCTP_INP_RUNLOCK(inp); 1.629 + SCTP_INP_INFO_RUNLOCK(); 1.630 + error = SYSCTL_OUT(req, &xraddr, sizeof(struct xsctp_raddr)); 1.631 + if (error) { 1.632 + SCTP_INP_DECR_REF(inp); 1.633 + return (error); 1.634 + } 1.635 + SCTP_INP_INFO_RLOCK(); 1.636 + SCTP_INP_RLOCK(inp); 1.637 + } 1.638 + SCTP_INP_DECR_REF(inp); 1.639 + SCTP_INP_RUNLOCK(inp); 1.640 + SCTP_INP_INFO_RUNLOCK(); 1.641 + memset((void *)&xstcb, 0, sizeof(struct xsctp_tcb)); 1.642 + xstcb.last = 1; 1.643 + error = SYSCTL_OUT(req, &xstcb, sizeof(struct xsctp_tcb)); 1.644 + if (error) { 1.645 + return (error); 1.646 + } 1.647 +skip: 1.648 + SCTP_INP_INFO_RLOCK(); 1.649 + } 1.650 + SCTP_INP_INFO_RUNLOCK(); 1.651 + 1.652 + memset((void *)&xinpcb, 0, sizeof(struct xsctp_inpcb)); 1.653 + xinpcb.last = 1; 1.654 + error = SYSCTL_OUT(req, &xinpcb, sizeof(struct xsctp_inpcb)); 1.655 + return (error); 1.656 +} 1.657 + 1.658 + 1.659 +#if !defined(__Windows__) 1.660 +#define RANGECHK(var, min, max) \ 1.661 + if ((var) < (min)) { (var) = (min); } \ 1.662 + else if ((var) > (max)) { (var) = (max); } 1.663 +#else 1.664 +#define RANGECHK(var, min, max) \ 1.665 + if ((var) <= (min)) { (var) = (min); } \ 1.666 + else if ((var) >= (max)) { (var) = (max); } 1.667 +#endif 1.668 + 1.669 +#if defined(__APPLE__) 1.670 +static int 1.671 +sysctl_sctp_udp_tunneling_check SYSCTL_HANDLER_ARGS 1.672 +{ 1.673 +#pragma unused(arg1, arg2) 1.674 +#else 1.675 +static int 1.676 +sysctl_sctp_udp_tunneling_check(SYSCTL_HANDLER_ARGS) 1.677 +{ 1.678 +#endif 1.679 + int error; 1.680 + uint32_t old_sctp_udp_tunneling_port; 1.681 + 1.682 + SCTP_INP_INFO_RLOCK(); 1.683 + old_sctp_udp_tunneling_port = SCTP_BASE_SYSCTL(sctp_udp_tunneling_port); 1.684 + SCTP_INP_INFO_RUNLOCK(); 1.685 + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); 1.686 + if (error == 0) { 1.687 + RANGECHK(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port), SCTPCTL_UDP_TUNNELING_PORT_MIN, SCTPCTL_UDP_TUNNELING_PORT_MAX); 1.688 +#if !defined(__Windows__) 1.689 + if (old_sctp_udp_tunneling_port == SCTP_BASE_SYSCTL(sctp_udp_tunneling_port)) { 1.690 + error = 0; 1.691 + goto out; 1.692 + } 1.693 + SCTP_INP_INFO_WLOCK(); 1.694 + if (old_sctp_udp_tunneling_port) { 1.695 + sctp_over_udp_stop(); 1.696 + } 1.697 + if (SCTP_BASE_SYSCTL(sctp_udp_tunneling_port)) { 1.698 + if (sctp_over_udp_start()) { 1.699 + SCTP_BASE_SYSCTL(sctp_udp_tunneling_port) = 0; 1.700 + } 1.701 + } 1.702 +#else 1.703 + SCTP_INP_INFO_WLOCK(); 1.704 + sctp_over_udp_restart(); 1.705 +#endif 1.706 + SCTP_INP_INFO_WUNLOCK(); 1.707 + } 1.708 +out: 1.709 + return (error); 1.710 +} 1.711 + 1.712 +#if defined(__APPLE__) 1.713 +int sctp_is_vmware_interface(struct ifnet *); 1.714 + 1.715 +static int 1.716 +sysctl_sctp_vmware_interfaces_check SYSCTL_HANDLER_ARGS 1.717 +{ 1.718 +#pragma unused(arg1, arg2) 1.719 + int error; 1.720 + uint32_t old_sctp_ignore_vmware_interfaces; 1.721 + 1.722 + old_sctp_ignore_vmware_interfaces = SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces); 1.723 + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); 1.724 + if (error == 0) { 1.725 + RANGECHK(SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces), SCTPCTL_IGNORE_VMWARE_INTERFACES_MIN, SCTPCTL_IGNORE_VMWARE_INTERFACES_MAX); 1.726 + if (old_sctp_ignore_vmware_interfaces && !SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces)) { 1.727 + sctp_add_or_del_interfaces(sctp_is_vmware_interface, 1); 1.728 + } 1.729 + if (!old_sctp_ignore_vmware_interfaces && SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces)) { 1.730 + sctp_add_or_del_interfaces(sctp_is_vmware_interface, 0); 1.731 + } 1.732 + } 1.733 + return (error); 1.734 +} 1.735 +#endif 1.736 + 1.737 +#if defined(__APPLE__) 1.738 +static int 1.739 +sysctl_sctp_check SYSCTL_HANDLER_ARGS 1.740 +{ 1.741 +#pragma unused(arg1, arg2) 1.742 +#else 1.743 +static int 1.744 +sysctl_sctp_check(SYSCTL_HANDLER_ARGS) 1.745 +{ 1.746 +#endif 1.747 + int error; 1.748 + 1.749 +#if defined(__FreeBSD__) && __FreeBSD_version >= 800056 1.750 +#ifdef VIMAGE 1.751 + error = vnet_sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); 1.752 +#else 1.753 + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); 1.754 +#endif 1.755 +#else 1.756 + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); 1.757 +#endif 1.758 + if (error == 0) { 1.759 + RANGECHK(SCTP_BASE_SYSCTL(sctp_sendspace), SCTPCTL_MAXDGRAM_MIN, SCTPCTL_MAXDGRAM_MAX); 1.760 + RANGECHK(SCTP_BASE_SYSCTL(sctp_recvspace), SCTPCTL_RECVSPACE_MIN, SCTPCTL_RECVSPACE_MAX); 1.761 +#if defined(__FreeBSD__) 1.762 + RANGECHK(SCTP_BASE_SYSCTL(sctp_auto_asconf), SCTPCTL_AUTOASCONF_MIN, SCTPCTL_AUTOASCONF_MAX); 1.763 +#elif defined(SCTP_APPLE_AUTO_ASCONF) 1.764 + RANGECHK(SCTP_BASE_SYSCTL(sctp_auto_asconf), SCTPCTL_AUTOASCONF_MIN, SCTPCTL_AUTOASCONF_MAX); 1.765 +#endif 1.766 + RANGECHK(SCTP_BASE_SYSCTL(sctp_ecn_enable), SCTPCTL_ECN_ENABLE_MIN, SCTPCTL_ECN_ENABLE_MAX); 1.767 + RANGECHK(SCTP_BASE_SYSCTL(sctp_strict_sacks), SCTPCTL_STRICT_SACKS_MIN, SCTPCTL_STRICT_SACKS_MAX); 1.768 +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 800000) 1.769 +#if !defined(SCTP_WITH_NO_CSUM) 1.770 + RANGECHK(SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), SCTPCTL_LOOPBACK_NOCSUM_MIN, SCTPCTL_LOOPBACK_NOCSUM_MAX); 1.771 +#endif 1.772 +#endif 1.773 + RANGECHK(SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), SCTPCTL_PEER_CHKOH_MIN, SCTPCTL_PEER_CHKOH_MAX); 1.774 + RANGECHK(SCTP_BASE_SYSCTL(sctp_max_burst_default), SCTPCTL_MAXBURST_MIN, SCTPCTL_MAXBURST_MAX); 1.775 + RANGECHK(SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), SCTPCTL_FRMAXBURST_MIN, SCTPCTL_FRMAXBURST_MAX); 1.776 + RANGECHK(SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), SCTPCTL_MAXCHUNKS_MIN, SCTPCTL_MAXCHUNKS_MAX); 1.777 + RANGECHK(SCTP_BASE_SYSCTL(sctp_hashtblsize), SCTPCTL_TCBHASHSIZE_MIN, SCTPCTL_TCBHASHSIZE_MAX); 1.778 + RANGECHK(SCTP_BASE_SYSCTL(sctp_pcbtblsize), SCTPCTL_PCBHASHSIZE_MIN, SCTPCTL_PCBHASHSIZE_MAX); 1.779 + RANGECHK(SCTP_BASE_SYSCTL(sctp_min_split_point), SCTPCTL_MIN_SPLIT_POINT_MIN, SCTPCTL_MIN_SPLIT_POINT_MAX); 1.780 + RANGECHK(SCTP_BASE_SYSCTL(sctp_chunkscale), SCTPCTL_CHUNKSCALE_MIN, SCTPCTL_CHUNKSCALE_MAX); 1.781 + RANGECHK(SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), SCTPCTL_DELAYED_SACK_TIME_MIN, SCTPCTL_DELAYED_SACK_TIME_MAX); 1.782 + RANGECHK(SCTP_BASE_SYSCTL(sctp_sack_freq_default), SCTPCTL_SACK_FREQ_MIN, SCTPCTL_SACK_FREQ_MAX); 1.783 + RANGECHK(SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), SCTPCTL_SYS_RESOURCE_MIN, SCTPCTL_SYS_RESOURCE_MAX); 1.784 + RANGECHK(SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), SCTPCTL_ASOC_RESOURCE_MIN, SCTPCTL_ASOC_RESOURCE_MAX); 1.785 + RANGECHK(SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), SCTPCTL_HEARTBEAT_INTERVAL_MIN, SCTPCTL_HEARTBEAT_INTERVAL_MAX); 1.786 + RANGECHK(SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), SCTPCTL_PMTU_RAISE_TIME_MIN, SCTPCTL_PMTU_RAISE_TIME_MAX); 1.787 + RANGECHK(SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), SCTPCTL_SHUTDOWN_GUARD_TIME_MIN, SCTPCTL_SHUTDOWN_GUARD_TIME_MAX); 1.788 + RANGECHK(SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), SCTPCTL_SECRET_LIFETIME_MIN, SCTPCTL_SECRET_LIFETIME_MAX); 1.789 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_max_default), SCTPCTL_RTO_MAX_MIN, SCTPCTL_RTO_MAX_MAX); 1.790 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_min_default), SCTPCTL_RTO_MIN_MIN, SCTPCTL_RTO_MIN_MAX); 1.791 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_initial_default), SCTPCTL_RTO_INITIAL_MIN, SCTPCTL_RTO_INITIAL_MAX); 1.792 + RANGECHK(SCTP_BASE_SYSCTL(sctp_init_rto_max_default), SCTPCTL_INIT_RTO_MAX_MIN, SCTPCTL_INIT_RTO_MAX_MAX); 1.793 + RANGECHK(SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), SCTPCTL_VALID_COOKIE_LIFE_MIN, SCTPCTL_VALID_COOKIE_LIFE_MAX); 1.794 + RANGECHK(SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), SCTPCTL_INIT_RTX_MAX_MIN, SCTPCTL_INIT_RTX_MAX_MAX); 1.795 + RANGECHK(SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), SCTPCTL_ASSOC_RTX_MAX_MIN, SCTPCTL_ASSOC_RTX_MAX_MAX); 1.796 + RANGECHK(SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), SCTPCTL_PATH_RTX_MAX_MIN, SCTPCTL_PATH_RTX_MAX_MAX); 1.797 + RANGECHK(SCTP_BASE_SYSCTL(sctp_path_pf_threshold), SCTPCTL_PATH_PF_THRESHOLD_MIN, SCTPCTL_PATH_PF_THRESHOLD_MAX); 1.798 + RANGECHK(SCTP_BASE_SYSCTL(sctp_add_more_threshold), SCTPCTL_ADD_MORE_ON_OUTPUT_MIN, SCTPCTL_ADD_MORE_ON_OUTPUT_MAX); 1.799 + RANGECHK(SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default), SCTPCTL_INCOMING_STREAMS_MIN, SCTPCTL_INCOMING_STREAMS_MAX); 1.800 + RANGECHK(SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), SCTPCTL_OUTGOING_STREAMS_MIN, SCTPCTL_OUTGOING_STREAMS_MAX); 1.801 + RANGECHK(SCTP_BASE_SYSCTL(sctp_cmt_on_off), SCTPCTL_CMT_ON_OFF_MIN, SCTPCTL_CMT_ON_OFF_MAX); 1.802 + /* EY */ 1.803 + RANGECHK(SCTP_BASE_SYSCTL(sctp_nr_sack_on_off), SCTPCTL_NR_SACK_ON_OFF_MIN, SCTPCTL_NR_SACK_ON_OFF_MAX); 1.804 + RANGECHK(SCTP_BASE_SYSCTL(sctp_cmt_use_dac), SCTPCTL_CMT_USE_DAC_MIN, SCTPCTL_CMT_USE_DAC_MAX); 1.805 + RANGECHK(SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), SCTPCTL_CWND_MAXBURST_MIN, SCTPCTL_CWND_MAXBURST_MAX); 1.806 + RANGECHK(SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk), SCTPCTL_ASCONF_AUTH_NOCHK_MIN, SCTPCTL_ASCONF_AUTH_NOCHK_MAX); 1.807 + RANGECHK(SCTP_BASE_SYSCTL(sctp_auth_disable), SCTPCTL_AUTH_DISABLE_MIN, SCTPCTL_AUTH_DISABLE_MAX); 1.808 + RANGECHK(SCTP_BASE_SYSCTL(sctp_nat_friendly), SCTPCTL_NAT_FRIENDLY_MIN, SCTPCTL_NAT_FRIENDLY_MAX); 1.809 + RANGECHK(SCTP_BASE_SYSCTL(sctp_L2_abc_variable), SCTPCTL_ABC_L_VAR_MIN, SCTPCTL_ABC_L_VAR_MAX); 1.810 + RANGECHK(SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), SCTPCTL_MAX_CHAINED_MBUFS_MIN, SCTPCTL_MAX_CHAINED_MBUFS_MAX); 1.811 + RANGECHK(SCTP_BASE_SYSCTL(sctp_do_drain), SCTPCTL_DO_SCTP_DRAIN_MIN, SCTPCTL_DO_SCTP_DRAIN_MAX); 1.812 + RANGECHK(SCTP_BASE_SYSCTL(sctp_hb_maxburst), SCTPCTL_HB_MAX_BURST_MIN, SCTPCTL_HB_MAX_BURST_MAX); 1.813 + RANGECHK(SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), SCTPCTL_ABORT_AT_LIMIT_MIN, SCTPCTL_ABORT_AT_LIMIT_MAX); 1.814 + RANGECHK(SCTP_BASE_SYSCTL(sctp_strict_data_order), SCTPCTL_STRICT_DATA_ORDER_MIN, SCTPCTL_STRICT_DATA_ORDER_MAX); 1.815 + RANGECHK(SCTP_BASE_SYSCTL(sctp_min_residual), SCTPCTL_MIN_RESIDUAL_MIN, SCTPCTL_MIN_RESIDUAL_MAX); 1.816 + RANGECHK(SCTP_BASE_SYSCTL(sctp_max_retran_chunk), SCTPCTL_MAX_RETRAN_CHUNK_MIN, SCTPCTL_MAX_RETRAN_CHUNK_MAX); 1.817 + RANGECHK(SCTP_BASE_SYSCTL(sctp_logging_level), SCTPCTL_LOGGING_LEVEL_MIN, SCTPCTL_LOGGING_LEVEL_MAX); 1.818 + RANGECHK(SCTP_BASE_SYSCTL(sctp_default_cc_module), SCTPCTL_DEFAULT_CC_MODULE_MIN, SCTPCTL_DEFAULT_CC_MODULE_MAX); 1.819 + RANGECHK(SCTP_BASE_SYSCTL(sctp_default_ss_module), SCTPCTL_DEFAULT_SS_MODULE_MIN, SCTPCTL_DEFAULT_SS_MODULE_MAX); 1.820 + RANGECHK(SCTP_BASE_SYSCTL(sctp_default_frag_interleave), SCTPCTL_DEFAULT_FRAG_INTERLEAVE_MIN, SCTPCTL_DEFAULT_FRAG_INTERLEAVE_MAX); 1.821 + RANGECHK(SCTP_BASE_SYSCTL(sctp_vtag_time_wait), SCTPCTL_TIME_WAIT_MIN, SCTPCTL_TIME_WAIT_MAX); 1.822 + RANGECHK(SCTP_BASE_SYSCTL(sctp_buffer_splitting), SCTPCTL_BUFFER_SPLITTING_MIN, SCTPCTL_BUFFER_SPLITTING_MAX); 1.823 + RANGECHK(SCTP_BASE_SYSCTL(sctp_initial_cwnd), SCTPCTL_INITIAL_CWND_MIN, SCTPCTL_INITIAL_CWND_MAX); 1.824 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_bw), SCTPCTL_RTTVAR_BW_MIN, SCTPCTL_RTTVAR_BW_MAX); 1.825 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_rtt), SCTPCTL_RTTVAR_RTT_MIN, SCTPCTL_RTTVAR_RTT_MAX); 1.826 + RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_eqret), SCTPCTL_RTTVAR_EQRET_MIN, SCTPCTL_RTTVAR_EQRET_MAX); 1.827 + RANGECHK(SCTP_BASE_SYSCTL(sctp_steady_step), SCTPCTL_RTTVAR_STEADYS_MIN, SCTPCTL_RTTVAR_STEADYS_MAX); 1.828 + RANGECHK(SCTP_BASE_SYSCTL(sctp_use_dccc_ecn), SCTPCTL_RTTVAR_DCCCECN_MIN, SCTPCTL_RTTVAR_DCCCECN_MAX); 1.829 +#if defined(__FreeBSD__) 1.830 + RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_base), SCTPCTL_MOBILITY_BASE_MIN, SCTPCTL_MOBILITY_BASE_MAX); 1.831 +#elif defined(SCTP_APPLE_MOBILITY_BASE) 1.832 + RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_base), SCTPCTL_MOBILITY_BASE_MIN, SCTPCTL_MOBILITY_BASE_MAX); 1.833 +#endif 1.834 +#if defined(__FreeBSD__) 1.835 + RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), SCTPCTL_MOBILITY_FASTHANDOFF_MIN, SCTPCTL_MOBILITY_FASTHANDOFF_MAX); 1.836 +#elif defined(__FreeBSD__) || defined(SCTP_APPLE_MOBILITY_FASTHANDOFF) 1.837 + RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), SCTPCTL_MOBILITY_FASTHANDOFF_MIN, SCTPCTL_MOBILITY_FASTHANDOFF_MAX); 1.838 +#endif 1.839 + RANGECHK(SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), SCTPCTL_SACK_IMMEDIATELY_ENABLE_MIN, SCTPCTL_SACK_IMMEDIATELY_ENABLE_MAX); 1.840 + RANGECHK(SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), SCTPCTL_NAT_FRIENDLY_INITS_MIN, SCTPCTL_NAT_FRIENDLY_INITS_MAX); 1.841 + RANGECHK(SCTP_BASE_SYSCTL(sctp_blackhole), SCTPCTL_BLACKHOLE_MIN, SCTPCTL_BLACKHOLE_MAX); 1.842 + 1.843 +#ifdef SCTP_DEBUG 1.844 + RANGECHK(SCTP_BASE_SYSCTL(sctp_debug_on), SCTPCTL_DEBUG_MIN, SCTPCTL_DEBUG_MAX); 1.845 +#endif 1.846 +#if defined(__APPLE__) 1.847 + RANGECHK(SCTP_BASE_SYSCTL(sctp_main_timer), SCTPCTL_MAIN_TIMER_MIN, SCTPCTL_MAIN_TIMER_MAX); 1.848 + RANGECHK(SCTP_BASE_SYSCTL(sctp_addr_watchdog_limit), SCTPCTL_ADDR_WATCHDOG_LIMIT_MIN, SCTPCTL_ADDR_WATCHDOG_LIMIT_MAX); 1.849 + RANGECHK(SCTP_BASE_SYSCTL(sctp_vtag_watchdog_limit), SCTPCTL_VTAG_WATCHDOG_LIMIT_MIN, SCTPCTL_VTAG_WATCHDOG_LIMIT_MAX); 1.850 +#endif 1.851 +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) 1.852 + RANGECHK(SCTP_BASE_SYSCTL(sctp_output_unlocked), SCTPCTL_OUTPUT_UNLOCKED_MIN, SCTPCTL_OUTPUT_UNLOCKED_MAX); 1.853 +#endif 1.854 + } 1.855 + return (error); 1.856 +} 1.857 + 1.858 +#if defined(__FreeBSD__) && defined(SMP) && defined(SCTP_USE_PERCPU_STAT) 1.859 +static int 1.860 +sysctl_stat_get(SYSCTL_HANDLER_ARGS) 1.861 +{ 1.862 + int cpu, error; 1.863 + struct sctpstat sb, *sarry, *cpin = NULL; 1.864 + 1.865 + if ((req->newptr) && (req->newlen == sizeof(struct sctpstat))) { 1.866 + /* User wants us to clear or at least 1.867 + * reset the counters to the specified values. 1.868 + */ 1.869 + cpin = (struct sctpstat *)req->newptr; 1.870 + } else if (req->newptr) { 1.871 + /* Must be a stat structure */ 1.872 + return (EINVAL); 1.873 + } 1.874 + memset(&sb, 0, sizeof(sb)); 1.875 + for (cpu = 0; cpu < mp_maxid; cpu++) { 1.876 + sarry = &SCTP_BASE_STATS[cpu]; 1.877 + if (sarry->sctps_discontinuitytime.tv_sec > sb.sctps_discontinuitytime.tv_sec) { 1.878 + sb.sctps_discontinuitytime.tv_sec = sarry->sctps_discontinuitytime.tv_sec; 1.879 + sb.sctps_discontinuitytime.tv_usec = sarry->sctps_discontinuitytime.tv_usec; 1.880 + } 1.881 + sb.sctps_currestab += sarry->sctps_currestab; 1.882 + sb.sctps_activeestab += sarry->sctps_activeestab; 1.883 + sb.sctps_restartestab += sarry->sctps_restartestab; 1.884 + sb.sctps_collisionestab += sarry->sctps_collisionestab; 1.885 + sb.sctps_passiveestab += sarry->sctps_passiveestab; 1.886 + sb.sctps_aborted += sarry->sctps_aborted; 1.887 + sb.sctps_shutdown += sarry->sctps_shutdown; 1.888 + sb.sctps_outoftheblue += sarry->sctps_outoftheblue; 1.889 + sb.sctps_checksumerrors += sarry->sctps_checksumerrors; 1.890 + sb.sctps_outcontrolchunks += sarry->sctps_outcontrolchunks; 1.891 + sb.sctps_outorderchunks += sarry->sctps_outorderchunks; 1.892 + sb.sctps_outunorderchunks += sarry->sctps_outunorderchunks; 1.893 + sb.sctps_incontrolchunks += sarry->sctps_incontrolchunks; 1.894 + sb.sctps_inorderchunks += sarry->sctps_inorderchunks; 1.895 + sb.sctps_inunorderchunks += sarry->sctps_inunorderchunks; 1.896 + sb.sctps_fragusrmsgs += sarry->sctps_fragusrmsgs; 1.897 + sb.sctps_reasmusrmsgs += sarry->sctps_reasmusrmsgs; 1.898 + sb.sctps_outpackets += sarry->sctps_outpackets; 1.899 + sb.sctps_inpackets += sarry->sctps_inpackets; 1.900 + sb.sctps_recvpackets += sarry->sctps_recvpackets; 1.901 + sb.sctps_recvdatagrams += sarry->sctps_recvdatagrams; 1.902 + sb.sctps_recvpktwithdata += sarry->sctps_recvpktwithdata; 1.903 + sb.sctps_recvsacks += sarry->sctps_recvsacks; 1.904 + sb.sctps_recvdata += sarry->sctps_recvdata; 1.905 + sb.sctps_recvdupdata += sarry->sctps_recvdupdata; 1.906 + sb.sctps_recvheartbeat += sarry->sctps_recvheartbeat; 1.907 + sb.sctps_recvheartbeatack += sarry->sctps_recvheartbeatack; 1.908 + sb.sctps_recvecne += sarry->sctps_recvecne; 1.909 + sb.sctps_recvauth += sarry->sctps_recvauth; 1.910 + sb.sctps_recvauthmissing += sarry->sctps_recvauthmissing; 1.911 + sb.sctps_recvivalhmacid += sarry->sctps_recvivalhmacid; 1.912 + sb.sctps_recvivalkeyid += sarry->sctps_recvivalkeyid; 1.913 + sb.sctps_recvauthfailed += sarry->sctps_recvauthfailed; 1.914 + sb.sctps_recvexpress += sarry->sctps_recvexpress; 1.915 + sb.sctps_recvexpressm += sarry->sctps_recvexpressm; 1.916 + sb.sctps_recvnocrc += sarry->sctps_recvnocrc; 1.917 + sb.sctps_recvswcrc += sarry->sctps_recvswcrc; 1.918 + sb.sctps_recvhwcrc += sarry->sctps_recvhwcrc; 1.919 + sb.sctps_sendpackets += sarry->sctps_sendpackets; 1.920 + sb.sctps_sendsacks += sarry->sctps_sendsacks; 1.921 + sb.sctps_senddata += sarry->sctps_senddata; 1.922 + sb.sctps_sendretransdata += sarry->sctps_sendretransdata; 1.923 + sb.sctps_sendfastretrans += sarry->sctps_sendfastretrans; 1.924 + sb.sctps_sendmultfastretrans += sarry->sctps_sendmultfastretrans; 1.925 + sb.sctps_sendheartbeat += sarry->sctps_sendheartbeat; 1.926 + sb.sctps_sendecne += sarry->sctps_sendecne; 1.927 + sb.sctps_sendauth += sarry->sctps_sendauth; 1.928 + sb.sctps_senderrors += sarry->sctps_senderrors; 1.929 + sb.sctps_sendnocrc += sarry->sctps_sendnocrc; 1.930 + sb.sctps_sendswcrc += sarry->sctps_sendswcrc; 1.931 + sb.sctps_sendhwcrc += sarry->sctps_sendhwcrc; 1.932 + sb.sctps_pdrpfmbox += sarry->sctps_pdrpfmbox; 1.933 + sb.sctps_pdrpfehos += sarry->sctps_pdrpfehos; 1.934 + sb.sctps_pdrpmbda += sarry->sctps_pdrpmbda; 1.935 + sb.sctps_pdrpmbct += sarry->sctps_pdrpmbct; 1.936 + sb.sctps_pdrpbwrpt += sarry->sctps_pdrpbwrpt; 1.937 + sb.sctps_pdrpcrupt += sarry->sctps_pdrpcrupt; 1.938 + sb.sctps_pdrpnedat += sarry->sctps_pdrpnedat; 1.939 + sb.sctps_pdrppdbrk += sarry->sctps_pdrppdbrk; 1.940 + sb.sctps_pdrptsnnf += sarry->sctps_pdrptsnnf; 1.941 + sb.sctps_pdrpdnfnd += sarry->sctps_pdrpdnfnd; 1.942 + sb.sctps_pdrpdiwnp += sarry->sctps_pdrpdiwnp; 1.943 + sb.sctps_pdrpdizrw += sarry->sctps_pdrpdizrw; 1.944 + sb.sctps_pdrpbadd += sarry->sctps_pdrpbadd; 1.945 + sb.sctps_pdrpmark += sarry->sctps_pdrpmark; 1.946 + sb.sctps_timoiterator += sarry->sctps_timoiterator; 1.947 + sb.sctps_timodata += sarry->sctps_timodata; 1.948 + sb.sctps_timowindowprobe += sarry->sctps_timowindowprobe; 1.949 + sb.sctps_timoinit += sarry->sctps_timoinit; 1.950 + sb.sctps_timosack += sarry->sctps_timosack; 1.951 + sb.sctps_timoshutdown += sarry->sctps_timoshutdown; 1.952 + sb.sctps_timoheartbeat += sarry->sctps_timoheartbeat; 1.953 + sb.sctps_timocookie += sarry->sctps_timocookie; 1.954 + sb.sctps_timosecret += sarry->sctps_timosecret; 1.955 + sb.sctps_timopathmtu += sarry->sctps_timopathmtu; 1.956 + sb.sctps_timoshutdownack += sarry->sctps_timoshutdownack; 1.957 + sb.sctps_timoshutdownguard += sarry->sctps_timoshutdownguard; 1.958 + sb.sctps_timostrmrst += sarry->sctps_timostrmrst; 1.959 + sb.sctps_timoearlyfr += sarry->sctps_timoearlyfr; 1.960 + sb.sctps_timoasconf += sarry->sctps_timoasconf; 1.961 + sb.sctps_timodelprim += sarry->sctps_timodelprim; 1.962 + sb.sctps_timoautoclose += sarry->sctps_timoautoclose; 1.963 + sb.sctps_timoassockill += sarry->sctps_timoassockill; 1.964 + sb.sctps_timoinpkill += sarry->sctps_timoinpkill; 1.965 + sb.sctps_hdrops += sarry->sctps_hdrops; 1.966 + sb.sctps_badsum += sarry->sctps_badsum; 1.967 + sb.sctps_noport += sarry->sctps_noport; 1.968 + sb.sctps_badvtag += sarry->sctps_badvtag; 1.969 + sb.sctps_badsid += sarry->sctps_badsid; 1.970 + sb.sctps_nomem += sarry->sctps_nomem; 1.971 + sb.sctps_fastretransinrtt += sarry->sctps_fastretransinrtt; 1.972 + sb.sctps_markedretrans += sarry->sctps_markedretrans; 1.973 + sb.sctps_naglesent += sarry->sctps_naglesent; 1.974 + sb.sctps_naglequeued += sarry->sctps_naglequeued; 1.975 + sb.sctps_maxburstqueued += sarry->sctps_maxburstqueued; 1.976 + sb.sctps_ifnomemqueued += sarry->sctps_ifnomemqueued; 1.977 + sb.sctps_windowprobed += sarry->sctps_windowprobed; 1.978 + sb.sctps_lowlevelerr += sarry->sctps_lowlevelerr; 1.979 + sb.sctps_lowlevelerrusr += sarry->sctps_lowlevelerrusr; 1.980 + sb.sctps_datadropchklmt += sarry->sctps_datadropchklmt; 1.981 + sb.sctps_datadroprwnd += sarry->sctps_datadroprwnd; 1.982 + sb.sctps_ecnereducedcwnd += sarry->sctps_ecnereducedcwnd; 1.983 + sb.sctps_vtagexpress += sarry->sctps_vtagexpress; 1.984 + sb.sctps_vtagbogus += sarry->sctps_vtagbogus; 1.985 + sb.sctps_primary_randry += sarry->sctps_primary_randry; 1.986 + sb.sctps_cmt_randry += sarry->sctps_cmt_randry; 1.987 + sb.sctps_slowpath_sack += sarry->sctps_slowpath_sack; 1.988 + sb.sctps_wu_sacks_sent += sarry->sctps_wu_sacks_sent; 1.989 + sb.sctps_sends_with_flags += sarry->sctps_sends_with_flags; 1.990 + sb.sctps_sends_with_unord += sarry->sctps_sends_with_unord; 1.991 + sb.sctps_sends_with_eof += sarry->sctps_sends_with_eof; 1.992 + sb.sctps_sends_with_abort += sarry->sctps_sends_with_abort; 1.993 + sb.sctps_protocol_drain_calls += sarry->sctps_protocol_drain_calls; 1.994 + sb.sctps_protocol_drains_done += sarry->sctps_protocol_drains_done; 1.995 + sb.sctps_read_peeks += sarry->sctps_read_peeks; 1.996 + sb.sctps_cached_chk += sarry->sctps_cached_chk; 1.997 + sb.sctps_cached_strmoq += sarry->sctps_cached_strmoq; 1.998 + sb.sctps_left_abandon += sarry->sctps_left_abandon; 1.999 + sb.sctps_send_burst_avoid += sarry->sctps_send_burst_avoid; 1.1000 + sb.sctps_send_cwnd_avoid += sarry->sctps_send_cwnd_avoid; 1.1001 + sb.sctps_fwdtsn_map_over += sarry->sctps_fwdtsn_map_over; 1.1002 + if (cpin) { 1.1003 + memcpy(sarry, cpin, sizeof(struct sctpstat)); 1.1004 + } 1.1005 + } 1.1006 + error = SYSCTL_OUT(req, &sb, sizeof(sb)); 1.1007 + return (error); 1.1008 +} 1.1009 +#endif 1.1010 + 1.1011 +#if defined(SCTP_LOCAL_TRACE_BUF) 1.1012 +#if defined(__APPLE__) 1.1013 +static int 1.1014 +sysctl_sctp_cleartrace SYSCTL_HANDLER_ARGS 1.1015 +{ 1.1016 +#pragma unused(arg1, arg2, req, oidp) 1.1017 +#else 1.1018 +static int 1.1019 +sysctl_sctp_cleartrace(SYSCTL_HANDLER_ARGS) 1.1020 +{ 1.1021 +#endif 1.1022 + int error = 0; 1.1023 +#if defined(__Windows__) 1.1024 + int value = 0; 1.1025 + 1.1026 + if (req->new_data == NULL) { 1.1027 + return (error); 1.1028 + } 1.1029 + error = SYSCTL_IN(req, &value, sizeof(int)); 1.1030 + if (error == 0 && value != 0 && SCTP_BASE_SYSCTL(sctp_log) != NULL) { 1.1031 + memset(SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log)); 1.1032 + } 1.1033 +#else 1.1034 + 1.1035 + memset(&SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log)); 1.1036 +#endif 1.1037 + return (error); 1.1038 +} 1.1039 +#endif 1.1040 + 1.1041 + 1.1042 +#if defined(__APPLE__) || defined(__FreeBSD__) 1.1043 +#if defined(__APPLE__) 1.1044 +#define CTLTYPE_UINT CTLTYPE_INT 1.1045 +#define SYSCTL_VNET_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \ 1.1046 + SYSCTL_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) 1.1047 +#define SYSCTL_VNET_STRUCT(parent, nbr, name, access, ptr, type, descr) \ 1.1048 + SYSCTL_STRUCT(parent, nbr, name, access, ptr, type, descr) 1.1049 +#endif 1.1050 +/* 1.1051 + * sysctl definitions 1.1052 + */ 1.1053 + 1.1054 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sendspace, CTLTYPE_UINT|CTLFLAG_RW, 1.1055 + &SCTP_BASE_SYSCTL(sctp_sendspace), 0, sysctl_sctp_check, "IU", 1.1056 + SCTPCTL_MAXDGRAM_DESC); 1.1057 + 1.1058 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, recvspace, CTLTYPE_UINT|CTLFLAG_RW, 1.1059 + &SCTP_BASE_SYSCTL(sctp_recvspace), 0, sysctl_sctp_check, "IU", 1.1060 + SCTPCTL_RECVSPACE_DESC); 1.1061 + 1.1062 +#if defined(__FreeBSD__) 1.1063 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, auto_asconf, CTLTYPE_UINT|CTLFLAG_RW, 1.1064 + &SCTP_BASE_SYSCTL(sctp_auto_asconf), 0, sysctl_sctp_check, "IU", 1.1065 + SCTPCTL_AUTOASCONF_DESC); 1.1066 +#elif defined(SCTP_APPLE_AUTO_ASCONF) 1.1067 +SYSCTL_PROC(_net_inet_sctp, OID_AUTO, auto_asconf, CTLTYPE_UINT|CTLFLAG_RW, 1.1068 + &SCTP_BASE_SYSCTL(sctp_auto_asconf), 0, sysctl_sctp_check, "IU", 1.1069 + SCTPCTL_AUTOASCONF_DESC); 1.1070 +#endif 1.1071 + 1.1072 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, ecn_enable, CTLTYPE_UINT|CTLFLAG_RW, 1.1073 + &SCTP_BASE_SYSCTL(sctp_ecn_enable), 0, sysctl_sctp_check, "IU", 1.1074 + SCTPCTL_ECN_ENABLE_DESC); 1.1075 + 1.1076 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_sacks, CTLTYPE_UINT|CTLFLAG_RW, 1.1077 + &SCTP_BASE_SYSCTL(sctp_strict_sacks), 0, sysctl_sctp_check, "IU", 1.1078 + SCTPCTL_STRICT_SACKS_DESC); 1.1079 + 1.1080 +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 800000) 1.1081 +#if !defined(SCTP_WITH_NO_CSUM) 1.1082 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, loopback_nocsum, CTLTYPE_UINT|CTLFLAG_RW, 1.1083 + &SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), 0, sysctl_sctp_check, "IU", 1.1084 + SCTPCTL_LOOPBACK_NOCSUM_DESC); 1.1085 +#endif 1.1086 +#endif 1.1087 + 1.1088 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, peer_chkoh, CTLTYPE_UINT|CTLFLAG_RW, 1.1089 + &SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), 0, sysctl_sctp_check, "IU", 1.1090 + SCTPCTL_PEER_CHKOH_DESC); 1.1091 + 1.1092 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, maxburst, CTLTYPE_UINT|CTLFLAG_RW, 1.1093 + &SCTP_BASE_SYSCTL(sctp_max_burst_default), 0, sysctl_sctp_check, "IU", 1.1094 + SCTPCTL_MAXBURST_DESC); 1.1095 + 1.1096 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, fr_maxburst, CTLTYPE_UINT|CTLFLAG_RW, 1.1097 + &SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), 0, sysctl_sctp_check, "IU", 1.1098 + SCTPCTL_FRMAXBURST_DESC); 1.1099 + 1.1100 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, maxchunks, CTLTYPE_UINT|CTLFLAG_RW, 1.1101 + &SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), 0, sysctl_sctp_check, "IU", 1.1102 + SCTPCTL_MAXCHUNKS_DESC); 1.1103 + 1.1104 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, tcbhashsize, CTLTYPE_UINT|CTLFLAG_RW, 1.1105 + &SCTP_BASE_SYSCTL(sctp_hashtblsize), 0, sysctl_sctp_check, "IU", 1.1106 + SCTPCTL_TCBHASHSIZE_DESC); 1.1107 + 1.1108 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, pcbhashsize, CTLTYPE_UINT|CTLFLAG_RW, 1.1109 + &SCTP_BASE_SYSCTL(sctp_pcbtblsize), 0, sysctl_sctp_check, "IU", 1.1110 + SCTPCTL_PCBHASHSIZE_DESC); 1.1111 + 1.1112 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, min_split_point, CTLTYPE_UINT|CTLFLAG_RW, 1.1113 + &SCTP_BASE_SYSCTL(sctp_min_split_point), 0, sysctl_sctp_check, "IU", 1.1114 + SCTPCTL_MIN_SPLIT_POINT_DESC); 1.1115 + 1.1116 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, chunkscale, CTLTYPE_UINT|CTLFLAG_RW, 1.1117 + &SCTP_BASE_SYSCTL(sctp_chunkscale), 0, sysctl_sctp_check, "IU", 1.1118 + SCTPCTL_CHUNKSCALE_DESC); 1.1119 + 1.1120 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, delayed_sack_time, CTLTYPE_UINT|CTLFLAG_RW, 1.1121 + &SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), 0, sysctl_sctp_check, "IU", 1.1122 + SCTPCTL_DELAYED_SACK_TIME_DESC); 1.1123 + 1.1124 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sack_freq, CTLTYPE_UINT|CTLFLAG_RW, 1.1125 + &SCTP_BASE_SYSCTL(sctp_sack_freq_default), 0, sysctl_sctp_check, "IU", 1.1126 + SCTPCTL_SACK_FREQ_DESC); 1.1127 + 1.1128 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, sys_resource, CTLTYPE_UINT|CTLFLAG_RW, 1.1129 + &SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), 0, sysctl_sctp_check, "IU", 1.1130 + SCTPCTL_SYS_RESOURCE_DESC); 1.1131 + 1.1132 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, asoc_resource, CTLTYPE_UINT|CTLFLAG_RW, 1.1133 + &SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), 0, sysctl_sctp_check, "IU", 1.1134 + SCTPCTL_ASOC_RESOURCE_DESC); 1.1135 + 1.1136 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, heartbeat_interval, CTLTYPE_UINT|CTLFLAG_RW, 1.1137 + &SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), 0, sysctl_sctp_check, "IU", 1.1138 + SCTPCTL_HEARTBEAT_INTERVAL_DESC); 1.1139 + 1.1140 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, pmtu_raise_time, CTLTYPE_UINT|CTLFLAG_RW, 1.1141 + &SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), 0, sysctl_sctp_check, "IU", 1.1142 + SCTPCTL_PMTU_RAISE_TIME_DESC); 1.1143 + 1.1144 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, shutdown_guard_time, CTLTYPE_UINT|CTLFLAG_RW, 1.1145 + &SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), 0, sysctl_sctp_check, "IU", 1.1146 + SCTPCTL_SHUTDOWN_GUARD_TIME_DESC); 1.1147 + 1.1148 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, secret_lifetime, CTLTYPE_UINT|CTLFLAG_RW, 1.1149 + &SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), 0, sysctl_sctp_check, "IU", 1.1150 + SCTPCTL_SECRET_LIFETIME_DESC); 1.1151 + 1.1152 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_max, CTLTYPE_UINT|CTLFLAG_RW, 1.1153 + &SCTP_BASE_SYSCTL(sctp_rto_max_default), 0, sysctl_sctp_check, "IU", 1.1154 + SCTPCTL_RTO_MAX_DESC); 1.1155 + 1.1156 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_min, CTLTYPE_UINT|CTLFLAG_RW, 1.1157 + &SCTP_BASE_SYSCTL(sctp_rto_min_default), 0, sysctl_sctp_check, "IU", 1.1158 + SCTPCTL_RTO_MIN_DESC); 1.1159 + 1.1160 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rto_initial, CTLTYPE_UINT|CTLFLAG_RW, 1.1161 + &SCTP_BASE_SYSCTL(sctp_rto_initial_default), 0, sysctl_sctp_check, "IU", 1.1162 + SCTPCTL_RTO_INITIAL_DESC); 1.1163 + 1.1164 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, init_rto_max, CTLTYPE_UINT|CTLFLAG_RW, 1.1165 + &SCTP_BASE_SYSCTL(sctp_init_rto_max_default), 0, sysctl_sctp_check, "IU", 1.1166 + SCTPCTL_INIT_RTO_MAX_DESC); 1.1167 + 1.1168 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, valid_cookie_life, CTLTYPE_UINT|CTLFLAG_RW, 1.1169 + &SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), 0, sysctl_sctp_check, "IU", 1.1170 + SCTPCTL_VALID_COOKIE_LIFE_DESC); 1.1171 + 1.1172 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, init_rtx_max, CTLTYPE_UINT|CTLFLAG_RW, 1.1173 + &SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), 0, sysctl_sctp_check, "IU", 1.1174 + SCTPCTL_INIT_RTX_MAX_DESC); 1.1175 + 1.1176 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, assoc_rtx_max, CTLTYPE_UINT|CTLFLAG_RW, 1.1177 + &SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), 0, sysctl_sctp_check, "IU", 1.1178 + SCTPCTL_ASSOC_RTX_MAX_DESC); 1.1179 + 1.1180 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, path_rtx_max, CTLTYPE_UINT|CTLFLAG_RW, 1.1181 + &SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), 0, sysctl_sctp_check, "IU", 1.1182 + SCTPCTL_PATH_RTX_MAX_DESC); 1.1183 + 1.1184 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, path_pf_threshold, CTLTYPE_UINT|CTLFLAG_RW, 1.1185 + &SCTP_BASE_SYSCTL(sctp_path_pf_threshold), 0, sysctl_sctp_check, "IU", 1.1186 + SCTPCTL_PATH_PF_THRESHOLD_DESC); 1.1187 + 1.1188 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, add_more_on_output, CTLTYPE_UINT|CTLFLAG_RW, 1.1189 + &SCTP_BASE_SYSCTL(sctp_add_more_threshold), 0, sysctl_sctp_check, "IU", 1.1190 + SCTPCTL_ADD_MORE_ON_OUTPUT_DESC); 1.1191 + 1.1192 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, incoming_streams, CTLTYPE_UINT|CTLFLAG_RW, 1.1193 + &SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default), 0, sysctl_sctp_check, "IU", 1.1194 + SCTPCTL_INCOMING_STREAMS_DESC); 1.1195 + 1.1196 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, outgoing_streams, CTLTYPE_UINT|CTLFLAG_RW, 1.1197 + &SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), 0, sysctl_sctp_check, "IU", 1.1198 + SCTPCTL_OUTGOING_STREAMS_DESC); 1.1199 + 1.1200 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cmt_on_off, CTLTYPE_UINT|CTLFLAG_RW, 1.1201 + &SCTP_BASE_SYSCTL(sctp_cmt_on_off), 0, sysctl_sctp_check, "IU", 1.1202 + SCTPCTL_CMT_ON_OFF_DESC); 1.1203 + 1.1204 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nr_sack_on_off, CTLTYPE_UINT | CTLFLAG_RW, 1.1205 + &SCTP_BASE_SYSCTL(sctp_nr_sack_on_off), 0, sysctl_sctp_check, "IU", 1.1206 + SCTPCTL_NR_SACK_ON_OFF_DESC); 1.1207 + 1.1208 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cmt_use_dac, CTLTYPE_UINT|CTLFLAG_RW, 1.1209 + &SCTP_BASE_SYSCTL(sctp_cmt_use_dac), 0, sysctl_sctp_check, "IU", 1.1210 + SCTPCTL_CMT_USE_DAC_DESC); 1.1211 + 1.1212 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, cwnd_maxburst, CTLTYPE_UINT|CTLFLAG_RW, 1.1213 + &SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), 0, sysctl_sctp_check, "IU", 1.1214 + SCTPCTL_CWND_MAXBURST_DESC); 1.1215 + 1.1216 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, asconf_auth_nochk, CTLTYPE_UINT|CTLFLAG_RW, 1.1217 + &SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk), 0, sysctl_sctp_check, "IU", 1.1218 + SCTPCTL_ASCONF_AUTH_NOCHK_DESC); 1.1219 + 1.1220 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, auth_disable, CTLTYPE_UINT|CTLFLAG_RW, 1.1221 + &SCTP_BASE_SYSCTL(sctp_auth_disable), 0, sysctl_sctp_check, "IU", 1.1222 + SCTPCTL_AUTH_DISABLE_DESC); 1.1223 + 1.1224 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nat_friendly, CTLTYPE_UINT|CTLFLAG_RW, 1.1225 + &SCTP_BASE_SYSCTL(sctp_nat_friendly), 0, sysctl_sctp_check, "IU", 1.1226 + SCTPCTL_NAT_FRIENDLY_DESC); 1.1227 + 1.1228 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, abc_l_var, CTLTYPE_UINT|CTLFLAG_RW, 1.1229 + &SCTP_BASE_SYSCTL(sctp_L2_abc_variable), 0, sysctl_sctp_check, "IU", 1.1230 + SCTPCTL_ABC_L_VAR_DESC); 1.1231 + 1.1232 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, max_chained_mbufs, CTLTYPE_UINT|CTLFLAG_RW, 1.1233 + &SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), 0, sysctl_sctp_check, "IU", 1.1234 + SCTPCTL_MAX_CHAINED_MBUFS_DESC); 1.1235 + 1.1236 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, do_sctp_drain, CTLTYPE_UINT|CTLFLAG_RW, 1.1237 + &SCTP_BASE_SYSCTL(sctp_do_drain), 0, sysctl_sctp_check, "IU", 1.1238 + SCTPCTL_DO_SCTP_DRAIN_DESC); 1.1239 + 1.1240 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, hb_max_burst, CTLTYPE_UINT|CTLFLAG_RW, 1.1241 + &SCTP_BASE_SYSCTL(sctp_hb_maxburst), 0, sysctl_sctp_check, "IU", 1.1242 + SCTPCTL_HB_MAX_BURST_DESC); 1.1243 + 1.1244 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, abort_at_limit, CTLTYPE_UINT|CTLFLAG_RW, 1.1245 + &SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), 0, sysctl_sctp_check, "IU", 1.1246 + SCTPCTL_ABORT_AT_LIMIT_DESC); 1.1247 + 1.1248 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_data_order, CTLTYPE_UINT|CTLFLAG_RW, 1.1249 + &SCTP_BASE_SYSCTL(sctp_strict_data_order), 0, sysctl_sctp_check, "IU", 1.1250 + SCTPCTL_STRICT_DATA_ORDER_DESC); 1.1251 + 1.1252 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, min_residual, CTLTYPE_UINT|CTLFLAG_RW, 1.1253 + &SCTP_BASE_SYSCTL(sctp_min_residual), 0, sysctl_sctp_check, "IU", 1.1254 + SCTPCTL_MIN_RESIDUAL_DESC); 1.1255 + 1.1256 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, max_retran_chunk, CTLTYPE_UINT|CTLFLAG_RW, 1.1257 + &SCTP_BASE_SYSCTL(sctp_max_retran_chunk), 0, sysctl_sctp_check, "IU", 1.1258 + SCTPCTL_MAX_RETRAN_CHUNK_DESC); 1.1259 + 1.1260 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, log_level, CTLTYPE_UINT|CTLFLAG_RW, 1.1261 + &SCTP_BASE_SYSCTL(sctp_logging_level), 0, sysctl_sctp_check, "IU", 1.1262 + SCTPCTL_LOGGING_LEVEL_DESC); 1.1263 + 1.1264 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_cc_module, CTLTYPE_UINT|CTLFLAG_RW, 1.1265 + &SCTP_BASE_SYSCTL(sctp_default_cc_module), 0, sysctl_sctp_check, "IU", 1.1266 + SCTPCTL_DEFAULT_CC_MODULE_DESC); 1.1267 + 1.1268 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_ss_module, CTLTYPE_UINT|CTLFLAG_RW, 1.1269 + &SCTP_BASE_SYSCTL(sctp_default_ss_module), 0, sysctl_sctp_check, "IU", 1.1270 + SCTPCTL_DEFAULT_SS_MODULE_DESC); 1.1271 + 1.1272 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, default_frag_interleave, CTLTYPE_UINT|CTLFLAG_RW, 1.1273 + &SCTP_BASE_SYSCTL(sctp_default_frag_interleave), 0, sysctl_sctp_check, "IU", 1.1274 + SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DESC); 1.1275 + 1.1276 +#if defined(__FreeBSD__) 1.1277 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, mobility_base, CTLTYPE_UINT|CTLFLAG_RW, 1.1278 + &SCTP_BASE_SYSCTL(sctp_mobility_base), 0, sysctl_sctp_check, "IU", 1.1279 + SCTPCTL_MOBILITY_BASE_DESC); 1.1280 +#elif defined(SCTP_APPLE_MOBILITY_BASE) 1.1281 +SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mobility_base, CTLTYPE_UINT|CTLFLAG_RW, 1.1282 + &SCTP_BASE_SYSCTL(sctp_mobility_base), 0, sysctl_sctp_check, "IU", 1.1283 + SCTPCTL_MOBILITY_BASE_DESC); 1.1284 +#endif 1.1285 + 1.1286 +#if defined(__FreeBSD__) 1.1287 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, mobility_fasthandoff, CTLTYPE_UINT|CTLFLAG_RW, 1.1288 + &SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), 0, sysctl_sctp_check, "IU", 1.1289 + SCTPCTL_MOBILITY_FASTHANDOFF_DESC); 1.1290 +#elif defined(SCTP_APPLE_MOBILITY_FASTHANDOFF) 1.1291 +SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mobility_fasthandoff, CTLTYPE_UINT|CTLFLAG_RW, 1.1292 + &SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), 0, sysctl_sctp_check, "IU", 1.1293 + SCTPCTL_MOBILITY_FASTHANDOFF_DESC); 1.1294 +#endif 1.1295 + 1.1296 +#if defined(SCTP_LOCAL_TRACE_BUF) 1.1297 +SYSCTL_VNET_STRUCT(_net_inet_sctp, OID_AUTO, log, CTLFLAG_RD, 1.1298 + &SCTP_BASE_SYSCTL(sctp_log), sctp_log, 1.1299 + "SCTP logging (struct sctp_log)"); 1.1300 + 1.1301 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, clear_trace, CTLTYPE_UINT | CTLFLAG_RW, 1.1302 + &SCTP_BASE_SYSCTL(sctp_log), 0, sysctl_sctp_cleartrace, "IU", 1.1303 + "Clear SCTP Logging buffer"); 1.1304 +#endif 1.1305 + 1.1306 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_port, CTLTYPE_UINT|CTLFLAG_RW, 1.1307 + &SCTP_BASE_SYSCTL(sctp_udp_tunneling_port), 0, sysctl_sctp_udp_tunneling_check, "IU", 1.1308 + SCTPCTL_UDP_TUNNELING_PORT_DESC); 1.1309 + 1.1310 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, enable_sack_immediately, CTLTYPE_UINT|CTLFLAG_RW, 1.1311 + &SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), 0, sysctl_sctp_check, "IU", 1.1312 + SCTPCTL_SACK_IMMEDIATELY_ENABLE_DESC); 1.1313 + 1.1314 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, nat_friendly_init, CTLTYPE_UINT|CTLFLAG_RW, 1.1315 + &SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), 0, sysctl_sctp_check, "IU", 1.1316 + SCTPCTL_NAT_FRIENDLY_INITS_DESC); 1.1317 + 1.1318 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, vtag_time_wait, CTLTYPE_UINT|CTLFLAG_RW, 1.1319 + &SCTP_BASE_SYSCTL(sctp_vtag_time_wait), 0, sysctl_sctp_check, "IU", 1.1320 + SCTPCTL_TIME_WAIT_DESC); 1.1321 + 1.1322 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, buffer_splitting, CTLTYPE_UINT|CTLFLAG_RW, 1.1323 + &SCTP_BASE_SYSCTL(sctp_buffer_splitting), 0, sysctl_sctp_check, "IU", 1.1324 + SCTPCTL_BUFFER_SPLITTING_DESC); 1.1325 + 1.1326 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, initial_cwnd, CTLTYPE_UINT|CTLFLAG_RW, 1.1327 + &SCTP_BASE_SYSCTL(sctp_initial_cwnd), 0, sysctl_sctp_check, "IU", 1.1328 + SCTPCTL_INITIAL_CWND_DESC); 1.1329 + 1.1330 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rttvar_bw, CTLTYPE_UINT|CTLFLAG_RW, 1.1331 + &SCTP_BASE_SYSCTL(sctp_rttvar_bw), 0, sysctl_sctp_check, "IU", 1.1332 + SCTPCTL_RTTVAR_BW_DESC); 1.1333 + 1.1334 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rttvar_rtt, CTLTYPE_UINT|CTLFLAG_RW, 1.1335 + &SCTP_BASE_SYSCTL(sctp_rttvar_rtt), 0, sysctl_sctp_check, "IU", 1.1336 + SCTPCTL_RTTVAR_RTT_DESC); 1.1337 + 1.1338 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rttvar_eqret, CTLTYPE_UINT|CTLFLAG_RW, 1.1339 + &SCTP_BASE_SYSCTL(sctp_rttvar_eqret), 0, sysctl_sctp_check, "IU", 1.1340 + SCTPCTL_RTTVAR_EQRET_DESC); 1.1341 + 1.1342 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, rttvar_steady_step, CTLTYPE_UINT|CTLFLAG_RW, 1.1343 + &SCTP_BASE_SYSCTL(sctp_steady_step), 0, sysctl_sctp_check, "IU", 1.1344 + SCTPCTL_RTTVAR_STEADYS_DESC); 1.1345 + 1.1346 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, use_dcccecn, CTLTYPE_UINT|CTLFLAG_RW, 1.1347 + &SCTP_BASE_SYSCTL(sctp_use_dccc_ecn), 0, sysctl_sctp_check, "IU", 1.1348 + SCTPCTL_RTTVAR_DCCCECN_DESC); 1.1349 + 1.1350 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, blackhole, CTLTYPE_UINT|CTLFLAG_RW, 1.1351 + &SCTP_BASE_SYSCTL(sctp_blackhole), 0, sysctl_sctp_check, "IU", 1.1352 + SCTPCTL_BLACKHOLE_DESC); 1.1353 + 1.1354 +#ifdef SCTP_DEBUG 1.1355 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, debug, CTLTYPE_UINT|CTLFLAG_RW, 1.1356 + &SCTP_BASE_SYSCTL(sctp_debug_on), 0, sysctl_sctp_check, "IU", 1.1357 + SCTPCTL_DEBUG_DESC); 1.1358 +#endif 1.1359 + 1.1360 +#if defined(__APPLE__) 1.1361 +SYSCTL_INT(_net_inet_sctp, OID_AUTO, main_timer, CTLFLAG_RW, 1.1362 + &SCTP_BASE_SYSCTL(sctp_main_timer), 0, "Main timer interval in ms"); 1.1363 + 1.1364 +SYSCTL_PROC(_net_inet_sctp, OID_AUTO, ignore_vmware_interfaces, CTLTYPE_UINT|CTLFLAG_RW, 1.1365 + &SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces), 0, sysctl_sctp_vmware_interfaces_check, "IU", 1.1366 + SCTPCTL_IGNORE_VMWARE_INTERFACES_DESC); 1.1367 + 1.1368 +SYSCTL_INT(_net_inet_sctp, OID_AUTO, addr_watchdog_limit, CTLFLAG_RW, 1.1369 + &SCTP_BASE_SYSCTL(sctp_addr_watchdog_limit), 0, "Addr watchdog intervall"); 1.1370 + 1.1371 +SYSCTL_INT(_net_inet_sctp, OID_AUTO, vtag_watchdog_limit, CTLFLAG_RW, 1.1372 + &SCTP_BASE_SYSCTL(sctp_vtag_watchdog_limit), 0, "Vtag watchdog intervall"); 1.1373 +#endif 1.1374 + 1.1375 +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) 1.1376 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, output_unlocked, CTLTYPE_UINT|CTLFLAG_RW, 1.1377 + &SCTP_BASE_SYSCTL(sctp_output_unlocked), 0, sysctl_sctp_check, "IU", 1.1378 + SCTPCTL_OUTPUT_UNLOCKED_DESC); 1.1379 +#endif 1.1380 + 1.1381 +#if defined(__FreeBSD__) && defined(SMP) && defined(SCTP_USE_PERCPU_STAT) 1.1382 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, stats, 1.1383 + CTLTYPE_STRUCT|CTLFLAG_RW, 1.1384 + 0, 0, sysctl_stat_get, "S,sctpstat", 1.1385 + "SCTP statistics (struct sctp_stat)"); 1.1386 +#else 1.1387 +SYSCTL_VNET_STRUCT(_net_inet_sctp, OID_AUTO, stats, CTLFLAG_RW, 1.1388 + &SCTP_BASE_STATS_SYSCTL, sctpstat, 1.1389 + "SCTP statistics (struct sctp_stat)"); 1.1390 +#endif 1.1391 + 1.1392 +SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, assoclist, CTLTYPE_OPAQUE | CTLFLAG_RD, 1.1393 + 0, 0, sctp_assoclist, 1.1394 + "S,xassoc", "List of active SCTP associations"); 1.1395 + 1.1396 +#elif defined(__Windows__) 1.1397 +void sysctl_setup_sctp(void) 1.1398 +{ 1.1399 + sysctl_add_oid(&sysctl_oid_top, "sendspace", CTLTYPE_INT|CTLFLAG_RW, 1.1400 + &SCTP_BASE_SYSCTL(sctp_sendspace), 0, sysctl_sctp_check, 1.1401 + SCTPCTL_MAXDGRAM_DESC); 1.1402 + 1.1403 + sysctl_add_oid(&sysctl_oid_top, "recvspace", CTLTYPE_INT|CTLFLAG_RW, 1.1404 + &SCTP_BASE_SYSCTL(sctp_recvspace), 0, sysctl_sctp_check, 1.1405 + SCTPCTL_RECVSPACE_DESC); 1.1406 + 1.1407 + sysctl_add_oid(&sysctl_oid_top, "auto_asconf", CTLTYPE_INT|CTLFLAG_RW, 1.1408 + &SCTP_BASE_SYSCTL(sctp_auto_asconf), 0, sysctl_sctp_check, 1.1409 + SCTPCTL_AUTOASCONF_DESC); 1.1410 + 1.1411 + sysctl_add_oid(&sysctl_oid_top, "ecn_enable", CTLTYPE_INT|CTLFLAG_RW, 1.1412 + &SCTP_BASE_SYSCTL(sctp_ecn_enable), 0, sysctl_sctp_check, 1.1413 + SCTPCTL_ECN_ENABLE_DESC); 1.1414 + 1.1415 + sysctl_add_oid(&sysctl_oid_top, "strict_sacks", CTLTYPE_INT|CTLFLAG_RW, 1.1416 + &SCTP_BASE_SYSCTL(sctp_strict_sacks), 0, sysctl_sctp_check, 1.1417 + SCTPCTL_STRICT_SACKS_DESC); 1.1418 + 1.1419 +#if !(defined(__FreeBSD__) && __FreeBSD_version >= 800000) 1.1420 +#if !defined(SCTP_WITH_NO_CSUM) 1.1421 + sysctl_add_oid(&sysctl_oid_top, "loopback_nocsum", CTLTYPE_INT|CTLFLAG_RW, 1.1422 + &SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), 0, sysctl_sctp_check, 1.1423 + SCTPCTL_LOOPBACK_NOCSUM_DESC); 1.1424 +#endif 1.1425 +#endif 1.1426 + 1.1427 + sysctl_add_oid(&sysctl_oid_top, "peer_chkoh", CTLTYPE_INT|CTLFLAG_RW, 1.1428 + &SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), 0, sysctl_sctp_check, 1.1429 + SCTPCTL_PEER_CHKOH_DESC); 1.1430 + 1.1431 + sysctl_add_oid(&sysctl_oid_top, "maxburst", CTLTYPE_INT|CTLFLAG_RW, 1.1432 + &SCTP_BASE_SYSCTL(sctp_max_burst_default), 0, sysctl_sctp_check, 1.1433 + SCTPCTL_MAXBURST_DESC); 1.1434 + 1.1435 + sysctl_add_oid(&sysctl_oid_top, "fr_maxburst", CTLTYPE_INT|CTLFLAG_RW, 1.1436 + &SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), 0, sysctl_sctp_check, 1.1437 + SCTPCTL_FRMAXBURST_DESC); 1.1438 + 1.1439 + sysctl_add_oid(&sysctl_oid_top, "maxchunks", CTLTYPE_INT|CTLFLAG_RW, 1.1440 + &SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), 0, sysctl_sctp_check, 1.1441 + SCTPCTL_MAXCHUNKS_DESC); 1.1442 + 1.1443 + sysctl_add_oid(&sysctl_oid_top, "tcbhashsize", CTLTYPE_INT|CTLFLAG_RW, 1.1444 + &SCTP_BASE_SYSCTL(sctp_hashtblsize), 0, sysctl_sctp_check, 1.1445 + SCTPCTL_TCBHASHSIZE_DESC); 1.1446 + 1.1447 + sysctl_add_oid(&sysctl_oid_top, "pcbhashsize", CTLTYPE_INT|CTLFLAG_RW, 1.1448 + &SCTP_BASE_SYSCTL(sctp_pcbtblsize), 0, sysctl_sctp_check, 1.1449 + SCTPCTL_PCBHASHSIZE_DESC); 1.1450 + 1.1451 + sysctl_add_oid(&sysctl_oid_top, "min_split_point", CTLTYPE_INT|CTLFLAG_RW, 1.1452 + &SCTP_BASE_SYSCTL(sctp_min_split_point), 0, sysctl_sctp_check, 1.1453 + SCTPCTL_MIN_SPLIT_POINT_DESC); 1.1454 + 1.1455 + sysctl_add_oid(&sysctl_oid_top, "chunkscale", CTLTYPE_INT|CTLFLAG_RW, 1.1456 + &SCTP_BASE_SYSCTL(sctp_chunkscale), 0, sysctl_sctp_check, 1.1457 + SCTPCTL_CHUNKSCALE_DESC); 1.1458 + 1.1459 + sysctl_add_oid(&sysctl_oid_top, "delayed_sack_time", CTLTYPE_INT|CTLFLAG_RW, 1.1460 + &SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), 0, sysctl_sctp_check, 1.1461 + SCTPCTL_DELAYED_SACK_TIME_DESC); 1.1462 + 1.1463 + sysctl_add_oid(&sysctl_oid_top, "sack_freq", CTLTYPE_INT|CTLFLAG_RW, 1.1464 + &SCTP_BASE_SYSCTL(sctp_sack_freq_default), 0, sysctl_sctp_check, 1.1465 + SCTPCTL_SACK_FREQ_DESC); 1.1466 + 1.1467 + sysctl_add_oid(&sysctl_oid_top, "sys_resource", CTLTYPE_INT|CTLFLAG_RW, 1.1468 + &SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), 0, sysctl_sctp_check, 1.1469 + SCTPCTL_SYS_RESOURCE_DESC); 1.1470 + 1.1471 + sysctl_add_oid(&sysctl_oid_top, "asoc_resource", CTLTYPE_INT|CTLFLAG_RW, 1.1472 + &SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), 0, sysctl_sctp_check, 1.1473 + SCTPCTL_ASOC_RESOURCE_DESC); 1.1474 + 1.1475 + sysctl_add_oid(&sysctl_oid_top, "heartbeat_interval", CTLTYPE_INT|CTLFLAG_RW, 1.1476 + &SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), 0, sysctl_sctp_check, 1.1477 + SCTPCTL_HEARTBEAT_INTERVAL_DESC); 1.1478 + 1.1479 + sysctl_add_oid(&sysctl_oid_top, "pmtu_raise_time", CTLTYPE_INT|CTLFLAG_RW, 1.1480 + &SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), 0, sysctl_sctp_check, 1.1481 + SCTPCTL_PMTU_RAISE_TIME_DESC); 1.1482 + 1.1483 + sysctl_add_oid(&sysctl_oid_top, "shutdown_guard_time", CTLTYPE_INT|CTLFLAG_RW, 1.1484 + &SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), 0, sysctl_sctp_check, 1.1485 + SCTPCTL_SHUTDOWN_GUARD_TIME_DESC); 1.1486 + 1.1487 + sysctl_add_oid(&sysctl_oid_top, "secret_lifetime", CTLTYPE_INT|CTLFLAG_RW, 1.1488 + &SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), 0, sysctl_sctp_check, 1.1489 + SCTPCTL_SECRET_LIFETIME_DESC); 1.1490 + 1.1491 + sysctl_add_oid(&sysctl_oid_top, "rto_max", CTLTYPE_INT|CTLFLAG_RW, 1.1492 + &SCTP_BASE_SYSCTL(sctp_rto_max_default), 0, sysctl_sctp_check, 1.1493 + SCTPCTL_RTO_MAX_DESC); 1.1494 + 1.1495 + sysctl_add_oid(&sysctl_oid_top, "rto_min", CTLTYPE_INT|CTLFLAG_RW, 1.1496 + &SCTP_BASE_SYSCTL(sctp_rto_min_default), 0, sysctl_sctp_check, 1.1497 + SCTPCTL_RTO_MIN_DESC); 1.1498 + 1.1499 + sysctl_add_oid(&sysctl_oid_top, "rto_initial", CTLTYPE_INT|CTLFLAG_RW, 1.1500 + &SCTP_BASE_SYSCTL(sctp_rto_initial_default), 0, sysctl_sctp_check, 1.1501 + SCTPCTL_RTO_INITIAL_DESC); 1.1502 + 1.1503 + sysctl_add_oid(&sysctl_oid_top, "init_rto_max", CTLTYPE_INT|CTLFLAG_RW, 1.1504 + &SCTP_BASE_SYSCTL(sctp_init_rto_max_default), 0, sysctl_sctp_check, 1.1505 + SCTPCTL_INIT_RTO_MAX_DESC); 1.1506 + 1.1507 + sysctl_add_oid(&sysctl_oid_top, "valid_cookie_life", CTLTYPE_INT|CTLFLAG_RW, 1.1508 + &SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), 0, sysctl_sctp_check, 1.1509 + SCTPCTL_VALID_COOKIE_LIFE_DESC); 1.1510 + 1.1511 + sysctl_add_oid(&sysctl_oid_top, "init_rtx_max", CTLTYPE_INT|CTLFLAG_RW, 1.1512 + &SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), 0, sysctl_sctp_check, 1.1513 + SCTPCTL_INIT_RTX_MAX_DESC); 1.1514 + 1.1515 + sysctl_add_oid(&sysctl_oid_top, "assoc_rtx_max", CTLTYPE_INT|CTLFLAG_RW, 1.1516 + &SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), 0, sysctl_sctp_check, 1.1517 + SCTPCTL_ASSOC_RTX_MAX_DESC); 1.1518 + 1.1519 + sysctl_add_oid(&sysctl_oid_top, "path_rtx_max", CTLTYPE_INT|CTLFLAG_RW, 1.1520 + &SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), 0, sysctl_sctp_check, 1.1521 + SCTPCTL_PATH_RTX_MAX_DESC); 1.1522 + 1.1523 + sysctl_add_oid(&sysctl_oid_top, "path_pf_threshold", CTLTYPE_INT|CTLFLAG_RW, 1.1524 + &SCTP_BASE_SYSCTL(sctp_path_pf_threshold), 0, sysctl_sctp_check, 1.1525 + SCTPCTL_PATH_PF_THRESHOLD_DESC); 1.1526 + 1.1527 + sysctl_add_oid(&sysctl_oid_top, "add_more_on_output", CTLTYPE_INT|CTLFLAG_RW, 1.1528 + &SCTP_BASE_SYSCTL(sctp_add_more_threshold), 0, sysctl_sctp_check, 1.1529 + SCTPCTL_ADD_MORE_ON_OUTPUT_DESC); 1.1530 + 1.1531 + sysctl_add_oid(&sysctl_oid_top, "incoming_streams", CTLTYPE_INT|CTLFLAG_RW, 1.1532 + &SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default), 0, sysctl_sctp_check, 1.1533 + SCTPCTL_INCOMING_STREAMS_DESC); 1.1534 + 1.1535 + sysctl_add_oid(&sysctl_oid_top, "outgoing_streams", CTLTYPE_INT|CTLFLAG_RW, 1.1536 + &SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), 0, sysctl_sctp_check, 1.1537 + SCTPCTL_OUTGOING_STREAMS_DESC); 1.1538 + 1.1539 + sysctl_add_oid(&sysctl_oid_top, "cmt_on_off", CTLTYPE_INT|CTLFLAG_RW, 1.1540 + &SCTP_BASE_SYSCTL(sctp_cmt_on_off), 0, sysctl_sctp_check, 1.1541 + SCTPCTL_CMT_ON_OFF_DESC); 1.1542 + 1.1543 + /* EY */ 1.1544 + sysctl_add_oid(&sysctl_oid_top, "nr_sack_on_off", CTLTYPE_INT|CTLFLAG_RW, 1.1545 + &SCTP_BASE_SYSCTL(sctp_nr_sack_on_off), 0, sysctl_sctp_check, 1.1546 + SCTPCTL_NR_SACK_ON_OFF_DESC); 1.1547 + 1.1548 + sysctl_add_oid(&sysctl_oid_top, "cmt_use_dac", CTLTYPE_INT|CTLFLAG_RW, 1.1549 + &SCTP_BASE_SYSCTL(sctp_cmt_use_dac), 0, sysctl_sctp_check, 1.1550 + SCTPCTL_CMT_USE_DAC_DESC); 1.1551 + 1.1552 + sysctl_add_oid(&sysctl_oid_top, "cwnd_maxburst", CTLTYPE_INT|CTLFLAG_RW, 1.1553 + &SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), 0, sysctl_sctp_check, 1.1554 + SCTPCTL_CWND_MAXBURST_DESC); 1.1555 + 1.1556 + sysctl_add_oid(&sysctl_oid_top, "asconf_auth_nochk", CTLTYPE_INT|CTLFLAG_RW, 1.1557 + &SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk), 0, sysctl_sctp_check, 1.1558 + SCTPCTL_ASCONF_AUTH_NOCHK_DESC); 1.1559 + 1.1560 + sysctl_add_oid(&sysctl_oid_top, "auth_disable", CTLTYPE_INT|CTLFLAG_RW, 1.1561 + &SCTP_BASE_SYSCTL(sctp_auth_disable), 0, sysctl_sctp_check, 1.1562 + SCTPCTL_AUTH_DISABLE_DESC); 1.1563 + 1.1564 + sysctl_add_oid(&sysctl_oid_top, "nat_friendly", CTLTYPE_INT|CTLFLAG_RW, 1.1565 + &SCTP_BASE_SYSCTL(sctp_nat_friendly), 0, sysctl_sctp_check, 1.1566 + SCTPCTL_NAT_FRIENDLY_DESC); 1.1567 + 1.1568 + sysctl_add_oid(&sysctl_oid_top, "abc_l_var", CTLTYPE_INT|CTLFLAG_RW, 1.1569 + &SCTP_BASE_SYSCTL(sctp_L2_abc_variable), 0, sysctl_sctp_check, 1.1570 + SCTPCTL_ABC_L_VAR_DESC); 1.1571 + 1.1572 + sysctl_add_oid(&sysctl_oid_top, "max_chained_mbufs", CTLTYPE_INT|CTLFLAG_RW, 1.1573 + &SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), 0, sysctl_sctp_check, 1.1574 + SCTPCTL_MAX_CHAINED_MBUFS_DESC); 1.1575 + 1.1576 + sysctl_add_oid(&sysctl_oid_top, "do_sctp_drain", CTLTYPE_INT|CTLFLAG_RW, 1.1577 + &SCTP_BASE_SYSCTL(sctp_do_drain), 0, sysctl_sctp_check, 1.1578 + SCTPCTL_DO_SCTP_DRAIN_DESC); 1.1579 + 1.1580 + sysctl_add_oid(&sysctl_oid_top, "hb_max_burst", CTLTYPE_INT|CTLFLAG_RW, 1.1581 + &SCTP_BASE_SYSCTL(sctp_hb_maxburst), 0, sysctl_sctp_check, 1.1582 + SCTPCTL_HB_MAX_BURST_DESC); 1.1583 + 1.1584 + sysctl_add_oid(&sysctl_oid_top, "abort_at_limit", CTLTYPE_INT|CTLFLAG_RW, 1.1585 + &SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), 0, sysctl_sctp_check, 1.1586 + SCTPCTL_ABORT_AT_LIMIT_DESC); 1.1587 + 1.1588 + sysctl_add_oid(&sysctl_oid_top, "strict_data_order", CTLTYPE_INT|CTLFLAG_RW, 1.1589 + &SCTP_BASE_SYSCTL(sctp_strict_data_order), 0, sysctl_sctp_check, 1.1590 + SCTPCTL_STRICT_DATA_ORDER_DESC); 1.1591 + 1.1592 + sysctl_add_oid(&sysctl_oid_top, "min_residual", CTLTYPE_INT|CTLFLAG_RW, 1.1593 + &SCTP_BASE_SYSCTL(sctp_min_residual), 0, sysctl_sctp_check, 1.1594 + SCTPCTL_MIN_RESIDUAL_DESC); 1.1595 + 1.1596 + sysctl_add_oid(&sysctl_oid_top, "max_retran_chunk", CTLTYPE_INT|CTLFLAG_RW, 1.1597 + &SCTP_BASE_SYSCTL(sctp_max_retran_chunk), 0, sysctl_sctp_check, 1.1598 + SCTPCTL_MAX_RETRAN_CHUNK_DESC); 1.1599 + 1.1600 + sysctl_add_oid(&sysctl_oid_top, "log_level", CTLTYPE_INT|CTLFLAG_RW, 1.1601 + &SCTP_BASE_SYSCTL(sctp_logging_level), 0, sysctl_sctp_check, 1.1602 + SCTPCTL_LOGGING_LEVEL_DESC); 1.1603 + 1.1604 + sysctl_add_oid(&sysctl_oid_top, "default_cc_module", CTLTYPE_INT|CTLFLAG_RW, 1.1605 + &SCTP_BASE_SYSCTL(sctp_default_cc_module), 0, sysctl_sctp_check, 1.1606 + SCTPCTL_DEFAULT_CC_MODULE_DESC); 1.1607 + 1.1608 + sysctl_add_oid(&sysctl_oid_top, "default_ss_module", CTLTYPE_INT|CTLFLAG_RW, 1.1609 + &SCTP_BASE_SYSCTL(sctp_default_ss_module), 0, sysctl_sctp_check, 1.1610 + SCTPCTL_DEFAULT_SS_MODULE_DESC); 1.1611 + 1.1612 + sysctl_add_oid(&sysctl_oid_top, "default_frag_interleave", CTLTYPE_INT|CTLFLAG_RW, 1.1613 + &SCTP_BASE_SYSCTL(sctp_default_frag_interleave), 0, sysctl_sctp_check, 1.1614 + SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DESC); 1.1615 + 1.1616 + sysctl_add_oid(&sysctl_oid_top, "mobility_base", CTLTYPE_INT|CTLFLAG_RW, 1.1617 + &SCTP_BASE_SYSCTL(sctp_mobility_base), 0, sysctl_sctp_check, 1.1618 + SCTPCTL_MOBILITY_BASE_DESC); 1.1619 + 1.1620 + sysctl_add_oid(&sysctl_oid_top, "mobility_fasthandoff", CTLTYPE_INT|CTLFLAG_RW, 1.1621 + &SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), 0, sysctl_sctp_check, 1.1622 + SCTPCTL_MOBILITY_FASTHANDOFF_DESC); 1.1623 + 1.1624 +#if defined(SCTP_LOCAL_TRACE_BUF) 1.1625 + sysctl_add_oid(&sysctl_oid_top, "sctp_log", CTLTYPE_STRUCT|CTLFLAG_RD, 1.1626 + SCTP_BASE_SYSCTL(sctp_log), sizeof(struct sctp_log), NULL, 1.1627 + "SCTP logging (struct sctp_log)"); 1.1628 + 1.1629 + sysctl_add_oid(&sysctl_oid_top, "clear_trace", CTLTYPE_INT|CTLFLAG_WR, 1.1630 + NULL, 0, sysctl_sctp_cleartrace, 1.1631 + "Clear SCTP Logging buffer"); 1.1632 +#endif 1.1633 + 1.1634 + sysctl_add_oid(&sysctl_oid_top, "udp_tunneling_port", CTLTYPE_INT|CTLFLAG_RW, 1.1635 + &SCTP_BASE_SYSCTL(sctp_udp_tunneling_port), 0, sysctl_sctp_udp_tunneling_check, 1.1636 + SCTPCTL_UDP_TUNNELING_PORT_DESC); 1.1637 + 1.1638 + sysctl_add_oid(&sysctl_oid_top, "enable_sack_immediately", CTLTYPE_INT|CTLFLAG_RW, 1.1639 + &SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), 0, sysctl_sctp_check, 1.1640 + SCTPCTL_SACK_IMMEDIATELY_ENABLE_DESC); 1.1641 + 1.1642 + sysctl_add_oid(&sysctl_oid_top, "nat_friendly_init", CTLTYPE_INT|CTLFLAG_RW, 1.1643 + &SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), 0, sysctl_sctp_check, 1.1644 + SCTPCTL_NAT_FRIENDLY_DESC); 1.1645 + 1.1646 + sysctl_add_oid(&sysctl_oid_top, "vtag_time_wait", CTLTYPE_INT|CTLFLAG_RW, 1.1647 + &SCTP_BASE_SYSCTL(sctp_vtag_time_wait), 0, sysctl_sctp_check, 1.1648 + SCTPCTL_TIME_WAIT_DESC); 1.1649 + 1.1650 + sysctl_add_oid(&sysctl_oid_top, "buffer_splitting", CTLTYPE_INT|CTLFLAG_RW, 1.1651 + &SCTP_BASE_SYSCTL(sctp_buffer_splitting), 0, sysctl_sctp_check, 1.1652 + SCTPCTL_BUFFER_SPLITTING_DESC); 1.1653 + 1.1654 + sysctl_add_oid(&sysctl_oid_top, "initial_cwnd", CTLTYPE_INT|CTLFLAG_RW, 1.1655 + &SCTP_BASE_SYSCTL(sctp_initial_cwnd), 0, sysctl_sctp_check, 1.1656 + SCTPCTL_INITIAL_CWND_DESC); 1.1657 + 1.1658 + sysctl_add_oid(&sysctl_oid_top, "rttvar_bw", CTLTYPE_INT|CTLFLAG_RW, 1.1659 + &SCTP_BASE_SYSCTL(sctp_rttvar_bw), 0, sysctl_sctp_check, 1.1660 + SCTPCTL_RTTVAR_BW_DESC); 1.1661 + 1.1662 + sysctl_add_oid(&sysctl_oid_top, "rttvar_rtt", CTLTYPE_INT|CTLFLAG_RW, 1.1663 + &SCTP_BASE_SYSCTL(sctp_rttvar_rtt), 0, sysctl_sctp_check, 1.1664 + SCTPCTL_RTTVAR_RTT_DESC); 1.1665 + 1.1666 + sysctl_add_oid(&sysctl_oid_top, "rttvar_eqret", CTLTYPE_INT|CTLFLAG_RW, 1.1667 + &SCTP_BASE_SYSCTL(sctp_rttvar_eqret), 0, sysctl_sctp_check, 1.1668 + SCTPCTL_RTTVAR_EQRET_DESC); 1.1669 + 1.1670 + sysctl_add_oid(&sysctl_oid_top, "rttvar_steady_step", CTLTYPE_INT|CTLFLAG_RW, 1.1671 + &SCTP_BASE_SYSCTL(sctp_steady_step), 0, sysctl_sctp_check, 1.1672 + SCTPCTL_RTTVAR_STEADYS_DESC); 1.1673 + 1.1674 + sysctl_add_oid(&sysctl_oid_top, "use_dcccecn", CTLTYPE_INT|CTLFLAG_RW, 1.1675 + &SCTP_BASE_SYSCTL(sctp_use_dccc_ecn), 0, sysctl_sctp_check, 1.1676 + SCTPCTL_RTTVAR_DCCCECN_DESC); 1.1677 + 1.1678 + sysctl_add_oid(&sysctl_oid_top, "blackhole", CTLTYPE_INT|CTLFLAG_RW, 1.1679 + &SCTP_BASE_SYSCTL(sctp_blackhole), 0, sysctl_sctp_check, 1.1680 + SCTPCTL_BLACKHOLE_DESC); 1.1681 + 1.1682 +#ifdef SCTP_DEBUG 1.1683 + sysctl_add_oid(&sysctl_oid_top, "debug", CTLTYPE_INT|CTLFLAG_RW, 1.1684 + &SCTP_BASE_SYSCTL(sctp_debug_on), sizeof(SCTP_BASE_SYSCTL(sctp_debug_on)), NULL, 1.1685 + SCTPCTL_DEBUG_DESC); 1.1686 +#endif /* SCTP_DEBUG */ 1.1687 + 1.1688 + sysctl_add_oid(&sysctl_oid_top, "stats", CTLTYPE_STRUCT|CTLFLAG_RW, 1.1689 + &SCTP_BASE_STATS, sizeof(SCTP_BASE_STATS), NULL, 1.1690 + "SCTP statistics (struct sctp_stat)"); 1.1691 + 1.1692 + sysctl_add_oid(&sysctl_oid_top, "assoclist", CTLTYPE_STRUCT|CTLFLAG_RD, 1.1693 + NULL, 0, sctp_assoclist, 1.1694 + "List of active SCTP associations"); 1.1695 +} 1.1696 +#endif 1.1697 +#endif