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;
27 /* From ip_fragment.c */
28 extern int sysctl_ipfrag_low_thresh;
29 extern int sysctl_ipfrag_high_thresh;
30 extern int sysctl_ipfrag_time;
31 extern int sysctl_ipfrag_secret_interval;
33 /* From ip_output.c */
34 extern int sysctl_ip_dynaddr;
37 extern int sysctl_icmp_ratelimit;
38 extern int sysctl_icmp_ratemask;
41 extern int sysctl_igmp_max_memberships;
42 extern int sysctl_igmp_max_msf;
45 extern int inet_peer_threshold;
46 extern int inet_peer_minttl;
47 extern int inet_peer_maxttl;
48 extern int inet_peer_gc_mintime;
49 extern int inet_peer_gc_maxtime;
52 static int tcp_retr1_max = 255;
53 static int ip_local_port_range_min[] = { 1, 1 };
54 static int ip_local_port_range_max[] = { 65535, 65535 };
57 struct ipv4_config ipv4_config;
59 extern ctl_table ipv4_route_table[];
64 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
65 void *buffer, size_t *lenp)
67 int val = ipv4_devconf.forwarding;
70 ret = proc_dointvec(ctl, write, filp, buffer, lenp);
72 if (write && ipv4_devconf.forwarding != val)
73 inet_forward_change();
78 static int ipv4_sysctl_forward_strategy(ctl_table *table, int *name, int nlen,
79 void *oldval, size_t *oldlenp,
80 void *newval, size_t newlen,
83 int *valp = table->data;
86 if (!newval || !newlen)
89 if (newlen != sizeof(int))
92 if (get_user(new, (int *)newval))
98 if (oldval && oldlenp) {
101 if (get_user(len, oldlenp))
105 if (len > table->maxlen)
107 if (copy_to_user(oldval, valp, len))
109 if (put_user(len, oldlenp))
115 inet_forward_change();
119 ctl_table ipv4_table[] = {
121 .ctl_name = NET_IPV4_TCP_TIMESTAMPS,
122 .procname = "tcp_timestamps",
123 .data = &sysctl_tcp_timestamps,
124 .maxlen = sizeof(int),
126 .proc_handler = &proc_dointvec
129 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING,
130 .procname = "tcp_window_scaling",
131 .data = &sysctl_tcp_window_scaling,
132 .maxlen = sizeof(int),
134 .proc_handler = &proc_dointvec
137 .ctl_name = NET_IPV4_TCP_SACK,
138 .procname = "tcp_sack",
139 .data = &sysctl_tcp_sack,
140 .maxlen = sizeof(int),
142 .proc_handler = &proc_dointvec
145 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE,
146 .procname = "tcp_retrans_collapse",
147 .data = &sysctl_tcp_retrans_collapse,
148 .maxlen = sizeof(int),
150 .proc_handler = &proc_dointvec
153 .ctl_name = NET_IPV4_FORWARD,
154 .procname = "ip_forward",
155 .data = &ipv4_devconf.forwarding,
156 .maxlen = sizeof(int),
158 .proc_handler = &ipv4_sysctl_forward,
159 .strategy = &ipv4_sysctl_forward_strategy
162 .ctl_name = NET_IPV4_DEFAULT_TTL,
163 .procname = "ip_default_ttl",
164 .data = &sysctl_ip_default_ttl,
165 .maxlen = sizeof(int),
167 .proc_handler = &ipv4_doint_and_flush,
168 .strategy = &ipv4_doint_and_flush_strategy,
171 .ctl_name = NET_IPV4_AUTOCONFIG,
172 .procname = "ip_autoconfig",
173 .data = &ipv4_config.autoconfig,
174 .maxlen = sizeof(int),
176 .proc_handler = &proc_dointvec
179 .ctl_name = NET_IPV4_NO_PMTU_DISC,
180 .procname = "ip_no_pmtu_disc",
181 .data = &ipv4_config.no_pmtu_disc,
182 .maxlen = sizeof(int),
184 .proc_handler = &proc_dointvec
187 .ctl_name = NET_IPV4_NONLOCAL_BIND,
188 .procname = "ip_nonlocal_bind",
189 .data = &sysctl_ip_nonlocal_bind,
190 .maxlen = sizeof(int),
192 .proc_handler = &proc_dointvec
195 .ctl_name = NET_IPV4_TCP_SYN_RETRIES,
196 .procname = "tcp_syn_retries",
197 .data = &sysctl_tcp_syn_retries,
198 .maxlen = sizeof(int),
200 .proc_handler = &proc_dointvec
203 .ctl_name = NET_TCP_SYNACK_RETRIES,
204 .procname = "tcp_synack_retries",
205 .data = &sysctl_tcp_synack_retries,
206 .maxlen = sizeof(int),
208 .proc_handler = &proc_dointvec
211 .ctl_name = NET_TCP_MAX_ORPHANS,
212 .procname = "tcp_max_orphans",
213 .data = &sysctl_tcp_max_orphans,
214 .maxlen = sizeof(int),
216 .proc_handler = &proc_dointvec
219 .ctl_name = NET_TCP_MAX_TW_BUCKETS,
220 .procname = "tcp_max_tw_buckets",
221 .data = &sysctl_tcp_max_tw_buckets,
222 .maxlen = sizeof(int),
224 .proc_handler = &proc_dointvec
227 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH,
228 .procname = "ipfrag_high_thresh",
229 .data = &sysctl_ipfrag_high_thresh,
230 .maxlen = sizeof(int),
232 .proc_handler = &proc_dointvec
235 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH,
236 .procname = "ipfrag_low_thresh",
237 .data = &sysctl_ipfrag_low_thresh,
238 .maxlen = sizeof(int),
240 .proc_handler = &proc_dointvec
243 .ctl_name = NET_IPV4_DYNADDR,
244 .procname = "ip_dynaddr",
245 .data = &sysctl_ip_dynaddr,
246 .maxlen = sizeof(int),
248 .proc_handler = &proc_dointvec
251 .ctl_name = NET_IPV4_IPFRAG_TIME,
252 .procname = "ipfrag_time",
253 .data = &sysctl_ipfrag_time,
254 .maxlen = sizeof(int),
256 .proc_handler = &proc_dointvec_jiffies,
257 .strategy = &sysctl_jiffies
260 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME,
261 .procname = "tcp_keepalive_time",
262 .data = &sysctl_tcp_keepalive_time,
263 .maxlen = sizeof(int),
265 .proc_handler = &proc_dointvec_jiffies,
266 .strategy = &sysctl_jiffies
269 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES,
270 .procname = "tcp_keepalive_probes",
271 .data = &sysctl_tcp_keepalive_probes,
272 .maxlen = sizeof(int),
274 .proc_handler = &proc_dointvec
277 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL,
278 .procname = "tcp_keepalive_intvl",
279 .data = &sysctl_tcp_keepalive_intvl,
280 .maxlen = sizeof(int),
282 .proc_handler = &proc_dointvec_jiffies,
283 .strategy = &sysctl_jiffies
286 .ctl_name = NET_IPV4_TCP_RETRIES1,
287 .procname = "tcp_retries1",
288 .data = &sysctl_tcp_retries1,
289 .maxlen = sizeof(int),
291 .proc_handler = &proc_dointvec_minmax,
292 .strategy = &sysctl_intvec,
293 .extra2 = &tcp_retr1_max
296 .ctl_name = NET_IPV4_TCP_RETRIES2,
297 .procname = "tcp_retries2",
298 .data = &sysctl_tcp_retries2,
299 .maxlen = sizeof(int),
301 .proc_handler = &proc_dointvec
304 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT,
305 .procname = "tcp_fin_timeout",
306 .data = &sysctl_tcp_fin_timeout,
307 .maxlen = sizeof(int),
309 .proc_handler = &proc_dointvec_jiffies,
310 .strategy = &sysctl_jiffies
312 #ifdef CONFIG_SYN_COOKIES
314 .ctl_name = NET_TCP_SYNCOOKIES,
315 .procname = "tcp_syncookies",
316 .data = &sysctl_tcp_syncookies,
317 .maxlen = sizeof(int),
319 .proc_handler = &proc_dointvec
323 .ctl_name = NET_TCP_TW_RECYCLE,
324 .procname = "tcp_tw_recycle",
325 .data = &sysctl_tcp_tw_recycle,
326 .maxlen = sizeof(int),
328 .proc_handler = &proc_dointvec
331 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW,
332 .procname = "tcp_abort_on_overflow",
333 .data = &sysctl_tcp_abort_on_overflow,
334 .maxlen = sizeof(int),
336 .proc_handler = &proc_dointvec
339 .ctl_name = NET_TCP_STDURG,
340 .procname = "tcp_stdurg",
341 .data = &sysctl_tcp_stdurg,
342 .maxlen = sizeof(int),
344 .proc_handler = &proc_dointvec
347 .ctl_name = NET_TCP_RFC1337,
348 .procname = "tcp_rfc1337",
349 .data = &sysctl_tcp_rfc1337,
350 .maxlen = sizeof(int),
352 .proc_handler = &proc_dointvec
355 .ctl_name = NET_TCP_MAX_SYN_BACKLOG,
356 .procname = "tcp_max_syn_backlog",
357 .data = &sysctl_max_syn_backlog,
358 .maxlen = sizeof(int),
360 .proc_handler = &proc_dointvec
363 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE,
364 .procname = "ip_local_port_range",
365 .data = &sysctl_local_port_range,
366 .maxlen = sizeof(sysctl_local_port_range),
368 .proc_handler = &proc_dointvec_minmax,
369 .strategy = &sysctl_intvec,
370 .extra1 = ip_local_port_range_min,
371 .extra2 = ip_local_port_range_max
374 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL,
375 .procname = "icmp_echo_ignore_all",
376 .data = &sysctl_icmp_echo_ignore_all,
377 .maxlen = sizeof(int),
379 .proc_handler = &proc_dointvec
382 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
383 .procname = "icmp_echo_ignore_broadcasts",
384 .data = &sysctl_icmp_echo_ignore_broadcasts,
385 .maxlen = sizeof(int),
387 .proc_handler = &proc_dointvec
390 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
391 .procname = "icmp_ignore_bogus_error_responses",
392 .data = &sysctl_icmp_ignore_bogus_error_responses,
393 .maxlen = sizeof(int),
395 .proc_handler = &proc_dointvec
398 .ctl_name = NET_IPV4_ROUTE,
402 .child = ipv4_route_table
404 #ifdef CONFIG_IP_MULTICAST
406 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
407 .procname = "igmp_max_memberships",
408 .data = &sysctl_igmp_max_memberships,
409 .maxlen = sizeof(int),
411 .proc_handler = &proc_dointvec
416 .ctl_name = NET_IPV4_IGMP_MAX_MSF,
417 .procname = "igmp_max_msf",
418 .data = &sysctl_igmp_max_msf,
419 .maxlen = sizeof(int),
421 .proc_handler = &proc_dointvec
424 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD,
425 .procname = "inet_peer_threshold",
426 .data = &inet_peer_threshold,
427 .maxlen = sizeof(int),
429 .proc_handler = &proc_dointvec
432 .ctl_name = NET_IPV4_INET_PEER_MINTTL,
433 .procname = "inet_peer_minttl",
434 .data = &inet_peer_minttl,
435 .maxlen = sizeof(int),
437 .proc_handler = &proc_dointvec_jiffies,
438 .strategy = &sysctl_jiffies
441 .ctl_name = NET_IPV4_INET_PEER_MAXTTL,
442 .procname = "inet_peer_maxttl",
443 .data = &inet_peer_maxttl,
444 .maxlen = sizeof(int),
446 .proc_handler = &proc_dointvec_jiffies,
447 .strategy = &sysctl_jiffies
450 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME,
451 .procname = "inet_peer_gc_mintime",
452 .data = &inet_peer_gc_mintime,
453 .maxlen = sizeof(int),
455 .proc_handler = &proc_dointvec_jiffies,
456 .strategy = &sysctl_jiffies
459 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME,
460 .procname = "inet_peer_gc_maxtime",
461 .data = &inet_peer_gc_maxtime,
462 .maxlen = sizeof(int),
464 .proc_handler = &proc_dointvec_jiffies,
465 .strategy = &sysctl_jiffies
468 .ctl_name = NET_TCP_ORPHAN_RETRIES,
469 .procname = "tcp_orphan_retries",
470 .data = &sysctl_tcp_orphan_retries,
471 .maxlen = sizeof(int),
473 .proc_handler = &proc_dointvec
476 .ctl_name = NET_TCP_FACK,
477 .procname = "tcp_fack",
478 .data = &sysctl_tcp_fack,
479 .maxlen = sizeof(int),
481 .proc_handler = &proc_dointvec
484 .ctl_name = NET_TCP_REORDERING,
485 .procname = "tcp_reordering",
486 .data = &sysctl_tcp_reordering,
487 .maxlen = sizeof(int),
489 .proc_handler = &proc_dointvec
492 .ctl_name = NET_TCP_ECN,
493 .procname = "tcp_ecn",
494 .data = &sysctl_tcp_ecn,
495 .maxlen = sizeof(int),
497 .proc_handler = &proc_dointvec
500 .ctl_name = NET_TCP_DSACK,
501 .procname = "tcp_dsack",
502 .data = &sysctl_tcp_dsack,
503 .maxlen = sizeof(int),
505 .proc_handler = &proc_dointvec
508 .ctl_name = NET_TCP_MEM,
509 .procname = "tcp_mem",
510 .data = &sysctl_tcp_mem,
511 .maxlen = sizeof(sysctl_tcp_mem),
513 .proc_handler = &proc_dointvec
516 .ctl_name = NET_TCP_WMEM,
517 .procname = "tcp_wmem",
518 .data = &sysctl_tcp_wmem,
519 .maxlen = sizeof(sysctl_tcp_wmem),
521 .proc_handler = &proc_dointvec
524 .ctl_name = NET_TCP_RMEM,
525 .procname = "tcp_rmem",
526 .data = &sysctl_tcp_rmem,
527 .maxlen = sizeof(sysctl_tcp_rmem),
529 .proc_handler = &proc_dointvec
532 .ctl_name = NET_TCP_APP_WIN,
533 .procname = "tcp_app_win",
534 .data = &sysctl_tcp_app_win,
535 .maxlen = sizeof(int),
537 .proc_handler = &proc_dointvec
540 .ctl_name = NET_TCP_ADV_WIN_SCALE,
541 .procname = "tcp_adv_win_scale",
542 .data = &sysctl_tcp_adv_win_scale,
543 .maxlen = sizeof(int),
545 .proc_handler = &proc_dointvec
548 .ctl_name = NET_IPV4_ICMP_RATELIMIT,
549 .procname = "icmp_ratelimit",
550 .data = &sysctl_icmp_ratelimit,
551 .maxlen = sizeof(int),
553 .proc_handler = &proc_dointvec
556 .ctl_name = NET_IPV4_ICMP_RATEMASK,
557 .procname = "icmp_ratemask",
558 .data = &sysctl_icmp_ratemask,
559 .maxlen = sizeof(int),
561 .proc_handler = &proc_dointvec
564 .ctl_name = NET_TCP_TW_REUSE,
565 .procname = "tcp_tw_reuse",
566 .data = &sysctl_tcp_tw_reuse,
567 .maxlen = sizeof(int),
569 .proc_handler = &proc_dointvec
572 .ctl_name = NET_TCP_FRTO,
573 .procname = "tcp_frto",
574 .data = &sysctl_tcp_frto,
575 .maxlen = sizeof(int),
577 .proc_handler = &proc_dointvec
580 .ctl_name = NET_TCP_LOW_LATENCY,
581 .procname = "tcp_low_latency",
582 .data = &sysctl_tcp_low_latency,
583 .maxlen = sizeof(int),
585 .proc_handler = &proc_dointvec
588 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL,
589 .procname = "ipfrag_secret_interval",
590 .data = &sysctl_ipfrag_secret_interval,
591 .maxlen = sizeof(int),
593 .proc_handler = &proc_dointvec_jiffies,
594 .strategy = &sysctl_jiffies
597 .ctl_name = NET_TCP_NO_METRICS_SAVE,
598 .procname = "tcp_no_metrics_save",
599 .data = &sysctl_tcp_nometrics_save,
600 .maxlen = sizeof(int),
602 .proc_handler = &proc_dointvec,
605 .ctl_name = NET_TCP_WESTWOOD,
606 .procname = "tcp_westwood",
607 .data = &sysctl_tcp_westwood,
608 .maxlen = sizeof(int),
610 .proc_handler = &proc_dointvec,
613 .ctl_name = NET_TCP_VEGAS,
614 .procname = "tcp_vegas_cong_avoid",
615 .data = &sysctl_tcp_vegas_cong_avoid,
616 .maxlen = sizeof(int),
618 .proc_handler = &proc_dointvec,
621 .ctl_name = NET_TCP_VEGAS_ALPHA,
622 .procname = "tcp_vegas_alpha",
623 .data = &sysctl_tcp_vegas_alpha,
624 .maxlen = sizeof(int),
626 .proc_handler = &proc_dointvec,
629 .ctl_name = NET_TCP_VEGAS_BETA,
630 .procname = "tcp_vegas_beta",
631 .data = &sysctl_tcp_vegas_beta,
632 .maxlen = sizeof(int),
634 .proc_handler = &proc_dointvec,
637 .ctl_name = NET_TCP_VEGAS_GAMMA,
638 .procname = "tcp_vegas_gamma",
639 .data = &sysctl_tcp_vegas_gamma,
640 .maxlen = sizeof(int),
642 .proc_handler = &proc_dointvec,
645 .ctl_name = NET_TCP_BIC,
646 .procname = "tcp_bic",
647 .data = &sysctl_tcp_bic,
648 .maxlen = sizeof(int),
650 .proc_handler = &proc_dointvec,
653 .ctl_name = NET_TCP_BIC_FAST_CONVERGENCE,
654 .procname = "tcp_bic_fast_convergence",
655 .data = &sysctl_tcp_bic_fast_convergence,
656 .maxlen = sizeof(int),
658 .proc_handler = &proc_dointvec,
661 .ctl_name = NET_TCP_BIC_LOW_WINDOW,
662 .procname = "tcp_bic_low_window",
663 .data = &sysctl_tcp_bic_low_window,
664 .maxlen = sizeof(int),
666 .proc_handler = &proc_dointvec,
671 #endif /* CONFIG_SYSCTL */
673 EXPORT_SYMBOL(ipv4_config);