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/netrom.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Values taken from NET/ROM documentation. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_cistatic int min_quality[] = {0}, max_quality[] = {255}; 1662306a36Sopenharmony_cistatic int min_obs[] = {0}, max_obs[] = {255}; 1762306a36Sopenharmony_cistatic int min_ttl[] = {0}, max_ttl[] = {255}; 1862306a36Sopenharmony_cistatic int min_t1[] = {5 * HZ}; 1962306a36Sopenharmony_cistatic int max_t1[] = {600 * HZ}; 2062306a36Sopenharmony_cistatic int min_n2[] = {2}, max_n2[] = {127}; 2162306a36Sopenharmony_cistatic int min_t2[] = {1 * HZ}; 2262306a36Sopenharmony_cistatic int max_t2[] = {60 * HZ}; 2362306a36Sopenharmony_cistatic int min_t4[] = {1 * HZ}; 2462306a36Sopenharmony_cistatic int max_t4[] = {1000 * HZ}; 2562306a36Sopenharmony_cistatic int min_window[] = {1}, max_window[] = {127}; 2662306a36Sopenharmony_cistatic int min_idle[] = {0 * HZ}; 2762306a36Sopenharmony_cistatic int max_idle[] = {65535 * HZ}; 2862306a36Sopenharmony_cistatic int min_route[] = {0}, max_route[] = {1}; 2962306a36Sopenharmony_cistatic int min_fails[] = {1}, max_fails[] = {10}; 3062306a36Sopenharmony_cistatic int min_reset[] = {0}, max_reset[] = {1}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistatic struct ctl_table_header *nr_table_header; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic struct ctl_table nr_table[] = { 3562306a36Sopenharmony_ci { 3662306a36Sopenharmony_ci .procname = "default_path_quality", 3762306a36Sopenharmony_ci .data = &sysctl_netrom_default_path_quality, 3862306a36Sopenharmony_ci .maxlen = sizeof(int), 3962306a36Sopenharmony_ci .mode = 0644, 4062306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 4162306a36Sopenharmony_ci .extra1 = &min_quality, 4262306a36Sopenharmony_ci .extra2 = &max_quality 4362306a36Sopenharmony_ci }, 4462306a36Sopenharmony_ci { 4562306a36Sopenharmony_ci .procname = "obsolescence_count_initialiser", 4662306a36Sopenharmony_ci .data = &sysctl_netrom_obsolescence_count_initialiser, 4762306a36Sopenharmony_ci .maxlen = sizeof(int), 4862306a36Sopenharmony_ci .mode = 0644, 4962306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 5062306a36Sopenharmony_ci .extra1 = &min_obs, 5162306a36Sopenharmony_ci .extra2 = &max_obs 5262306a36Sopenharmony_ci }, 5362306a36Sopenharmony_ci { 5462306a36Sopenharmony_ci .procname = "network_ttl_initialiser", 5562306a36Sopenharmony_ci .data = &sysctl_netrom_network_ttl_initialiser, 5662306a36Sopenharmony_ci .maxlen = sizeof(int), 5762306a36Sopenharmony_ci .mode = 0644, 5862306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 5962306a36Sopenharmony_ci .extra1 = &min_ttl, 6062306a36Sopenharmony_ci .extra2 = &max_ttl 6162306a36Sopenharmony_ci }, 6262306a36Sopenharmony_ci { 6362306a36Sopenharmony_ci .procname = "transport_timeout", 6462306a36Sopenharmony_ci .data = &sysctl_netrom_transport_timeout, 6562306a36Sopenharmony_ci .maxlen = sizeof(int), 6662306a36Sopenharmony_ci .mode = 0644, 6762306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 6862306a36Sopenharmony_ci .extra1 = &min_t1, 6962306a36Sopenharmony_ci .extra2 = &max_t1 7062306a36Sopenharmony_ci }, 7162306a36Sopenharmony_ci { 7262306a36Sopenharmony_ci .procname = "transport_maximum_tries", 7362306a36Sopenharmony_ci .data = &sysctl_netrom_transport_maximum_tries, 7462306a36Sopenharmony_ci .maxlen = sizeof(int), 7562306a36Sopenharmony_ci .mode = 0644, 7662306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 7762306a36Sopenharmony_ci .extra1 = &min_n2, 7862306a36Sopenharmony_ci .extra2 = &max_n2 7962306a36Sopenharmony_ci }, 8062306a36Sopenharmony_ci { 8162306a36Sopenharmony_ci .procname = "transport_acknowledge_delay", 8262306a36Sopenharmony_ci .data = &sysctl_netrom_transport_acknowledge_delay, 8362306a36Sopenharmony_ci .maxlen = sizeof(int), 8462306a36Sopenharmony_ci .mode = 0644, 8562306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 8662306a36Sopenharmony_ci .extra1 = &min_t2, 8762306a36Sopenharmony_ci .extra2 = &max_t2 8862306a36Sopenharmony_ci }, 8962306a36Sopenharmony_ci { 9062306a36Sopenharmony_ci .procname = "transport_busy_delay", 9162306a36Sopenharmony_ci .data = &sysctl_netrom_transport_busy_delay, 9262306a36Sopenharmony_ci .maxlen = sizeof(int), 9362306a36Sopenharmony_ci .mode = 0644, 9462306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 9562306a36Sopenharmony_ci .extra1 = &min_t4, 9662306a36Sopenharmony_ci .extra2 = &max_t4 9762306a36Sopenharmony_ci }, 9862306a36Sopenharmony_ci { 9962306a36Sopenharmony_ci .procname = "transport_requested_window_size", 10062306a36Sopenharmony_ci .data = &sysctl_netrom_transport_requested_window_size, 10162306a36Sopenharmony_ci .maxlen = sizeof(int), 10262306a36Sopenharmony_ci .mode = 0644, 10362306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 10462306a36Sopenharmony_ci .extra1 = &min_window, 10562306a36Sopenharmony_ci .extra2 = &max_window 10662306a36Sopenharmony_ci }, 10762306a36Sopenharmony_ci { 10862306a36Sopenharmony_ci .procname = "transport_no_activity_timeout", 10962306a36Sopenharmony_ci .data = &sysctl_netrom_transport_no_activity_timeout, 11062306a36Sopenharmony_ci .maxlen = sizeof(int), 11162306a36Sopenharmony_ci .mode = 0644, 11262306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 11362306a36Sopenharmony_ci .extra1 = &min_idle, 11462306a36Sopenharmony_ci .extra2 = &max_idle 11562306a36Sopenharmony_ci }, 11662306a36Sopenharmony_ci { 11762306a36Sopenharmony_ci .procname = "routing_control", 11862306a36Sopenharmony_ci .data = &sysctl_netrom_routing_control, 11962306a36Sopenharmony_ci .maxlen = sizeof(int), 12062306a36Sopenharmony_ci .mode = 0644, 12162306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 12262306a36Sopenharmony_ci .extra1 = &min_route, 12362306a36Sopenharmony_ci .extra2 = &max_route 12462306a36Sopenharmony_ci }, 12562306a36Sopenharmony_ci { 12662306a36Sopenharmony_ci .procname = "link_fails_count", 12762306a36Sopenharmony_ci .data = &sysctl_netrom_link_fails_count, 12862306a36Sopenharmony_ci .maxlen = sizeof(int), 12962306a36Sopenharmony_ci .mode = 0644, 13062306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 13162306a36Sopenharmony_ci .extra1 = &min_fails, 13262306a36Sopenharmony_ci .extra2 = &max_fails 13362306a36Sopenharmony_ci }, 13462306a36Sopenharmony_ci { 13562306a36Sopenharmony_ci .procname = "reset", 13662306a36Sopenharmony_ci .data = &sysctl_netrom_reset_circuit, 13762306a36Sopenharmony_ci .maxlen = sizeof(int), 13862306a36Sopenharmony_ci .mode = 0644, 13962306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 14062306a36Sopenharmony_ci .extra1 = &min_reset, 14162306a36Sopenharmony_ci .extra2 = &max_reset 14262306a36Sopenharmony_ci }, 14362306a36Sopenharmony_ci { } 14462306a36Sopenharmony_ci}; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ciint __init nr_register_sysctl(void) 14762306a36Sopenharmony_ci{ 14862306a36Sopenharmony_ci nr_table_header = register_net_sysctl(&init_net, "net/netrom", nr_table); 14962306a36Sopenharmony_ci if (!nr_table_header) 15062306a36Sopenharmony_ci return -ENOMEM; 15162306a36Sopenharmony_ci return 0; 15262306a36Sopenharmony_ci} 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_civoid nr_unregister_sysctl(void) 15562306a36Sopenharmony_ci{ 15662306a36Sopenharmony_ci unregister_net_sysctl_table(nr_table_header); 15762306a36Sopenharmony_ci} 158