sysctl.c 6.76 KB
Newer Older
1
/* SCTP kernel implementation
Linus Torvalds's avatar
Linus Torvalds committed
2
3
4
 * (C) Copyright IBM Corp. 2002, 2004
 * Copyright (c) 2002 Intel Corp.
 *
5
 * This file is part of the SCTP kernel implementation
Linus Torvalds's avatar
Linus Torvalds committed
6
7
8
 *
 * Sysctl related interfaces for SCTP.
 *
9
 * This SCTP implementation is free software;
Linus Torvalds's avatar
Linus Torvalds committed
10
11
12
13
14
 * you can redistribute it and/or modify it under the terms of
 * the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
15
 * This SCTP implementation is distributed in the hope that it
Linus Torvalds's avatar
Linus Torvalds committed
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
 *                 ************************
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GNU CC; see the file COPYING.  If not, write to
 * the Free Software Foundation, 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * Please send any bug reports or fixes you make to the
 * email address(es):
 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
 *
 * Or submit a bug report through the following website:
 *    http://www.sf.net/projects/lksctp
 *
 * Written or modified by:
 *    Mingqin Liu           <liuming@us.ibm.com>
 *    Jon Grimm             <jgrimm@us.ibm.com>
 *    Ardelle Fan           <ardelle.fan@intel.com>
 *    Ryan Layer            <rmlayer@us.ibm.com>
 *    Sridhar Samudrala     <sri@us.ibm.com>
 *
 * Any bugs reported given to us we will try to fix... any fixes shared will
 * be incorporated into the next SCTP release.
 */

#include <net/sctp/structs.h>
45
#include <net/sctp/sctp.h>
Linus Torvalds's avatar
Linus Torvalds committed
46
47
#include <linux/sysctl.h>

48
49
50
51
static int zero = 0;
static int one = 1;
static int timer_max = 86400000; /* ms in one day */
static int int_max = INT_MAX;
52
53
static int sack_timer_min = 1;
static int sack_timer_max = 500;
54
static int addr_scope_max = 3; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */
55
static int rwnd_scale_max = 16;
Linus Torvalds's avatar
Linus Torvalds committed
56

57
58
59
extern int sysctl_sctp_mem[3];
extern int sysctl_sctp_rmem[3];
extern int sysctl_sctp_wmem[3];
60

Linus Torvalds's avatar
Linus Torvalds committed
61
62
63
64
static ctl_table sctp_table[] = {
	{
		.procname	= "rto_initial",
		.data		= &sctp_rto_initial,
65
		.maxlen		= sizeof(unsigned int),
Linus Torvalds's avatar
Linus Torvalds committed
66
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
67
		.proc_handler	= proc_dointvec_minmax,
68
69
		.extra1         = &one,
		.extra2         = &timer_max
Linus Torvalds's avatar
Linus Torvalds committed
70
71
72
73
	},
	{
		.procname	= "rto_min",
		.data		= &sctp_rto_min,
74
		.maxlen		= sizeof(unsigned int),
Linus Torvalds's avatar
Linus Torvalds committed
75
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
76
		.proc_handler	= proc_dointvec_minmax,
77
78
		.extra1         = &one,
		.extra2         = &timer_max
Linus Torvalds's avatar
Linus Torvalds committed
79
80
81
82
	},
	{
		.procname	= "rto_max",
		.data		= &sctp_rto_max,
83
		.maxlen		= sizeof(unsigned int),
Linus Torvalds's avatar
Linus Torvalds committed
84
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
85
		.proc_handler	= proc_dointvec_minmax,
86
87
		.extra1         = &one,
		.extra2         = &timer_max
Linus Torvalds's avatar
Linus Torvalds committed
88
89
90
91
	},
	{
		.procname	= "valid_cookie_life",
		.data		= &sctp_valid_cookie_life,
92
		.maxlen		= sizeof(unsigned int),
Linus Torvalds's avatar
Linus Torvalds committed
93
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
94
		.proc_handler	= proc_dointvec_minmax,
95
96
		.extra1         = &one,
		.extra2         = &timer_max
Linus Torvalds's avatar
Linus Torvalds committed
97
98
99
100
101
102
	},
	{
		.procname	= "max_burst",
		.data		= &sctp_max_burst,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
103
		.proc_handler	= proc_dointvec_minmax,
104
105
		.extra1		= &zero,
		.extra2		= &int_max
Linus Torvalds's avatar
Linus Torvalds committed
106
107
108
109
110
111
	},
	{
		.procname	= "association_max_retrans",
		.data		= &sctp_max_retrans_association,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
112
		.proc_handler	= proc_dointvec_minmax,
113
114
		.extra1		= &one,
		.extra2		= &int_max
Linus Torvalds's avatar
Linus Torvalds committed
115
	},
116
117
118
119
120
	{
		.procname	= "sndbuf_policy",
		.data		= &sctp_sndbuf_policy,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
121
		.proc_handler	= proc_dointvec,
122
	},
123
124
125
126
127
	{
		.procname	= "rcvbuf_policy",
		.data		= &sctp_rcvbuf_policy,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
128
		.proc_handler	= proc_dointvec,
129
	},
Linus Torvalds's avatar
Linus Torvalds committed
130
131
132
133
134
	{
		.procname	= "path_max_retrans",
		.data		= &sctp_max_retrans_path,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
135
		.proc_handler	= proc_dointvec_minmax,
136
137
		.extra1		= &one,
		.extra2		= &int_max
Linus Torvalds's avatar
Linus Torvalds committed
138
139
140
141
142
143
	},
	{
		.procname	= "max_init_retransmits",
		.data		= &sctp_max_retrans_init,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
144
		.proc_handler	= proc_dointvec_minmax,
145
146
		.extra1		= &one,
		.extra2		= &int_max
Linus Torvalds's avatar
Linus Torvalds committed
147
148
149
150
	},
	{
		.procname	= "hb_interval",
		.data		= &sctp_hb_interval,
151
		.maxlen		= sizeof(unsigned int),
Linus Torvalds's avatar
Linus Torvalds committed
152
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
153
		.proc_handler	= proc_dointvec_minmax,
154
155
		.extra1         = &one,
		.extra2         = &timer_max
Linus Torvalds's avatar
Linus Torvalds committed
156
157
158
159
	},
	{
		.procname	= "cookie_preserve_enable",
		.data		= &sctp_cookie_preserve_enable,
160
		.maxlen		= sizeof(int),
Linus Torvalds's avatar
Linus Torvalds committed
161
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
162
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
163
164
165
166
167
	},
	{
		.procname	= "rto_alpha_exp_divisor",
		.data		= &sctp_rto_alpha,
		.maxlen		= sizeof(int),
168
		.mode		= 0444,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
169
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
170
171
172
173
174
	},
	{
		.procname	= "rto_beta_exp_divisor",
		.data		= &sctp_rto_beta,
		.maxlen		= sizeof(int),
175
		.mode		= 0444,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
176
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
177
178
179
180
181
182
	},
	{
		.procname	= "addip_enable",
		.data		= &sctp_addip_enable,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
183
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
184
185
186
187
188
189
	},
	{
		.procname	= "prsctp_enable",
		.data		= &sctp_prsctp_enable,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
190
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
191
	},
192
193
194
	{
		.procname	= "sack_timeout",
		.data		= &sctp_sack_timeout,
195
		.maxlen		= sizeof(int),
196
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
197
		.proc_handler	= proc_dointvec_minmax,
198
199
200
		.extra1         = &sack_timer_min,
		.extra2         = &sack_timer_max,
	},
201
202
203
204
205
	{
		.procname	= "sctp_mem",
		.data		= &sysctl_sctp_mem,
		.maxlen		= sizeof(sysctl_sctp_mem),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
206
		.proc_handler	= proc_dointvec,
207
208
209
210
211
212
	},
	{
		.procname	= "sctp_rmem",
		.data		= &sysctl_sctp_rmem,
		.maxlen		= sizeof(sysctl_sctp_rmem),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
213
		.proc_handler	= proc_dointvec,
214
215
216
217
218
219
	},
	{
		.procname	= "sctp_wmem",
		.data		= &sysctl_sctp_wmem,
		.maxlen		= sizeof(sysctl_sctp_wmem),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
220
		.proc_handler	= proc_dointvec,
221
	},
222
223
224
225
226
	{
		.procname	= "auth_enable",
		.data		= &sctp_auth_enable,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
227
		.proc_handler	= proc_dointvec,
228
	},
229
230
231
232
233
	{
		.procname	= "addip_noauth_enable",
		.data		= &sctp_addip_noauth,
		.maxlen		= sizeof(int),
		.mode		= 0644,
Alexey Dobriyan's avatar
Alexey Dobriyan committed
234
		.proc_handler	= proc_dointvec,
235
	},
236
237
238
239
240
	{
		.procname	= "addr_scope_policy",
		.data		= &sctp_scope_policy,
		.maxlen		= sizeof(int),
		.mode		= 0644,
241
		.proc_handler	= proc_dointvec_minmax,
242
243
244
		.extra1		= &zero,
		.extra2		= &addr_scope_max,
	},
245
246
247
248
249
250
251
252
253
254
	{
		.procname	= "rwnd_update_shift",
		.data		= &sctp_rwnd_upd_shift,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_minmax,
		.extra1		= &one,
		.extra2		= &rwnd_scale_max,
	},

255
	{ /* sentinel */ }
Linus Torvalds's avatar
Linus Torvalds committed
256
257
};

258
static struct ctl_path sctp_path[] = {
259
260
	{ .procname = "net", },
	{ .procname = "sctp", },
261
	{ }
Linus Torvalds's avatar
Linus Torvalds committed
262
263
264
265
266
267
268
};

static struct ctl_table_header * sctp_sysctl_header;

/* Sysctl registration.  */
void sctp_sysctl_register(void)
{
269
	sctp_sysctl_header = register_sysctl_paths(sctp_path, sctp_table);
Linus Torvalds's avatar
Linus Torvalds committed
270
271
272
273
274
275
276
}

/* Sysctl deregistration.  */
void sctp_sysctl_unregister(void)
{
	unregister_sysctl_table(sctp_sysctl_header);
}