Blame view

net/ipv4/sysctl_net_ipv4.c 19.8 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
  /*
   * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
   * Begun April 1, 1996, Mike Shaver.
   * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
   */
  
  #include <linux/mm.h>
  #include <linux/module.h>
  #include <linux/sysctl.h>
20380731b   Arnaldo Carvalho de Melo   [NET]: Fix sparse...
11
  #include <linux/igmp.h>
14c850212   Arnaldo Carvalho de Melo   [INET_SOCK]: Move...
12
  #include <linux/inetdevice.h>
227b60f51   Stephen Hemminger   [INET]: local por...
13
  #include <linux/seqlock.h>
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
14
  #include <linux/init.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
15
  #include <linux/slab.h>
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
16
  #include <linux/nsproxy.h>
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
17
  #include <linux/swap.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
  #include <net/snmp.h>
20380731b   Arnaldo Carvalho de Melo   [NET]: Fix sparse...
19
  #include <net/icmp.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
  #include <net/ip.h>
  #include <net/route.h>
  #include <net/tcp.h>
95766fff6   Hideo Aoki   [UDP]: Add memory...
23
  #include <net/udp.h>
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
24
  #include <net/cipso_ipv4.h>
04128f233   Pavel Emelyanov   [INET]: Collect c...
25
  #include <net/inet_frag.h>
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
26
  #include <net/ping.h>
3aaabe234   Glauber Costa   tcp buffer limita...
27
  #include <net/tcp_memcontrol.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28

89cee8b1c   Herbert Xu   [IPV4]: Safer rea...
29
  static int zero;
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
30
  static int tcp_retr1_max = 255;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
  static int ip_local_port_range_min[] = { 1, 1 };
  static int ip_local_port_range_max[] = { 65535, 65535 };
0147fc058   Alexey Dobriyan   tcp: restrict net...
33
34
  static int tcp_adv_win_scale_min = -31;
  static int tcp_adv_win_scale_max = 31;
249fab773   Eric Dumazet   net: add limits t...
35
36
  static int ip_ttl_min = 1;
  static int ip_ttl_max = 255;
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
37
38
  static int ip_ping_group_range_min[] = { 0, 0 };
  static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39

227b60f51   Stephen Hemminger   [INET]: local por...
40
41
42
  /* Update system visible IP port range */
  static void set_local_port_range(int range[2])
  {
3c689b732   Eric Dumazet   inet: cleanup of ...
43
44
45
46
  	write_seqlock(&sysctl_local_ports.lock);
  	sysctl_local_ports.range[0] = range[0];
  	sysctl_local_ports.range[1] = range[1];
  	write_sequnlock(&sysctl_local_ports.lock);
227b60f51   Stephen Hemminger   [INET]: local por...
47
48
49
  }
  
  /* Validate changes from /proc interface. */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
50
  static int ipv4_local_port_range(ctl_table *table, int write,
227b60f51   Stephen Hemminger   [INET]: local por...
51
52
53
54
  				 void __user *buffer,
  				 size_t *lenp, loff_t *ppos)
  {
  	int ret;
3c689b732   Eric Dumazet   inet: cleanup of ...
55
  	int range[2];
227b60f51   Stephen Hemminger   [INET]: local por...
56
57
58
59
60
61
62
  	ctl_table tmp = {
  		.data = &range,
  		.maxlen = sizeof(range),
  		.mode = table->mode,
  		.extra1 = &ip_local_port_range_min,
  		.extra2 = &ip_local_port_range_max,
  	};
3c689b732   Eric Dumazet   inet: cleanup of ...
63
  	inet_get_local_port_range(range, range + 1);
8d65af789   Alexey Dobriyan   sysctl: remove "s...
64
  	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
227b60f51   Stephen Hemminger   [INET]: local por...
65
66
  
  	if (write && ret == 0) {
a25de534f   Anton Arapov   [INET]: Justifica...
67
  		if (range[1] < range[0])
227b60f51   Stephen Hemminger   [INET]: local por...
68
69
70
71
72
73
74
  			ret = -EINVAL;
  		else
  			set_local_port_range(range);
  	}
  
  	return ret;
  }
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
75

e6560d4df   Eric Dumazet   net: ping: remove...
76
  static void inet_get_ping_group_range_table(struct ctl_table *table, gid_t *low, gid_t *high)
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
77
78
79
80
81
82
83
84
85
86
87
88
  {
  	gid_t *data = table->data;
  	unsigned seq;
  	do {
  		seq = read_seqbegin(&sysctl_local_ports.lock);
  
  		*low = data[0];
  		*high = data[1];
  	} while (read_seqretry(&sysctl_local_ports.lock, seq));
  }
  
  /* Update system visible IP port range */
e6560d4df   Eric Dumazet   net: ping: remove...
89
  static void set_ping_group_range(struct ctl_table *table, gid_t range[2])
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  {
  	gid_t *data = table->data;
  	write_seqlock(&sysctl_local_ports.lock);
  	data[0] = range[0];
  	data[1] = range[1];
  	write_sequnlock(&sysctl_local_ports.lock);
  }
  
  /* Validate changes from /proc interface. */
  static int ipv4_ping_group_range(ctl_table *table, int write,
  				 void __user *buffer,
  				 size_t *lenp, loff_t *ppos)
  {
  	int ret;
  	gid_t range[2];
  	ctl_table tmp = {
  		.data = &range,
  		.maxlen = sizeof(range),
  		.mode = table->mode,
  		.extra1 = &ip_ping_group_range_min,
  		.extra2 = &ip_ping_group_range_max,
  	};
  
  	inet_get_ping_group_range_table(table, range, range + 1);
  	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
  
  	if (write && ret == 0)
  		set_ping_group_range(table, range);
  
  	return ret;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
121
  static int proc_tcp_congestion_control(ctl_table *ctl, int write,
317a76f9a   Stephen Hemminger   [TCP]: Add plugga...
122
123
124
125
126
127
128
129
130
131
  				       void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	char val[TCP_CA_NAME_MAX];
  	ctl_table tbl = {
  		.data = val,
  		.maxlen = TCP_CA_NAME_MAX,
  	};
  	int ret;
  
  	tcp_get_default_congestion_control(val);
8d65af789   Alexey Dobriyan   sysctl: remove "s...
132
  	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
317a76f9a   Stephen Hemminger   [TCP]: Add plugga...
133
134
135
136
  	if (write && ret == 0)
  		ret = tcp_set_default_congestion_control(val);
  	return ret;
  }
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
137
  static int proc_tcp_available_congestion_control(ctl_table *ctl,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
138
  						 int write,
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
139
140
141
142
143
144
145
146
147
148
  						 void __user *buffer, size_t *lenp,
  						 loff_t *ppos)
  {
  	ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, };
  	int ret;
  
  	tbl.data = kmalloc(tbl.maxlen, GFP_USER);
  	if (!tbl.data)
  		return -ENOMEM;
  	tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX);
8d65af789   Alexey Dobriyan   sysctl: remove "s...
149
  	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
150
151
152
  	kfree(tbl.data);
  	return ret;
  }
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
153
  static int proc_allowed_congestion_control(ctl_table *ctl,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
154
  					   int write,
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
155
156
157
158
159
160
161
162
163
164
165
  					   void __user *buffer, size_t *lenp,
  					   loff_t *ppos)
  {
  	ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX };
  	int ret;
  
  	tbl.data = kmalloc(tbl.maxlen, GFP_USER);
  	if (!tbl.data)
  		return -ENOMEM;
  
  	tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen);
8d65af789   Alexey Dobriyan   sysctl: remove "s...
166
  	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
167
168
169
170
171
  	if (write && ret == 0)
  		ret = tcp_set_allowed_congestion_control(tbl.data);
  	kfree(tbl.data);
  	return ret;
  }
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
172
173
174
175
176
177
178
  static int ipv4_tcp_mem(ctl_table *ctl, int write,
  			   void __user *buffer, size_t *lenp,
  			   loff_t *ppos)
  {
  	int ret;
  	unsigned long vec[3];
  	struct net *net = current->nsproxy->net_ns;
3aaabe234   Glauber Costa   tcp buffer limita...
179
180
181
  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM
  	struct mem_cgroup *memcg;
  #endif
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  
  	ctl_table tmp = {
  		.data = &vec,
  		.maxlen = sizeof(vec),
  		.mode = ctl->mode,
  	};
  
  	if (!write) {
  		ctl->data = &net->ipv4.sysctl_tcp_mem;
  		return proc_doulongvec_minmax(ctl, write, buffer, lenp, ppos);
  	}
  
  	ret = proc_doulongvec_minmax(&tmp, write, buffer, lenp, ppos);
  	if (ret)
  		return ret;
3aaabe234   Glauber Costa   tcp buffer limita...
197
198
199
200
201
202
203
204
205
  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM
  	rcu_read_lock();
  	memcg = mem_cgroup_from_task(current);
  
  	tcp_prot_mem(memcg, vec[0], 0);
  	tcp_prot_mem(memcg, vec[1], 1);
  	tcp_prot_mem(memcg, vec[2], 2);
  	rcu_read_unlock();
  #endif
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
206
207
208
209
210
211
  	net->ipv4.sysctl_tcp_mem[0] = vec[0];
  	net->ipv4.sysctl_tcp_mem[1] = vec[1];
  	net->ipv4.sysctl_tcp_mem[2] = vec[2];
  
  	return 0;
  }
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
212
  static struct ctl_table ipv4_table[] = {
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
213
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
214
215
216
217
  		.procname	= "tcp_timestamps",
  		.data		= &sysctl_tcp_timestamps,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
218
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
220
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
221
222
223
224
  		.procname	= "tcp_window_scaling",
  		.data		= &sysctl_tcp_window_scaling,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
225
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
226
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
227
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
230
231
  		.procname	= "tcp_sack",
  		.data		= &sysctl_tcp_sack,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
232
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
233
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
234
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
235
236
237
238
  		.procname	= "tcp_retrans_collapse",
  		.data		= &sysctl_tcp_retrans_collapse,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
239
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
240
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
241
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
242
  		.procname	= "ip_default_ttl",
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
243
  		.data		= &sysctl_ip_default_ttl,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
244
245
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
249fab773   Eric Dumazet   net: add limits t...
246
247
248
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &ip_ttl_min,
  		.extra2		= &ip_ttl_max,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
250
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
252
253
254
  		.procname	= "ip_no_pmtu_disc",
  		.data		= &ipv4_config.no_pmtu_disc,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
255
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
256
257
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
258
259
260
261
  		.procname	= "ip_nonlocal_bind",
  		.data		= &sysctl_ip_nonlocal_bind,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
262
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
263
264
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
265
266
267
268
  		.procname	= "tcp_syn_retries",
  		.data		= &sysctl_tcp_syn_retries,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
269
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
270
271
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
272
273
274
275
  		.procname	= "tcp_synack_retries",
  		.data		= &sysctl_tcp_synack_retries,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
276
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
278
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
279
280
281
282
  		.procname	= "tcp_max_orphans",
  		.data		= &sysctl_tcp_max_orphans,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
283
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
284
285
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
286
  		.procname	= "tcp_max_tw_buckets",
295ff7edb   Arnaldo Carvalho de Melo   [TIMEWAIT]: Intro...
287
  		.data		= &tcp_death_row.sysctl_max_tw_buckets,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
288
289
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
290
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
291
292
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
293
294
295
296
  		.procname	= "ip_dynaddr",
  		.data		= &sysctl_ip_dynaddr,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
297
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
298
299
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
300
301
302
303
  		.procname	= "tcp_keepalive_time",
  		.data		= &sysctl_tcp_keepalive_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
304
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
305
306
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
307
308
309
310
  		.procname	= "tcp_keepalive_probes",
  		.data		= &sysctl_tcp_keepalive_probes,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
311
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
313
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
314
315
316
317
  		.procname	= "tcp_keepalive_intvl",
  		.data		= &sysctl_tcp_keepalive_intvl,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
318
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
319
320
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
321
322
323
324
  		.procname	= "tcp_retries1",
  		.data		= &sysctl_tcp_retries1,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
325
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
326
327
328
  		.extra2		= &tcp_retr1_max
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
329
330
331
332
  		.procname	= "tcp_retries2",
  		.data		= &sysctl_tcp_retries2,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
333
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
334
335
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
336
337
338
339
  		.procname	= "tcp_fin_timeout",
  		.data		= &sysctl_tcp_fin_timeout,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
340
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
341
342
343
  	},
  #ifdef CONFIG_SYN_COOKIES
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
344
345
346
347
  		.procname	= "tcp_syncookies",
  		.data		= &sysctl_tcp_syncookies,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
348
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
349
350
351
  	},
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
352
  		.procname	= "tcp_tw_recycle",
295ff7edb   Arnaldo Carvalho de Melo   [TIMEWAIT]: Intro...
353
  		.data		= &tcp_death_row.sysctl_tw_recycle,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
354
355
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
356
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
357
358
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
359
360
361
362
  		.procname	= "tcp_abort_on_overflow",
  		.data		= &sysctl_tcp_abort_on_overflow,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
363
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
364
365
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
366
367
368
369
  		.procname	= "tcp_stdurg",
  		.data		= &sysctl_tcp_stdurg,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
370
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
371
372
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
373
374
375
376
  		.procname	= "tcp_rfc1337",
  		.data		= &sysctl_tcp_rfc1337,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
377
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
378
379
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
380
381
382
383
  		.procname	= "tcp_max_syn_backlog",
  		.data		= &sysctl_max_syn_backlog,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
384
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
385
386
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
387
  		.procname	= "ip_local_port_range",
3c689b732   Eric Dumazet   inet: cleanup of ...
388
389
  		.data		= &sysctl_local_ports.range,
  		.maxlen		= sizeof(sysctl_local_ports.range),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
390
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
391
  		.proc_handler	= ipv4_local_port_range,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
392
  	},
e3826f1e9   Amerigo Wang   net: reserve port...
393
394
395
396
397
398
399
  	{
  		.procname	= "ip_local_reserved_ports",
  		.data		= NULL, /* initialized in sysctl_ipv4_init */
  		.maxlen		= 65536,
  		.mode		= 0644,
  		.proc_handler	= proc_do_large_bitmap,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
400
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
401
402
403
404
  		.procname	= "igmp_max_memberships",
  		.data		= &sysctl_igmp_max_memberships,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
405
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
406
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
407
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
408
409
410
411
  		.procname	= "igmp_max_msf",
  		.data		= &sysctl_igmp_max_msf,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
412
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
413
414
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
415
416
417
418
  		.procname	= "inet_peer_threshold",
  		.data		= &inet_peer_threshold,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
419
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
420
421
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
423
424
425
  		.procname	= "inet_peer_minttl",
  		.data		= &inet_peer_minttl,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
426
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
427
428
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
429
430
431
432
  		.procname	= "inet_peer_maxttl",
  		.data		= &inet_peer_maxttl,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
433
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
434
435
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
436
437
438
439
  		.procname	= "tcp_orphan_retries",
  		.data		= &sysctl_tcp_orphan_retries,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
440
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
441
442
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
443
444
445
446
  		.procname	= "tcp_fack",
  		.data		= &sysctl_tcp_fack,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
447
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
448
449
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
450
451
452
453
  		.procname	= "tcp_reordering",
  		.data		= &sysctl_tcp_reordering,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
454
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
455
456
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
457
458
459
460
  		.procname	= "tcp_ecn",
  		.data		= &sysctl_tcp_ecn,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
461
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
462
463
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
464
465
466
467
  		.procname	= "tcp_dsack",
  		.data		= &sysctl_tcp_dsack,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
468
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
469
470
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
471
472
473
474
  		.procname	= "tcp_wmem",
  		.data		= &sysctl_tcp_wmem,
  		.maxlen		= sizeof(sysctl_tcp_wmem),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
475
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
476
477
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
478
479
480
481
  		.procname	= "tcp_rmem",
  		.data		= &sysctl_tcp_rmem,
  		.maxlen		= sizeof(sysctl_tcp_rmem),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
482
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
483
484
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
485
486
487
488
  		.procname	= "tcp_app_win",
  		.data		= &sysctl_tcp_app_win,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
489
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
492
493
494
495
  		.procname	= "tcp_adv_win_scale",
  		.data		= &sysctl_tcp_adv_win_scale,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
0147fc058   Alexey Dobriyan   tcp: restrict net...
496
497
498
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &tcp_adv_win_scale_min,
  		.extra2		= &tcp_adv_win_scale_max,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
499
500
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
501
502
503
504
  		.procname	= "tcp_tw_reuse",
  		.data		= &sysctl_tcp_tw_reuse,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
505
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
506
507
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
508
509
510
511
  		.procname	= "tcp_frto",
  		.data		= &sysctl_tcp_frto,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
512
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
513
514
  	},
  	{
3cfe3baaf   Ilpo Järvinen   [TCP]: Add two ne...
515
516
517
518
  		.procname	= "tcp_frto_response",
  		.data		= &sysctl_tcp_frto_response,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
519
  		.proc_handler	= proc_dointvec
3cfe3baaf   Ilpo Järvinen   [TCP]: Add two ne...
520
521
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
522
523
524
525
  		.procname	= "tcp_low_latency",
  		.data		= &sysctl_tcp_low_latency,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
526
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
527
528
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
529
530
531
532
  		.procname	= "tcp_no_metrics_save",
  		.data		= &sysctl_tcp_nometrics_save,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
533
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
534
535
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
536
537
538
539
  		.procname	= "tcp_moderate_rcvbuf",
  		.data		= &sysctl_tcp_moderate_rcvbuf,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
540
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
541
542
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
543
544
545
546
  		.procname	= "tcp_tso_win_divisor",
  		.data		= &sysctl_tcp_tso_win_divisor,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
547
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
548
549
  	},
  	{
317a76f9a   Stephen Hemminger   [TCP]: Add plugga...
550
  		.procname	= "tcp_congestion_control",
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
551
  		.mode		= 0644,
317a76f9a   Stephen Hemminger   [TCP]: Add plugga...
552
  		.maxlen		= TCP_CA_NAME_MAX,
6d9f239a1   Alexey Dobriyan   net: '&' redux
553
  		.proc_handler	= proc_tcp_congestion_control,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
554
  	},
9772efb97   Stephen Hemminger   [TCP]: Appropriat...
555
  	{
9772efb97   Stephen Hemminger   [TCP]: Appropriat...
556
557
558
559
  		.procname	= "tcp_abc",
  		.data		= &sysctl_tcp_abc,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
560
  		.proc_handler	= proc_dointvec,
9772efb97   Stephen Hemminger   [TCP]: Appropriat...
561
  	},
5d424d5a6   John Heffner   [TCP]: MTU probing
562
  	{
5d424d5a6   John Heffner   [TCP]: MTU probing
563
564
565
566
  		.procname	= "tcp_mtu_probing",
  		.data		= &sysctl_tcp_mtu_probing,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
567
  		.proc_handler	= proc_dointvec,
5d424d5a6   John Heffner   [TCP]: MTU probing
568
569
  	},
  	{
5d424d5a6   John Heffner   [TCP]: MTU probing
570
571
572
573
  		.procname	= "tcp_base_mss",
  		.data		= &sysctl_tcp_base_mss,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
574
  		.proc_handler	= proc_dointvec,
5d424d5a6   John Heffner   [TCP]: MTU probing
575
  	},
e905a9eda   YOSHIFUJI Hideaki   [NET] IPV4: Fix w...
576
  	{
15d99e02b   Rick Jones   [TCP]: sysctl to ...
577
578
579
580
  		.procname	= "tcp_workaround_signed_windows",
  		.data		= &sysctl_tcp_workaround_signed_windows,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
581
  		.proc_handler	= proc_dointvec
15d99e02b   Rick Jones   [TCP]: sysctl to ...
582
  	},
959378258   Chris Leech   [I/OAT]: Add a sy...
583
584
  #ifdef CONFIG_NET_DMA
  	{
959378258   Chris Leech   [I/OAT]: Add a sy...
585
586
587
588
  		.procname	= "tcp_dma_copybreak",
  		.data		= &sysctl_tcp_dma_copybreak,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
589
  		.proc_handler	= proc_dointvec
959378258   Chris Leech   [I/OAT]: Add a sy...
590
591
  	},
  #endif
35089bb20   David S. Miller   [TCP]: Add tcp_sl...
592
  	{
35089bb20   David S. Miller   [TCP]: Add tcp_sl...
593
594
595
596
  		.procname	= "tcp_slow_start_after_idle",
  		.data		= &sysctl_tcp_slow_start_after_idle,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
597
  		.proc_handler	= proc_dointvec
35089bb20   David S. Miller   [TCP]: Add tcp_sl...
598
  	},
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
599
600
  #ifdef CONFIG_NETLABEL
  	{
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
601
602
603
604
  		.procname	= "cipso_cache_enable",
  		.data		= &cipso_v4_cache_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
605
  		.proc_handler	= proc_dointvec,
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
606
607
  	},
  	{
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
608
609
610
611
  		.procname	= "cipso_cache_bucket_size",
  		.data		= &cipso_v4_cache_bucketsize,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
612
  		.proc_handler	= proc_dointvec,
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
613
614
  	},
  	{
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
615
616
617
618
  		.procname	= "cipso_rbm_optfmt",
  		.data		= &cipso_v4_rbm_optfmt,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
619
  		.proc_handler	= proc_dointvec,
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
620
621
  	},
  	{
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
622
623
624
625
  		.procname	= "cipso_rbm_strictvalid",
  		.data		= &cipso_v4_rbm_strictvalid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
626
  		.proc_handler	= proc_dointvec,
446fda4f2   Paul Moore   [NetLabel]: CIPSO...
627
628
  	},
  #endif /* CONFIG_NETLABEL */
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
629
  	{
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
630
631
632
  		.procname	= "tcp_available_congestion_control",
  		.maxlen		= TCP_CA_BUF_MAX,
  		.mode		= 0444,
6d9f239a1   Alexey Dobriyan   net: '&' redux
633
  		.proc_handler   = proc_tcp_available_congestion_control,
3ff825b28   Stephen Hemminger   [TCP]: Add tcp_av...
634
  	},
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
635
  	{
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
636
637
638
  		.procname	= "tcp_allowed_congestion_control",
  		.maxlen		= TCP_CA_BUF_MAX,
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
639
  		.proc_handler   = proc_allowed_congestion_control,
ce7bc3bf1   Stephen Hemminger   [TCP]: Restrict c...
640
  	},
886236c12   John Heffner   [TCP]: Add RFC374...
641
  	{
886236c12   John Heffner   [TCP]: Add RFC374...
642
643
644
645
  		.procname	= "tcp_max_ssthresh",
  		.data		= &sysctl_tcp_max_ssthresh,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
646
  		.proc_handler	= proc_dointvec,
886236c12   John Heffner   [TCP]: Add RFC374...
647
  	},
95766fff6   Hideo Aoki   [UDP]: Add memory...
648
  	{
519855c50   William Allen Simpson   TCPCT part 1c: sy...
649
650
651
652
653
654
655
  		.procname	= "tcp_cookie_size",
  		.data		= &sysctl_tcp_cookie_size,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec
  	},
  	{
36e31b0af   Andreas Petlund   net: TCP thin lin...
656
657
658
659
660
661
  		.procname       = "tcp_thin_linear_timeouts",
  		.data           = &sysctl_tcp_thin_linear_timeouts,
  		.maxlen         = sizeof(int),
  		.mode           = 0644,
  		.proc_handler   = proc_dointvec
  	},
7e3801755   Andreas Petlund   net: TCP thin dupack
662
663
664
665
666
667
668
          {
  		.procname       = "tcp_thin_dupack",
  		.data           = &sysctl_tcp_thin_dupack,
  		.maxlen         = sizeof(int),
  		.mode           = 0644,
  		.proc_handler   = proc_dointvec
  	},
36e31b0af   Andreas Petlund   net: TCP thin lin...
669
  	{
95766fff6   Hideo Aoki   [UDP]: Add memory...
670
671
672
673
  		.procname	= "udp_mem",
  		.data		= &sysctl_udp_mem,
  		.maxlen		= sizeof(sysctl_udp_mem),
  		.mode		= 0644,
8d987e5c7   Eric Dumazet   net: avoid limits...
674
  		.proc_handler	= proc_doulongvec_minmax,
95766fff6   Hideo Aoki   [UDP]: Add memory...
675
676
  	},
  	{
95766fff6   Hideo Aoki   [UDP]: Add memory...
677
678
679
680
  		.procname	= "udp_rmem_min",
  		.data		= &sysctl_udp_rmem_min,
  		.maxlen		= sizeof(sysctl_udp_rmem_min),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
681
  		.proc_handler	= proc_dointvec_minmax,
95766fff6   Hideo Aoki   [UDP]: Add memory...
682
683
684
  		.extra1		= &zero
  	},
  	{
95766fff6   Hideo Aoki   [UDP]: Add memory...
685
686
687
688
  		.procname	= "udp_wmem_min",
  		.data		= &sysctl_udp_wmem_min,
  		.maxlen		= sizeof(sysctl_udp_wmem_min),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
689
  		.proc_handler	= proc_dointvec_minmax,
95766fff6   Hideo Aoki   [UDP]: Add memory...
690
691
  		.extra1		= &zero
  	},
f8572d8f2   Eric W. Biederman   sysctl net: Remov...
692
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
693
  };
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
694

68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
695
696
  static struct ctl_table ipv4_net_table[] = {
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
697
698
699
700
  		.procname	= "icmp_echo_ignore_all",
  		.data		= &init_net.ipv4.sysctl_icmp_echo_ignore_all,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
701
  		.proc_handler	= proc_dointvec
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
702
703
  	},
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
704
705
706
707
  		.procname	= "icmp_echo_ignore_broadcasts",
  		.data		= &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
708
  		.proc_handler	= proc_dointvec
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
709
710
  	},
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
711
712
713
714
  		.procname	= "icmp_ignore_bogus_error_responses",
  		.data		= &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
715
  		.proc_handler	= proc_dointvec
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
716
717
  	},
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
718
719
720
721
  		.procname	= "icmp_errors_use_inbound_ifaddr",
  		.data		= &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
722
  		.proc_handler	= proc_dointvec
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
723
724
  	},
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
725
726
727
728
  		.procname	= "icmp_ratelimit",
  		.data		= &init_net.ipv4.sysctl_icmp_ratelimit,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
729
  		.proc_handler	= proc_dointvec_ms_jiffies,
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
730
731
  	},
  	{
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
732
733
734
735
  		.procname	= "icmp_ratemask",
  		.data		= &init_net.ipv4.sysctl_icmp_ratemask,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
736
  		.proc_handler	= proc_dointvec
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
737
  	},
1080d709f   Neil Horman   net: implement em...
738
  	{
1080d709f   Neil Horman   net: implement em...
739
740
741
742
  		.procname	= "rt_cache_rebuild_count",
  		.data		= &init_net.ipv4.sysctl_rt_cache_rebuild_count,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
743
  		.proc_handler	= proc_dointvec
1080d709f   Neil Horman   net: implement em...
744
  	},
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
745
746
747
748
749
750
751
  	{
  		.procname	= "ping_group_range",
  		.data		= &init_net.ipv4.sysctl_ping_group_range,
  		.maxlen		= sizeof(init_net.ipv4.sysctl_ping_group_range),
  		.mode		= 0644,
  		.proc_handler	= ipv4_ping_group_range,
  	},
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
752
753
754
755
756
757
  	{
  		.procname	= "tcp_mem",
  		.maxlen		= sizeof(init_net.ipv4.sysctl_tcp_mem),
  		.mode		= 0644,
  		.proc_handler	= ipv4_tcp_mem,
  	},
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
758
759
  	{ }
  };
3d7cc2ba6   Pavel Emelyanov   [NETFILTER]: Swit...
760
  struct ctl_path net_ipv4_ctl_path[] = {
f8572d8f2   Eric W. Biederman   sysctl net: Remov...
761
762
  	{ .procname = "net", },
  	{ .procname = "ipv4", },
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
763
764
  	{ },
  };
3d7cc2ba6   Pavel Emelyanov   [NETFILTER]: Swit...
765
  EXPORT_SYMBOL_GPL(net_ipv4_ctl_path);
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
766

1577519d6   Pavel Emelyanov   [NETNS][ICMP]: Re...
767
768
  static __net_init int ipv4_sysctl_init_net(struct net *net)
  {
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
769
  	struct ctl_table *table;
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
770
  	unsigned long limit;
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
771
772
  
  	table = ipv4_net_table;
09ad9bc75   Octavian Purdila   net: use net_eq t...
773
  	if (!net_eq(net, &init_net)) {
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
  		table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL);
  		if (table == NULL)
  			goto err_alloc;
  
  		table[0].data =
  			&net->ipv4.sysctl_icmp_echo_ignore_all;
  		table[1].data =
  			&net->ipv4.sysctl_icmp_echo_ignore_broadcasts;
  		table[2].data =
  			&net->ipv4.sysctl_icmp_ignore_bogus_error_responses;
  		table[3].data =
  			&net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr;
  		table[4].data =
  			&net->ipv4.sysctl_icmp_ratelimit;
  		table[5].data =
  			&net->ipv4.sysctl_icmp_ratemask;
1080d709f   Neil Horman   net: implement em...
790
791
  		table[6].data =
  			&net->ipv4.sysctl_rt_cache_rebuild_count;
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
792
793
  		table[7].data =
  			&net->ipv4.sysctl_ping_group_range;
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
794
  	}
c319b4d76   Vasiliy Kulikov   net: ipv4: add IP...
795
796
797
798
799
800
  	/*
  	 * Sane defaults - nobody may create ping sockets.
  	 * Boot scripts should set this to distro-specific group.
  	 */
  	net->ipv4.sysctl_ping_group_range[0] = 1;
  	net->ipv4.sysctl_ping_group_range[1] = 0;
1080d709f   Neil Horman   net: implement em...
801
  	net->ipv4.sysctl_rt_cache_rebuild_count = 4;
3dc43e3e4   Glauber Costa   per-netns ipv4 sy...
802
803
804
805
806
  	limit = nr_free_buffer_pages() / 8;
  	limit = max(limit, 128UL);
  	net->ipv4.sysctl_tcp_mem[0] = limit / 4 * 3;
  	net->ipv4.sysctl_tcp_mem[1] = limit;
  	net->ipv4.sysctl_tcp_mem[2] = net->ipv4.sysctl_tcp_mem[0] * 2;
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
807
808
809
810
  	net->ipv4.ipv4_hdr = register_net_sysctl_table(net,
  			net_ipv4_ctl_path, table);
  	if (net->ipv4.ipv4_hdr == NULL)
  		goto err_reg;
1577519d6   Pavel Emelyanov   [NETNS][ICMP]: Re...
811
  	return 0;
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
812
813
  
  err_reg:
09ad9bc75   Octavian Purdila   net: use net_eq t...
814
  	if (!net_eq(net, &init_net))
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
815
816
817
  		kfree(table);
  err_alloc:
  	return -ENOMEM;
1577519d6   Pavel Emelyanov   [NETNS][ICMP]: Re...
818
819
820
821
  }
  
  static __net_exit void ipv4_sysctl_exit_net(struct net *net)
  {
68528f099   Pavel Emelyanov   [NETNS][ICMP]: Ma...
822
823
824
825
826
  	struct ctl_table *table;
  
  	table = net->ipv4.ipv4_hdr->ctl_table_arg;
  	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
  	kfree(table);
1577519d6   Pavel Emelyanov   [NETNS][ICMP]: Re...
827
828
829
830
831
832
  }
  
  static __net_initdata struct pernet_operations ipv4_sysctl_ops = {
  	.init = ipv4_sysctl_init_net,
  	.exit = ipv4_sysctl_exit_net,
  };
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
833
834
835
  static __init int sysctl_ipv4_init(void)
  {
  	struct ctl_table_header *hdr;
e3826f1e9   Amerigo Wang   net: reserve port...
836
837
838
839
840
841
842
843
844
845
  	struct ctl_table *i;
  
  	for (i = ipv4_table; i->procname; i++) {
  		if (strcmp(i->procname, "ip_local_reserved_ports") == 0) {
  			i->data = sysctl_local_reserved_ports;
  			break;
  		}
  	}
  	if (!i->procname)
  		return -EINVAL;
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
846

3d7cc2ba6   Pavel Emelyanov   [NETFILTER]: Swit...
847
  	hdr = register_sysctl_paths(net_ipv4_ctl_path, ipv4_table);
1577519d6   Pavel Emelyanov   [NETNS][ICMP]: Re...
848
849
850
851
852
853
854
855
856
  	if (hdr == NULL)
  		return -ENOMEM;
  
  	if (register_pernet_subsys(&ipv4_sysctl_ops)) {
  		unregister_sysctl_table(hdr);
  		return -ENOMEM;
  	}
  
  	return 0;
3e37c3f99   Pavel Emelyanov   [IPV4]: Use ctl p...
857
858
859
  }
  
  __initcall(sysctl_ipv4_init);