xref: /linux/net/ipv4/sysctl_net_ipv4.c (revision d67b569f5f620c0fb95d5212642746b7ba9d29e4)
1 /*
2  * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
3  *
4  * $Id: sysctl_net_ipv4.c,v 1.50 2001/10/20 00:00:11 davem Exp $
5  *
6  * Begun April 1, 1996, Mike Shaver.
7  * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
8  */
9 
10 #include <linux/mm.h>
11 #include <linux/module.h>
12 #include <linux/sysctl.h>
13 #include <linux/config.h>
14 #include <net/snmp.h>
15 #include <net/ip.h>
16 #include <net/route.h>
17 #include <net/tcp.h>
18 
19 /* From af_inet.c */
20 extern int sysctl_ip_nonlocal_bind;
21 
22 /* From icmp.c */
23 extern int sysctl_icmp_echo_ignore_all;
24 extern int sysctl_icmp_echo_ignore_broadcasts;
25 extern int sysctl_icmp_ignore_bogus_error_responses;
26 extern int sysctl_icmp_errors_use_inbound_ifaddr;
27 
28 /* From ip_fragment.c */
29 extern int sysctl_ipfrag_low_thresh;
30 extern int sysctl_ipfrag_high_thresh;
31 extern int sysctl_ipfrag_time;
32 extern int sysctl_ipfrag_secret_interval;
33 
34 /* From ip_output.c */
35 extern int sysctl_ip_dynaddr;
36 
37 /* From icmp.c */
38 extern int sysctl_icmp_ratelimit;
39 extern int sysctl_icmp_ratemask;
40 
41 /* From igmp.c */
42 extern int sysctl_igmp_max_memberships;
43 extern int sysctl_igmp_max_msf;
44 
45 /* From inetpeer.c */
46 extern int inet_peer_threshold;
47 extern int inet_peer_minttl;
48 extern int inet_peer_maxttl;
49 extern int inet_peer_gc_mintime;
50 extern int inet_peer_gc_maxtime;
51 
52 #ifdef CONFIG_SYSCTL
53 static int tcp_retr1_max = 255;
54 static int ip_local_port_range_min[] = { 1, 1 };
55 static int ip_local_port_range_max[] = { 65535, 65535 };
56 #endif
57 
58 struct ipv4_config ipv4_config;
59 
60 extern ctl_table ipv4_route_table[];
61 
62 #ifdef CONFIG_SYSCTL
63 
64 static
65 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
66 			void __user *buffer, size_t *lenp, loff_t *ppos)
67 {
68 	int val = ipv4_devconf.forwarding;
69 	int ret;
70 
71 	ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
72 
73 	if (write && ipv4_devconf.forwarding != val)
74 		inet_forward_change();
75 
76 	return ret;
77 }
78 
79 static int ipv4_sysctl_forward_strategy(ctl_table *table,
80 			 int __user *name, int nlen,
81 			 void __user *oldval, size_t __user *oldlenp,
82 			 void __user *newval, size_t newlen,
83 			 void **context)
84 {
85 	int *valp = table->data;
86 	int new;
87 
88 	if (!newval || !newlen)
89 		return 0;
90 
91 	if (newlen != sizeof(int))
92 		return -EINVAL;
93 
94 	if (get_user(new, (int __user *)newval))
95 		return -EFAULT;
96 
97 	if (new == *valp)
98 		return 0;
99 
100 	if (oldval && oldlenp) {
101 		size_t len;
102 
103 		if (get_user(len, oldlenp))
104 			return -EFAULT;
105 
106 		if (len) {
107 			if (len > table->maxlen)
108 				len = table->maxlen;
109 			if (copy_to_user(oldval, valp, len))
110 				return -EFAULT;
111 			if (put_user(len, oldlenp))
112 				return -EFAULT;
113 		}
114 	}
115 
116 	*valp = new;
117 	inet_forward_change();
118 	return 1;
119 }
120 
121 static int proc_tcp_congestion_control(ctl_table *ctl, int write, struct file * filp,
122 				       void __user *buffer, size_t *lenp, loff_t *ppos)
123 {
124 	char val[TCP_CA_NAME_MAX];
125 	ctl_table tbl = {
126 		.data = val,
127 		.maxlen = TCP_CA_NAME_MAX,
128 	};
129 	int ret;
130 
131 	tcp_get_default_congestion_control(val);
132 
133 	ret = proc_dostring(&tbl, write, filp, buffer, lenp, ppos);
134 	if (write && ret == 0)
135 		ret = tcp_set_default_congestion_control(val);
136 	return ret;
137 }
138 
139 int sysctl_tcp_congestion_control(ctl_table *table, int __user *name, int nlen,
140 				  void __user *oldval, size_t __user *oldlenp,
141 				  void __user *newval, size_t newlen,
142 				  void **context)
143 {
144 	char val[TCP_CA_NAME_MAX];
145 	ctl_table tbl = {
146 		.data = val,
147 		.maxlen = TCP_CA_NAME_MAX,
148 	};
149 	int ret;
150 
151 	tcp_get_default_congestion_control(val);
152 	ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen,
153 			    context);
154 	if (ret == 0 && newval && newlen)
155 		ret = tcp_set_default_congestion_control(val);
156 	return ret;
157 }
158 
159 
160 ctl_table ipv4_table[] = {
161         {
162 		.ctl_name	= NET_IPV4_TCP_TIMESTAMPS,
163 		.procname	= "tcp_timestamps",
164 		.data		= &sysctl_tcp_timestamps,
165 		.maxlen		= sizeof(int),
166 		.mode		= 0644,
167 		.proc_handler	= &proc_dointvec
168 	},
169         {
170 		.ctl_name	= NET_IPV4_TCP_WINDOW_SCALING,
171 		.procname	= "tcp_window_scaling",
172 		.data		= &sysctl_tcp_window_scaling,
173 		.maxlen		= sizeof(int),
174 		.mode		= 0644,
175 		.proc_handler	= &proc_dointvec
176 	},
177         {
178 		.ctl_name	= NET_IPV4_TCP_SACK,
179 		.procname	= "tcp_sack",
180 		.data		= &sysctl_tcp_sack,
181 		.maxlen		= sizeof(int),
182 		.mode		= 0644,
183 		.proc_handler	= &proc_dointvec
184 	},
185         {
186 		.ctl_name	= NET_IPV4_TCP_RETRANS_COLLAPSE,
187 		.procname	= "tcp_retrans_collapse",
188 		.data		= &sysctl_tcp_retrans_collapse,
189 		.maxlen		= sizeof(int),
190 		.mode		= 0644,
191 		.proc_handler	= &proc_dointvec
192 	},
193         {
194 		.ctl_name	= NET_IPV4_FORWARD,
195 		.procname	= "ip_forward",
196 		.data		= &ipv4_devconf.forwarding,
197 		.maxlen		= sizeof(int),
198 		.mode		= 0644,
199 		.proc_handler	= &ipv4_sysctl_forward,
200 		.strategy	= &ipv4_sysctl_forward_strategy
201 	},
202         {
203 		.ctl_name	= NET_IPV4_DEFAULT_TTL,
204 		.procname	= "ip_default_ttl",
205  		.data		= &sysctl_ip_default_ttl,
206 		.maxlen		= sizeof(int),
207 		.mode		= 0644,
208 		.proc_handler	= &ipv4_doint_and_flush,
209 		.strategy	= &ipv4_doint_and_flush_strategy,
210 	},
211         {
212 		.ctl_name	= NET_IPV4_AUTOCONFIG,
213 		.procname	= "ip_autoconfig",
214 		.data		= &ipv4_config.autoconfig,
215 		.maxlen		= sizeof(int),
216 		.mode		= 0644,
217 		.proc_handler	= &proc_dointvec
218 	},
219         {
220 		.ctl_name	= NET_IPV4_NO_PMTU_DISC,
221 		.procname	= "ip_no_pmtu_disc",
222 		.data		= &ipv4_config.no_pmtu_disc,
223 		.maxlen		= sizeof(int),
224 		.mode		= 0644,
225 		.proc_handler	= &proc_dointvec
226 	},
227 	{
228 		.ctl_name	= NET_IPV4_NONLOCAL_BIND,
229 		.procname	= "ip_nonlocal_bind",
230 		.data		= &sysctl_ip_nonlocal_bind,
231 		.maxlen		= sizeof(int),
232 		.mode		= 0644,
233 		.proc_handler	= &proc_dointvec
234 	},
235 	{
236 		.ctl_name	= NET_IPV4_TCP_SYN_RETRIES,
237 		.procname	= "tcp_syn_retries",
238 		.data		= &sysctl_tcp_syn_retries,
239 		.maxlen		= sizeof(int),
240 		.mode		= 0644,
241 		.proc_handler	= &proc_dointvec
242 	},
243 	{
244 		.ctl_name	= NET_TCP_SYNACK_RETRIES,
245 		.procname	= "tcp_synack_retries",
246 		.data		= &sysctl_tcp_synack_retries,
247 		.maxlen		= sizeof(int),
248 		.mode		= 0644,
249 		.proc_handler	= &proc_dointvec
250 	},
251 	{
252 		.ctl_name	= NET_TCP_MAX_ORPHANS,
253 		.procname	= "tcp_max_orphans",
254 		.data		= &sysctl_tcp_max_orphans,
255 		.maxlen		= sizeof(int),
256 		.mode		= 0644,
257 		.proc_handler	= &proc_dointvec
258 	},
259 	{
260 		.ctl_name	= NET_TCP_MAX_TW_BUCKETS,
261 		.procname	= "tcp_max_tw_buckets",
262 		.data		= &sysctl_tcp_max_tw_buckets,
263 		.maxlen		= sizeof(int),
264 		.mode		= 0644,
265 		.proc_handler	= &proc_dointvec
266 	},
267 	{
268 		.ctl_name	= NET_IPV4_IPFRAG_HIGH_THRESH,
269 		.procname	= "ipfrag_high_thresh",
270 		.data		= &sysctl_ipfrag_high_thresh,
271 		.maxlen		= sizeof(int),
272 		.mode		= 0644,
273 		.proc_handler	= &proc_dointvec
274 	},
275 	{
276 		.ctl_name	= NET_IPV4_IPFRAG_LOW_THRESH,
277 		.procname	= "ipfrag_low_thresh",
278 		.data		= &sysctl_ipfrag_low_thresh,
279 		.maxlen		= sizeof(int),
280 		.mode		= 0644,
281 		.proc_handler	= &proc_dointvec
282 	},
283 	{
284 		.ctl_name	= NET_IPV4_DYNADDR,
285 		.procname	= "ip_dynaddr",
286 		.data		= &sysctl_ip_dynaddr,
287 		.maxlen		= sizeof(int),
288 		.mode		= 0644,
289 		.proc_handler	= &proc_dointvec
290 	},
291 	{
292 		.ctl_name	= NET_IPV4_IPFRAG_TIME,
293 		.procname	= "ipfrag_time",
294 		.data		= &sysctl_ipfrag_time,
295 		.maxlen		= sizeof(int),
296 		.mode		= 0644,
297 		.proc_handler	= &proc_dointvec_jiffies,
298 		.strategy	= &sysctl_jiffies
299 	},
300 	{
301 		.ctl_name	= NET_IPV4_TCP_KEEPALIVE_TIME,
302 		.procname	= "tcp_keepalive_time",
303 		.data		= &sysctl_tcp_keepalive_time,
304 		.maxlen		= sizeof(int),
305 		.mode		= 0644,
306 		.proc_handler	= &proc_dointvec_jiffies,
307 		.strategy	= &sysctl_jiffies
308 	},
309 	{
310 		.ctl_name	= NET_IPV4_TCP_KEEPALIVE_PROBES,
311 		.procname	= "tcp_keepalive_probes",
312 		.data		= &sysctl_tcp_keepalive_probes,
313 		.maxlen		= sizeof(int),
314 		.mode		= 0644,
315 		.proc_handler	= &proc_dointvec
316 	},
317 	{
318 		.ctl_name	= NET_IPV4_TCP_KEEPALIVE_INTVL,
319 		.procname	= "tcp_keepalive_intvl",
320 		.data		= &sysctl_tcp_keepalive_intvl,
321 		.maxlen		= sizeof(int),
322 		.mode		= 0644,
323 		.proc_handler	= &proc_dointvec_jiffies,
324 		.strategy	= &sysctl_jiffies
325 	},
326 	{
327 		.ctl_name	= NET_IPV4_TCP_RETRIES1,
328 		.procname	= "tcp_retries1",
329 		.data		= &sysctl_tcp_retries1,
330 		.maxlen		= sizeof(int),
331 		.mode		= 0644,
332 		.proc_handler	= &proc_dointvec_minmax,
333 		.strategy	= &sysctl_intvec,
334 		.extra2		= &tcp_retr1_max
335 	},
336 	{
337 		.ctl_name	= NET_IPV4_TCP_RETRIES2,
338 		.procname	= "tcp_retries2",
339 		.data		= &sysctl_tcp_retries2,
340 		.maxlen		= sizeof(int),
341 		.mode		= 0644,
342 		.proc_handler	= &proc_dointvec
343 	},
344 	{
345 		.ctl_name	= NET_IPV4_TCP_FIN_TIMEOUT,
346 		.procname	= "tcp_fin_timeout",
347 		.data		= &sysctl_tcp_fin_timeout,
348 		.maxlen		= sizeof(int),
349 		.mode		= 0644,
350 		.proc_handler	= &proc_dointvec_jiffies,
351 		.strategy	= &sysctl_jiffies
352 	},
353 #ifdef CONFIG_SYN_COOKIES
354 	{
355 		.ctl_name	= NET_TCP_SYNCOOKIES,
356 		.procname	= "tcp_syncookies",
357 		.data		= &sysctl_tcp_syncookies,
358 		.maxlen		= sizeof(int),
359 		.mode		= 0644,
360 		.proc_handler	= &proc_dointvec
361 	},
362 #endif
363 	{
364 		.ctl_name	= NET_TCP_TW_RECYCLE,
365 		.procname	= "tcp_tw_recycle",
366 		.data		= &sysctl_tcp_tw_recycle,
367 		.maxlen		= sizeof(int),
368 		.mode		= 0644,
369 		.proc_handler	= &proc_dointvec
370 	},
371 	{
372 		.ctl_name	= NET_TCP_ABORT_ON_OVERFLOW,
373 		.procname	= "tcp_abort_on_overflow",
374 		.data		= &sysctl_tcp_abort_on_overflow,
375 		.maxlen		= sizeof(int),
376 		.mode		= 0644,
377 		.proc_handler	= &proc_dointvec
378 	},
379 	{
380 		.ctl_name	= NET_TCP_STDURG,
381 		.procname	= "tcp_stdurg",
382 		.data		= &sysctl_tcp_stdurg,
383 		.maxlen		= sizeof(int),
384 		.mode		= 0644,
385 		.proc_handler	= &proc_dointvec
386 	},
387 	{
388 		.ctl_name	= NET_TCP_RFC1337,
389 		.procname	= "tcp_rfc1337",
390 		.data		= &sysctl_tcp_rfc1337,
391 		.maxlen		= sizeof(int),
392 		.mode		= 0644,
393 		.proc_handler	= &proc_dointvec
394 	},
395 	{
396 		.ctl_name	= NET_TCP_MAX_SYN_BACKLOG,
397 		.procname	= "tcp_max_syn_backlog",
398 		.data		= &sysctl_max_syn_backlog,
399 		.maxlen		= sizeof(int),
400 		.mode		= 0644,
401 		.proc_handler	= &proc_dointvec
402 	},
403 	{
404 		.ctl_name	= NET_IPV4_LOCAL_PORT_RANGE,
405 		.procname	= "ip_local_port_range",
406 		.data		= &sysctl_local_port_range,
407 		.maxlen		= sizeof(sysctl_local_port_range),
408 		.mode		= 0644,
409 		.proc_handler	= &proc_dointvec_minmax,
410 		.strategy	= &sysctl_intvec,
411 		.extra1		= ip_local_port_range_min,
412 		.extra2		= ip_local_port_range_max
413 	},
414 	{
415 		.ctl_name	= NET_IPV4_ICMP_ECHO_IGNORE_ALL,
416 		.procname	= "icmp_echo_ignore_all",
417 		.data		= &sysctl_icmp_echo_ignore_all,
418 		.maxlen		= sizeof(int),
419 		.mode		= 0644,
420 		.proc_handler	= &proc_dointvec
421 	},
422 	{
423 		.ctl_name	= NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
424 		.procname	= "icmp_echo_ignore_broadcasts",
425 		.data		= &sysctl_icmp_echo_ignore_broadcasts,
426 		.maxlen		= sizeof(int),
427 		.mode		= 0644,
428 		.proc_handler	= &proc_dointvec
429 	},
430 	{
431 		.ctl_name	= NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
432 		.procname	= "icmp_ignore_bogus_error_responses",
433 		.data		= &sysctl_icmp_ignore_bogus_error_responses,
434 		.maxlen		= sizeof(int),
435 		.mode		= 0644,
436 		.proc_handler	= &proc_dointvec
437 	},
438 	{
439 		.ctl_name	= NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
440 		.procname	= "icmp_errors_use_inbound_ifaddr",
441 		.data		= &sysctl_icmp_errors_use_inbound_ifaddr,
442 		.maxlen		= sizeof(int),
443 		.mode		= 0644,
444 		.proc_handler	= &proc_dointvec
445 	},
446 	{
447 		.ctl_name	= NET_IPV4_ROUTE,
448 		.procname	= "route",
449 		.maxlen		= 0,
450 		.mode		= 0555,
451 		.child		= ipv4_route_table
452 	},
453 #ifdef CONFIG_IP_MULTICAST
454 	{
455 		.ctl_name	= NET_IPV4_IGMP_MAX_MEMBERSHIPS,
456 		.procname	= "igmp_max_memberships",
457 		.data		= &sysctl_igmp_max_memberships,
458 		.maxlen		= sizeof(int),
459 		.mode		= 0644,
460 		.proc_handler	= &proc_dointvec
461 	},
462 
463 #endif
464 	{
465 		.ctl_name	= NET_IPV4_IGMP_MAX_MSF,
466 		.procname	= "igmp_max_msf",
467 		.data		= &sysctl_igmp_max_msf,
468 		.maxlen		= sizeof(int),
469 		.mode		= 0644,
470 		.proc_handler	= &proc_dointvec
471 	},
472 	{
473 		.ctl_name	= NET_IPV4_INET_PEER_THRESHOLD,
474 		.procname	= "inet_peer_threshold",
475 		.data		= &inet_peer_threshold,
476 		.maxlen		= sizeof(int),
477 		.mode		= 0644,
478 		.proc_handler	= &proc_dointvec
479 	},
480 	{
481 		.ctl_name	= NET_IPV4_INET_PEER_MINTTL,
482 		.procname	= "inet_peer_minttl",
483 		.data		= &inet_peer_minttl,
484 		.maxlen		= sizeof(int),
485 		.mode		= 0644,
486 		.proc_handler	= &proc_dointvec_jiffies,
487 		.strategy	= &sysctl_jiffies
488 	},
489 	{
490 		.ctl_name	= NET_IPV4_INET_PEER_MAXTTL,
491 		.procname	= "inet_peer_maxttl",
492 		.data		= &inet_peer_maxttl,
493 		.maxlen		= sizeof(int),
494 		.mode		= 0644,
495 		.proc_handler	= &proc_dointvec_jiffies,
496 		.strategy	= &sysctl_jiffies
497 	},
498 	{
499 		.ctl_name	= NET_IPV4_INET_PEER_GC_MINTIME,
500 		.procname	= "inet_peer_gc_mintime",
501 		.data		= &inet_peer_gc_mintime,
502 		.maxlen		= sizeof(int),
503 		.mode		= 0644,
504 		.proc_handler	= &proc_dointvec_jiffies,
505 		.strategy	= &sysctl_jiffies
506 	},
507 	{
508 		.ctl_name	= NET_IPV4_INET_PEER_GC_MAXTIME,
509 		.procname	= "inet_peer_gc_maxtime",
510 		.data		= &inet_peer_gc_maxtime,
511 		.maxlen		= sizeof(int),
512 		.mode		= 0644,
513 		.proc_handler	= &proc_dointvec_jiffies,
514 		.strategy	= &sysctl_jiffies
515 	},
516 	{
517 		.ctl_name	= NET_TCP_ORPHAN_RETRIES,
518 		.procname	= "tcp_orphan_retries",
519 		.data		= &sysctl_tcp_orphan_retries,
520 		.maxlen		= sizeof(int),
521 		.mode		= 0644,
522 		.proc_handler	= &proc_dointvec
523 	},
524 	{
525 		.ctl_name	= NET_TCP_FACK,
526 		.procname	= "tcp_fack",
527 		.data		= &sysctl_tcp_fack,
528 		.maxlen		= sizeof(int),
529 		.mode		= 0644,
530 		.proc_handler	= &proc_dointvec
531 	},
532 	{
533 		.ctl_name	= NET_TCP_REORDERING,
534 		.procname	= "tcp_reordering",
535 		.data		= &sysctl_tcp_reordering,
536 		.maxlen		= sizeof(int),
537 		.mode		= 0644,
538 		.proc_handler	= &proc_dointvec
539 	},
540 	{
541 		.ctl_name	= NET_TCP_ECN,
542 		.procname	= "tcp_ecn",
543 		.data		= &sysctl_tcp_ecn,
544 		.maxlen		= sizeof(int),
545 		.mode		= 0644,
546 		.proc_handler	= &proc_dointvec
547 	},
548 	{
549 		.ctl_name	= NET_TCP_DSACK,
550 		.procname	= "tcp_dsack",
551 		.data		= &sysctl_tcp_dsack,
552 		.maxlen		= sizeof(int),
553 		.mode		= 0644,
554 		.proc_handler	= &proc_dointvec
555 	},
556 	{
557 		.ctl_name	= NET_TCP_MEM,
558 		.procname	= "tcp_mem",
559 		.data		= &sysctl_tcp_mem,
560 		.maxlen		= sizeof(sysctl_tcp_mem),
561 		.mode		= 0644,
562 		.proc_handler	= &proc_dointvec
563 	},
564 	{
565 		.ctl_name	= NET_TCP_WMEM,
566 		.procname	= "tcp_wmem",
567 		.data		= &sysctl_tcp_wmem,
568 		.maxlen		= sizeof(sysctl_tcp_wmem),
569 		.mode		= 0644,
570 		.proc_handler	= &proc_dointvec
571 	},
572 	{
573 		.ctl_name	= NET_TCP_RMEM,
574 		.procname	= "tcp_rmem",
575 		.data		= &sysctl_tcp_rmem,
576 		.maxlen		= sizeof(sysctl_tcp_rmem),
577 		.mode		= 0644,
578 		.proc_handler	= &proc_dointvec
579 	},
580 	{
581 		.ctl_name	= NET_TCP_APP_WIN,
582 		.procname	= "tcp_app_win",
583 		.data		= &sysctl_tcp_app_win,
584 		.maxlen		= sizeof(int),
585 		.mode		= 0644,
586 		.proc_handler	= &proc_dointvec
587 	},
588 	{
589 		.ctl_name	= NET_TCP_ADV_WIN_SCALE,
590 		.procname	= "tcp_adv_win_scale",
591 		.data		= &sysctl_tcp_adv_win_scale,
592 		.maxlen		= sizeof(int),
593 		.mode		= 0644,
594 		.proc_handler	= &proc_dointvec
595 	},
596 	{
597 		.ctl_name	= NET_IPV4_ICMP_RATELIMIT,
598 		.procname	= "icmp_ratelimit",
599 		.data		= &sysctl_icmp_ratelimit,
600 		.maxlen		= sizeof(int),
601 		.mode		= 0644,
602 		.proc_handler	= &proc_dointvec
603 	},
604 	{
605 		.ctl_name	= NET_IPV4_ICMP_RATEMASK,
606 		.procname	= "icmp_ratemask",
607 		.data		= &sysctl_icmp_ratemask,
608 		.maxlen		= sizeof(int),
609 		.mode		= 0644,
610 		.proc_handler	= &proc_dointvec
611 	},
612 	{
613 		.ctl_name	= NET_TCP_TW_REUSE,
614 		.procname	= "tcp_tw_reuse",
615 		.data		= &sysctl_tcp_tw_reuse,
616 		.maxlen		= sizeof(int),
617 		.mode		= 0644,
618 		.proc_handler	= &proc_dointvec
619 	},
620 	{
621 		.ctl_name	= NET_TCP_FRTO,
622 		.procname	= "tcp_frto",
623 		.data		= &sysctl_tcp_frto,
624 		.maxlen		= sizeof(int),
625 		.mode		= 0644,
626 		.proc_handler	= &proc_dointvec
627 	},
628 	{
629 		.ctl_name	= NET_TCP_LOW_LATENCY,
630 		.procname	= "tcp_low_latency",
631 		.data		= &sysctl_tcp_low_latency,
632 		.maxlen		= sizeof(int),
633 		.mode		= 0644,
634 		.proc_handler	= &proc_dointvec
635 	},
636 	{
637 		.ctl_name	= NET_IPV4_IPFRAG_SECRET_INTERVAL,
638 		.procname	= "ipfrag_secret_interval",
639 		.data		= &sysctl_ipfrag_secret_interval,
640 		.maxlen		= sizeof(int),
641 		.mode		= 0644,
642 		.proc_handler	= &proc_dointvec_jiffies,
643 		.strategy	= &sysctl_jiffies
644 	},
645 	{
646 		.ctl_name	= NET_TCP_NO_METRICS_SAVE,
647 		.procname	= "tcp_no_metrics_save",
648 		.data		= &sysctl_tcp_nometrics_save,
649 		.maxlen		= sizeof(int),
650 		.mode		= 0644,
651 		.proc_handler	= &proc_dointvec,
652 	},
653 	{
654 		.ctl_name	= NET_TCP_MODERATE_RCVBUF,
655 		.procname	= "tcp_moderate_rcvbuf",
656 		.data		= &sysctl_tcp_moderate_rcvbuf,
657 		.maxlen		= sizeof(int),
658 		.mode		= 0644,
659 		.proc_handler	= &proc_dointvec,
660 	},
661 	{
662 		.ctl_name	= NET_TCP_TSO_WIN_DIVISOR,
663 		.procname	= "tcp_tso_win_divisor",
664 		.data		= &sysctl_tcp_tso_win_divisor,
665 		.maxlen		= sizeof(int),
666 		.mode		= 0644,
667 		.proc_handler	= &proc_dointvec,
668 	},
669 	{
670 		.ctl_name	= NET_TCP_CONG_CONTROL,
671 		.procname	= "tcp_congestion_control",
672 		.mode		= 0644,
673 		.maxlen		= TCP_CA_NAME_MAX,
674 		.proc_handler	= &proc_tcp_congestion_control,
675 		.strategy	= &sysctl_tcp_congestion_control,
676 	},
677 
678 	{ .ctl_name = 0 }
679 };
680 
681 #endif /* CONFIG_SYSCTL */
682 
683 EXPORT_SYMBOL(ipv4_config);
684