blob: 23068bddbf0bb6837edc01ff2f2f8cd34a12c357 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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 */
20extern int sysctl_ip_nonlocal_bind;
21
22/* From icmp.c */
23extern int sysctl_icmp_echo_ignore_all;
24extern int sysctl_icmp_echo_ignore_broadcasts;
25extern int sysctl_icmp_ignore_bogus_error_responses;
J. Simonetti1c2fb7f2005-06-13 15:19:03 -070026extern int sysctl_icmp_errors_use_inbound_ifaddr;
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
28/* From ip_fragment.c */
29extern int sysctl_ipfrag_low_thresh;
30extern int sysctl_ipfrag_high_thresh;
31extern int sysctl_ipfrag_time;
32extern int sysctl_ipfrag_secret_interval;
33
34/* From ip_output.c */
35extern int sysctl_ip_dynaddr;
36
37/* From icmp.c */
38extern int sysctl_icmp_ratelimit;
39extern int sysctl_icmp_ratemask;
40
41/* From igmp.c */
42extern int sysctl_igmp_max_memberships;
43extern int sysctl_igmp_max_msf;
44
45/* From inetpeer.c */
46extern int inet_peer_threshold;
47extern int inet_peer_minttl;
48extern int inet_peer_maxttl;
49extern int inet_peer_gc_mintime;
50extern int inet_peer_gc_maxtime;
51
52#ifdef CONFIG_SYSCTL
53static int tcp_retr1_max = 255;
54static int ip_local_port_range_min[] = { 1, 1 };
55static int ip_local_port_range_max[] = { 65535, 65535 };
56#endif
57
58struct ipv4_config ipv4_config;
59
60extern ctl_table ipv4_route_table[];
61
62#ifdef CONFIG_SYSCTL
63
64static
65int 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
79static 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
121ctl_table ipv4_table[] = {
122 {
123 .ctl_name = NET_IPV4_TCP_TIMESTAMPS,
124 .procname = "tcp_timestamps",
125 .data = &sysctl_tcp_timestamps,
126 .maxlen = sizeof(int),
127 .mode = 0644,
128 .proc_handler = &proc_dointvec
129 },
130 {
131 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING,
132 .procname = "tcp_window_scaling",
133 .data = &sysctl_tcp_window_scaling,
134 .maxlen = sizeof(int),
135 .mode = 0644,
136 .proc_handler = &proc_dointvec
137 },
138 {
139 .ctl_name = NET_IPV4_TCP_SACK,
140 .procname = "tcp_sack",
141 .data = &sysctl_tcp_sack,
142 .maxlen = sizeof(int),
143 .mode = 0644,
144 .proc_handler = &proc_dointvec
145 },
146 {
147 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE,
148 .procname = "tcp_retrans_collapse",
149 .data = &sysctl_tcp_retrans_collapse,
150 .maxlen = sizeof(int),
151 .mode = 0644,
152 .proc_handler = &proc_dointvec
153 },
154 {
155 .ctl_name = NET_IPV4_FORWARD,
156 .procname = "ip_forward",
157 .data = &ipv4_devconf.forwarding,
158 .maxlen = sizeof(int),
159 .mode = 0644,
160 .proc_handler = &ipv4_sysctl_forward,
161 .strategy = &ipv4_sysctl_forward_strategy
162 },
163 {
164 .ctl_name = NET_IPV4_DEFAULT_TTL,
165 .procname = "ip_default_ttl",
166 .data = &sysctl_ip_default_ttl,
167 .maxlen = sizeof(int),
168 .mode = 0644,
169 .proc_handler = &ipv4_doint_and_flush,
170 .strategy = &ipv4_doint_and_flush_strategy,
171 },
172 {
173 .ctl_name = NET_IPV4_AUTOCONFIG,
174 .procname = "ip_autoconfig",
175 .data = &ipv4_config.autoconfig,
176 .maxlen = sizeof(int),
177 .mode = 0644,
178 .proc_handler = &proc_dointvec
179 },
180 {
181 .ctl_name = NET_IPV4_NO_PMTU_DISC,
182 .procname = "ip_no_pmtu_disc",
183 .data = &ipv4_config.no_pmtu_disc,
184 .maxlen = sizeof(int),
185 .mode = 0644,
186 .proc_handler = &proc_dointvec
187 },
188 {
189 .ctl_name = NET_IPV4_NONLOCAL_BIND,
190 .procname = "ip_nonlocal_bind",
191 .data = &sysctl_ip_nonlocal_bind,
192 .maxlen = sizeof(int),
193 .mode = 0644,
194 .proc_handler = &proc_dointvec
195 },
196 {
197 .ctl_name = NET_IPV4_TCP_SYN_RETRIES,
198 .procname = "tcp_syn_retries",
199 .data = &sysctl_tcp_syn_retries,
200 .maxlen = sizeof(int),
201 .mode = 0644,
202 .proc_handler = &proc_dointvec
203 },
204 {
205 .ctl_name = NET_TCP_SYNACK_RETRIES,
206 .procname = "tcp_synack_retries",
207 .data = &sysctl_tcp_synack_retries,
208 .maxlen = sizeof(int),
209 .mode = 0644,
210 .proc_handler = &proc_dointvec
211 },
212 {
213 .ctl_name = NET_TCP_MAX_ORPHANS,
214 .procname = "tcp_max_orphans",
215 .data = &sysctl_tcp_max_orphans,
216 .maxlen = sizeof(int),
217 .mode = 0644,
218 .proc_handler = &proc_dointvec
219 },
220 {
221 .ctl_name = NET_TCP_MAX_TW_BUCKETS,
222 .procname = "tcp_max_tw_buckets",
223 .data = &sysctl_tcp_max_tw_buckets,
224 .maxlen = sizeof(int),
225 .mode = 0644,
226 .proc_handler = &proc_dointvec
227 },
228 {
229 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH,
230 .procname = "ipfrag_high_thresh",
231 .data = &sysctl_ipfrag_high_thresh,
232 .maxlen = sizeof(int),
233 .mode = 0644,
234 .proc_handler = &proc_dointvec
235 },
236 {
237 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH,
238 .procname = "ipfrag_low_thresh",
239 .data = &sysctl_ipfrag_low_thresh,
240 .maxlen = sizeof(int),
241 .mode = 0644,
242 .proc_handler = &proc_dointvec
243 },
244 {
245 .ctl_name = NET_IPV4_DYNADDR,
246 .procname = "ip_dynaddr",
247 .data = &sysctl_ip_dynaddr,
248 .maxlen = sizeof(int),
249 .mode = 0644,
250 .proc_handler = &proc_dointvec
251 },
252 {
253 .ctl_name = NET_IPV4_IPFRAG_TIME,
254 .procname = "ipfrag_time",
255 .data = &sysctl_ipfrag_time,
256 .maxlen = sizeof(int),
257 .mode = 0644,
258 .proc_handler = &proc_dointvec_jiffies,
259 .strategy = &sysctl_jiffies
260 },
261 {
262 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME,
263 .procname = "tcp_keepalive_time",
264 .data = &sysctl_tcp_keepalive_time,
265 .maxlen = sizeof(int),
266 .mode = 0644,
267 .proc_handler = &proc_dointvec_jiffies,
268 .strategy = &sysctl_jiffies
269 },
270 {
271 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES,
272 .procname = "tcp_keepalive_probes",
273 .data = &sysctl_tcp_keepalive_probes,
274 .maxlen = sizeof(int),
275 .mode = 0644,
276 .proc_handler = &proc_dointvec
277 },
278 {
279 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL,
280 .procname = "tcp_keepalive_intvl",
281 .data = &sysctl_tcp_keepalive_intvl,
282 .maxlen = sizeof(int),
283 .mode = 0644,
284 .proc_handler = &proc_dointvec_jiffies,
285 .strategy = &sysctl_jiffies
286 },
287 {
288 .ctl_name = NET_IPV4_TCP_RETRIES1,
289 .procname = "tcp_retries1",
290 .data = &sysctl_tcp_retries1,
291 .maxlen = sizeof(int),
292 .mode = 0644,
293 .proc_handler = &proc_dointvec_minmax,
294 .strategy = &sysctl_intvec,
295 .extra2 = &tcp_retr1_max
296 },
297 {
298 .ctl_name = NET_IPV4_TCP_RETRIES2,
299 .procname = "tcp_retries2",
300 .data = &sysctl_tcp_retries2,
301 .maxlen = sizeof(int),
302 .mode = 0644,
303 .proc_handler = &proc_dointvec
304 },
305 {
306 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT,
307 .procname = "tcp_fin_timeout",
308 .data = &sysctl_tcp_fin_timeout,
309 .maxlen = sizeof(int),
310 .mode = 0644,
311 .proc_handler = &proc_dointvec_jiffies,
312 .strategy = &sysctl_jiffies
313 },
314#ifdef CONFIG_SYN_COOKIES
315 {
316 .ctl_name = NET_TCP_SYNCOOKIES,
317 .procname = "tcp_syncookies",
318 .data = &sysctl_tcp_syncookies,
319 .maxlen = sizeof(int),
320 .mode = 0644,
321 .proc_handler = &proc_dointvec
322 },
323#endif
324 {
325 .ctl_name = NET_TCP_TW_RECYCLE,
326 .procname = "tcp_tw_recycle",
327 .data = &sysctl_tcp_tw_recycle,
328 .maxlen = sizeof(int),
329 .mode = 0644,
330 .proc_handler = &proc_dointvec
331 },
332 {
333 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW,
334 .procname = "tcp_abort_on_overflow",
335 .data = &sysctl_tcp_abort_on_overflow,
336 .maxlen = sizeof(int),
337 .mode = 0644,
338 .proc_handler = &proc_dointvec
339 },
340 {
341 .ctl_name = NET_TCP_STDURG,
342 .procname = "tcp_stdurg",
343 .data = &sysctl_tcp_stdurg,
344 .maxlen = sizeof(int),
345 .mode = 0644,
346 .proc_handler = &proc_dointvec
347 },
348 {
349 .ctl_name = NET_TCP_RFC1337,
350 .procname = "tcp_rfc1337",
351 .data = &sysctl_tcp_rfc1337,
352 .maxlen = sizeof(int),
353 .mode = 0644,
354 .proc_handler = &proc_dointvec
355 },
356 {
357 .ctl_name = NET_TCP_MAX_SYN_BACKLOG,
358 .procname = "tcp_max_syn_backlog",
359 .data = &sysctl_max_syn_backlog,
360 .maxlen = sizeof(int),
361 .mode = 0644,
362 .proc_handler = &proc_dointvec
363 },
364 {
365 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE,
366 .procname = "ip_local_port_range",
367 .data = &sysctl_local_port_range,
368 .maxlen = sizeof(sysctl_local_port_range),
369 .mode = 0644,
370 .proc_handler = &proc_dointvec_minmax,
371 .strategy = &sysctl_intvec,
372 .extra1 = ip_local_port_range_min,
373 .extra2 = ip_local_port_range_max
374 },
375 {
376 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL,
377 .procname = "icmp_echo_ignore_all",
378 .data = &sysctl_icmp_echo_ignore_all,
379 .maxlen = sizeof(int),
380 .mode = 0644,
381 .proc_handler = &proc_dointvec
382 },
383 {
384 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
385 .procname = "icmp_echo_ignore_broadcasts",
386 .data = &sysctl_icmp_echo_ignore_broadcasts,
387 .maxlen = sizeof(int),
388 .mode = 0644,
389 .proc_handler = &proc_dointvec
390 },
391 {
392 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
393 .procname = "icmp_ignore_bogus_error_responses",
394 .data = &sysctl_icmp_ignore_bogus_error_responses,
395 .maxlen = sizeof(int),
396 .mode = 0644,
397 .proc_handler = &proc_dointvec
398 },
399 {
J. Simonetti1c2fb7f2005-06-13 15:19:03 -0700400 .ctl_name = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
401 .procname = "icmp_errors_use_inbound_ifaddr",
402 .data = &sysctl_icmp_errors_use_inbound_ifaddr,
403 .maxlen = sizeof(int),
404 .mode = 0644,
405 .proc_handler = &proc_dointvec
406 },
407 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700408 .ctl_name = NET_IPV4_ROUTE,
409 .procname = "route",
410 .maxlen = 0,
411 .mode = 0555,
412 .child = ipv4_route_table
413 },
414#ifdef CONFIG_IP_MULTICAST
415 {
416 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
417 .procname = "igmp_max_memberships",
418 .data = &sysctl_igmp_max_memberships,
419 .maxlen = sizeof(int),
420 .mode = 0644,
421 .proc_handler = &proc_dointvec
422 },
423
424#endif
425 {
426 .ctl_name = NET_IPV4_IGMP_MAX_MSF,
427 .procname = "igmp_max_msf",
428 .data = &sysctl_igmp_max_msf,
429 .maxlen = sizeof(int),
430 .mode = 0644,
431 .proc_handler = &proc_dointvec
432 },
433 {
434 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD,
435 .procname = "inet_peer_threshold",
436 .data = &inet_peer_threshold,
437 .maxlen = sizeof(int),
438 .mode = 0644,
439 .proc_handler = &proc_dointvec
440 },
441 {
442 .ctl_name = NET_IPV4_INET_PEER_MINTTL,
443 .procname = "inet_peer_minttl",
444 .data = &inet_peer_minttl,
445 .maxlen = sizeof(int),
446 .mode = 0644,
447 .proc_handler = &proc_dointvec_jiffies,
448 .strategy = &sysctl_jiffies
449 },
450 {
451 .ctl_name = NET_IPV4_INET_PEER_MAXTTL,
452 .procname = "inet_peer_maxttl",
453 .data = &inet_peer_maxttl,
454 .maxlen = sizeof(int),
455 .mode = 0644,
456 .proc_handler = &proc_dointvec_jiffies,
457 .strategy = &sysctl_jiffies
458 },
459 {
460 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME,
461 .procname = "inet_peer_gc_mintime",
462 .data = &inet_peer_gc_mintime,
463 .maxlen = sizeof(int),
464 .mode = 0644,
465 .proc_handler = &proc_dointvec_jiffies,
466 .strategy = &sysctl_jiffies
467 },
468 {
469 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME,
470 .procname = "inet_peer_gc_maxtime",
471 .data = &inet_peer_gc_maxtime,
472 .maxlen = sizeof(int),
473 .mode = 0644,
474 .proc_handler = &proc_dointvec_jiffies,
475 .strategy = &sysctl_jiffies
476 },
477 {
478 .ctl_name = NET_TCP_ORPHAN_RETRIES,
479 .procname = "tcp_orphan_retries",
480 .data = &sysctl_tcp_orphan_retries,
481 .maxlen = sizeof(int),
482 .mode = 0644,
483 .proc_handler = &proc_dointvec
484 },
485 {
486 .ctl_name = NET_TCP_FACK,
487 .procname = "tcp_fack",
488 .data = &sysctl_tcp_fack,
489 .maxlen = sizeof(int),
490 .mode = 0644,
491 .proc_handler = &proc_dointvec
492 },
493 {
494 .ctl_name = NET_TCP_REORDERING,
495 .procname = "tcp_reordering",
496 .data = &sysctl_tcp_reordering,
497 .maxlen = sizeof(int),
498 .mode = 0644,
499 .proc_handler = &proc_dointvec
500 },
501 {
502 .ctl_name = NET_TCP_ECN,
503 .procname = "tcp_ecn",
504 .data = &sysctl_tcp_ecn,
505 .maxlen = sizeof(int),
506 .mode = 0644,
507 .proc_handler = &proc_dointvec
508 },
509 {
510 .ctl_name = NET_TCP_DSACK,
511 .procname = "tcp_dsack",
512 .data = &sysctl_tcp_dsack,
513 .maxlen = sizeof(int),
514 .mode = 0644,
515 .proc_handler = &proc_dointvec
516 },
517 {
518 .ctl_name = NET_TCP_MEM,
519 .procname = "tcp_mem",
520 .data = &sysctl_tcp_mem,
521 .maxlen = sizeof(sysctl_tcp_mem),
522 .mode = 0644,
523 .proc_handler = &proc_dointvec
524 },
525 {
526 .ctl_name = NET_TCP_WMEM,
527 .procname = "tcp_wmem",
528 .data = &sysctl_tcp_wmem,
529 .maxlen = sizeof(sysctl_tcp_wmem),
530 .mode = 0644,
531 .proc_handler = &proc_dointvec
532 },
533 {
534 .ctl_name = NET_TCP_RMEM,
535 .procname = "tcp_rmem",
536 .data = &sysctl_tcp_rmem,
537 .maxlen = sizeof(sysctl_tcp_rmem),
538 .mode = 0644,
539 .proc_handler = &proc_dointvec
540 },
541 {
542 .ctl_name = NET_TCP_APP_WIN,
543 .procname = "tcp_app_win",
544 .data = &sysctl_tcp_app_win,
545 .maxlen = sizeof(int),
546 .mode = 0644,
547 .proc_handler = &proc_dointvec
548 },
549 {
550 .ctl_name = NET_TCP_ADV_WIN_SCALE,
551 .procname = "tcp_adv_win_scale",
552 .data = &sysctl_tcp_adv_win_scale,
553 .maxlen = sizeof(int),
554 .mode = 0644,
555 .proc_handler = &proc_dointvec
556 },
557 {
558 .ctl_name = NET_IPV4_ICMP_RATELIMIT,
559 .procname = "icmp_ratelimit",
560 .data = &sysctl_icmp_ratelimit,
561 .maxlen = sizeof(int),
562 .mode = 0644,
563 .proc_handler = &proc_dointvec
564 },
565 {
566 .ctl_name = NET_IPV4_ICMP_RATEMASK,
567 .procname = "icmp_ratemask",
568 .data = &sysctl_icmp_ratemask,
569 .maxlen = sizeof(int),
570 .mode = 0644,
571 .proc_handler = &proc_dointvec
572 },
573 {
574 .ctl_name = NET_TCP_TW_REUSE,
575 .procname = "tcp_tw_reuse",
576 .data = &sysctl_tcp_tw_reuse,
577 .maxlen = sizeof(int),
578 .mode = 0644,
579 .proc_handler = &proc_dointvec
580 },
581 {
582 .ctl_name = NET_TCP_FRTO,
583 .procname = "tcp_frto",
584 .data = &sysctl_tcp_frto,
585 .maxlen = sizeof(int),
586 .mode = 0644,
587 .proc_handler = &proc_dointvec
588 },
589 {
590 .ctl_name = NET_TCP_LOW_LATENCY,
591 .procname = "tcp_low_latency",
592 .data = &sysctl_tcp_low_latency,
593 .maxlen = sizeof(int),
594 .mode = 0644,
595 .proc_handler = &proc_dointvec
596 },
597 {
598 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL,
599 .procname = "ipfrag_secret_interval",
600 .data = &sysctl_ipfrag_secret_interval,
601 .maxlen = sizeof(int),
602 .mode = 0644,
603 .proc_handler = &proc_dointvec_jiffies,
604 .strategy = &sysctl_jiffies
605 },
606 {
607 .ctl_name = NET_TCP_NO_METRICS_SAVE,
608 .procname = "tcp_no_metrics_save",
609 .data = &sysctl_tcp_nometrics_save,
610 .maxlen = sizeof(int),
611 .mode = 0644,
612 .proc_handler = &proc_dointvec,
613 },
614 {
615 .ctl_name = NET_TCP_WESTWOOD,
616 .procname = "tcp_westwood",
617 .data = &sysctl_tcp_westwood,
618 .maxlen = sizeof(int),
619 .mode = 0644,
620 .proc_handler = &proc_dointvec,
621 },
622 {
623 .ctl_name = NET_TCP_VEGAS,
624 .procname = "tcp_vegas_cong_avoid",
625 .data = &sysctl_tcp_vegas_cong_avoid,
626 .maxlen = sizeof(int),
627 .mode = 0644,
628 .proc_handler = &proc_dointvec,
629 },
630 {
631 .ctl_name = NET_TCP_VEGAS_ALPHA,
632 .procname = "tcp_vegas_alpha",
633 .data = &sysctl_tcp_vegas_alpha,
634 .maxlen = sizeof(int),
635 .mode = 0644,
636 .proc_handler = &proc_dointvec,
637 },
638 {
639 .ctl_name = NET_TCP_VEGAS_BETA,
640 .procname = "tcp_vegas_beta",
641 .data = &sysctl_tcp_vegas_beta,
642 .maxlen = sizeof(int),
643 .mode = 0644,
644 .proc_handler = &proc_dointvec,
645 },
646 {
647 .ctl_name = NET_TCP_VEGAS_GAMMA,
648 .procname = "tcp_vegas_gamma",
649 .data = &sysctl_tcp_vegas_gamma,
650 .maxlen = sizeof(int),
651 .mode = 0644,
652 .proc_handler = &proc_dointvec,
653 },
654 {
655 .ctl_name = NET_TCP_BIC,
656 .procname = "tcp_bic",
657 .data = &sysctl_tcp_bic,
658 .maxlen = sizeof(int),
659 .mode = 0644,
660 .proc_handler = &proc_dointvec,
661 },
662 {
663 .ctl_name = NET_TCP_BIC_FAST_CONVERGENCE,
664 .procname = "tcp_bic_fast_convergence",
665 .data = &sysctl_tcp_bic_fast_convergence,
666 .maxlen = sizeof(int),
667 .mode = 0644,
668 .proc_handler = &proc_dointvec,
669 },
670 {
671 .ctl_name = NET_TCP_BIC_LOW_WINDOW,
672 .procname = "tcp_bic_low_window",
673 .data = &sysctl_tcp_bic_low_window,
674 .maxlen = sizeof(int),
675 .mode = 0644,
676 .proc_handler = &proc_dointvec,
677 },
678 {
679 .ctl_name = NET_TCP_MODERATE_RCVBUF,
680 .procname = "tcp_moderate_rcvbuf",
681 .data = &sysctl_tcp_moderate_rcvbuf,
682 .maxlen = sizeof(int),
683 .mode = 0644,
684 .proc_handler = &proc_dointvec,
685 },
686 {
687 .ctl_name = NET_TCP_TSO_WIN_DIVISOR,
688 .procname = "tcp_tso_win_divisor",
689 .data = &sysctl_tcp_tso_win_divisor,
690 .maxlen = sizeof(int),
691 .mode = 0644,
692 .proc_handler = &proc_dointvec,
693 },
694 {
695 .ctl_name = NET_TCP_BIC_BETA,
696 .procname = "tcp_bic_beta",
697 .data = &sysctl_tcp_bic_beta,
698 .maxlen = sizeof(int),
699 .mode = 0644,
700 .proc_handler = &proc_dointvec,
701 },
702 { .ctl_name = 0 }
703};
704
705#endif /* CONFIG_SYSCTL */
706
707EXPORT_SYMBOL(ipv4_config);