2005-04-16 15:20:36 -07:00
/*
* sysctl_net_ipv4 . c : sysctl interface to net IPV4 subsystem .
*
* Begun April 1 , 1996 , Mike Shaver .
* Added / proc / sys / net / ipv4 directory entry ( empty = ) ) . [ MS ]
*/
# include <linux/mm.h>
# include <linux/module.h>
# include <linux/sysctl.h>
2005-08-16 02:18:02 -03:00
# include <linux/igmp.h>
2005-12-27 02:43:12 -02:00
# include <linux/inetdevice.h>
2007-10-10 17:30:46 -07:00
# include <linux/seqlock.h>
2007-12-05 01:41:26 -08:00
# include <linux/init.h>
2005-04-16 15:20:36 -07:00
# include <net/snmp.h>
2005-08-16 02:18:02 -03:00
# include <net/icmp.h>
2005-04-16 15:20:36 -07:00
# include <net/ip.h>
# include <net/route.h>
# include <net/tcp.h>
2007-12-31 00:29:24 -08:00
# include <net/udp.h>
2006-08-03 16:48:06 -07:00
# include <net/cipso_ipv4.h>
2007-10-15 02:33:45 -07:00
# include <net/inet_frag.h>
2005-04-16 15:20:36 -07:00
2005-12-13 23:14:27 -08:00
static int zero ;
2007-02-09 23:24:47 +09:00
static int tcp_retr1_max = 255 ;
2005-04-16 15:20:36 -07:00
static int ip_local_port_range_min [ ] = { 1 , 1 } ;
static int ip_local_port_range_max [ ] = { 65535 , 65535 } ;
2007-10-10 17:30:46 -07:00
/* Update system visible IP port range */
static void set_local_port_range ( int range [ 2 ] )
{
2008-10-08 14:18:04 -07:00
write_seqlock ( & sysctl_local_ports . lock ) ;
sysctl_local_ports . range [ 0 ] = range [ 0 ] ;
sysctl_local_ports . range [ 1 ] = range [ 1 ] ;
write_sequnlock ( & sysctl_local_ports . lock ) ;
2007-10-10 17:30:46 -07:00
}
/* Validate changes from /proc interface. */
2009-09-23 15:57:19 -07:00
static int ipv4_local_port_range ( ctl_table * table , int write ,
2007-10-10 17:30:46 -07:00
void __user * buffer ,
size_t * lenp , loff_t * ppos )
{
int ret ;
2008-10-08 14:18:04 -07:00
int range [ 2 ] ;
2007-10-10 17:30:46 -07:00
ctl_table tmp = {
. data = & range ,
. maxlen = sizeof ( range ) ,
. mode = table - > mode ,
. extra1 = & ip_local_port_range_min ,
. extra2 = & ip_local_port_range_max ,
} ;
2008-10-08 14:18:04 -07:00
inet_get_local_port_range ( range , range + 1 ) ;
2009-09-23 15:57:19 -07:00
ret = proc_dointvec_minmax ( & tmp , write , buffer , lenp , ppos ) ;
2007-10-10 17:30:46 -07:00
if ( write & & ret = = 0 ) {
2007-10-18 22:00:17 -07:00
if ( range [ 1 ] < range [ 0 ] )
2007-10-10 17:30:46 -07:00
ret = - EINVAL ;
else
set_local_port_range ( range ) ;
}
return ret ;
}
2009-09-23 15:57:19 -07:00
static int proc_tcp_congestion_control ( ctl_table * ctl , int write ,
2005-06-23 12:19:55 -07:00
void __user * buffer , size_t * lenp , loff_t * ppos )
{
char val [ TCP_CA_NAME_MAX ] ;
ctl_table tbl = {
. data = val ,
. maxlen = TCP_CA_NAME_MAX ,
} ;
int ret ;
tcp_get_default_congestion_control ( val ) ;
2009-09-23 15:57:19 -07:00
ret = proc_dostring ( & tbl , write , buffer , lenp , ppos ) ;
2005-06-23 12:19:55 -07:00
if ( write & & ret = = 0 )
ret = tcp_set_default_congestion_control ( val ) ;
return ret ;
}
2006-11-09 16:32:06 -08:00
static int proc_tcp_available_congestion_control ( ctl_table * ctl ,
2009-09-23 15:57:19 -07:00
int write ,
2006-11-09 16:32:06 -08:00
void __user * buffer , size_t * lenp ,
loff_t * ppos )
{
ctl_table tbl = { . maxlen = TCP_CA_BUF_MAX , } ;
int ret ;
tbl . data = kmalloc ( tbl . maxlen , GFP_USER ) ;
if ( ! tbl . data )
return - ENOMEM ;
tcp_get_available_congestion_control ( tbl . data , TCP_CA_BUF_MAX ) ;
2009-09-23 15:57:19 -07:00
ret = proc_dostring ( & tbl , write , buffer , lenp , ppos ) ;
2006-11-09 16:32:06 -08:00
kfree ( tbl . data ) ;
return ret ;
}
2006-11-09 16:35:15 -08:00
static int proc_allowed_congestion_control ( ctl_table * ctl ,
2009-09-23 15:57:19 -07:00
int write ,
2006-11-09 16:35:15 -08:00
void __user * buffer , size_t * lenp ,
loff_t * ppos )
{
ctl_table tbl = { . maxlen = TCP_CA_BUF_MAX } ;
int ret ;
tbl . data = kmalloc ( tbl . maxlen , GFP_USER ) ;
if ( ! tbl . data )
return - ENOMEM ;
tcp_get_allowed_congestion_control ( tbl . data , tbl . maxlen ) ;
2009-09-23 15:57:19 -07:00
ret = proc_dostring ( & tbl , write , buffer , lenp , ppos ) ;
2006-11-09 16:35:15 -08:00
if ( write & & ret = = 0 )
ret = tcp_set_allowed_congestion_control ( tbl . data ) ;
kfree ( tbl . data ) ;
return ret ;
}
2007-12-05 01:41:26 -08:00
static struct ctl_table ipv4_table [ ] = {
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " tcp_timestamps " ,
. data = & sysctl_tcp_timestamps ,
. 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
} ,
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " tcp_window_scaling " ,
. data = & sysctl_tcp_window_scaling ,
. 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
} ,
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " tcp_sack " ,
. data = & sysctl_tcp_sack ,
. 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
} ,
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " tcp_retrans_collapse " ,
. data = & sysctl_tcp_retrans_collapse ,
. 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
} ,
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " ip_default_ttl " ,
2007-02-09 23:24:47 +09:00
. data = & sysctl_ip_default_ttl ,
2005-04-16 15:20:36 -07:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = ipv4_doint_and_flush ,
2008-08-03 14:06:44 -07:00
. extra2 = & init_net ,
2005-04-16 15:20:36 -07:00
} ,
2007-02-09 23:24:47 +09:00
{
2005-04-16 15:20:36 -07:00
. procname = " ip_no_pmtu_disc " ,
. data = & ipv4_config . no_pmtu_disc ,
. 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 = " ip_nonlocal_bind " ,
. data = & sysctl_ip_nonlocal_bind ,
. 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 = " tcp_syn_retries " ,
. data = & sysctl_tcp_syn_retries ,
. 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 = " tcp_synack_retries " ,
. data = & sysctl_tcp_synack_retries ,
. 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 = " tcp_max_orphans " ,
. data = & sysctl_tcp_max_orphans ,
. 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 = " tcp_max_tw_buckets " ,
2005-08-09 20:44:40 -07:00
. data = & tcp_death_row . sysctl_max_tw_buckets ,
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 = " ip_dynaddr " ,
. data = & sysctl_ip_dynaddr ,
. 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 = " tcp_keepalive_time " ,
. data = & sysctl_tcp_keepalive_time ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_keepalive_probes " ,
. data = & sysctl_tcp_keepalive_probes ,
. 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 = " tcp_keepalive_intvl " ,
. data = & sysctl_tcp_keepalive_intvl ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_retries1 " ,
. data = & sysctl_tcp_retries1 ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2005-04-16 15:20:36 -07:00
. extra2 = & tcp_retr1_max
} ,
{
. procname = " tcp_retries2 " ,
. data = & sysctl_tcp_retries2 ,
. 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 = " tcp_fin_timeout " ,
. data = & sysctl_tcp_fin_timeout ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
# ifdef CONFIG_SYN_COOKIES
{
. procname = " tcp_syncookies " ,
. data = & sysctl_tcp_syncookies ,
. 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
} ,
# endif
{
. procname = " tcp_tw_recycle " ,
2005-08-09 20:44:40 -07:00
. data = & tcp_death_row . sysctl_tw_recycle ,
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 = " tcp_abort_on_overflow " ,
. data = & sysctl_tcp_abort_on_overflow ,
. 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 = " tcp_stdurg " ,
. data = & sysctl_tcp_stdurg ,
. 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 = " tcp_rfc1337 " ,
. data = & sysctl_tcp_rfc1337 ,
. 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 = " tcp_max_syn_backlog " ,
. data = & sysctl_max_syn_backlog ,
. 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 = " ip_local_port_range " ,
2008-10-08 14:18:04 -07:00
. data = & sysctl_local_ports . range ,
. maxlen = sizeof ( sysctl_local_ports . range ) ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = ipv4_local_port_range ,
2005-04-16 15:20:36 -07:00
} ,
# ifdef CONFIG_IP_MULTICAST
{
. procname = " igmp_max_memberships " ,
. data = & sysctl_igmp_max_memberships ,
. 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
} ,
# endif
{
. procname = " igmp_max_msf " ,
. data = & sysctl_igmp_max_msf ,
. 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 = " inet_peer_threshold " ,
. data = & inet_peer_threshold ,
. 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 = " inet_peer_minttl " ,
. data = & inet_peer_minttl ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " inet_peer_maxttl " ,
. data = & inet_peer_maxttl ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " inet_peer_gc_mintime " ,
. data = & inet_peer_gc_mintime ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " inet_peer_gc_maxtime " ,
. data = & inet_peer_gc_maxtime ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_jiffies ,
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_orphan_retries " ,
. data = & sysctl_tcp_orphan_retries ,
. 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 = " tcp_fack " ,
. data = & sysctl_tcp_fack ,
. 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 = " tcp_reordering " ,
. data = & sysctl_tcp_reordering ,
. 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 = " tcp_ecn " ,
. data = & sysctl_tcp_ecn ,
. 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 = " tcp_dsack " ,
. data = & sysctl_tcp_dsack ,
. 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 = " tcp_mem " ,
. data = & sysctl_tcp_mem ,
. maxlen = sizeof ( sysctl_tcp_mem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_wmem " ,
. data = & sysctl_tcp_wmem ,
. maxlen = sizeof ( sysctl_tcp_wmem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_rmem " ,
. data = & sysctl_tcp_rmem ,
. maxlen = sizeof ( sysctl_tcp_rmem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2005-04-16 15:20:36 -07:00
} ,
{
. procname = " tcp_app_win " ,
. data = & sysctl_tcp_app_win ,
. 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 = " tcp_adv_win_scale " ,
. data = & sysctl_tcp_adv_win_scale ,
. 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 = " tcp_tw_reuse " ,
. data = & sysctl_tcp_tw_reuse ,
. 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 = " tcp_frto " ,
. data = & sysctl_tcp_frto ,
. 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
} ,
2007-02-27 10:09:49 -08:00
{
. procname = " tcp_frto_response " ,
. data = & sysctl_tcp_frto_response ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2007-02-27 10:09:49 -08:00
} ,
2005-04-16 15:20:36 -07:00
{
. procname = " tcp_low_latency " ,
. data = & sysctl_tcp_low_latency ,
. 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 = " tcp_no_metrics_save " ,
. data = & sysctl_tcp_nometrics_save ,
. 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 = " tcp_moderate_rcvbuf " ,
. data = & sysctl_tcp_moderate_rcvbuf ,
. 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 = " tcp_tso_win_divisor " ,
. data = & sysctl_tcp_tso_win_divisor ,
. 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-23 12:19:55 -07:00
. procname = " tcp_congestion_control " ,
2005-04-16 15:20:36 -07:00
. mode = 0644 ,
2005-06-23 12:19:55 -07:00
. maxlen = TCP_CA_NAME_MAX ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_tcp_congestion_control ,
2005-04-16 15:20:36 -07:00
} ,
2005-11-10 17:09:53 -08:00
{
. procname = " tcp_abc " ,
. data = & sysctl_tcp_abc ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2005-11-10 17:09:53 -08:00
} ,
2006-03-20 17:53:41 -08:00
{
. procname = " tcp_mtu_probing " ,
. data = & sysctl_tcp_mtu_probing ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-03-20 17:53:41 -08:00
} ,
{
. procname = " tcp_base_mss " ,
. data = & sysctl_tcp_base_mss ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-03-20 17:53:41 -08:00
} ,
2007-02-09 23:24:47 +09:00
{
2006-03-20 22:40:29 -08:00
. procname = " tcp_workaround_signed_windows " ,
. data = & sysctl_tcp_workaround_signed_windows ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2006-03-20 22:40:29 -08:00
} ,
2006-05-23 18:02:55 -07:00
# ifdef CONFIG_NET_DMA
{
. procname = " tcp_dma_copybreak " ,
. data = & sysctl_tcp_dma_copybreak ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2006-05-23 18:02:55 -07:00
} ,
# endif
2006-06-13 22:33:04 -07:00
{
. procname = " tcp_slow_start_after_idle " ,
. data = & sysctl_tcp_slow_start_after_idle ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2006-06-13 22:33:04 -07:00
} ,
2006-08-03 16:48:06 -07:00
# ifdef CONFIG_NETLABEL
{
. procname = " cipso_cache_enable " ,
. data = & cipso_v4_cache_enabled ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-08-03 16:48:06 -07:00
} ,
{
. procname = " cipso_cache_bucket_size " ,
. data = & cipso_v4_cache_bucketsize ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-08-03 16:48:06 -07:00
} ,
{
. procname = " cipso_rbm_optfmt " ,
. data = & cipso_v4_rbm_optfmt ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-08-03 16:48:06 -07:00
} ,
{
. procname = " cipso_rbm_strictvalid " ,
. data = & cipso_v4_rbm_strictvalid ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2006-08-03 16:48:06 -07:00
} ,
# endif /* CONFIG_NETLABEL */
2006-11-09 16:32:06 -08:00
{
. procname = " tcp_available_congestion_control " ,
. maxlen = TCP_CA_BUF_MAX ,
. mode = 0444 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_tcp_available_congestion_control ,
2006-11-09 16:32:06 -08:00
} ,
2006-11-09 16:35:15 -08:00
{
. procname = " tcp_allowed_congestion_control " ,
. maxlen = TCP_CA_BUF_MAX ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_allowed_congestion_control ,
2006-11-09 16:35:15 -08:00
} ,
2007-03-25 19:21:45 -07:00
{
. procname = " tcp_max_ssthresh " ,
. data = & sysctl_tcp_max_ssthresh ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec ,
2007-03-25 19:21:45 -07:00
} ,
2009-12-02 18:14:19 +00:00
{
. procname = " tcp_cookie_size " ,
. data = & sysctl_tcp_cookie_size ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec
} ,
2010-02-18 02:47:01 +00:00
{
. procname = " tcp_thin_linear_timeouts " ,
. data = & sysctl_tcp_thin_linear_timeouts ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec
} ,
2010-02-18 04:48:19 +00:00
{
. procname = " tcp_thin_dupack " ,
. data = & sysctl_tcp_thin_dupack ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec
} ,
2007-12-31 00:29:24 -08:00
{
. procname = " udp_mem " ,
. data = & sysctl_udp_mem ,
. maxlen = sizeof ( sysctl_udp_mem ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2007-12-31 00:29:24 -08:00
. extra1 = & zero
} ,
{
. procname = " udp_rmem_min " ,
. data = & sysctl_udp_rmem_min ,
. maxlen = sizeof ( sysctl_udp_rmem_min ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2007-12-31 00:29:24 -08:00
. extra1 = & zero
} ,
{
. procname = " udp_wmem_min " ,
. data = & sysctl_udp_wmem_min ,
. maxlen = sizeof ( sysctl_udp_wmem_min ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_minmax ,
2007-12-31 00:29:24 -08:00
. extra1 = & zero
} ,
2009-11-05 13:32:03 -08:00
{ }
2005-04-16 15:20:36 -07:00
} ;
2007-12-05 01:41:26 -08:00
2008-03-26 01:56:24 -07:00
static struct ctl_table ipv4_net_table [ ] = {
{
. procname = " icmp_echo_ignore_all " ,
. data = & init_net . ipv4 . sysctl_icmp_echo_ignore_all ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-03-26 01:56:24 -07:00
} ,
{
. procname = " icmp_echo_ignore_broadcasts " ,
. data = & init_net . ipv4 . sysctl_icmp_echo_ignore_broadcasts ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-03-26 01:56:24 -07:00
} ,
{
. procname = " icmp_ignore_bogus_error_responses " ,
. data = & init_net . ipv4 . sysctl_icmp_ignore_bogus_error_responses ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-03-26 01:56:24 -07:00
} ,
{
. procname = " icmp_errors_use_inbound_ifaddr " ,
. data = & init_net . ipv4 . sysctl_icmp_errors_use_inbound_ifaddr ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-03-26 01:56:24 -07:00
} ,
{
. procname = " icmp_ratelimit " ,
. data = & init_net . ipv4 . sysctl_icmp_ratelimit ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec_ms_jiffies ,
2008-03-26 01:56:24 -07:00
} ,
{
. procname = " icmp_ratemask " ,
. data = & init_net . ipv4 . sysctl_icmp_ratemask ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-03-26 01:56:24 -07:00
} ,
2008-10-27 12:28:25 -07:00
{
. procname = " rt_cache_rebuild_count " ,
. data = & init_net . ipv4 . sysctl_rt_cache_rebuild_count ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2008-11-03 18:21:05 -08:00
. proc_handler = proc_dointvec
2008-10-27 12:28:25 -07:00
} ,
2008-03-26 01:56:24 -07:00
{ }
} ;
2008-01-09 00:33:11 -08:00
struct ctl_path net_ipv4_ctl_path [ ] = {
2009-11-05 13:32:03 -08:00
{ . procname = " net " , } ,
{ . procname = " ipv4 " , } ,
2007-12-05 01:41:26 -08:00
{ } ,
} ;
2008-01-09 00:33:11 -08:00
EXPORT_SYMBOL_GPL ( net_ipv4_ctl_path ) ;
2007-12-05 01:41:26 -08:00
2008-03-26 01:54:18 -07:00
static __net_init int ipv4_sysctl_init_net ( struct net * net )
{
2008-03-26 01:56:24 -07:00
struct ctl_table * table ;
table = ipv4_net_table ;
2009-11-25 15:14:13 -08:00
if ( ! net_eq ( net , & init_net ) ) {
2008-03-26 01:56:24 -07:00
table = kmemdup ( table , sizeof ( ipv4_net_table ) , GFP_KERNEL ) ;
if ( table = = NULL )
goto err_alloc ;
table [ 0 ] . data =
& net - > ipv4 . sysctl_icmp_echo_ignore_all ;
table [ 1 ] . data =
& net - > ipv4 . sysctl_icmp_echo_ignore_broadcasts ;
table [ 2 ] . data =
& net - > ipv4 . sysctl_icmp_ignore_bogus_error_responses ;
table [ 3 ] . data =
& net - > ipv4 . sysctl_icmp_errors_use_inbound_ifaddr ;
table [ 4 ] . data =
& net - > ipv4 . sysctl_icmp_ratelimit ;
table [ 5 ] . data =
& net - > ipv4 . sysctl_icmp_ratemask ;
2008-10-27 12:28:25 -07:00
table [ 6 ] . data =
& net - > ipv4 . sysctl_rt_cache_rebuild_count ;
2008-03-26 01:56:24 -07:00
}
2008-10-27 12:28:25 -07:00
net - > ipv4 . sysctl_rt_cache_rebuild_count = 4 ;
2008-03-26 01:56:24 -07:00
net - > ipv4 . ipv4_hdr = register_net_sysctl_table ( net ,
net_ipv4_ctl_path , table ) ;
if ( net - > ipv4 . ipv4_hdr = = NULL )
goto err_reg ;
2008-03-26 01:54:18 -07:00
return 0 ;
2008-03-26 01:56:24 -07:00
err_reg :
2009-11-25 15:14:13 -08:00
if ( ! net_eq ( net , & init_net ) )
2008-03-26 01:56:24 -07:00
kfree ( table ) ;
err_alloc :
return - ENOMEM ;
2008-03-26 01:54:18 -07:00
}
static __net_exit void ipv4_sysctl_exit_net ( struct net * net )
{
2008-03-26 01:56:24 -07:00
struct ctl_table * table ;
table = net - > ipv4 . ipv4_hdr - > ctl_table_arg ;
unregister_net_sysctl_table ( net - > ipv4 . ipv4_hdr ) ;
kfree ( table ) ;
2008-03-26 01:54:18 -07:00
}
static __net_initdata struct pernet_operations ipv4_sysctl_ops = {
. init = ipv4_sysctl_init_net ,
. exit = ipv4_sysctl_exit_net ,
} ;
2007-12-05 01:41:26 -08:00
static __init int sysctl_ipv4_init ( void )
{
struct ctl_table_header * hdr ;
2008-01-09 00:33:11 -08:00
hdr = register_sysctl_paths ( net_ipv4_ctl_path , ipv4_table ) ;
2008-03-26 01:54:18 -07:00
if ( hdr = = NULL )
return - ENOMEM ;
if ( register_pernet_subsys ( & ipv4_sysctl_ops ) ) {
unregister_sysctl_table ( hdr ) ;
return - ENOMEM ;
}
return 0 ;
2007-12-05 01:41:26 -08:00
}
__initcall ( sysctl_ipv4_init ) ;