1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * Copyright (C) 1996 Mike Shaver (shaver@zeroknowledge.com)
8  */
9 #include <linux/mm.h>
10 #include <linux/sysctl.h>
11 #include <linux/init.h>
12 #include <net/ax25.h>
13 #include <net/netrom.h>
14 
15 /*
16  *	Values taken from NET/ROM documentation.
17  */
18 static int min_quality[] = {0}, max_quality[] = {255};
19 static int min_obs[]     = {0}, max_obs[]     = {255};
20 static int min_ttl[]     = {0}, max_ttl[]     = {255};
21 static int min_t1[]      = {5 * HZ};
22 static int max_t1[]      = {600 * HZ};
23 static int min_n2[]      = {2}, max_n2[]      = {127};
24 static int min_t2[]      = {1 * HZ};
25 static int max_t2[]      = {60 * HZ};
26 static int min_t4[]      = {1 * HZ};
27 static int max_t4[]      = {1000 * HZ};
28 static int min_window[]  = {1}, max_window[]  = {127};
29 static int min_idle[]    = {0 * HZ};
30 static int max_idle[]    = {65535 * HZ};
31 static int min_route[]   = {0}, max_route[]   = {1};
32 static int min_fails[]   = {1}, max_fails[]   = {10};
33 static int min_reset[]   = {0}, max_reset[]   = {1};
34 
35 static struct ctl_table_header *nr_table_header;
36 
37 static ctl_table nr_table[] = {
38 	{
39 		.ctl_name	= NET_NETROM_DEFAULT_PATH_QUALITY,
40 		.procname	= "default_path_quality",
41 		.data		= &sysctl_netrom_default_path_quality,
42 		.maxlen		= sizeof(int),
43 		.mode		= 0644,
44 		.proc_handler	= proc_dointvec_minmax,
45 		.strategy	= sysctl_intvec,
46 		.extra1		= &min_quality,
47 		.extra2		= &max_quality
48 	},
49 	{
50 		.ctl_name	= NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER,
51 		.procname	= "obsolescence_count_initialiser",
52 		.data		= &sysctl_netrom_obsolescence_count_initialiser,
53 		.maxlen		= sizeof(int),
54 		.mode		= 0644,
55 		.proc_handler	= proc_dointvec_minmax,
56 		.strategy	= sysctl_intvec,
57 		.extra1		= &min_obs,
58 		.extra2		= &max_obs
59 	},
60 	{
61 		.ctl_name	= NET_NETROM_NETWORK_TTL_INITIALISER,
62 		.procname	= "network_ttl_initialiser",
63 		.data		= &sysctl_netrom_network_ttl_initialiser,
64 		.maxlen		= sizeof(int),
65 		.mode		= 0644,
66 		.proc_handler	= proc_dointvec_minmax,
67 		.strategy	= sysctl_intvec,
68 		.extra1		= &min_ttl,
69 		.extra2		= &max_ttl
70 	},
71 	{
72 		.ctl_name	= NET_NETROM_TRANSPORT_TIMEOUT,
73 		.procname	= "transport_timeout",
74 		.data		= &sysctl_netrom_transport_timeout,
75 		.maxlen		= sizeof(int),
76 		.mode		= 0644,
77 		.proc_handler	= proc_dointvec_minmax,
78 		.strategy	= sysctl_intvec,
79 		.extra1		= &min_t1,
80 		.extra2		= &max_t1
81 	},
82 	{
83 		.ctl_name	= NET_NETROM_TRANSPORT_MAXIMUM_TRIES,
84 		.procname	= "transport_maximum_tries",
85 		.data		= &sysctl_netrom_transport_maximum_tries,
86 		.maxlen		= sizeof(int),
87 		.mode		= 0644,
88 		.proc_handler	= proc_dointvec_minmax,
89 		.strategy	= sysctl_intvec,
90 		.extra1		= &min_n2,
91 		.extra2		= &max_n2
92 	},
93 	{
94 		.ctl_name	= NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY,
95 		.procname	= "transport_acknowledge_delay",
96 		.data		= &sysctl_netrom_transport_acknowledge_delay,
97 		.maxlen		= sizeof(int),
98 		.mode		= 0644,
99 		.proc_handler	= proc_dointvec_minmax,
100 		.strategy	= sysctl_intvec,
101 		.extra1		= &min_t2,
102 		.extra2		= &max_t2
103 	},
104 	{
105 		.ctl_name	= NET_NETROM_TRANSPORT_BUSY_DELAY,
106 		.procname	= "transport_busy_delay",
107 		.data		= &sysctl_netrom_transport_busy_delay,
108 		.maxlen		= sizeof(int),
109 		.mode		= 0644,
110 		.proc_handler	= proc_dointvec_minmax,
111 		.strategy	= sysctl_intvec,
112 		.extra1		= &min_t4,
113 		.extra2		= &max_t4
114 	},
115 	{
116 		.ctl_name	= NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE,
117 		.procname	= "transport_requested_window_size",
118 		.data		= &sysctl_netrom_transport_requested_window_size,
119 		.maxlen		= sizeof(int),
120 		.mode		= 0644,
121 		.proc_handler	= proc_dointvec_minmax,
122 		.strategy	= sysctl_intvec,
123 		.extra1		= &min_window,
124 		.extra2		= &max_window
125 	},
126 	{
127 		.ctl_name	= NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT,
128 		.procname	= "transport_no_activity_timeout",
129 		.data		= &sysctl_netrom_transport_no_activity_timeout,
130 		.maxlen		= sizeof(int),
131 		.mode		= 0644,
132 		.proc_handler	= proc_dointvec_minmax,
133 		.strategy	= sysctl_intvec,
134 		.extra1		= &min_idle,
135 		.extra2		= &max_idle
136 	},
137 	{
138 		.ctl_name	= NET_NETROM_ROUTING_CONTROL,
139 		.procname	= "routing_control",
140 		.data		= &sysctl_netrom_routing_control,
141 		.maxlen		= sizeof(int),
142 		.mode		= 0644,
143 		.proc_handler	= proc_dointvec_minmax,
144 		.strategy	= sysctl_intvec,
145 		.extra1		= &min_route,
146 		.extra2		= &max_route
147 	},
148 	{
149 		.ctl_name	= NET_NETROM_LINK_FAILS_COUNT,
150 		.procname	= "link_fails_count",
151 		.data		= &sysctl_netrom_link_fails_count,
152 		.maxlen		= sizeof(int),
153 		.mode		= 0644,
154 		.proc_handler	= proc_dointvec_minmax,
155 		.strategy	= sysctl_intvec,
156 		.extra1		= &min_fails,
157 		.extra2		= &max_fails
158 	},
159 	{
160 		.ctl_name	= NET_NETROM_RESET,
161 		.procname	= "reset",
162 		.data		= &sysctl_netrom_reset_circuit,
163 		.maxlen		= sizeof(int),
164 		.mode		= 0644,
165 		.proc_handler	= proc_dointvec_minmax,
166 		.strategy	= sysctl_intvec,
167 		.extra1		= &min_reset,
168 		.extra2		= &max_reset
169 	},
170 	{ .ctl_name = 0 }
171 };
172 
173 static struct ctl_path nr_path[] = {
174 	{ .procname = "net", .ctl_name = CTL_NET, },
175 	{ .procname = "netrom", .ctl_name = NET_NETROM, },
176 	{ }
177 };
178 
179 void __init nr_register_sysctl(void)
180 {
181 	nr_table_header = register_sysctl_paths(nr_path, nr_table);
182 }
183 
184 void nr_unregister_sysctl(void)
185 {
186 	unregister_sysctl_table(nr_table_header);
187 }
188