netwerk/sctp/src/netinet/sctp_sysctl.c

changeset 0
6474c204b198
     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

mercurial