2005-04-17 02:20:36 +04:00
/* -*- linux-c -*-
* sysctl_net_core . c : sysctl interface to net core subsystem .
*
* Begun April 1 , 1996 , Mike Shaver .
* Added / proc / sys / net / core directory entry ( empty = ) ) . [ MS ]
*/
# include <linux/mm.h>
# include <linux/sysctl.h>
# include <linux/module.h>
2005-08-16 09:18:02 +04:00
# include <linux/socket.h>
2007-10-24 08:13:53 +04:00
# include <linux/netdevice.h>
2007-12-05 12:37:34 +03:00
# include <linux/init.h>
2005-08-16 09:18:02 +04:00
# include <net/sock.h>
2007-10-24 08:13:53 +04:00
# include <net/xfrm.h>
2005-04-17 02:20:36 +04:00
2007-12-05 12:37:34 +03:00
static struct ctl_table net_core_table [ ] = {
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_NET
{
. ctl_name = NET_CORE_WMEM_MAX ,
. procname = " wmem_max " ,
. data = & sysctl_wmem_max ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_RMEM_MAX ,
. procname = " rmem_max " ,
. data = & sysctl_rmem_max ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_WMEM_DEFAULT ,
. procname = " wmem_default " ,
. data = & sysctl_wmem_default ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_RMEM_DEFAULT ,
. procname = " rmem_default " ,
. data = & sysctl_rmem_default ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_DEV_WEIGHT ,
. procname = " dev_weight " ,
. data = & weight_p ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_MAX_BACKLOG ,
. procname = " netdev_max_backlog " ,
. data = & netdev_max_backlog ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_MSG_COST ,
. procname = " message_cost " ,
. data = & net_msg_cost ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec_jiffies ,
. strategy = & sysctl_jiffies ,
} ,
{
. ctl_name = NET_CORE_MSG_BURST ,
. procname = " message_burst " ,
. data = & net_msg_burst ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec ,
} ,
{
. ctl_name = NET_CORE_OPTMEM_MAX ,
. procname = " optmem_max " ,
. data = & sysctl_optmem_max ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2006-03-21 06:15:11 +03:00
# ifdef CONFIG_XFRM
{
. ctl_name = NET_CORE_AEVENT_ETIME ,
. procname = " xfrm_aevent_etime " ,
. data = & sysctl_xfrm_aevent_etime ,
. maxlen = sizeof ( u32 ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{
. ctl_name = NET_CORE_AEVENT_RSEQTH ,
. procname = " xfrm_aevent_rseqth " ,
. data = & sysctl_xfrm_aevent_rseqth ,
. maxlen = sizeof ( u32 ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2007-05-25 05:17:54 +04:00
{
. ctl_name = CTL_UNNUMBERED ,
. procname = " xfrm_larval_drop " ,
. data = & sysctl_xfrm_larval_drop ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2007-05-25 11:41:38 +04:00
{
. ctl_name = CTL_UNNUMBERED ,
. procname = " xfrm_acq_expires " ,
. data = & sysctl_xfrm_acq_expires ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2006-03-21 06:15:11 +03:00
# endif /* CONFIG_XFRM */
2005-04-17 02:20:36 +04:00
# endif /* CONFIG_NET */
2005-06-24 07:14:40 +04:00
{
. ctl_name = NET_CORE_BUDGET ,
. procname = " netdev_budget " ,
. data = & netdev_budget ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2007-03-09 07:41:08 +03:00
{
. ctl_name = NET_CORE_WARNINGS ,
. procname = " warnings " ,
. data = & net_msg_warn ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
2005-04-17 02:20:36 +04:00
{ . ctl_name = 0 }
} ;
2007-12-05 12:37:34 +03:00
2008-05-20 00:49:52 +04:00
static struct ctl_table netns_core_table [ ] = {
{
. ctl_name = NET_CORE_SOMAXCONN ,
. procname = " somaxconn " ,
. data = & init_net . core . sysctl_somaxconn ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = & proc_dointvec
} ,
{ . ctl_name = 0 }
} ;
2007-12-08 11:09:24 +03:00
static __net_initdata struct ctl_path net_core_path [ ] = {
2007-12-05 12:37:34 +03:00
{ . procname = " net " , . ctl_name = CTL_NET , } ,
{ . procname = " core " , . ctl_name = NET_CORE , } ,
{ } ,
} ;
2007-12-08 11:09:24 +03:00
static __net_init int sysctl_core_net_init ( struct net * net )
2007-12-05 12:37:34 +03:00
{
2008-05-20 00:49:52 +04:00
struct ctl_table * tbl ;
2007-12-08 11:09:24 +03:00
2008-04-01 06:41:14 +04:00
net - > core . sysctl_somaxconn = SOMAXCONN ;
2007-12-08 11:12:33 +03:00
2008-05-20 00:49:52 +04:00
tbl = netns_core_table ;
2007-12-08 11:09:24 +03:00
if ( net ! = & init_net ) {
2008-05-20 00:49:52 +04:00
tbl = kmemdup ( tbl , sizeof ( netns_core_table ) , GFP_KERNEL ) ;
2007-12-08 11:09:24 +03:00
if ( tbl = = NULL )
goto err_dup ;
2008-05-20 00:49:52 +04:00
tbl [ 0 ] . data = & net - > core . sysctl_somaxconn ;
2007-12-08 11:09:24 +03:00
}
2008-04-01 06:41:14 +04:00
net - > core . sysctl_hdr = register_net_sysctl_table ( net ,
2007-12-08 11:09:24 +03:00
net_core_path , tbl ) ;
2008-04-01 06:41:14 +04:00
if ( net - > core . sysctl_hdr = = NULL )
2007-12-08 11:09:24 +03:00
goto err_reg ;
2007-12-05 12:37:34 +03:00
2007-12-08 11:09:24 +03:00
return 0 ;
err_reg :
2008-05-20 00:49:52 +04:00
if ( tbl ! = netns_core_table )
2007-12-08 11:09:24 +03:00
kfree ( tbl ) ;
err_dup :
return - ENOMEM ;
}
static __net_exit void sysctl_core_net_exit ( struct net * net )
{
struct ctl_table * tbl ;
2008-04-01 06:41:14 +04:00
tbl = net - > core . sysctl_hdr - > ctl_table_arg ;
unregister_net_sysctl_table ( net - > core . sysctl_hdr ) ;
2008-05-20 00:49:52 +04:00
BUG_ON ( tbl = = netns_core_table ) ;
2007-12-08 11:09:24 +03:00
kfree ( tbl ) ;
}
static __net_initdata struct pernet_operations sysctl_core_ops = {
. init = sysctl_core_net_init ,
. exit = sysctl_core_net_exit ,
} ;
static __init int sysctl_core_init ( void )
{
2008-05-20 00:49:52 +04:00
register_net_sysctl_rotable ( net_core_path , net_core_table ) ;
2007-12-08 11:09:24 +03:00
return register_pernet_subsys ( & sysctl_core_ops ) ;
2007-12-05 12:37:34 +03:00
}
__initcall ( sysctl_core_init ) ;