• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/net/sctp/
1/* SCTP kernel implementation
2 * (C) Copyright IBM Corp. 2002, 2004
3 * Copyright (c) 2002 Intel Corp.
4 *
5 * This file is part of the SCTP kernel implementation
6 *
7 * Sysctl related interfaces for SCTP.
8 *
9 * This SCTP implementation is free software;
10 * you can redistribute it and/or modify it under the terms of
11 * the GNU General Public License as published by
12 * the Free Software Foundation; either version 2, or (at your option)
13 * any later version.
14 *
15 * This SCTP implementation is distributed in the hope that it
16 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
17 *                 ************************
18 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 * See the GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with GNU CC; see the file COPYING.  If not, write to
23 * the Free Software Foundation, 59 Temple Place - Suite 330,
24 * Boston, MA 02111-1307, USA.
25 *
26 * Please send any bug reports or fixes you make to the
27 * email address(es):
28 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
29 *
30 * Or submit a bug report through the following website:
31 *    http://www.sf.net/projects/lksctp
32 *
33 * Written or modified by:
34 *    Mingqin Liu           <liuming@us.ibm.com>
35 *    Jon Grimm             <jgrimm@us.ibm.com>
36 *    Ardelle Fan           <ardelle.fan@intel.com>
37 *    Ryan Layer            <rmlayer@us.ibm.com>
38 *    Sridhar Samudrala     <sri@us.ibm.com>
39 *
40 * Any bugs reported given to us we will try to fix... any fixes shared will
41 * be incorporated into the next SCTP release.
42 */
43
44#include <net/sctp/structs.h>
45#include <net/sctp/sctp.h>
46#include <linux/sysctl.h>
47
48static int zero = 0;
49static int one = 1;
50static int timer_max = 86400000; /* ms in one day */
51static int int_max = INT_MAX;
52static int sack_timer_min = 1;
53static int sack_timer_max = 500;
54static int addr_scope_max = 3; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */
55static int rwnd_scale_max = 16;
56
57extern int sysctl_sctp_mem[3];
58extern int sysctl_sctp_rmem[3];
59extern int sysctl_sctp_wmem[3];
60
61static ctl_table sctp_table[] = {
62	{
63		.procname	= "rto_initial",
64		.data		= &sctp_rto_initial,
65		.maxlen		= sizeof(unsigned int),
66		.mode		= 0644,
67		.proc_handler	= proc_dointvec_minmax,
68		.extra1         = &one,
69		.extra2         = &timer_max
70	},
71	{
72		.procname	= "rto_min",
73		.data		= &sctp_rto_min,
74		.maxlen		= sizeof(unsigned int),
75		.mode		= 0644,
76		.proc_handler	= proc_dointvec_minmax,
77		.extra1         = &one,
78		.extra2         = &timer_max
79	},
80	{
81		.procname	= "rto_max",
82		.data		= &sctp_rto_max,
83		.maxlen		= sizeof(unsigned int),
84		.mode		= 0644,
85		.proc_handler	= proc_dointvec_minmax,
86		.extra1         = &one,
87		.extra2         = &timer_max
88	},
89	{
90		.procname	= "valid_cookie_life",
91		.data		= &sctp_valid_cookie_life,
92		.maxlen		= sizeof(unsigned int),
93		.mode		= 0644,
94		.proc_handler	= proc_dointvec_minmax,
95		.extra1         = &one,
96		.extra2         = &timer_max
97	},
98	{
99		.procname	= "max_burst",
100		.data		= &sctp_max_burst,
101		.maxlen		= sizeof(int),
102		.mode		= 0644,
103		.proc_handler	= proc_dointvec_minmax,
104		.extra1		= &zero,
105		.extra2		= &int_max
106	},
107	{
108		.procname	= "association_max_retrans",
109		.data		= &sctp_max_retrans_association,
110		.maxlen		= sizeof(int),
111		.mode		= 0644,
112		.proc_handler	= proc_dointvec_minmax,
113		.extra1		= &one,
114		.extra2		= &int_max
115	},
116	{
117		.procname	= "sndbuf_policy",
118		.data		= &sctp_sndbuf_policy,
119		.maxlen		= sizeof(int),
120		.mode		= 0644,
121		.proc_handler	= proc_dointvec,
122	},
123	{
124		.procname	= "rcvbuf_policy",
125		.data		= &sctp_rcvbuf_policy,
126		.maxlen		= sizeof(int),
127		.mode		= 0644,
128		.proc_handler	= proc_dointvec,
129	},
130	{
131		.procname	= "path_max_retrans",
132		.data		= &sctp_max_retrans_path,
133		.maxlen		= sizeof(int),
134		.mode		= 0644,
135		.proc_handler	= proc_dointvec_minmax,
136		.extra1		= &one,
137		.extra2		= &int_max
138	},
139	{
140		.procname	= "max_init_retransmits",
141		.data		= &sctp_max_retrans_init,
142		.maxlen		= sizeof(int),
143		.mode		= 0644,
144		.proc_handler	= proc_dointvec_minmax,
145		.extra1		= &one,
146		.extra2		= &int_max
147	},
148	{
149		.procname	= "hb_interval",
150		.data		= &sctp_hb_interval,
151		.maxlen		= sizeof(unsigned int),
152		.mode		= 0644,
153		.proc_handler	= proc_dointvec_minmax,
154		.extra1         = &one,
155		.extra2         = &timer_max
156	},
157	{
158		.procname	= "cookie_preserve_enable",
159		.data		= &sctp_cookie_preserve_enable,
160		.maxlen		= sizeof(int),
161		.mode		= 0644,
162		.proc_handler	= proc_dointvec,
163	},
164	{
165		.procname	= "rto_alpha_exp_divisor",
166		.data		= &sctp_rto_alpha,
167		.maxlen		= sizeof(int),
168		.mode		= 0444,
169		.proc_handler	= proc_dointvec,
170	},
171	{
172		.procname	= "rto_beta_exp_divisor",
173		.data		= &sctp_rto_beta,
174		.maxlen		= sizeof(int),
175		.mode		= 0444,
176		.proc_handler	= proc_dointvec,
177	},
178	{
179		.procname	= "addip_enable",
180		.data		= &sctp_addip_enable,
181		.maxlen		= sizeof(int),
182		.mode		= 0644,
183		.proc_handler	= proc_dointvec,
184	},
185	{
186		.procname	= "prsctp_enable",
187		.data		= &sctp_prsctp_enable,
188		.maxlen		= sizeof(int),
189		.mode		= 0644,
190		.proc_handler	= proc_dointvec,
191	},
192	{
193		.procname	= "sack_timeout",
194		.data		= &sctp_sack_timeout,
195		.maxlen		= sizeof(int),
196		.mode		= 0644,
197		.proc_handler	= proc_dointvec_minmax,
198		.extra1         = &sack_timer_min,
199		.extra2         = &sack_timer_max,
200	},
201	{
202		.procname	= "sctp_mem",
203		.data		= &sysctl_sctp_mem,
204		.maxlen		= sizeof(sysctl_sctp_mem),
205		.mode		= 0644,
206		.proc_handler	= proc_dointvec,
207	},
208	{
209		.procname	= "sctp_rmem",
210		.data		= &sysctl_sctp_rmem,
211		.maxlen		= sizeof(sysctl_sctp_rmem),
212		.mode		= 0644,
213		.proc_handler	= proc_dointvec,
214	},
215	{
216		.procname	= "sctp_wmem",
217		.data		= &sysctl_sctp_wmem,
218		.maxlen		= sizeof(sysctl_sctp_wmem),
219		.mode		= 0644,
220		.proc_handler	= proc_dointvec,
221	},
222	{
223		.procname	= "auth_enable",
224		.data		= &sctp_auth_enable,
225		.maxlen		= sizeof(int),
226		.mode		= 0644,
227		.proc_handler	= proc_dointvec,
228	},
229	{
230		.procname	= "addip_noauth_enable",
231		.data		= &sctp_addip_noauth,
232		.maxlen		= sizeof(int),
233		.mode		= 0644,
234		.proc_handler	= proc_dointvec,
235	},
236	{
237		.procname	= "addr_scope_policy",
238		.data		= &sctp_scope_policy,
239		.maxlen		= sizeof(int),
240		.mode		= 0644,
241		.proc_handler	= proc_dointvec_minmax,
242		.extra1		= &zero,
243		.extra2		= &addr_scope_max,
244	},
245	{
246		.procname	= "rwnd_update_shift",
247		.data		= &sctp_rwnd_upd_shift,
248		.maxlen		= sizeof(int),
249		.mode		= 0644,
250		.proc_handler	= &proc_dointvec_minmax,
251		.extra1		= &one,
252		.extra2		= &rwnd_scale_max,
253	},
254
255	{ /* sentinel */ }
256};
257
258static struct ctl_path sctp_path[] = {
259	{ .procname = "net", },
260	{ .procname = "sctp", },
261	{ }
262};
263
264static struct ctl_table_header * sctp_sysctl_header;
265
266/* Sysctl registration.  */
267void sctp_sysctl_register(void)
268{
269	sctp_sysctl_header = register_sysctl_paths(sctp_path, sctp_table);
270}
271
272/* Sysctl deregistration.  */
273void sctp_sysctl_unregister(void)
274{
275	unregister_sysctl_table(sctp_sysctl_header);
276}
277