• 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/dccp/
1/*
2 *  net/dccp/sysctl.c
3 *
4 *  An implementation of the DCCP protocol
5 *  Arnaldo Carvalho de Melo <acme@mandriva.com>
6 *
7 *	This program is free software; you can redistribute it and/or
8 *	modify it under the terms of the GNU General Public License v2
9 *	as published by the Free Software Foundation.
10 */
11
12#include <linux/mm.h>
13#include <linux/sysctl.h>
14#include "dccp.h"
15#include "feat.h"
16
17#ifndef CONFIG_SYSCTL
18#error This file should not be compiled without CONFIG_SYSCTL defined
19#endif
20
21/* Boundary values */
22static int		zero     = 0,
23			u8_max   = 0xFF;
24static unsigned long	seqw_min = 32;
25
26static struct ctl_table dccp_default_table[] = {
27	{
28		.procname	= "seq_window",
29		.data		= &sysctl_dccp_sequence_window,
30		.maxlen		= sizeof(sysctl_dccp_sequence_window),
31		.mode		= 0644,
32		.proc_handler	= proc_doulongvec_minmax,
33		.extra1		= &seqw_min,		/* RFC 4340, 7.5.2 */
34	},
35	{
36		.procname	= "rx_ccid",
37		.data		= &sysctl_dccp_rx_ccid,
38		.maxlen		= sizeof(sysctl_dccp_rx_ccid),
39		.mode		= 0644,
40		.proc_handler	= proc_dointvec_minmax,
41		.extra1		= &zero,
42		.extra2		= &u8_max,		/* RFC 4340, 10. */
43	},
44	{
45		.procname	= "tx_ccid",
46		.data		= &sysctl_dccp_tx_ccid,
47		.maxlen		= sizeof(sysctl_dccp_tx_ccid),
48		.mode		= 0644,
49		.proc_handler	= proc_dointvec_minmax,
50		.extra1		= &zero,
51		.extra2		= &u8_max,		/* RFC 4340, 10. */
52	},
53	{
54		.procname	= "request_retries",
55		.data		= &sysctl_dccp_request_retries,
56		.maxlen		= sizeof(sysctl_dccp_request_retries),
57		.mode		= 0644,
58		.proc_handler	= proc_dointvec_minmax,
59		.extra1		= &zero,
60		.extra2		= &u8_max,
61	},
62	{
63		.procname	= "retries1",
64		.data		= &sysctl_dccp_retries1,
65		.maxlen		= sizeof(sysctl_dccp_retries1),
66		.mode		= 0644,
67		.proc_handler	= proc_dointvec_minmax,
68		.extra1		= &zero,
69		.extra2		= &u8_max,
70	},
71	{
72		.procname	= "retries2",
73		.data		= &sysctl_dccp_retries2,
74		.maxlen		= sizeof(sysctl_dccp_retries2),
75		.mode		= 0644,
76		.proc_handler	= proc_dointvec_minmax,
77		.extra1		= &zero,
78		.extra2		= &u8_max,
79	},
80	{
81		.procname	= "tx_qlen",
82		.data		= &sysctl_dccp_tx_qlen,
83		.maxlen		= sizeof(sysctl_dccp_tx_qlen),
84		.mode		= 0644,
85		.proc_handler	= proc_dointvec_minmax,
86		.extra1		= &zero,
87	},
88	{
89		.procname	= "sync_ratelimit",
90		.data		= &sysctl_dccp_sync_ratelimit,
91		.maxlen		= sizeof(sysctl_dccp_sync_ratelimit),
92		.mode		= 0644,
93		.proc_handler	= proc_dointvec_ms_jiffies,
94	},
95
96	{ }
97};
98
99static struct ctl_path dccp_path[] = {
100	{ .procname = "net", },
101	{ .procname = "dccp", },
102	{ .procname = "default", },
103	{ }
104};
105
106static struct ctl_table_header *dccp_table_header;
107
108int __init dccp_sysctl_init(void)
109{
110	dccp_table_header = register_sysctl_paths(dccp_path,
111			dccp_default_table);
112
113	return dccp_table_header != NULL ? 0 : -ENOMEM;
114}
115
116void dccp_sysctl_exit(void)
117{
118	if (dccp_table_header != NULL) {
119		unregister_sysctl_table(dccp_table_header);
120		dccp_table_header = NULL;
121	}
122}
123