netfilter: nf_ct_icmpv6: add icmpv6_kmemdup_sysctl_table function
authorGao feng <gaofeng@cn.fujitsu.com>
Thu, 21 Jun 2012 04:36:50 +0000 (04:36 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 27 Jun 2012 17:16:31 +0000 (19:16 +0200)
Split sysctl function into smaller chucks to cleanup code and prepare
patches to reduce ifdef pollution.

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c

index 807ae09..9fc5cf5 100644 (file)
@@ -333,22 +333,31 @@ static struct ctl_table icmpv6_sysctl_table[] = {
 };
 #endif /* CONFIG_SYSCTL */
 
-static int icmpv6_init_net(struct net *net, u_int16_t proto)
+static int icmpv6_kmemdup_sysctl_table(struct nf_proto_net *pn,
+                                      struct nf_icmp_net *in)
 {
-       struct nf_icmp_net *in = icmpv6_pernet(net);
-       struct nf_proto_net *pn = (struct nf_proto_net *)in;
-       in->timeout = nf_ct_icmpv6_timeout;
 #ifdef CONFIG_SYSCTL
        pn->ctl_table = kmemdup(icmpv6_sysctl_table,
                                sizeof(icmpv6_sysctl_table),
                                GFP_KERNEL);
        if (!pn->ctl_table)
                return -ENOMEM;
+
        pn->ctl_table[0].data = &in->timeout;
 #endif
        return 0;
 }
 
+static int icmpv6_init_net(struct net *net, u_int16_t proto)
+{
+       struct nf_icmp_net *in = icmpv6_pernet(net);
+       struct nf_proto_net *pn = &in->pn;
+
+       in->timeout = nf_ct_icmpv6_timeout;
+
+       return icmpv6_kmemdup_sysctl_table(pn, in);
+}
+
 struct nf_conntrack_l4proto nf_conntrack_l4proto_icmpv6 __read_mostly =
 {
        .l3proto                = PF_INET6,