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
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
↓ 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 }
71 88
72 89 /*
73 90 * All of these are alterable, within the min/max values given, at run time.
74 91 *
75 92 * Note: All those tunables which do not start with "_" are Committed and
76 93 * therefore are public. See PSARC 2010/080.
77 94 */
78 95 mod_prop_info_t udp_propinfo_tbl[] = {
79 96 /* tunable - 0 */
80 97 { "_wroff_extra", MOD_PROTO_UDP,
81 98 mod_set_uint32, mod_get_uint32,
82 99 {0, 256, 32}, {32} },
83 100
84 101 { "_ipv4_ttl", MOD_PROTO_UDP,
85 102 mod_set_uint32, mod_get_uint32,
86 103 {1, 255, 255}, {255} },
87 104
88 105 { "_ipv6_hoplimit", MOD_PROTO_UDP,
89 106 mod_set_uint32, mod_get_uint32,
90 107 {0, IPV6_MAX_HOPS, IPV6_DEFAULT_HOPS}, {IPV6_DEFAULT_HOPS} },
91 108
92 109 { "smallest_nonpriv_port", MOD_PROTO_UDP,
93 110 mod_set_uint32, mod_get_uint32,
94 111 {1024, (32 * 1024), 1024}, {1024} },
95 112
96 113 { "_do_checksum", MOD_PROTO_UDP,
97 114 mod_set_boolean, mod_get_boolean,
↓ 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