[IPV6] SYSCTL: complete initialization for sysctl table in subsystem code.
YOSHIFUJI Hideaki [Wed, 27 Feb 2008 15:24:28 +0000 (00:24 +0900)]
Move initialization bits for subsystem sysctl tables to
appropriate functions.
 - route
 - icmp

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>

net/ipv6/icmp.c
net/ipv6/route.c
net/ipv6/sysctl_net_ipv6.c

index 8f44d49..12c0b85 100644 (file)
@@ -955,6 +955,10 @@ struct ctl_table *ipv6_icmp_sysctl_init(struct net *net)
        table = kmemdup(ipv6_icmp_table_template,
                        sizeof(ipv6_icmp_table_template),
                        GFP_KERNEL);
+
+       if (table)
+               table[0].data = &net->ipv6.sysctl.icmpv6_time;
+
        return table;
 }
 #endif
index e8b241c..1b15e17 100644 (file)
@@ -2505,6 +2505,20 @@ struct ctl_table *ipv6_route_sysctl_init(struct net *net)
        table = kmemdup(ipv6_route_table_template,
                        sizeof(ipv6_route_table_template),
                        GFP_KERNEL);
+
+       if (table) {
+               table[0].data = &net->ipv6.sysctl.flush_delay;
+               /* table[1].data will be handled when we have
+                  routes per namespace */
+               table[2].data = &net->ipv6.sysctl.ip6_rt_max_size;
+               table[3].data = &net->ipv6.sysctl.ip6_rt_gc_min_interval;
+               table[4].data = &net->ipv6.sysctl.ip6_rt_gc_timeout;
+               table[5].data = &net->ipv6.sysctl.ip6_rt_gc_interval;
+               table[6].data = &net->ipv6.sysctl.ip6_rt_gc_elasticity;
+               table[7].data = &net->ipv6.sysctl.ip6_rt_mtu_expires;
+               table[8].data = &net->ipv6.sysctl.ip6_rt_min_advmss;
+       }
+
        return table;
 }
 #endif
index d6d3e68..3804dcb 100644 (file)
@@ -71,24 +71,11 @@ static int ipv6_sysctl_net_init(struct net *net)
        ipv6_route_table = ipv6_route_sysctl_init(net);
        if (!ipv6_route_table)
                goto out_ipv6_table;
+       ipv6_table[0].child = ipv6_route_table;
 
        ipv6_icmp_table = ipv6_icmp_sysctl_init(net);
        if (!ipv6_icmp_table)
                goto out_ipv6_route_table;
-
-       ipv6_route_table[0].data = &net->ipv6.sysctl.flush_delay;
-       /* ipv6_route_table[1].data will be handled when we have
-          routes per namespace */
-       ipv6_route_table[2].data = &net->ipv6.sysctl.ip6_rt_max_size;
-       ipv6_route_table[3].data = &net->ipv6.sysctl.ip6_rt_gc_min_interval;
-       ipv6_route_table[4].data = &net->ipv6.sysctl.ip6_rt_gc_timeout;
-       ipv6_route_table[5].data = &net->ipv6.sysctl.ip6_rt_gc_interval;
-       ipv6_route_table[6].data = &net->ipv6.sysctl.ip6_rt_gc_elasticity;
-       ipv6_route_table[7].data = &net->ipv6.sysctl.ip6_rt_mtu_expires;
-       ipv6_route_table[8].data = &net->ipv6.sysctl.ip6_rt_min_advmss;
-       ipv6_table[0].child = ipv6_route_table;
-
-       ipv6_icmp_table[0].data = &net->ipv6.sysctl.icmpv6_time;
        ipv6_table[1].child = ipv6_icmp_table;
 
        ipv6_table[2].data = &net->ipv6.sysctl.bindv6only;