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>


   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 1990 Mentat Inc.

  24  */
  25 
  26 #ifndef _INET_TUNABLES_H
  27 #define _INET_TUNABLES_H
  28 
  29 #include <sys/types.h>
  30 #include <net/if.h>
  31 #ifdef _KERNEL
  32 #include <sys/netstack.h>
  33 #endif
  34 
  35 #ifdef  __cplusplus
  36 extern "C" {
  37 #endif
  38 
  39 #define MAXPROPNAMELEN  64
  40 
  41 /*
  42  * The `mod_ioc_prop_s' datastructure is used as an IOCTL argument for
  43  * SIOCSETPROP and SIOCGETPROP ioctls. This datastructure identifies the


  71 #define MOD_PROP_APPEND         0x10    /* append to multi-valued property */
  72 #define MOD_PROP_REMOVE         0x20    /* remove from multi-valued property */
  73 
  74 /* mpr_proto values */
  75 #define MOD_PROTO_NONE          0x00
  76 #define MOD_PROTO_IPV4          0x01    /* property is applicable to IPV4 */
  77 #define MOD_PROTO_IPV6          0x02    /* property is applicable to IPV6 */
  78 #define MOD_PROTO_RAWIP         0x04    /* property is applicable to ICMP */
  79 #define MOD_PROTO_TCP           0x08    /* property is applicable to TCP */
  80 #define MOD_PROTO_UDP           0x10    /* property is applicable to UDP */
  81 #define MOD_PROTO_SCTP          0x20    /* property is applicable to SCTP */
  82 
  83 /* property is applicable to both IPV[4|6] */
  84 #define MOD_PROTO_IP            (MOD_PROTO_IPV4|MOD_PROTO_IPV6)
  85 
  86 #ifdef  _KERNEL
  87 
  88 typedef struct mod_prop_info_s mod_prop_info_t;
  89 
  90 /* set/get property callback functions */
  91 typedef int     mod_prop_setf_t(void *, cred_t *, mod_prop_info_t *,
  92                     const char *, const void *, uint_t);
  93 typedef int     mod_prop_getf_t(void *, mod_prop_info_t *, const char *,
  94                     void *val, uint_t, uint_t);
  95 
  96 typedef struct mod_propval_uint32_s {
  97         uint32_t        mod_propval_umin;
  98         uint32_t        mod_propval_umax;
  99         uint32_t        mod_propval_ucur;
 100 } mod_propval_uint32_t;
 101 
 102 /*
 103  * protocol property information
 104  */
 105 struct mod_prop_info_s {
 106         char                    *mpi_name;      /* property name */
 107         uint_t                  mpi_proto;      /* property protocol */
 108         mod_prop_setf_t         *mpi_setf;      /* sets the property value */
 109         mod_prop_getf_t         *mpi_getf;      /* gets the property value */
 110         /*
 111          * Holds the current value of the property. Whenever applicable
 112          * holds the min/max value too.
 113          */
 114         union {


 132 #define prop_cur_uval   u.mpi_uval.mod_propval_ucur
 133 #define prop_cur_bval   u.mpi_bval
 134 #define prop_def_uval   u_def.mpi_def_uval
 135 #define prop_def_bval   u_def.mpi_def_bval
 136 
 137 #define MS              1L
 138 #define SECONDS         (1000 * MS)
 139 #define MINUTES         (60 * SECONDS)
 140 #define HOURS           (60 * MINUTES)
 141 #define DAYS            (24 * HOURS)
 142 
 143 #define MB              (1024 * 1024)
 144 
 145 /* Largest TCP/UDP/SCTP port number */
 146 #define ULP_MAX_PORT    (64 * 1024 - 1)
 147 
 148 /* extra privilege ports for upper layer protocols, tcp, sctp and udp */
 149 #define ULP_DEF_EPRIV_PORT1     2049
 150 #define ULP_DEF_EPRIV_PORT2     4045
 151 


 152 /* generic function to set/get global module properties */
 153 extern mod_prop_setf_t  mod_set_boolean, mod_set_uint32,
 154                         mod_set_aligned, mod_set_extra_privports;
 155 
 156 extern mod_prop_getf_t  mod_get_boolean, mod_get_uint32,
 157                         mod_get_allprop, mod_get_extra_privports;
 158 
 159 extern int mod_uint32_value(const void *, mod_prop_info_t *, uint_t,
 160     unsigned long *);






 161 
 162 #endif  /* _KERNEL */
 163 
 164 /*
 165  * End-system model definitions that include the weak/strong end-system
 166  * definitions in RFC 1122, Section 3.3.4.5. IP_WEAK_ES and IP_STRONG_ES
 167  * conform to the corresponding  RFC 1122 definitions. The IP_SRC_PRI_ES
 168  * hostmodel is similar to IP_WEAK_ES with one additional enhancement: for
 169  * a packet with source S2, destination D2, the route selection algorithm
 170  * will first attempt to find a route for the destination that goes out
 171  * through an interface where S2 is configured and marked UP.  If such
 172  * a route cannot be found, then the best-matching route for D2 will be
 173  * selected, ignoring any mismatches between S2 and the interface addresses
 174  * on the outgoing interface implied by the route.
 175  */
 176 typedef enum {
 177         IP_WEAK_ES = 0,
 178         IP_SRC_PRI_ES,
 179         IP_STRONG_ES,
 180         IP_MAXVAL_ES


   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 1990 Mentat Inc.
  24  * Copyright (c) 2013 by Delphix. All rights reserved.
  25  */
  26 
  27 #ifndef _INET_TUNABLES_H
  28 #define _INET_TUNABLES_H
  29 
  30 #include <sys/types.h>
  31 #include <net/if.h>
  32 #ifdef _KERNEL
  33 #include <sys/netstack.h>
  34 #endif
  35 
  36 #ifdef  __cplusplus
  37 extern "C" {
  38 #endif
  39 
  40 #define MAXPROPNAMELEN  64
  41 
  42 /*
  43  * The `mod_ioc_prop_s' datastructure is used as an IOCTL argument for
  44  * SIOCSETPROP and SIOCGETPROP ioctls. This datastructure identifies the


  72 #define MOD_PROP_APPEND         0x10    /* append to multi-valued property */
  73 #define MOD_PROP_REMOVE         0x20    /* remove from multi-valued property */
  74 
  75 /* mpr_proto values */
  76 #define MOD_PROTO_NONE          0x00
  77 #define MOD_PROTO_IPV4          0x01    /* property is applicable to IPV4 */
  78 #define MOD_PROTO_IPV6          0x02    /* property is applicable to IPV6 */
  79 #define MOD_PROTO_RAWIP         0x04    /* property is applicable to ICMP */
  80 #define MOD_PROTO_TCP           0x08    /* property is applicable to TCP */
  81 #define MOD_PROTO_UDP           0x10    /* property is applicable to UDP */
  82 #define MOD_PROTO_SCTP          0x20    /* property is applicable to SCTP */
  83 
  84 /* property is applicable to both IPV[4|6] */
  85 #define MOD_PROTO_IP            (MOD_PROTO_IPV4|MOD_PROTO_IPV6)
  86 
  87 #ifdef  _KERNEL
  88 
  89 typedef struct mod_prop_info_s mod_prop_info_t;
  90 
  91 /* set/get property callback functions */
  92 typedef int     mod_prop_setf_t(netstack_t *, cred_t *, mod_prop_info_t *,
  93                     const char *, const void *, uint_t);
  94 typedef int     mod_prop_getf_t(netstack_t *, mod_prop_info_t *, const char *,
  95                     void *, uint_t, uint_t);
  96 
  97 typedef struct mod_propval_uint32_s {
  98         uint32_t        mod_propval_umin;
  99         uint32_t        mod_propval_umax;
 100         uint32_t        mod_propval_ucur;
 101 } mod_propval_uint32_t;
 102 
 103 /*
 104  * protocol property information
 105  */
 106 struct mod_prop_info_s {
 107         char                    *mpi_name;      /* property name */
 108         uint_t                  mpi_proto;      /* property protocol */
 109         mod_prop_setf_t         *mpi_setf;      /* sets the property value */
 110         mod_prop_getf_t         *mpi_getf;      /* gets the property value */
 111         /*
 112          * Holds the current value of the property. Whenever applicable
 113          * holds the min/max value too.
 114          */
 115         union {


 133 #define prop_cur_uval   u.mpi_uval.mod_propval_ucur
 134 #define prop_cur_bval   u.mpi_bval
 135 #define prop_def_uval   u_def.mpi_def_uval
 136 #define prop_def_bval   u_def.mpi_def_bval
 137 
 138 #define MS              1L
 139 #define SECONDS         (1000 * MS)
 140 #define MINUTES         (60 * SECONDS)
 141 #define HOURS           (60 * MINUTES)
 142 #define DAYS            (24 * HOURS)
 143 
 144 #define MB              (1024 * 1024)
 145 
 146 /* Largest TCP/UDP/SCTP port number */
 147 #define ULP_MAX_PORT    (64 * 1024 - 1)
 148 
 149 /* extra privilege ports for upper layer protocols, tcp, sctp and udp */
 150 #define ULP_DEF_EPRIV_PORT1     2049
 151 #define ULP_DEF_EPRIV_PORT2     4045
 152 
 153 #define ULP_MAX_BUF     (1<<30) /* Largest possible send/receive buffer */
 154 
 155 /* generic function to set/get global module properties */
 156 extern mod_prop_setf_t  mod_set_boolean, mod_set_uint32,
 157                         mod_set_aligned, mod_set_extra_privports;
 158 
 159 extern mod_prop_getf_t  mod_get_boolean, mod_get_uint32,
 160                         mod_get_allprop, mod_get_extra_privports;
 161 
 162 extern int              mod_uint32_value(const void *, mod_prop_info_t *,
 163     uint_t, unsigned long *);
 164 extern mod_prop_info_t  *mod_prop_lookup(mod_prop_info_t[], const char *,
 165     uint_t);
 166 extern int              mod_set_buf_prop(mod_prop_info_t[], netstack_t *,
 167     cred_t *cr, mod_prop_info_t *, const char *, const void *, uint_t);
 168 extern int              mod_get_buf_prop(mod_prop_info_t[], netstack_t *,
 169     mod_prop_info_t *, const char *, void *, uint_t, uint_t);
 170 
 171 #endif  /* _KERNEL */
 172 
 173 /*
 174  * End-system model definitions that include the weak/strong end-system
 175  * definitions in RFC 1122, Section 3.3.4.5. IP_WEAK_ES and IP_STRONG_ES
 176  * conform to the corresponding  RFC 1122 definitions. The IP_SRC_PRI_ES
 177  * hostmodel is similar to IP_WEAK_ES with one additional enhancement: for
 178  * a packet with source S2, destination D2, the route selection algorithm
 179  * will first attempt to find a route for the destination that goes out
 180  * through an interface where S2 is configured and marked UP.  If such
 181  * a route cannot be found, then the best-matching route for D2 will be
 182  * selected, ignoring any mismatches between S2 and the interface addresses
 183  * on the outgoing interface implied by the route.
 184  */
 185 typedef enum {
 186         IP_WEAK_ES = 0,
 187         IP_SRC_PRI_ES,
 188         IP_STRONG_ES,
 189         IP_MAXVAL_ES