18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * net/dccp/sysctl.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * An implementation of the DCCP protocol 68c2ecf20Sopenharmony_ci * Arnaldo Carvalho de Melo <acme@mandriva.com> 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/mm.h> 108c2ecf20Sopenharmony_ci#include <linux/sysctl.h> 118c2ecf20Sopenharmony_ci#include "dccp.h" 128c2ecf20Sopenharmony_ci#include "feat.h" 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#ifndef CONFIG_SYSCTL 158c2ecf20Sopenharmony_ci#error This file should not be compiled without CONFIG_SYSCTL defined 168c2ecf20Sopenharmony_ci#endif 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci/* Boundary values */ 198c2ecf20Sopenharmony_cistatic int u8_max = 0xFF; 208c2ecf20Sopenharmony_cistatic unsigned long seqw_min = DCCPF_SEQ_WMIN, 218c2ecf20Sopenharmony_ci seqw_max = 0xFFFFFFFF; /* maximum on 32 bit */ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cistatic struct ctl_table dccp_default_table[] = { 248c2ecf20Sopenharmony_ci { 258c2ecf20Sopenharmony_ci .procname = "seq_window", 268c2ecf20Sopenharmony_ci .data = &sysctl_dccp_sequence_window, 278c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_sequence_window), 288c2ecf20Sopenharmony_ci .mode = 0644, 298c2ecf20Sopenharmony_ci .proc_handler = proc_doulongvec_minmax, 308c2ecf20Sopenharmony_ci .extra1 = &seqw_min, /* RFC 4340, 7.5.2 */ 318c2ecf20Sopenharmony_ci .extra2 = &seqw_max, 328c2ecf20Sopenharmony_ci }, 338c2ecf20Sopenharmony_ci { 348c2ecf20Sopenharmony_ci .procname = "rx_ccid", 358c2ecf20Sopenharmony_ci .data = &sysctl_dccp_rx_ccid, 368c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_rx_ccid), 378c2ecf20Sopenharmony_ci .mode = 0644, 388c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 398c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ZERO, 408c2ecf20Sopenharmony_ci .extra2 = &u8_max, /* RFC 4340, 10. */ 418c2ecf20Sopenharmony_ci }, 428c2ecf20Sopenharmony_ci { 438c2ecf20Sopenharmony_ci .procname = "tx_ccid", 448c2ecf20Sopenharmony_ci .data = &sysctl_dccp_tx_ccid, 458c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_tx_ccid), 468c2ecf20Sopenharmony_ci .mode = 0644, 478c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 488c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ZERO, 498c2ecf20Sopenharmony_ci .extra2 = &u8_max, /* RFC 4340, 10. */ 508c2ecf20Sopenharmony_ci }, 518c2ecf20Sopenharmony_ci { 528c2ecf20Sopenharmony_ci .procname = "request_retries", 538c2ecf20Sopenharmony_ci .data = &sysctl_dccp_request_retries, 548c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_request_retries), 558c2ecf20Sopenharmony_ci .mode = 0644, 568c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 578c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ONE, 588c2ecf20Sopenharmony_ci .extra2 = &u8_max, 598c2ecf20Sopenharmony_ci }, 608c2ecf20Sopenharmony_ci { 618c2ecf20Sopenharmony_ci .procname = "retries1", 628c2ecf20Sopenharmony_ci .data = &sysctl_dccp_retries1, 638c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_retries1), 648c2ecf20Sopenharmony_ci .mode = 0644, 658c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 668c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ZERO, 678c2ecf20Sopenharmony_ci .extra2 = &u8_max, 688c2ecf20Sopenharmony_ci }, 698c2ecf20Sopenharmony_ci { 708c2ecf20Sopenharmony_ci .procname = "retries2", 718c2ecf20Sopenharmony_ci .data = &sysctl_dccp_retries2, 728c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_retries2), 738c2ecf20Sopenharmony_ci .mode = 0644, 748c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 758c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ZERO, 768c2ecf20Sopenharmony_ci .extra2 = &u8_max, 778c2ecf20Sopenharmony_ci }, 788c2ecf20Sopenharmony_ci { 798c2ecf20Sopenharmony_ci .procname = "tx_qlen", 808c2ecf20Sopenharmony_ci .data = &sysctl_dccp_tx_qlen, 818c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_tx_qlen), 828c2ecf20Sopenharmony_ci .mode = 0644, 838c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 848c2ecf20Sopenharmony_ci .extra1 = SYSCTL_ZERO, 858c2ecf20Sopenharmony_ci }, 868c2ecf20Sopenharmony_ci { 878c2ecf20Sopenharmony_ci .procname = "sync_ratelimit", 888c2ecf20Sopenharmony_ci .data = &sysctl_dccp_sync_ratelimit, 898c2ecf20Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_sync_ratelimit), 908c2ecf20Sopenharmony_ci .mode = 0644, 918c2ecf20Sopenharmony_ci .proc_handler = proc_dointvec_ms_jiffies, 928c2ecf20Sopenharmony_ci }, 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci { } 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic struct ctl_table_header *dccp_table_header; 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ciint __init dccp_sysctl_init(void) 1008c2ecf20Sopenharmony_ci{ 1018c2ecf20Sopenharmony_ci dccp_table_header = register_net_sysctl(&init_net, "net/dccp/default", 1028c2ecf20Sopenharmony_ci dccp_default_table); 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci return dccp_table_header != NULL ? 0 : -ENOMEM; 1058c2ecf20Sopenharmony_ci} 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_civoid dccp_sysctl_exit(void) 1088c2ecf20Sopenharmony_ci{ 1098c2ecf20Sopenharmony_ci if (dccp_table_header != NULL) { 1108c2ecf20Sopenharmony_ci unregister_net_sysctl_table(dccp_table_header); 1118c2ecf20Sopenharmony_ci dccp_table_header = NULL; 1128c2ecf20Sopenharmony_ci } 1138c2ecf20Sopenharmony_ci} 114