mcast.c (163849ea9b4c5d50fbd324692461983d18faadad) mcast.c (2c8c1e7297e19bdef3c178c3ea41d898a7716e3e)
1/*
2 * Multicast support for IPv6
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 *
8 * Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c

--- 2632 unchanged lines hidden (view full) ---

2641static const struct file_operations igmp6_mcf_seq_fops = {
2642 .owner = THIS_MODULE,
2643 .open = igmp6_mcf_seq_open,
2644 .read = seq_read,
2645 .llseek = seq_lseek,
2646 .release = seq_release_net,
2647};
2648
1/*
2 * Multicast support for IPv6
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 *
8 * Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c

--- 2632 unchanged lines hidden (view full) ---

2641static const struct file_operations igmp6_mcf_seq_fops = {
2642 .owner = THIS_MODULE,
2643 .open = igmp6_mcf_seq_open,
2644 .read = seq_read,
2645 .llseek = seq_lseek,
2646 .release = seq_release_net,
2647};
2648
2649static int igmp6_proc_init(struct net *net)
2649static int __net_init igmp6_proc_init(struct net *net)
2650{
2651 int err;
2652
2653 err = -ENOMEM;
2654 if (!proc_net_fops_create(net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops))
2655 goto out;
2656 if (!proc_net_fops_create(net, "mcfilter6", S_IRUGO,
2657 &igmp6_mcf_seq_fops))
2658 goto out_proc_net_igmp6;
2659
2660 err = 0;
2661out:
2662 return err;
2663
2664out_proc_net_igmp6:
2665 proc_net_remove(net, "igmp6");
2666 goto out;
2667}
2668
2650{
2651 int err;
2652
2653 err = -ENOMEM;
2654 if (!proc_net_fops_create(net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops))
2655 goto out;
2656 if (!proc_net_fops_create(net, "mcfilter6", S_IRUGO,
2657 &igmp6_mcf_seq_fops))
2658 goto out_proc_net_igmp6;
2659
2660 err = 0;
2661out:
2662 return err;
2663
2664out_proc_net_igmp6:
2665 proc_net_remove(net, "igmp6");
2666 goto out;
2667}
2668
2669static void igmp6_proc_exit(struct net *net)
2669static void __net_exit igmp6_proc_exit(struct net *net)
2670{
2671 proc_net_remove(net, "mcfilter6");
2672 proc_net_remove(net, "igmp6");
2673}
2674#else
2670{
2671 proc_net_remove(net, "mcfilter6");
2672 proc_net_remove(net, "igmp6");
2673}
2674#else
2675static int igmp6_proc_init(struct net *net)
2675static inline int igmp6_proc_init(struct net *net)
2676{
2677 return 0;
2678}
2676{
2677 return 0;
2678}
2679static void igmp6_proc_exit(struct net *net)
2679static inline void igmp6_proc_exit(struct net *net)
2680{
2680{
2681 ;
2682}
2683#endif
2684
2681}
2682#endif
2683
2685static int igmp6_net_init(struct net *net)
2684static int __net_init igmp6_net_init(struct net *net)
2686{
2687 int err;
2688
2689 err = inet_ctl_sock_create(&net->ipv6.igmp_sk, PF_INET6,
2690 SOCK_RAW, IPPROTO_ICMPV6, net);
2691 if (err < 0) {
2692 printk(KERN_ERR
2693 "Failed to initialize the IGMP6 control socket (err %d).\n",

--- 9 unchanged lines hidden (view full) ---

2703out:
2704 return err;
2705
2706out_sock_create:
2707 inet_ctl_sock_destroy(net->ipv6.igmp_sk);
2708 goto out;
2709}
2710
2685{
2686 int err;
2687
2688 err = inet_ctl_sock_create(&net->ipv6.igmp_sk, PF_INET6,
2689 SOCK_RAW, IPPROTO_ICMPV6, net);
2690 if (err < 0) {
2691 printk(KERN_ERR
2692 "Failed to initialize the IGMP6 control socket (err %d).\n",

--- 9 unchanged lines hidden (view full) ---

2702out:
2703 return err;
2704
2705out_sock_create:
2706 inet_ctl_sock_destroy(net->ipv6.igmp_sk);
2707 goto out;
2708}
2709
2711static void igmp6_net_exit(struct net *net)
2710static void __net_exit igmp6_net_exit(struct net *net)
2712{
2713 inet_ctl_sock_destroy(net->ipv6.igmp_sk);
2714 igmp6_proc_exit(net);
2715}
2716
2717static struct pernet_operations igmp6_net_ops = {
2718 .init = igmp6_net_init,
2719 .exit = igmp6_net_exit,
2720};
2721
2722int __init igmp6_init(void)
2723{
2724 return register_pernet_subsys(&igmp6_net_ops);
2725}
2726
2727void igmp6_cleanup(void)
2728{
2729 unregister_pernet_subsys(&igmp6_net_ops);
2730}
2711{
2712 inet_ctl_sock_destroy(net->ipv6.igmp_sk);
2713 igmp6_proc_exit(net);
2714}
2715
2716static struct pernet_operations igmp6_net_ops = {
2717 .init = igmp6_net_init,
2718 .exit = igmp6_net_exit,
2719};
2720
2721int __init igmp6_init(void)
2722{
2723 return register_pernet_subsys(&igmp6_net_ops);
2724}
2725
2726void igmp6_cleanup(void)
2727{
2728 unregister_pernet_subsys(&igmp6_net_ops);
2729}