Print this page
3942 inject sanity into ipadm tcp buffer size properties
3943 _snd_lowat_fraction tcp tunable has no effect
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Peng Dai <peng.dai@delphix.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/inet/udp/udp_tunables.c
          +++ new/usr/src/uts/common/inet/udp/udp_tunables.c
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
       24 + * Copyright (c) 2013 by Delphix. All rights reserved.
  24   25   */
  25   26  /* Copyright (c) 1990 Mentat Inc. */
  26   27  
  27   28  #include <inet/ip.h>
  28   29  #include <inet/ip6.h>
  29   30  #include <inet/udp_impl.h>
  30   31  #include <sys/sunddi.h>
  31   32  
       33 +static int
       34 +udp_set_buf_prop(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
       35 +    const char *ifname, const void *pval, uint_t flags)
       36 +{
       37 +        return (mod_set_buf_prop(stack->netstack_udp->us_propinfo_tbl, stack,
       38 +            cr, pinfo, ifname, pval, flags));
       39 +}
       40 +
       41 +static int
       42 +udp_get_buf_prop(netstack_t *stack, mod_prop_info_t *pinfo, const char *ifname,
       43 +    void *val, uint_t psize, uint_t flags)
       44 +{
       45 +        return (mod_get_buf_prop(stack->netstack_udp->us_propinfo_tbl, stack,
       46 +            pinfo, ifname, val, psize, flags));
       47 +}
       48 +
  32   49  /*
  33   50   * Special checkers for smallest/largest anonymous port so they don't
  34   51   * ever happen to be (largest < smallest).
  35   52   */
  36   53  /* ARGSUSED */
  37   54  static int
  38      -udp_smallest_anon_set(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
       55 +udp_smallest_anon_set(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
  39   56      const char *ifname, const void *pval, uint_t flags)
  40   57  {
  41   58          unsigned long new_value;
  42      -        udp_stack_t *us = (udp_stack_t *)cbarg;
       59 +        udp_stack_t *us = stack->netstack_udp;
  43   60          int err;
  44   61  
  45   62          if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
  46   63                  return (err);
  47   64          /* mod_uint32_value() + pinfo guarantees we're in UDP port range. */
  48   65          if (new_value > us->us_largest_anon_port)
  49   66                  return (ERANGE);
  50   67          pinfo->prop_cur_uval = (uint32_t)new_value;
  51   68          return (0);
  52   69  }
  53   70  
  54   71  /* ARGSUSED */
  55   72  static int
  56      -udp_largest_anon_set(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
       73 +udp_largest_anon_set(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
  57   74      const char *ifname, const void *pval, uint_t flags)
  58   75  {
  59   76          unsigned long new_value;
  60      -        udp_stack_t *us = (udp_stack_t *)cbarg;
       77 +        udp_stack_t *us = stack->netstack_udp;
  61   78          int err;
  62   79  
  63   80          if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
  64   81                  return (err);
  65   82          /* mod_uint32_value() + pinfo guarantees we're in UDP port range. */
  66   83          if (new_value < us->us_smallest_anon_port)
  67   84                  return (ERANGE);
  68   85          pinfo->prop_cur_uval = (uint32_t)new_value;
  69   86          return (0);
  70   87  }
↓ open down ↓ 27 lines elided ↑ open up ↑
  98  115              {B_TRUE}, {B_TRUE} },
  99  116  
 100  117          { "smallest_anon_port", MOD_PROTO_UDP,
 101  118              udp_smallest_anon_set, mod_get_uint32,
 102  119              {1024, ULP_MAX_PORT, (32 * 1024)}, {(32 * 1024)} },
 103  120  
 104  121          { "largest_anon_port", MOD_PROTO_UDP,
 105  122              udp_largest_anon_set, mod_get_uint32,
 106  123              {1024, ULP_MAX_PORT, ULP_MAX_PORT}, {ULP_MAX_PORT} },
 107  124  
 108      -        { "send_maxbuf", MOD_PROTO_UDP,
 109      -            mod_set_uint32, mod_get_uint32,
 110      -            {UDP_XMIT_LOWATER, (1<<30), UDP_XMIT_HIWATER},
      125 +        { "send_buf", MOD_PROTO_UDP,
      126 +            udp_set_buf_prop, udp_get_buf_prop,
      127 +            {UDP_XMIT_LOWATER, ULP_MAX_BUF, UDP_XMIT_HIWATER},
 111  128              {UDP_XMIT_HIWATER} },
 112  129  
 113  130          { "_xmit_lowat", MOD_PROTO_UDP,
 114  131              mod_set_uint32, mod_get_uint32,
 115      -            {0, (1<<30), UDP_XMIT_LOWATER},
      132 +            {0, ULP_MAX_BUF, UDP_XMIT_LOWATER},
 116  133              {UDP_XMIT_LOWATER} },
 117  134  
 118      -        { "recv_maxbuf", MOD_PROTO_UDP,
 119      -            mod_set_uint32, mod_get_uint32,
 120      -            {UDP_RECV_LOWATER, (1<<30), UDP_RECV_HIWATER},
      135 +        { "recv_buf", MOD_PROTO_UDP,
      136 +            udp_set_buf_prop, udp_get_buf_prop,
      137 +            {UDP_RECV_LOWATER, ULP_MAX_BUF, UDP_RECV_HIWATER},
 121  138              {UDP_RECV_HIWATER} },
 122  139  
 123  140          /* tunable - 10 */
 124      -        { "_max_buf", MOD_PROTO_UDP,
      141 +        { "max_buf", MOD_PROTO_UDP,
 125  142              mod_set_uint32, mod_get_uint32,
 126      -            {65536, (1<<30), 2*1024*1024}, {2*1024*1024} },
      143 +            {65536, ULP_MAX_BUF, 2*1024*1024}, {2*1024*1024} },
 127  144  
 128  145          { "_pmtu_discovery", MOD_PROTO_UDP,
 129  146              mod_set_boolean, mod_get_boolean,
 130  147              {B_FALSE}, {B_FALSE} },
 131  148  
 132  149          { "_sendto_ignerr", MOD_PROTO_UDP,
 133  150              mod_set_boolean, mod_get_boolean,
 134  151              {B_FALSE}, {B_FALSE} },
 135  152  
 136  153          { "extra_priv_ports", MOD_PROTO_UDP,
 137  154              mod_set_extra_privports, mod_get_extra_privports,
 138  155              {1, ULP_MAX_PORT, 0}, {0} },
 139  156  
 140  157          { "?", MOD_PROTO_UDP, NULL, mod_get_allprop, {0}, {0} },
 141  158  
 142  159          { NULL, 0, NULL, NULL, {0}, {0} }
 143  160  };
 144  161  
 145  162  int udp_propinfo_count = A_CNT(udp_propinfo_tbl);
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX