2008-01-11 09:57:09 -05:00
/* SCTP kernel implementation
2005-04-16 15:20:36 -07:00
* ( C ) Copyright IBM Corp . 2002 , 2004
* Copyright ( c ) 2002 Intel Corp .
*
2008-01-11 09:57:09 -05:00
* This file is part of the SCTP kernel implementation
2005-04-16 15:20:36 -07:00
*
* Sysctl related interfaces for SCTP .
*
2008-01-11 09:57:09 -05:00
* This SCTP implementation is free software ;
2005-04-16 15:20:36 -07: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 09:57:09 -05:00
* This SCTP implementation is distributed in the hope that it
2005-04-16 15:20:36 -07: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-05 18:07:42 -07:00
# include <net/sctp/sctp.h>
2005-04-16 15:20:36 -07:00
# include <linux/sysctl.h>
2006-08-22 13:29:17 -07: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 00:03:20 +02:00
static int sack_timer_min = 1 ;
static int sack_timer_max = 500 ;
2009-09-03 17:25:47 +05:30
static int addr_scope_max = 3 ; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */
2009-11-23 15:53:57 -05:00
static int rwnd_scale_max = 16 ;
2011-12-16 12:44:15 +00: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-16 15:20:36 -07:00
2010-11-09 23:24:26 +00:00
extern long sysctl_sctp_mem [ 3 ] ;
2007-09-16 16:04:37 -07:00
extern int sysctl_sctp_rmem [ 3 ] ;
extern int sysctl_sctp_wmem [ 3 ] ;
2007-08-15 16:07:44 -07:00
2005-04-16 15:20:36 -07:00
static ctl_table sctp_table [ ] = {
{
. procname = " rto_initial " ,
. data = & sctp_rto_initial ,
2006-08-22 13:29:17 -07:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " rto_min " ,
. data = & sctp_rto_min ,
2006-08-22 13:29:17 -07:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " rto_max " ,
. data = & sctp_rto_max ,
2006-08-22 13:29:17 -07:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " valid_cookie_life " ,
. data = & sctp_valid_cookie_life ,
2006-08-22 13:29:17 -07:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " max_burst " ,
. data = & sctp_max_burst ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & zero ,
. extra2 = & int_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " association_max_retrans " ,
. data = & sctp_max_retrans_association ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-16 15:20:36 -07:00
} ,
2005-04-28 12:02:04 -07:00
{
. procname = " sndbuf_policy " ,
. data = & sctp_sndbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-28 12:02:04 -07:00
} ,
2005-11-11 16:08:24 -08:00
{
. procname = " rcvbuf_policy " ,
. data = & sctp_rcvbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-11-11 16:08:24 -08:00
} ,
2005-04-16 15:20:36 -07:00
{
. procname = " path_max_retrans " ,
. data = & sctp_max_retrans_path ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " max_init_retransmits " ,
. data = & sctp_max_retrans_init ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " hb_interval " ,
. data = & sctp_hb_interval ,
2006-08-22 13:29:17 -07:00
. maxlen = sizeof ( unsigned int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2006-08-22 13:29:17 -07:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " cookie_preserve_enable " ,
. data = & sctp_cookie_preserve_enable ,
2006-01-17 11:55:17 -08:00
. maxlen = sizeof ( int ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " rto_alpha_exp_divisor " ,
. data = & sctp_rto_alpha ,
. maxlen = sizeof ( int ) ,
2006-08-22 13:29:17 -07:00
. mode = 0444 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " rto_beta_exp_divisor " ,
. data = & sctp_rto_beta ,
. maxlen = sizeof ( int ) ,
2006-08-22 13:29:17 -07:00
. mode = 0444 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " addip_enable " ,
. data = & sctp_addip_enable ,
2011-04-26 17:36:05 +09:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec ,
} ,
{
. procname = " default_auto_asconf " ,
. data = & sctp_default_auto_asconf ,
2005-04-16 15:20:36 -07:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " prsctp_enable " ,
. data = & sctp_prsctp_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-04-16 15:20:36 -07:00
} ,
2005-06-28 13:24:23 -07:00
{
. procname = " sack_timeout " ,
. data = & sctp_sack_timeout ,
2009-05-13 00:03:20 +02:00
. maxlen = sizeof ( int ) ,
2005-06-28 13:24:23 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2005-06-28 13:24:23 -07:00
. extra1 = & sack_timer_min ,
. extra2 = & sack_timer_max ,
} ,
2007-08-15 16:07:44 -07:00
{
. procname = " sctp_mem " ,
. data = & sysctl_sctp_mem ,
. maxlen = sizeof ( sysctl_sctp_mem ) ,
. mode = 0644 ,
2010-11-09 23:24:26 +00:00
. proc_handler = proc_doulongvec_minmax
2007-08-15 16:07:44 -07:00
} ,
{
. procname = " sctp_rmem " ,
. data = & sysctl_sctp_rmem ,
. maxlen = sizeof ( sysctl_sctp_rmem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2007-08-15 16:07:44 -07:00
} ,
{
. procname = " sctp_wmem " ,
. data = & sysctl_sctp_wmem ,
. maxlen = sizeof ( sysctl_sctp_wmem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2007-08-15 16:07:44 -07:00
} ,
2007-09-16 19:31:35 -07:00
{
. procname = " auth_enable " ,
. data = & sctp_auth_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2007-09-16 19:31:35 -07:00
} ,
2007-10-24 17:24:26 -04:00
{
. procname = " addip_noauth_enable " ,
. data = & sctp_addip_noauth ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2007-10-24 17:24:26 -04:00
} ,
2009-09-03 17:25:47 +05:30
{
. procname = " addr_scope_policy " ,
. data = & sctp_scope_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 03:11:48 -08:00
. proc_handler = proc_dointvec_minmax ,
2009-09-03 17:25:47 +05:30
. extra1 = & zero ,
. extra2 = & addr_scope_max ,
} ,
2009-11-23 15:53:57 -05: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 12:44:15 +00: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 15:53:57 -05:00
2009-12-08 07:55:01 -08:00
{ /* sentinel */ }
2005-04-16 15:20:36 -07:00
} ;
2008-01-09 00:30:05 -08:00
static struct ctl_path sctp_path [ ] = {
2009-11-05 13:32:03 -08:00
{ . procname = " net " , } ,
{ . procname = " sctp " , } ,
2008-01-09 00:30:05 -08:00
{ }
2005-04-16 15:20:36 -07:00
} ;
static struct ctl_table_header * sctp_sysctl_header ;
/* Sysctl registration. */
void sctp_sysctl_register ( void )
{
2008-01-09 00:30:05 -08:00
sctp_sysctl_header = register_sysctl_paths ( sctp_path , sctp_table ) ;
2005-04-16 15:20:36 -07:00
}
/* Sysctl deregistration. */
void sctp_sysctl_unregister ( void )
{
unregister_sysctl_table ( sctp_sysctl_header ) ;
}