^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) /* sysctls for configuring RxRPC operating parameters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Written by David Howells (dhowells@redhat.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/sysctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <net/sock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <net/af_rxrpc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include "ar-internal.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) static struct ctl_table_header *rxrpc_sysctl_reg_table;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) static const unsigned int four = 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) static const unsigned int thirtytwo = 32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) static const unsigned int n_65535 = 65535;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) static const unsigned int n_max_acks = RXRPC_RXTX_BUFF_SIZE - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) static const unsigned long one_jiffy = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) static const unsigned long max_jiffies = MAX_JIFFY_OFFSET;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * RxRPC operating parameters.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * See Documentation/networking/rxrpc.rst and the variable definitions for more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * information on the individual parameters.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) static struct ctl_table rxrpc_sysctl_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* Values measured in milliseconds but used in jiffies */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .procname = "req_ack_delay",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) .data = &rxrpc_requested_ack_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) .extra1 = (void *)&one_jiffy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) .extra2 = (void *)&max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .procname = "soft_ack_delay",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .data = &rxrpc_soft_ack_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) .extra1 = (void *)&one_jiffy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) .extra2 = (void *)&max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) .procname = "idle_ack_delay",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) .data = &rxrpc_idle_ack_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) .extra1 = (void *)&one_jiffy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) .extra2 = (void *)&max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) .procname = "idle_conn_expiry",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .data = &rxrpc_conn_idle_client_expiry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) .extra1 = (void *)&one_jiffy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .extra2 = (void *)&max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) .procname = "idle_conn_fast_expiry",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) .data = &rxrpc_conn_idle_client_fast_expiry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) .extra1 = (void *)&one_jiffy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) .extra2 = (void *)&max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) /* Non-time values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .procname = "reap_client_conns",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .data = &rxrpc_reap_client_connections,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .maxlen = sizeof(unsigned int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) .extra1 = (void *)SYSCTL_ONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) .extra2 = (void *)&n_65535,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) .procname = "max_backlog",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) .data = &rxrpc_max_backlog,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) .maxlen = sizeof(unsigned int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .extra1 = (void *)&four,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .extra2 = (void *)&thirtytwo,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .procname = "rx_window_size",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) .data = &rxrpc_rx_window_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .maxlen = sizeof(unsigned int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .extra1 = (void *)SYSCTL_ONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .extra2 = (void *)&n_max_acks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) .procname = "rx_mtu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .data = &rxrpc_rx_mtu,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) .maxlen = sizeof(unsigned int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) .extra1 = (void *)SYSCTL_ONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) .extra2 = (void *)&n_65535,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) .procname = "rx_jumbo_max",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) .data = &rxrpc_rx_jumbo_max,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) .maxlen = sizeof(unsigned int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) .proc_handler = proc_dointvec_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) .extra1 = (void *)SYSCTL_ONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) .extra2 = (void *)&four,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) int __init rxrpc_sysctl_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) rxrpc_sysctl_reg_table = register_net_sysctl(&init_net, "net/rxrpc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) rxrpc_sysctl_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) if (!rxrpc_sysctl_reg_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) void rxrpc_sysctl_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) if (rxrpc_sysctl_reg_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) unregister_net_sysctl_table(rxrpc_sysctl_reg_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }