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 ;
2005-04-17 02:20:36 +04:00
2007-09-17 03:04:37 +04:00
extern int sysctl_sctp_mem [ 3 ] ;
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 [ ] = {
{
. ctl_name = NET_SCTP_RTO_INITIAL ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_RTO_MIN ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_RTO_MAX ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_VALID_COOKIE_LIFE ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_MAX_BURST ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & zero ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_ASSOCIATION_MAX_RETRANS ,
. 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 ,
. strategy = sysctl_intvec ,
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
{
. ctl_name = NET_SCTP_SNDBUF_POLICY ,
. procname = " sndbuf_policy " ,
. data = & sctp_sndbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
. strategy = sysctl_intvec
2005-04-28 23:02:04 +04:00
} ,
2005-11-12 03:08:24 +03:00
{
. ctl_name = NET_SCTP_RCVBUF_POLICY ,
. procname = " rcvbuf_policy " ,
. data = & sctp_rcvbuf_policy ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
. strategy = sysctl_intvec
2005-11-12 03:08:24 +03:00
} ,
2005-04-17 02:20:36 +04:00
{
. ctl_name = NET_SCTP_PATH_MAX_RETRANS ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_MAX_INIT_RETRANSMITS ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & int_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_HB_INTERVAL ,
. 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 ,
. strategy = sysctl_intvec ,
2006-08-23 00:29:17 +04:00
. extra1 = & one ,
. extra2 = & timer_max
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_PRESERVE_ENABLE ,
. 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 ,
. strategy = sysctl_intvec
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_RTO_ALPHA ,
. 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 ,
. strategy = sysctl_intvec
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_RTO_BETA ,
. 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 ,
. strategy = sysctl_intvec
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_ADDIP_ENABLE ,
. procname = " addip_enable " ,
. data = & sctp_addip_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
. strategy = sysctl_intvec
2005-04-17 02:20:36 +04:00
} ,
{
. ctl_name = NET_SCTP_PRSCTP_ENABLE ,
. procname = " prsctp_enable " ,
. data = & sctp_prsctp_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
. strategy = sysctl_intvec
2005-04-17 02:20:36 +04:00
} ,
2005-06-29 00:24:23 +04:00
{
. ctl_name = NET_SCTP_SACK_TIMEOUT ,
. 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 ,
. strategy = sysctl_intvec ,
2005-06-29 00:24:23 +04:00
. extra1 = & sack_timer_min ,
. extra2 = & sack_timer_max ,
} ,
2007-08-16 03:07:44 +04:00
{
. ctl_name = CTL_UNNUMBERED ,
. procname = " sctp_mem " ,
. data = & sysctl_sctp_mem ,
. maxlen = sizeof ( sysctl_sctp_mem ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
2007-08-16 03:07:44 +04:00
} ,
{
. ctl_name = CTL_UNNUMBERED ,
. 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
} ,
{
. ctl_name = CTL_UNNUMBERED ,
. 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
{
. ctl_name = CTL_UNNUMBERED ,
. procname = " auth_enable " ,
. data = & sctp_auth_enable ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-04 05:21:05 +03:00
. proc_handler = proc_dointvec ,
. strategy = sysctl_intvec
2007-09-17 06:31:35 +04:00
} ,
2007-10-25 01:24:26 +04:00
{
. ctl_name = CTL_UNNUMBERED ,
. 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 ,
. strategy = sysctl_intvec
2007-10-25 01:24:26 +04:00
} ,
2005-04-17 02:20:36 +04:00
{ . ctl_name = 0 }
} ;
2008-01-09 11:30:05 +03:00
static struct ctl_path sctp_path [ ] = {
{ . procname = " net " , . ctl_name = CTL_NET , } ,
{ . procname = " sctp " , . ctl_name = NET_SCTP , } ,
{ }
2005-04-17 02:20:36 +04:00
} ;
static struct ctl_table_header * sctp_sysctl_header ;
/* Sysctl registration. */
void sctp_sysctl_register ( void )
{
2008-01-09 11:30:05 +03:00
sctp_sysctl_header = register_sysctl_paths ( sctp_path , sctp_table ) ;
2005-04-17 02:20:36 +04:00
}
/* Sysctl deregistration. */
void sctp_sysctl_unregister ( void )
{
unregister_sysctl_table ( sctp_sysctl_header ) ;
}