2 * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
4 * $Id: sysctl_net_ipv4.c,v 1.50 2001/10/20 00:00:11 davem Exp $
6 * Begun April 1, 1996, Mike Shaver.
7 * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
11 #include <linux/module.h>
12 #include <linux/sysctl.h>
13 #include <linux/config.h>
16 #include <net/route.h>
20 extern int sysctl_ip_nonlocal_bind
;
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
;
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
;
34 /* From ip_output.c */
35 extern int sysctl_ip_dynaddr
;
38 extern int sysctl_icmp_ratelimit
;
39 extern int sysctl_icmp_ratemask
;
42 extern int sysctl_igmp_max_memberships
;
43 extern int sysctl_igmp_max_msf
;
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
;
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 };
58 struct ipv4_config ipv4_config
;
60 extern ctl_table ipv4_route_table
[];
65 int ipv4_sysctl_forward(ctl_table
*ctl
, int write
, struct file
* filp
,
66 void __user
*buffer
, size_t *lenp
, loff_t
*ppos
)
68 int val
= ipv4_devconf
.forwarding
;
71 ret
= proc_dointvec(ctl
, write
, filp
, buffer
, lenp
, ppos
);
73 if (write
&& ipv4_devconf
.forwarding
!= val
)
74 inet_forward_change();
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
,
85 int *valp
= table
->data
;
88 if (!newval
|| !newlen
)
91 if (newlen
!= sizeof(int))
94 if (get_user(new, (int __user
*)newval
))
100 if (oldval
&& oldlenp
) {
103 if (get_user(len
, oldlenp
))
107 if (len
> table
->maxlen
)
109 if (copy_to_user(oldval
, valp
, len
))
111 if (put_user(len
, oldlenp
))
117 inet_forward_change();
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
)
124 char val
[TCP_CA_NAME_MAX
];
127 .maxlen
= TCP_CA_NAME_MAX
,
131 tcp_get_default_congestion_control(val
);
133 ret
= proc_dostring(&tbl
, write
, filp
, buffer
, lenp
, ppos
);
134 if (write
&& ret
== 0)
135 ret
= tcp_set_default_congestion_control(val
);
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
,
144 char val
[TCP_CA_NAME_MAX
];
147 .maxlen
= TCP_CA_NAME_MAX
,
151 tcp_get_default_congestion_control(val
);
152 ret
= sysctl_string(&tbl
, name
, nlen
, oldval
, oldlenp
, newval
, newlen
,
154 if (ret
== 0 && newval
&& newlen
)
155 ret
= tcp_set_default_congestion_control(val
);
160 ctl_table ipv4_table
[] = {
162 .ctl_name
= NET_IPV4_TCP_TIMESTAMPS
,
163 .procname
= "tcp_timestamps",
164 .data
= &sysctl_tcp_timestamps
,
165 .maxlen
= sizeof(int),
167 .proc_handler
= &proc_dointvec
170 .ctl_name
= NET_IPV4_TCP_WINDOW_SCALING
,
171 .procname
= "tcp_window_scaling",
172 .data
= &sysctl_tcp_window_scaling
,
173 .maxlen
= sizeof(int),
175 .proc_handler
= &proc_dointvec
178 .ctl_name
= NET_IPV4_TCP_SACK
,
179 .procname
= "tcp_sack",
180 .data
= &sysctl_tcp_sack
,
181 .maxlen
= sizeof(int),
183 .proc_handler
= &proc_dointvec
186 .ctl_name
= NET_IPV4_TCP_RETRANS_COLLAPSE
,
187 .procname
= "tcp_retrans_collapse",
188 .data
= &sysctl_tcp_retrans_collapse
,
189 .maxlen
= sizeof(int),
191 .proc_handler
= &proc_dointvec
194 .ctl_name
= NET_IPV4_FORWARD
,
195 .procname
= "ip_forward",
196 .data
= &ipv4_devconf
.forwarding
,
197 .maxlen
= sizeof(int),
199 .proc_handler
= &ipv4_sysctl_forward
,
200 .strategy
= &ipv4_sysctl_forward_strategy
203 .ctl_name
= NET_IPV4_DEFAULT_TTL
,
204 .procname
= "ip_default_ttl",
205 .data
= &sysctl_ip_default_ttl
,
206 .maxlen
= sizeof(int),
208 .proc_handler
= &ipv4_doint_and_flush
,
209 .strategy
= &ipv4_doint_and_flush_strategy
,
212 .ctl_name
= NET_IPV4_AUTOCONFIG
,
213 .procname
= "ip_autoconfig",
214 .data
= &ipv4_config
.autoconfig
,
215 .maxlen
= sizeof(int),
217 .proc_handler
= &proc_dointvec
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),
225 .proc_handler
= &proc_dointvec
228 .ctl_name
= NET_IPV4_NONLOCAL_BIND
,
229 .procname
= "ip_nonlocal_bind",
230 .data
= &sysctl_ip_nonlocal_bind
,
231 .maxlen
= sizeof(int),
233 .proc_handler
= &proc_dointvec
236 .ctl_name
= NET_IPV4_TCP_SYN_RETRIES
,
237 .procname
= "tcp_syn_retries",
238 .data
= &sysctl_tcp_syn_retries
,
239 .maxlen
= sizeof(int),
241 .proc_handler
= &proc_dointvec
244 .ctl_name
= NET_TCP_SYNACK_RETRIES
,
245 .procname
= "tcp_synack_retries",
246 .data
= &sysctl_tcp_synack_retries
,
247 .maxlen
= sizeof(int),
249 .proc_handler
= &proc_dointvec
252 .ctl_name
= NET_TCP_MAX_ORPHANS
,
253 .procname
= "tcp_max_orphans",
254 .data
= &sysctl_tcp_max_orphans
,
255 .maxlen
= sizeof(int),
257 .proc_handler
= &proc_dointvec
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),
265 .proc_handler
= &proc_dointvec
268 .ctl_name
= NET_IPV4_IPFRAG_HIGH_THRESH
,
269 .procname
= "ipfrag_high_thresh",
270 .data
= &sysctl_ipfrag_high_thresh
,
271 .maxlen
= sizeof(int),
273 .proc_handler
= &proc_dointvec
276 .ctl_name
= NET_IPV4_IPFRAG_LOW_THRESH
,
277 .procname
= "ipfrag_low_thresh",
278 .data
= &sysctl_ipfrag_low_thresh
,
279 .maxlen
= sizeof(int),
281 .proc_handler
= &proc_dointvec
284 .ctl_name
= NET_IPV4_DYNADDR
,
285 .procname
= "ip_dynaddr",
286 .data
= &sysctl_ip_dynaddr
,
287 .maxlen
= sizeof(int),
289 .proc_handler
= &proc_dointvec
292 .ctl_name
= NET_IPV4_IPFRAG_TIME
,
293 .procname
= "ipfrag_time",
294 .data
= &sysctl_ipfrag_time
,
295 .maxlen
= sizeof(int),
297 .proc_handler
= &proc_dointvec_jiffies
,
298 .strategy
= &sysctl_jiffies
301 .ctl_name
= NET_IPV4_TCP_KEEPALIVE_TIME
,
302 .procname
= "tcp_keepalive_time",
303 .data
= &sysctl_tcp_keepalive_time
,
304 .maxlen
= sizeof(int),
306 .proc_handler
= &proc_dointvec_jiffies
,
307 .strategy
= &sysctl_jiffies
310 .ctl_name
= NET_IPV4_TCP_KEEPALIVE_PROBES
,
311 .procname
= "tcp_keepalive_probes",
312 .data
= &sysctl_tcp_keepalive_probes
,
313 .maxlen
= sizeof(int),
315 .proc_handler
= &proc_dointvec
318 .ctl_name
= NET_IPV4_TCP_KEEPALIVE_INTVL
,
319 .procname
= "tcp_keepalive_intvl",
320 .data
= &sysctl_tcp_keepalive_intvl
,
321 .maxlen
= sizeof(int),
323 .proc_handler
= &proc_dointvec_jiffies
,
324 .strategy
= &sysctl_jiffies
327 .ctl_name
= NET_IPV4_TCP_RETRIES1
,
328 .procname
= "tcp_retries1",
329 .data
= &sysctl_tcp_retries1
,
330 .maxlen
= sizeof(int),
332 .proc_handler
= &proc_dointvec_minmax
,
333 .strategy
= &sysctl_intvec
,
334 .extra2
= &tcp_retr1_max
337 .ctl_name
= NET_IPV4_TCP_RETRIES2
,
338 .procname
= "tcp_retries2",
339 .data
= &sysctl_tcp_retries2
,
340 .maxlen
= sizeof(int),
342 .proc_handler
= &proc_dointvec
345 .ctl_name
= NET_IPV4_TCP_FIN_TIMEOUT
,
346 .procname
= "tcp_fin_timeout",
347 .data
= &sysctl_tcp_fin_timeout
,
348 .maxlen
= sizeof(int),
350 .proc_handler
= &proc_dointvec_jiffies
,
351 .strategy
= &sysctl_jiffies
353 #ifdef CONFIG_SYN_COOKIES
355 .ctl_name
= NET_TCP_SYNCOOKIES
,
356 .procname
= "tcp_syncookies",
357 .data
= &sysctl_tcp_syncookies
,
358 .maxlen
= sizeof(int),
360 .proc_handler
= &proc_dointvec
364 .ctl_name
= NET_TCP_TW_RECYCLE
,
365 .procname
= "tcp_tw_recycle",
366 .data
= &sysctl_tcp_tw_recycle
,
367 .maxlen
= sizeof(int),
369 .proc_handler
= &proc_dointvec
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),
377 .proc_handler
= &proc_dointvec
380 .ctl_name
= NET_TCP_STDURG
,
381 .procname
= "tcp_stdurg",
382 .data
= &sysctl_tcp_stdurg
,
383 .maxlen
= sizeof(int),
385 .proc_handler
= &proc_dointvec
388 .ctl_name
= NET_TCP_RFC1337
,
389 .procname
= "tcp_rfc1337",
390 .data
= &sysctl_tcp_rfc1337
,
391 .maxlen
= sizeof(int),
393 .proc_handler
= &proc_dointvec
396 .ctl_name
= NET_TCP_MAX_SYN_BACKLOG
,
397 .procname
= "tcp_max_syn_backlog",
398 .data
= &sysctl_max_syn_backlog
,
399 .maxlen
= sizeof(int),
401 .proc_handler
= &proc_dointvec
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
),
409 .proc_handler
= &proc_dointvec_minmax
,
410 .strategy
= &sysctl_intvec
,
411 .extra1
= ip_local_port_range_min
,
412 .extra2
= ip_local_port_range_max
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),
420 .proc_handler
= &proc_dointvec
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),
428 .proc_handler
= &proc_dointvec
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),
436 .proc_handler
= &proc_dointvec
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),
444 .proc_handler
= &proc_dointvec
447 .ctl_name
= NET_IPV4_ROUTE
,
451 .child
= ipv4_route_table
453 #ifdef CONFIG_IP_MULTICAST
455 .ctl_name
= NET_IPV4_IGMP_MAX_MEMBERSHIPS
,
456 .procname
= "igmp_max_memberships",
457 .data
= &sysctl_igmp_max_memberships
,
458 .maxlen
= sizeof(int),
460 .proc_handler
= &proc_dointvec
465 .ctl_name
= NET_IPV4_IGMP_MAX_MSF
,
466 .procname
= "igmp_max_msf",
467 .data
= &sysctl_igmp_max_msf
,
468 .maxlen
= sizeof(int),
470 .proc_handler
= &proc_dointvec
473 .ctl_name
= NET_IPV4_INET_PEER_THRESHOLD
,
474 .procname
= "inet_peer_threshold",
475 .data
= &inet_peer_threshold
,
476 .maxlen
= sizeof(int),
478 .proc_handler
= &proc_dointvec
481 .ctl_name
= NET_IPV4_INET_PEER_MINTTL
,
482 .procname
= "inet_peer_minttl",
483 .data
= &inet_peer_minttl
,
484 .maxlen
= sizeof(int),
486 .proc_handler
= &proc_dointvec_jiffies
,
487 .strategy
= &sysctl_jiffies
490 .ctl_name
= NET_IPV4_INET_PEER_MAXTTL
,
491 .procname
= "inet_peer_maxttl",
492 .data
= &inet_peer_maxttl
,
493 .maxlen
= sizeof(int),
495 .proc_handler
= &proc_dointvec_jiffies
,
496 .strategy
= &sysctl_jiffies
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),
504 .proc_handler
= &proc_dointvec_jiffies
,
505 .strategy
= &sysctl_jiffies
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),
513 .proc_handler
= &proc_dointvec_jiffies
,
514 .strategy
= &sysctl_jiffies
517 .ctl_name
= NET_TCP_ORPHAN_RETRIES
,
518 .procname
= "tcp_orphan_retries",
519 .data
= &sysctl_tcp_orphan_retries
,
520 .maxlen
= sizeof(int),
522 .proc_handler
= &proc_dointvec
525 .ctl_name
= NET_TCP_FACK
,
526 .procname
= "tcp_fack",
527 .data
= &sysctl_tcp_fack
,
528 .maxlen
= sizeof(int),
530 .proc_handler
= &proc_dointvec
533 .ctl_name
= NET_TCP_REORDERING
,
534 .procname
= "tcp_reordering",
535 .data
= &sysctl_tcp_reordering
,
536 .maxlen
= sizeof(int),
538 .proc_handler
= &proc_dointvec
541 .ctl_name
= NET_TCP_ECN
,
542 .procname
= "tcp_ecn",
543 .data
= &sysctl_tcp_ecn
,
544 .maxlen
= sizeof(int),
546 .proc_handler
= &proc_dointvec
549 .ctl_name
= NET_TCP_DSACK
,
550 .procname
= "tcp_dsack",
551 .data
= &sysctl_tcp_dsack
,
552 .maxlen
= sizeof(int),
554 .proc_handler
= &proc_dointvec
557 .ctl_name
= NET_TCP_MEM
,
558 .procname
= "tcp_mem",
559 .data
= &sysctl_tcp_mem
,
560 .maxlen
= sizeof(sysctl_tcp_mem
),
562 .proc_handler
= &proc_dointvec
565 .ctl_name
= NET_TCP_WMEM
,
566 .procname
= "tcp_wmem",
567 .data
= &sysctl_tcp_wmem
,
568 .maxlen
= sizeof(sysctl_tcp_wmem
),
570 .proc_handler
= &proc_dointvec
573 .ctl_name
= NET_TCP_RMEM
,
574 .procname
= "tcp_rmem",
575 .data
= &sysctl_tcp_rmem
,
576 .maxlen
= sizeof(sysctl_tcp_rmem
),
578 .proc_handler
= &proc_dointvec
581 .ctl_name
= NET_TCP_APP_WIN
,
582 .procname
= "tcp_app_win",
583 .data
= &sysctl_tcp_app_win
,
584 .maxlen
= sizeof(int),
586 .proc_handler
= &proc_dointvec
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),
594 .proc_handler
= &proc_dointvec
597 .ctl_name
= NET_IPV4_ICMP_RATELIMIT
,
598 .procname
= "icmp_ratelimit",
599 .data
= &sysctl_icmp_ratelimit
,
600 .maxlen
= sizeof(int),
602 .proc_handler
= &proc_dointvec
605 .ctl_name
= NET_IPV4_ICMP_RATEMASK
,
606 .procname
= "icmp_ratemask",
607 .data
= &sysctl_icmp_ratemask
,
608 .maxlen
= sizeof(int),
610 .proc_handler
= &proc_dointvec
613 .ctl_name
= NET_TCP_TW_REUSE
,
614 .procname
= "tcp_tw_reuse",
615 .data
= &sysctl_tcp_tw_reuse
,
616 .maxlen
= sizeof(int),
618 .proc_handler
= &proc_dointvec
621 .ctl_name
= NET_TCP_FRTO
,
622 .procname
= "tcp_frto",
623 .data
= &sysctl_tcp_frto
,
624 .maxlen
= sizeof(int),
626 .proc_handler
= &proc_dointvec
629 .ctl_name
= NET_TCP_LOW_LATENCY
,
630 .procname
= "tcp_low_latency",
631 .data
= &sysctl_tcp_low_latency
,
632 .maxlen
= sizeof(int),
634 .proc_handler
= &proc_dointvec
637 .ctl_name
= NET_IPV4_IPFRAG_SECRET_INTERVAL
,
638 .procname
= "ipfrag_secret_interval",
639 .data
= &sysctl_ipfrag_secret_interval
,
640 .maxlen
= sizeof(int),
642 .proc_handler
= &proc_dointvec_jiffies
,
643 .strategy
= &sysctl_jiffies
646 .ctl_name
= NET_TCP_NO_METRICS_SAVE
,
647 .procname
= "tcp_no_metrics_save",
648 .data
= &sysctl_tcp_nometrics_save
,
649 .maxlen
= sizeof(int),
651 .proc_handler
= &proc_dointvec
,
654 .ctl_name
= NET_TCP_MODERATE_RCVBUF
,
655 .procname
= "tcp_moderate_rcvbuf",
656 .data
= &sysctl_tcp_moderate_rcvbuf
,
657 .maxlen
= sizeof(int),
659 .proc_handler
= &proc_dointvec
,
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),
667 .proc_handler
= &proc_dointvec
,
670 .ctl_name
= NET_TCP_CONG_CONTROL
,
671 .procname
= "tcp_congestion_control",
673 .maxlen
= TCP_CA_NAME_MAX
,
674 .proc_handler
= &proc_tcp_congestion_control
,
675 .strategy
= &sysctl_tcp_congestion_control
,
681 #endif /* CONFIG_SYSCTL */
683 EXPORT_SYMBOL(ipv4_config
);