diff options
Diffstat (limited to 'net/ipv6/sysctl_net_ipv6.c')
| -rw-r--r-- | net/ipv6/sysctl_net_ipv6.c | 47 | 
1 files changed, 23 insertions, 24 deletions
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c index cf1e96a4960..a52d8203a5d 100644 --- a/net/ipv6/sysctl_net_ipv6.c +++ b/net/ipv6/sysctl_net_ipv6.c @@ -18,18 +18,6 @@  static ctl_table ipv6_table_template[] = {  	{ -		.procname	= "route", -		.maxlen		= 0, -		.mode		= 0555, -		.child		= ipv6_route_table_template -	}, -	{ -		.procname	= "icmp", -		.maxlen		= 0, -		.mode		= 0555, -		.child		= ipv6_icmp_table_template -	}, -	{  		.procname	= "bindv6only",  		.data		= &init_net.ipv6.sysctl.bindv6only,  		.maxlen		= sizeof(int), @@ -69,28 +57,37 @@ static int __net_init ipv6_sysctl_net_init(struct net *net)  			     GFP_KERNEL);  	if (!ipv6_table)  		goto out; +	ipv6_table[0].data = &net->ipv6.sysctl.bindv6only;  	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_table[1].child = ipv6_icmp_table; -	ipv6_table[2].data = &net->ipv6.sysctl.bindv6only; - -	net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path, -							   ipv6_table); -	if (!net->ipv6.sysctl.table) +	net->ipv6.sysctl.hdr = register_net_sysctl(net, "net/ipv6", ipv6_table); +	if (!net->ipv6.sysctl.hdr)  		goto out_ipv6_icmp_table; +	net->ipv6.sysctl.route_hdr = +		register_net_sysctl(net, "net/ipv6/route", ipv6_route_table); +	if (!net->ipv6.sysctl.route_hdr) +		goto out_unregister_ipv6_table; + +	net->ipv6.sysctl.icmp_hdr = +		register_net_sysctl(net, "net/ipv6/icmp", ipv6_icmp_table); +	if (!net->ipv6.sysctl.icmp_hdr) +		goto out_unregister_route_table; +  	err = 0;  out:  	return err; - +out_unregister_route_table: +	unregister_net_sysctl_table(net->ipv6.sysctl.route_hdr); +out_unregister_ipv6_table: +	unregister_net_sysctl_table(net->ipv6.sysctl.hdr);  out_ipv6_icmp_table:  	kfree(ipv6_icmp_table);  out_ipv6_route_table: @@ -106,11 +103,13 @@ static void __net_exit ipv6_sysctl_net_exit(struct net *net)  	struct ctl_table *ipv6_route_table;  	struct ctl_table *ipv6_icmp_table; -	ipv6_table = net->ipv6.sysctl.table->ctl_table_arg; -	ipv6_route_table = ipv6_table[0].child; -	ipv6_icmp_table = ipv6_table[1].child; +	ipv6_table = net->ipv6.sysctl.hdr->ctl_table_arg; +	ipv6_route_table = net->ipv6.sysctl.route_hdr->ctl_table_arg; +	ipv6_icmp_table = net->ipv6.sysctl.icmp_hdr->ctl_table_arg; -	unregister_net_sysctl_table(net->ipv6.sysctl.table); +	unregister_net_sysctl_table(net->ipv6.sysctl.icmp_hdr); +	unregister_net_sysctl_table(net->ipv6.sysctl.route_hdr); +	unregister_net_sysctl_table(net->ipv6.sysctl.hdr);  	kfree(ipv6_table);  	kfree(ipv6_route_table);  |