Lines Matching refs:in_dev

122 #define IGMP_V1_SEEN(in_dev) \  argument
123 (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 1 || \
124 IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 1 || \
125 ((in_dev)->mr_v1_seen && \
126 time_before(jiffies, (in_dev)->mr_v1_seen)))
127 #define IGMP_V2_SEEN(in_dev) \ argument
128 (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 2 || \
129 IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 2 || \
130 ((in_dev)->mr_v2_seen && \
131 time_before(jiffies, (in_dev)->mr_v2_seen)))
133 static int unsolicited_report_interval(struct in_device *in_dev) in unsolicited_report_interval() argument
137 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) in unsolicited_report_interval()
139 in_dev, in unsolicited_report_interval()
143 in_dev, in unsolicited_report_interval()
156 static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im,
158 static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im);
159 static void igmpv3_clear_delrec(struct in_device *in_dev);
164 static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
175 #define for_each_pmc_rcu(in_dev, pmc) \ argument
176 for (pmc = rcu_dereference(in_dev->mc_list); \
180 #define for_each_pmc_rtnl(in_dev, pmc) \ argument
181 for (pmc = rtnl_dereference(in_dev->mc_list); \
223 static void igmp_gq_start_timer(struct in_device *in_dev) in igmp_gq_start_timer() argument
225 int tv = get_random_u32_below(in_dev->mr_maxdelay); in igmp_gq_start_timer()
228 if (in_dev->mr_gq_running && in igmp_gq_start_timer()
229 time_after_eq(exp, (in_dev->mr_gq_timer).expires)) in igmp_gq_start_timer()
232 in_dev->mr_gq_running = 1; in igmp_gq_start_timer()
233 if (!mod_timer(&in_dev->mr_gq_timer, exp)) in igmp_gq_start_timer()
234 in_dev_hold(in_dev); in igmp_gq_start_timer()
237 static void igmp_ifc_start_timer(struct in_device *in_dev, int delay) in igmp_ifc_start_timer() argument
241 if (!mod_timer(&in_dev->mr_ifc_timer, jiffies+tv+2)) in igmp_ifc_start_timer()
242 in_dev_hold(in_dev); in igmp_ifc_start_timer()
332 struct in_device *in_dev = __in_dev_get_rcu(dev); in igmpv3_get_srcaddr() local
335 if (!in_dev) in igmpv3_get_srcaddr()
338 in_dev_for_each_ifa_rcu(ifa, in_dev) { in igmpv3_get_srcaddr()
586 static int igmpv3_send_report(struct in_device *in_dev, struct ip_mc_list *pmc) in igmpv3_send_report() argument
589 struct net *net = dev_net(in_dev->dev); in igmpv3_send_report()
594 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_send_report()
651 static void igmpv3_send_cr(struct in_device *in_dev) in igmpv3_send_cr() argument
658 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_send_cr()
662 for (pmc = in_dev->mc_tomb; pmc; pmc = pmc_next) { in igmpv3_send_cr()
685 in_dev->mc_tomb = pmc_next; in igmpv3_send_cr()
691 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_send_cr()
694 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_send_cr()
724 static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc, in igmp_send_report() argument
731 struct net_device *dev = in_dev->dev; in igmp_send_report()
739 return igmpv3_send_report(in_dev, pmc); in igmp_send_report()
799 struct in_device *in_dev = from_timer(in_dev, t, mr_gq_timer); in igmp_gq_timer_expire() local
801 in_dev->mr_gq_running = 0; in igmp_gq_timer_expire()
802 igmpv3_send_report(in_dev, NULL); in igmp_gq_timer_expire()
803 in_dev_put(in_dev); in igmp_gq_timer_expire()
808 struct in_device *in_dev = from_timer(in_dev, t, mr_ifc_timer); in igmp_ifc_timer_expire() local
811 igmpv3_send_cr(in_dev); in igmp_ifc_timer_expire()
813 mr_ifc_count = READ_ONCE(in_dev->mr_ifc_count); in igmp_ifc_timer_expire()
816 if (cmpxchg(&in_dev->mr_ifc_count, in igmp_ifc_timer_expire()
820 igmp_ifc_start_timer(in_dev, in igmp_ifc_timer_expire()
821 unsolicited_report_interval(in_dev)); in igmp_ifc_timer_expire()
823 in_dev_put(in_dev); in igmp_ifc_timer_expire()
826 static void igmp_ifc_event(struct in_device *in_dev) in igmp_ifc_event() argument
828 struct net *net = dev_net(in_dev->dev); in igmp_ifc_event()
829 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) in igmp_ifc_event()
831 WRITE_ONCE(in_dev->mr_ifc_count, in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv)); in igmp_ifc_event()
832 igmp_ifc_start_timer(in_dev, 1); in igmp_ifc_event()
839 struct in_device *in_dev = im->interface; in igmp_timer_expire() local
845 igmp_start_timer(im, unsolicited_report_interval(in_dev)); in igmp_timer_expire()
850 if (IGMP_V1_SEEN(in_dev)) in igmp_timer_expire()
851 igmp_send_report(in_dev, im, IGMP_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
852 else if (IGMP_V2_SEEN(in_dev)) in igmp_timer_expire()
853 igmp_send_report(in_dev, im, IGMPV2_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
855 igmp_send_report(in_dev, im, IGMPV3_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
917 static bool igmp_heard_report(struct in_device *in_dev, __be32 group) in igmp_heard_report() argument
920 struct net *net = dev_net(in_dev->dev); in igmp_heard_report()
931 for_each_pmc_rcu(in_dev, im) { in igmp_heard_report()
942 static bool igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb, in igmp_heard_query() argument
951 struct net *net = dev_net(in_dev->dev); in igmp_heard_query()
959 in_dev->mr_v1_seen = jiffies + in igmp_heard_query()
960 (in_dev->mr_qrv * in_dev->mr_qi) + in igmp_heard_query()
961 in_dev->mr_qri; in igmp_heard_query()
966 in_dev->mr_v2_seen = jiffies + in igmp_heard_query()
967 (in_dev->mr_qrv * in_dev->mr_qi) + in igmp_heard_query()
968 in_dev->mr_qri; in igmp_heard_query()
971 WRITE_ONCE(in_dev->mr_ifc_count, 0); in igmp_heard_query()
972 if (del_timer(&in_dev->mr_ifc_timer)) in igmp_heard_query()
973 __in_dev_put(in_dev); in igmp_heard_query()
975 igmpv3_clear_delrec(in_dev); in igmp_heard_query()
978 } else if (IGMP_V1_SEEN(in_dev)) { in igmp_heard_query()
982 } else if (IGMP_V2_SEEN(in_dev)) { in igmp_heard_query()
1007 in_dev->mr_maxdelay = max_delay; in igmp_heard_query()
1013 in_dev->mr_qrv = ih3->qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmp_heard_query()
1014 in_dev->mr_qi = IGMPV3_QQIC(ih3->qqic)*HZ ?: IGMP_QUERY_INTERVAL; in igmp_heard_query()
1020 if (in_dev->mr_qri >= in_dev->mr_qi) in igmp_heard_query()
1021 in_dev->mr_qri = (in_dev->mr_qi/HZ - 1)*HZ; in igmp_heard_query()
1026 igmp_gq_start_timer(in_dev); in igmp_heard_query()
1044 for_each_pmc_rcu(in_dev, im) { in igmp_heard_query()
1075 struct in_device *in_dev; in igmp_rcv() local
1085 in_dev = __in_dev_get_rcu(dev); in igmp_rcv()
1086 if (!in_dev) in igmp_rcv()
1098 dropped = igmp_heard_query(in_dev, skb, len); in igmp_rcv()
1108 dropped = igmp_heard_report(in_dev, ih->group); in igmp_rcv()
1140 static void ip_mc_filter_add(struct in_device *in_dev, __be32 addr) in ip_mc_filter_add() argument
1143 struct net_device *dev = in_dev->dev; in ip_mc_filter_add()
1160 static void ip_mc_filter_del(struct in_device *in_dev, __be32 addr) in ip_mc_filter_del() argument
1163 struct net_device *dev = in_dev->dev; in ip_mc_filter_del()
1173 static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im, in igmpv3_add_delrec() argument
1177 struct net *net = dev_net(in_dev->dev); in igmpv3_add_delrec()
1191 in_dev_hold(in_dev); in igmpv3_add_delrec()
1193 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmpv3_add_delrec()
1206 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_add_delrec()
1207 pmc->next = in_dev->mc_tomb; in igmpv3_add_delrec()
1208 in_dev->mc_tomb = pmc; in igmpv3_add_delrec()
1209 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_add_delrec()
1215 static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im) in igmpv3_del_delrec() argument
1219 struct net *net = dev_net(in_dev->dev); in igmpv3_del_delrec()
1222 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_del_delrec()
1224 for (pmc = in_dev->mc_tomb; pmc; pmc = pmc->next) { in igmpv3_del_delrec()
1233 in_dev->mc_tomb = pmc->next; in igmpv3_del_delrec()
1235 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_del_delrec()
1244 psf->sf_crcount = in_dev->mr_qrv ?: in igmpv3_del_delrec()
1247 im->crcount = in_dev->mr_qrv ?: in igmpv3_del_delrec()
1259 static void igmpv3_clear_delrec(struct in_device *in_dev) in igmpv3_clear_delrec() argument
1263 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_clear_delrec()
1264 pmc = in_dev->mc_tomb; in igmpv3_clear_delrec()
1265 in_dev->mc_tomb = NULL; in igmpv3_clear_delrec()
1266 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_clear_delrec()
1276 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_clear_delrec()
1291 struct in_device *in_dev = im->interface; in __igmp_group_dropped() local
1293 struct net *net = dev_net(in_dev->dev); in __igmp_group_dropped()
1299 ip_mc_filter_del(in_dev, im->multiaddr); in __igmp_group_dropped()
1312 if (!in_dev->dead) { in __igmp_group_dropped()
1313 if (IGMP_V1_SEEN(in_dev)) in __igmp_group_dropped()
1315 if (IGMP_V2_SEEN(in_dev)) { in __igmp_group_dropped()
1317 igmp_send_report(in_dev, im, IGMP_HOST_LEAVE_MESSAGE); in __igmp_group_dropped()
1321 igmpv3_add_delrec(in_dev, im, gfp); in __igmp_group_dropped()
1323 igmp_ifc_event(in_dev); in __igmp_group_dropped()
1335 struct in_device *in_dev = im->interface; in igmp_group_added() local
1337 struct net *net = dev_net(in_dev->dev); in igmp_group_added()
1342 ip_mc_filter_add(in_dev, im->multiaddr); in igmp_group_added()
1352 if (in_dev->dead) in igmp_group_added()
1356 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) { in igmp_group_added()
1369 im->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmp_group_added()
1371 igmp_ifc_event(in_dev); in igmp_group_added()
1385 static void ip_mc_hash_add(struct in_device *in_dev, in ip_mc_hash_add() argument
1391 mc_hash = rtnl_dereference(in_dev->mc_hash); in ip_mc_hash_add()
1400 if (in_dev->mc_count < 4) in ip_mc_hash_add()
1408 for_each_pmc_rtnl(in_dev, im) { in ip_mc_hash_add()
1414 rcu_assign_pointer(in_dev->mc_hash, mc_hash); in ip_mc_hash_add()
1417 static void ip_mc_hash_remove(struct in_device *in_dev, in ip_mc_hash_remove() argument
1420 struct ip_mc_list __rcu **mc_hash = rtnl_dereference(in_dev->mc_hash); in ip_mc_hash_remove()
1435 static void ____ip_mc_inc_group(struct in_device *in_dev, __be32 addr, in ____ip_mc_inc_group() argument
1442 for_each_pmc_rtnl(in_dev, im) { in ____ip_mc_inc_group()
1445 ip_mc_add_src(in_dev, &addr, mode, 0, NULL, 0); in ____ip_mc_inc_group()
1455 im->interface = in_dev; in ____ip_mc_inc_group()
1456 in_dev_hold(in_dev); in ____ip_mc_inc_group()
1467 im->next_rcu = in_dev->mc_list; in ____ip_mc_inc_group()
1468 in_dev->mc_count++; in ____ip_mc_inc_group()
1469 rcu_assign_pointer(in_dev->mc_list, im); in ____ip_mc_inc_group()
1471 ip_mc_hash_add(in_dev, im); in ____ip_mc_inc_group()
1474 igmpv3_del_delrec(in_dev, im); in ____ip_mc_inc_group()
1477 if (!in_dev->dead) in ____ip_mc_inc_group()
1478 ip_rt_multicast_event(in_dev); in ____ip_mc_inc_group()
1483 void __ip_mc_inc_group(struct in_device *in_dev, __be32 addr, gfp_t gfp) in __ip_mc_inc_group() argument
1485 ____ip_mc_inc_group(in_dev, addr, MCAST_EXCLUDE, gfp); in __ip_mc_inc_group()
1489 void ip_mc_inc_group(struct in_device *in_dev, __be32 addr) in ip_mc_inc_group() argument
1491 __ip_mc_inc_group(in_dev, addr, GFP_KERNEL); in ip_mc_inc_group()
1640 static void ip_mc_rejoin_groups(struct in_device *in_dev) in ip_mc_rejoin_groups() argument
1645 struct net *net = dev_net(in_dev->dev); in ip_mc_rejoin_groups()
1649 for_each_pmc_rtnl(in_dev, im) { in ip_mc_rejoin_groups()
1659 if (IGMP_V1_SEEN(in_dev)) in ip_mc_rejoin_groups()
1661 else if (IGMP_V2_SEEN(in_dev)) in ip_mc_rejoin_groups()
1665 igmp_send_report(in_dev, im, type); in ip_mc_rejoin_groups()
1674 void __ip_mc_dec_group(struct in_device *in_dev, __be32 addr, gfp_t gfp) in __ip_mc_dec_group() argument
1681 for (ip = &in_dev->mc_list; in __ip_mc_dec_group()
1686 ip_mc_hash_remove(in_dev, i); in __ip_mc_dec_group()
1688 in_dev->mc_count--; in __ip_mc_dec_group()
1692 if (!in_dev->dead) in __ip_mc_dec_group()
1693 ip_rt_multicast_event(in_dev); in __ip_mc_dec_group()
1706 void ip_mc_unmap(struct in_device *in_dev) in ip_mc_unmap() argument
1712 for_each_pmc_rtnl(in_dev, pmc) in ip_mc_unmap()
1716 void ip_mc_remap(struct in_device *in_dev) in ip_mc_remap() argument
1722 for_each_pmc_rtnl(in_dev, pmc) { in ip_mc_remap()
1724 igmpv3_del_delrec(in_dev, pmc); in ip_mc_remap()
1732 void ip_mc_down(struct in_device *in_dev) in ip_mc_down() argument
1738 for_each_pmc_rtnl(in_dev, pmc) in ip_mc_down()
1742 WRITE_ONCE(in_dev->mr_ifc_count, 0); in ip_mc_down()
1743 if (del_timer(&in_dev->mr_ifc_timer)) in ip_mc_down()
1744 __in_dev_put(in_dev); in ip_mc_down()
1745 in_dev->mr_gq_running = 0; in ip_mc_down()
1746 if (del_timer(&in_dev->mr_gq_timer)) in ip_mc_down()
1747 __in_dev_put(in_dev); in ip_mc_down()
1750 ip_mc_dec_group(in_dev, IGMP_ALL_HOSTS); in ip_mc_down()
1754 static void ip_mc_reset(struct in_device *in_dev) in ip_mc_reset() argument
1756 struct net *net = dev_net(in_dev->dev); in ip_mc_reset()
1758 in_dev->mr_qi = IGMP_QUERY_INTERVAL; in ip_mc_reset()
1759 in_dev->mr_qri = IGMP_QUERY_RESPONSE_INTERVAL; in ip_mc_reset()
1760 in_dev->mr_qrv = READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_reset()
1763 static void ip_mc_reset(struct in_device *in_dev) in ip_mc_reset() argument
1768 void ip_mc_init_dev(struct in_device *in_dev) in ip_mc_init_dev() argument
1773 timer_setup(&in_dev->mr_gq_timer, igmp_gq_timer_expire, 0); in ip_mc_init_dev()
1774 timer_setup(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire, 0); in ip_mc_init_dev()
1776 ip_mc_reset(in_dev); in ip_mc_init_dev()
1778 spin_lock_init(&in_dev->mc_tomb_lock); in ip_mc_init_dev()
1783 void ip_mc_up(struct in_device *in_dev) in ip_mc_up() argument
1789 ip_mc_reset(in_dev); in ip_mc_up()
1790 ip_mc_inc_group(in_dev, IGMP_ALL_HOSTS); in ip_mc_up()
1792 for_each_pmc_rtnl(in_dev, pmc) { in ip_mc_up()
1794 igmpv3_del_delrec(in_dev, pmc); in ip_mc_up()
1804 void ip_mc_destroy_dev(struct in_device *in_dev) in ip_mc_destroy_dev() argument
1811 ip_mc_down(in_dev); in ip_mc_destroy_dev()
1813 igmpv3_clear_delrec(in_dev); in ip_mc_destroy_dev()
1816 while ((i = rtnl_dereference(in_dev->mc_list)) != NULL) { in ip_mc_destroy_dev()
1817 in_dev->mc_list = i->next_rcu; in ip_mc_destroy_dev()
1818 in_dev->mc_count--; in ip_mc_destroy_dev()
1882 struct in_device *in_dev = pmc->interface; in ip_mc_del1_src() local
1883 struct net *net = dev_net(in_dev->dev); in ip_mc_del1_src()
1893 !IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) { in ip_mc_del1_src()
1894 psf->sf_crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_del1_src()
1909 static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode, in ip_mc_del_src() argument
1916 if (!in_dev) in ip_mc_del_src()
1919 for_each_pmc_rcu(in_dev, pmc) { in ip_mc_del_src()
1952 struct net *net = dev_net(in_dev->dev); in ip_mc_del_src()
1958 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_del_src()
1959 WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount); in ip_mc_del_src()
2081 static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode, in ip_mc_add_src() argument
2088 if (!in_dev) in ip_mc_add_src()
2091 for_each_pmc_rcu(in_dev, pmc) { in ip_mc_add_src()
2126 in_dev = pmc->interface; in ip_mc_add_src()
2137 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_add_src()
2138 WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount); in ip_mc_add_src()
2141 igmp_ifc_event(in_dev); in ip_mc_add_src()
2143 igmp_ifc_event(in_dev); in ip_mc_add_src()
2175 struct in_device *in_dev; in __ip_mc_join_group() local
2187 in_dev = ip_mc_find_dev(net, imr); in __ip_mc_join_group()
2189 if (!in_dev) { in __ip_mc_join_group()
2214 ____ip_mc_inc_group(in_dev, addr, mode, GFP_KERNEL); in __ip_mc_join_group()
2237 struct in_device *in_dev) in ip_mc_leave_src() argument
2244 return ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, in ip_mc_leave_src()
2247 err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, in ip_mc_leave_src()
2261 struct in_device *in_dev; in ip_mc_leave_group() local
2269 in_dev = ip_mc_find_dev(net, imr); in ip_mc_leave_group()
2270 if (!imr->imr_ifindex && !imr->imr_address.s_addr && !in_dev) { in ip_mc_leave_group()
2287 (void) ip_mc_leave_src(sk, iml, in_dev); in ip_mc_leave_group()
2291 if (in_dev) in ip_mc_leave_group()
2292 ip_mc_dec_group(in_dev, group); in ip_mc_leave_group()
2311 struct in_device *in_dev = NULL; in ip_mc_source() local
2326 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_source()
2328 if (!in_dev) { in ip_mc_source()
2352 ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 0, NULL, 0); in ip_mc_source()
2353 ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0, in ip_mc_source()
2379 ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, omode, 1, in ip_mc_source()
2435 ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 1, in ip_mc_source()
2449 struct in_device *in_dev; in ip_mc_msfilter() local
2466 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_msfilter()
2468 if (!in_dev) { in ip_mc_msfilter()
2499 err = ip_mc_add_src(in_dev, &msf->imsf_multiaddr, in ip_mc_msfilter()
2509 (void) ip_mc_add_src(in_dev, &msf->imsf_multiaddr, in ip_mc_msfilter()
2514 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, in ip_mc_msfilter()
2520 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, in ip_mc_msfilter()
2540 struct in_device *in_dev; in ip_mc_msfget() local
2553 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_msfget()
2555 if (!in_dev) { in ip_mc_msfget()
2701 struct in_device *in_dev; in ip_mc_drop_socket() local
2704 in_dev = inetdev_by_index(net, iml->multi.imr_ifindex); in ip_mc_drop_socket()
2705 (void) ip_mc_leave_src(sk, iml, in_dev); in ip_mc_drop_socket()
2706 if (in_dev) in ip_mc_drop_socket()
2707 ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); in ip_mc_drop_socket()
2716 int ip_check_mc_rcu(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u8 proto) in ip_check_mc_rcu() argument
2723 mc_hash = rcu_dereference(in_dev->mc_hash); in ip_check_mc_rcu()
2734 for_each_pmc_rcu(in_dev, im) { in ip_check_mc_rcu()
2765 struct in_device *in_dev; member
2776 state->in_dev = NULL; in igmp_mc_get_first()
2778 struct in_device *in_dev; in igmp_mc_get_first() local
2780 in_dev = __in_dev_get_rcu(state->dev); in igmp_mc_get_first()
2781 if (!in_dev) in igmp_mc_get_first()
2783 im = rcu_dereference(in_dev->mc_list); in igmp_mc_get_first()
2785 state->in_dev = in_dev; in igmp_mc_get_first()
2800 state->in_dev = NULL; in igmp_mc_get_next()
2803 state->in_dev = __in_dev_get_rcu(state->dev); in igmp_mc_get_next()
2804 if (!state->in_dev) in igmp_mc_get_next()
2806 im = rcu_dereference(state->in_dev->mc_list); in igmp_mc_get_next()
2843 state->in_dev = NULL; in igmp_mc_seq_stop()
2860 querier = IGMP_V1_SEEN(state->in_dev) ? "V1" : in igmp_mc_seq_show()
2861 IGMP_V2_SEEN(state->in_dev) ? "V2" : in igmp_mc_seq_show()
2867 if (rcu_access_pointer(state->in_dev->mc_list) == im) { in igmp_mc_seq_show()
2869 state->dev->ifindex, state->dev->name, state->in_dev->mc_count, querier); in igmp_mc_seq_show()
3071 struct in_device *in_dev; in igmp_netdev_event() local
3075 in_dev = __in_dev_get_rtnl(dev); in igmp_netdev_event()
3076 if (in_dev) in igmp_netdev_event()
3077 ip_mc_rejoin_groups(in_dev); in igmp_netdev_event()