ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / net / ipv4 / sysctl_net_ipv4.c
1 /*
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 */
20 extern int sysctl_ip_nonlocal_bind;
21
22 /* From icmp.c */
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
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;
32
33 /* From ip_output.c */
34 extern int sysctl_ip_dynaddr;
35
36 /* From icmp.c */
37 extern int sysctl_icmp_ratelimit;
38 extern int sysctl_icmp_ratemask;
39
40 /* From igmp.c */
41 extern int sysctl_igmp_max_memberships;
42 extern int sysctl_igmp_max_msf;
43
44 /* From inetpeer.c */
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;
50
51 #ifdef CONFIG_SYSCTL
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 };
55 #endif
56
57 struct ipv4_config ipv4_config;
58
59 extern ctl_table ipv4_route_table[];
60
61 #ifdef CONFIG_SYSCTL
62
63 static
64 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
65                         void *buffer, size_t *lenp)
66 {
67         int val = ipv4_devconf.forwarding;
68         int ret;
69
70         ret = proc_dointvec(ctl, write, filp, buffer, lenp);
71
72         if (write && ipv4_devconf.forwarding != val)
73                 inet_forward_change();
74
75         return ret;
76 }
77
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, 
81                          void **context)
82 {
83         int *valp = table->data;
84         int new;
85
86         if (!newval || !newlen)
87                 return 0;
88
89         if (newlen != sizeof(int))
90                 return -EINVAL;
91
92         if (get_user(new, (int *)newval))
93                 return -EFAULT;
94
95         if (new == *valp)
96                 return 0;
97
98         if (oldval && oldlenp) {
99                 size_t len;
100
101                 if (get_user(len, oldlenp))
102                         return -EFAULT;
103
104                 if (len) {
105                         if (len > table->maxlen)
106                                 len = table->maxlen;
107                         if (copy_to_user(oldval, valp, len))
108                                 return -EFAULT;
109                         if (put_user(len, oldlenp))
110                                 return -EFAULT;
111                 }
112         }
113
114         *valp = new;
115         inet_forward_change();
116         return 1;
117 }
118
119 ctl_table ipv4_table[] = {
120         {
121                 .ctl_name       = NET_IPV4_TCP_TIMESTAMPS,
122                 .procname       = "tcp_timestamps",
123                 .data           = &sysctl_tcp_timestamps,
124                 .maxlen         = sizeof(int),
125                 .mode           = 0644,
126                 .proc_handler   = &proc_dointvec
127         },
128         {
129                 .ctl_name       = NET_IPV4_TCP_WINDOW_SCALING,
130                 .procname       = "tcp_window_scaling",
131                 .data           = &sysctl_tcp_window_scaling,
132                 .maxlen         = sizeof(int),
133                 .mode           = 0644,
134                 .proc_handler   = &proc_dointvec
135         },
136         {
137                 .ctl_name       = NET_IPV4_TCP_SACK,
138                 .procname       = "tcp_sack",
139                 .data           = &sysctl_tcp_sack,
140                 .maxlen         = sizeof(int),
141                 .mode           = 0644,
142                 .proc_handler   = &proc_dointvec
143         },
144         {
145                 .ctl_name       = NET_IPV4_TCP_RETRANS_COLLAPSE,
146                 .procname       = "tcp_retrans_collapse",
147                 .data           = &sysctl_tcp_retrans_collapse,
148                 .maxlen         = sizeof(int),
149                 .mode           = 0644,
150                 .proc_handler   = &proc_dointvec
151         },
152         {
153                 .ctl_name       = NET_IPV4_FORWARD,
154                 .procname       = "ip_forward",
155                 .data           = &ipv4_devconf.forwarding,
156                 .maxlen         = sizeof(int),
157                 .mode           = 0644,
158                 .proc_handler   = &ipv4_sysctl_forward,
159                 .strategy       = &ipv4_sysctl_forward_strategy
160         },
161         {
162                 .ctl_name       = NET_IPV4_DEFAULT_TTL,
163                 .procname       = "ip_default_ttl",
164                 .data           = &sysctl_ip_default_ttl,
165                 .maxlen         = sizeof(int),
166                 .mode           = 0644,
167                 .proc_handler   = &ipv4_doint_and_flush,
168                 .strategy       = &ipv4_doint_and_flush_strategy,
169         },
170         {
171                 .ctl_name       = NET_IPV4_AUTOCONFIG,
172                 .procname       = "ip_autoconfig",
173                 .data           = &ipv4_config.autoconfig,
174                 .maxlen         = sizeof(int),
175                 .mode           = 0644,
176                 .proc_handler   = &proc_dointvec
177         },
178         {
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),
183                 .mode           = 0644,
184                 .proc_handler   = &proc_dointvec
185         },
186         {
187                 .ctl_name       = NET_IPV4_NONLOCAL_BIND,
188                 .procname       = "ip_nonlocal_bind",
189                 .data           = &sysctl_ip_nonlocal_bind,
190                 .maxlen         = sizeof(int),
191                 .mode           = 0644,
192                 .proc_handler   = &proc_dointvec
193         },
194         {
195                 .ctl_name       = NET_IPV4_TCP_SYN_RETRIES,
196                 .procname       = "tcp_syn_retries",
197                 .data           = &sysctl_tcp_syn_retries,
198                 .maxlen         = sizeof(int),
199                 .mode           = 0644,
200                 .proc_handler   = &proc_dointvec
201         },
202         {
203                 .ctl_name       = NET_TCP_SYNACK_RETRIES,
204                 .procname       = "tcp_synack_retries",
205                 .data           = &sysctl_tcp_synack_retries,
206                 .maxlen         = sizeof(int),
207                 .mode           = 0644,
208                 .proc_handler   = &proc_dointvec
209         },
210         {
211                 .ctl_name       = NET_TCP_MAX_ORPHANS,
212                 .procname       = "tcp_max_orphans",
213                 .data           = &sysctl_tcp_max_orphans,
214                 .maxlen         = sizeof(int),
215                 .mode           = 0644,
216                 .proc_handler   = &proc_dointvec
217         },
218         {
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),
223                 .mode           = 0644,
224                 .proc_handler   = &proc_dointvec
225         },
226         {
227                 .ctl_name       = NET_IPV4_IPFRAG_HIGH_THRESH,
228                 .procname       = "ipfrag_high_thresh",
229                 .data           = &sysctl_ipfrag_high_thresh,
230                 .maxlen         = sizeof(int),
231                 .mode           = 0644,
232                 .proc_handler   = &proc_dointvec
233         },
234         {
235                 .ctl_name       = NET_IPV4_IPFRAG_LOW_THRESH,
236                 .procname       = "ipfrag_low_thresh",
237                 .data           = &sysctl_ipfrag_low_thresh,
238                 .maxlen         = sizeof(int),
239                 .mode           = 0644,
240                 .proc_handler   = &proc_dointvec
241         },
242         {
243                 .ctl_name       = NET_IPV4_DYNADDR,
244                 .procname       = "ip_dynaddr",
245                 .data           = &sysctl_ip_dynaddr,
246                 .maxlen         = sizeof(int),
247                 .mode           = 0644,
248                 .proc_handler   = &proc_dointvec
249         },
250         {
251                 .ctl_name       = NET_IPV4_IPFRAG_TIME,
252                 .procname       = "ipfrag_time",
253                 .data           = &sysctl_ipfrag_time,
254                 .maxlen         = sizeof(int),
255                 .mode           = 0644,
256                 .proc_handler   = &proc_dointvec_jiffies,
257                 .strategy       = &sysctl_jiffies
258         },
259         {
260                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_TIME,
261                 .procname       = "tcp_keepalive_time",
262                 .data           = &sysctl_tcp_keepalive_time,
263                 .maxlen         = sizeof(int),
264                 .mode           = 0644,
265                 .proc_handler   = &proc_dointvec_jiffies,
266                 .strategy       = &sysctl_jiffies
267         },
268         {
269                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_PROBES,
270                 .procname       = "tcp_keepalive_probes",
271                 .data           = &sysctl_tcp_keepalive_probes,
272                 .maxlen         = sizeof(int),
273                 .mode           = 0644,
274                 .proc_handler   = &proc_dointvec
275         },
276         {
277                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_INTVL,
278                 .procname       = "tcp_keepalive_intvl",
279                 .data           = &sysctl_tcp_keepalive_intvl,
280                 .maxlen         = sizeof(int),
281                 .mode           = 0644,
282                 .proc_handler   = &proc_dointvec_jiffies,
283                 .strategy       = &sysctl_jiffies
284         },
285         {
286                 .ctl_name       = NET_IPV4_TCP_RETRIES1,
287                 .procname       = "tcp_retries1",
288                 .data           = &sysctl_tcp_retries1,
289                 .maxlen         = sizeof(int),
290                 .mode           = 0644,
291                 .proc_handler   = &proc_dointvec_minmax,
292                 .strategy       = &sysctl_intvec,
293                 .extra2         = &tcp_retr1_max
294         },
295         {
296                 .ctl_name       = NET_IPV4_TCP_RETRIES2,
297                 .procname       = "tcp_retries2",
298                 .data           = &sysctl_tcp_retries2,
299                 .maxlen         = sizeof(int),
300                 .mode           = 0644,
301                 .proc_handler   = &proc_dointvec
302         },
303         {
304                 .ctl_name       = NET_IPV4_TCP_FIN_TIMEOUT,
305                 .procname       = "tcp_fin_timeout",
306                 .data           = &sysctl_tcp_fin_timeout,
307                 .maxlen         = sizeof(int),
308                 .mode           = 0644,
309                 .proc_handler   = &proc_dointvec_jiffies,
310                 .strategy       = &sysctl_jiffies
311         },
312 #ifdef CONFIG_SYN_COOKIES
313         {
314                 .ctl_name       = NET_TCP_SYNCOOKIES,
315                 .procname       = "tcp_syncookies",
316                 .data           = &sysctl_tcp_syncookies,
317                 .maxlen         = sizeof(int),
318                 .mode           = 0644,
319                 .proc_handler   = &proc_dointvec
320         },
321 #endif
322         {
323                 .ctl_name       = NET_TCP_TW_RECYCLE,
324                 .procname       = "tcp_tw_recycle",
325                 .data           = &sysctl_tcp_tw_recycle,
326                 .maxlen         = sizeof(int),
327                 .mode           = 0644,
328                 .proc_handler   = &proc_dointvec
329         },
330         {
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),
335                 .mode           = 0644,
336                 .proc_handler   = &proc_dointvec
337         },
338         {
339                 .ctl_name       = NET_TCP_STDURG,
340                 .procname       = "tcp_stdurg",
341                 .data           = &sysctl_tcp_stdurg,
342                 .maxlen         = sizeof(int),
343                 .mode           = 0644,
344                 .proc_handler   = &proc_dointvec
345         },
346         {
347                 .ctl_name       = NET_TCP_RFC1337,
348                 .procname       = "tcp_rfc1337",
349                 .data           = &sysctl_tcp_rfc1337,
350                 .maxlen         = sizeof(int),
351                 .mode           = 0644,
352                 .proc_handler   = &proc_dointvec
353         },
354         {
355                 .ctl_name       = NET_TCP_MAX_SYN_BACKLOG,
356                 .procname       = "tcp_max_syn_backlog",
357                 .data           = &sysctl_max_syn_backlog,
358                 .maxlen         = sizeof(int),
359                 .mode           = 0644,
360                 .proc_handler   = &proc_dointvec
361         },
362         {
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),
367                 .mode           = 0644,
368                 .proc_handler   = &proc_dointvec_minmax,
369                 .strategy       = &sysctl_intvec,
370                 .extra1         = ip_local_port_range_min,
371                 .extra2         = ip_local_port_range_max
372         },
373         {
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),
378                 .mode           = 0644,
379                 .proc_handler   = &proc_dointvec
380         },
381         {
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),
386                 .mode           = 0644,
387                 .proc_handler   = &proc_dointvec
388         },
389         {
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),
394                 .mode           = 0644,
395                 .proc_handler   = &proc_dointvec
396         },
397         {
398                 .ctl_name       = NET_IPV4_ROUTE,
399                 .procname       = "route",
400                 .maxlen         = 0,
401                 .mode           = 0555,
402                 .child          = ipv4_route_table
403         },
404 #ifdef CONFIG_IP_MULTICAST
405         {
406                 .ctl_name       = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
407                 .procname       = "igmp_max_memberships",
408                 .data           = &sysctl_igmp_max_memberships,
409                 .maxlen         = sizeof(int),
410                 .mode           = 0644,
411                 .proc_handler   = &proc_dointvec
412         },
413
414 #endif
415         {
416                 .ctl_name       = NET_IPV4_IGMP_MAX_MSF,
417                 .procname       = "igmp_max_msf",
418                 .data           = &sysctl_igmp_max_msf,
419                 .maxlen         = sizeof(int),
420                 .mode           = 0644,
421                 .proc_handler   = &proc_dointvec
422         },
423         {
424                 .ctl_name       = NET_IPV4_INET_PEER_THRESHOLD,
425                 .procname       = "inet_peer_threshold",
426                 .data           = &inet_peer_threshold,
427                 .maxlen         = sizeof(int),
428                 .mode           = 0644,
429                 .proc_handler   = &proc_dointvec
430         },
431         {
432                 .ctl_name       = NET_IPV4_INET_PEER_MINTTL,
433                 .procname       = "inet_peer_minttl",
434                 .data           = &inet_peer_minttl,
435                 .maxlen         = sizeof(int),
436                 .mode           = 0644,
437                 .proc_handler   = &proc_dointvec_jiffies,
438                 .strategy       = &sysctl_jiffies
439         },
440         {
441                 .ctl_name       = NET_IPV4_INET_PEER_MAXTTL,
442                 .procname       = "inet_peer_maxttl",
443                 .data           = &inet_peer_maxttl,
444                 .maxlen         = sizeof(int),
445                 .mode           = 0644,
446                 .proc_handler   = &proc_dointvec_jiffies,
447                 .strategy       = &sysctl_jiffies
448         },
449         {
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),
454                 .mode           = 0644,
455                 .proc_handler   = &proc_dointvec_jiffies,
456                 .strategy       = &sysctl_jiffies
457         },
458         {
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),
463                 .mode           = 0644,
464                 .proc_handler   = &proc_dointvec_jiffies,
465                 .strategy       = &sysctl_jiffies
466         },
467         {
468                 .ctl_name       = NET_TCP_ORPHAN_RETRIES,
469                 .procname       = "tcp_orphan_retries",
470                 .data           = &sysctl_tcp_orphan_retries,
471                 .maxlen         = sizeof(int),
472                 .mode           = 0644,
473                 .proc_handler   = &proc_dointvec
474         },
475         {
476                 .ctl_name       = NET_TCP_FACK,
477                 .procname       = "tcp_fack",
478                 .data           = &sysctl_tcp_fack,
479                 .maxlen         = sizeof(int),
480                 .mode           = 0644,
481                 .proc_handler   = &proc_dointvec
482         },
483         {
484                 .ctl_name       = NET_TCP_REORDERING,
485                 .procname       = "tcp_reordering",
486                 .data           = &sysctl_tcp_reordering,
487                 .maxlen         = sizeof(int),
488                 .mode           = 0644,
489                 .proc_handler   = &proc_dointvec
490         },
491         {
492                 .ctl_name       = NET_TCP_ECN,
493                 .procname       = "tcp_ecn",
494                 .data           = &sysctl_tcp_ecn,
495                 .maxlen         = sizeof(int),
496                 .mode           = 0644,
497                 .proc_handler   = &proc_dointvec
498         },
499         {
500                 .ctl_name       = NET_TCP_DSACK,
501                 .procname       = "tcp_dsack",
502                 .data           = &sysctl_tcp_dsack,
503                 .maxlen         = sizeof(int),
504                 .mode           = 0644,
505                 .proc_handler   = &proc_dointvec
506         },
507         {
508                 .ctl_name       = NET_TCP_MEM,
509                 .procname       = "tcp_mem",
510                 .data           = &sysctl_tcp_mem,
511                 .maxlen         = sizeof(sysctl_tcp_mem),
512                 .mode           = 0644,
513                 .proc_handler   = &proc_dointvec
514         },
515         {
516                 .ctl_name       = NET_TCP_WMEM,
517                 .procname       = "tcp_wmem",
518                 .data           = &sysctl_tcp_wmem,
519                 .maxlen         = sizeof(sysctl_tcp_wmem),
520                 .mode           = 0644,
521                 .proc_handler   = &proc_dointvec
522         },
523         {
524                 .ctl_name       = NET_TCP_RMEM,
525                 .procname       = "tcp_rmem",
526                 .data           = &sysctl_tcp_rmem,
527                 .maxlen         = sizeof(sysctl_tcp_rmem),
528                 .mode           = 0644,
529                 .proc_handler   = &proc_dointvec
530         },
531         {
532                 .ctl_name       = NET_TCP_APP_WIN,
533                 .procname       = "tcp_app_win",
534                 .data           = &sysctl_tcp_app_win,
535                 .maxlen         = sizeof(int),
536                 .mode           = 0644,
537                 .proc_handler   = &proc_dointvec
538         },
539         {
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),
544                 .mode           = 0644,
545                 .proc_handler   = &proc_dointvec
546         },
547         {
548                 .ctl_name       = NET_IPV4_ICMP_RATELIMIT,
549                 .procname       = "icmp_ratelimit",
550                 .data           = &sysctl_icmp_ratelimit,
551                 .maxlen         = sizeof(int),
552                 .mode           = 0644,
553                 .proc_handler   = &proc_dointvec
554         },
555         {
556                 .ctl_name       = NET_IPV4_ICMP_RATEMASK,
557                 .procname       = "icmp_ratemask",
558                 .data           = &sysctl_icmp_ratemask,
559                 .maxlen         = sizeof(int),
560                 .mode           = 0644,
561                 .proc_handler   = &proc_dointvec
562         },
563         {
564                 .ctl_name       = NET_TCP_TW_REUSE,
565                 .procname       = "tcp_tw_reuse",
566                 .data           = &sysctl_tcp_tw_reuse,
567                 .maxlen         = sizeof(int),
568                 .mode           = 0644,
569                 .proc_handler   = &proc_dointvec
570         },
571         {
572                 .ctl_name       = NET_TCP_FRTO,
573                 .procname       = "tcp_frto",
574                 .data           = &sysctl_tcp_frto,
575                 .maxlen         = sizeof(int),
576                 .mode           = 0644,
577                 .proc_handler   = &proc_dointvec
578         },
579         {
580                 .ctl_name       = NET_TCP_LOW_LATENCY,
581                 .procname       = "tcp_low_latency",
582                 .data           = &sysctl_tcp_low_latency,
583                 .maxlen         = sizeof(int),
584                 .mode           = 0644,
585                 .proc_handler   = &proc_dointvec
586         },
587         {
588                 .ctl_name       = NET_IPV4_IPFRAG_SECRET_INTERVAL,
589                 .procname       = "ipfrag_secret_interval",
590                 .data           = &sysctl_ipfrag_secret_interval,
591                 .maxlen         = sizeof(int),
592                 .mode           = 0644,
593                 .proc_handler   = &proc_dointvec_jiffies,
594                 .strategy       = &sysctl_jiffies
595         },
596         {
597                 .ctl_name       = NET_TCP_NO_METRICS_SAVE,
598                 .procname       = "tcp_no_metrics_save",
599                 .data           = &sysctl_tcp_nometrics_save,
600                 .maxlen         = sizeof(int),
601                 .mode           = 0644,
602                 .proc_handler   = &proc_dointvec,
603         },
604         {
605                 .ctl_name       = NET_TCP_WESTWOOD, 
606                 .procname       = "tcp_westwood",
607                 .data           = &sysctl_tcp_westwood,
608                 .maxlen         = sizeof(int),
609                 .mode           = 0644,
610                 .proc_handler   = &proc_dointvec,
611         },
612         {
613                 .ctl_name       = NET_TCP_VEGAS,
614                 .procname       = "tcp_vegas_cong_avoid",
615                 .data           = &sysctl_tcp_vegas_cong_avoid,
616                 .maxlen         = sizeof(int),
617                 .mode           = 0644,
618                 .proc_handler   = &proc_dointvec,
619         },
620         {
621                 .ctl_name       = NET_TCP_VEGAS_ALPHA,
622                 .procname       = "tcp_vegas_alpha",
623                 .data           = &sysctl_tcp_vegas_alpha,
624                 .maxlen         = sizeof(int),
625                 .mode           = 0644,
626                 .proc_handler   = &proc_dointvec,
627         },
628         {
629                 .ctl_name       = NET_TCP_VEGAS_BETA,
630                 .procname       = "tcp_vegas_beta",
631                 .data           = &sysctl_tcp_vegas_beta,
632                 .maxlen         = sizeof(int),
633                 .mode           = 0644,
634                 .proc_handler   = &proc_dointvec,
635         },
636         {
637                 .ctl_name       = NET_TCP_VEGAS_GAMMA,
638                 .procname       = "tcp_vegas_gamma",
639                 .data           = &sysctl_tcp_vegas_gamma,
640                 .maxlen         = sizeof(int),
641                 .mode           = 0644,
642                 .proc_handler   = &proc_dointvec,
643         },
644         {
645                 .ctl_name       = NET_TCP_BIC,
646                 .procname       = "tcp_bic",
647                 .data           = &sysctl_tcp_bic,
648                 .maxlen         = sizeof(int),
649                 .mode           = 0644,
650                 .proc_handler   = &proc_dointvec,
651         },
652         {
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),
657                 .mode           = 0644,
658                 .proc_handler   = &proc_dointvec,
659         },
660         {
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),
665                 .mode           = 0644,
666                 .proc_handler   = &proc_dointvec,
667         },
668         { .ctl_name = 0 }
669 };
670
671 #endif /* CONFIG_SYSCTL */
672
673 EXPORT_SYMBOL(ipv4_config);