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/igmp.h>
14 #include <linux/inetdevice.h>
18 #include <net/route.h>
22 extern int sysctl_ip_nonlocal_bind;
26 static int tcp_retr1_max = 255;
27 static int ip_local_port_range_min[] = { 1, 1 };
28 static int ip_local_port_range_max[] = { 65535, 65535 };
31 struct ipv4_config ipv4_config;
36 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
37 void __user *buffer, size_t *lenp, loff_t *ppos)
39 int val = ipv4_devconf.forwarding;
42 ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
44 if (write && ipv4_devconf.forwarding != val)
45 inet_forward_change();
50 static int ipv4_sysctl_forward_strategy(ctl_table *table,
51 int __user *name, int nlen,
52 void __user *oldval, size_t __user *oldlenp,
53 void __user *newval, size_t newlen,
56 int *valp = table->data;
59 if (!newval || !newlen)
62 if (newlen != sizeof(int))
65 if (get_user(new, (int __user *)newval))
71 if (oldval && oldlenp) {
74 if (get_user(len, oldlenp))
78 if (len > table->maxlen)
80 if (copy_to_user(oldval, valp, len))
82 if (put_user(len, oldlenp))
88 inet_forward_change();
92 static int proc_tcp_congestion_control(ctl_table *ctl, int write, struct file * filp,
93 void __user *buffer, size_t *lenp, loff_t *ppos)
95 char val[TCP_CA_NAME_MAX];
98 .maxlen = TCP_CA_NAME_MAX,
102 tcp_get_default_congestion_control(val);
104 ret = proc_dostring(&tbl, write, filp, buffer, lenp, ppos);
105 if (write && ret == 0)
106 ret = tcp_set_default_congestion_control(val);
110 static int sysctl_tcp_congestion_control(ctl_table *table, int __user *name,
111 int nlen, void __user *oldval,
112 size_t __user *oldlenp,
113 void __user *newval, size_t newlen,
116 char val[TCP_CA_NAME_MAX];
119 .maxlen = TCP_CA_NAME_MAX,
123 tcp_get_default_congestion_control(val);
124 ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen,
126 if (ret == 0 && newval && newlen)
127 ret = tcp_set_default_congestion_control(val);
132 ctl_table ipv4_table[] = {
134 .ctl_name = NET_IPV4_TCP_TIMESTAMPS,
135 .procname = "tcp_timestamps",
136 .data = &sysctl_tcp_timestamps,
137 .maxlen = sizeof(int),
139 .proc_handler = &proc_dointvec
142 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING,
143 .procname = "tcp_window_scaling",
144 .data = &sysctl_tcp_window_scaling,
145 .maxlen = sizeof(int),
147 .proc_handler = &proc_dointvec
150 .ctl_name = NET_IPV4_TCP_SACK,
151 .procname = "tcp_sack",
152 .data = &sysctl_tcp_sack,
153 .maxlen = sizeof(int),
155 .proc_handler = &proc_dointvec
158 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE,
159 .procname = "tcp_retrans_collapse",
160 .data = &sysctl_tcp_retrans_collapse,
161 .maxlen = sizeof(int),
163 .proc_handler = &proc_dointvec
166 .ctl_name = NET_IPV4_FORWARD,
167 .procname = "ip_forward",
168 .data = &ipv4_devconf.forwarding,
169 .maxlen = sizeof(int),
171 .proc_handler = &ipv4_sysctl_forward,
172 .strategy = &ipv4_sysctl_forward_strategy
175 .ctl_name = NET_IPV4_DEFAULT_TTL,
176 .procname = "ip_default_ttl",
177 .data = &sysctl_ip_default_ttl,
178 .maxlen = sizeof(int),
180 .proc_handler = &ipv4_doint_and_flush,
181 .strategy = &ipv4_doint_and_flush_strategy,
184 .ctl_name = NET_IPV4_NO_PMTU_DISC,
185 .procname = "ip_no_pmtu_disc",
186 .data = &ipv4_config.no_pmtu_disc,
187 .maxlen = sizeof(int),
189 .proc_handler = &proc_dointvec
192 .ctl_name = NET_IPV4_NONLOCAL_BIND,
193 .procname = "ip_nonlocal_bind",
194 .data = &sysctl_ip_nonlocal_bind,
195 .maxlen = sizeof(int),
197 .proc_handler = &proc_dointvec
200 .ctl_name = NET_IPV4_TCP_SYN_RETRIES,
201 .procname = "tcp_syn_retries",
202 .data = &sysctl_tcp_syn_retries,
203 .maxlen = sizeof(int),
205 .proc_handler = &proc_dointvec
208 .ctl_name = NET_TCP_SYNACK_RETRIES,
209 .procname = "tcp_synack_retries",
210 .data = &sysctl_tcp_synack_retries,
211 .maxlen = sizeof(int),
213 .proc_handler = &proc_dointvec
216 .ctl_name = NET_TCP_MAX_ORPHANS,
217 .procname = "tcp_max_orphans",
218 .data = &sysctl_tcp_max_orphans,
219 .maxlen = sizeof(int),
221 .proc_handler = &proc_dointvec
224 .ctl_name = NET_TCP_MAX_TW_BUCKETS,
225 .procname = "tcp_max_tw_buckets",
226 .data = &tcp_death_row.sysctl_max_tw_buckets,
227 .maxlen = sizeof(int),
229 .proc_handler = &proc_dointvec
232 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH,
233 .procname = "ipfrag_high_thresh",
234 .data = &sysctl_ipfrag_high_thresh,
235 .maxlen = sizeof(int),
237 .proc_handler = &proc_dointvec
240 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH,
241 .procname = "ipfrag_low_thresh",
242 .data = &sysctl_ipfrag_low_thresh,
243 .maxlen = sizeof(int),
245 .proc_handler = &proc_dointvec
248 .ctl_name = NET_IPV4_DYNADDR,
249 .procname = "ip_dynaddr",
250 .data = &sysctl_ip_dynaddr,
251 .maxlen = sizeof(int),
253 .proc_handler = &proc_dointvec
256 .ctl_name = NET_IPV4_IPFRAG_TIME,
257 .procname = "ipfrag_time",
258 .data = &sysctl_ipfrag_time,
259 .maxlen = sizeof(int),
261 .proc_handler = &proc_dointvec_jiffies,
262 .strategy = &sysctl_jiffies
265 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME,
266 .procname = "tcp_keepalive_time",
267 .data = &sysctl_tcp_keepalive_time,
268 .maxlen = sizeof(int),
270 .proc_handler = &proc_dointvec_jiffies,
271 .strategy = &sysctl_jiffies
274 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES,
275 .procname = "tcp_keepalive_probes",
276 .data = &sysctl_tcp_keepalive_probes,
277 .maxlen = sizeof(int),
279 .proc_handler = &proc_dointvec
282 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL,
283 .procname = "tcp_keepalive_intvl",
284 .data = &sysctl_tcp_keepalive_intvl,
285 .maxlen = sizeof(int),
287 .proc_handler = &proc_dointvec_jiffies,
288 .strategy = &sysctl_jiffies
291 .ctl_name = NET_IPV4_TCP_RETRIES1,
292 .procname = "tcp_retries1",
293 .data = &sysctl_tcp_retries1,
294 .maxlen = sizeof(int),
296 .proc_handler = &proc_dointvec_minmax,
297 .strategy = &sysctl_intvec,
298 .extra2 = &tcp_retr1_max
301 .ctl_name = NET_IPV4_TCP_RETRIES2,
302 .procname = "tcp_retries2",
303 .data = &sysctl_tcp_retries2,
304 .maxlen = sizeof(int),
306 .proc_handler = &proc_dointvec
309 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT,
310 .procname = "tcp_fin_timeout",
311 .data = &sysctl_tcp_fin_timeout,
312 .maxlen = sizeof(int),
314 .proc_handler = &proc_dointvec_jiffies,
315 .strategy = &sysctl_jiffies
317 #ifdef CONFIG_SYN_COOKIES
319 .ctl_name = NET_TCP_SYNCOOKIES,
320 .procname = "tcp_syncookies",
321 .data = &sysctl_tcp_syncookies,
322 .maxlen = sizeof(int),
324 .proc_handler = &proc_dointvec
328 .ctl_name = NET_TCP_TW_RECYCLE,
329 .procname = "tcp_tw_recycle",
330 .data = &tcp_death_row.sysctl_tw_recycle,
331 .maxlen = sizeof(int),
333 .proc_handler = &proc_dointvec
336 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW,
337 .procname = "tcp_abort_on_overflow",
338 .data = &sysctl_tcp_abort_on_overflow,
339 .maxlen = sizeof(int),
341 .proc_handler = &proc_dointvec
344 .ctl_name = NET_TCP_STDURG,
345 .procname = "tcp_stdurg",
346 .data = &sysctl_tcp_stdurg,
347 .maxlen = sizeof(int),
349 .proc_handler = &proc_dointvec
352 .ctl_name = NET_TCP_RFC1337,
353 .procname = "tcp_rfc1337",
354 .data = &sysctl_tcp_rfc1337,
355 .maxlen = sizeof(int),
357 .proc_handler = &proc_dointvec
360 .ctl_name = NET_TCP_MAX_SYN_BACKLOG,
361 .procname = "tcp_max_syn_backlog",
362 .data = &sysctl_max_syn_backlog,
363 .maxlen = sizeof(int),
365 .proc_handler = &proc_dointvec
368 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE,
369 .procname = "ip_local_port_range",
370 .data = &sysctl_local_port_range,
371 .maxlen = sizeof(sysctl_local_port_range),
373 .proc_handler = &proc_dointvec_minmax,
374 .strategy = &sysctl_intvec,
375 .extra1 = ip_local_port_range_min,
376 .extra2 = ip_local_port_range_max
379 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL,
380 .procname = "icmp_echo_ignore_all",
381 .data = &sysctl_icmp_echo_ignore_all,
382 .maxlen = sizeof(int),
384 .proc_handler = &proc_dointvec
387 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
388 .procname = "icmp_echo_ignore_broadcasts",
389 .data = &sysctl_icmp_echo_ignore_broadcasts,
390 .maxlen = sizeof(int),
392 .proc_handler = &proc_dointvec
395 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
396 .procname = "icmp_ignore_bogus_error_responses",
397 .data = &sysctl_icmp_ignore_bogus_error_responses,
398 .maxlen = sizeof(int),
400 .proc_handler = &proc_dointvec
402 #ifdef CONFIG_ICMP_IPOD
404 .ctl_name = NET_IPV4_ICMP_IPOD_VERSION,
405 .procname = "icmp_ipod_version",
406 .data = &sysctl_icmp_ipod_version,
407 .maxlen = sizeof(sysctl_icmp_ipod_version),
409 .proc_handler = &proc_dointvec
412 .ctl_name = NET_IPV4_ICMP_IPOD_ENABLED,
413 .procname = "icmp_ipod_enabled",
414 .data = &sysctl_icmp_ipod_enabled,
415 .maxlen = sizeof(sysctl_icmp_ipod_enabled),
417 .proc_handler = &proc_dointvec
420 .ctl_name = NET_IPV4_ICMP_IPOD_HOST,
421 .procname = "icmp_ipod_host",
422 .data = &sysctl_icmp_ipod_host,
423 .maxlen = sizeof(sysctl_icmp_ipod_host),
425 .proc_handler = &proc_dointvec
428 .ctl_name = NET_IPV4_ICMP_IPOD_MASK,
429 .procname = "icmp_ipod_mask",
430 .data = &sysctl_icmp_ipod_mask,
431 .maxlen = sizeof(sysctl_icmp_ipod_mask),
433 .proc_handler = &proc_dointvec
436 .ctl_name = NET_IPV4_ICMP_IPOD_KEY,
437 .procname = "icmp_ipod_key",
438 .data = &sysctl_icmp_ipod_key,
439 .maxlen = sizeof(sysctl_icmp_ipod_key),
441 .proc_handler = &proc_dostring,
442 .strategy = &sysctl_string
446 .ctl_name = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
447 .procname = "icmp_errors_use_inbound_ifaddr",
448 .data = &sysctl_icmp_errors_use_inbound_ifaddr,
449 .maxlen = sizeof(int),
451 .proc_handler = &proc_dointvec
454 .ctl_name = NET_IPV4_ROUTE,
458 .child = ipv4_route_table
460 #ifdef CONFIG_IP_MULTICAST
462 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
463 .procname = "igmp_max_memberships",
464 .data = &sysctl_igmp_max_memberships,
465 .maxlen = sizeof(int),
467 .proc_handler = &proc_dointvec
472 .ctl_name = NET_IPV4_IGMP_MAX_MSF,
473 .procname = "igmp_max_msf",
474 .data = &sysctl_igmp_max_msf,
475 .maxlen = sizeof(int),
477 .proc_handler = &proc_dointvec
480 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD,
481 .procname = "inet_peer_threshold",
482 .data = &inet_peer_threshold,
483 .maxlen = sizeof(int),
485 .proc_handler = &proc_dointvec
488 .ctl_name = NET_IPV4_INET_PEER_MINTTL,
489 .procname = "inet_peer_minttl",
490 .data = &inet_peer_minttl,
491 .maxlen = sizeof(int),
493 .proc_handler = &proc_dointvec_jiffies,
494 .strategy = &sysctl_jiffies
497 .ctl_name = NET_IPV4_INET_PEER_MAXTTL,
498 .procname = "inet_peer_maxttl",
499 .data = &inet_peer_maxttl,
500 .maxlen = sizeof(int),
502 .proc_handler = &proc_dointvec_jiffies,
503 .strategy = &sysctl_jiffies
506 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME,
507 .procname = "inet_peer_gc_mintime",
508 .data = &inet_peer_gc_mintime,
509 .maxlen = sizeof(int),
511 .proc_handler = &proc_dointvec_jiffies,
512 .strategy = &sysctl_jiffies
515 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME,
516 .procname = "inet_peer_gc_maxtime",
517 .data = &inet_peer_gc_maxtime,
518 .maxlen = sizeof(int),
520 .proc_handler = &proc_dointvec_jiffies,
521 .strategy = &sysctl_jiffies
524 .ctl_name = NET_TCP_ORPHAN_RETRIES,
525 .procname = "tcp_orphan_retries",
526 .data = &sysctl_tcp_orphan_retries,
527 .maxlen = sizeof(int),
529 .proc_handler = &proc_dointvec
532 .ctl_name = NET_TCP_FACK,
533 .procname = "tcp_fack",
534 .data = &sysctl_tcp_fack,
535 .maxlen = sizeof(int),
537 .proc_handler = &proc_dointvec
540 .ctl_name = NET_TCP_REORDERING,
541 .procname = "tcp_reordering",
542 .data = &sysctl_tcp_reordering,
543 .maxlen = sizeof(int),
545 .proc_handler = &proc_dointvec
548 .ctl_name = NET_TCP_ECN,
549 .procname = "tcp_ecn",
550 .data = &sysctl_tcp_ecn,
551 .maxlen = sizeof(int),
553 .proc_handler = &proc_dointvec
556 .ctl_name = NET_TCP_DSACK,
557 .procname = "tcp_dsack",
558 .data = &sysctl_tcp_dsack,
559 .maxlen = sizeof(int),
561 .proc_handler = &proc_dointvec
564 .ctl_name = NET_TCP_MEM,
565 .procname = "tcp_mem",
566 .data = &sysctl_tcp_mem,
567 .maxlen = sizeof(sysctl_tcp_mem),
569 .proc_handler = &proc_dointvec
572 .ctl_name = NET_TCP_WMEM,
573 .procname = "tcp_wmem",
574 .data = &sysctl_tcp_wmem,
575 .maxlen = sizeof(sysctl_tcp_wmem),
577 .proc_handler = &proc_dointvec
580 .ctl_name = NET_TCP_RMEM,
581 .procname = "tcp_rmem",
582 .data = &sysctl_tcp_rmem,
583 .maxlen = sizeof(sysctl_tcp_rmem),
585 .proc_handler = &proc_dointvec
588 .ctl_name = NET_TCP_APP_WIN,
589 .procname = "tcp_app_win",
590 .data = &sysctl_tcp_app_win,
591 .maxlen = sizeof(int),
593 .proc_handler = &proc_dointvec
596 .ctl_name = NET_TCP_ADV_WIN_SCALE,
597 .procname = "tcp_adv_win_scale",
598 .data = &sysctl_tcp_adv_win_scale,
599 .maxlen = sizeof(int),
601 .proc_handler = &proc_dointvec
604 .ctl_name = NET_IPV4_ICMP_RATELIMIT,
605 .procname = "icmp_ratelimit",
606 .data = &sysctl_icmp_ratelimit,
607 .maxlen = sizeof(int),
609 .proc_handler = &proc_dointvec
612 .ctl_name = NET_IPV4_ICMP_RATEMASK,
613 .procname = "icmp_ratemask",
614 .data = &sysctl_icmp_ratemask,
615 .maxlen = sizeof(int),
617 .proc_handler = &proc_dointvec
620 .ctl_name = NET_TCP_TW_REUSE,
621 .procname = "tcp_tw_reuse",
622 .data = &sysctl_tcp_tw_reuse,
623 .maxlen = sizeof(int),
625 .proc_handler = &proc_dointvec
628 .ctl_name = NET_TCP_FRTO,
629 .procname = "tcp_frto",
630 .data = &sysctl_tcp_frto,
631 .maxlen = sizeof(int),
633 .proc_handler = &proc_dointvec
636 .ctl_name = NET_TCP_LOW_LATENCY,
637 .procname = "tcp_low_latency",
638 .data = &sysctl_tcp_low_latency,
639 .maxlen = sizeof(int),
641 .proc_handler = &proc_dointvec
644 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL,
645 .procname = "ipfrag_secret_interval",
646 .data = &sysctl_ipfrag_secret_interval,
647 .maxlen = sizeof(int),
649 .proc_handler = &proc_dointvec_jiffies,
650 .strategy = &sysctl_jiffies
653 .ctl_name = NET_IPV4_IPFRAG_MAX_DIST,
654 .procname = "ipfrag_max_dist",
655 .data = &sysctl_ipfrag_max_dist,
656 .maxlen = sizeof(int),
658 .proc_handler = &proc_dointvec_minmax,
662 .ctl_name = NET_TCP_NO_METRICS_SAVE,
663 .procname = "tcp_no_metrics_save",
664 .data = &sysctl_tcp_nometrics_save,
665 .maxlen = sizeof(int),
667 .proc_handler = &proc_dointvec,
670 .ctl_name = NET_TCP_MODERATE_RCVBUF,
671 .procname = "tcp_moderate_rcvbuf",
672 .data = &sysctl_tcp_moderate_rcvbuf,
673 .maxlen = sizeof(int),
675 .proc_handler = &proc_dointvec,
678 .ctl_name = NET_TCP_TSO_WIN_DIVISOR,
679 .procname = "tcp_tso_win_divisor",
680 .data = &sysctl_tcp_tso_win_divisor,
681 .maxlen = sizeof(int),
683 .proc_handler = &proc_dointvec,
686 .ctl_name = NET_TCP_CONG_CONTROL,
687 .procname = "tcp_congestion_control",
689 .maxlen = TCP_CA_NAME_MAX,
690 .proc_handler = &proc_tcp_congestion_control,
691 .strategy = &sysctl_tcp_congestion_control,
694 .ctl_name = NET_TCP_ABC,
695 .procname = "tcp_abc",
696 .data = &sysctl_tcp_abc,
697 .maxlen = sizeof(int),
699 .proc_handler = &proc_dointvec,
702 .ctl_name = NET_TCP_MTU_PROBING,
703 .procname = "tcp_mtu_probing",
704 .data = &sysctl_tcp_mtu_probing,
705 .maxlen = sizeof(int),
707 .proc_handler = &proc_dointvec,
710 .ctl_name = NET_TCP_BASE_MSS,
711 .procname = "tcp_base_mss",
712 .data = &sysctl_tcp_base_mss,
713 .maxlen = sizeof(int),
715 .proc_handler = &proc_dointvec,
718 .ctl_name = NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,
719 .procname = "tcp_workaround_signed_windows",
720 .data = &sysctl_tcp_workaround_signed_windows,
721 .maxlen = sizeof(int),
723 .proc_handler = &proc_dointvec
725 #ifdef CONFIG_NET_DMA
727 .ctl_name = NET_TCP_DMA_COPYBREAK,
728 .procname = "tcp_dma_copybreak",
729 .data = &sysctl_tcp_dma_copybreak,
730 .maxlen = sizeof(int),
732 .proc_handler = &proc_dointvec
736 .ctl_name = NET_TCP_SLOW_START_AFTER_IDLE,
737 .procname = "tcp_slow_start_after_idle",
738 .data = &sysctl_tcp_slow_start_after_idle,
739 .maxlen = sizeof(int),
741 .proc_handler = &proc_dointvec
746 #endif /* CONFIG_SYSCTL */
748 EXPORT_SYMBOL(ipv4_config);