Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  *  net/dccp/sysctl.c
0004  *
0005  *  An implementation of the DCCP protocol
0006  *  Arnaldo Carvalho de Melo <acme@mandriva.com>
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 /* Boundary values */
0019 static int      u8_max   = 0xFF;
0020 static unsigned long    seqw_min = DCCPF_SEQ_WMIN,
0021             seqw_max = 0xFFFFFFFF;      /* maximum on 32 bit */
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,        /* RFC 4340, 7.5.2 */
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,      /* RFC 4340, 10. */
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,      /* RFC 4340, 10. */
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 }