aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/mcast.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/mcast.c')
-rw-r--r--net/ipv6/mcast.c53
1 files changed, 38 insertions, 15 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index f2879056fab0..957ac7e9e929 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -2633,6 +2633,41 @@ static const struct file_operations igmp6_mcf_seq_fops = {
2633 .llseek = seq_lseek, 2633 .llseek = seq_lseek,
2634 .release = seq_release_net, 2634 .release = seq_release_net,
2635}; 2635};
2636
2637static int igmp6_proc_init(struct net *net)
2638{
2639 int err;
2640
2641 err = -ENOMEM;
2642 if (!proc_net_fops_create(net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops))
2643 goto out;
2644 if (!proc_net_fops_create(net, "mcfilter6", S_IRUGO,
2645 &igmp6_mcf_seq_fops))
2646 goto out_proc_net_igmp6;
2647
2648 err = 0;
2649out:
2650 return err;
2651
2652out_proc_net_igmp6:
2653 proc_net_remove(net, "igmp6");
2654 goto out;
2655}
2656
2657static void igmp6_proc_exit(struct net *net)
2658{
2659 proc_net_remove(net, "mcfilter6");
2660 proc_net_remove(net, "igmp6");
2661}
2662#else
2663static int igmp6_proc_init(struct net *net)
2664{
2665 return 0;
2666}
2667static void igmp6_proc_exit(struct net *net)
2668{
2669 ;
2670}
2636#endif 2671#endif
2637 2672
2638static int igmp6_net_init(struct net *net) 2673static int igmp6_net_init(struct net *net)
@@ -2658,18 +2693,9 @@ static int igmp6_net_init(struct net *net)
2658 np = inet6_sk(sk); 2693 np = inet6_sk(sk);
2659 np->hop_limit = 1; 2694 np->hop_limit = 1;
2660 2695
2661#ifdef CONFIG_PROC_FS 2696 err = igmp6_proc_init(net);
2662 err = -ENOMEM; 2697 if (err)
2663 if (!proc_net_fops_create(net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops))
2664 goto out_sock_create;
2665 if (!proc_net_fops_create(net, "mcfilter6", S_IRUGO,
2666 &igmp6_mcf_seq_fops)) {
2667 proc_net_remove(net, "igmp6");
2668 goto out_sock_create; 2698 goto out_sock_create;
2669 }
2670#endif
2671
2672 err = 0;
2673out: 2699out:
2674 return err; 2700 return err;
2675 2701
@@ -2681,10 +2707,7 @@ out_sock_create:
2681static void igmp6_net_exit(struct net *net) 2707static void igmp6_net_exit(struct net *net)
2682{ 2708{
2683 sk_release_kernel(net->ipv6.igmp_sk); 2709 sk_release_kernel(net->ipv6.igmp_sk);
2684#ifdef CONFIG_PROC_FS 2710 igmp6_proc_exit(net);
2685 proc_net_remove(net, "mcfilter6");
2686 proc_net_remove(net, "igmp6");
2687#endif
2688} 2711}
2689 2712
2690static struct pernet_operations igmp6_net_ops = { 2713static struct pernet_operations igmp6_net_ops = {