Merge to Fedora Core 2 kernel-2.6.8-1.521
[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 #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];
32 #endif
33
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;
39
40 /* From ip_output.c */
41 extern int sysctl_ip_dynaddr;
42
43 /* From icmp.c */
44 extern int sysctl_icmp_ratelimit;
45 extern int sysctl_icmp_ratemask;
46
47 /* From igmp.c */
48 extern int sysctl_igmp_max_memberships;
49 extern int sysctl_igmp_max_msf;
50
51 /* From inetpeer.c */
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;
57
58 #ifdef CONFIG_SYSCTL
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 };
62 #endif
63
64 struct ipv4_config ipv4_config;
65
66 extern ctl_table ipv4_route_table[];
67
68 #ifdef CONFIG_SYSCTL
69
70 static
71 int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
72                         void __user *buffer, size_t *lenp, loff_t *ppos)
73 {
74         int val = ipv4_devconf.forwarding;
75         int ret;
76
77         ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
78
79         if (write && ipv4_devconf.forwarding != val)
80                 inet_forward_change();
81
82         return ret;
83 }
84
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, 
89                          void **context)
90 {
91         int *valp = table->data;
92         int new;
93
94         if (!newval || !newlen)
95                 return 0;
96
97         if (newlen != sizeof(int))
98                 return -EINVAL;
99
100         if (get_user(new, (int __user *)newval))
101                 return -EFAULT;
102
103         if (new == *valp)
104                 return 0;
105
106         if (oldval && oldlenp) {
107                 size_t len;
108
109                 if (get_user(len, oldlenp))
110                         return -EFAULT;
111
112                 if (len) {
113                         if (len > table->maxlen)
114                                 len = table->maxlen;
115                         if (copy_to_user(oldval, valp, len))
116                                 return -EFAULT;
117                         if (put_user(len, oldlenp))
118                                 return -EFAULT;
119                 }
120         }
121
122         *valp = new;
123         inet_forward_change();
124         return 1;
125 }
126
127 ctl_table ipv4_table[] = {
128         {
129                 .ctl_name       = NET_IPV4_TCP_TIMESTAMPS,
130                 .procname       = "tcp_timestamps",
131                 .data           = &sysctl_tcp_timestamps,
132                 .maxlen         = sizeof(int),
133                 .mode           = 0644,
134                 .proc_handler   = &proc_dointvec
135         },
136         {
137                 .ctl_name       = NET_IPV4_TCP_WINDOW_SCALING,
138                 .procname       = "tcp_window_scaling",
139                 .data           = &sysctl_tcp_window_scaling,
140                 .maxlen         = sizeof(int),
141                 .mode           = 0644,
142                 .proc_handler   = &proc_dointvec
143         },
144         {
145                 .ctl_name       = NET_IPV4_TCP_SACK,
146                 .procname       = "tcp_sack",
147                 .data           = &sysctl_tcp_sack,
148                 .maxlen         = sizeof(int),
149                 .mode           = 0644,
150                 .proc_handler   = &proc_dointvec
151         },
152         {
153                 .ctl_name       = NET_IPV4_TCP_RETRANS_COLLAPSE,
154                 .procname       = "tcp_retrans_collapse",
155                 .data           = &sysctl_tcp_retrans_collapse,
156                 .maxlen         = sizeof(int),
157                 .mode           = 0644,
158                 .proc_handler   = &proc_dointvec
159         },
160         {
161                 .ctl_name       = NET_IPV4_FORWARD,
162                 .procname       = "ip_forward",
163                 .data           = &ipv4_devconf.forwarding,
164                 .maxlen         = sizeof(int),
165                 .mode           = 0644,
166                 .proc_handler   = &ipv4_sysctl_forward,
167                 .strategy       = &ipv4_sysctl_forward_strategy
168         },
169         {
170                 .ctl_name       = NET_IPV4_DEFAULT_TTL,
171                 .procname       = "ip_default_ttl",
172                 .data           = &sysctl_ip_default_ttl,
173                 .maxlen         = sizeof(int),
174                 .mode           = 0644,
175                 .proc_handler   = &ipv4_doint_and_flush,
176                 .strategy       = &ipv4_doint_and_flush_strategy,
177         },
178         {
179                 .ctl_name       = NET_IPV4_AUTOCONFIG,
180                 .procname       = "ip_autoconfig",
181                 .data           = &ipv4_config.autoconfig,
182                 .maxlen         = sizeof(int),
183                 .mode           = 0644,
184                 .proc_handler   = &proc_dointvec
185         },
186         {
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),
191                 .mode           = 0644,
192                 .proc_handler   = &proc_dointvec
193         },
194         {
195                 .ctl_name       = NET_IPV4_NONLOCAL_BIND,
196                 .procname       = "ip_nonlocal_bind",
197                 .data           = &sysctl_ip_nonlocal_bind,
198                 .maxlen         = sizeof(int),
199                 .mode           = 0644,
200                 .proc_handler   = &proc_dointvec
201         },
202         {
203                 .ctl_name       = NET_IPV4_TCP_SYN_RETRIES,
204                 .procname       = "tcp_syn_retries",
205                 .data           = &sysctl_tcp_syn_retries,
206                 .maxlen         = sizeof(int),
207                 .mode           = 0644,
208                 .proc_handler   = &proc_dointvec
209         },
210         {
211                 .ctl_name       = NET_TCP_SYNACK_RETRIES,
212                 .procname       = "tcp_synack_retries",
213                 .data           = &sysctl_tcp_synack_retries,
214                 .maxlen         = sizeof(int),
215                 .mode           = 0644,
216                 .proc_handler   = &proc_dointvec
217         },
218         {
219                 .ctl_name       = NET_TCP_MAX_ORPHANS,
220                 .procname       = "tcp_max_orphans",
221                 .data           = &sysctl_tcp_max_orphans,
222                 .maxlen         = sizeof(int),
223                 .mode           = 0644,
224                 .proc_handler   = &proc_dointvec
225         },
226         {
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),
231                 .mode           = 0644,
232                 .proc_handler   = &proc_dointvec
233         },
234         {
235                 .ctl_name       = NET_IPV4_IPFRAG_HIGH_THRESH,
236                 .procname       = "ipfrag_high_thresh",
237                 .data           = &sysctl_ipfrag_high_thresh,
238                 .maxlen         = sizeof(int),
239                 .mode           = 0644,
240                 .proc_handler   = &proc_dointvec
241         },
242         {
243                 .ctl_name       = NET_IPV4_IPFRAG_LOW_THRESH,
244                 .procname       = "ipfrag_low_thresh",
245                 .data           = &sysctl_ipfrag_low_thresh,
246                 .maxlen         = sizeof(int),
247                 .mode           = 0644,
248                 .proc_handler   = &proc_dointvec
249         },
250         {
251                 .ctl_name       = NET_IPV4_DYNADDR,
252                 .procname       = "ip_dynaddr",
253                 .data           = &sysctl_ip_dynaddr,
254                 .maxlen         = sizeof(int),
255                 .mode           = 0644,
256                 .proc_handler   = &proc_dointvec
257         },
258         {
259                 .ctl_name       = NET_IPV4_IPFRAG_TIME,
260                 .procname       = "ipfrag_time",
261                 .data           = &sysctl_ipfrag_time,
262                 .maxlen         = sizeof(int),
263                 .mode           = 0644,
264                 .proc_handler   = &proc_dointvec_jiffies,
265                 .strategy       = &sysctl_jiffies
266         },
267         {
268                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_TIME,
269                 .procname       = "tcp_keepalive_time",
270                 .data           = &sysctl_tcp_keepalive_time,
271                 .maxlen         = sizeof(int),
272                 .mode           = 0644,
273                 .proc_handler   = &proc_dointvec_jiffies,
274                 .strategy       = &sysctl_jiffies
275         },
276         {
277                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_PROBES,
278                 .procname       = "tcp_keepalive_probes",
279                 .data           = &sysctl_tcp_keepalive_probes,
280                 .maxlen         = sizeof(int),
281                 .mode           = 0644,
282                 .proc_handler   = &proc_dointvec
283         },
284         {
285                 .ctl_name       = NET_IPV4_TCP_KEEPALIVE_INTVL,
286                 .procname       = "tcp_keepalive_intvl",
287                 .data           = &sysctl_tcp_keepalive_intvl,
288                 .maxlen         = sizeof(int),
289                 .mode           = 0644,
290                 .proc_handler   = &proc_dointvec_jiffies,
291                 .strategy       = &sysctl_jiffies
292         },
293         {
294                 .ctl_name       = NET_IPV4_TCP_RETRIES1,
295                 .procname       = "tcp_retries1",
296                 .data           = &sysctl_tcp_retries1,
297                 .maxlen         = sizeof(int),
298                 .mode           = 0644,
299                 .proc_handler   = &proc_dointvec_minmax,
300                 .strategy       = &sysctl_intvec,
301                 .extra2         = &tcp_retr1_max
302         },
303         {
304                 .ctl_name       = NET_IPV4_TCP_RETRIES2,
305                 .procname       = "tcp_retries2",
306                 .data           = &sysctl_tcp_retries2,
307                 .maxlen         = sizeof(int),
308                 .mode           = 0644,
309                 .proc_handler   = &proc_dointvec
310         },
311         {
312                 .ctl_name       = NET_IPV4_TCP_FIN_TIMEOUT,
313                 .procname       = "tcp_fin_timeout",
314                 .data           = &sysctl_tcp_fin_timeout,
315                 .maxlen         = sizeof(int),
316                 .mode           = 0644,
317                 .proc_handler   = &proc_dointvec_jiffies,
318                 .strategy       = &sysctl_jiffies
319         },
320 #ifdef CONFIG_SYN_COOKIES
321         {
322                 .ctl_name       = NET_TCP_SYNCOOKIES,
323                 .procname       = "tcp_syncookies",
324                 .data           = &sysctl_tcp_syncookies,
325                 .maxlen         = sizeof(int),
326                 .mode           = 0644,
327                 .proc_handler   = &proc_dointvec
328         },
329 #endif
330         {
331                 .ctl_name       = NET_TCP_TW_RECYCLE,
332                 .procname       = "tcp_tw_recycle",
333                 .data           = &sysctl_tcp_tw_recycle,
334                 .maxlen         = sizeof(int),
335                 .mode           = 0644,
336                 .proc_handler   = &proc_dointvec
337         },
338         {
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),
343                 .mode           = 0644,
344                 .proc_handler   = &proc_dointvec
345         },
346         {
347                 .ctl_name       = NET_TCP_STDURG,
348                 .procname       = "tcp_stdurg",
349                 .data           = &sysctl_tcp_stdurg,
350                 .maxlen         = sizeof(int),
351                 .mode           = 0644,
352                 .proc_handler   = &proc_dointvec
353         },
354         {
355                 .ctl_name       = NET_TCP_RFC1337,
356                 .procname       = "tcp_rfc1337",
357                 .data           = &sysctl_tcp_rfc1337,
358                 .maxlen         = sizeof(int),
359                 .mode           = 0644,
360                 .proc_handler   = &proc_dointvec
361         },
362         {
363                 .ctl_name       = NET_TCP_MAX_SYN_BACKLOG,
364                 .procname       = "tcp_max_syn_backlog",
365                 .data           = &sysctl_max_syn_backlog,
366                 .maxlen         = sizeof(int),
367                 .mode           = 0644,
368                 .proc_handler   = &proc_dointvec
369         },
370         {
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),
375                 .mode           = 0644,
376                 .proc_handler   = &proc_dointvec_minmax,
377                 .strategy       = &sysctl_intvec,
378                 .extra1         = ip_local_port_range_min,
379                 .extra2         = ip_local_port_range_max
380         },
381         {
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),
386                 .mode           = 0644,
387                 .proc_handler   = &proc_dointvec
388         },
389         {
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),
394                 .mode           = 0644,
395                 .proc_handler   = &proc_dointvec
396         },
397         {
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),
402                 .mode           = 0644,
403                 .proc_handler   = &proc_dointvec
404         },
405 #ifdef CONFIG_ICMP_IPOD
406         {
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),
411                 .mode           = 0444,
412                 .proc_handler   = &proc_dointvec
413         },
414         {
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),
419                 .mode           = 0644,
420                 .proc_handler   = &proc_dointvec
421         },
422         {
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),
427                 .mode           = 0644,
428                 .proc_handler   = &proc_dointvec
429         },
430         {
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),
435                 .mode           = 0644,
436                 .proc_handler   = &proc_dointvec
437         },
438         {
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),
443                 .mode           = 0600,
444                 .proc_handler   = &proc_dostring,
445                 .strategy       = &sysctl_string
446         },
447 #endif
448         {
449                 .ctl_name       = NET_IPV4_ROUTE,
450                 .procname       = "route",
451                 .maxlen         = 0,
452                 .mode           = 0555,
453                 .child          = ipv4_route_table
454         },
455 #ifdef CONFIG_IP_MULTICAST
456         {
457                 .ctl_name       = NET_IPV4_IGMP_MAX_MEMBERSHIPS,
458                 .procname       = "igmp_max_memberships",
459                 .data           = &sysctl_igmp_max_memberships,
460                 .maxlen         = sizeof(int),
461                 .mode           = 0644,
462                 .proc_handler   = &proc_dointvec
463         },
464
465 #endif
466         {
467                 .ctl_name       = NET_IPV4_IGMP_MAX_MSF,
468                 .procname       = "igmp_max_msf",
469                 .data           = &sysctl_igmp_max_msf,
470                 .maxlen         = sizeof(int),
471                 .mode           = 0644,
472                 .proc_handler   = &proc_dointvec
473         },
474         {
475                 .ctl_name       = NET_IPV4_INET_PEER_THRESHOLD,
476                 .procname       = "inet_peer_threshold",
477                 .data           = &inet_peer_threshold,
478                 .maxlen         = sizeof(int),
479                 .mode           = 0644,
480                 .proc_handler   = &proc_dointvec
481         },
482         {
483                 .ctl_name       = NET_IPV4_INET_PEER_MINTTL,
484                 .procname       = "inet_peer_minttl",
485                 .data           = &inet_peer_minttl,
486                 .maxlen         = sizeof(int),
487                 .mode           = 0644,
488                 .proc_handler   = &proc_dointvec_jiffies,
489                 .strategy       = &sysctl_jiffies
490         },
491         {
492                 .ctl_name       = NET_IPV4_INET_PEER_MAXTTL,
493                 .procname       = "inet_peer_maxttl",
494                 .data           = &inet_peer_maxttl,
495                 .maxlen         = sizeof(int),
496                 .mode           = 0644,
497                 .proc_handler   = &proc_dointvec_jiffies,
498                 .strategy       = &sysctl_jiffies
499         },
500         {
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),
505                 .mode           = 0644,
506                 .proc_handler   = &proc_dointvec_jiffies,
507                 .strategy       = &sysctl_jiffies
508         },
509         {
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),
514                 .mode           = 0644,
515                 .proc_handler   = &proc_dointvec_jiffies,
516                 .strategy       = &sysctl_jiffies
517         },
518         {
519                 .ctl_name       = NET_TCP_ORPHAN_RETRIES,
520                 .procname       = "tcp_orphan_retries",
521                 .data           = &sysctl_tcp_orphan_retries,
522                 .maxlen         = sizeof(int),
523                 .mode           = 0644,
524                 .proc_handler   = &proc_dointvec
525         },
526         {
527                 .ctl_name       = NET_TCP_FACK,
528                 .procname       = "tcp_fack",
529                 .data           = &sysctl_tcp_fack,
530                 .maxlen         = sizeof(int),
531                 .mode           = 0644,
532                 .proc_handler   = &proc_dointvec
533         },
534         {
535                 .ctl_name       = NET_TCP_REORDERING,
536                 .procname       = "tcp_reordering",
537                 .data           = &sysctl_tcp_reordering,
538                 .maxlen         = sizeof(int),
539                 .mode           = 0644,
540                 .proc_handler   = &proc_dointvec
541         },
542         {
543                 .ctl_name       = NET_TCP_ECN,
544                 .procname       = "tcp_ecn",
545                 .data           = &sysctl_tcp_ecn,
546                 .maxlen         = sizeof(int),
547                 .mode           = 0644,
548                 .proc_handler   = &proc_dointvec
549         },
550         {
551                 .ctl_name       = NET_TCP_DSACK,
552                 .procname       = "tcp_dsack",
553                 .data           = &sysctl_tcp_dsack,
554                 .maxlen         = sizeof(int),
555                 .mode           = 0644,
556                 .proc_handler   = &proc_dointvec
557         },
558         {
559                 .ctl_name       = NET_TCP_MEM,
560                 .procname       = "tcp_mem",
561                 .data           = &sysctl_tcp_mem,
562                 .maxlen         = sizeof(sysctl_tcp_mem),
563                 .mode           = 0644,
564                 .proc_handler   = &proc_dointvec
565         },
566         {
567                 .ctl_name       = NET_TCP_WMEM,
568                 .procname       = "tcp_wmem",
569                 .data           = &sysctl_tcp_wmem,
570                 .maxlen         = sizeof(sysctl_tcp_wmem),
571                 .mode           = 0644,
572                 .proc_handler   = &proc_dointvec
573         },
574         {
575                 .ctl_name       = NET_TCP_RMEM,
576                 .procname       = "tcp_rmem",
577                 .data           = &sysctl_tcp_rmem,
578                 .maxlen         = sizeof(sysctl_tcp_rmem),
579                 .mode           = 0644,
580                 .proc_handler   = &proc_dointvec
581         },
582         {
583                 .ctl_name       = NET_TCP_APP_WIN,
584                 .procname       = "tcp_app_win",
585                 .data           = &sysctl_tcp_app_win,
586                 .maxlen         = sizeof(int),
587                 .mode           = 0644,
588                 .proc_handler   = &proc_dointvec
589         },
590         {
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),
595                 .mode           = 0644,
596                 .proc_handler   = &proc_dointvec
597         },
598         {
599                 .ctl_name       = NET_IPV4_ICMP_RATELIMIT,
600                 .procname       = "icmp_ratelimit",
601                 .data           = &sysctl_icmp_ratelimit,
602                 .maxlen         = sizeof(int),
603                 .mode           = 0644,
604                 .proc_handler   = &proc_dointvec
605         },
606         {
607                 .ctl_name       = NET_IPV4_ICMP_RATEMASK,
608                 .procname       = "icmp_ratemask",
609                 .data           = &sysctl_icmp_ratemask,
610                 .maxlen         = sizeof(int),
611                 .mode           = 0644,
612                 .proc_handler   = &proc_dointvec
613         },
614         {
615                 .ctl_name       = NET_TCP_TW_REUSE,
616                 .procname       = "tcp_tw_reuse",
617                 .data           = &sysctl_tcp_tw_reuse,
618                 .maxlen         = sizeof(int),
619                 .mode           = 0644,
620                 .proc_handler   = &proc_dointvec
621         },
622         {
623                 .ctl_name       = NET_TCP_FRTO,
624                 .procname       = "tcp_frto",
625                 .data           = &sysctl_tcp_frto,
626                 .maxlen         = sizeof(int),
627                 .mode           = 0644,
628                 .proc_handler   = &proc_dointvec
629         },
630         {
631                 .ctl_name       = NET_TCP_LOW_LATENCY,
632                 .procname       = "tcp_low_latency",
633                 .data           = &sysctl_tcp_low_latency,
634                 .maxlen         = sizeof(int),
635                 .mode           = 0644,
636                 .proc_handler   = &proc_dointvec
637         },
638         {
639                 .ctl_name       = NET_IPV4_IPFRAG_SECRET_INTERVAL,
640                 .procname       = "ipfrag_secret_interval",
641                 .data           = &sysctl_ipfrag_secret_interval,
642                 .maxlen         = sizeof(int),
643                 .mode           = 0644,
644                 .proc_handler   = &proc_dointvec_jiffies,
645                 .strategy       = &sysctl_jiffies
646         },
647         {
648                 .ctl_name       = NET_TCP_NO_METRICS_SAVE,
649                 .procname       = "tcp_no_metrics_save",
650                 .data           = &sysctl_tcp_nometrics_save,
651                 .maxlen         = sizeof(int),
652                 .mode           = 0644,
653                 .proc_handler   = &proc_dointvec,
654         },
655         {
656                 .ctl_name       = NET_TCP_WESTWOOD, 
657                 .procname       = "tcp_westwood",
658                 .data           = &sysctl_tcp_westwood,
659                 .maxlen         = sizeof(int),
660                 .mode           = 0644,
661                 .proc_handler   = &proc_dointvec,
662         },
663         {
664                 .ctl_name       = NET_TCP_VEGAS,
665                 .procname       = "tcp_vegas_cong_avoid",
666                 .data           = &sysctl_tcp_vegas_cong_avoid,
667                 .maxlen         = sizeof(int),
668                 .mode           = 0644,
669                 .proc_handler   = &proc_dointvec,
670         },
671         {
672                 .ctl_name       = NET_TCP_VEGAS_ALPHA,
673                 .procname       = "tcp_vegas_alpha",
674                 .data           = &sysctl_tcp_vegas_alpha,
675                 .maxlen         = sizeof(int),
676                 .mode           = 0644,
677                 .proc_handler   = &proc_dointvec,
678         },
679         {
680                 .ctl_name       = NET_TCP_VEGAS_BETA,
681                 .procname       = "tcp_vegas_beta",
682                 .data           = &sysctl_tcp_vegas_beta,
683                 .maxlen         = sizeof(int),
684                 .mode           = 0644,
685                 .proc_handler   = &proc_dointvec,
686         },
687         {
688                 .ctl_name       = NET_TCP_VEGAS_GAMMA,
689                 .procname       = "tcp_vegas_gamma",
690                 .data           = &sysctl_tcp_vegas_gamma,
691                 .maxlen         = sizeof(int),
692                 .mode           = 0644,
693                 .proc_handler   = &proc_dointvec,
694         },
695         {
696                 .ctl_name       = NET_TCP_BIC,
697                 .procname       = "tcp_bic",
698                 .data           = &sysctl_tcp_bic,
699                 .maxlen         = sizeof(int),
700                 .mode           = 0644,
701                 .proc_handler   = &proc_dointvec,
702         },
703         {
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),
708                 .mode           = 0644,
709                 .proc_handler   = &proc_dointvec,
710         },
711         {
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),
716                 .mode           = 0644,
717                 .proc_handler   = &proc_dointvec,
718         },
719         {
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),
724                 .mode           = 0644,
725                 .proc_handler   = &proc_dointvec,
726         },
727         {
728                 .ctl_name       = NET_TCP_MODERATE_RCVBUF,
729                 .procname       = "tcp_moderate_rcvbuf",
730                 .data           = &sysctl_tcp_moderate_rcvbuf,
731                 .maxlen         = sizeof(int),
732                 .mode           = 0644,
733                 .proc_handler   = &proc_dointvec,
734         },
735         { .ctl_name = 0 }
736 };
737
738 #endif /* CONFIG_SYSCTL */
739
740 EXPORT_SYMBOL(ipv4_config);