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} |