@ -17,18 +17,6 @@
# include <net/inet_frag.h>
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 ,
@ -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 ) ;