2008-01-11 17:57:09 +03:00
/* SCTP kernel implementation
2005-04-17 02:20:36 +04:00
* ( C ) Copyright IBM Corp . 2002 , 2004
* Copyright ( c ) 2002 Intel Corp .
*
2008-01-11 17:57:09 +03:00
* This file is part of the SCTP kernel implementation
2005-04-17 02:20:36 +04:00
*
* Sysctl related interfaces for SCTP .
*
2008-01-11 17:57:09 +03:00
* This SCTP implementation is free software ;
2005-04-17 02:20:36 +04:00
* you can redistribute it and / or modify it under the terms of
* the GNU General Public License as published by
* the Free Software Foundation ; either version 2 , or ( at your option )
* any later version .
*
2008-01-11 17:57:09 +03:00
* This SCTP implementation is distributed in the hope that it
2005-04-17 02:20:36 +04:00
* will be useful , but WITHOUT ANY WARRANTY ; without even the implied
* * * * * * * * * * * * * * * * * * * * * * * * *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
* See the GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with GNU CC ; see the file COPYING . If not , write to
* the Free Software Foundation , 59 Temple Place - Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*
* Please send any bug reports or fixes you make to the
* email address ( es ) :
* lksctp developers < lksctp - developers @ lists . sourceforge . net >
*
* Or submit a bug report through the following website :
* http : //www.sf.net/projects/lksctp
*
* Written or modified by :
* Mingqin Liu < liuming @ us . ibm . com >
* Jon Grimm < jgrimm @ us . ibm . com >
* Ardelle Fan < ardelle . fan @ intel . com >
* Ryan Layer < rmlayer @ us . ibm . com >
* Sridhar Samudrala < sri @ us . ibm . com >
*
* Any bugs reported given to us we will try to fix . . . any fixes shared will
* be incorporated into the next SCTP release .
*/
# include <net/sctp/structs.h>
2005-09-06 05:07:42 +04:00
# include <net/sctp/sctp.h>
2005-04-17 02:20:36 +04:00
# include <linux/sysctl.h>
2006-08-23 00:29:17 +04:00
static int zero = 0 ;
static int one = 1 ;
static int timer_max = 86400000 ; /* ms in one day */
static int int_max = INT_MAX ;
2009-05-13 02:03:20 +04:00
static int sack_timer_min = 1 ;
static int sack_timer_max = 500 ;
2009-09-03 15:55:47 +04:00
static int addr_scope_max = 3 ; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */
2009-11-23 23:53:57 +03:00
static int rwnd_scale_max = 16 ;
2011-12-16 16:44:15 +04:00
static unsigned long max_autoclose_min = 0 ;
static unsigned long max_autoclose_max =
( MAX_SCHEDULE_TIMEOUT / HZ > UINT_MAX )
? UINT_MAX : MAX_SCHEDULE_TIMEOUT / HZ ;
2005-04-17 02:20:36 +04:00
2010-11-10 02:24:26 +03:00
extern long sysctl_sctp_mem [ 3 ] ;
2007-09-17 03:04:37 +04:00
extern int sysctl_sctp_rmem [ 3 ] ;
extern int sysctl_sctp_wmem [ 3 ] ;
2007-08-16 03:07:44 +04:00
2005-04-17 02:20:36 +04:00
static ctl_table sctp_table [ ] = {
{
. procname = " rto_initial " ,
. data = & sctp_rto_initial ,
2006-08-23 00:29:17 +04:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " rto_min " ,
. data = & sctp_rto_min ,
2006-08-23 00:29:17 +04:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " rto_max " ,
. data = & sctp_rto_max ,
2006-08-23 00:29:17 +04:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " valid_cookie_life " ,
. data = & sctp_valid_cookie_life ,
2006-08-23 00:29:17 +04:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " max_burst " ,
. data = & sctp_max_burst ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & zero ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " association_max_retrans " ,
. data = & sctp_max_retrans_association ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
2005-04-28 23:02:04 +04:00
{
. procname = " sndbuf_policy " ,
. data = & sctp_sndbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-28 23:02:04 +04:00
} ,
2005-11-12 03:08:24 +03:00
{
. procname = " rcvbuf_policy " ,
. data = & sctp_rcvbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-11-12 03:08:24 +03:00
} ,
2005-04-17 02:20:36 +04:00
{
. procname = " path_max_retrans " ,
. data = & sctp_max_retrans_path ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " max_init_retransmits " ,
. data = & sctp_max_retrans_init ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " hb_interval " ,
. data = & sctp_hb_interval ,
2006-08-23 00:29:17 +04:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " cookie_preserve_enable " ,
. data = & sctp_cookie_preserve_enable ,
2006-01-17 22:55:17 +03:00
. maxlen = sizeof ( int ) ,
2005-04-17 02:20:36 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " rto_alpha_exp_divisor " ,
. data = & sctp_rto_alpha ,
. maxlen = sizeof ( int ) ,
2006-08-23 00:29:17 +04:00
. mode = 0444 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " rto_beta_exp_divisor " ,
. data = & sctp_rto_beta ,
. maxlen = sizeof ( int ) ,
2006-08-23 00:29:17 +04:00
. mode = 0444 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " addip_enable " ,
. data = & sctp_addip_enable ,
2011-04-26 12:36:05 +04:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec ,
} ,
{
. procname = " default_auto_asconf " ,
. data = & sctp_default_auto_asconf ,
2005-04-17 02:20:36 +04:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-17 02:20:36 +04:00
} ,
{
. procname = " prsctp_enable " ,
. data = & sctp_prsctp_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2005-04-17 02:20:36 +04:00
} ,
2005-06-29 00:24:23 +04:00
{
. procname = " sack_timeout " ,
. data = & sctp_sack_timeout ,
2009-05-13 02:03:20 +04:00
. maxlen = sizeof ( int ) ,
2005-06-29 00:24:23 +04:00
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec_minmax ,
2005-06-29 00:24:23 +04:00
. extra1 = & sack_timer_min ,
. extra2 = & sack_timer_max ,
} ,
2007-08-16 03:07:44 +04:00
{
. procname = " sctp_mem " ,
. data = & sysctl_sctp_mem ,
. maxlen = sizeof ( sysctl_sctp_mem ) ,
. mode = 0644 ,
2010-11-10 02:24:26 +03:00
. proc_handler = proc_doulongvec_minmax
2007-08-16 03:07:44 +04:00
} ,
{
. procname = " sctp_rmem " ,
. data = & sysctl_sctp_rmem ,
. maxlen = sizeof ( sysctl_sctp_rmem ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2007-08-16 03:07:44 +04:00
} ,
{
. procname = " sctp_wmem " ,
. data = & sysctl_sctp_wmem ,
. maxlen = sizeof ( sysctl_sctp_wmem ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2007-08-16 03:07:44 +04:00
} ,
2007-09-17 06:31:35 +04:00
{
. procname = " auth_enable " ,
. data = & sctp_auth_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2007-09-17 06:31:35 +04:00
} ,
2007-10-25 01:24:26 +04:00
{
. procname = " addip_noauth_enable " ,
. data = & sctp_addip_noauth ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2007-10-25 01:24:26 +04:00
} ,
2009-09-03 15:55:47 +04:00
{
. procname = " addr_scope_policy " ,
. data = & sctp_scope_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2009-09-03 15:55:47 +04:00
. extra1 = & zero ,
. extra2 = & addr_scope_max ,
} ,
2009-11-23 23:53:57 +03:00
{
. procname = " rwnd_update_shift " ,
. data = & sctp_rwnd_upd_shift ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec_minmax ,
. extra1 = & one ,
. extra2 = & rwnd_scale_max ,
} ,
2011-12-16 16:44:15 +04:00
{
. procname = " max_autoclose " ,
. data = & sctp_max_autoclose ,
. maxlen = sizeof ( unsigned long ) ,
. mode = 0644 ,
. proc_handler = & proc_doulongvec_minmax ,
. extra1 = & max_autoclose_min ,
. extra2 = & max_autoclose_max ,
} ,
2009-11-23 23:53:57 +03:00
2009-12-08 18:55:01 +03:00
{ /* sentinel */ }
2005-04-17 02:20:36 +04:00
} ;
2008-01-09 11:30:05 +03:00
static struct ctl_path sctp_path [ ] = {
2009-11-06 00:32:03 +03:00
{ . procname = " net " , } ,
{ . procname = " sctp " , } ,
2008-01-09 11:30:05 +03:00
{ }
2005-04-17 02:20:36 +04:00
} ;
static struct ctl_table_header * sctp_sysctl_header ;
/* Sysctl registration. */
void sctp_sysctl_register ( void )
{
2012-04-19 17:24:33 +04:00
sctp_sysctl_header = register_net_sysctl_table ( & init_net , sctp_path , sctp_table ) ;
2005-04-17 02:20:36 +04:00
}
/* Sysctl deregistration. */
void sctp_sysctl_unregister ( void )
{
2012-04-19 17:24:33 +04:00
unregister_net_sysctl_table ( sctp_sysctl_header ) ;
2005-04-17 02:20:36 +04:00
}