18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 1996 Mike Shaver (shaver@zeroknowledge.com)
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci#include <linux/mm.h>
78c2ecf20Sopenharmony_ci#include <linux/sysctl.h>
88c2ecf20Sopenharmony_ci#include <linux/init.h>
98c2ecf20Sopenharmony_ci#include <net/ax25.h>
108c2ecf20Sopenharmony_ci#include <net/rose.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic int min_timer[]  = {1 * HZ};
138c2ecf20Sopenharmony_cistatic int max_timer[]  = {300 * HZ};
148c2ecf20Sopenharmony_cistatic int min_idle[]   = {0 * HZ};
158c2ecf20Sopenharmony_cistatic int max_idle[]   = {65535 * HZ};
168c2ecf20Sopenharmony_cistatic int min_route[1],       max_route[] = {1};
178c2ecf20Sopenharmony_cistatic int min_ftimer[] = {60 * HZ};
188c2ecf20Sopenharmony_cistatic int max_ftimer[] = {600 * HZ};
198c2ecf20Sopenharmony_cistatic int min_maxvcs[] = {1}, max_maxvcs[] = {254};
208c2ecf20Sopenharmony_cistatic int min_window[] = {1}, max_window[] = {7};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistatic struct ctl_table_header *rose_table_header;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cistatic struct ctl_table rose_table[] = {
258c2ecf20Sopenharmony_ci	{
268c2ecf20Sopenharmony_ci		.procname	= "restart_request_timeout",
278c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_restart_request_timeout,
288c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
298c2ecf20Sopenharmony_ci		.mode		= 0644,
308c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
318c2ecf20Sopenharmony_ci		.extra1		= &min_timer,
328c2ecf20Sopenharmony_ci		.extra2		= &max_timer
338c2ecf20Sopenharmony_ci	},
348c2ecf20Sopenharmony_ci	{
358c2ecf20Sopenharmony_ci		.procname	= "call_request_timeout",
368c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_call_request_timeout,
378c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
388c2ecf20Sopenharmony_ci		.mode		= 0644,
398c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
408c2ecf20Sopenharmony_ci		.extra1		= &min_timer,
418c2ecf20Sopenharmony_ci		.extra2		= &max_timer
428c2ecf20Sopenharmony_ci	},
438c2ecf20Sopenharmony_ci	{
448c2ecf20Sopenharmony_ci		.procname	= "reset_request_timeout",
458c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_reset_request_timeout,
468c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
478c2ecf20Sopenharmony_ci		.mode		= 0644,
488c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
498c2ecf20Sopenharmony_ci		.extra1		= &min_timer,
508c2ecf20Sopenharmony_ci		.extra2		= &max_timer
518c2ecf20Sopenharmony_ci	},
528c2ecf20Sopenharmony_ci	{
538c2ecf20Sopenharmony_ci		.procname	= "clear_request_timeout",
548c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_clear_request_timeout,
558c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
568c2ecf20Sopenharmony_ci		.mode		= 0644,
578c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
588c2ecf20Sopenharmony_ci		.extra1		= &min_timer,
598c2ecf20Sopenharmony_ci		.extra2		= &max_timer
608c2ecf20Sopenharmony_ci	},
618c2ecf20Sopenharmony_ci	{
628c2ecf20Sopenharmony_ci		.procname	= "no_activity_timeout",
638c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_no_activity_timeout,
648c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
658c2ecf20Sopenharmony_ci		.mode		= 0644,
668c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
678c2ecf20Sopenharmony_ci		.extra1		= &min_idle,
688c2ecf20Sopenharmony_ci		.extra2		= &max_idle
698c2ecf20Sopenharmony_ci	},
708c2ecf20Sopenharmony_ci	{
718c2ecf20Sopenharmony_ci		.procname	= "acknowledge_hold_back_timeout",
728c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_ack_hold_back_timeout,
738c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
748c2ecf20Sopenharmony_ci		.mode		= 0644,
758c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
768c2ecf20Sopenharmony_ci		.extra1		= &min_timer,
778c2ecf20Sopenharmony_ci		.extra2		= &max_timer
788c2ecf20Sopenharmony_ci	},
798c2ecf20Sopenharmony_ci	{
808c2ecf20Sopenharmony_ci		.procname	= "routing_control",
818c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_routing_control,
828c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
838c2ecf20Sopenharmony_ci		.mode		= 0644,
848c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
858c2ecf20Sopenharmony_ci		.extra1		= &min_route,
868c2ecf20Sopenharmony_ci		.extra2		= &max_route
878c2ecf20Sopenharmony_ci	},
888c2ecf20Sopenharmony_ci	{
898c2ecf20Sopenharmony_ci		.procname	= "link_fail_timeout",
908c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_link_fail_timeout,
918c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
928c2ecf20Sopenharmony_ci		.mode		= 0644,
938c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
948c2ecf20Sopenharmony_ci		.extra1		= &min_ftimer,
958c2ecf20Sopenharmony_ci		.extra2		= &max_ftimer
968c2ecf20Sopenharmony_ci	},
978c2ecf20Sopenharmony_ci	{
988c2ecf20Sopenharmony_ci		.procname	= "maximum_virtual_circuits",
998c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_maximum_vcs,
1008c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
1018c2ecf20Sopenharmony_ci		.mode		= 0644,
1028c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
1038c2ecf20Sopenharmony_ci		.extra1		= &min_maxvcs,
1048c2ecf20Sopenharmony_ci		.extra2		= &max_maxvcs
1058c2ecf20Sopenharmony_ci	},
1068c2ecf20Sopenharmony_ci	{
1078c2ecf20Sopenharmony_ci		.procname	= "window_size",
1088c2ecf20Sopenharmony_ci		.data		= &sysctl_rose_window_size,
1098c2ecf20Sopenharmony_ci		.maxlen		= sizeof(int),
1108c2ecf20Sopenharmony_ci		.mode		= 0644,
1118c2ecf20Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
1128c2ecf20Sopenharmony_ci		.extra1		= &min_window,
1138c2ecf20Sopenharmony_ci		.extra2		= &max_window
1148c2ecf20Sopenharmony_ci	},
1158c2ecf20Sopenharmony_ci	{ }
1168c2ecf20Sopenharmony_ci};
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_civoid __init rose_register_sysctl(void)
1198c2ecf20Sopenharmony_ci{
1208c2ecf20Sopenharmony_ci	rose_table_header = register_net_sysctl(&init_net, "net/rose", rose_table);
1218c2ecf20Sopenharmony_ci}
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_civoid rose_unregister_sysctl(void)
1248c2ecf20Sopenharmony_ci{
1258c2ecf20Sopenharmony_ci	unregister_net_sysctl_table(rose_table_header);
1268c2ecf20Sopenharmony_ci}
127