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