0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/mm.h>
0010 #include <linux/sysctl.h>
0011 #include "dccp.h"
0012 #include "feat.h"
0013
0014 #ifndef CONFIG_SYSCTL
0015 #error This file should not be compiled without CONFIG_SYSCTL defined
0016 #endif
0017
0018
0019 static int u8_max = 0xFF;
0020 static unsigned long seqw_min = DCCPF_SEQ_WMIN,
0021 seqw_max = 0xFFFFFFFF;
0022
0023 static struct ctl_table dccp_default_table[] = {
0024 {
0025 .procname = "seq_window",
0026 .data = &sysctl_dccp_sequence_window,
0027 .maxlen = sizeof(sysctl_dccp_sequence_window),
0028 .mode = 0644,
0029 .proc_handler = proc_doulongvec_minmax,
0030 .extra1 = &seqw_min,
0031 .extra2 = &seqw_max,
0032 },
0033 {
0034 .procname = "rx_ccid",
0035 .data = &sysctl_dccp_rx_ccid,
0036 .maxlen = sizeof(sysctl_dccp_rx_ccid),
0037 .mode = 0644,
0038 .proc_handler = proc_dointvec_minmax,
0039 .extra1 = SYSCTL_ZERO,
0040 .extra2 = &u8_max,
0041 },
0042 {
0043 .procname = "tx_ccid",
0044 .data = &sysctl_dccp_tx_ccid,
0045 .maxlen = sizeof(sysctl_dccp_tx_ccid),
0046 .mode = 0644,
0047 .proc_handler = proc_dointvec_minmax,
0048 .extra1 = SYSCTL_ZERO,
0049 .extra2 = &u8_max,
0050 },
0051 {
0052 .procname = "request_retries",
0053 .data = &sysctl_dccp_request_retries,
0054 .maxlen = sizeof(sysctl_dccp_request_retries),
0055 .mode = 0644,
0056 .proc_handler = proc_dointvec_minmax,
0057 .extra1 = SYSCTL_ONE,
0058 .extra2 = &u8_max,
0059 },
0060 {
0061 .procname = "retries1",
0062 .data = &sysctl_dccp_retries1,
0063 .maxlen = sizeof(sysctl_dccp_retries1),
0064 .mode = 0644,
0065 .proc_handler = proc_dointvec_minmax,
0066 .extra1 = SYSCTL_ZERO,
0067 .extra2 = &u8_max,
0068 },
0069 {
0070 .procname = "retries2",
0071 .data = &sysctl_dccp_retries2,
0072 .maxlen = sizeof(sysctl_dccp_retries2),
0073 .mode = 0644,
0074 .proc_handler = proc_dointvec_minmax,
0075 .extra1 = SYSCTL_ZERO,
0076 .extra2 = &u8_max,
0077 },
0078 {
0079 .procname = "tx_qlen",
0080 .data = &sysctl_dccp_tx_qlen,
0081 .maxlen = sizeof(sysctl_dccp_tx_qlen),
0082 .mode = 0644,
0083 .proc_handler = proc_dointvec_minmax,
0084 .extra1 = SYSCTL_ZERO,
0085 },
0086 {
0087 .procname = "sync_ratelimit",
0088 .data = &sysctl_dccp_sync_ratelimit,
0089 .maxlen = sizeof(sysctl_dccp_sync_ratelimit),
0090 .mode = 0644,
0091 .proc_handler = proc_dointvec_ms_jiffies,
0092 },
0093
0094 { }
0095 };
0096
0097 static struct ctl_table_header *dccp_table_header;
0098
0099 int __init dccp_sysctl_init(void)
0100 {
0101 dccp_table_header = register_net_sysctl(&init_net, "net/dccp/default",
0102 dccp_default_table);
0103
0104 return dccp_table_header != NULL ? 0 : -ENOMEM;
0105 }
0106
0107 void dccp_sysctl_exit(void)
0108 {
0109 if (dccp_table_header != NULL) {
0110 unregister_net_sysctl_table(dccp_table_header);
0111 dccp_table_header = NULL;
0112 }
0113 }