LCOV - code coverage report
Current view: top level - netwerk/sctp/src/netinet - sctp_sysctl.c (source / functions) Hit Total Coverage
Test: output.info Lines: 0 75 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-
       2             :  * Copyright (c) 2007, by Cisco Systems, Inc. All rights reserved.
       3             :  * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
       4             :  * Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved.
       5             :  *
       6             :  * Redistribution and use in source and binary forms, with or without
       7             :  * modification, are permitted provided that the following conditions are met:
       8             :  *
       9             :  * a) Redistributions of source code must retain the above copyright notice,
      10             :  *    this list of conditions and the following disclaimer.
      11             :  *
      12             :  * b) Redistributions in binary form must reproduce the above copyright
      13             :  *    notice, this list of conditions and the following disclaimer in
      14             :  *    the documentation and/or other materials provided with the distribution.
      15             :  *
      16             :  * c) Neither the name of Cisco Systems, Inc. nor the names of its
      17             :  *    contributors may be used to endorse or promote products derived
      18             :  *    from this software without specific prior written permission.
      19             :  *
      20             :  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      21             :  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
      22             :  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      23             :  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
      24             :  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      25             :  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
      26             :  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      27             :  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
      28             :  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      29             :  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
      30             :  * THE POSSIBILITY OF SUCH DAMAGE.
      31             :  */
      32             : 
      33             : #ifdef __FreeBSD__
      34             : #include <sys/cdefs.h>
      35             : __FBSDID("$FreeBSD: head/sys/netinet/sctp_sysctl.c 277424 2015-01-20 19:08:55Z tuexen $");
      36             : #endif
      37             : 
      38             : #include <netinet/sctp_os.h>
      39             : #include <netinet/sctp.h>
      40             : #include <netinet/sctp_constants.h>
      41             : #include <netinet/sctp_sysctl.h>
      42             : #include <netinet/sctp_pcb.h>
      43             : #include <netinet/sctputil.h>
      44             : #include <netinet/sctp_output.h>
      45             : #ifdef __FreeBSD__
      46             : #include <sys/smp.h>
      47             : #include <sys/sysctl.h>
      48             : #endif
      49             : #if defined(__APPLE__)
      50             : #include <netinet/sctp_bsd_addr.h>
      51             : #endif
      52             : 
      53             : #ifdef __FreeBSD__
      54             : FEATURE(sctp, "Stream Control Transmission Protocol");
      55             : #endif
      56             : 
      57             : /*
      58             :  * sysctl tunable variables
      59             :  */
      60             : 
      61             : void
      62           0 : sctp_init_sysctls()
      63             : {
      64           0 :         SCTP_BASE_SYSCTL(sctp_sendspace) = SCTPCTL_MAXDGRAM_DEFAULT;
      65           0 :         SCTP_BASE_SYSCTL(sctp_recvspace) = SCTPCTL_RECVSPACE_DEFAULT;
      66           0 :         SCTP_BASE_SYSCTL(sctp_auto_asconf) = SCTPCTL_AUTOASCONF_DEFAULT;
      67           0 :         SCTP_BASE_SYSCTL(sctp_multiple_asconfs) = SCTPCTL_MULTIPLEASCONFS_DEFAULT;
      68           0 :         SCTP_BASE_SYSCTL(sctp_ecn_enable) = SCTPCTL_ECN_ENABLE_DEFAULT;
      69           0 :         SCTP_BASE_SYSCTL(sctp_pr_enable) = SCTPCTL_PR_ENABLE_DEFAULT;
      70           0 :         SCTP_BASE_SYSCTL(sctp_auth_enable) = SCTPCTL_AUTH_ENABLE_DEFAULT;
      71           0 :         SCTP_BASE_SYSCTL(sctp_asconf_enable) = SCTPCTL_ASCONF_ENABLE_DEFAULT;
      72           0 :         SCTP_BASE_SYSCTL(sctp_reconfig_enable) = SCTPCTL_RECONFIG_ENABLE_DEFAULT;
      73           0 :         SCTP_BASE_SYSCTL(sctp_nrsack_enable) = SCTPCTL_NRSACK_ENABLE_DEFAULT;
      74           0 :         SCTP_BASE_SYSCTL(sctp_pktdrop_enable) = SCTPCTL_PKTDROP_ENABLE_DEFAULT;
      75           0 :         SCTP_BASE_SYSCTL(sctp_strict_sacks) = SCTPCTL_STRICT_SACKS_DEFAULT;
      76             : #if !(defined(__FreeBSD__) && __FreeBSD_version >= 800000)
      77             : #if !defined(SCTP_WITH_NO_CSUM)
      78           0 :         SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback) = SCTPCTL_LOOPBACK_NOCSUM_DEFAULT;
      79             : #endif
      80             : #endif
      81           0 :         SCTP_BASE_SYSCTL(sctp_peer_chunk_oh) = SCTPCTL_PEER_CHKOH_DEFAULT;
      82           0 :         SCTP_BASE_SYSCTL(sctp_max_burst_default) = SCTPCTL_MAXBURST_DEFAULT;
      83           0 :         SCTP_BASE_SYSCTL(sctp_fr_max_burst_default) = SCTPCTL_FRMAXBURST_DEFAULT;
      84           0 :         SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue) = SCTPCTL_MAXCHUNKS_DEFAULT;
      85           0 :         SCTP_BASE_SYSCTL(sctp_hashtblsize) = SCTPCTL_TCBHASHSIZE_DEFAULT;
      86           0 :         SCTP_BASE_SYSCTL(sctp_pcbtblsize) = SCTPCTL_PCBHASHSIZE_DEFAULT;
      87           0 :         SCTP_BASE_SYSCTL(sctp_min_split_point) = SCTPCTL_MIN_SPLIT_POINT_DEFAULT;
      88           0 :         SCTP_BASE_SYSCTL(sctp_chunkscale) = SCTPCTL_CHUNKSCALE_DEFAULT;
      89           0 :         SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default) = SCTPCTL_DELAYED_SACK_TIME_DEFAULT;
      90           0 :         SCTP_BASE_SYSCTL(sctp_sack_freq_default) = SCTPCTL_SACK_FREQ_DEFAULT;
      91           0 :         SCTP_BASE_SYSCTL(sctp_system_free_resc_limit) = SCTPCTL_SYS_RESOURCE_DEFAULT;
      92           0 :         SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit) = SCTPCTL_ASOC_RESOURCE_DEFAULT;
      93           0 :         SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default) = SCTPCTL_HEARTBEAT_INTERVAL_DEFAULT;
      94           0 :         SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default) = SCTPCTL_PMTU_RAISE_TIME_DEFAULT;
      95           0 :         SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default) = SCTPCTL_SHUTDOWN_GUARD_TIME_DEFAULT;
      96           0 :         SCTP_BASE_SYSCTL(sctp_secret_lifetime_default) = SCTPCTL_SECRET_LIFETIME_DEFAULT;
      97           0 :         SCTP_BASE_SYSCTL(sctp_rto_max_default) = SCTPCTL_RTO_MAX_DEFAULT;
      98           0 :         SCTP_BASE_SYSCTL(sctp_rto_min_default) = SCTPCTL_RTO_MIN_DEFAULT;
      99           0 :         SCTP_BASE_SYSCTL(sctp_rto_initial_default) = SCTPCTL_RTO_INITIAL_DEFAULT;
     100           0 :         SCTP_BASE_SYSCTL(sctp_init_rto_max_default) = SCTPCTL_INIT_RTO_MAX_DEFAULT;
     101           0 :         SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default) = SCTPCTL_VALID_COOKIE_LIFE_DEFAULT;
     102           0 :         SCTP_BASE_SYSCTL(sctp_init_rtx_max_default) = SCTPCTL_INIT_RTX_MAX_DEFAULT;
     103           0 :         SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default) = SCTPCTL_ASSOC_RTX_MAX_DEFAULT;
     104           0 :         SCTP_BASE_SYSCTL(sctp_path_rtx_max_default) = SCTPCTL_PATH_RTX_MAX_DEFAULT;
     105           0 :         SCTP_BASE_SYSCTL(sctp_path_pf_threshold) = SCTPCTL_PATH_PF_THRESHOLD_DEFAULT;
     106           0 :         SCTP_BASE_SYSCTL(sctp_add_more_threshold) = SCTPCTL_ADD_MORE_ON_OUTPUT_DEFAULT;
     107           0 :         SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default) = SCTPCTL_INCOMING_STREAMS_DEFAULT;
     108           0 :         SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default) = SCTPCTL_OUTGOING_STREAMS_DEFAULT;
     109           0 :         SCTP_BASE_SYSCTL(sctp_cmt_on_off) = SCTPCTL_CMT_ON_OFF_DEFAULT;
     110           0 :         SCTP_BASE_SYSCTL(sctp_cmt_use_dac) = SCTPCTL_CMT_USE_DAC_DEFAULT;
     111           0 :         SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst) = SCTPCTL_CWND_MAXBURST_DEFAULT;
     112           0 :         SCTP_BASE_SYSCTL(sctp_nat_friendly) = SCTPCTL_NAT_FRIENDLY_DEFAULT;
     113           0 :         SCTP_BASE_SYSCTL(sctp_L2_abc_variable) = SCTPCTL_ABC_L_VAR_DEFAULT;
     114           0 :         SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count) = SCTPCTL_MAX_CHAINED_MBUFS_DEFAULT;
     115           0 :         SCTP_BASE_SYSCTL(sctp_do_drain) = SCTPCTL_DO_SCTP_DRAIN_DEFAULT;
     116           0 :         SCTP_BASE_SYSCTL(sctp_hb_maxburst) = SCTPCTL_HB_MAX_BURST_DEFAULT;
     117           0 :         SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit) = SCTPCTL_ABORT_AT_LIMIT_DEFAULT;
     118           0 :         SCTP_BASE_SYSCTL(sctp_strict_data_order) = SCTPCTL_STRICT_DATA_ORDER_DEFAULT;
     119           0 :         SCTP_BASE_SYSCTL(sctp_min_residual) = SCTPCTL_MIN_RESIDUAL_DEFAULT;
     120           0 :         SCTP_BASE_SYSCTL(sctp_max_retran_chunk) = SCTPCTL_MAX_RETRAN_CHUNK_DEFAULT;
     121           0 :         SCTP_BASE_SYSCTL(sctp_logging_level) = SCTPCTL_LOGGING_LEVEL_DEFAULT;
     122           0 :         SCTP_BASE_SYSCTL(sctp_default_cc_module) = SCTPCTL_DEFAULT_CC_MODULE_DEFAULT;
     123           0 :         SCTP_BASE_SYSCTL(sctp_default_ss_module) = SCTPCTL_DEFAULT_SS_MODULE_DEFAULT;
     124           0 :         SCTP_BASE_SYSCTL(sctp_default_frag_interleave) = SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DEFAULT;
     125           0 :         SCTP_BASE_SYSCTL(sctp_mobility_base) = SCTPCTL_MOBILITY_BASE_DEFAULT;
     126           0 :         SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff) = SCTPCTL_MOBILITY_FASTHANDOFF_DEFAULT;
     127           0 :         SCTP_BASE_SYSCTL(sctp_vtag_time_wait) = SCTPCTL_TIME_WAIT_DEFAULT;
     128           0 :         SCTP_BASE_SYSCTL(sctp_buffer_splitting) = SCTPCTL_BUFFER_SPLITTING_DEFAULT;
     129           0 :         SCTP_BASE_SYSCTL(sctp_initial_cwnd) = SCTPCTL_INITIAL_CWND_DEFAULT;
     130           0 :         SCTP_BASE_SYSCTL(sctp_rttvar_bw) = SCTPCTL_RTTVAR_BW_DEFAULT;
     131           0 :         SCTP_BASE_SYSCTL(sctp_rttvar_rtt) = SCTPCTL_RTTVAR_RTT_DEFAULT;
     132           0 :         SCTP_BASE_SYSCTL(sctp_rttvar_eqret) = SCTPCTL_RTTVAR_EQRET_DEFAULT;
     133           0 :         SCTP_BASE_SYSCTL(sctp_steady_step) = SCTPCTL_RTTVAR_STEADYS_DEFAULT;
     134           0 :         SCTP_BASE_SYSCTL(sctp_use_dccc_ecn) = SCTPCTL_RTTVAR_DCCCECN_DEFAULT;
     135           0 :         SCTP_BASE_SYSCTL(sctp_blackhole) = SCTPCTL_BLACKHOLE_DEFAULT;
     136           0 :         SCTP_BASE_SYSCTL(sctp_diag_info_code) = SCTPCTL_DIAG_INFO_CODE_DEFAULT;
     137             : #if defined(SCTP_LOCAL_TRACE_BUF)
     138             : #if defined(__Windows__)
     139             :         /* On Windows, the resource for global variables is limited. */
     140             :         MALLOC(SCTP_BASE_SYSCTL(sctp_log), struct sctp_log *, sizeof(struct sctp_log), M_SYSCTL, M_ZERO);
     141             : #else
     142             :         memset(&SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log));
     143             : #endif
     144             : #endif
     145           0 :         SCTP_BASE_SYSCTL(sctp_udp_tunneling_port) = SCTPCTL_UDP_TUNNELING_PORT_DEFAULT;
     146           0 :         SCTP_BASE_SYSCTL(sctp_enable_sack_immediately) = SCTPCTL_SACK_IMMEDIATELY_ENABLE_DEFAULT;
     147           0 :         SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly) = SCTPCTL_NAT_FRIENDLY_INITS_DEFAULT;
     148             : #if defined(SCTP_DEBUG)
     149           0 :         SCTP_BASE_SYSCTL(sctp_debug_on) = SCTPCTL_DEBUG_DEFAULT;
     150             : #endif
     151             : #if defined(__APPLE__)
     152             :         SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces) = SCTPCTL_IGNORE_VMWARE_INTERFACES_DEFAULT;
     153             :         SCTP_BASE_SYSCTL(sctp_main_timer) = SCTPCTL_MAIN_TIMER_DEFAULT;
     154             :         SCTP_BASE_SYSCTL(sctp_addr_watchdog_limit) = SCTPCTL_ADDR_WATCHDOG_LIMIT_DEFAULT;
     155             :         SCTP_BASE_SYSCTL(sctp_vtag_watchdog_limit) = SCTPCTL_VTAG_WATCHDOG_LIMIT_DEFAULT;
     156             : #endif
     157             : #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
     158             :         SCTP_BASE_SYSCTL(sctp_output_unlocked) = SCTPCTL_OUTPUT_UNLOCKED_DEFAULT;
     159             : #endif
     160           0 : }
     161             : 
     162             : #if defined(__Windows__)
     163             : void
     164             : sctp_finish_sysctls()
     165             : {
     166             : #if defined(SCTP_LOCAL_TRACE_BUF)
     167             :         if (SCTP_BASE_SYSCTL(sctp_log) != NULL) {
     168             :                 FREE(SCTP_BASE_SYSCTL(sctp_log), M_SYSCTL);
     169             :                 SCTP_BASE_SYSCTL(sctp_log) = NULL;
     170             :         }
     171             : #endif
     172             : }
     173             : #endif
     174             : 
     175             : #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__Windows__)
     176             : /* It returns an upper limit. No filtering is done here */
     177             : static unsigned int
     178             : sctp_sysctl_number_of_addresses(struct sctp_inpcb *inp)
     179             : {
     180             :         unsigned int cnt;
     181             :         struct sctp_vrf *vrf;
     182             :         struct sctp_ifn *sctp_ifn;
     183             :         struct sctp_ifa *sctp_ifa;
     184             :         struct sctp_laddr *laddr;
     185             : 
     186             :         cnt = 0;
     187             :         /* neither Mac OS X nor FreeBSD support mulitple routing functions */
     188             :         if ((vrf = sctp_find_vrf(inp->def_vrf_id)) == NULL) {
     189             :                 return (0);
     190             :         }
     191             :         if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) {
     192             :                 LIST_FOREACH(sctp_ifn, &vrf->ifnlist, next_ifn) {
     193             :                         LIST_FOREACH(sctp_ifa, &sctp_ifn->ifalist, next_ifa) {
     194             :                                 switch (sctp_ifa->address.sa.sa_family) {
     195             : #ifdef INET
     196             :                                 case AF_INET:
     197             : #endif
     198             : #ifdef INET6
     199             :                                 case AF_INET6:
     200             : #endif
     201             :                                         cnt++;
     202             :                                         break;
     203             :                                 default:
     204             :                                         break;
     205             :                                 }
     206             :                         }
     207             :                 }
     208             :         } else {
     209             :                 LIST_FOREACH(laddr, &inp->sctp_addr_list, sctp_nxt_addr) {
     210             :                         switch (laddr->ifa->address.sa.sa_family) {
     211             : #ifdef INET
     212             :                         case AF_INET:
     213             : #endif
     214             : #ifdef INET6
     215             :                         case AF_INET6:
     216             : #endif
     217             :                                 cnt++;
     218             :                                 break;
     219             :                         default:
     220             :                                 break;
     221             :                         }
     222             :                 }
     223             :         }
     224             :         return (cnt);
     225             : }
     226             : 
     227             : static int
     228             : sctp_sysctl_copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sysctl_req *req)
     229             : {
     230             :         struct sctp_ifn *sctp_ifn;
     231             :         struct sctp_ifa *sctp_ifa;
     232             :         int loopback_scope, ipv4_local_scope, local_scope, site_scope;
     233             :         int ipv4_addr_legal, ipv6_addr_legal;
     234             : #if defined(__Userspace__)
     235             :         int conn_addr_legal;
     236             : #endif
     237             :         struct sctp_vrf *vrf;
     238             :         struct xsctp_laddr xladdr;
     239             :         struct sctp_laddr *laddr;
     240             :         int error;
     241             : 
     242             :         /* Turn on all the appropriate scope */
     243             :         if (stcb) {
     244             :                 /* use association specific values */
     245             :                 loopback_scope = stcb->asoc.scope.loopback_scope;
     246             :                 ipv4_local_scope = stcb->asoc.scope.ipv4_local_scope;
     247             :                 local_scope = stcb->asoc.scope.local_scope;
     248             :                 site_scope = stcb->asoc.scope.site_scope;
     249             :                 ipv4_addr_legal = stcb->asoc.scope.ipv4_addr_legal;
     250             :                 ipv6_addr_legal = stcb->asoc.scope.ipv6_addr_legal;
     251             : #if defined(__Userspace__)
     252             :                 conn_addr_legal = stcb->asoc.scope.conn_addr_legal;
     253             : #endif
     254             :         } else {
     255             :                 /* Use generic values for endpoints. */
     256             :                 loopback_scope = 1;
     257             :                 ipv4_local_scope = 1;
     258             :                 local_scope = 1;
     259             :                 site_scope = 1;
     260             :                 if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) {
     261             :                         ipv6_addr_legal = 1;
     262             :                         if (SCTP_IPV6_V6ONLY(inp)) {
     263             :                                 ipv4_addr_legal = 0;
     264             :                         } else {
     265             :                                 ipv4_addr_legal = 1;
     266             :                         }
     267             : #if defined(__Userspace__)
     268             :                         conn_addr_legal = 0;
     269             : #endif
     270             :                 } else {
     271             :                         ipv6_addr_legal = 0;
     272             : #if defined(__Userspace__)
     273             :                         if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_CONN) {
     274             :                                 conn_addr_legal = 1;
     275             :                                 ipv4_addr_legal = 0;
     276             :                         } else {
     277             :                                 conn_addr_legal = 0;
     278             :                                 ipv4_addr_legal = 1;
     279             :                         }
     280             : #else
     281             :                         ipv4_addr_legal = 1;
     282             : #endif
     283             :                 }
     284             :         }
     285             : 
     286             :         /* neither Mac OS X nor FreeBSD support mulitple routing functions */
     287             :         if ((vrf = sctp_find_vrf(inp->def_vrf_id)) == NULL) {
     288             :                 SCTP_INP_RUNLOCK(inp);
     289             :                 SCTP_INP_INFO_RUNLOCK();
     290             :                 return (-1);
     291             :         }
     292             :         if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) {
     293             :                 LIST_FOREACH(sctp_ifn, &vrf->ifnlist, next_ifn) {
     294             :                         if ((loopback_scope == 0) && SCTP_IFN_IS_IFT_LOOP(sctp_ifn))
     295             :                                 /* Skip loopback if loopback_scope not set */
     296             :                                 continue;
     297             :                         LIST_FOREACH(sctp_ifa, &sctp_ifn->ifalist, next_ifa) {
     298             :                                 if (stcb) {
     299             :                                         /*
     300             :                                          * ignore if blacklisted at
     301             :                                          * association level
     302             :                                          */
     303             :                                         if (sctp_is_addr_restricted(stcb, sctp_ifa))
     304             :                                                 continue;
     305             :                                 }
     306             :                                 switch (sctp_ifa->address.sa.sa_family) {
     307             : #ifdef INET
     308             :                                 case AF_INET:
     309             :                                         if (ipv4_addr_legal) {
     310             :                                                 struct sockaddr_in *sin;
     311             : 
     312             :                                                 sin = &sctp_ifa->address.sin;
     313             :                                                 if (sin->sin_addr.s_addr == 0)
     314             :                                                         continue;
     315             : #if defined(__FreeBSD__)
     316             :                                                 if (prison_check_ip4(inp->ip_inp.inp.inp_cred,
     317             :                                                                      &sin->sin_addr) != 0) {
     318             :                                                         continue;
     319             :                                                 }
     320             : #endif
     321             :                                                 if ((ipv4_local_scope == 0) && (IN4_ISPRIVATE_ADDRESS(&sin->sin_addr)))
     322             :                                                         continue;
     323             :                                         } else {
     324             :                                                 continue;
     325             :                                         }
     326             :                                         break;
     327             : #endif
     328             : #ifdef INET6
     329             :                                 case AF_INET6:
     330             :                                         if (ipv6_addr_legal) {
     331             :                                                 struct sockaddr_in6 *sin6;
     332             : 
     333             : #if defined(SCTP_EMBEDDED_V6_SCOPE) && !defined(SCTP_KAME)
     334             :                                                 struct sockaddr_in6 lsa6;
     335             : #endif
     336             :                                                 sin6 = &sctp_ifa->address.sin6;
     337             :                                                 if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr))
     338             :                                                         continue;
     339             : #if defined(__FreeBSD__)
     340             :                                                 if (prison_check_ip6(inp->ip_inp.inp.inp_cred,
     341             :                                                                      &sin6->sin6_addr) != 0) {
     342             :                                                         continue;
     343             :                                                 }
     344             : #endif
     345             :                                                 if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
     346             :                                                         if (local_scope == 0)
     347             :                                                                 continue;
     348             : #if defined(SCTP_EMBEDDED_V6_SCOPE)
     349             :                                                         if (sin6->sin6_scope_id == 0) {
     350             : #ifdef SCTP_KAME
     351             :                                                                 /* bad link local address */
     352             :                                                                 if (sa6_recoverscope(sin6) != 0)
     353             :                                                                         continue;
     354             : #else
     355             :                                                                 lsa6 = *sin6;
     356             :                                                                 /* bad link local address */
     357             :                                                                 if (in6_recoverscope(&lsa6, &lsa6.sin6_addr, NULL))
     358             :                                                                         continue;
     359             :                                                                 sin6 = &lsa6;
     360             : #endif  /* SCTP_KAME */
     361             :                                                         }
     362             : #endif /* SCTP_EMBEDDED_V6_SCOPE */
     363             :                                                 }
     364             :                                                 if ((site_scope == 0) && (IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr)))
     365             :                                                         continue;
     366             :                                         } else {
     367             :                                                 continue;
     368             :                                         }
     369             :                                         break;
     370             : #endif
     371             : #if defined(__Userspace__)
     372             :                                 case AF_CONN:
     373             :                                         if (!conn_addr_legal) {
     374             :                                                 continue;
     375             :                                         }
     376             :                                         break;
     377             : #endif
     378             :                                 default:
     379             :                                         continue;
     380             :                                 }
     381             :                                 memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr));
     382             :                                 memcpy((void *)&xladdr.address, (const void *)&sctp_ifa->address, sizeof(union sctp_sockstore));
     383             :                                 SCTP_INP_RUNLOCK(inp);
     384             :                                 SCTP_INP_INFO_RUNLOCK();
     385             :                                 error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr));
     386             :                                 if (error) {
     387             :                                         return (error);
     388             :                                 } else {
     389             :                                         SCTP_INP_INFO_RLOCK();
     390             :                                         SCTP_INP_RLOCK(inp);
     391             :                                 }
     392             :                         }
     393             :                 }
     394             :         } else {
     395             :                 LIST_FOREACH(laddr, &inp->sctp_addr_list, sctp_nxt_addr) {
     396             :                         /* ignore if blacklisted at association level */
     397             :                         if (stcb && sctp_is_addr_restricted(stcb, laddr->ifa))
     398             :                                 continue;
     399             :                         memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr));
     400             :                         memcpy((void *)&xladdr.address, (const void *)&laddr->ifa->address, sizeof(union sctp_sockstore));
     401             :                         xladdr.start_time.tv_sec = (uint32_t)laddr->start_time.tv_sec;
     402             :                         xladdr.start_time.tv_usec = (uint32_t)laddr->start_time.tv_usec;
     403             :                         SCTP_INP_RUNLOCK(inp);
     404             :                         SCTP_INP_INFO_RUNLOCK();
     405             :                         error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr));
     406             :                         if (error) {
     407             :                                 return (error);
     408             :                         } else {
     409             :                                 SCTP_INP_INFO_RLOCK();
     410             :                                 SCTP_INP_RLOCK(inp);
     411             :                         }
     412             :                 }
     413             :         }
     414             :         memset((void *)&xladdr, 0, sizeof(struct xsctp_laddr));
     415             :         xladdr.last = 1;
     416             :         SCTP_INP_RUNLOCK(inp);
     417             :         SCTP_INP_INFO_RUNLOCK();
     418             :         error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr));
     419             : 
     420             :         if (error) {
     421             :                 return (error);
     422             :         } else {
     423             :                 SCTP_INP_INFO_RLOCK();
     424             :                 SCTP_INP_RLOCK(inp);
     425             :                 return (0);
     426             :         }
     427             : }
     428             : 
     429             : /*
     430             :  * sysctl functions
     431             :  */
     432             : #if defined(__APPLE__)
     433             : static int
     434             : sctp_sysctl_handle_assoclist SYSCTL_HANDLER_ARGS
     435             : {
     436             : #pragma unused(oidp, arg1, arg2)
     437             : #else
     438             : static int
     439             : sctp_sysctl_handle_assoclist(SYSCTL_HANDLER_ARGS)
     440             : {
     441             : #endif
     442             :         unsigned int number_of_endpoints;
     443             :         unsigned int number_of_local_addresses;
     444             :         unsigned int number_of_associations;
     445             :         unsigned int number_of_remote_addresses;
     446             :         unsigned int n;
     447             :         int error;
     448             :         struct sctp_inpcb *inp;
     449             :         struct sctp_tcb *stcb;
     450             :         struct sctp_nets *net;
     451             :         struct xsctp_inpcb xinpcb;
     452             :         struct xsctp_tcb xstcb;
     453             :         struct xsctp_raddr xraddr;
     454             :         struct socket *so;
     455             : 
     456             :         number_of_endpoints = 0;
     457             :         number_of_local_addresses = 0;
     458             :         number_of_associations = 0;
     459             :         number_of_remote_addresses = 0;
     460             : 
     461             :         SCTP_INP_INFO_RLOCK();
     462             : #if defined(__APPLE__)
     463             :         if (req->oldptr == USER_ADDR_NULL) {
     464             : #else
     465             :         if (req->oldptr == NULL) {
     466             : #endif
     467             :                 LIST_FOREACH(inp, &SCTP_BASE_INFO(listhead), sctp_list) {
     468             :                         SCTP_INP_RLOCK(inp);
     469             :                         number_of_endpoints++;
     470             :                         number_of_local_addresses += sctp_sysctl_number_of_addresses(inp);
     471             :                         LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) {
     472             :                                 number_of_associations++;
     473             :                                 number_of_local_addresses += sctp_sysctl_number_of_addresses(inp);
     474             :                                 TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) {
     475             :                                         number_of_remote_addresses++;
     476             :                                 }
     477             :                         }
     478             :                         SCTP_INP_RUNLOCK(inp);
     479             :                 }
     480             :                 SCTP_INP_INFO_RUNLOCK();
     481             :                 n = (number_of_endpoints + 1) * sizeof(struct xsctp_inpcb) +
     482             :                     (number_of_local_addresses + number_of_endpoints + number_of_associations) * sizeof(struct xsctp_laddr) +
     483             :                     (number_of_associations + number_of_endpoints) * sizeof(struct xsctp_tcb) +
     484             :                     (number_of_remote_addresses + number_of_associations) * sizeof(struct xsctp_raddr);
     485             : 
     486             :                 /* request some more memory than needed */
     487             : #if !defined(__Windows__)
     488             :                 req->oldidx = (n + n / 8);
     489             : #else
     490             :                 req->dataidx = (n + n / 8);
     491             : #endif
     492             :                 return (0);
     493             :         }
     494             : #if defined(__APPLE__)
     495             :         if (req->newptr != USER_ADDR_NULL) {
     496             : #else
     497             :         if (req->newptr != NULL) {
     498             : #endif
     499             :                 SCTP_INP_INFO_RUNLOCK();
     500             :                 SCTP_LTRACE_ERR_RET(NULL, NULL, NULL, SCTP_FROM_SCTP_SYSCTL, EPERM);
     501             :                 return (EPERM);
     502             :         }
     503             :         LIST_FOREACH(inp, &SCTP_BASE_INFO(listhead), sctp_list) {
     504             :                 SCTP_INP_RLOCK(inp);
     505             :                 if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) {
     506             :                         /* if its allgone it is being freed - skip it  */
     507             :                         goto skip;
     508             :                 }
     509             :                 xinpcb.last = 0;
     510             :                 xinpcb.local_port = ntohs(inp->sctp_lport);
     511             :                 xinpcb.flags = inp->sctp_flags;
     512             : #if defined(__FreeBSD__) && __FreeBSD_version < 1000048
     513             :                 xinpcb.features = (uint32_t)inp->sctp_features;
     514             : #else
     515             :                 xinpcb.features = inp->sctp_features;
     516             : #endif
     517             :                 xinpcb.total_sends = inp->total_sends;
     518             :                 xinpcb.total_recvs = inp->total_recvs;
     519             :                 xinpcb.total_nospaces = inp->total_nospaces;
     520             :                 xinpcb.fragmentation_point = inp->sctp_frag_point;
     521             :                 so = inp->sctp_socket;
     522             :                 if ((so == NULL) ||
     523             :                     (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) {
     524             :                         xinpcb.qlen = 0;
     525             :                         xinpcb.maxqlen = 0;
     526             :                 } else {
     527             :                         xinpcb.qlen = so->so_qlen;
     528             :                         xinpcb.maxqlen = so->so_qlimit;
     529             :                 }
     530             :                 SCTP_INP_INCR_REF(inp);
     531             :                 SCTP_INP_RUNLOCK(inp);
     532             :                 SCTP_INP_INFO_RUNLOCK();
     533             :                 error = SYSCTL_OUT(req, &xinpcb, sizeof(struct xsctp_inpcb));
     534             :                 if (error) {
     535             :                         SCTP_INP_DECR_REF(inp);
     536             :                         return (error);
     537             :                 }
     538             :                 SCTP_INP_INFO_RLOCK();
     539             :                 SCTP_INP_RLOCK(inp);
     540             :                 error = sctp_sysctl_copy_out_local_addresses(inp, NULL, req);
     541             :                 if (error) {
     542             :                         SCTP_INP_DECR_REF(inp);
     543             :                         return (error);
     544             :                 }
     545             :                 LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) {
     546             :                         SCTP_TCB_LOCK(stcb);
     547             :                         atomic_add_int(&stcb->asoc.refcnt, 1);
     548             :                         SCTP_TCB_UNLOCK(stcb);
     549             :                         xstcb.last = 0;
     550             :                         xstcb.local_port = ntohs(inp->sctp_lport);
     551             :                         xstcb.remote_port = ntohs(stcb->rport);
     552             :                         if (stcb->asoc.primary_destination != NULL)
     553             :                                 xstcb.primary_addr = stcb->asoc.primary_destination->ro._l_addr;
     554             :                         xstcb.heartbeat_interval = stcb->asoc.heart_beat_delay;
     555             :                         xstcb.state = SCTP_GET_STATE(&stcb->asoc);       /* FIXME */
     556             : #if defined(__FreeBSD__)
     557             : #if __FreeBSD_version >= 800000
     558             :                         /* 7.0 does not support these */
     559             :                         xstcb.assoc_id = sctp_get_associd(stcb);
     560             :                         xstcb.peers_rwnd = stcb->asoc.peers_rwnd;
     561             : #endif
     562             : #else
     563             :                         xstcb.assoc_id = sctp_get_associd(stcb);
     564             :                         xstcb.peers_rwnd = stcb->asoc.peers_rwnd;
     565             : #endif
     566             :                         xstcb.in_streams = stcb->asoc.streamincnt;
     567             :                         xstcb.out_streams = stcb->asoc.streamoutcnt;
     568             :                         xstcb.max_nr_retrans = stcb->asoc.overall_error_count;
     569             :                         xstcb.primary_process = 0; /* not really supported yet */
     570             :                         xstcb.T1_expireries = stcb->asoc.timoinit + stcb->asoc.timocookie;
     571             :                         xstcb.T2_expireries = stcb->asoc.timoshutdown + stcb->asoc.timoshutdownack;
     572             :                         xstcb.retransmitted_tsns = stcb->asoc.marked_retrans;
     573             :                         xstcb.start_time.tv_sec = (uint32_t)stcb->asoc.start_time.tv_sec;
     574             :                         xstcb.start_time.tv_usec = (uint32_t)stcb->asoc.start_time.tv_usec;
     575             :                         xstcb.discontinuity_time.tv_sec = (uint32_t)stcb->asoc.discontinuity_time.tv_sec;
     576             :                         xstcb.discontinuity_time.tv_usec = (uint32_t)stcb->asoc.discontinuity_time.tv_usec;
     577             :                         xstcb.total_sends = stcb->total_sends;
     578             :                         xstcb.total_recvs = stcb->total_recvs;
     579             :                         xstcb.local_tag = stcb->asoc.my_vtag;
     580             :                         xstcb.remote_tag = stcb->asoc.peer_vtag;
     581             :                         xstcb.initial_tsn = stcb->asoc.init_seq_number;
     582             :                         xstcb.highest_tsn = stcb->asoc.sending_seq - 1;
     583             :                         xstcb.cumulative_tsn = stcb->asoc.last_acked_seq;
     584             :                         xstcb.cumulative_tsn_ack = stcb->asoc.cumulative_tsn;
     585             :                         xstcb.mtu = stcb->asoc.smallest_mtu;
     586             :                         xstcb.refcnt = stcb->asoc.refcnt;
     587             :                         SCTP_INP_RUNLOCK(inp);
     588             :                         SCTP_INP_INFO_RUNLOCK();
     589             :                         error = SYSCTL_OUT(req, &xstcb, sizeof(struct xsctp_tcb));
     590             :                         if (error) {
     591             :                                 SCTP_INP_DECR_REF(inp);
     592             :                                 atomic_subtract_int(&stcb->asoc.refcnt, 1);
     593             :                                 return (error);
     594             :                         }
     595             :                         SCTP_INP_INFO_RLOCK();
     596             :                         SCTP_INP_RLOCK(inp);
     597             :                         error = sctp_sysctl_copy_out_local_addresses(inp, stcb, req);
     598             :                         if (error) {
     599             :                                 SCTP_INP_DECR_REF(inp);
     600             :                                 atomic_subtract_int(&stcb->asoc.refcnt, 1);
     601             :                                 return (error);
     602             :                         }
     603             :                         TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) {
     604             :                                 xraddr.last = 0;
     605             :                                 xraddr.address = net->ro._l_addr;
     606             :                                 xraddr.active = ((net->dest_state & SCTP_ADDR_REACHABLE) == SCTP_ADDR_REACHABLE);
     607             :                                 xraddr.confirmed = ((net->dest_state & SCTP_ADDR_UNCONFIRMED) == 0);
     608             :                                 xraddr.heartbeat_enabled = ((net->dest_state & SCTP_ADDR_NOHB) == 0);
     609             :                                 xraddr.potentially_failed = ((net->dest_state & SCTP_ADDR_PF) == SCTP_ADDR_PF);
     610             :                                 xraddr.rto = net->RTO;
     611             :                                 xraddr.max_path_rtx = net->failure_threshold;
     612             :                                 xraddr.rtx = net->marked_retrans;
     613             :                                 xraddr.error_counter = net->error_count;
     614             :                                 xraddr.cwnd = net->cwnd;
     615             :                                 xraddr.flight_size = net->flight_size;
     616             :                                 xraddr.mtu = net->mtu;
     617             : #if defined(__FreeBSD__)
     618             : #if __FreeBSD_version >= 800000
     619             :                                 xraddr.rtt = net->rtt / 1000;
     620             :                                 xraddr.heartbeat_interval = net->heart_beat_delay;
     621             : #endif
     622             : #else
     623             :                                 xraddr.rtt = net->rtt / 1000;
     624             :                                 xraddr.heartbeat_interval = net->heart_beat_delay;
     625             : #endif
     626             :                                 xraddr.start_time.tv_sec = (uint32_t)net->start_time.tv_sec;
     627             :                                 xraddr.start_time.tv_usec = (uint32_t)net->start_time.tv_usec;
     628             :                                 SCTP_INP_RUNLOCK(inp);
     629             :                                 SCTP_INP_INFO_RUNLOCK();
     630             :                                 error = SYSCTL_OUT(req, &xraddr, sizeof(struct xsctp_raddr));
     631             :                                 if (error) {
     632             :                                         SCTP_INP_DECR_REF(inp);
     633             :                                         atomic_subtract_int(&stcb->asoc.refcnt, 1);
     634             :                                         return (error);
     635             :                                 }
     636             :                                 SCTP_INP_INFO_RLOCK();
     637             :                                 SCTP_INP_RLOCK(inp);
     638             :                         }
     639             :                         atomic_subtract_int(&stcb->asoc.refcnt, 1);
     640             :                         memset((void *)&xraddr, 0, sizeof(struct xsctp_raddr));
     641             :                         xraddr.last = 1;
     642             :                         SCTP_INP_RUNLOCK(inp);
     643             :                         SCTP_INP_INFO_RUNLOCK();
     644             :                         error = SYSCTL_OUT(req, &xraddr, sizeof(struct xsctp_raddr));
     645             :                         if (error) {
     646             :                                 SCTP_INP_DECR_REF(inp);
     647             :                                 return (error);
     648             :                         }
     649             :                         SCTP_INP_INFO_RLOCK();
     650             :                         SCTP_INP_RLOCK(inp);
     651             :                 }
     652             :                 SCTP_INP_DECR_REF(inp);
     653             :                 SCTP_INP_RUNLOCK(inp);
     654             :                 SCTP_INP_INFO_RUNLOCK();
     655             :                 memset((void *)&xstcb, 0, sizeof(struct xsctp_tcb));
     656             :                 xstcb.last = 1;
     657             :                 error = SYSCTL_OUT(req, &xstcb, sizeof(struct xsctp_tcb));
     658             :                 if (error) {
     659             :                         return (error);
     660             :                 }
     661             : skip:
     662             :                 SCTP_INP_INFO_RLOCK();
     663             :         }
     664             :         SCTP_INP_INFO_RUNLOCK();
     665             : 
     666             :         memset((void *)&xinpcb, 0, sizeof(struct xsctp_inpcb));
     667             :         xinpcb.last = 1;
     668             :         error = SYSCTL_OUT(req, &xinpcb, sizeof(struct xsctp_inpcb));
     669             :         return (error);
     670             : }
     671             : 
     672             : #if defined(__APPLE__)
     673             : static int
     674             : sctp_sysctl_handle_udp_tunneling SYSCTL_HANDLER_ARGS
     675             : {
     676             : #pragma unused(arg1, arg2)
     677             : #else
     678             : static int
     679             : sctp_sysctl_handle_udp_tunneling(SYSCTL_HANDLER_ARGS)
     680             : {
     681             : #endif
     682             :         int error;
     683             :         uint32_t old, new;
     684             : 
     685             :         SCTP_INP_INFO_RLOCK();
     686             :         old = SCTP_BASE_SYSCTL(sctp_udp_tunneling_port);
     687             :         SCTP_INP_INFO_RUNLOCK();
     688             :         new = old;
     689             : #if defined(__FreeBSD__) && __FreeBSD_version >= 800056 && __FreeBSD_version < 1000100
     690             : #ifdef VIMAGE
     691             :         error = vnet_sysctl_handle_int(oidp, &new, 0, req);
     692             : #else
     693             :         error = sysctl_handle_int(oidp, &new, 0, req);
     694             : #endif
     695             : #else
     696             :         error = sysctl_handle_int(oidp, &new, 0, req);
     697             : #endif
     698             :         if ((error == 0) &&
     699             : #if defined (__APPLE__)
     700             :             (req->newptr != USER_ADDR_NULL)) {
     701             : #else
     702             :             (req->newptr != NULL)) {
     703             : #endif
     704             : #if defined(__Windows__)
     705             :                 SCTP_INP_INFO_WLOCK();
     706             :                 sctp_over_udp_restart();
     707             :                 SCTP_INP_INFO_WUNLOCK();
     708             : #else
     709             : #if (SCTPCTL_UDP_TUNNELING_PORT_MIN == 0)
     710             :                 if (new > SCTPCTL_UDP_TUNNELING_PORT_MAX) {
     711             : #else
     712             :                 if ((new < SCTPCTL_UDP_TUNNELING_PORT_MIN) ||
     713             :                     (new > SCTPCTL_UDP_TUNNELING_PORT_MAX)) {
     714             : #endif
     715             :                         error = EINVAL;
     716             :                 } else {
     717             :                         SCTP_INP_INFO_WLOCK();
     718             :                         SCTP_BASE_SYSCTL(sctp_udp_tunneling_port) = new;
     719             :                         if (old != 0) {
     720             :                                 sctp_over_udp_stop();
     721             :                         }
     722             :                         if (new != 0) {
     723             :                                 error = sctp_over_udp_start();
     724             :                         }
     725             :                         SCTP_INP_INFO_WUNLOCK();
     726             :                 }
     727             : #endif
     728             :         }
     729             :         return (error);
     730             : }
     731             : 
     732             : #if defined(__APPLE__)
     733             : int sctp_is_vmware_interface(struct ifnet *);
     734             : 
     735             : static int
     736             : sctp_sysctl_handle_vmware_interfaces SYSCTL_HANDLER_ARGS
     737             : {
     738             : #pragma unused(arg1, arg2)
     739             :         int error;
     740             :         uint32_t old, new;
     741             : 
     742             :         old = SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces);
     743             :         new = old;
     744             :         error = sysctl_handle_int(oidp, &new, 0, req);
     745             :         if ((error == 0) && (req->newptr != USER_ADDR_NULL)) {
     746             :                 if ((new < SCTPCTL_IGNORE_VMWARE_INTERFACES_MIN) ||
     747             :                     (new > SCTPCTL_IGNORE_VMWARE_INTERFACES_MAX)) {
     748             :                         error = EINVAL;
     749             :                 } else {
     750             :                         if ((old == 1) && (new == 0)) {
     751             :                                 sctp_add_or_del_interfaces(sctp_is_vmware_interface, 1);
     752             :                         }
     753             :                         if ((old == 0) && (new == 1)) {
     754             :                                 sctp_add_or_del_interfaces(sctp_is_vmware_interface, 0);
     755             :                         }
     756             :                         if (old != new) {
     757             :                                 SCTP_BASE_SYSCTL(sctp_ignore_vmware_interfaces) = new;
     758             :                         }
     759             :                 }
     760             :         }
     761             :         return (error);
     762             : }
     763             : #endif
     764             : 
     765             : #if defined(__APPLE__)
     766             : static int
     767             : sctp_sysctl_handle_auth SYSCTL_HANDLER_ARGS
     768             : {
     769             : #pragma unused(arg1, arg2)
     770             : #else
     771             : static int
     772             : sctp_sysctl_handle_auth(SYSCTL_HANDLER_ARGS)
     773             : {
     774             : #endif
     775             :         int error;
     776             :         uint32_t new;
     777             : 
     778             :         new = SCTP_BASE_SYSCTL(sctp_auth_enable);
     779             : #if defined(__FreeBSD__) && __FreeBSD_version >= 800056 && __FreeBSD_version < 1000100
     780             : #ifdef VIMAGE
     781             :         error = vnet_sysctl_handle_int(oidp, &new, 0, req);
     782             : #else
     783             :         error = sysctl_handle_int(oidp, &new, 0, req);
     784             : #endif
     785             : #else
     786             :         error = sysctl_handle_int(oidp, &new, 0, req);
     787             : #endif
     788             :         if ((error == 0) &&
     789             : #if defined (__APPLE__)
     790             :             (req->newptr != USER_ADDR_NULL)) {
     791             : #else
     792             :             (req->newptr != NULL)) {
     793             : #endif
     794             : #if (SCTPCTL_AUTH_ENABLE_MIN == 0)
     795             :                 if ((new > SCTPCTL_AUTH_ENABLE_MAX) ||
     796             :                     ((new == 0) && (SCTP_BASE_SYSCTL(sctp_asconf_enable) == 1))) {
     797             : #else
     798             :                 if ((new < SCTPCTL_AUTH_ENABLE_MIN) ||
     799             :                     (new > SCTPCTL_AUTH_ENABLE_MAX) ||
     800             :                     ((new == 0) && (SCTP_BASE_SYSCTL(sctp_asconf_enable) == 1))) {
     801             : #endif
     802             :                         error = EINVAL;
     803             :                 } else {
     804             :                         SCTP_BASE_SYSCTL(sctp_auth_enable) = new;
     805             :                 }
     806             :         }
     807             :         return (error);
     808             : }
     809             : 
     810             : #if defined(__APPLE__)
     811             : static int
     812             : sctp_sysctl_handle_asconf SYSCTL_HANDLER_ARGS
     813             : {
     814             : #pragma unused(arg1, arg2)
     815             : #else
     816             : static int
     817             : sctp_sysctl_handle_asconf(SYSCTL_HANDLER_ARGS)
     818             : {
     819             : #endif
     820             :         int error;
     821             :         uint32_t new;
     822             : 
     823             :         new = SCTP_BASE_SYSCTL(sctp_asconf_enable);
     824             : #if defined(__FreeBSD__) && __FreeBSD_version >= 800056 && __FreeBSD_version < 1000100
     825             : #ifdef VIMAGE
     826             :         error = vnet_sysctl_handle_int(oidp, &new, 0, req);
     827             : #else
     828             :         error = sysctl_handle_int(oidp, &new, 0, req);
     829             : #endif
     830             : #else
     831             :         error = sysctl_handle_int(oidp, &new, 0, req);
     832             : #endif
     833             :         if ((error == 0) &&
     834             : #if defined (__APPLE__)
     835             :             (req->newptr != USER_ADDR_NULL)) {
     836             : #else
     837             :             (req->newptr != NULL)) {
     838             : #endif
     839             : #if (SCTPCTL_ASCONF_ENABLE_MIN == 0)
     840             :                 if ((new > SCTPCTL_ASCONF_ENABLE_MAX) ||
     841             :                     ((new == 1) && (SCTP_BASE_SYSCTL(sctp_auth_enable) == 0))) {
     842             : #else
     843             :                 if ((new < SCTPCTL_ASCONF_ENABLE_MIN) ||
     844             :                     (new > SCTPCTL_ASCONF_ENABLE_MAX) ||
     845             :                     ((new == 1) && (SCTP_BASE_SYSCTL(sctp_auth_enable) == 0))) {
     846             : #endif
     847             :                         error = EINVAL;
     848             :                 } else {
     849             :                         SCTP_BASE_SYSCTL(sctp_asconf_enable) = new;
     850             :                 }
     851             :         }
     852             :         return (error);
     853             : }
     854             : 
     855             : #if defined(__APPLE__)
     856             : static int
     857             : sctp_sysctl_handle_stats SYSCTL_HANDLER_ARGS
     858             : {
     859             : #pragma unused(oidp, arg1, arg2)
     860             : #else
     861             : static int
     862             : sctp_sysctl_handle_stats(SYSCTL_HANDLER_ARGS)
     863             : {
     864             : #endif
     865             :         int error;
     866             : #if defined(__FreeBSD__)
     867             : #if defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
     868             :         struct sctpstat *sarry;
     869             :         struct sctpstat sb;
     870             :         int cpu;
     871             : #endif
     872             :         struct sctpstat sb_temp;
     873             : #endif
     874             : 
     875             : #if defined (__APPLE__)
     876             :         if ((req->newptr != USER_ADDR_NULL) &&
     877             : #else
     878             :         if ((req->newptr != NULL) &&
     879             : #endif
     880             :             (req->newlen != sizeof(struct sctpstat))) {
     881             :                 return (EINVAL);
     882             :         }
     883             : #if defined(__FreeBSD__)
     884             :         memset(&sb_temp, 0, sizeof(struct sctpstat));
     885             : 
     886             :         if (req->newptr != NULL) {
     887             :                 error = SYSCTL_IN(req, &sb_temp, sizeof(struct sctpstat));
     888             :                 if (error != 0) {
     889             :                         return (error);
     890             :                 }
     891             :         }
     892             : #if defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
     893             :         memset(&sb, 0, sizeof(sb));
     894             :         for (cpu = 0; cpu < mp_maxid; cpu++) {
     895             :                 sarry = &SCTP_BASE_STATS[cpu];
     896             :                 if (sarry->sctps_discontinuitytime.tv_sec > sb.sctps_discontinuitytime.tv_sec) {
     897             :                         sb.sctps_discontinuitytime.tv_sec = sarry->sctps_discontinuitytime.tv_sec;
     898             :                         sb.sctps_discontinuitytime.tv_usec = sarry->sctps_discontinuitytime.tv_usec;
     899             :                 }
     900             :                 sb.sctps_currestab += sarry->sctps_currestab;
     901             :                 sb.sctps_activeestab += sarry->sctps_activeestab;
     902             :                 sb.sctps_restartestab += sarry->sctps_restartestab;
     903             :                 sb.sctps_collisionestab += sarry->sctps_collisionestab;
     904             :                 sb.sctps_passiveestab += sarry->sctps_passiveestab;
     905             :                 sb.sctps_aborted += sarry->sctps_aborted;
     906             :                 sb.sctps_shutdown += sarry->sctps_shutdown;
     907             :                 sb.sctps_outoftheblue += sarry->sctps_outoftheblue;
     908             :                 sb.sctps_checksumerrors += sarry->sctps_checksumerrors;
     909             :                 sb.sctps_outcontrolchunks += sarry->sctps_outcontrolchunks;
     910             :                 sb.sctps_outorderchunks += sarry->sctps_outorderchunks;
     911             :                 sb.sctps_outunorderchunks += sarry->sctps_outunorderchunks;
     912             :                 sb.sctps_incontrolchunks += sarry->sctps_incontrolchunks;
     913             :                 sb.sctps_inorderchunks += sarry->sctps_inorderchunks;
     914             :                 sb.sctps_inunorderchunks += sarry->sctps_inunorderchunks;
     915             :                 sb.sctps_fragusrmsgs += sarry->sctps_fragusrmsgs;
     916             :                 sb.sctps_reasmusrmsgs += sarry->sctps_reasmusrmsgs;
     917             :                 sb.sctps_outpackets += sarry->sctps_outpackets;
     918             :                 sb.sctps_inpackets += sarry->sctps_inpackets;
     919             :                 sb.sctps_recvpackets += sarry->sctps_recvpackets;
     920             :                 sb.sctps_recvdatagrams += sarry->sctps_recvdatagrams;
     921             :                 sb.sctps_recvpktwithdata += sarry->sctps_recvpktwithdata;
     922             :                 sb.sctps_recvsacks += sarry->sctps_recvsacks;
     923             :                 sb.sctps_recvdata += sarry->sctps_recvdata;
     924             :                 sb.sctps_recvdupdata += sarry->sctps_recvdupdata;
     925             :                 sb.sctps_recvheartbeat += sarry->sctps_recvheartbeat;
     926             :                 sb.sctps_recvheartbeatack += sarry->sctps_recvheartbeatack;
     927             :                 sb.sctps_recvecne += sarry->sctps_recvecne;
     928             :                 sb.sctps_recvauth += sarry->sctps_recvauth;
     929             :                 sb.sctps_recvauthmissing += sarry->sctps_recvauthmissing;
     930             :                 sb.sctps_recvivalhmacid += sarry->sctps_recvivalhmacid;
     931             :                 sb.sctps_recvivalkeyid += sarry->sctps_recvivalkeyid;
     932             :                 sb.sctps_recvauthfailed += sarry->sctps_recvauthfailed;
     933             :                 sb.sctps_recvexpress += sarry->sctps_recvexpress;
     934             :                 sb.sctps_recvexpressm += sarry->sctps_recvexpressm;
     935             :                 sb.sctps_recvnocrc += sarry->sctps_recvnocrc;
     936             :                 sb.sctps_recvswcrc += sarry->sctps_recvswcrc;
     937             :                 sb.sctps_recvhwcrc += sarry->sctps_recvhwcrc;
     938             :                 sb.sctps_sendpackets += sarry->sctps_sendpackets;
     939             :                 sb.sctps_sendsacks += sarry->sctps_sendsacks;
     940             :                 sb.sctps_senddata += sarry->sctps_senddata;
     941             :                 sb.sctps_sendretransdata += sarry->sctps_sendretransdata;
     942             :                 sb.sctps_sendfastretrans += sarry->sctps_sendfastretrans;
     943             :                 sb.sctps_sendmultfastretrans += sarry->sctps_sendmultfastretrans;
     944             :                 sb.sctps_sendheartbeat += sarry->sctps_sendheartbeat;
     945             :                 sb.sctps_sendecne += sarry->sctps_sendecne;
     946             :                 sb.sctps_sendauth += sarry->sctps_sendauth;
     947             :                 sb.sctps_senderrors += sarry->sctps_senderrors;
     948             :                 sb.sctps_sendnocrc += sarry->sctps_sendnocrc;
     949             :                 sb.sctps_sendswcrc += sarry->sctps_sendswcrc;
     950             :                 sb.sctps_sendhwcrc += sarry->sctps_sendhwcrc;
     951             :                 sb.sctps_pdrpfmbox += sarry->sctps_pdrpfmbox;
     952             :                 sb.sctps_pdrpfehos += sarry->sctps_pdrpfehos;
     953             :                 sb.sctps_pdrpmbda += sarry->sctps_pdrpmbda;
     954             :                 sb.sctps_pdrpmbct += sarry->sctps_pdrpmbct;
     955             :                 sb.sctps_pdrpbwrpt += sarry->sctps_pdrpbwrpt;
     956             :                 sb.sctps_pdrpcrupt += sarry->sctps_pdrpcrupt;
     957             :                 sb.sctps_pdrpnedat += sarry->sctps_pdrpnedat;
     958             :                 sb.sctps_pdrppdbrk += sarry->sctps_pdrppdbrk;
     959             :                 sb.sctps_pdrptsnnf += sarry->sctps_pdrptsnnf;
     960             :                 sb.sctps_pdrpdnfnd += sarry->sctps_pdrpdnfnd;
     961             :                 sb.sctps_pdrpdiwnp += sarry->sctps_pdrpdiwnp;
     962             :                 sb.sctps_pdrpdizrw += sarry->sctps_pdrpdizrw;
     963             :                 sb.sctps_pdrpbadd += sarry->sctps_pdrpbadd;
     964             :                 sb.sctps_pdrpmark += sarry->sctps_pdrpmark;
     965             :                 sb.sctps_timoiterator += sarry->sctps_timoiterator;
     966             :                 sb.sctps_timodata += sarry->sctps_timodata;
     967             :                 sb.sctps_timowindowprobe += sarry->sctps_timowindowprobe;
     968             :                 sb.sctps_timoinit += sarry->sctps_timoinit;
     969             :                 sb.sctps_timosack += sarry->sctps_timosack;
     970             :                 sb.sctps_timoshutdown += sarry->sctps_timoshutdown;
     971             :                 sb.sctps_timoheartbeat += sarry->sctps_timoheartbeat;
     972             :                 sb.sctps_timocookie += sarry->sctps_timocookie;
     973             :                 sb.sctps_timosecret += sarry->sctps_timosecret;
     974             :                 sb.sctps_timopathmtu += sarry->sctps_timopathmtu;
     975             :                 sb.sctps_timoshutdownack += sarry->sctps_timoshutdownack;
     976             :                 sb.sctps_timoshutdownguard += sarry->sctps_timoshutdownguard;
     977             :                 sb.sctps_timostrmrst += sarry->sctps_timostrmrst;
     978             :                 sb.sctps_timoearlyfr += sarry->sctps_timoearlyfr;
     979             :                 sb.sctps_timoasconf += sarry->sctps_timoasconf;
     980             :                 sb.sctps_timodelprim += sarry->sctps_timodelprim;
     981             :                 sb.sctps_timoautoclose += sarry->sctps_timoautoclose;
     982             :                 sb.sctps_timoassockill += sarry->sctps_timoassockill;
     983             :                 sb.sctps_timoinpkill += sarry->sctps_timoinpkill;
     984             :                 sb.sctps_hdrops += sarry->sctps_hdrops;
     985             :                 sb.sctps_badsum += sarry->sctps_badsum;
     986             :                 sb.sctps_noport += sarry->sctps_noport;
     987             :                 sb.sctps_badvtag += sarry->sctps_badvtag;
     988             :                 sb.sctps_badsid += sarry->sctps_badsid;
     989             :                 sb.sctps_nomem += sarry->sctps_nomem;
     990             :                 sb.sctps_fastretransinrtt += sarry->sctps_fastretransinrtt;
     991             :                 sb.sctps_markedretrans += sarry->sctps_markedretrans;
     992             :                 sb.sctps_naglesent += sarry->sctps_naglesent;
     993             :                 sb.sctps_naglequeued += sarry->sctps_naglequeued;
     994             :                 sb.sctps_maxburstqueued += sarry->sctps_maxburstqueued;
     995             :                 sb.sctps_ifnomemqueued += sarry->sctps_ifnomemqueued;
     996             :                 sb.sctps_windowprobed += sarry->sctps_windowprobed;
     997             :                 sb.sctps_lowlevelerr += sarry->sctps_lowlevelerr;
     998             :                 sb.sctps_lowlevelerrusr += sarry->sctps_lowlevelerrusr;
     999             :                 sb.sctps_datadropchklmt += sarry->sctps_datadropchklmt;
    1000             :                 sb.sctps_datadroprwnd += sarry->sctps_datadroprwnd;
    1001             :                 sb.sctps_ecnereducedcwnd += sarry->sctps_ecnereducedcwnd;
    1002             :                 sb.sctps_vtagexpress += sarry->sctps_vtagexpress;
    1003             :                 sb.sctps_vtagbogus += sarry->sctps_vtagbogus;
    1004             :                 sb.sctps_primary_randry += sarry->sctps_primary_randry;
    1005             :                 sb.sctps_cmt_randry += sarry->sctps_cmt_randry;
    1006             :                 sb.sctps_slowpath_sack += sarry->sctps_slowpath_sack;
    1007             :                 sb.sctps_wu_sacks_sent += sarry->sctps_wu_sacks_sent;
    1008             :                 sb.sctps_sends_with_flags += sarry->sctps_sends_with_flags;
    1009             :                 sb.sctps_sends_with_unord += sarry->sctps_sends_with_unord;
    1010             :                 sb.sctps_sends_with_eof += sarry->sctps_sends_with_eof;
    1011             :                 sb.sctps_sends_with_abort += sarry->sctps_sends_with_abort;
    1012             :                 sb.sctps_protocol_drain_calls += sarry->sctps_protocol_drain_calls;
    1013             :                 sb.sctps_protocol_drains_done += sarry->sctps_protocol_drains_done;
    1014             :                 sb.sctps_read_peeks += sarry->sctps_read_peeks;
    1015             :                 sb.sctps_cached_chk += sarry->sctps_cached_chk;
    1016             :                 sb.sctps_cached_strmoq += sarry->sctps_cached_strmoq;
    1017             :                 sb.sctps_left_abandon += sarry->sctps_left_abandon;
    1018             :                 sb.sctps_send_burst_avoid += sarry->sctps_send_burst_avoid;
    1019             :                 sb.sctps_send_cwnd_avoid += sarry->sctps_send_cwnd_avoid;
    1020             :                 sb.sctps_fwdtsn_map_over += sarry->sctps_fwdtsn_map_over;
    1021             :                 if (req->newptr != NULL) {
    1022             :                         memcpy(sarry, &sb_temp, sizeof(struct sctpstat));
    1023             :                 }
    1024             :         }
    1025             :         error = SYSCTL_OUT(req, &sb, sizeof(struct sctpstat));
    1026             : #else
    1027             :         error = SYSCTL_OUT(req, &SCTP_BASE_STATS, sizeof(struct sctpstat));
    1028             :         if (error != 0) {
    1029             :                 return (error);
    1030             :         }
    1031             :         if (req->newptr != NULL) {
    1032             :                 memcpy(&SCTP_BASE_STATS, &sb_temp, sizeof(struct sctpstat));
    1033             :         }
    1034             : #endif
    1035             : #else
    1036             :         error = SYSCTL_OUT(req, &SCTP_BASE_STATS, sizeof(struct sctpstat));
    1037             : #endif
    1038             :         return (error);
    1039             : }
    1040             : 
    1041             : #if defined(SCTP_LOCAL_TRACE_BUF)
    1042             : #if defined(__APPLE__)
    1043             : static int
    1044             : sctp_sysctl_handle_trace_log SYSCTL_HANDLER_ARGS
    1045             : {
    1046             : #pragma unused(arg1, arg2, oidp)
    1047             : #else
    1048             : static int
    1049             : sctp_sysctl_handle_trace_log(SYSCTL_HANDLER_ARGS)
    1050             : {
    1051             : #endif
    1052             :         int error;
    1053             : 
    1054             : #if defined(__Windows__)
    1055             :         error = SYSCTL_OUT(req, SCTP_BASE_SYSCTL(sctp_log), sizeof(struct sctp_log));
    1056             : #else
    1057             :         error = SYSCTL_OUT(req, &SCTP_BASE_SYSCTL(sctp_log), sizeof(struct sctp_log));
    1058             : #endif
    1059             :         return (error);
    1060             : }
    1061             : 
    1062             : #if defined(__APPLE__)
    1063             : static int
    1064             : sctp_sysctl_handle_trace_log_clear SYSCTL_HANDLER_ARGS
    1065             : {
    1066             : #pragma unused(arg1, arg2, req, oidp)
    1067             : #else
    1068             : static int
    1069             : sctp_sysctl_handle_trace_log_clear(SYSCTL_HANDLER_ARGS)
    1070             : {
    1071             : #endif
    1072             :         int error = 0;
    1073             : #if defined(__Windows__)
    1074             :         int value = 0;
    1075             : 
    1076             :         if (req->new_data == NULL) {
    1077             :                 return (error);
    1078             :         }
    1079             :         error = SYSCTL_IN(req, &value, sizeof(int));
    1080             :         if (error == 0 && value != 0 && SCTP_BASE_SYSCTL(sctp_log) != NULL) {
    1081             :                 memset(SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log));
    1082             :         }
    1083             : #else
    1084             : 
    1085             :         memset(&SCTP_BASE_SYSCTL(sctp_log), 0, sizeof(struct sctp_log));
    1086             : #endif
    1087             :         return (error);
    1088             : }
    1089             : #endif
    1090             : 
    1091             : #if defined(__APPLE__) || defined(__FreeBSD__)
    1092             : #if defined(__FreeBSD__)
    1093             : #if __FreeBSD_version >= 800056 && __FreeBSD_version < 1000100
    1094             : #ifdef VIMAGE
    1095             : #define SCTP_UINT_SYSCTL(name, var_name, prefix)                        \
    1096             :         static int                                                      \
    1097             :         sctp_sysctl_handle_##mib_name(SYSCTL_HANDLER_ARGS)              \
    1098             :         {                                                               \
    1099             :                 int error;                                              \
    1100             :                 uint32_t new;                                           \
    1101             :                                                                         \
    1102             :                 new = SCTP_BASE_SYSCTL(var_name);                       \
    1103             :                 error = vnet_sysctl_handle_int(oidp, &new, 0, req); \
    1104             :                 if ((error == 0) && (req->newptr != NULL)) {         \
    1105             :                         if ((new < prefix##_MIN) ||                  \
    1106             :                             (new > prefix##_MAX)) {                  \
    1107             :                                 error = EINVAL;                         \
    1108             :                         } else {                                        \
    1109             :                                 SCTP_BASE_SYSCTL(var_name) = new;       \
    1110             :                         }                                               \
    1111             :                 }                                                       \
    1112             :                 return (error);                                         \
    1113             :         }                                                               \
    1114             :         SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mib_name,                 \
    1115             :                          CTLTYPE_UINT|CTLFLAG_RW, NULL, 0,              \
    1116             :                          sctp_sysctl_handle_##mib_name, "UI", prefix##_DESC);
    1117             : #else
    1118             : #define SCTP_UINT_SYSCTL(mib_name, var_name, prefix)                    \
    1119             :         static int                                                      \
    1120             :         sctp_sysctl_handle_##mib_name(SYSCTL_HANDLER_ARGS)              \
    1121             :         {                                                               \
    1122             :                 int error;                                              \
    1123             :                 uint32_t new;                                           \
    1124             :                                                                         \
    1125             :                 new = SCTP_BASE_SYSCTL(var_name);                       \
    1126             :                 error = sysctl_handle_int(oidp, &new, 0, req);              \
    1127             :                 if ((error == 0) && (req->newptr != NULL)) {         \
    1128             :                         if ((new < prefix##_MIN) ||                  \
    1129             :                             (new > prefix##_MAX)) {                  \
    1130             :                                 error = EINVAL;                         \
    1131             :                         } else {                                        \
    1132             :                                 SCTP_BASE_SYSCTL(var_name) = new;       \
    1133             :                         }                                               \
    1134             :                 }                                                       \
    1135             :                 return (error);                                         \
    1136             :         }                                                               \
    1137             :         SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mib_name,                 \
    1138             :                          CTLFLAG_VNET|CTLTYPE_UINT|CTLFLAG_RW, NULL, 0, \
    1139             :                          sctp_sysctl_handle_##mib_name, "UI", prefix##_DESC);
    1140             : #endif
    1141             : #else
    1142             : #define SCTP_UINT_SYSCTL(mib_name, var_name, prefix)                    \
    1143             :         static int                                                      \
    1144             :         sctp_sysctl_handle_##mib_name(SYSCTL_HANDLER_ARGS)              \
    1145             :         {                                                               \
    1146             :                 int error;                                              \
    1147             :                 uint32_t new;                                           \
    1148             :                                                                         \
    1149             :                 new = SCTP_BASE_SYSCTL(var_name);                       \
    1150             :                 error = sysctl_handle_int(oidp, &new, 0, req);              \
    1151             :                 if ((error == 0) && (req->newptr != NULL)) {         \
    1152             :                         if ((new < prefix##_MIN) ||                  \
    1153             :                             (new > prefix##_MAX)) {                  \
    1154             :                                 error = EINVAL;                         \
    1155             :                         } else {                                        \
    1156             :                                 SCTP_BASE_SYSCTL(var_name) = new;       \
    1157             :                         }                                               \
    1158             :                 }                                                       \
    1159             :                 return (error);                                         \
    1160             :         }                                                               \
    1161             :         SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mib_name,                 \
    1162             :                          CTLFLAG_VNET|CTLTYPE_UINT|CTLFLAG_RW, NULL, 0, \
    1163             :                          sctp_sysctl_handle_##mib_name, "UI", prefix##_DESC);
    1164             : #endif
    1165             : #else
    1166             : #define SCTP_UINT_SYSCTL(mib_name, var_name, prefix)                    \
    1167             :         static int                                                      \
    1168             :         sctp_sysctl_handle_##mib_name(struct sysctl_oid *oidp,          \
    1169             :                                   void *arg1 __attribute__((unused)),   \
    1170             :                                   int arg2 __attribute__((unused)),     \
    1171             :                                   struct sysctl_req *req)               \
    1172             :         {                                                               \
    1173             :                 int error;                                              \
    1174             :                 uint32_t new;                                           \
    1175             :                                                                         \
    1176             :                 new = SCTP_BASE_SYSCTL(var_name);                       \
    1177             :                 error = sysctl_handle_int(oidp, &new, 0, req);              \
    1178             :                 if ((error == 0) && (req->newptr != USER_ADDR_NULL)) {       \
    1179             :                         if ((new < prefix##_MIN) ||                  \
    1180             :                             (new > prefix##_MAX)) {                  \
    1181             :                                 error = EINVAL;                         \
    1182             :                         } else {                                        \
    1183             :                                 SCTP_BASE_SYSCTL(var_name) = new;       \
    1184             :                         }                                               \
    1185             :                 }                                                       \
    1186             :                 return (error);                                         \
    1187             :         }                                                               \
    1188             :         SYSCTL_PROC(_net_inet_sctp, OID_AUTO, mib_name,                 \
    1189             :                     CTLTYPE_INT | CTLFLAG_RW, NULL, 0,                  \
    1190             :                     sctp_sysctl_handle_##mib_name, "I", prefix##_DESC);
    1191             : #define CTLTYPE_UINT CTLTYPE_INT
    1192             : #define CTLFLAG_VNET 0
    1193             : #endif
    1194             : 
    1195             : /*
    1196             :  * sysctl definitions
    1197             :  */
    1198             : 
    1199             : SCTP_UINT_SYSCTL(sendspace, sctp_sendspace, SCTPCTL_MAXDGRAM)
    1200             : SCTP_UINT_SYSCTL(recvspace, sctp_recvspace, SCTPCTL_RECVSPACE)
    1201             : SCTP_UINT_SYSCTL(auto_asconf, sctp_auto_asconf, SCTPCTL_AUTOASCONF)
    1202             : SCTP_UINT_SYSCTL(ecn_enable, sctp_ecn_enable, SCTPCTL_ECN_ENABLE)
    1203             : SCTP_UINT_SYSCTL(pr_enable, sctp_pr_enable, SCTPCTL_PR_ENABLE)
    1204             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, auth_enable, CTLFLAG_VNET|CTLTYPE_UINT|CTLFLAG_RW,
    1205             :             NULL, 0, sctp_sysctl_handle_auth, "IU", SCTPCTL_AUTH_ENABLE_DESC);
    1206             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, asconf_enable, CTLFLAG_VNET|CTLTYPE_UINT|CTLFLAG_RW,
    1207             :             NULL, 0, sctp_sysctl_handle_asconf, "IU", SCTPCTL_ASCONF_ENABLE_DESC);
    1208             : SCTP_UINT_SYSCTL(reconfig_enable, sctp_reconfig_enable, SCTPCTL_RECONFIG_ENABLE)
    1209             : SCTP_UINT_SYSCTL(nrsack_enable, sctp_nrsack_enable, SCTPCTL_NRSACK_ENABLE)
    1210             : SCTP_UINT_SYSCTL(pktdrop_enable, sctp_pktdrop_enable, SCTPCTL_PKTDROP_ENABLE)
    1211             : SCTP_UINT_SYSCTL(strict_sacks, sctp_strict_sacks, SCTPCTL_STRICT_SACKS)
    1212             : #if defined(__APPLE__)
    1213             : #if !defined(SCTP_WITH_NO_CSUM)
    1214             : SCTP_UINT_SYSCTL(loopback_nocsum, sctp_no_csum_on_loopback, SCTPCTL_LOOPBACK_NOCSUM)
    1215             : #endif
    1216             : #endif
    1217             : SCTP_UINT_SYSCTL(peer_chkoh, sctp_peer_chunk_oh, SCTPCTL_PEER_CHKOH)
    1218             : SCTP_UINT_SYSCTL(maxburst, sctp_max_burst_default, SCTPCTL_MAXBURST)
    1219             : SCTP_UINT_SYSCTL(fr_maxburst, sctp_fr_max_burst_default, SCTPCTL_FRMAXBURST)
    1220             : SCTP_UINT_SYSCTL(maxchunks, sctp_max_chunks_on_queue, SCTPCTL_MAXCHUNKS)
    1221             : SCTP_UINT_SYSCTL(tcbhashsize, sctp_hashtblsize, SCTPCTL_TCBHASHSIZE)
    1222             : SCTP_UINT_SYSCTL(pcbhashsize, sctp_pcbtblsize, SCTPCTL_PCBHASHSIZE)
    1223             : SCTP_UINT_SYSCTL(min_split_point, sctp_min_split_point, SCTPCTL_MIN_SPLIT_POINT)
    1224             : SCTP_UINT_SYSCTL(chunkscale, sctp_chunkscale, SCTPCTL_CHUNKSCALE)
    1225             : SCTP_UINT_SYSCTL(delayed_sack_time, sctp_delayed_sack_time_default, SCTPCTL_DELAYED_SACK_TIME)
    1226             : SCTP_UINT_SYSCTL(sack_freq, sctp_sack_freq_default, SCTPCTL_SACK_FREQ)
    1227             : SCTP_UINT_SYSCTL(sys_resource, sctp_system_free_resc_limit, SCTPCTL_SYS_RESOURCE)
    1228             : SCTP_UINT_SYSCTL(asoc_resource, sctp_asoc_free_resc_limit, SCTPCTL_ASOC_RESOURCE)
    1229             : SCTP_UINT_SYSCTL(heartbeat_interval, sctp_heartbeat_interval_default, SCTPCTL_HEARTBEAT_INTERVAL)
    1230             : SCTP_UINT_SYSCTL(pmtu_raise_time, sctp_pmtu_raise_time_default, SCTPCTL_PMTU_RAISE_TIME)
    1231             : SCTP_UINT_SYSCTL(shutdown_guard_time, sctp_shutdown_guard_time_default, SCTPCTL_SHUTDOWN_GUARD_TIME)
    1232             : SCTP_UINT_SYSCTL(secret_lifetime, sctp_secret_lifetime_default, SCTPCTL_SECRET_LIFETIME)
    1233             : SCTP_UINT_SYSCTL(rto_max, sctp_rto_max_default, SCTPCTL_RTO_MAX)
    1234             : SCTP_UINT_SYSCTL(rto_min, sctp_rto_min_default, SCTPCTL_RTO_MIN)
    1235             : SCTP_UINT_SYSCTL(rto_initial, sctp_rto_initial_default, SCTPCTL_RTO_INITIAL)
    1236             : SCTP_UINT_SYSCTL(init_rto_max, sctp_init_rto_max_default, SCTPCTL_INIT_RTO_MAX)
    1237             : SCTP_UINT_SYSCTL(valid_cookie_life, sctp_valid_cookie_life_default, SCTPCTL_VALID_COOKIE_LIFE)
    1238             : SCTP_UINT_SYSCTL(init_rtx_max, sctp_init_rtx_max_default, SCTPCTL_INIT_RTX_MAX)
    1239             : SCTP_UINT_SYSCTL(assoc_rtx_max, sctp_assoc_rtx_max_default, SCTPCTL_ASSOC_RTX_MAX)
    1240             : SCTP_UINT_SYSCTL(path_rtx_max, sctp_path_rtx_max_default, SCTPCTL_PATH_RTX_MAX)
    1241             : SCTP_UINT_SYSCTL(path_pf_threshold, sctp_path_pf_threshold, SCTPCTL_PATH_PF_THRESHOLD)
    1242             : SCTP_UINT_SYSCTL(add_more_on_output, sctp_add_more_threshold, SCTPCTL_ADD_MORE_ON_OUTPUT)
    1243             : SCTP_UINT_SYSCTL(incoming_streams, sctp_nr_incoming_streams_default, SCTPCTL_INCOMING_STREAMS)
    1244             : SCTP_UINT_SYSCTL(outgoing_streams, sctp_nr_outgoing_streams_default, SCTPCTL_OUTGOING_STREAMS)
    1245             : SCTP_UINT_SYSCTL(cmt_on_off, sctp_cmt_on_off, SCTPCTL_CMT_ON_OFF)
    1246             : SCTP_UINT_SYSCTL(cmt_use_dac, sctp_cmt_use_dac, SCTPCTL_CMT_USE_DAC)
    1247             : SCTP_UINT_SYSCTL(cwnd_maxburst, sctp_use_cwnd_based_maxburst, SCTPCTL_CWND_MAXBURST)
    1248             : SCTP_UINT_SYSCTL(nat_friendly, sctp_nat_friendly, SCTPCTL_NAT_FRIENDLY)
    1249             : SCTP_UINT_SYSCTL(abc_l_var, sctp_L2_abc_variable, SCTPCTL_ABC_L_VAR)
    1250             : SCTP_UINT_SYSCTL(max_chained_mbufs, sctp_mbuf_threshold_count, SCTPCTL_MAX_CHAINED_MBUFS)
    1251             : SCTP_UINT_SYSCTL(do_sctp_drain, sctp_do_drain, SCTPCTL_DO_SCTP_DRAIN)
    1252             : SCTP_UINT_SYSCTL(hb_max_burst, sctp_hb_maxburst, SCTPCTL_HB_MAX_BURST)
    1253             : SCTP_UINT_SYSCTL(abort_at_limit, sctp_abort_if_one_2_one_hits_limit, SCTPCTL_ABORT_AT_LIMIT)
    1254             : SCTP_UINT_SYSCTL(strict_data_order, sctp_strict_data_order, SCTPCTL_STRICT_DATA_ORDER)
    1255             : SCTP_UINT_SYSCTL(min_residual, sctp_min_residual, SCTPCTL_MIN_RESIDUAL)
    1256             : SCTP_UINT_SYSCTL(max_retran_chunk, sctp_max_retran_chunk, SCTPCTL_MAX_RETRAN_CHUNK)
    1257             : SCTP_UINT_SYSCTL(log_level, sctp_logging_level, SCTPCTL_LOGGING_LEVEL)
    1258             : SCTP_UINT_SYSCTL(default_cc_module, sctp_default_cc_module, SCTPCTL_DEFAULT_CC_MODULE)
    1259             : SCTP_UINT_SYSCTL(default_ss_module, sctp_default_ss_module, SCTPCTL_DEFAULT_SS_MODULE)
    1260             : SCTP_UINT_SYSCTL(default_frag_interleave, sctp_default_frag_interleave, SCTPCTL_DEFAULT_FRAG_INTERLEAVE)
    1261             : SCTP_UINT_SYSCTL(mobility_base, sctp_mobility_base, SCTPCTL_MOBILITY_BASE)
    1262             : SCTP_UINT_SYSCTL(mobility_fasthandoff, sctp_mobility_fasthandoff, SCTPCTL_MOBILITY_FASTHANDOFF)
    1263             : #if defined(SCTP_LOCAL_TRACE_BUF)
    1264             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, log, CTLFLAG_VNET|CTLTYPE_STRUCT|CTLFLAG_RD,
    1265             :             NULL, 0, sctp_sysctl_handle_trace_log, "S,sctplog", "SCTP logging (struct sctp_log)");
    1266             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, clear_trace, CTLFLAG_VNET|CTLTYPE_UINT | CTLFLAG_RW,
    1267             :             NULL, 0, sctp_sysctl_handle_trace_log_clear, "IU", "Clear SCTP Logging buffer");
    1268             : #endif
    1269             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, udp_tunneling_port, CTLFLAG_VNET|CTLTYPE_UINT|CTLFLAG_RW,
    1270             :             NULL, 0, sctp_sysctl_handle_udp_tunneling, "IU", SCTPCTL_UDP_TUNNELING_PORT_DESC);
    1271             : SCTP_UINT_SYSCTL(enable_sack_immediately, sctp_enable_sack_immediately, SCTPCTL_SACK_IMMEDIATELY_ENABLE)
    1272             : SCTP_UINT_SYSCTL(nat_friendly_init, sctp_inits_include_nat_friendly, SCTPCTL_NAT_FRIENDLY_INITS)
    1273             : SCTP_UINT_SYSCTL(vtag_time_wait, sctp_vtag_time_wait, SCTPCTL_TIME_WAIT)
    1274             : SCTP_UINT_SYSCTL(buffer_splitting, sctp_buffer_splitting, SCTPCTL_BUFFER_SPLITTING)
    1275             : SCTP_UINT_SYSCTL(initial_cwnd, sctp_initial_cwnd, SCTPCTL_INITIAL_CWND)
    1276             : SCTP_UINT_SYSCTL(rttvar_bw, sctp_rttvar_bw, SCTPCTL_RTTVAR_BW)
    1277             : SCTP_UINT_SYSCTL(rttvar_rtt, sctp_rttvar_rtt, SCTPCTL_RTTVAR_RTT)
    1278             : SCTP_UINT_SYSCTL(rttvar_eqret, sctp_rttvar_eqret, SCTPCTL_RTTVAR_EQRET)
    1279             : SCTP_UINT_SYSCTL(rttvar_steady_step, sctp_steady_step, SCTPCTL_RTTVAR_STEADYS)
    1280             : SCTP_UINT_SYSCTL(use_dcccecn, sctp_use_dccc_ecn, SCTPCTL_RTTVAR_DCCCECN)
    1281             : SCTP_UINT_SYSCTL(blackhole, sctp_blackhole, SCTPCTL_BLACKHOLE)
    1282             : SCTP_UINT_SYSCTL(diag_info_code, sctp_diag_info_code, SCTPCTL_DIAG_INFO_CODE)
    1283             : #ifdef SCTP_DEBUG
    1284             : SCTP_UINT_SYSCTL(debug, sctp_debug_on, SCTPCTL_DEBUG)
    1285             : #endif
    1286             : #if defined(__APPLE__)
    1287             : SCTP_UINT_SYSCTL(main_timer, sctp_main_timer, SCTPCTL_MAIN_TIMER)
    1288             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, ignore_vmware_interfaces, CTLTYPE_UINT|CTLFLAG_RW,
    1289             :             NULL, 0, sctp_sysctl_handle_vmware_interfaces, "IU", SCTPCTL_IGNORE_VMWARE_INTERFACES_DESC);
    1290             : SCTP_UINT_SYSCTL(addr_watchdog_limit, sctp_addr_watchdog_limit, SCTPCTL_ADDR_WATCHDOG_LIMIT)
    1291             : SCTP_UINT_SYSCTL(vtag_watchdog_limit, sctp_vtag_watchdog_limit, SCTPCTL_VTAG_WATCHDOG_LIMIT)
    1292             : #endif
    1293             : #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
    1294             : SCTP_UINT_SYSCTL(output_unlocked, sctp_output_unlocked, SCTPCTL_OUTPUT_UNLOCKED)
    1295             : #endif
    1296             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, stats, CTLFLAG_VNET|CTLTYPE_STRUCT|CTLFLAG_RW,
    1297             :             NULL, 0, sctp_sysctl_handle_stats, "S,sctpstat", "SCTP statistics (struct sctp_stat)");
    1298             : SYSCTL_PROC(_net_inet_sctp, OID_AUTO, assoclist, CTLFLAG_VNET|CTLTYPE_OPAQUE|CTLFLAG_RD,
    1299             :             NULL, 0, sctp_sysctl_handle_assoclist, "S,xassoc", "List of active SCTP associations");
    1300             : 
    1301             : #elif defined(__Windows__)
    1302             : 
    1303             : #define RANGECHK(var, min, max) \
    1304             :         if ((var) < (min)) { (var) = (min); } \
    1305             :         else if ((var) > (max)) { (var) = (max); }
    1306             : 
    1307             : static int
    1308             : sctp_sysctl_handle_int(SYSCTL_HANDLER_ARGS)
    1309             : {
    1310             :         int error;
    1311             : 
    1312             :         error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req);
    1313             :         if (error == 0) {
    1314             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_sendspace), SCTPCTL_MAXDGRAM_MIN, SCTPCTL_MAXDGRAM_MAX);
    1315             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_recvspace), SCTPCTL_RECVSPACE_MIN, SCTPCTL_RECVSPACE_MAX);
    1316             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_auto_asconf), SCTPCTL_AUTOASCONF_MIN, SCTPCTL_AUTOASCONF_MAX);
    1317             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_auto_asconf), SCTPCTL_AUTOASCONF_MIN, SCTPCTL_AUTOASCONF_MAX);
    1318             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_ecn_enable), SCTPCTL_ECN_ENABLE_MIN, SCTPCTL_ECN_ENABLE_MAX);
    1319             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_pr_enable), SCTPCTL_PR_ENABLE_MIN, SCTPCTL_PR_ENABLE_MAX);
    1320             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_reconfig_enable), SCTPCTL_RECONFIG_ENABLE_MIN, SCTPCTL_RECONFIG_ENABLE_MAX);
    1321             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_nrsack_enable), SCTPCTL_NRSACK_ENABLE_MIN, SCTPCTL_NRSACK_ENABLE_MAX);
    1322             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_pktdrop_enable), SCTPCTL_PKTDROP_ENABLE_MIN, SCTPCTL_PKTDROP_ENABLE_MAX);
    1323             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_strict_sacks), SCTPCTL_STRICT_SACKS_MIN, SCTPCTL_STRICT_SACKS_MAX);
    1324             : #if !defined(SCTP_WITH_NO_CSUM)
    1325             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), SCTPCTL_LOOPBACK_NOCSUM_MIN, SCTPCTL_LOOPBACK_NOCSUM_MAX);
    1326             : #endif
    1327             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), SCTPCTL_PEER_CHKOH_MIN, SCTPCTL_PEER_CHKOH_MAX);
    1328             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_max_burst_default), SCTPCTL_MAXBURST_MIN, SCTPCTL_MAXBURST_MAX);
    1329             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), SCTPCTL_FRMAXBURST_MIN, SCTPCTL_FRMAXBURST_MAX);
    1330             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), SCTPCTL_MAXCHUNKS_MIN, SCTPCTL_MAXCHUNKS_MAX);
    1331             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_hashtblsize), SCTPCTL_TCBHASHSIZE_MIN, SCTPCTL_TCBHASHSIZE_MAX);
    1332             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_pcbtblsize), SCTPCTL_PCBHASHSIZE_MIN, SCTPCTL_PCBHASHSIZE_MAX);
    1333             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_min_split_point), SCTPCTL_MIN_SPLIT_POINT_MIN, SCTPCTL_MIN_SPLIT_POINT_MAX);
    1334             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_chunkscale), SCTPCTL_CHUNKSCALE_MIN, SCTPCTL_CHUNKSCALE_MAX);
    1335             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), SCTPCTL_DELAYED_SACK_TIME_MIN, SCTPCTL_DELAYED_SACK_TIME_MAX);
    1336             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_sack_freq_default), SCTPCTL_SACK_FREQ_MIN, SCTPCTL_SACK_FREQ_MAX);
    1337             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), SCTPCTL_SYS_RESOURCE_MIN, SCTPCTL_SYS_RESOURCE_MAX);
    1338             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), SCTPCTL_ASOC_RESOURCE_MIN, SCTPCTL_ASOC_RESOURCE_MAX);
    1339             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), SCTPCTL_HEARTBEAT_INTERVAL_MIN, SCTPCTL_HEARTBEAT_INTERVAL_MAX);
    1340             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), SCTPCTL_PMTU_RAISE_TIME_MIN, SCTPCTL_PMTU_RAISE_TIME_MAX);
    1341             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), SCTPCTL_SHUTDOWN_GUARD_TIME_MIN, SCTPCTL_SHUTDOWN_GUARD_TIME_MAX);
    1342             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), SCTPCTL_SECRET_LIFETIME_MIN, SCTPCTL_SECRET_LIFETIME_MAX);
    1343             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_max_default), SCTPCTL_RTO_MAX_MIN, SCTPCTL_RTO_MAX_MAX);
    1344             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_min_default), SCTPCTL_RTO_MIN_MIN, SCTPCTL_RTO_MIN_MAX);
    1345             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rto_initial_default), SCTPCTL_RTO_INITIAL_MIN, SCTPCTL_RTO_INITIAL_MAX);
    1346             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_init_rto_max_default), SCTPCTL_INIT_RTO_MAX_MIN, SCTPCTL_INIT_RTO_MAX_MAX);
    1347             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), SCTPCTL_VALID_COOKIE_LIFE_MIN, SCTPCTL_VALID_COOKIE_LIFE_MAX);
    1348             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), SCTPCTL_INIT_RTX_MAX_MIN, SCTPCTL_INIT_RTX_MAX_MAX);
    1349             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), SCTPCTL_ASSOC_RTX_MAX_MIN, SCTPCTL_ASSOC_RTX_MAX_MAX);
    1350             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), SCTPCTL_PATH_RTX_MAX_MIN, SCTPCTL_PATH_RTX_MAX_MAX);
    1351             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_path_pf_threshold), SCTPCTL_PATH_PF_THRESHOLD_MIN, SCTPCTL_PATH_PF_THRESHOLD_MAX);
    1352             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_add_more_threshold), SCTPCTL_ADD_MORE_ON_OUTPUT_MIN, SCTPCTL_ADD_MORE_ON_OUTPUT_MAX);
    1353             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default), SCTPCTL_INCOMING_STREAMS_MIN, SCTPCTL_INCOMING_STREAMS_MAX);
    1354             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), SCTPCTL_OUTGOING_STREAMS_MIN, SCTPCTL_OUTGOING_STREAMS_MAX);
    1355             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_cmt_on_off), SCTPCTL_CMT_ON_OFF_MIN, SCTPCTL_CMT_ON_OFF_MAX);
    1356             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_cmt_use_dac), SCTPCTL_CMT_USE_DAC_MIN, SCTPCTL_CMT_USE_DAC_MAX);
    1357             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), SCTPCTL_CWND_MAXBURST_MIN, SCTPCTL_CWND_MAXBURST_MAX);
    1358             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_nat_friendly), SCTPCTL_NAT_FRIENDLY_MIN, SCTPCTL_NAT_FRIENDLY_MAX);
    1359             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_L2_abc_variable), SCTPCTL_ABC_L_VAR_MIN, SCTPCTL_ABC_L_VAR_MAX);
    1360             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), SCTPCTL_MAX_CHAINED_MBUFS_MIN, SCTPCTL_MAX_CHAINED_MBUFS_MAX);
    1361             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_do_drain), SCTPCTL_DO_SCTP_DRAIN_MIN, SCTPCTL_DO_SCTP_DRAIN_MAX);
    1362             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_hb_maxburst), SCTPCTL_HB_MAX_BURST_MIN, SCTPCTL_HB_MAX_BURST_MAX);
    1363             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), SCTPCTL_ABORT_AT_LIMIT_MIN, SCTPCTL_ABORT_AT_LIMIT_MAX);
    1364             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_strict_data_order), SCTPCTL_STRICT_DATA_ORDER_MIN, SCTPCTL_STRICT_DATA_ORDER_MAX);
    1365             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_min_residual), SCTPCTL_MIN_RESIDUAL_MIN, SCTPCTL_MIN_RESIDUAL_MAX);
    1366             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_max_retran_chunk), SCTPCTL_MAX_RETRAN_CHUNK_MIN, SCTPCTL_MAX_RETRAN_CHUNK_MAX);
    1367             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_logging_level), SCTPCTL_LOGGING_LEVEL_MIN, SCTPCTL_LOGGING_LEVEL_MAX);
    1368             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_default_cc_module), SCTPCTL_DEFAULT_CC_MODULE_MIN, SCTPCTL_DEFAULT_CC_MODULE_MAX);
    1369             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_default_ss_module), SCTPCTL_DEFAULT_SS_MODULE_MIN, SCTPCTL_DEFAULT_SS_MODULE_MAX);
    1370             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_default_frag_interleave), SCTPCTL_DEFAULT_FRAG_INTERLEAVE_MIN, SCTPCTL_DEFAULT_FRAG_INTERLEAVE_MAX);
    1371             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_vtag_time_wait), SCTPCTL_TIME_WAIT_MIN, SCTPCTL_TIME_WAIT_MAX);
    1372             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_buffer_splitting), SCTPCTL_BUFFER_SPLITTING_MIN, SCTPCTL_BUFFER_SPLITTING_MAX);
    1373             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_initial_cwnd), SCTPCTL_INITIAL_CWND_MIN, SCTPCTL_INITIAL_CWND_MAX);
    1374             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_bw), SCTPCTL_RTTVAR_BW_MIN, SCTPCTL_RTTVAR_BW_MAX);
    1375             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_rtt), SCTPCTL_RTTVAR_RTT_MIN, SCTPCTL_RTTVAR_RTT_MAX);
    1376             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_rttvar_eqret), SCTPCTL_RTTVAR_EQRET_MIN, SCTPCTL_RTTVAR_EQRET_MAX);
    1377             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_steady_step), SCTPCTL_RTTVAR_STEADYS_MIN, SCTPCTL_RTTVAR_STEADYS_MAX);
    1378             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_use_dccc_ecn), SCTPCTL_RTTVAR_DCCCECN_MIN, SCTPCTL_RTTVAR_DCCCECN_MAX);
    1379             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_base), SCTPCTL_MOBILITY_BASE_MIN, SCTPCTL_MOBILITY_BASE_MAX);
    1380             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), SCTPCTL_MOBILITY_FASTHANDOFF_MIN, SCTPCTL_MOBILITY_FASTHANDOFF_MAX);
    1381             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), SCTPCTL_SACK_IMMEDIATELY_ENABLE_MIN, SCTPCTL_SACK_IMMEDIATELY_ENABLE_MAX);
    1382             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), SCTPCTL_NAT_FRIENDLY_INITS_MIN, SCTPCTL_NAT_FRIENDLY_INITS_MAX);
    1383             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_blackhole), SCTPCTL_BLACKHOLE_MIN, SCTPCTL_BLACKHOLE_MAX);
    1384             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_diag_info_code), SCTPCTL_DIAG_INFO_CODE_MIN, SCTPCTL_DIAG_INFO_CODE_MAX);
    1385             : #ifdef SCTP_DEBUG
    1386             :                 RANGECHK(SCTP_BASE_SYSCTL(sctp_debug_on), SCTPCTL_DEBUG_MIN, SCTPCTL_DEBUG_MAX);
    1387             : #endif
    1388             :         }
    1389             :         return (error);
    1390             : }
    1391             : 
    1392             : void
    1393             : sysctl_setup_sctp(void)
    1394             : {
    1395             :         sysctl_add_oid(&sysctl_oid_top, "sendspace", CTLTYPE_INT|CTLFLAG_RW,
    1396             :             &SCTP_BASE_SYSCTL(sctp_sendspace), 0, sctp_sysctl_handle_int,
    1397             :             SCTPCTL_MAXDGRAM_DESC);
    1398             : 
    1399             :         sysctl_add_oid(&sysctl_oid_top, "recvspace", CTLTYPE_INT|CTLFLAG_RW,
    1400             :            &SCTP_BASE_SYSCTL(sctp_recvspace), 0, sctp_sysctl_handle_int,
    1401             :             SCTPCTL_RECVSPACE_DESC);
    1402             : 
    1403             :         sysctl_add_oid(&sysctl_oid_top, "auto_asconf", CTLTYPE_INT|CTLFLAG_RW,
    1404             :             &SCTP_BASE_SYSCTL(sctp_auto_asconf), 0, sctp_sysctl_handle_int,
    1405             :             SCTPCTL_AUTOASCONF_DESC);
    1406             : 
    1407             :         sysctl_add_oid(&sysctl_oid_top, "ecn_enable", CTLTYPE_INT|CTLFLAG_RW,
    1408             :             &SCTP_BASE_SYSCTL(sctp_ecn_enable), 0, sctp_sysctl_handle_int,
    1409             :             SCTPCTL_ECN_ENABLE_DESC);
    1410             : 
    1411             :         sysctl_add_oid(&sysctl_oid_top, "pr_enable", CTLTYPE_INT|CTLFLAG_RW,
    1412             :             &SCTP_BASE_SYSCTL(sctp_pr_enable), 0, sctp_sysctl_handle_int,
    1413             :             SCTPCTL_PR_ENABLE_DESC);
    1414             : 
    1415             :         sysctl_add_oid(&sysctl_oid_top, "auth_enable", CTLTYPE_INT|CTLFLAG_RW,
    1416             :             &SCTP_BASE_SYSCTL(sctp_auth_enable), 0, sctp_sysctl_handle_auth,
    1417             :             SCTPCTL_AUTH_ENABLE_DESC);
    1418             : 
    1419             :         sysctl_add_oid(&sysctl_oid_top, "asconf_enable", CTLTYPE_INT|CTLFLAG_RW,
    1420             :             &SCTP_BASE_SYSCTL(sctp_asconf_enable), 0, sctp_sysctl_handle_asconf,
    1421             :             SCTPCTL_ASCONF_ENABLE_DESC);
    1422             : 
    1423             :         sysctl_add_oid(&sysctl_oid_top, "reconfig_enable", CTLTYPE_INT|CTLFLAG_RW,
    1424             :             &SCTP_BASE_SYSCTL(sctp_reconfig_enable), 0, sctp_sysctl_handle_int,
    1425             :             SCTPCTL_RECONFIG_ENABLE_DESC);
    1426             : 
    1427             :         sysctl_add_oid(&sysctl_oid_top, "nrsack_enable", CTLTYPE_INT|CTLFLAG_RW,
    1428             :             &SCTP_BASE_SYSCTL(sctp_nrsack_enable), 0, sctp_sysctl_handle_int,
    1429             :             SCTPCTL_NRSACK_ENABLE_DESC);
    1430             : 
    1431             :         sysctl_add_oid(&sysctl_oid_top, "pktdrop_enable", CTLTYPE_INT|CTLFLAG_RW,
    1432             :             &SCTP_BASE_SYSCTL(sctp_pktdrop_enable), 0, sctp_sysctl_handle_int,
    1433             :             SCTPCTL_PKTDROP_ENABLE_DESC);
    1434             : 
    1435             :         sysctl_add_oid(&sysctl_oid_top, "strict_sacks", CTLTYPE_INT|CTLFLAG_RW,
    1436             :             &SCTP_BASE_SYSCTL(sctp_strict_sacks), 0, sctp_sysctl_handle_int,
    1437             :             SCTPCTL_STRICT_SACKS_DESC);
    1438             : 
    1439             : #if !defined(SCTP_WITH_NO_CSUM)
    1440             :         sysctl_add_oid(&sysctl_oid_top, "loopback_nocsum", CTLTYPE_INT|CTLFLAG_RW,
    1441             :             &SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), 0, sctp_sysctl_handle_int,
    1442             :             SCTPCTL_LOOPBACK_NOCSUM_DESC);
    1443             : #endif
    1444             : 
    1445             :         sysctl_add_oid(&sysctl_oid_top, "peer_chkoh", CTLTYPE_INT|CTLFLAG_RW,
    1446             :             &SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), 0, sctp_sysctl_handle_int,
    1447             :             SCTPCTL_PEER_CHKOH_DESC);
    1448             : 
    1449             :         sysctl_add_oid(&sysctl_oid_top, "maxburst", CTLTYPE_INT|CTLFLAG_RW,
    1450             :             &SCTP_BASE_SYSCTL(sctp_max_burst_default), 0, sctp_sysctl_handle_int,
    1451             :             SCTPCTL_MAXBURST_DESC);
    1452             : 
    1453             :         sysctl_add_oid(&sysctl_oid_top, "fr_maxburst", CTLTYPE_INT|CTLFLAG_RW,
    1454             :             &SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), 0, sctp_sysctl_handle_int,
    1455             :             SCTPCTL_FRMAXBURST_DESC);
    1456             : 
    1457             :         sysctl_add_oid(&sysctl_oid_top, "maxchunks", CTLTYPE_INT|CTLFLAG_RW,
    1458             :             &SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue), 0, sctp_sysctl_handle_int,
    1459             :             SCTPCTL_MAXCHUNKS_DESC);
    1460             : 
    1461             :         sysctl_add_oid(&sysctl_oid_top, "tcbhashsize", CTLTYPE_INT|CTLFLAG_RW,
    1462             :             &SCTP_BASE_SYSCTL(sctp_hashtblsize), 0, sctp_sysctl_handle_int,
    1463             :             SCTPCTL_TCBHASHSIZE_DESC);
    1464             : 
    1465             :         sysctl_add_oid(&sysctl_oid_top, "pcbhashsize", CTLTYPE_INT|CTLFLAG_RW,
    1466             :             &SCTP_BASE_SYSCTL(sctp_pcbtblsize), 0, sctp_sysctl_handle_int,
    1467             :             SCTPCTL_PCBHASHSIZE_DESC);
    1468             : 
    1469             :         sysctl_add_oid(&sysctl_oid_top, "min_split_point", CTLTYPE_INT|CTLFLAG_RW,
    1470             :             &SCTP_BASE_SYSCTL(sctp_min_split_point), 0, sctp_sysctl_handle_int,
    1471             :             SCTPCTL_MIN_SPLIT_POINT_DESC);
    1472             : 
    1473             :         sysctl_add_oid(&sysctl_oid_top, "chunkscale", CTLTYPE_INT|CTLFLAG_RW,
    1474             :             &SCTP_BASE_SYSCTL(sctp_chunkscale), 0, sctp_sysctl_handle_int,
    1475             :             SCTPCTL_CHUNKSCALE_DESC);
    1476             : 
    1477             :         sysctl_add_oid(&sysctl_oid_top, "delayed_sack_time", CTLTYPE_INT|CTLFLAG_RW,
    1478             :             &SCTP_BASE_SYSCTL(sctp_delayed_sack_time_default), 0, sctp_sysctl_handle_int,
    1479             :             SCTPCTL_DELAYED_SACK_TIME_DESC);
    1480             : 
    1481             :         sysctl_add_oid(&sysctl_oid_top, "sack_freq", CTLTYPE_INT|CTLFLAG_RW,
    1482             :             &SCTP_BASE_SYSCTL(sctp_sack_freq_default), 0, sctp_sysctl_handle_int,
    1483             :             SCTPCTL_SACK_FREQ_DESC);
    1484             : 
    1485             :         sysctl_add_oid(&sysctl_oid_top, "sys_resource", CTLTYPE_INT|CTLFLAG_RW,
    1486             :             &SCTP_BASE_SYSCTL(sctp_system_free_resc_limit), 0, sctp_sysctl_handle_int,
    1487             :             SCTPCTL_SYS_RESOURCE_DESC);
    1488             : 
    1489             :         sysctl_add_oid(&sysctl_oid_top, "asoc_resource", CTLTYPE_INT|CTLFLAG_RW,
    1490             :             &SCTP_BASE_SYSCTL(sctp_asoc_free_resc_limit), 0, sctp_sysctl_handle_int,
    1491             :             SCTPCTL_ASOC_RESOURCE_DESC);
    1492             : 
    1493             :         sysctl_add_oid(&sysctl_oid_top, "heartbeat_interval", CTLTYPE_INT|CTLFLAG_RW,
    1494             :             &SCTP_BASE_SYSCTL(sctp_heartbeat_interval_default), 0, sctp_sysctl_handle_int,
    1495             :             SCTPCTL_HEARTBEAT_INTERVAL_DESC);
    1496             : 
    1497             :         sysctl_add_oid(&sysctl_oid_top, "pmtu_raise_time", CTLTYPE_INT|CTLFLAG_RW,
    1498             :             &SCTP_BASE_SYSCTL(sctp_pmtu_raise_time_default), 0, sctp_sysctl_handle_int,
    1499             :             SCTPCTL_PMTU_RAISE_TIME_DESC);
    1500             : 
    1501             :         sysctl_add_oid(&sysctl_oid_top, "shutdown_guard_time", CTLTYPE_INT|CTLFLAG_RW,
    1502             :             &SCTP_BASE_SYSCTL(sctp_shutdown_guard_time_default), 0, sctp_sysctl_handle_int,
    1503             :             SCTPCTL_SHUTDOWN_GUARD_TIME_DESC);
    1504             : 
    1505             :         sysctl_add_oid(&sysctl_oid_top, "secret_lifetime", CTLTYPE_INT|CTLFLAG_RW,
    1506             :             &SCTP_BASE_SYSCTL(sctp_secret_lifetime_default), 0, sctp_sysctl_handle_int,
    1507             :             SCTPCTL_SECRET_LIFETIME_DESC);
    1508             : 
    1509             :         sysctl_add_oid(&sysctl_oid_top, "rto_max", CTLTYPE_INT|CTLFLAG_RW,
    1510             :             &SCTP_BASE_SYSCTL(sctp_rto_max_default), 0, sctp_sysctl_handle_int,
    1511             :             SCTPCTL_RTO_MAX_DESC);
    1512             : 
    1513             :         sysctl_add_oid(&sysctl_oid_top, "rto_min", CTLTYPE_INT|CTLFLAG_RW,
    1514             :             &SCTP_BASE_SYSCTL(sctp_rto_min_default), 0, sctp_sysctl_handle_int,
    1515             :             SCTPCTL_RTO_MIN_DESC);
    1516             : 
    1517             :         sysctl_add_oid(&sysctl_oid_top, "rto_initial", CTLTYPE_INT|CTLFLAG_RW,
    1518             :             &SCTP_BASE_SYSCTL(sctp_rto_initial_default), 0, sctp_sysctl_handle_int,
    1519             :             SCTPCTL_RTO_INITIAL_DESC);
    1520             : 
    1521             :         sysctl_add_oid(&sysctl_oid_top, "init_rto_max", CTLTYPE_INT|CTLFLAG_RW,
    1522             :             &SCTP_BASE_SYSCTL(sctp_init_rto_max_default), 0, sctp_sysctl_handle_int,
    1523             :             SCTPCTL_INIT_RTO_MAX_DESC);
    1524             : 
    1525             :         sysctl_add_oid(&sysctl_oid_top, "valid_cookie_life", CTLTYPE_INT|CTLFLAG_RW,
    1526             :             &SCTP_BASE_SYSCTL(sctp_valid_cookie_life_default), 0, sctp_sysctl_handle_int,
    1527             :             SCTPCTL_VALID_COOKIE_LIFE_DESC);
    1528             : 
    1529             :         sysctl_add_oid(&sysctl_oid_top, "init_rtx_max", CTLTYPE_INT|CTLFLAG_RW,
    1530             :             &SCTP_BASE_SYSCTL(sctp_init_rtx_max_default), 0, sctp_sysctl_handle_int,
    1531             :             SCTPCTL_INIT_RTX_MAX_DESC);
    1532             : 
    1533             :         sysctl_add_oid(&sysctl_oid_top, "assoc_rtx_max", CTLTYPE_INT|CTLFLAG_RW,
    1534             :             &SCTP_BASE_SYSCTL(sctp_assoc_rtx_max_default), 0, sctp_sysctl_handle_int,
    1535             :             SCTPCTL_ASSOC_RTX_MAX_DESC);
    1536             : 
    1537             :         sysctl_add_oid(&sysctl_oid_top, "path_rtx_max", CTLTYPE_INT|CTLFLAG_RW,
    1538             :             &SCTP_BASE_SYSCTL(sctp_path_rtx_max_default), 0, sctp_sysctl_handle_int,
    1539             :             SCTPCTL_PATH_RTX_MAX_DESC);
    1540             : 
    1541             :         sysctl_add_oid(&sysctl_oid_top, "path_pf_threshold", CTLTYPE_INT|CTLFLAG_RW,
    1542             :             &SCTP_BASE_SYSCTL(sctp_path_pf_threshold), 0, sctp_sysctl_handle_int,
    1543             :             SCTPCTL_PATH_PF_THRESHOLD_DESC);
    1544             : 
    1545             :         sysctl_add_oid(&sysctl_oid_top, "add_more_on_output", CTLTYPE_INT|CTLFLAG_RW,
    1546             :             &SCTP_BASE_SYSCTL(sctp_add_more_threshold), 0, sctp_sysctl_handle_int,
    1547             :             SCTPCTL_ADD_MORE_ON_OUTPUT_DESC);
    1548             : 
    1549             :         sysctl_add_oid(&sysctl_oid_top, "incoming_streams", CTLTYPE_INT|CTLFLAG_RW,
    1550             :             &SCTP_BASE_SYSCTL(sctp_nr_incoming_streams_default), 0, sctp_sysctl_handle_int,
    1551             :             SCTPCTL_INCOMING_STREAMS_DESC);
    1552             : 
    1553             :         sysctl_add_oid(&sysctl_oid_top, "outgoing_streams", CTLTYPE_INT|CTLFLAG_RW,
    1554             :             &SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default), 0, sctp_sysctl_handle_int,
    1555             :             SCTPCTL_OUTGOING_STREAMS_DESC);
    1556             : 
    1557             :         sysctl_add_oid(&sysctl_oid_top, "cmt_on_off", CTLTYPE_INT|CTLFLAG_RW,
    1558             :             &SCTP_BASE_SYSCTL(sctp_cmt_on_off), 0, sctp_sysctl_handle_int,
    1559             :             SCTPCTL_CMT_ON_OFF_DESC);
    1560             : 
    1561             :         sysctl_add_oid(&sysctl_oid_top, "cmt_use_dac", CTLTYPE_INT|CTLFLAG_RW,
    1562             :             &SCTP_BASE_SYSCTL(sctp_cmt_use_dac), 0, sctp_sysctl_handle_int,
    1563             :             SCTPCTL_CMT_USE_DAC_DESC);
    1564             : 
    1565             :         sysctl_add_oid(&sysctl_oid_top, "cwnd_maxburst", CTLTYPE_INT|CTLFLAG_RW,
    1566             :             &SCTP_BASE_SYSCTL(sctp_use_cwnd_based_maxburst), 0, sctp_sysctl_handle_int,
    1567             :             SCTPCTL_CWND_MAXBURST_DESC);
    1568             : 
    1569             :         sysctl_add_oid(&sysctl_oid_top, "nat_friendly", CTLTYPE_INT|CTLFLAG_RW,
    1570             :             &SCTP_BASE_SYSCTL(sctp_nat_friendly), 0, sctp_sysctl_handle_int,
    1571             :             SCTPCTL_NAT_FRIENDLY_DESC);
    1572             : 
    1573             :         sysctl_add_oid(&sysctl_oid_top, "abc_l_var", CTLTYPE_INT|CTLFLAG_RW,
    1574             :             &SCTP_BASE_SYSCTL(sctp_L2_abc_variable), 0, sctp_sysctl_handle_int,
    1575             :             SCTPCTL_ABC_L_VAR_DESC);
    1576             : 
    1577             :         sysctl_add_oid(&sysctl_oid_top, "max_chained_mbufs", CTLTYPE_INT|CTLFLAG_RW,
    1578             :             &SCTP_BASE_SYSCTL(sctp_mbuf_threshold_count), 0, sctp_sysctl_handle_int,
    1579             :             SCTPCTL_MAX_CHAINED_MBUFS_DESC);
    1580             : 
    1581             :         sysctl_add_oid(&sysctl_oid_top, "do_sctp_drain", CTLTYPE_INT|CTLFLAG_RW,
    1582             :             &SCTP_BASE_SYSCTL(sctp_do_drain), 0, sctp_sysctl_handle_int,
    1583             :             SCTPCTL_DO_SCTP_DRAIN_DESC);
    1584             : 
    1585             :         sysctl_add_oid(&sysctl_oid_top, "hb_max_burst", CTLTYPE_INT|CTLFLAG_RW,
    1586             :             &SCTP_BASE_SYSCTL(sctp_hb_maxburst), 0, sctp_sysctl_handle_int,
    1587             :             SCTPCTL_HB_MAX_BURST_DESC);
    1588             : 
    1589             :         sysctl_add_oid(&sysctl_oid_top, "abort_at_limit", CTLTYPE_INT|CTLFLAG_RW,
    1590             :             &SCTP_BASE_SYSCTL(sctp_abort_if_one_2_one_hits_limit), 0, sctp_sysctl_handle_int,
    1591             :             SCTPCTL_ABORT_AT_LIMIT_DESC);
    1592             : 
    1593             :         sysctl_add_oid(&sysctl_oid_top, "strict_data_order", CTLTYPE_INT|CTLFLAG_RW,
    1594             :             &SCTP_BASE_SYSCTL(sctp_strict_data_order), 0, sctp_sysctl_handle_int,
    1595             :             SCTPCTL_STRICT_DATA_ORDER_DESC);
    1596             : 
    1597             :         sysctl_add_oid(&sysctl_oid_top, "min_residual", CTLTYPE_INT|CTLFLAG_RW,
    1598             :             &SCTP_BASE_SYSCTL(sctp_min_residual), 0, sctp_sysctl_handle_int,
    1599             :             SCTPCTL_MIN_RESIDUAL_DESC);
    1600             : 
    1601             :         sysctl_add_oid(&sysctl_oid_top, "max_retran_chunk", CTLTYPE_INT|CTLFLAG_RW,
    1602             :             &SCTP_BASE_SYSCTL(sctp_max_retran_chunk), 0, sctp_sysctl_handle_int,
    1603             :             SCTPCTL_MAX_RETRAN_CHUNK_DESC);
    1604             : 
    1605             :         sysctl_add_oid(&sysctl_oid_top, "log_level", CTLTYPE_INT|CTLFLAG_RW,
    1606             :             &SCTP_BASE_SYSCTL(sctp_logging_level), 0, sctp_sysctl_handle_int,
    1607             :             SCTPCTL_LOGGING_LEVEL_DESC);
    1608             : 
    1609             :         sysctl_add_oid(&sysctl_oid_top, "default_cc_module", CTLTYPE_INT|CTLFLAG_RW,
    1610             :             &SCTP_BASE_SYSCTL(sctp_default_cc_module), 0, sctp_sysctl_handle_int,
    1611             :             SCTPCTL_DEFAULT_CC_MODULE_DESC);
    1612             : 
    1613             :         sysctl_add_oid(&sysctl_oid_top, "default_ss_module", CTLTYPE_INT|CTLFLAG_RW,
    1614             :             &SCTP_BASE_SYSCTL(sctp_default_ss_module), 0, sctp_sysctl_handle_int,
    1615             :             SCTPCTL_DEFAULT_SS_MODULE_DESC);
    1616             : 
    1617             :         sysctl_add_oid(&sysctl_oid_top, "default_frag_interleave", CTLTYPE_INT|CTLFLAG_RW,
    1618             :             &SCTP_BASE_SYSCTL(sctp_default_frag_interleave), 0, sctp_sysctl_handle_int,
    1619             :             SCTPCTL_DEFAULT_FRAG_INTERLEAVE_DESC);
    1620             : 
    1621             :         sysctl_add_oid(&sysctl_oid_top, "mobility_base", CTLTYPE_INT|CTLFLAG_RW,
    1622             :             &SCTP_BASE_SYSCTL(sctp_mobility_base), 0, sctp_sysctl_handle_int,
    1623             :             SCTPCTL_MOBILITY_BASE_DESC);
    1624             : 
    1625             :         sysctl_add_oid(&sysctl_oid_top, "mobility_fasthandoff", CTLTYPE_INT|CTLFLAG_RW,
    1626             :             &SCTP_BASE_SYSCTL(sctp_mobility_fasthandoff), 0, sctp_sysctl_handle_int,
    1627             :             SCTPCTL_MOBILITY_FASTHANDOFF_DESC);
    1628             : 
    1629             : #if defined(SCTP_LOCAL_TRACE_BUF)
    1630             :         sysctl_add_oid(&sysctl_oid_top, "sctp_log", CTLTYPE_STRUCT|CTLFLAG_RD,
    1631             :             SCTP_BASE_SYSCTL(sctp_log), sizeof(struct sctp_log), NULL,
    1632             :             "SCTP logging (struct sctp_log)");
    1633             : 
    1634             :         sysctl_add_oid(&sysctl_oid_top, "clear_trace", CTLTYPE_INT|CTLFLAG_WR,
    1635             :             NULL, 0, sctp_sysctl_handle_trace_log_clear,
    1636             :             "Clear SCTP Logging buffer");
    1637             : #endif
    1638             : 
    1639             :         sysctl_add_oid(&sysctl_oid_top, "udp_tunneling_port", CTLTYPE_INT|CTLFLAG_RW,
    1640             :             &SCTP_BASE_SYSCTL(sctp_udp_tunneling_port), 0, sctp_sysctl_handle_udp_tunneling,
    1641             :             SCTPCTL_UDP_TUNNELING_PORT_DESC);
    1642             : 
    1643             :         sysctl_add_oid(&sysctl_oid_top, "enable_sack_immediately", CTLTYPE_INT|CTLFLAG_RW,
    1644             :             &SCTP_BASE_SYSCTL(sctp_enable_sack_immediately), 0, sctp_sysctl_handle_int,
    1645             :             SCTPCTL_SACK_IMMEDIATELY_ENABLE_DESC);
    1646             : 
    1647             :         sysctl_add_oid(&sysctl_oid_top, "nat_friendly_init", CTLTYPE_INT|CTLFLAG_RW,
    1648             :             &SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly), 0, sctp_sysctl_handle_int,
    1649             :             SCTPCTL_NAT_FRIENDLY_DESC);
    1650             : 
    1651             :         sysctl_add_oid(&sysctl_oid_top, "vtag_time_wait", CTLTYPE_INT|CTLFLAG_RW,
    1652             :             &SCTP_BASE_SYSCTL(sctp_vtag_time_wait), 0, sctp_sysctl_handle_int,
    1653             :             SCTPCTL_TIME_WAIT_DESC);
    1654             : 
    1655             :         sysctl_add_oid(&sysctl_oid_top, "buffer_splitting", CTLTYPE_INT|CTLFLAG_RW,
    1656             :             &SCTP_BASE_SYSCTL(sctp_buffer_splitting), 0, sctp_sysctl_handle_int,
    1657             :             SCTPCTL_BUFFER_SPLITTING_DESC);
    1658             : 
    1659             :         sysctl_add_oid(&sysctl_oid_top, "initial_cwnd", CTLTYPE_INT|CTLFLAG_RW,
    1660             :             &SCTP_BASE_SYSCTL(sctp_initial_cwnd), 0, sctp_sysctl_handle_int,
    1661             :             SCTPCTL_INITIAL_CWND_DESC);
    1662             : 
    1663             :         sysctl_add_oid(&sysctl_oid_top, "rttvar_bw", CTLTYPE_INT|CTLFLAG_RW,
    1664             :             &SCTP_BASE_SYSCTL(sctp_rttvar_bw), 0, sctp_sysctl_handle_int,
    1665             :             SCTPCTL_RTTVAR_BW_DESC);
    1666             : 
    1667             :         sysctl_add_oid(&sysctl_oid_top, "rttvar_rtt", CTLTYPE_INT|CTLFLAG_RW,
    1668             :             &SCTP_BASE_SYSCTL(sctp_rttvar_rtt), 0, sctp_sysctl_handle_int,
    1669             :             SCTPCTL_RTTVAR_RTT_DESC);
    1670             : 
    1671             :         sysctl_add_oid(&sysctl_oid_top, "rttvar_eqret", CTLTYPE_INT|CTLFLAG_RW,
    1672             :             &SCTP_BASE_SYSCTL(sctp_rttvar_eqret), 0, sctp_sysctl_handle_int,
    1673             :             SCTPCTL_RTTVAR_EQRET_DESC);
    1674             : 
    1675             :         sysctl_add_oid(&sysctl_oid_top, "rttvar_steady_step", CTLTYPE_INT|CTLFLAG_RW,
    1676             :             &SCTP_BASE_SYSCTL(sctp_steady_step), 0, sctp_sysctl_handle_int,
    1677             :             SCTPCTL_RTTVAR_STEADYS_DESC);
    1678             : 
    1679             :         sysctl_add_oid(&sysctl_oid_top, "use_dcccecn", CTLTYPE_INT|CTLFLAG_RW,
    1680             :             &SCTP_BASE_SYSCTL(sctp_use_dccc_ecn), 0, sctp_sysctl_handle_int,
    1681             :             SCTPCTL_RTTVAR_DCCCECN_DESC);
    1682             : 
    1683             :         sysctl_add_oid(&sysctl_oid_top, "blackhole", CTLTYPE_INT|CTLFLAG_RW,
    1684             :             &SCTP_BASE_SYSCTL(sctp_blackhole), 0, sctp_sysctl_handle_int,
    1685             :             SCTPCTL_BLACKHOLE_DESC);
    1686             : 
    1687             :         sysctl_add_oid(&sysctl_oid_top, "diag_info_code", CTLTYPE_INT|CTLFLAG_RW,
    1688             :             &SCTP_BASE_SYSCTL(sctp_diag_info_code), 0, sctp_sysctl_handle_int,
    1689             :             SCTPCTL_DIAG_INFO_CODE_DESC);
    1690             : 
    1691             : #ifdef SCTP_DEBUG
    1692             :         sysctl_add_oid(&sysctl_oid_top, "debug", CTLTYPE_INT|CTLFLAG_RW,
    1693             :             &SCTP_BASE_SYSCTL(sctp_debug_on), 0, sctp_sysctl_handle_int,
    1694             :             SCTPCTL_DEBUG_DESC);
    1695             : #endif
    1696             : 
    1697             :         sysctl_add_oid(&sysctl_oid_top, "stats", CTLTYPE_STRUCT|CTLFLAG_RW,
    1698             :             &SCTP_BASE_STATS, sizeof(SCTP_BASE_STATS), NULL,
    1699             :             "SCTP statistics (struct sctp_stat)");
    1700             : 
    1701             :         sysctl_add_oid(&sysctl_oid_top, "assoclist", CTLTYPE_STRUCT|CTLFLAG_RD,
    1702             :             NULL, 0, sctp_assoclist,
    1703             :             "List of active SCTP associations");
    1704             : }
    1705             : #endif
    1706             : #endif

Generated by: LCOV version 1.13