162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * net/dccp/sysctl.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * An implementation of the DCCP protocol 662306a36Sopenharmony_ci * Arnaldo Carvalho de Melo <acme@mandriva.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/mm.h> 1062306a36Sopenharmony_ci#include <linux/sysctl.h> 1162306a36Sopenharmony_ci#include "dccp.h" 1262306a36Sopenharmony_ci#include "feat.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef CONFIG_SYSCTL 1562306a36Sopenharmony_ci#error This file should not be compiled without CONFIG_SYSCTL defined 1662306a36Sopenharmony_ci#endif 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* Boundary values */ 1962306a36Sopenharmony_cistatic int u8_max = 0xFF; 2062306a36Sopenharmony_cistatic unsigned long seqw_min = DCCPF_SEQ_WMIN, 2162306a36Sopenharmony_ci seqw_max = 0xFFFFFFFF; /* maximum on 32 bit */ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic struct ctl_table dccp_default_table[] = { 2462306a36Sopenharmony_ci { 2562306a36Sopenharmony_ci .procname = "seq_window", 2662306a36Sopenharmony_ci .data = &sysctl_dccp_sequence_window, 2762306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_sequence_window), 2862306a36Sopenharmony_ci .mode = 0644, 2962306a36Sopenharmony_ci .proc_handler = proc_doulongvec_minmax, 3062306a36Sopenharmony_ci .extra1 = &seqw_min, /* RFC 4340, 7.5.2 */ 3162306a36Sopenharmony_ci .extra2 = &seqw_max, 3262306a36Sopenharmony_ci }, 3362306a36Sopenharmony_ci { 3462306a36Sopenharmony_ci .procname = "rx_ccid", 3562306a36Sopenharmony_ci .data = &sysctl_dccp_rx_ccid, 3662306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_rx_ccid), 3762306a36Sopenharmony_ci .mode = 0644, 3862306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 3962306a36Sopenharmony_ci .extra1 = SYSCTL_ZERO, 4062306a36Sopenharmony_ci .extra2 = &u8_max, /* RFC 4340, 10. */ 4162306a36Sopenharmony_ci }, 4262306a36Sopenharmony_ci { 4362306a36Sopenharmony_ci .procname = "tx_ccid", 4462306a36Sopenharmony_ci .data = &sysctl_dccp_tx_ccid, 4562306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_tx_ccid), 4662306a36Sopenharmony_ci .mode = 0644, 4762306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 4862306a36Sopenharmony_ci .extra1 = SYSCTL_ZERO, 4962306a36Sopenharmony_ci .extra2 = &u8_max, /* RFC 4340, 10. */ 5062306a36Sopenharmony_ci }, 5162306a36Sopenharmony_ci { 5262306a36Sopenharmony_ci .procname = "request_retries", 5362306a36Sopenharmony_ci .data = &sysctl_dccp_request_retries, 5462306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_request_retries), 5562306a36Sopenharmony_ci .mode = 0644, 5662306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 5762306a36Sopenharmony_ci .extra1 = SYSCTL_ONE, 5862306a36Sopenharmony_ci .extra2 = &u8_max, 5962306a36Sopenharmony_ci }, 6062306a36Sopenharmony_ci { 6162306a36Sopenharmony_ci .procname = "retries1", 6262306a36Sopenharmony_ci .data = &sysctl_dccp_retries1, 6362306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_retries1), 6462306a36Sopenharmony_ci .mode = 0644, 6562306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 6662306a36Sopenharmony_ci .extra1 = SYSCTL_ZERO, 6762306a36Sopenharmony_ci .extra2 = &u8_max, 6862306a36Sopenharmony_ci }, 6962306a36Sopenharmony_ci { 7062306a36Sopenharmony_ci .procname = "retries2", 7162306a36Sopenharmony_ci .data = &sysctl_dccp_retries2, 7262306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_retries2), 7362306a36Sopenharmony_ci .mode = 0644, 7462306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 7562306a36Sopenharmony_ci .extra1 = SYSCTL_ZERO, 7662306a36Sopenharmony_ci .extra2 = &u8_max, 7762306a36Sopenharmony_ci }, 7862306a36Sopenharmony_ci { 7962306a36Sopenharmony_ci .procname = "tx_qlen", 8062306a36Sopenharmony_ci .data = &sysctl_dccp_tx_qlen, 8162306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_tx_qlen), 8262306a36Sopenharmony_ci .mode = 0644, 8362306a36Sopenharmony_ci .proc_handler = proc_dointvec_minmax, 8462306a36Sopenharmony_ci .extra1 = SYSCTL_ZERO, 8562306a36Sopenharmony_ci }, 8662306a36Sopenharmony_ci { 8762306a36Sopenharmony_ci .procname = "sync_ratelimit", 8862306a36Sopenharmony_ci .data = &sysctl_dccp_sync_ratelimit, 8962306a36Sopenharmony_ci .maxlen = sizeof(sysctl_dccp_sync_ratelimit), 9062306a36Sopenharmony_ci .mode = 0644, 9162306a36Sopenharmony_ci .proc_handler = proc_dointvec_ms_jiffies, 9262306a36Sopenharmony_ci }, 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci { } 9562306a36Sopenharmony_ci}; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cistatic struct ctl_table_header *dccp_table_header; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ciint __init dccp_sysctl_init(void) 10062306a36Sopenharmony_ci{ 10162306a36Sopenharmony_ci dccp_table_header = register_net_sysctl(&init_net, "net/dccp/default", 10262306a36Sopenharmony_ci dccp_default_table); 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci return dccp_table_header != NULL ? 0 : -ENOMEM; 10562306a36Sopenharmony_ci} 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_civoid dccp_sysctl_exit(void) 10862306a36Sopenharmony_ci{ 10962306a36Sopenharmony_ci if (dccp_table_header != NULL) { 11062306a36Sopenharmony_ci unregister_net_sysctl_table(dccp_table_header); 11162306a36Sopenharmony_ci dccp_table_header = NULL; 11262306a36Sopenharmony_ci } 11362306a36Sopenharmony_ci} 114