18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* sysctls for configuring RxRPC operating parameters 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2014 Red Hat, Inc. All Rights Reserved. 58c2ecf20Sopenharmony_ci * Written by David Howells (dhowells@redhat.com) 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/sysctl.h> 98c2ecf20Sopenharmony_ci#include <net/sock.h> 108c2ecf20Sopenharmony_ci#include <net/af_rxrpc.h> 118c2ecf20Sopenharmony_ci#include "ar-internal.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistatic struct ctl_table_header *rxrpc_sysctl_reg_table; 148c2ecf20Sopenharmony_cistatic const unsigned int four = 4; 158c2ecf20Sopenharmony_cistatic const unsigned int max_backlog = RXRPC_BACKLOG_MAX - 1; 168c2ecf20Sopenharmony_cistatic const unsigned int n_65535 = 65535; 178c2ecf20Sopenharmony_cistatic const unsigned int n_max_acks = RXRPC_RXTX_BUFF_SIZE - 1; 188c2ecf20Sopenharmony_cistatic const unsigned long one_jiffy = 1; 198c2ecf20Sopenharmony_cistatic const unsigned long max_jiffies = MAX_JIFFY_OFFSET; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci/* 228c2ecf20Sopenharmony_ci * RxRPC operating parameters. 238c2ecf20Sopenharmony_ci * 248c2ecf20Sopenharmony_ci * See Documentation/networking/rxrpc.rst and the variable definitions for more 258c2ecf20Sopenharmony_ci * information on the individual parameters. 268c2ecf20Sopenharmony_ci */ 278c2ecf20Sopenharmony_cistatic struct ctl_table rxrpc_sysctl_table[] = { 288c2ecf20Sopenharmony_ci /* Values measured in milliseconds but used in jiffies */ 298c2ecf20Sopenharmony_ci { 308c2ecf20Sopenharmony_ci .procname = "req_ack_delay", 318c2ecf20Sopenharmony_ci .data = &rxrpc_requested_ack_delay, 328c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned long), 338c2ecf20Sopenharmony_ci .mode = 0644, 348c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_ms_jiffies_minmax, 358c2ecf20Sopenharmony_ci .extra1 = (void *)&one_jiffy, 368c2ecf20Sopenharmony_ci .extra2 = (void *)&max_jiffies, 378c2ecf20Sopenharmony_ci }, 388c2ecf20Sopenharmony_ci { 398c2ecf20Sopenharmony_ci .procname = "soft_ack_delay", 408c2ecf20Sopenharmony_ci .data = &rxrpc_soft_ack_delay, 418c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned long), 428c2ecf20Sopenharmony_ci .mode = 0644, 438c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_ms_jiffies_minmax, 448c2ecf20Sopenharmony_ci .extra1 = (void *)&one_jiffy, 458c2ecf20Sopenharmony_ci .extra2 = (void *)&max_jiffies, 468c2ecf20Sopenharmony_ci }, 478c2ecf20Sopenharmony_ci { 488c2ecf20Sopenharmony_ci .procname = "idle_ack_delay", 498c2ecf20Sopenharmony_ci .data = &rxrpc_idle_ack_delay, 508c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned long), 518c2ecf20Sopenharmony_ci .mode = 0644, 528c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_ms_jiffies_minmax, 538c2ecf20Sopenharmony_ci .extra1 = (void *)&one_jiffy, 548c2ecf20Sopenharmony_ci .extra2 = (void *)&max_jiffies, 558c2ecf20Sopenharmony_ci }, 568c2ecf20Sopenharmony_ci { 578c2ecf20Sopenharmony_ci .procname = "idle_conn_expiry", 588c2ecf20Sopenharmony_ci .data = &rxrpc_conn_idle_client_expiry, 598c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned long), 608c2ecf20Sopenharmony_ci .mode = 0644, 618c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_ms_jiffies_minmax, 628c2ecf20Sopenharmony_ci .extra1 = (void *)&one_jiffy, 638c2ecf20Sopenharmony_ci .extra2 = (void *)&max_jiffies, 648c2ecf20Sopenharmony_ci }, 658c2ecf20Sopenharmony_ci { 668c2ecf20Sopenharmony_ci .procname = "idle_conn_fast_expiry", 678c2ecf20Sopenharmony_ci .data = &rxrpc_conn_idle_client_fast_expiry, 688c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned long), 698c2ecf20Sopenharmony_ci .mode = 0644, 708c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_ms_jiffies_minmax, 718c2ecf20Sopenharmony_ci .extra1 = (void *)&one_jiffy, 728c2ecf20Sopenharmony_ci .extra2 = (void *)&max_jiffies, 738c2ecf20Sopenharmony_ci }, 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci /* Non-time values */ 768c2ecf20Sopenharmony_ci { 778c2ecf20Sopenharmony_ci .procname = "reap_client_conns", 788c2ecf20Sopenharmony_ci .data = &rxrpc_reap_client_connections, 798c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned int), 808c2ecf20Sopenharmony_ci .mode = 0644, 818c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 828c2ecf20Sopenharmony_ci .extra1 = (void *)SYSCTL_ONE, 838c2ecf20Sopenharmony_ci .extra2 = (void *)&n_65535, 848c2ecf20Sopenharmony_ci }, 858c2ecf20Sopenharmony_ci { 868c2ecf20Sopenharmony_ci .procname = "max_backlog", 878c2ecf20Sopenharmony_ci .data = &rxrpc_max_backlog, 888c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned int), 898c2ecf20Sopenharmony_ci .mode = 0644, 908c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 918c2ecf20Sopenharmony_ci .extra1 = (void *)&four, 928c2ecf20Sopenharmony_ci .extra2 = (void *)&max_backlog, 938c2ecf20Sopenharmony_ci }, 948c2ecf20Sopenharmony_ci { 958c2ecf20Sopenharmony_ci .procname = "rx_window_size", 968c2ecf20Sopenharmony_ci .data = &rxrpc_rx_window_size, 978c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned int), 988c2ecf20Sopenharmony_ci .mode = 0644, 998c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 1008c2ecf20Sopenharmony_ci .extra1 = (void *)SYSCTL_ONE, 1018c2ecf20Sopenharmony_ci .extra2 = (void *)&n_max_acks, 1028c2ecf20Sopenharmony_ci }, 1038c2ecf20Sopenharmony_ci { 1048c2ecf20Sopenharmony_ci .procname = "rx_mtu", 1058c2ecf20Sopenharmony_ci .data = &rxrpc_rx_mtu, 1068c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned int), 1078c2ecf20Sopenharmony_ci .mode = 0644, 1088c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 1098c2ecf20Sopenharmony_ci .extra1 = (void *)SYSCTL_ONE, 1108c2ecf20Sopenharmony_ci .extra2 = (void *)&n_65535, 1118c2ecf20Sopenharmony_ci }, 1128c2ecf20Sopenharmony_ci { 1138c2ecf20Sopenharmony_ci .procname = "rx_jumbo_max", 1148c2ecf20Sopenharmony_ci .data = &rxrpc_rx_jumbo_max, 1158c2ecf20Sopenharmony_ci .maxlen = sizeof(unsigned int), 1168c2ecf20Sopenharmony_ci .mode = 0644, 1178c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 1188c2ecf20Sopenharmony_ci .extra1 = (void *)SYSCTL_ONE, 1198c2ecf20Sopenharmony_ci .extra2 = (void *)&four, 1208c2ecf20Sopenharmony_ci }, 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci { } 1238c2ecf20Sopenharmony_ci}; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ciint __init rxrpc_sysctl_init(void) 1268c2ecf20Sopenharmony_ci{ 1278c2ecf20Sopenharmony_ci rxrpc_sysctl_reg_table = register_net_sysctl(&init_net, "net/rxrpc", 1288c2ecf20Sopenharmony_ci rxrpc_sysctl_table); 1298c2ecf20Sopenharmony_ci if (!rxrpc_sysctl_reg_table) 1308c2ecf20Sopenharmony_ci return -ENOMEM; 1318c2ecf20Sopenharmony_ci return 0; 1328c2ecf20Sopenharmony_ci} 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_civoid rxrpc_sysctl_exit(void) 1358c2ecf20Sopenharmony_ci{ 1368c2ecf20Sopenharmony_ci if (rxrpc_sysctl_reg_table) 1378c2ecf20Sopenharmony_ci unregister_net_sysctl_table(rxrpc_sysctl_reg_table); 1388c2ecf20Sopenharmony_ci} 139