162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 1996 Mike Shaver (shaver@zeroknowledge.com)
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci#include <linux/mm.h>
762306a36Sopenharmony_ci#include <linux/sysctl.h>
862306a36Sopenharmony_ci#include <linux/init.h>
962306a36Sopenharmony_ci#include <net/ax25.h>
1062306a36Sopenharmony_ci#include <net/rose.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistatic int min_timer[]  = {1 * HZ};
1362306a36Sopenharmony_cistatic int max_timer[]  = {300 * HZ};
1462306a36Sopenharmony_cistatic int min_idle[]   = {0 * HZ};
1562306a36Sopenharmony_cistatic int max_idle[]   = {65535 * HZ};
1662306a36Sopenharmony_cistatic int min_route[1],       max_route[] = {1};
1762306a36Sopenharmony_cistatic int min_ftimer[] = {60 * HZ};
1862306a36Sopenharmony_cistatic int max_ftimer[] = {600 * HZ};
1962306a36Sopenharmony_cistatic int min_maxvcs[] = {1}, max_maxvcs[] = {254};
2062306a36Sopenharmony_cistatic int min_window[] = {1}, max_window[] = {7};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic struct ctl_table_header *rose_table_header;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic struct ctl_table rose_table[] = {
2562306a36Sopenharmony_ci	{
2662306a36Sopenharmony_ci		.procname	= "restart_request_timeout",
2762306a36Sopenharmony_ci		.data		= &sysctl_rose_restart_request_timeout,
2862306a36Sopenharmony_ci		.maxlen		= sizeof(int),
2962306a36Sopenharmony_ci		.mode		= 0644,
3062306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
3162306a36Sopenharmony_ci		.extra1		= &min_timer,
3262306a36Sopenharmony_ci		.extra2		= &max_timer
3362306a36Sopenharmony_ci	},
3462306a36Sopenharmony_ci	{
3562306a36Sopenharmony_ci		.procname	= "call_request_timeout",
3662306a36Sopenharmony_ci		.data		= &sysctl_rose_call_request_timeout,
3762306a36Sopenharmony_ci		.maxlen		= sizeof(int),
3862306a36Sopenharmony_ci		.mode		= 0644,
3962306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
4062306a36Sopenharmony_ci		.extra1		= &min_timer,
4162306a36Sopenharmony_ci		.extra2		= &max_timer
4262306a36Sopenharmony_ci	},
4362306a36Sopenharmony_ci	{
4462306a36Sopenharmony_ci		.procname	= "reset_request_timeout",
4562306a36Sopenharmony_ci		.data		= &sysctl_rose_reset_request_timeout,
4662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
4762306a36Sopenharmony_ci		.mode		= 0644,
4862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
4962306a36Sopenharmony_ci		.extra1		= &min_timer,
5062306a36Sopenharmony_ci		.extra2		= &max_timer
5162306a36Sopenharmony_ci	},
5262306a36Sopenharmony_ci	{
5362306a36Sopenharmony_ci		.procname	= "clear_request_timeout",
5462306a36Sopenharmony_ci		.data		= &sysctl_rose_clear_request_timeout,
5562306a36Sopenharmony_ci		.maxlen		= sizeof(int),
5662306a36Sopenharmony_ci		.mode		= 0644,
5762306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
5862306a36Sopenharmony_ci		.extra1		= &min_timer,
5962306a36Sopenharmony_ci		.extra2		= &max_timer
6062306a36Sopenharmony_ci	},
6162306a36Sopenharmony_ci	{
6262306a36Sopenharmony_ci		.procname	= "no_activity_timeout",
6362306a36Sopenharmony_ci		.data		= &sysctl_rose_no_activity_timeout,
6462306a36Sopenharmony_ci		.maxlen		= sizeof(int),
6562306a36Sopenharmony_ci		.mode		= 0644,
6662306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
6762306a36Sopenharmony_ci		.extra1		= &min_idle,
6862306a36Sopenharmony_ci		.extra2		= &max_idle
6962306a36Sopenharmony_ci	},
7062306a36Sopenharmony_ci	{
7162306a36Sopenharmony_ci		.procname	= "acknowledge_hold_back_timeout",
7262306a36Sopenharmony_ci		.data		= &sysctl_rose_ack_hold_back_timeout,
7362306a36Sopenharmony_ci		.maxlen		= sizeof(int),
7462306a36Sopenharmony_ci		.mode		= 0644,
7562306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
7662306a36Sopenharmony_ci		.extra1		= &min_timer,
7762306a36Sopenharmony_ci		.extra2		= &max_timer
7862306a36Sopenharmony_ci	},
7962306a36Sopenharmony_ci	{
8062306a36Sopenharmony_ci		.procname	= "routing_control",
8162306a36Sopenharmony_ci		.data		= &sysctl_rose_routing_control,
8262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
8362306a36Sopenharmony_ci		.mode		= 0644,
8462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
8562306a36Sopenharmony_ci		.extra1		= &min_route,
8662306a36Sopenharmony_ci		.extra2		= &max_route
8762306a36Sopenharmony_ci	},
8862306a36Sopenharmony_ci	{
8962306a36Sopenharmony_ci		.procname	= "link_fail_timeout",
9062306a36Sopenharmony_ci		.data		= &sysctl_rose_link_fail_timeout,
9162306a36Sopenharmony_ci		.maxlen		= sizeof(int),
9262306a36Sopenharmony_ci		.mode		= 0644,
9362306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
9462306a36Sopenharmony_ci		.extra1		= &min_ftimer,
9562306a36Sopenharmony_ci		.extra2		= &max_ftimer
9662306a36Sopenharmony_ci	},
9762306a36Sopenharmony_ci	{
9862306a36Sopenharmony_ci		.procname	= "maximum_virtual_circuits",
9962306a36Sopenharmony_ci		.data		= &sysctl_rose_maximum_vcs,
10062306a36Sopenharmony_ci		.maxlen		= sizeof(int),
10162306a36Sopenharmony_ci		.mode		= 0644,
10262306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
10362306a36Sopenharmony_ci		.extra1		= &min_maxvcs,
10462306a36Sopenharmony_ci		.extra2		= &max_maxvcs
10562306a36Sopenharmony_ci	},
10662306a36Sopenharmony_ci	{
10762306a36Sopenharmony_ci		.procname	= "window_size",
10862306a36Sopenharmony_ci		.data		= &sysctl_rose_window_size,
10962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
11062306a36Sopenharmony_ci		.mode		= 0644,
11162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
11262306a36Sopenharmony_ci		.extra1		= &min_window,
11362306a36Sopenharmony_ci		.extra2		= &max_window
11462306a36Sopenharmony_ci	},
11562306a36Sopenharmony_ci	{ }
11662306a36Sopenharmony_ci};
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_civoid __init rose_register_sysctl(void)
11962306a36Sopenharmony_ci{
12062306a36Sopenharmony_ci	rose_table_header = register_net_sysctl(&init_net, "net/rose", rose_table);
12162306a36Sopenharmony_ci}
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_civoid rose_unregister_sysctl(void)
12462306a36Sopenharmony_ci{
12562306a36Sopenharmony_ci	unregister_net_sysctl_table(rose_table_header);
12662306a36Sopenharmony_ci}
127