^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (C) 1996 Mike Shaver (shaver@zeroknowledge.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/mm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/sysctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <net/ax25.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <net/netrom.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * Values taken from NET/ROM documentation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) static int min_quality[] = {0}, max_quality[] = {255};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) static int min_obs[] = {0}, max_obs[] = {255};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) static int min_ttl[] = {0}, max_ttl[] = {255};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) static int min_t1[] = {5 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) static int max_t1[] = {600 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) static int min_n2[] = {2}, max_n2[] = {127};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) static int min_t2[] = {1 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) static int max_t2[] = {60 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) static int min_t4[] = {1 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) static int max_t4[] = {1000 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) static int min_window[] = {1}, max_window[] = {127};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) static int min_idle[] = {0 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) static int max_idle[] = {65535 * HZ};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) static int min_route[] = {0}, max_route[] = {1};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) static int min_fails[] = {1}, max_fails[] = {10};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) static int min_reset[] = {0}, max_reset[] = {1};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) static struct ctl_table_header *nr_table_header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) static struct ctl_table nr_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) .procname = "default_path_quality",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .data = &sysctl_netrom_default_path_quality,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) .extra1 = &min_quality,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) .extra2 = &max_quality
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) .procname = "obsolescence_count_initialiser",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) .data = &sysctl_netrom_obsolescence_count_initialiser,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) .extra1 = &min_obs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) .extra2 = &max_obs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) .procname = "network_ttl_initialiser",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) .data = &sysctl_netrom_network_ttl_initialiser,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .extra1 = &min_ttl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .extra2 = &max_ttl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .procname = "transport_timeout",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .data = &sysctl_netrom_transport_timeout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) .extra1 = &min_t1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .extra2 = &max_t1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) .procname = "transport_maximum_tries",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) .data = &sysctl_netrom_transport_maximum_tries,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .extra1 = &min_n2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .extra2 = &max_n2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) .procname = "transport_acknowledge_delay",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) .data = &sysctl_netrom_transport_acknowledge_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) .extra1 = &min_t2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) .extra2 = &max_t2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .procname = "transport_busy_delay",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .data = &sysctl_netrom_transport_busy_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .extra1 = &min_t4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) .extra2 = &max_t4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .procname = "transport_requested_window_size",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .data = &sysctl_netrom_transport_requested_window_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) .extra1 = &min_window,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .extra2 = &max_window
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .procname = "transport_no_activity_timeout",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) .data = &sysctl_netrom_transport_no_activity_timeout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) .extra1 = &min_idle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) .extra2 = &max_idle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) .procname = "routing_control",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) .data = &sysctl_netrom_routing_control,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) .extra1 = &min_route,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) .extra2 = &max_route
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) .procname = "link_fails_count",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) .data = &sysctl_netrom_link_fails_count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) .extra1 = &min_fails,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) .extra2 = &max_fails
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) .procname = "reset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) .data = &sysctl_netrom_reset_circuit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) .extra1 = &min_reset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) .extra2 = &max_reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) int __init nr_register_sysctl(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) nr_table_header = register_net_sysctl(&init_net, "net/netrom", nr_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) if (!nr_table_header)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) void nr_unregister_sysctl(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unregister_net_sysctl_table(nr_table_header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) }