aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/sysctl_net_ipv4.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/sysctl_net_ipv4.c')
-rw-r--r--net/ipv4/sysctl_net_ipv4.c190
1 files changed, 27 insertions, 163 deletions
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index 2dcf04d9b005..1cd5c15174b8 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -12,6 +12,7 @@
12#include <linux/inetdevice.h> 12#include <linux/inetdevice.h>
13#include <linux/seqlock.h> 13#include <linux/seqlock.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/slab.h>
15#include <net/snmp.h> 16#include <net/snmp.h>
16#include <net/icmp.h> 17#include <net/icmp.h>
17#include <net/ip.h> 18#include <net/ip.h>
@@ -63,34 +64,6 @@ static int ipv4_local_port_range(ctl_table *table, int write,
63 return ret; 64 return ret;
64} 65}
65 66
66/* Validate changes from sysctl interface. */
67static int ipv4_sysctl_local_port_range(ctl_table *table,
68 void __user *oldval,
69 size_t __user *oldlenp,
70 void __user *newval, size_t newlen)
71{
72 int ret;
73 int range[2];
74 ctl_table tmp = {
75 .data = &range,
76 .maxlen = sizeof(range),
77 .mode = table->mode,
78 .extra1 = &ip_local_port_range_min,
79 .extra2 = &ip_local_port_range_max,
80 };
81
82 inet_get_local_port_range(range, range + 1);
83 ret = sysctl_intvec(&tmp, oldval, oldlenp, newval, newlen);
84 if (ret == 0 && newval && newlen) {
85 if (range[1] < range[0])
86 ret = -EINVAL;
87 else
88 set_local_port_range(range);
89 }
90 return ret;
91}
92
93
94static int proc_tcp_congestion_control(ctl_table *ctl, int write, 67static int proc_tcp_congestion_control(ctl_table *ctl, int write,
95 void __user *buffer, size_t *lenp, loff_t *ppos) 68 void __user *buffer, size_t *lenp, loff_t *ppos)
96{ 69{
@@ -109,25 +82,6 @@ static int proc_tcp_congestion_control(ctl_table *ctl, int write,
109 return ret; 82 return ret;
110} 83}
111 84
112static int sysctl_tcp_congestion_control(ctl_table *table,
113 void __user *oldval,
114 size_t __user *oldlenp,
115 void __user *newval, size_t newlen)
116{
117 char val[TCP_CA_NAME_MAX];
118 ctl_table tbl = {
119 .data = val,
120 .maxlen = TCP_CA_NAME_MAX,
121 };
122 int ret;
123
124 tcp_get_default_congestion_control(val);
125 ret = sysctl_string(&tbl, oldval, oldlenp, newval, newlen);
126 if (ret == 1 && newval && newlen)
127 ret = tcp_set_default_congestion_control(val);
128 return ret;
129}
130
131static int proc_tcp_available_congestion_control(ctl_table *ctl, 85static int proc_tcp_available_congestion_control(ctl_table *ctl,
132 int write, 86 int write,
133 void __user *buffer, size_t *lenp, 87 void __user *buffer, size_t *lenp,
@@ -165,32 +119,8 @@ static int proc_allowed_congestion_control(ctl_table *ctl,
165 return ret; 119 return ret;
166} 120}
167 121
168static int strategy_allowed_congestion_control(ctl_table *table,
169 void __user *oldval,
170 size_t __user *oldlenp,
171 void __user *newval,
172 size_t newlen)
173{
174 ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX };
175 int ret;
176
177 tbl.data = kmalloc(tbl.maxlen, GFP_USER);
178 if (!tbl.data)
179 return -ENOMEM;
180
181 tcp_get_available_congestion_control(tbl.data, tbl.maxlen);
182 ret = sysctl_string(&tbl, oldval, oldlenp, newval, newlen);
183 if (ret == 1 && newval && newlen)
184 ret = tcp_set_allowed_congestion_control(tbl.data);
185 kfree(tbl.data);
186
187 return ret;
188
189}
190
191static struct ctl_table ipv4_table[] = { 122static struct ctl_table ipv4_table[] = {
192 { 123 {
193 .ctl_name = NET_IPV4_TCP_TIMESTAMPS,
194 .procname = "tcp_timestamps", 124 .procname = "tcp_timestamps",
195 .data = &sysctl_tcp_timestamps, 125 .data = &sysctl_tcp_timestamps,
196 .maxlen = sizeof(int), 126 .maxlen = sizeof(int),
@@ -198,7 +128,6 @@ static struct ctl_table ipv4_table[] = {
198 .proc_handler = proc_dointvec 128 .proc_handler = proc_dointvec
199 }, 129 },
200 { 130 {
201 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING,
202 .procname = "tcp_window_scaling", 131 .procname = "tcp_window_scaling",
203 .data = &sysctl_tcp_window_scaling, 132 .data = &sysctl_tcp_window_scaling,
204 .maxlen = sizeof(int), 133 .maxlen = sizeof(int),
@@ -206,7 +135,6 @@ static struct ctl_table ipv4_table[] = {
206 .proc_handler = proc_dointvec 135 .proc_handler = proc_dointvec
207 }, 136 },
208 { 137 {
209 .ctl_name = NET_IPV4_TCP_SACK,
210 .procname = "tcp_sack", 138 .procname = "tcp_sack",
211 .data = &sysctl_tcp_sack, 139 .data = &sysctl_tcp_sack,
212 .maxlen = sizeof(int), 140 .maxlen = sizeof(int),
@@ -214,7 +142,6 @@ static struct ctl_table ipv4_table[] = {
214 .proc_handler = proc_dointvec 142 .proc_handler = proc_dointvec
215 }, 143 },
216 { 144 {
217 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE,
218 .procname = "tcp_retrans_collapse", 145 .procname = "tcp_retrans_collapse",
219 .data = &sysctl_tcp_retrans_collapse, 146 .data = &sysctl_tcp_retrans_collapse,
220 .maxlen = sizeof(int), 147 .maxlen = sizeof(int),
@@ -222,17 +149,14 @@ static struct ctl_table ipv4_table[] = {
222 .proc_handler = proc_dointvec 149 .proc_handler = proc_dointvec
223 }, 150 },
224 { 151 {
225 .ctl_name = NET_IPV4_DEFAULT_TTL,
226 .procname = "ip_default_ttl", 152 .procname = "ip_default_ttl",
227 .data = &sysctl_ip_default_ttl, 153 .data = &sysctl_ip_default_ttl,
228 .maxlen = sizeof(int), 154 .maxlen = sizeof(int),
229 .mode = 0644, 155 .mode = 0644,
230 .proc_handler = ipv4_doint_and_flush, 156 .proc_handler = ipv4_doint_and_flush,
231 .strategy = ipv4_doint_and_flush_strategy,
232 .extra2 = &init_net, 157 .extra2 = &init_net,
233 }, 158 },
234 { 159 {
235 .ctl_name = NET_IPV4_NO_PMTU_DISC,
236 .procname = "ip_no_pmtu_disc", 160 .procname = "ip_no_pmtu_disc",
237 .data = &ipv4_config.no_pmtu_disc, 161 .data = &ipv4_config.no_pmtu_disc,
238 .maxlen = sizeof(int), 162 .maxlen = sizeof(int),
@@ -240,7 +164,6 @@ static struct ctl_table ipv4_table[] = {
240 .proc_handler = proc_dointvec 164 .proc_handler = proc_dointvec
241 }, 165 },
242 { 166 {
243 .ctl_name = NET_IPV4_NONLOCAL_BIND,
244 .procname = "ip_nonlocal_bind", 167 .procname = "ip_nonlocal_bind",
245 .data = &sysctl_ip_nonlocal_bind, 168 .data = &sysctl_ip_nonlocal_bind,
246 .maxlen = sizeof(int), 169 .maxlen = sizeof(int),
@@ -248,7 +171,6 @@ static struct ctl_table ipv4_table[] = {
248 .proc_handler = proc_dointvec 171 .proc_handler = proc_dointvec
249 }, 172 },
250 { 173 {
251 .ctl_name = NET_IPV4_TCP_SYN_RETRIES,
252 .procname = "tcp_syn_retries", 174 .procname = "tcp_syn_retries",
253 .data = &sysctl_tcp_syn_retries, 175 .data = &sysctl_tcp_syn_retries,
254 .maxlen = sizeof(int), 176 .maxlen = sizeof(int),
@@ -256,7 +178,6 @@ static struct ctl_table ipv4_table[] = {
256 .proc_handler = proc_dointvec 178 .proc_handler = proc_dointvec
257 }, 179 },
258 { 180 {
259 .ctl_name = NET_TCP_SYNACK_RETRIES,
260 .procname = "tcp_synack_retries", 181 .procname = "tcp_synack_retries",
261 .data = &sysctl_tcp_synack_retries, 182 .data = &sysctl_tcp_synack_retries,
262 .maxlen = sizeof(int), 183 .maxlen = sizeof(int),
@@ -264,7 +185,6 @@ static struct ctl_table ipv4_table[] = {
264 .proc_handler = proc_dointvec 185 .proc_handler = proc_dointvec
265 }, 186 },
266 { 187 {
267 .ctl_name = NET_TCP_MAX_ORPHANS,
268 .procname = "tcp_max_orphans", 188 .procname = "tcp_max_orphans",
269 .data = &sysctl_tcp_max_orphans, 189 .data = &sysctl_tcp_max_orphans,
270 .maxlen = sizeof(int), 190 .maxlen = sizeof(int),
@@ -272,7 +192,6 @@ static struct ctl_table ipv4_table[] = {
272 .proc_handler = proc_dointvec 192 .proc_handler = proc_dointvec
273 }, 193 },
274 { 194 {
275 .ctl_name = NET_TCP_MAX_TW_BUCKETS,
276 .procname = "tcp_max_tw_buckets", 195 .procname = "tcp_max_tw_buckets",
277 .data = &tcp_death_row.sysctl_max_tw_buckets, 196 .data = &tcp_death_row.sysctl_max_tw_buckets,
278 .maxlen = sizeof(int), 197 .maxlen = sizeof(int),
@@ -280,7 +199,6 @@ static struct ctl_table ipv4_table[] = {
280 .proc_handler = proc_dointvec 199 .proc_handler = proc_dointvec
281 }, 200 },
282 { 201 {
283 .ctl_name = NET_IPV4_DYNADDR,
284 .procname = "ip_dynaddr", 202 .procname = "ip_dynaddr",
285 .data = &sysctl_ip_dynaddr, 203 .data = &sysctl_ip_dynaddr,
286 .maxlen = sizeof(int), 204 .maxlen = sizeof(int),
@@ -288,16 +206,13 @@ static struct ctl_table ipv4_table[] = {
288 .proc_handler = proc_dointvec 206 .proc_handler = proc_dointvec
289 }, 207 },
290 { 208 {
291 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME,
292 .procname = "tcp_keepalive_time", 209 .procname = "tcp_keepalive_time",
293 .data = &sysctl_tcp_keepalive_time, 210 .data = &sysctl_tcp_keepalive_time,
294 .maxlen = sizeof(int), 211 .maxlen = sizeof(int),
295 .mode = 0644, 212 .mode = 0644,
296 .proc_handler = proc_dointvec_jiffies, 213 .proc_handler = proc_dointvec_jiffies,
297 .strategy = sysctl_jiffies
298 }, 214 },
299 { 215 {
300 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES,
301 .procname = "tcp_keepalive_probes", 216 .procname = "tcp_keepalive_probes",
302 .data = &sysctl_tcp_keepalive_probes, 217 .data = &sysctl_tcp_keepalive_probes,
303 .maxlen = sizeof(int), 218 .maxlen = sizeof(int),
@@ -305,26 +220,21 @@ static struct ctl_table ipv4_table[] = {
305 .proc_handler = proc_dointvec 220 .proc_handler = proc_dointvec
306 }, 221 },
307 { 222 {
308 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL,
309 .procname = "tcp_keepalive_intvl", 223 .procname = "tcp_keepalive_intvl",
310 .data = &sysctl_tcp_keepalive_intvl, 224 .data = &sysctl_tcp_keepalive_intvl,
311 .maxlen = sizeof(int), 225 .maxlen = sizeof(int),
312 .mode = 0644, 226 .mode = 0644,
313 .proc_handler = proc_dointvec_jiffies, 227 .proc_handler = proc_dointvec_jiffies,
314 .strategy = sysctl_jiffies
315 }, 228 },
316 { 229 {
317 .ctl_name = NET_IPV4_TCP_RETRIES1,
318 .procname = "tcp_retries1", 230 .procname = "tcp_retries1",
319 .data = &sysctl_tcp_retries1, 231 .data = &sysctl_tcp_retries1,
320 .maxlen = sizeof(int), 232 .maxlen = sizeof(int),
321 .mode = 0644, 233 .mode = 0644,
322 .proc_handler = proc_dointvec_minmax, 234 .proc_handler = proc_dointvec_minmax,
323 .strategy = sysctl_intvec,
324 .extra2 = &tcp_retr1_max 235 .extra2 = &tcp_retr1_max
325 }, 236 },
326 { 237 {
327 .ctl_name = NET_IPV4_TCP_RETRIES2,
328 .procname = "tcp_retries2", 238 .procname = "tcp_retries2",
329 .data = &sysctl_tcp_retries2, 239 .data = &sysctl_tcp_retries2,
330 .maxlen = sizeof(int), 240 .maxlen = sizeof(int),
@@ -332,17 +242,14 @@ static struct ctl_table ipv4_table[] = {
332 .proc_handler = proc_dointvec 242 .proc_handler = proc_dointvec
333 }, 243 },
334 { 244 {
335 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT,
336 .procname = "tcp_fin_timeout", 245 .procname = "tcp_fin_timeout",
337 .data = &sysctl_tcp_fin_timeout, 246 .data = &sysctl_tcp_fin_timeout,
338 .maxlen = sizeof(int), 247 .maxlen = sizeof(int),
339 .mode = 0644, 248 .mode = 0644,
340 .proc_handler = proc_dointvec_jiffies, 249 .proc_handler = proc_dointvec_jiffies,
341 .strategy = sysctl_jiffies
342 }, 250 },
343#ifdef CONFIG_SYN_COOKIES 251#ifdef CONFIG_SYN_COOKIES
344 { 252 {
345 .ctl_name = NET_TCP_SYNCOOKIES,
346 .procname = "tcp_syncookies", 253 .procname = "tcp_syncookies",
347 .data = &sysctl_tcp_syncookies, 254 .data = &sysctl_tcp_syncookies,
348 .maxlen = sizeof(int), 255 .maxlen = sizeof(int),
@@ -351,7 +258,6 @@ static struct ctl_table ipv4_table[] = {
351 }, 258 },
352#endif 259#endif
353 { 260 {
354 .ctl_name = NET_TCP_TW_RECYCLE,
355 .procname = "tcp_tw_recycle", 261 .procname = "tcp_tw_recycle",
356 .data = &tcp_death_row.sysctl_tw_recycle, 262 .data = &tcp_death_row.sysctl_tw_recycle,
357 .maxlen = sizeof(int), 263 .maxlen = sizeof(int),
@@ -359,7 +265,6 @@ static struct ctl_table ipv4_table[] = {
359 .proc_handler = proc_dointvec 265 .proc_handler = proc_dointvec
360 }, 266 },
361 { 267 {
362 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW,
363 .procname = "tcp_abort_on_overflow", 268 .procname = "tcp_abort_on_overflow",
364 .data = &sysctl_tcp_abort_on_overflow, 269 .data = &sysctl_tcp_abort_on_overflow,
365 .maxlen = sizeof(int), 270 .maxlen = sizeof(int),
@@ -367,7 +272,6 @@ static struct ctl_table ipv4_table[] = {
367 .proc_handler = proc_dointvec 272 .proc_handler = proc_dointvec
368 }, 273 },
369 { 274 {
370 .ctl_name = NET_TCP_STDURG,
371 .procname = "tcp_stdurg", 275 .procname = "tcp_stdurg",
372 .data = &sysctl_tcp_stdurg, 276 .data = &sysctl_tcp_stdurg,
373 .maxlen = sizeof(int), 277 .maxlen = sizeof(int),
@@ -375,7 +279,6 @@ static struct ctl_table ipv4_table[] = {
375 .proc_handler = proc_dointvec 279 .proc_handler = proc_dointvec
376 }, 280 },
377 { 281 {
378 .ctl_name = NET_TCP_RFC1337,
379 .procname = "tcp_rfc1337", 282 .procname = "tcp_rfc1337",
380 .data = &sysctl_tcp_rfc1337, 283 .data = &sysctl_tcp_rfc1337,
381 .maxlen = sizeof(int), 284 .maxlen = sizeof(int),
@@ -383,7 +286,6 @@ static struct ctl_table ipv4_table[] = {
383 .proc_handler = proc_dointvec 286 .proc_handler = proc_dointvec
384 }, 287 },
385 { 288 {
386 .ctl_name = NET_TCP_MAX_SYN_BACKLOG,
387 .procname = "tcp_max_syn_backlog", 289 .procname = "tcp_max_syn_backlog",
388 .data = &sysctl_max_syn_backlog, 290 .data = &sysctl_max_syn_backlog,
389 .maxlen = sizeof(int), 291 .maxlen = sizeof(int),
@@ -391,17 +293,14 @@ static struct ctl_table ipv4_table[] = {
391 .proc_handler = proc_dointvec 293 .proc_handler = proc_dointvec
392 }, 294 },
393 { 295 {
394 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE,
395 .procname = "ip_local_port_range", 296 .procname = "ip_local_port_range",
396 .data = &sysctl_local_ports.range, 297 .data = &sysctl_local_ports.range,
397 .maxlen = sizeof(sysctl_local_ports.range), 298 .maxlen = sizeof(sysctl_local_ports.range),
398 .mode = 0644, 299 .mode = 0644,
399 .proc_handler = ipv4_local_port_range, 300 .proc_handler = ipv4_local_port_range,
400 .strategy = ipv4_sysctl_local_port_range,
401 }, 301 },
402#ifdef CONFIG_IP_MULTICAST 302#ifdef CONFIG_IP_MULTICAST
403 { 303 {
404 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
405 .procname = "igmp_max_memberships", 304 .procname = "igmp_max_memberships",
406 .data = &sysctl_igmp_max_memberships, 305 .data = &sysctl_igmp_max_memberships,
407 .maxlen = sizeof(int), 306 .maxlen = sizeof(int),
@@ -411,7 +310,6 @@ static struct ctl_table ipv4_table[] = {
411 310
412#endif 311#endif
413 { 312 {
414 .ctl_name = NET_IPV4_IGMP_MAX_MSF,
415 .procname = "igmp_max_msf", 313 .procname = "igmp_max_msf",
416 .data = &sysctl_igmp_max_msf, 314 .data = &sysctl_igmp_max_msf,
417 .maxlen = sizeof(int), 315 .maxlen = sizeof(int),
@@ -419,7 +317,6 @@ static struct ctl_table ipv4_table[] = {
419 .proc_handler = proc_dointvec 317 .proc_handler = proc_dointvec
420 }, 318 },
421 { 319 {
422 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD,
423 .procname = "inet_peer_threshold", 320 .procname = "inet_peer_threshold",
424 .data = &inet_peer_threshold, 321 .data = &inet_peer_threshold,
425 .maxlen = sizeof(int), 322 .maxlen = sizeof(int),
@@ -427,43 +324,34 @@ static struct ctl_table ipv4_table[] = {
427 .proc_handler = proc_dointvec 324 .proc_handler = proc_dointvec
428 }, 325 },
429 { 326 {
430 .ctl_name = NET_IPV4_INET_PEER_MINTTL,
431 .procname = "inet_peer_minttl", 327 .procname = "inet_peer_minttl",
432 .data = &inet_peer_minttl, 328 .data = &inet_peer_minttl,
433 .maxlen = sizeof(int), 329 .maxlen = sizeof(int),
434 .mode = 0644, 330 .mode = 0644,
435 .proc_handler = proc_dointvec_jiffies, 331 .proc_handler = proc_dointvec_jiffies,
436 .strategy = sysctl_jiffies
437 }, 332 },
438 { 333 {
439 .ctl_name = NET_IPV4_INET_PEER_MAXTTL,
440 .procname = "inet_peer_maxttl", 334 .procname = "inet_peer_maxttl",
441 .data = &inet_peer_maxttl, 335 .data = &inet_peer_maxttl,
442 .maxlen = sizeof(int), 336 .maxlen = sizeof(int),
443 .mode = 0644, 337 .mode = 0644,
444 .proc_handler = proc_dointvec_jiffies, 338 .proc_handler = proc_dointvec_jiffies,
445 .strategy = sysctl_jiffies
446 }, 339 },
447 { 340 {
448 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME,
449 .procname = "inet_peer_gc_mintime", 341 .procname = "inet_peer_gc_mintime",
450 .data = &inet_peer_gc_mintime, 342 .data = &inet_peer_gc_mintime,
451 .maxlen = sizeof(int), 343 .maxlen = sizeof(int),
452 .mode = 0644, 344 .mode = 0644,
453 .proc_handler = proc_dointvec_jiffies, 345 .proc_handler = proc_dointvec_jiffies,
454 .strategy = sysctl_jiffies
455 }, 346 },
456 { 347 {
457 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME,
458 .procname = "inet_peer_gc_maxtime", 348 .procname = "inet_peer_gc_maxtime",
459 .data = &inet_peer_gc_maxtime, 349 .data = &inet_peer_gc_maxtime,
460 .maxlen = sizeof(int), 350 .maxlen = sizeof(int),
461 .mode = 0644, 351 .mode = 0644,
462 .proc_handler = proc_dointvec_jiffies, 352 .proc_handler = proc_dointvec_jiffies,
463 .strategy = sysctl_jiffies
464 }, 353 },
465 { 354 {
466 .ctl_name = NET_TCP_ORPHAN_RETRIES,
467 .procname = "tcp_orphan_retries", 355 .procname = "tcp_orphan_retries",
468 .data = &sysctl_tcp_orphan_retries, 356 .data = &sysctl_tcp_orphan_retries,
469 .maxlen = sizeof(int), 357 .maxlen = sizeof(int),
@@ -471,7 +359,6 @@ static struct ctl_table ipv4_table[] = {
471 .proc_handler = proc_dointvec 359 .proc_handler = proc_dointvec
472 }, 360 },
473 { 361 {
474 .ctl_name = NET_TCP_FACK,
475 .procname = "tcp_fack", 362 .procname = "tcp_fack",
476 .data = &sysctl_tcp_fack, 363 .data = &sysctl_tcp_fack,
477 .maxlen = sizeof(int), 364 .maxlen = sizeof(int),
@@ -479,7 +366,6 @@ static struct ctl_table ipv4_table[] = {
479 .proc_handler = proc_dointvec 366 .proc_handler = proc_dointvec
480 }, 367 },
481 { 368 {
482 .ctl_name = NET_TCP_REORDERING,
483 .procname = "tcp_reordering", 369 .procname = "tcp_reordering",
484 .data = &sysctl_tcp_reordering, 370 .data = &sysctl_tcp_reordering,
485 .maxlen = sizeof(int), 371 .maxlen = sizeof(int),
@@ -487,7 +373,6 @@ static struct ctl_table ipv4_table[] = {
487 .proc_handler = proc_dointvec 373 .proc_handler = proc_dointvec
488 }, 374 },
489 { 375 {
490 .ctl_name = NET_TCP_ECN,
491 .procname = "tcp_ecn", 376 .procname = "tcp_ecn",
492 .data = &sysctl_tcp_ecn, 377 .data = &sysctl_tcp_ecn,
493 .maxlen = sizeof(int), 378 .maxlen = sizeof(int),
@@ -495,7 +380,6 @@ static struct ctl_table ipv4_table[] = {
495 .proc_handler = proc_dointvec 380 .proc_handler = proc_dointvec
496 }, 381 },
497 { 382 {
498 .ctl_name = NET_TCP_DSACK,
499 .procname = "tcp_dsack", 383 .procname = "tcp_dsack",
500 .data = &sysctl_tcp_dsack, 384 .data = &sysctl_tcp_dsack,
501 .maxlen = sizeof(int), 385 .maxlen = sizeof(int),
@@ -503,7 +387,6 @@ static struct ctl_table ipv4_table[] = {
503 .proc_handler = proc_dointvec 387 .proc_handler = proc_dointvec
504 }, 388 },
505 { 389 {
506 .ctl_name = NET_TCP_MEM,
507 .procname = "tcp_mem", 390 .procname = "tcp_mem",
508 .data = &sysctl_tcp_mem, 391 .data = &sysctl_tcp_mem,
509 .maxlen = sizeof(sysctl_tcp_mem), 392 .maxlen = sizeof(sysctl_tcp_mem),
@@ -511,7 +394,6 @@ static struct ctl_table ipv4_table[] = {
511 .proc_handler = proc_dointvec 394 .proc_handler = proc_dointvec
512 }, 395 },
513 { 396 {
514 .ctl_name = NET_TCP_WMEM,
515 .procname = "tcp_wmem", 397 .procname = "tcp_wmem",
516 .data = &sysctl_tcp_wmem, 398 .data = &sysctl_tcp_wmem,
517 .maxlen = sizeof(sysctl_tcp_wmem), 399 .maxlen = sizeof(sysctl_tcp_wmem),
@@ -519,7 +401,6 @@ static struct ctl_table ipv4_table[] = {
519 .proc_handler = proc_dointvec 401 .proc_handler = proc_dointvec
520 }, 402 },
521 { 403 {
522 .ctl_name = NET_TCP_RMEM,
523 .procname = "tcp_rmem", 404 .procname = "tcp_rmem",
524 .data = &sysctl_tcp_rmem, 405 .data = &sysctl_tcp_rmem,
525 .maxlen = sizeof(sysctl_tcp_rmem), 406 .maxlen = sizeof(sysctl_tcp_rmem),
@@ -527,7 +408,6 @@ static struct ctl_table ipv4_table[] = {
527 .proc_handler = proc_dointvec 408 .proc_handler = proc_dointvec
528 }, 409 },
529 { 410 {
530 .ctl_name = NET_TCP_APP_WIN,
531 .procname = "tcp_app_win", 411 .procname = "tcp_app_win",
532 .data = &sysctl_tcp_app_win, 412 .data = &sysctl_tcp_app_win,
533 .maxlen = sizeof(int), 413 .maxlen = sizeof(int),
@@ -535,7 +415,6 @@ static struct ctl_table ipv4_table[] = {
535 .proc_handler = proc_dointvec 415 .proc_handler = proc_dointvec
536 }, 416 },
537 { 417 {
538 .ctl_name = NET_TCP_ADV_WIN_SCALE,
539 .procname = "tcp_adv_win_scale", 418 .procname = "tcp_adv_win_scale",
540 .data = &sysctl_tcp_adv_win_scale, 419 .data = &sysctl_tcp_adv_win_scale,
541 .maxlen = sizeof(int), 420 .maxlen = sizeof(int),
@@ -543,7 +422,6 @@ static struct ctl_table ipv4_table[] = {
543 .proc_handler = proc_dointvec 422 .proc_handler = proc_dointvec
544 }, 423 },
545 { 424 {
546 .ctl_name = NET_TCP_TW_REUSE,
547 .procname = "tcp_tw_reuse", 425 .procname = "tcp_tw_reuse",
548 .data = &sysctl_tcp_tw_reuse, 426 .data = &sysctl_tcp_tw_reuse,
549 .maxlen = sizeof(int), 427 .maxlen = sizeof(int),
@@ -551,7 +429,6 @@ static struct ctl_table ipv4_table[] = {
551 .proc_handler = proc_dointvec 429 .proc_handler = proc_dointvec
552 }, 430 },
553 { 431 {
554 .ctl_name = NET_TCP_FRTO,
555 .procname = "tcp_frto", 432 .procname = "tcp_frto",
556 .data = &sysctl_tcp_frto, 433 .data = &sysctl_tcp_frto,
557 .maxlen = sizeof(int), 434 .maxlen = sizeof(int),
@@ -559,7 +436,6 @@ static struct ctl_table ipv4_table[] = {
559 .proc_handler = proc_dointvec 436 .proc_handler = proc_dointvec
560 }, 437 },
561 { 438 {
562 .ctl_name = NET_TCP_FRTO_RESPONSE,
563 .procname = "tcp_frto_response", 439 .procname = "tcp_frto_response",
564 .data = &sysctl_tcp_frto_response, 440 .data = &sysctl_tcp_frto_response,
565 .maxlen = sizeof(int), 441 .maxlen = sizeof(int),
@@ -567,7 +443,6 @@ static struct ctl_table ipv4_table[] = {
567 .proc_handler = proc_dointvec 443 .proc_handler = proc_dointvec
568 }, 444 },
569 { 445 {
570 .ctl_name = NET_TCP_LOW_LATENCY,
571 .procname = "tcp_low_latency", 446 .procname = "tcp_low_latency",
572 .data = &sysctl_tcp_low_latency, 447 .data = &sysctl_tcp_low_latency,
573 .maxlen = sizeof(int), 448 .maxlen = sizeof(int),
@@ -575,7 +450,6 @@ static struct ctl_table ipv4_table[] = {
575 .proc_handler = proc_dointvec 450 .proc_handler = proc_dointvec
576 }, 451 },
577 { 452 {
578 .ctl_name = NET_TCP_NO_METRICS_SAVE,
579 .procname = "tcp_no_metrics_save", 453 .procname = "tcp_no_metrics_save",
580 .data = &sysctl_tcp_nometrics_save, 454 .data = &sysctl_tcp_nometrics_save,
581 .maxlen = sizeof(int), 455 .maxlen = sizeof(int),
@@ -583,7 +457,6 @@ static struct ctl_table ipv4_table[] = {
583 .proc_handler = proc_dointvec, 457 .proc_handler = proc_dointvec,
584 }, 458 },
585 { 459 {
586 .ctl_name = NET_TCP_MODERATE_RCVBUF,
587 .procname = "tcp_moderate_rcvbuf", 460 .procname = "tcp_moderate_rcvbuf",
588 .data = &sysctl_tcp_moderate_rcvbuf, 461 .data = &sysctl_tcp_moderate_rcvbuf,
589 .maxlen = sizeof(int), 462 .maxlen = sizeof(int),
@@ -591,7 +464,6 @@ static struct ctl_table ipv4_table[] = {
591 .proc_handler = proc_dointvec, 464 .proc_handler = proc_dointvec,
592 }, 465 },
593 { 466 {
594 .ctl_name = NET_TCP_TSO_WIN_DIVISOR,
595 .procname = "tcp_tso_win_divisor", 467 .procname = "tcp_tso_win_divisor",
596 .data = &sysctl_tcp_tso_win_divisor, 468 .data = &sysctl_tcp_tso_win_divisor,
597 .maxlen = sizeof(int), 469 .maxlen = sizeof(int),
@@ -599,15 +471,12 @@ static struct ctl_table ipv4_table[] = {
599 .proc_handler = proc_dointvec, 471 .proc_handler = proc_dointvec,
600 }, 472 },
601 { 473 {
602 .ctl_name = NET_TCP_CONG_CONTROL,
603 .procname = "tcp_congestion_control", 474 .procname = "tcp_congestion_control",
604 .mode = 0644, 475 .mode = 0644,
605 .maxlen = TCP_CA_NAME_MAX, 476 .maxlen = TCP_CA_NAME_MAX,
606 .proc_handler = proc_tcp_congestion_control, 477 .proc_handler = proc_tcp_congestion_control,
607 .strategy = sysctl_tcp_congestion_control,
608 }, 478 },
609 { 479 {
610 .ctl_name = NET_TCP_ABC,
611 .procname = "tcp_abc", 480 .procname = "tcp_abc",
612 .data = &sysctl_tcp_abc, 481 .data = &sysctl_tcp_abc,
613 .maxlen = sizeof(int), 482 .maxlen = sizeof(int),
@@ -615,7 +484,6 @@ static struct ctl_table ipv4_table[] = {
615 .proc_handler = proc_dointvec, 484 .proc_handler = proc_dointvec,
616 }, 485 },
617 { 486 {
618 .ctl_name = NET_TCP_MTU_PROBING,
619 .procname = "tcp_mtu_probing", 487 .procname = "tcp_mtu_probing",
620 .data = &sysctl_tcp_mtu_probing, 488 .data = &sysctl_tcp_mtu_probing,
621 .maxlen = sizeof(int), 489 .maxlen = sizeof(int),
@@ -623,7 +491,6 @@ static struct ctl_table ipv4_table[] = {
623 .proc_handler = proc_dointvec, 491 .proc_handler = proc_dointvec,
624 }, 492 },
625 { 493 {
626 .ctl_name = NET_TCP_BASE_MSS,
627 .procname = "tcp_base_mss", 494 .procname = "tcp_base_mss",
628 .data = &sysctl_tcp_base_mss, 495 .data = &sysctl_tcp_base_mss,
629 .maxlen = sizeof(int), 496 .maxlen = sizeof(int),
@@ -631,7 +498,6 @@ static struct ctl_table ipv4_table[] = {
631 .proc_handler = proc_dointvec, 498 .proc_handler = proc_dointvec,
632 }, 499 },
633 { 500 {
634 .ctl_name = NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,
635 .procname = "tcp_workaround_signed_windows", 501 .procname = "tcp_workaround_signed_windows",
636 .data = &sysctl_tcp_workaround_signed_windows, 502 .data = &sysctl_tcp_workaround_signed_windows,
637 .maxlen = sizeof(int), 503 .maxlen = sizeof(int),
@@ -640,7 +506,6 @@ static struct ctl_table ipv4_table[] = {
640 }, 506 },
641#ifdef CONFIG_NET_DMA 507#ifdef CONFIG_NET_DMA
642 { 508 {
643 .ctl_name = NET_TCP_DMA_COPYBREAK,
644 .procname = "tcp_dma_copybreak", 509 .procname = "tcp_dma_copybreak",
645 .data = &sysctl_tcp_dma_copybreak, 510 .data = &sysctl_tcp_dma_copybreak,
646 .maxlen = sizeof(int), 511 .maxlen = sizeof(int),
@@ -649,7 +514,6 @@ static struct ctl_table ipv4_table[] = {
649 }, 514 },
650#endif 515#endif
651 { 516 {
652 .ctl_name = NET_TCP_SLOW_START_AFTER_IDLE,
653 .procname = "tcp_slow_start_after_idle", 517 .procname = "tcp_slow_start_after_idle",
654 .data = &sysctl_tcp_slow_start_after_idle, 518 .data = &sysctl_tcp_slow_start_after_idle,
655 .maxlen = sizeof(int), 519 .maxlen = sizeof(int),
@@ -658,7 +522,6 @@ static struct ctl_table ipv4_table[] = {
658 }, 522 },
659#ifdef CONFIG_NETLABEL 523#ifdef CONFIG_NETLABEL
660 { 524 {
661 .ctl_name = NET_CIPSOV4_CACHE_ENABLE,
662 .procname = "cipso_cache_enable", 525 .procname = "cipso_cache_enable",
663 .data = &cipso_v4_cache_enabled, 526 .data = &cipso_v4_cache_enabled,
664 .maxlen = sizeof(int), 527 .maxlen = sizeof(int),
@@ -666,7 +529,6 @@ static struct ctl_table ipv4_table[] = {
666 .proc_handler = proc_dointvec, 529 .proc_handler = proc_dointvec,
667 }, 530 },
668 { 531 {
669 .ctl_name = NET_CIPSOV4_CACHE_BUCKET_SIZE,
670 .procname = "cipso_cache_bucket_size", 532 .procname = "cipso_cache_bucket_size",
671 .data = &cipso_v4_cache_bucketsize, 533 .data = &cipso_v4_cache_bucketsize,
672 .maxlen = sizeof(int), 534 .maxlen = sizeof(int),
@@ -674,7 +536,6 @@ static struct ctl_table ipv4_table[] = {
674 .proc_handler = proc_dointvec, 536 .proc_handler = proc_dointvec,
675 }, 537 },
676 { 538 {
677 .ctl_name = NET_CIPSOV4_RBM_OPTFMT,
678 .procname = "cipso_rbm_optfmt", 539 .procname = "cipso_rbm_optfmt",
679 .data = &cipso_v4_rbm_optfmt, 540 .data = &cipso_v4_rbm_optfmt,
680 .maxlen = sizeof(int), 541 .maxlen = sizeof(int),
@@ -682,7 +543,6 @@ static struct ctl_table ipv4_table[] = {
682 .proc_handler = proc_dointvec, 543 .proc_handler = proc_dointvec,
683 }, 544 },
684 { 545 {
685 .ctl_name = NET_CIPSOV4_RBM_STRICTVALID,
686 .procname = "cipso_rbm_strictvalid", 546 .procname = "cipso_rbm_strictvalid",
687 .data = &cipso_v4_rbm_strictvalid, 547 .data = &cipso_v4_rbm_strictvalid,
688 .maxlen = sizeof(int), 548 .maxlen = sizeof(int),
@@ -697,15 +557,12 @@ static struct ctl_table ipv4_table[] = {
697 .proc_handler = proc_tcp_available_congestion_control, 557 .proc_handler = proc_tcp_available_congestion_control,
698 }, 558 },
699 { 559 {
700 .ctl_name = NET_TCP_ALLOWED_CONG_CONTROL,
701 .procname = "tcp_allowed_congestion_control", 560 .procname = "tcp_allowed_congestion_control",
702 .maxlen = TCP_CA_BUF_MAX, 561 .maxlen = TCP_CA_BUF_MAX,
703 .mode = 0644, 562 .mode = 0644,
704 .proc_handler = proc_allowed_congestion_control, 563 .proc_handler = proc_allowed_congestion_control,
705 .strategy = strategy_allowed_congestion_control,
706 }, 564 },
707 { 565 {
708 .ctl_name = NET_TCP_MAX_SSTHRESH,
709 .procname = "tcp_max_ssthresh", 566 .procname = "tcp_max_ssthresh",
710 .data = &sysctl_tcp_max_ssthresh, 567 .data = &sysctl_tcp_max_ssthresh,
711 .maxlen = sizeof(int), 568 .maxlen = sizeof(int),
@@ -713,41 +570,55 @@ static struct ctl_table ipv4_table[] = {
713 .proc_handler = proc_dointvec, 570 .proc_handler = proc_dointvec,
714 }, 571 },
715 { 572 {
716 .ctl_name = CTL_UNNUMBERED, 573 .procname = "tcp_cookie_size",
574 .data = &sysctl_tcp_cookie_size,
575 .maxlen = sizeof(int),
576 .mode = 0644,
577 .proc_handler = proc_dointvec
578 },
579 {
580 .procname = "tcp_thin_linear_timeouts",
581 .data = &sysctl_tcp_thin_linear_timeouts,
582 .maxlen = sizeof(int),
583 .mode = 0644,
584 .proc_handler = proc_dointvec
585 },
586 {
587 .procname = "tcp_thin_dupack",
588 .data = &sysctl_tcp_thin_dupack,
589 .maxlen = sizeof(int),
590 .mode = 0644,
591 .proc_handler = proc_dointvec
592 },
593 {
717 .procname = "udp_mem", 594 .procname = "udp_mem",
718 .data = &sysctl_udp_mem, 595 .data = &sysctl_udp_mem,
719 .maxlen = sizeof(sysctl_udp_mem), 596 .maxlen = sizeof(sysctl_udp_mem),
720 .mode = 0644, 597 .mode = 0644,
721 .proc_handler = proc_dointvec_minmax, 598 .proc_handler = proc_dointvec_minmax,
722 .strategy = sysctl_intvec,
723 .extra1 = &zero 599 .extra1 = &zero
724 }, 600 },
725 { 601 {
726 .ctl_name = CTL_UNNUMBERED,
727 .procname = "udp_rmem_min", 602 .procname = "udp_rmem_min",
728 .data = &sysctl_udp_rmem_min, 603 .data = &sysctl_udp_rmem_min,
729 .maxlen = sizeof(sysctl_udp_rmem_min), 604 .maxlen = sizeof(sysctl_udp_rmem_min),
730 .mode = 0644, 605 .mode = 0644,
731 .proc_handler = proc_dointvec_minmax, 606 .proc_handler = proc_dointvec_minmax,
732 .strategy = sysctl_intvec,
733 .extra1 = &zero 607 .extra1 = &zero
734 }, 608 },
735 { 609 {
736 .ctl_name = CTL_UNNUMBERED,
737 .procname = "udp_wmem_min", 610 .procname = "udp_wmem_min",
738 .data = &sysctl_udp_wmem_min, 611 .data = &sysctl_udp_wmem_min,
739 .maxlen = sizeof(sysctl_udp_wmem_min), 612 .maxlen = sizeof(sysctl_udp_wmem_min),
740 .mode = 0644, 613 .mode = 0644,
741 .proc_handler = proc_dointvec_minmax, 614 .proc_handler = proc_dointvec_minmax,
742 .strategy = sysctl_intvec,
743 .extra1 = &zero 615 .extra1 = &zero
744 }, 616 },
745 { .ctl_name = 0 } 617 { }
746}; 618};
747 619
748static struct ctl_table ipv4_net_table[] = { 620static struct ctl_table ipv4_net_table[] = {
749 { 621 {
750 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL,
751 .procname = "icmp_echo_ignore_all", 622 .procname = "icmp_echo_ignore_all",
752 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_all, 623 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_all,
753 .maxlen = sizeof(int), 624 .maxlen = sizeof(int),
@@ -755,7 +626,6 @@ static struct ctl_table ipv4_net_table[] = {
755 .proc_handler = proc_dointvec 626 .proc_handler = proc_dointvec
756 }, 627 },
757 { 628 {
758 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
759 .procname = "icmp_echo_ignore_broadcasts", 629 .procname = "icmp_echo_ignore_broadcasts",
760 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts, 630 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts,
761 .maxlen = sizeof(int), 631 .maxlen = sizeof(int),
@@ -763,7 +633,6 @@ static struct ctl_table ipv4_net_table[] = {
763 .proc_handler = proc_dointvec 633 .proc_handler = proc_dointvec
764 }, 634 },
765 { 635 {
766 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
767 .procname = "icmp_ignore_bogus_error_responses", 636 .procname = "icmp_ignore_bogus_error_responses",
768 .data = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses, 637 .data = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses,
769 .maxlen = sizeof(int), 638 .maxlen = sizeof(int),
@@ -771,7 +640,6 @@ static struct ctl_table ipv4_net_table[] = {
771 .proc_handler = proc_dointvec 640 .proc_handler = proc_dointvec
772 }, 641 },
773 { 642 {
774 .ctl_name = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
775 .procname = "icmp_errors_use_inbound_ifaddr", 643 .procname = "icmp_errors_use_inbound_ifaddr",
776 .data = &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr, 644 .data = &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr,
777 .maxlen = sizeof(int), 645 .maxlen = sizeof(int),
@@ -779,16 +647,13 @@ static struct ctl_table ipv4_net_table[] = {
779 .proc_handler = proc_dointvec 647 .proc_handler = proc_dointvec
780 }, 648 },
781 { 649 {
782 .ctl_name = NET_IPV4_ICMP_RATELIMIT,
783 .procname = "icmp_ratelimit", 650 .procname = "icmp_ratelimit",
784 .data = &init_net.ipv4.sysctl_icmp_ratelimit, 651 .data = &init_net.ipv4.sysctl_icmp_ratelimit,
785 .maxlen = sizeof(int), 652 .maxlen = sizeof(int),
786 .mode = 0644, 653 .mode = 0644,
787 .proc_handler = proc_dointvec_ms_jiffies, 654 .proc_handler = proc_dointvec_ms_jiffies,
788 .strategy = sysctl_ms_jiffies
789 }, 655 },
790 { 656 {
791 .ctl_name = NET_IPV4_ICMP_RATEMASK,
792 .procname = "icmp_ratemask", 657 .procname = "icmp_ratemask",
793 .data = &init_net.ipv4.sysctl_icmp_ratemask, 658 .data = &init_net.ipv4.sysctl_icmp_ratemask,
794 .maxlen = sizeof(int), 659 .maxlen = sizeof(int),
@@ -796,7 +661,6 @@ static struct ctl_table ipv4_net_table[] = {
796 .proc_handler = proc_dointvec 661 .proc_handler = proc_dointvec
797 }, 662 },
798 { 663 {
799 .ctl_name = CTL_UNNUMBERED,
800 .procname = "rt_cache_rebuild_count", 664 .procname = "rt_cache_rebuild_count",
801 .data = &init_net.ipv4.sysctl_rt_cache_rebuild_count, 665 .data = &init_net.ipv4.sysctl_rt_cache_rebuild_count,
802 .maxlen = sizeof(int), 666 .maxlen = sizeof(int),
@@ -807,8 +671,8 @@ static struct ctl_table ipv4_net_table[] = {
807}; 671};
808 672
809struct ctl_path net_ipv4_ctl_path[] = { 673struct ctl_path net_ipv4_ctl_path[] = {
810 { .procname = "net", .ctl_name = CTL_NET, }, 674 { .procname = "net", },
811 { .procname = "ipv4", .ctl_name = NET_IPV4, }, 675 { .procname = "ipv4", },
812 { }, 676 { },
813}; 677};
814EXPORT_SYMBOL_GPL(net_ipv4_ctl_path); 678EXPORT_SYMBOL_GPL(net_ipv4_ctl_path);
@@ -818,7 +682,7 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
818 struct ctl_table *table; 682 struct ctl_table *table;
819 683
820 table = ipv4_net_table; 684 table = ipv4_net_table;
821 if (net != &init_net) { 685 if (!net_eq(net, &init_net)) {
822 table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL); 686 table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL);
823 if (table == NULL) 687 if (table == NULL)
824 goto err_alloc; 688 goto err_alloc;
@@ -849,7 +713,7 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
849 return 0; 713 return 0;
850 714
851err_reg: 715err_reg:
852 if (net != &init_net) 716 if (!net_eq(net, &init_net))
853 kfree(table); 717 kfree(table);
854err_alloc: 718err_alloc:
855 return -ENOMEM; 719 return -ENOMEM;