Commit d2f7e56d authored by Cambda Zhu's avatar Cambda Zhu Committed by David S. Miller

ipv6: Use math to point per net sysctls into the appropriate struct net

The data pointers of ipv6 sysctl are set one by one which is hard to
maintain, especially with kconfig. This patch simplifies it by using
math to point the per net sysctls into the appropriate struct net,
just like what we did for ipv4.
Signed-off-by: default avatarCambda Zhu <cambda@linux.alibaba.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 15070919
...@@ -203,29 +203,16 @@ static int __net_init ipv6_sysctl_net_init(struct net *net) ...@@ -203,29 +203,16 @@ static int __net_init ipv6_sysctl_net_init(struct net *net)
struct ctl_table *ipv6_table; struct ctl_table *ipv6_table;
struct ctl_table *ipv6_route_table; struct ctl_table *ipv6_route_table;
struct ctl_table *ipv6_icmp_table; struct ctl_table *ipv6_icmp_table;
int err; int err, i;
err = -ENOMEM; err = -ENOMEM;
ipv6_table = kmemdup(ipv6_table_template, sizeof(ipv6_table_template), ipv6_table = kmemdup(ipv6_table_template, sizeof(ipv6_table_template),
GFP_KERNEL); GFP_KERNEL);
if (!ipv6_table) if (!ipv6_table)
goto out; goto out;
ipv6_table[0].data = &net->ipv6.sysctl.bindv6only; /* Update the variables to point into the current struct net */
ipv6_table[1].data = &net->ipv6.sysctl.anycast_src_echo_reply; for (i = 0; i < ARRAY_SIZE(ipv6_table_template) - 1; i++)
ipv6_table[2].data = &net->ipv6.sysctl.flowlabel_consistency; ipv6_table[i].data += (void *)net - (void *)&init_net;
ipv6_table[3].data = &net->ipv6.sysctl.auto_flowlabels;
ipv6_table[4].data = &net->ipv6.sysctl.fwmark_reflect;
ipv6_table[5].data = &net->ipv6.sysctl.idgen_retries;
ipv6_table[6].data = &net->ipv6.sysctl.idgen_delay;
ipv6_table[7].data = &net->ipv6.sysctl.flowlabel_state_ranges;
ipv6_table[8].data = &net->ipv6.sysctl.ip_nonlocal_bind;
ipv6_table[9].data = &net->ipv6.sysctl.flowlabel_reflect;
ipv6_table[10].data = &net->ipv6.sysctl.max_dst_opts_cnt;
ipv6_table[11].data = &net->ipv6.sysctl.max_hbh_opts_cnt;
ipv6_table[12].data = &net->ipv6.sysctl.max_dst_opts_len;
ipv6_table[13].data = &net->ipv6.sysctl.max_hbh_opts_len;
ipv6_table[14].data = &net->ipv6.sysctl.multipath_hash_policy,
ipv6_table[15].data = &net->ipv6.sysctl.seg6_flowlabel;
ipv6_route_table = ipv6_route_sysctl_init(net); ipv6_route_table = ipv6_route_sysctl_init(net);
if (!ipv6_route_table) if (!ipv6_route_table)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment