@ -23,6 +23,11 @@
static unsigned int nf_ct_icmp_timeout __read_mostly = 30 * HZ ;
static inline struct nf_icmp_net * icmp_pernet ( struct net * net )
{
return & net - > ct . nf_ct_proto . icmp ;
}
static bool icmp_pkt_to_tuple ( const struct sk_buff * skb , unsigned int dataoff ,
struct nf_conntrack_tuple * tuple )
{
@ -77,7 +82,7 @@ static int icmp_print_tuple(struct seq_file *s,
static unsigned int * icmp_get_timeouts ( struct net * net )
{
return & nf_ct_ icmp_timeout;
return & icmp_pernet ( net ) - > timeout ;
}
/* Returns verdict for packet, or -1 for invalid. */
@ -312,7 +317,6 @@ static struct ctl_table_header *icmp_sysctl_header;
static struct ctl_table icmp_sysctl_table [ ] = {
{
. procname = " nf_conntrack_icmp_timeout " ,
. data = & nf_ct_icmp_timeout ,
. maxlen = sizeof ( unsigned int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_jiffies ,
@ -323,7 +327,6 @@ static struct ctl_table icmp_sysctl_table[] = {
static struct ctl_table icmp_compat_sysctl_table [ ] = {
{
. procname = " ip_conntrack_icmp_timeout " ,
. data = & nf_ct_icmp_timeout ,
. maxlen = sizeof ( unsigned int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_jiffies ,
@ -333,6 +336,34 @@ static struct ctl_table icmp_compat_sysctl_table[] = {
# endif /* CONFIG_NF_CONNTRACK_PROC_COMPAT */
# endif /* CONFIG_SYSCTL */
static int icmp_init_net ( struct net * net )
{
struct nf_icmp_net * in = icmp_pernet ( net ) ;
struct nf_proto_net * pn = ( struct nf_proto_net * ) in ;
in - > timeout = nf_ct_icmp_timeout ;
# ifdef CONFIG_SYSCTL
pn - > ctl_table = kmemdup ( icmp_sysctl_table ,
sizeof ( icmp_sysctl_table ) ,
GFP_KERNEL ) ;
if ( ! pn - > ctl_table )
return - ENOMEM ;
pn - > ctl_table [ 0 ] . data = & in - > timeout ;
# ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT
pn - > ctl_compat_table = kmemdup ( icmp_compat_sysctl_table ,
sizeof ( icmp_compat_sysctl_table ) ,
GFP_KERNEL ) ;
if ( ! pn - > ctl_compat_table ) {
kfree ( pn - > ctl_table ) ;
pn - > ctl_table = NULL ;
return - ENOMEM ;
}
pn - > ctl_compat_table [ 0 ] . data = & in - > timeout ;
# endif
# endif
return 0 ;
}
struct nf_conntrack_l4proto nf_conntrack_l4proto_icmp __read_mostly =
{
. l3proto = PF_INET ,
@ -369,4 +400,5 @@ struct nf_conntrack_l4proto nf_conntrack_l4proto_icmp __read_mostly =
. ctl_compat_table = icmp_compat_sysctl_table ,
# endif
# endif
. init_net = icmp_init_net ,
} ;