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 #ifdef CONFIG_ICMP_IPOD
27 extern int sysctl_icmp_ipod_version;
28 extern int sysctl_icmp_ipod_enabled;
29 extern u32 sysctl_icmp_ipod_host;
30 extern u32 sysctl_icmp_ipod_mask;
31 extern char sysctl_icmp_ipod_key[32+1];
34 /* From ip_fragment.c */
35 extern int sysctl_ipfrag_low_thresh;
36 extern int sysctl_ipfrag_high_thresh;
37 extern int sysctl_ipfrag_time;
38 extern int sysctl_ipfrag_secret_interval;
40 /* From ip_output.c */
41 extern int sysctl_ip_dynaddr;
44 extern int sysctl_icmp_ratelimit;
45 extern int sysctl_icmp_ratemask;
48 extern int sysctl_igmp_max_memberships;
49 extern int sysctl_igmp_max_msf;
52 extern int inet_peer_threshold;
53 extern int inet_peer_minttl;
54 extern int inet_peer_maxttl;
55 extern int inet_peer_gc_mintime;
56 extern int inet_peer_gc_maxtime;
59 static int tcp_retr1_max = 255;
60 static int ip_local_port_range_min[] = { 1, 1 };
61 static int ip_local_port_range_max[] = { 65535, 65535 };
64 struct ipv4_config ipv4_config;
66 extern ctl_table ipv4_route_table[];
71 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
72 void __user *buffer, size_t *lenp)
74 int val = ipv4_devconf.forwarding;
77 ret = proc_dointvec(ctl, write, filp, buffer, lenp);
79 if (write && ipv4_devconf.forwarding != val)
80 inet_forward_change();
85 static int ipv4_sysctl_forward_strategy(ctl_table *table,
86 int __user *name, int nlen,
87 void __user *oldval, size_t __user *oldlenp,
88 void __user *newval, size_t newlen,
91 int *valp = table->data;
94 if (!newval || !newlen)
97 if (newlen != sizeof(int))
100 if (get_user(new, (int __user *)newval))
106 if (oldval && oldlenp) {
109 if (get_user(len, oldlenp))
113 if (len > table->maxlen)
115 if (copy_to_user(oldval, valp, len))
117 if (put_user(len, oldlenp))
123 inet_forward_change();
127 ctl_table ipv4_table[] = {
129 .ctl_name = NET_IPV4_TCP_TIMESTAMPS,
130 .procname = "tcp_timestamps",
131 .data = &sysctl_tcp_timestamps,
132 .maxlen = sizeof(int),
134 .proc_handler = &proc_dointvec
137 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING,
138 .procname = "tcp_window_scaling",
139 .data = &sysctl_tcp_window_scaling,
140 .maxlen = sizeof(int),
142 .proc_handler = &proc_dointvec
145 .ctl_name = NET_IPV4_TCP_SACK,
146 .procname = "tcp_sack",
147 .data = &sysctl_tcp_sack,
148 .maxlen = sizeof(int),
150 .proc_handler = &proc_dointvec
153 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE,
154 .procname = "tcp_retrans_collapse",
155 .data = &sysctl_tcp_retrans_collapse,
156 .maxlen = sizeof(int),
158 .proc_handler = &proc_dointvec
161 .ctl_name = NET_IPV4_FORWARD,
162 .procname = "ip_forward",
163 .data = &ipv4_devconf.forwarding,
164 .maxlen = sizeof(int),
166 .proc_handler = &ipv4_sysctl_forward,
167 .strategy = &ipv4_sysctl_forward_strategy
170 .ctl_name = NET_IPV4_DEFAULT_TTL,
171 .procname = "ip_default_ttl",
172 .data = &sysctl_ip_default_ttl,
173 .maxlen = sizeof(int),
175 .proc_handler = &ipv4_doint_and_flush,
176 .strategy = &ipv4_doint_and_flush_strategy,
179 .ctl_name = NET_IPV4_AUTOCONFIG,
180 .procname = "ip_autoconfig",
181 .data = &ipv4_config.autoconfig,
182 .maxlen = sizeof(int),
184 .proc_handler = &proc_dointvec
187 .ctl_name = NET_IPV4_NO_PMTU_DISC,
188 .procname = "ip_no_pmtu_disc",
189 .data = &ipv4_config.no_pmtu_disc,
190 .maxlen = sizeof(int),
192 .proc_handler = &proc_dointvec
195 .ctl_name = NET_IPV4_NONLOCAL_BIND,
196 .procname = "ip_nonlocal_bind",
197 .data = &sysctl_ip_nonlocal_bind,
198 .maxlen = sizeof(int),
200 .proc_handler = &proc_dointvec
203 .ctl_name = NET_IPV4_TCP_SYN_RETRIES,
204 .procname = "tcp_syn_retries",
205 .data = &sysctl_tcp_syn_retries,
206 .maxlen = sizeof(int),
208 .proc_handler = &proc_dointvec
211 .ctl_name = NET_TCP_SYNACK_RETRIES,
212 .procname = "tcp_synack_retries",
213 .data = &sysctl_tcp_synack_retries,
214 .maxlen = sizeof(int),
216 .proc_handler = &proc_dointvec
219 .ctl_name = NET_TCP_MAX_ORPHANS,
220 .procname = "tcp_max_orphans",
221 .data = &sysctl_tcp_max_orphans,
222 .maxlen = sizeof(int),
224 .proc_handler = &proc_dointvec
227 .ctl_name = NET_TCP_MAX_TW_BUCKETS,
228 .procname = "tcp_max_tw_buckets",
229 .data = &sysctl_tcp_max_tw_buckets,
230 .maxlen = sizeof(int),
232 .proc_handler = &proc_dointvec
235 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH,
236 .procname = "ipfrag_high_thresh",
237 .data = &sysctl_ipfrag_high_thresh,
238 .maxlen = sizeof(int),
240 .proc_handler = &proc_dointvec
243 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH,
244 .procname = "ipfrag_low_thresh",
245 .data = &sysctl_ipfrag_low_thresh,
246 .maxlen = sizeof(int),
248 .proc_handler = &proc_dointvec
251 .ctl_name = NET_IPV4_DYNADDR,
252 .procname = "ip_dynaddr",
253 .data = &sysctl_ip_dynaddr,
254 .maxlen = sizeof(int),
256 .proc_handler = &proc_dointvec
259 .ctl_name = NET_IPV4_IPFRAG_TIME,
260 .procname = "ipfrag_time",
261 .data = &sysctl_ipfrag_time,
262 .maxlen = sizeof(int),
264 .proc_handler = &proc_dointvec_jiffies,
265 .strategy = &sysctl_jiffies
268 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME,
269 .procname = "tcp_keepalive_time",
270 .data = &sysctl_tcp_keepalive_time,
271 .maxlen = sizeof(int),
273 .proc_handler = &proc_dointvec_jiffies,
274 .strategy = &sysctl_jiffies
277 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES,
278 .procname = "tcp_keepalive_probes",
279 .data = &sysctl_tcp_keepalive_probes,
280 .maxlen = sizeof(int),
282 .proc_handler = &proc_dointvec
285 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL,
286 .procname = "tcp_keepalive_intvl",
287 .data = &sysctl_tcp_keepalive_intvl,
288 .maxlen = sizeof(int),
290 .proc_handler = &proc_dointvec_jiffies,
291 .strategy = &sysctl_jiffies
294 .ctl_name = NET_IPV4_TCP_RETRIES1,
295 .procname = "tcp_retries1",
296 .data = &sysctl_tcp_retries1,
297 .maxlen = sizeof(int),
299 .proc_handler = &proc_dointvec_minmax,
300 .strategy = &sysctl_intvec,
301 .extra2 = &tcp_retr1_max
304 .ctl_name = NET_IPV4_TCP_RETRIES2,
305 .procname = "tcp_retries2",
306 .data = &sysctl_tcp_retries2,
307 .maxlen = sizeof(int),
309 .proc_handler = &proc_dointvec
312 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT,
313 .procname = "tcp_fin_timeout",
314 .data = &sysctl_tcp_fin_timeout,
315 .maxlen = sizeof(int),
317 .proc_handler = &proc_dointvec_jiffies,
318 .strategy = &sysctl_jiffies
320 #ifdef CONFIG_SYN_COOKIES
322 .ctl_name = NET_TCP_SYNCOOKIES,
323 .procname = "tcp_syncookies",
324 .data = &sysctl_tcp_syncookies,
325 .maxlen = sizeof(int),
327 .proc_handler = &proc_dointvec
331 .ctl_name = NET_TCP_TW_RECYCLE,
332 .procname = "tcp_tw_recycle",
333 .data = &sysctl_tcp_tw_recycle,
334 .maxlen = sizeof(int),
336 .proc_handler = &proc_dointvec
339 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW,
340 .procname = "tcp_abort_on_overflow",
341 .data = &sysctl_tcp_abort_on_overflow,
342 .maxlen = sizeof(int),
344 .proc_handler = &proc_dointvec
347 .ctl_name = NET_TCP_STDURG,
348 .procname = "tcp_stdurg",
349 .data = &sysctl_tcp_stdurg,
350 .maxlen = sizeof(int),
352 .proc_handler = &proc_dointvec
355 .ctl_name = NET_TCP_RFC1337,
356 .procname = "tcp_rfc1337",
357 .data = &sysctl_tcp_rfc1337,
358 .maxlen = sizeof(int),
360 .proc_handler = &proc_dointvec
363 .ctl_name = NET_TCP_MAX_SYN_BACKLOG,
364 .procname = "tcp_max_syn_backlog",
365 .data = &sysctl_max_syn_backlog,
366 .maxlen = sizeof(int),
368 .proc_handler = &proc_dointvec
371 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE,
372 .procname = "ip_local_port_range",
373 .data = &sysctl_local_port_range,
374 .maxlen = sizeof(sysctl_local_port_range),
376 .proc_handler = &proc_dointvec_minmax,
377 .strategy = &sysctl_intvec,
378 .extra1 = ip_local_port_range_min,
379 .extra2 = ip_local_port_range_max
382 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL,
383 .procname = "icmp_echo_ignore_all",
384 .data = &sysctl_icmp_echo_ignore_all,
385 .maxlen = sizeof(int),
387 .proc_handler = &proc_dointvec
390 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
391 .procname = "icmp_echo_ignore_broadcasts",
392 .data = &sysctl_icmp_echo_ignore_broadcasts,
393 .maxlen = sizeof(int),
395 .proc_handler = &proc_dointvec
398 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
399 .procname = "icmp_ignore_bogus_error_responses",
400 .data = &sysctl_icmp_ignore_bogus_error_responses,
401 .maxlen = sizeof(int),
403 .proc_handler = &proc_dointvec
405 #ifdef CONFIG_ICMP_IPOD
407 .ctl_name = NET_IPV4_ICMP_IPOD_VERSION,
408 .procname = "icmp_ipod_version",
409 .data = &sysctl_icmp_ipod_version,
410 .maxlen = sizeof(sysctl_icmp_ipod_version),
412 .proc_handler = &proc_dointvec
415 .ctl_name = NET_IPV4_ICMP_IPOD_ENABLED,
416 .procname = "icmp_ipod_enabled",
417 .data = &sysctl_icmp_ipod_enabled,
418 .maxlen = sizeof(sysctl_icmp_ipod_enabled),
420 .proc_handler = &proc_dointvec
423 .ctl_name = NET_IPV4_ICMP_IPOD_HOST,
424 .procname = "icmp_ipod_host",
425 .data = &sysctl_icmp_ipod_host,
426 .maxlen = sizeof(sysctl_icmp_ipod_host),
428 .proc_handler = &proc_dointvec
431 .ctl_name = NET_IPV4_ICMP_IPOD_MASK,
432 .procname = "icmp_ipod_mask",
433 .data = &sysctl_icmp_ipod_mask,
434 .maxlen = sizeof(sysctl_icmp_ipod_mask),
436 .proc_handler = &proc_dointvec
439 .ctl_name = NET_IPV4_ICMP_IPOD_KEY,
440 .procname = "icmp_ipod_key",
441 .data = &sysctl_icmp_ipod_key,
442 .maxlen = sizeof(sysctl_icmp_ipod_key),
444 .proc_handler = &proc_dostring,
445 .strategy = &sysctl_string
449 .ctl_name = NET_IPV4_ROUTE,
453 .child = ipv4_route_table
455 #ifdef CONFIG_IP_MULTICAST
457 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
458 .procname = "igmp_max_memberships",
459 .data = &sysctl_igmp_max_memberships,
460 .maxlen = sizeof(int),
462 .proc_handler = &proc_dointvec
467 .ctl_name = NET_IPV4_IGMP_MAX_MSF,
468 .procname = "igmp_max_msf",
469 .data = &sysctl_igmp_max_msf,
470 .maxlen = sizeof(int),
472 .proc_handler = &proc_dointvec
475 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD,
476 .procname = "inet_peer_threshold",
477 .data = &inet_peer_threshold,
478 .maxlen = sizeof(int),
480 .proc_handler = &proc_dointvec
483 .ctl_name = NET_IPV4_INET_PEER_MINTTL,
484 .procname = "inet_peer_minttl",
485 .data = &inet_peer_minttl,
486 .maxlen = sizeof(int),
488 .proc_handler = &proc_dointvec_jiffies,
489 .strategy = &sysctl_jiffies
492 .ctl_name = NET_IPV4_INET_PEER_MAXTTL,
493 .procname = "inet_peer_maxttl",
494 .data = &inet_peer_maxttl,
495 .maxlen = sizeof(int),
497 .proc_handler = &proc_dointvec_jiffies,
498 .strategy = &sysctl_jiffies
501 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME,
502 .procname = "inet_peer_gc_mintime",
503 .data = &inet_peer_gc_mintime,
504 .maxlen = sizeof(int),
506 .proc_handler = &proc_dointvec_jiffies,
507 .strategy = &sysctl_jiffies
510 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME,
511 .procname = "inet_peer_gc_maxtime",
512 .data = &inet_peer_gc_maxtime,
513 .maxlen = sizeof(int),
515 .proc_handler = &proc_dointvec_jiffies,
516 .strategy = &sysctl_jiffies
519 .ctl_name = NET_TCP_ORPHAN_RETRIES,
520 .procname = "tcp_orphan_retries",
521 .data = &sysctl_tcp_orphan_retries,
522 .maxlen = sizeof(int),
524 .proc_handler = &proc_dointvec
527 .ctl_name = NET_TCP_FACK,
528 .procname = "tcp_fack",
529 .data = &sysctl_tcp_fack,
530 .maxlen = sizeof(int),
532 .proc_handler = &proc_dointvec
535 .ctl_name = NET_TCP_REORDERING,
536 .procname = "tcp_reordering",
537 .data = &sysctl_tcp_reordering,
538 .maxlen = sizeof(int),
540 .proc_handler = &proc_dointvec
543 .ctl_name = NET_TCP_ECN,
544 .procname = "tcp_ecn",
545 .data = &sysctl_tcp_ecn,
546 .maxlen = sizeof(int),
548 .proc_handler = &proc_dointvec
551 .ctl_name = NET_TCP_DSACK,
552 .procname = "tcp_dsack",
553 .data = &sysctl_tcp_dsack,
554 .maxlen = sizeof(int),
556 .proc_handler = &proc_dointvec
559 .ctl_name = NET_TCP_MEM,
560 .procname = "tcp_mem",
561 .data = &sysctl_tcp_mem,
562 .maxlen = sizeof(sysctl_tcp_mem),
564 .proc_handler = &proc_dointvec
567 .ctl_name = NET_TCP_WMEM,
568 .procname = "tcp_wmem",
569 .data = &sysctl_tcp_wmem,
570 .maxlen = sizeof(sysctl_tcp_wmem),
572 .proc_handler = &proc_dointvec
575 .ctl_name = NET_TCP_RMEM,
576 .procname = "tcp_rmem",
577 .data = &sysctl_tcp_rmem,
578 .maxlen = sizeof(sysctl_tcp_rmem),
580 .proc_handler = &proc_dointvec
583 .ctl_name = NET_TCP_APP_WIN,
584 .procname = "tcp_app_win",
585 .data = &sysctl_tcp_app_win,
586 .maxlen = sizeof(int),
588 .proc_handler = &proc_dointvec
591 .ctl_name = NET_TCP_ADV_WIN_SCALE,
592 .procname = "tcp_adv_win_scale",
593 .data = &sysctl_tcp_adv_win_scale,
594 .maxlen = sizeof(int),
596 .proc_handler = &proc_dointvec
599 .ctl_name = NET_IPV4_ICMP_RATELIMIT,
600 .procname = "icmp_ratelimit",
601 .data = &sysctl_icmp_ratelimit,
602 .maxlen = sizeof(int),
604 .proc_handler = &proc_dointvec
607 .ctl_name = NET_IPV4_ICMP_RATEMASK,
608 .procname = "icmp_ratemask",
609 .data = &sysctl_icmp_ratemask,
610 .maxlen = sizeof(int),
612 .proc_handler = &proc_dointvec
615 .ctl_name = NET_TCP_TW_REUSE,
616 .procname = "tcp_tw_reuse",
617 .data = &sysctl_tcp_tw_reuse,
618 .maxlen = sizeof(int),
620 .proc_handler = &proc_dointvec
623 .ctl_name = NET_TCP_FRTO,
624 .procname = "tcp_frto",
625 .data = &sysctl_tcp_frto,
626 .maxlen = sizeof(int),
628 .proc_handler = &proc_dointvec
631 .ctl_name = NET_TCP_LOW_LATENCY,
632 .procname = "tcp_low_latency",
633 .data = &sysctl_tcp_low_latency,
634 .maxlen = sizeof(int),
636 .proc_handler = &proc_dointvec
639 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL,
640 .procname = "ipfrag_secret_interval",
641 .data = &sysctl_ipfrag_secret_interval,
642 .maxlen = sizeof(int),
644 .proc_handler = &proc_dointvec_jiffies,
645 .strategy = &sysctl_jiffies
648 .ctl_name = NET_TCP_NO_METRICS_SAVE,
649 .procname = "tcp_no_metrics_save",
650 .data = &sysctl_tcp_nometrics_save,
651 .maxlen = sizeof(int),
653 .proc_handler = &proc_dointvec,
656 .ctl_name = NET_TCP_WESTWOOD,
657 .procname = "tcp_westwood",
658 .data = &sysctl_tcp_westwood,
659 .maxlen = sizeof(int),
661 .proc_handler = &proc_dointvec,
664 .ctl_name = NET_TCP_VEGAS,
665 .procname = "tcp_vegas_cong_avoid",
666 .data = &sysctl_tcp_vegas_cong_avoid,
667 .maxlen = sizeof(int),
669 .proc_handler = &proc_dointvec,
672 .ctl_name = NET_TCP_VEGAS_ALPHA,
673 .procname = "tcp_vegas_alpha",
674 .data = &sysctl_tcp_vegas_alpha,
675 .maxlen = sizeof(int),
677 .proc_handler = &proc_dointvec,
680 .ctl_name = NET_TCP_VEGAS_BETA,
681 .procname = "tcp_vegas_beta",
682 .data = &sysctl_tcp_vegas_beta,
683 .maxlen = sizeof(int),
685 .proc_handler = &proc_dointvec,
688 .ctl_name = NET_TCP_VEGAS_GAMMA,
689 .procname = "tcp_vegas_gamma",
690 .data = &sysctl_tcp_vegas_gamma,
691 .maxlen = sizeof(int),
693 .proc_handler = &proc_dointvec,
696 .ctl_name = NET_TCP_BIC,
697 .procname = "tcp_bic",
698 .data = &sysctl_tcp_bic,
699 .maxlen = sizeof(int),
701 .proc_handler = &proc_dointvec,
704 .ctl_name = NET_TCP_BIC_FAST_CONVERGENCE,
705 .procname = "tcp_bic_fast_convergence",
706 .data = &sysctl_tcp_bic_fast_convergence,
707 .maxlen = sizeof(int),
709 .proc_handler = &proc_dointvec,
712 .ctl_name = NET_TCP_BIC_LOW_WINDOW,
713 .procname = "tcp_bic_low_window",
714 .data = &sysctl_tcp_bic_low_window,
715 .maxlen = sizeof(int),
717 .proc_handler = &proc_dointvec,
720 .ctl_name = NET_TCP_DEFAULT_WIN_SCALE,
721 .procname = "tcp_default_win_scale",
722 .data = &sysctl_tcp_default_win_scale,
723 .maxlen = sizeof(int),
725 .proc_handler = &proc_dointvec,
728 .ctl_name = NET_TCP_MODERATE_RCVBUF,
729 .procname = "tcp_moderate_rcvbuf",
730 .data = &sysctl_tcp_moderate_rcvbuf,
731 .maxlen = sizeof(int),
733 .proc_handler = &proc_dointvec,
738 #endif /* CONFIG_SYSCTL */
740 EXPORT_SYMBOL(ipv4_config);