@ -61,6 +61,13 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl,
void __user * buffer , size_t * lenp ,
loff_t * ppos ) ;
static int proc_sctp_do_rto_min ( struct ctl_table * ctl , int write ,
void __user * buffer , size_t * lenp ,
loff_t * ppos ) ;
static int proc_sctp_do_rto_max ( struct ctl_table * ctl , int write ,
void __user * buffer , size_t * lenp ,
loff_t * ppos ) ;
static struct ctl_table sctp_table [ ] = {
{
. procname = " sctp_mem " ,
@ -102,17 +109,17 @@ static struct ctl_table sctp_net_table[] = {
. data = & init_net . sctp . rto_min ,
. maxlen = sizeof ( unsigned int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_minmax ,
. proc_handler = proc_sctp_do_rto_min ,
. extra1 = & one ,
. extra2 = & timer _max
. extra2 = & init_net . sctp . rto _max
} ,
{
. procname = " rto_max " ,
. data = & init_net . sctp . rto_max ,
. maxlen = sizeof ( unsigned int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_min max ,
. extra1 = & one ,
. proc_handler = proc_sctp_do_rto_ max ,
. extra1 = & init_net . sctp . rto_min ,
. extra2 = & timer_max
} ,
{
@ -342,6 +349,60 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl,
return ret ;
}
static int proc_sctp_do_rto_min ( struct ctl_table * ctl , int write ,
void __user * buffer , size_t * lenp ,
loff_t * ppos )
{
struct net * net = current - > nsproxy - > net_ns ;
int new_value ;
struct ctl_table tbl ;
unsigned int min = * ( unsigned int * ) ctl - > extra1 ;
unsigned int max = * ( unsigned int * ) ctl - > extra2 ;
int ret ;
memset ( & tbl , 0 , sizeof ( struct ctl_table ) ) ;
tbl . maxlen = sizeof ( unsigned int ) ;
if ( write )
tbl . data = & new_value ;
else
tbl . data = & net - > sctp . rto_min ;
ret = proc_dointvec ( & tbl , write , buffer , lenp , ppos ) ;
if ( write ) {
if ( ret | | new_value > max | | new_value < min )
return - EINVAL ;
net - > sctp . rto_min = new_value ;
}
return ret ;
}
static int proc_sctp_do_rto_max ( struct ctl_table * ctl , int write ,
void __user * buffer , size_t * lenp ,
loff_t * ppos )
{
struct net * net = current - > nsproxy - > net_ns ;
int new_value ;
struct ctl_table tbl ;
unsigned int min = * ( unsigned int * ) ctl - > extra1 ;
unsigned int max = * ( unsigned int * ) ctl - > extra2 ;
int ret ;
memset ( & tbl , 0 , sizeof ( struct ctl_table ) ) ;
tbl . maxlen = sizeof ( unsigned int ) ;
if ( write )
tbl . data = & new_value ;
else
tbl . data = & net - > sctp . rto_max ;
ret = proc_dointvec ( & tbl , write , buffer , lenp , ppos ) ;
if ( write ) {
if ( ret | | new_value > max | | new_value < min )
return - EINVAL ;
net - > sctp . rto_max = new_value ;
}
return ret ;
}
int sctp_sysctl_net_register ( struct net * net )
{
struct ctl_table * table ;