2006-03-20 19:25:02 -08:00
/*
* net / dccp / sysctl . c
*
* An implementation of the DCCP protocol
* Arnaldo Carvalho de Melo < acme @ mandriva . com >
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License v2
* as published by the Free Software Foundation .
*/
# include <linux/mm.h>
# include <linux/sysctl.h>
2006-11-13 13:23:52 -02:00
# include "dccp.h"
2006-08-26 19:15:35 -07:00
# include "feat.h"
2006-03-20 19:25:02 -08:00
# ifndef CONFIG_SYSCTL
# error This file should not be compiled without CONFIG_SYSCTL defined
# endif
2009-01-16 23:36:32 +00:00
/* Boundary values */
static int zero = 0 ,
2014-05-13 10:57:58 +08:00
one = 1 ,
2009-01-16 23:36:32 +00:00
u8_max = 0xFF ;
2011-01-02 18:15:58 +01:00
static unsigned long seqw_min = DCCPF_SEQ_WMIN ,
seqw_max = 0xFFFFFFFF ; /* maximum on 32 bit */
2009-01-16 23:36:32 +00:00
2006-03-20 19:25:02 -08:00
static struct ctl_table dccp_default_table [ ] = {
{
. procname = " seq_window " ,
2009-01-16 23:36:32 +00:00
. data = & sysctl_dccp_sequence_window ,
. maxlen = sizeof ( sysctl_dccp_sequence_window ) ,
2006-03-20 19:25:02 -08:00
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_doulongvec_minmax ,
. extra1 = & seqw_min , /* RFC 4340, 7.5.2 */
2011-01-02 18:15:58 +01:00
. extra2 = & seqw_max ,
2006-03-20 19:25:02 -08:00
} ,
{
. procname = " rx_ccid " ,
2009-01-16 23:36:32 +00:00
. data = & sysctl_dccp_rx_ccid ,
. maxlen = sizeof ( sysctl_dccp_rx_ccid ) ,
2006-03-20 19:25:02 -08:00
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
. extra1 = & zero ,
. extra2 = & u8_max , /* RFC 4340, 10. */
2006-03-20 19:25:02 -08:00
} ,
{
. procname = " tx_ccid " ,
2009-01-16 23:36:32 +00:00
. data = & sysctl_dccp_tx_ccid ,
. maxlen = sizeof ( sysctl_dccp_tx_ccid ) ,
2006-03-20 19:25:02 -08:00
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
. extra1 = & zero ,
. extra2 = & u8_max , /* RFC 4340, 10. */
2006-03-20 19:25:02 -08:00
} ,
2006-11-13 13:23:52 -02:00
{
. procname = " request_retries " ,
. data = & sysctl_dccp_request_retries ,
. maxlen = sizeof ( sysctl_dccp_request_retries ) ,
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
2014-05-13 10:57:58 +08:00
. extra1 = & one ,
2009-01-16 23:36:32 +00:00
. extra2 = & u8_max ,
2006-11-13 13:23:52 -02:00
} ,
{
. procname = " retries1 " ,
. data = & sysctl_dccp_retries1 ,
. maxlen = sizeof ( sysctl_dccp_retries1 ) ,
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
. extra1 = & zero ,
. extra2 = & u8_max ,
2006-11-13 13:23:52 -02:00
} ,
{
. procname = " retries2 " ,
. data = & sysctl_dccp_retries2 ,
. maxlen = sizeof ( sysctl_dccp_retries2 ) ,
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
. extra1 = & zero ,
. extra2 = & u8_max ,
2006-11-13 13:23:52 -02:00
} ,
2006-11-20 19:19:32 -02:00
{
. procname = " tx_qlen " ,
. data = & sysctl_dccp_tx_qlen ,
. maxlen = sizeof ( sysctl_dccp_tx_qlen ) ,
. mode = 0644 ,
2009-01-16 23:36:32 +00:00
. proc_handler = proc_dointvec_minmax ,
. extra1 = & zero ,
2006-11-20 19:19:32 -02:00
} ,
2007-09-26 11:31:49 -03:00
{
. procname = " sync_ratelimit " ,
. data = & sysctl_dccp_sync_ratelimit ,
. maxlen = sizeof ( sysctl_dccp_sync_ratelimit ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_ms_jiffies ,
} ,
2006-11-20 19:19:32 -02:00
2009-11-05 13:32:03 -08:00
{ }
2006-03-20 19:25:02 -08:00
} ;
static struct ctl_table_header * dccp_table_header ;
int __init dccp_sysctl_init ( void )
{
2012-04-19 13:44:49 +00:00
dccp_table_header = register_net_sysctl ( & init_net , " net/dccp/default " ,
2008-01-09 00:30:05 -08:00
dccp_default_table ) ;
2006-03-20 19:25:02 -08:00
return dccp_table_header ! = NULL ? 0 : - ENOMEM ;
}
void dccp_sysctl_exit ( void )
{
if ( dccp_table_header ! = NULL ) {
2012-04-19 13:24:33 +00:00
unregister_net_sysctl_table ( dccp_table_header ) ;
2006-03-20 19:25:02 -08:00
dccp_table_header = NULL ;
}
}