1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  * Copyright (C) 1996 Mike Shaver (shaver@zeroknowledge.com)
5  */
6 #include <linux/mm.h>
7 #include <linux/sysctl.h>
8 #include <linux/init.h>
9 #include <net/ax25.h>
10 #include <net/rose.h>
11 
12 static int min_timer[]  = {1 * HZ};
13 static int max_timer[]  = {300 * HZ};
14 static int min_idle[]   = {0 * HZ};
15 static int max_idle[]   = {65535 * HZ};
16 static int min_route[1],       max_route[] = {1};
17 static int min_ftimer[] = {60 * HZ};
18 static int max_ftimer[] = {600 * HZ};
19 static int min_maxvcs[] = {1}, max_maxvcs[] = {254};
20 static int min_window[] = {1}, max_window[] = {7};
21 
22 static struct ctl_table_header *rose_table_header;
23 
24 static struct ctl_table rose_table[] = {
25 	{
26 		.procname	= "restart_request_timeout",
27 		.data		= &sysctl_rose_restart_request_timeout,
28 		.maxlen		= sizeof(int),
29 		.mode		= 0644,
30 		.proc_handler	= proc_dointvec_minmax,
31 		.extra1		= &min_timer,
32 		.extra2		= &max_timer
33 	},
34 	{
35 		.procname	= "call_request_timeout",
36 		.data		= &sysctl_rose_call_request_timeout,
37 		.maxlen		= sizeof(int),
38 		.mode		= 0644,
39 		.proc_handler	= proc_dointvec_minmax,
40 		.extra1		= &min_timer,
41 		.extra2		= &max_timer
42 	},
43 	{
44 		.procname	= "reset_request_timeout",
45 		.data		= &sysctl_rose_reset_request_timeout,
46 		.maxlen		= sizeof(int),
47 		.mode		= 0644,
48 		.proc_handler	= proc_dointvec_minmax,
49 		.extra1		= &min_timer,
50 		.extra2		= &max_timer
51 	},
52 	{
53 		.procname	= "clear_request_timeout",
54 		.data		= &sysctl_rose_clear_request_timeout,
55 		.maxlen		= sizeof(int),
56 		.mode		= 0644,
57 		.proc_handler	= proc_dointvec_minmax,
58 		.extra1		= &min_timer,
59 		.extra2		= &max_timer
60 	},
61 	{
62 		.procname	= "no_activity_timeout",
63 		.data		= &sysctl_rose_no_activity_timeout,
64 		.maxlen		= sizeof(int),
65 		.mode		= 0644,
66 		.proc_handler	= proc_dointvec_minmax,
67 		.extra1		= &min_idle,
68 		.extra2		= &max_idle
69 	},
70 	{
71 		.procname	= "acknowledge_hold_back_timeout",
72 		.data		= &sysctl_rose_ack_hold_back_timeout,
73 		.maxlen		= sizeof(int),
74 		.mode		= 0644,
75 		.proc_handler	= proc_dointvec_minmax,
76 		.extra1		= &min_timer,
77 		.extra2		= &max_timer
78 	},
79 	{
80 		.procname	= "routing_control",
81 		.data		= &sysctl_rose_routing_control,
82 		.maxlen		= sizeof(int),
83 		.mode		= 0644,
84 		.proc_handler	= proc_dointvec_minmax,
85 		.extra1		= &min_route,
86 		.extra2		= &max_route
87 	},
88 	{
89 		.procname	= "link_fail_timeout",
90 		.data		= &sysctl_rose_link_fail_timeout,
91 		.maxlen		= sizeof(int),
92 		.mode		= 0644,
93 		.proc_handler	= proc_dointvec_minmax,
94 		.extra1		= &min_ftimer,
95 		.extra2		= &max_ftimer
96 	},
97 	{
98 		.procname	= "maximum_virtual_circuits",
99 		.data		= &sysctl_rose_maximum_vcs,
100 		.maxlen		= sizeof(int),
101 		.mode		= 0644,
102 		.proc_handler	= proc_dointvec_minmax,
103 		.extra1		= &min_maxvcs,
104 		.extra2		= &max_maxvcs
105 	},
106 	{
107 		.procname	= "window_size",
108 		.data		= &sysctl_rose_window_size,
109 		.maxlen		= sizeof(int),
110 		.mode		= 0644,
111 		.proc_handler	= proc_dointvec_minmax,
112 		.extra1		= &min_window,
113 		.extra2		= &max_window
114 	},
115 };
116 
rose_register_sysctl(void)117 void __init rose_register_sysctl(void)
118 {
119 	rose_table_header = register_net_sysctl(&init_net, "net/rose", rose_table);
120 }
121 
rose_unregister_sysctl(void)122 void rose_unregister_sysctl(void)
123 {
124 	unregister_net_sysctl_table(rose_table_header);
125 }
126