Lines Matching refs:in_dev
125 #define IGMP_V1_SEEN(in_dev) \ argument
126 (IPV4_DEVCONF_ALL_RO(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 1 || \
127 IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 1 || \
128 ((in_dev)->mr_v1_seen && \
129 time_before(jiffies, (in_dev)->mr_v1_seen)))
130 #define IGMP_V2_SEEN(in_dev) \ argument
131 (IPV4_DEVCONF_ALL_RO(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 2 || \
132 IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 2 || \
133 ((in_dev)->mr_v2_seen && \
134 time_before(jiffies, (in_dev)->mr_v2_seen)))
136 static int unsolicited_report_interval(struct in_device *in_dev) in unsolicited_report_interval() argument
140 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) in unsolicited_report_interval()
142 in_dev, in unsolicited_report_interval()
146 in_dev, in unsolicited_report_interval()
159 static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im,
161 static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im);
162 static void igmpv3_clear_delrec(struct in_device *in_dev);
167 static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
178 #define for_each_pmc_rcu(in_dev, pmc) \ argument
179 for (pmc = rcu_dereference(in_dev->mc_list); \
183 #define for_each_pmc_rtnl(in_dev, pmc) \ argument
184 for (pmc = rtnl_dereference(in_dev->mc_list); \
228 static void igmp_gq_start_timer(struct in_device *in_dev) in igmp_gq_start_timer() argument
230 int tv = get_random_u32_below(in_dev->mr_maxdelay); in igmp_gq_start_timer()
233 if (in_dev->mr_gq_running && in igmp_gq_start_timer()
234 time_after_eq(exp, (in_dev->mr_gq_timer).expires)) in igmp_gq_start_timer()
237 in_dev->mr_gq_running = 1; in igmp_gq_start_timer()
238 if (!mod_timer(&in_dev->mr_gq_timer, exp)) in igmp_gq_start_timer()
239 in_dev_hold(in_dev); in igmp_gq_start_timer()
242 static void igmp_ifc_start_timer(struct in_device *in_dev, int delay) in igmp_ifc_start_timer() argument
246 if (!mod_timer(&in_dev->mr_ifc_timer, jiffies+tv+2)) in igmp_ifc_start_timer()
247 in_dev_hold(in_dev); in igmp_ifc_start_timer()
337 struct in_device *in_dev = __in_dev_get_rcu(dev); in igmpv3_get_srcaddr() local
340 if (!in_dev) in igmpv3_get_srcaddr()
343 in_dev_for_each_ifa_rcu(ifa, in_dev) { in igmpv3_get_srcaddr()
591 static int igmpv3_send_report(struct in_device *in_dev, struct ip_mc_list *pmc) in igmpv3_send_report() argument
594 struct net *net = dev_net(in_dev->dev); in igmpv3_send_report()
599 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_send_report()
656 static void igmpv3_send_cr(struct in_device *in_dev) in igmpv3_send_cr() argument
663 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_send_cr()
667 for (pmc = in_dev->mc_tomb; pmc; pmc = pmc_next) { in igmpv3_send_cr()
690 in_dev->mc_tomb = pmc_next; in igmpv3_send_cr()
696 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_send_cr()
699 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_send_cr()
729 static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc, in igmp_send_report() argument
736 struct net_device *dev = in_dev->dev; in igmp_send_report()
744 return igmpv3_send_report(in_dev, pmc); in igmp_send_report()
804 struct in_device *in_dev = timer_container_of(in_dev, t, mr_gq_timer); in igmp_gq_timer_expire() local
806 in_dev->mr_gq_running = 0; in igmp_gq_timer_expire()
807 igmpv3_send_report(in_dev, NULL); in igmp_gq_timer_expire()
808 in_dev_put(in_dev); in igmp_gq_timer_expire()
813 struct in_device *in_dev = timer_container_of(in_dev, t, mr_ifc_timer); in igmp_ifc_timer_expire() local
816 igmpv3_send_cr(in_dev); in igmp_ifc_timer_expire()
818 mr_ifc_count = READ_ONCE(in_dev->mr_ifc_count); in igmp_ifc_timer_expire()
821 if (cmpxchg(&in_dev->mr_ifc_count, in igmp_ifc_timer_expire()
825 igmp_ifc_start_timer(in_dev, in igmp_ifc_timer_expire()
826 unsolicited_report_interval(in_dev)); in igmp_ifc_timer_expire()
828 in_dev_put(in_dev); in igmp_ifc_timer_expire()
831 static void igmp_ifc_event(struct in_device *in_dev) in igmp_ifc_event() argument
833 struct net *net = dev_net(in_dev->dev); in igmp_ifc_event()
834 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) in igmp_ifc_event()
836 WRITE_ONCE(in_dev->mr_ifc_count, in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv)); in igmp_ifc_event()
837 igmp_ifc_start_timer(in_dev, 1); in igmp_ifc_event()
844 struct in_device *in_dev = im->interface; in igmp_timer_expire() local
850 igmp_start_timer(im, unsolicited_report_interval(in_dev)); in igmp_timer_expire()
855 if (IGMP_V1_SEEN(in_dev)) in igmp_timer_expire()
856 igmp_send_report(in_dev, im, IGMP_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
857 else if (IGMP_V2_SEEN(in_dev)) in igmp_timer_expire()
858 igmp_send_report(in_dev, im, IGMPV2_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
860 igmp_send_report(in_dev, im, IGMPV3_HOST_MEMBERSHIP_REPORT); in igmp_timer_expire()
922 static bool igmp_heard_report(struct in_device *in_dev, __be32 group) in igmp_heard_report() argument
925 struct net *net = dev_net(in_dev->dev); in igmp_heard_report()
936 for_each_pmc_rcu(in_dev, im) { in igmp_heard_report()
947 static bool igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb, in igmp_heard_query() argument
956 struct net *net = dev_net(in_dev->dev); in igmp_heard_query()
964 in_dev->mr_v1_seen = jiffies + in igmp_heard_query()
965 (in_dev->mr_qrv * in_dev->mr_qi) + in igmp_heard_query()
966 in_dev->mr_qri; in igmp_heard_query()
971 in_dev->mr_v2_seen = jiffies + in igmp_heard_query()
972 (in_dev->mr_qrv * in_dev->mr_qi) + in igmp_heard_query()
973 in_dev->mr_qri; in igmp_heard_query()
976 WRITE_ONCE(in_dev->mr_ifc_count, 0); in igmp_heard_query()
977 if (timer_delete(&in_dev->mr_ifc_timer)) in igmp_heard_query()
978 __in_dev_put(in_dev); in igmp_heard_query()
980 igmpv3_clear_delrec(in_dev); in igmp_heard_query()
983 } else if (IGMP_V1_SEEN(in_dev)) { in igmp_heard_query()
987 } else if (IGMP_V2_SEEN(in_dev)) { in igmp_heard_query()
1012 in_dev->mr_maxdelay = max_delay; in igmp_heard_query()
1018 in_dev->mr_qrv = ih3->qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmp_heard_query()
1019 in_dev->mr_qi = IGMPV3_QQIC(ih3->qqic)*HZ ?: IGMP_QUERY_INTERVAL; in igmp_heard_query()
1025 if (in_dev->mr_qri >= in_dev->mr_qi) in igmp_heard_query()
1026 in_dev->mr_qri = (in_dev->mr_qi/HZ - 1)*HZ; in igmp_heard_query()
1031 igmp_gq_start_timer(in_dev); in igmp_heard_query()
1049 for_each_pmc_rcu(in_dev, im) { in igmp_heard_query()
1080 struct in_device *in_dev; in igmp_rcv() local
1090 in_dev = __in_dev_get_rcu(dev); in igmp_rcv()
1091 if (!in_dev) in igmp_rcv()
1103 dropped = igmp_heard_query(in_dev, skb, len); in igmp_rcv()
1113 dropped = igmp_heard_report(in_dev, ih->group); in igmp_rcv()
1145 static void ip_mc_filter_add(struct in_device *in_dev, __be32 addr) in ip_mc_filter_add() argument
1148 struct net_device *dev = in_dev->dev; in ip_mc_filter_add()
1165 static void ip_mc_filter_del(struct in_device *in_dev, __be32 addr) in ip_mc_filter_del() argument
1168 struct net_device *dev = in_dev->dev; in ip_mc_filter_del()
1178 static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im, in igmpv3_add_delrec() argument
1182 struct net *net = dev_net(in_dev->dev); in igmpv3_add_delrec()
1196 in_dev_hold(in_dev); in igmpv3_add_delrec()
1198 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmpv3_add_delrec()
1211 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_add_delrec()
1212 pmc->next = in_dev->mc_tomb; in igmpv3_add_delrec()
1213 in_dev->mc_tomb = pmc; in igmpv3_add_delrec()
1214 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_add_delrec()
1220 static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im) in igmpv3_del_delrec() argument
1224 struct net *net = dev_net(in_dev->dev); in igmpv3_del_delrec()
1227 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_del_delrec()
1229 for (pmc = in_dev->mc_tomb; pmc; pmc = pmc->next) { in igmpv3_del_delrec()
1238 in_dev->mc_tomb = pmc->next; in igmpv3_del_delrec()
1240 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_del_delrec()
1249 psf->sf_crcount = in_dev->mr_qrv ?: in igmpv3_del_delrec()
1252 im->crcount = in_dev->mr_qrv ?: in igmpv3_del_delrec()
1264 static void igmpv3_clear_delrec(struct in_device *in_dev) in igmpv3_clear_delrec() argument
1268 spin_lock_bh(&in_dev->mc_tomb_lock); in igmpv3_clear_delrec()
1269 pmc = in_dev->mc_tomb; in igmpv3_clear_delrec()
1270 in_dev->mc_tomb = NULL; in igmpv3_clear_delrec()
1271 spin_unlock_bh(&in_dev->mc_tomb_lock); in igmpv3_clear_delrec()
1281 for_each_pmc_rcu(in_dev, pmc) { in igmpv3_clear_delrec()
1296 struct in_device *in_dev = im->interface; in __igmp_group_dropped() local
1298 struct net *net = dev_net(in_dev->dev); in __igmp_group_dropped()
1304 ip_mc_filter_del(in_dev, im->multiaddr); in __igmp_group_dropped()
1317 if (!in_dev->dead) { in __igmp_group_dropped()
1318 if (IGMP_V1_SEEN(in_dev)) in __igmp_group_dropped()
1320 if (IGMP_V2_SEEN(in_dev)) { in __igmp_group_dropped()
1322 igmp_send_report(in_dev, im, IGMP_HOST_LEAVE_MESSAGE); in __igmp_group_dropped()
1326 igmpv3_add_delrec(in_dev, im, gfp); in __igmp_group_dropped()
1328 igmp_ifc_event(in_dev); in __igmp_group_dropped()
1340 struct in_device *in_dev = im->interface; in igmp_group_added() local
1342 struct net *net = dev_net(in_dev->dev); in igmp_group_added()
1347 ip_mc_filter_add(in_dev, im->multiaddr); in igmp_group_added()
1357 if (in_dev->dead) in igmp_group_added()
1361 if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) { in igmp_group_added()
1374 im->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in igmp_group_added()
1376 igmp_ifc_event(in_dev); in igmp_group_added()
1390 static void ip_mc_hash_add(struct in_device *in_dev, in ip_mc_hash_add() argument
1396 mc_hash = rtnl_dereference(in_dev->mc_hash); in ip_mc_hash_add()
1405 if (in_dev->mc_count < 4) in ip_mc_hash_add()
1413 for_each_pmc_rtnl(in_dev, im) { in ip_mc_hash_add()
1419 rcu_assign_pointer(in_dev->mc_hash, mc_hash); in ip_mc_hash_add()
1422 static void ip_mc_hash_remove(struct in_device *in_dev, in ip_mc_hash_remove() argument
1425 struct ip_mc_list __rcu **mc_hash = rtnl_dereference(in_dev->mc_hash); in ip_mc_hash_remove()
1504 static void ____ip_mc_inc_group(struct in_device *in_dev, __be32 addr, in ____ip_mc_inc_group() argument
1512 mc_hash = rtnl_dereference(in_dev->mc_hash); in ____ip_mc_inc_group()
1523 for_each_pmc_rtnl(in_dev, im) { in ____ip_mc_inc_group()
1531 ip_mc_add_src(in_dev, &addr, mode, 0, NULL, 0); in ____ip_mc_inc_group()
1540 im->interface = in_dev; in ____ip_mc_inc_group()
1541 in_dev_hold(in_dev); in ____ip_mc_inc_group()
1554 im->next_rcu = in_dev->mc_list; in ____ip_mc_inc_group()
1555 in_dev->mc_count++; in ____ip_mc_inc_group()
1556 rcu_assign_pointer(in_dev->mc_list, im); in ____ip_mc_inc_group()
1558 ip_mc_hash_add(in_dev, im); in ____ip_mc_inc_group()
1561 igmpv3_del_delrec(in_dev, im); in ____ip_mc_inc_group()
1564 inet_ifmcaddr_notify(in_dev->dev, im, RTM_NEWMULTICAST); in ____ip_mc_inc_group()
1565 if (!in_dev->dead) in ____ip_mc_inc_group()
1566 ip_rt_multicast_event(in_dev); in ____ip_mc_inc_group()
1571 void __ip_mc_inc_group(struct in_device *in_dev, __be32 addr, gfp_t gfp) in __ip_mc_inc_group() argument
1573 ____ip_mc_inc_group(in_dev, addr, MCAST_EXCLUDE, gfp); in __ip_mc_inc_group()
1577 void ip_mc_inc_group(struct in_device *in_dev, __be32 addr) in ip_mc_inc_group() argument
1579 __ip_mc_inc_group(in_dev, addr, GFP_KERNEL); in ip_mc_inc_group()
1728 static void ip_mc_rejoin_groups(struct in_device *in_dev) in ip_mc_rejoin_groups() argument
1733 struct net *net = dev_net(in_dev->dev); in ip_mc_rejoin_groups()
1737 for_each_pmc_rtnl(in_dev, im) { in ip_mc_rejoin_groups()
1747 if (IGMP_V1_SEEN(in_dev)) in ip_mc_rejoin_groups()
1749 else if (IGMP_V2_SEEN(in_dev)) in ip_mc_rejoin_groups()
1753 igmp_send_report(in_dev, im, type); in ip_mc_rejoin_groups()
1762 void __ip_mc_dec_group(struct in_device *in_dev, __be32 addr, gfp_t gfp) in __ip_mc_dec_group() argument
1769 for (ip = &in_dev->mc_list; in __ip_mc_dec_group()
1774 ip_mc_hash_remove(in_dev, i); in __ip_mc_dec_group()
1776 in_dev->mc_count--; in __ip_mc_dec_group()
1778 inet_ifmcaddr_notify(in_dev->dev, i, in __ip_mc_dec_group()
1782 if (!in_dev->dead) in __ip_mc_dec_group()
1783 ip_rt_multicast_event(in_dev); in __ip_mc_dec_group()
1796 void ip_mc_unmap(struct in_device *in_dev) in ip_mc_unmap() argument
1802 for_each_pmc_rtnl(in_dev, pmc) in ip_mc_unmap()
1806 void ip_mc_remap(struct in_device *in_dev) in ip_mc_remap() argument
1812 for_each_pmc_rtnl(in_dev, pmc) { in ip_mc_remap()
1814 igmpv3_del_delrec(in_dev, pmc); in ip_mc_remap()
1822 void ip_mc_down(struct in_device *in_dev) in ip_mc_down() argument
1828 for_each_pmc_rtnl(in_dev, pmc) in ip_mc_down()
1832 WRITE_ONCE(in_dev->mr_ifc_count, 0); in ip_mc_down()
1833 if (timer_delete(&in_dev->mr_ifc_timer)) in ip_mc_down()
1834 __in_dev_put(in_dev); in ip_mc_down()
1835 in_dev->mr_gq_running = 0; in ip_mc_down()
1836 if (timer_delete(&in_dev->mr_gq_timer)) in ip_mc_down()
1837 __in_dev_put(in_dev); in ip_mc_down()
1840 ip_mc_dec_group(in_dev, IGMP_ALL_HOSTS); in ip_mc_down()
1844 static void ip_mc_reset(struct in_device *in_dev) in ip_mc_reset() argument
1846 struct net *net = dev_net(in_dev->dev); in ip_mc_reset()
1848 in_dev->mr_qi = IGMP_QUERY_INTERVAL; in ip_mc_reset()
1849 in_dev->mr_qri = IGMP_QUERY_RESPONSE_INTERVAL; in ip_mc_reset()
1850 in_dev->mr_qrv = READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_reset()
1853 static void ip_mc_reset(struct in_device *in_dev) in ip_mc_reset() argument
1858 void ip_mc_init_dev(struct in_device *in_dev) in ip_mc_init_dev() argument
1863 timer_setup(&in_dev->mr_gq_timer, igmp_gq_timer_expire, 0); in ip_mc_init_dev()
1864 timer_setup(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire, 0); in ip_mc_init_dev()
1866 ip_mc_reset(in_dev); in ip_mc_init_dev()
1868 spin_lock_init(&in_dev->mc_tomb_lock); in ip_mc_init_dev()
1873 void ip_mc_up(struct in_device *in_dev) in ip_mc_up() argument
1879 ip_mc_reset(in_dev); in ip_mc_up()
1880 ip_mc_inc_group(in_dev, IGMP_ALL_HOSTS); in ip_mc_up()
1882 for_each_pmc_rtnl(in_dev, pmc) { in ip_mc_up()
1884 igmpv3_del_delrec(in_dev, pmc); in ip_mc_up()
1894 void ip_mc_destroy_dev(struct in_device *in_dev) in ip_mc_destroy_dev() argument
1901 ip_mc_down(in_dev); in ip_mc_destroy_dev()
1903 igmpv3_clear_delrec(in_dev); in ip_mc_destroy_dev()
1906 while ((i = rtnl_dereference(in_dev->mc_list)) != NULL) { in ip_mc_destroy_dev()
1907 in_dev->mc_list = i->next_rcu; in ip_mc_destroy_dev()
1908 in_dev->mc_count--; in ip_mc_destroy_dev()
1973 struct in_device *in_dev = pmc->interface; in ip_mc_del1_src() local
1974 struct net *net = dev_net(in_dev->dev); in ip_mc_del1_src()
1984 !IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) { in ip_mc_del1_src()
1985 psf->sf_crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_del1_src()
2000 static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode, in ip_mc_del_src() argument
2007 if (!in_dev) in ip_mc_del_src()
2010 for_each_pmc_rcu(in_dev, pmc) { in ip_mc_del_src()
2043 struct net *net = dev_net(in_dev->dev); in ip_mc_del_src()
2049 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_del_src()
2050 WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount); in ip_mc_del_src()
2172 static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode, in ip_mc_add_src() argument
2179 if (!in_dev) in ip_mc_add_src()
2182 for_each_pmc_rcu(in_dev, pmc) { in ip_mc_add_src()
2217 in_dev = pmc->interface; in ip_mc_add_src()
2228 pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); in ip_mc_add_src()
2229 WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount); in ip_mc_add_src()
2232 igmp_ifc_event(in_dev); in ip_mc_add_src()
2234 igmp_ifc_event(in_dev); in ip_mc_add_src()
2266 struct in_device *in_dev; in __ip_mc_join_group() local
2278 in_dev = ip_mc_find_dev(net, imr); in __ip_mc_join_group()
2280 if (!in_dev) { in __ip_mc_join_group()
2305 ____ip_mc_inc_group(in_dev, addr, mode, GFP_KERNEL); in __ip_mc_join_group()
2328 struct in_device *in_dev) in ip_mc_leave_src() argument
2335 return ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, in ip_mc_leave_src()
2338 err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, in ip_mc_leave_src()
2352 struct in_device *in_dev; in ip_mc_leave_group() local
2360 in_dev = ip_mc_find_dev(net, imr); in ip_mc_leave_group()
2361 if (!imr->imr_ifindex && !imr->imr_address.s_addr && !in_dev) { in ip_mc_leave_group()
2378 (void) ip_mc_leave_src(sk, iml, in_dev); in ip_mc_leave_group()
2382 if (in_dev) in ip_mc_leave_group()
2383 ip_mc_dec_group(in_dev, group); in ip_mc_leave_group()
2402 struct in_device *in_dev = NULL; in ip_mc_source() local
2417 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_source()
2419 if (!in_dev) { in ip_mc_source()
2443 ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 0, NULL, 0); in ip_mc_source()
2444 ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0, in ip_mc_source()
2470 ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, omode, 1, in ip_mc_source()
2526 ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 1, in ip_mc_source()
2540 struct in_device *in_dev; in ip_mc_msfilter() local
2557 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_msfilter()
2559 if (!in_dev) { in ip_mc_msfilter()
2590 err = ip_mc_add_src(in_dev, &msf->imsf_multiaddr, in ip_mc_msfilter()
2600 (void) ip_mc_add_src(in_dev, &msf->imsf_multiaddr, in ip_mc_msfilter()
2605 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, in ip_mc_msfilter()
2611 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, in ip_mc_msfilter()
2631 struct in_device *in_dev; in ip_mc_msfget() local
2644 in_dev = ip_mc_find_dev(net, &imr); in ip_mc_msfget()
2646 if (!in_dev) { in ip_mc_msfget()
2792 struct in_device *in_dev; in ip_mc_drop_socket() local
2795 in_dev = inetdev_by_index(net, iml->multi.imr_ifindex); in ip_mc_drop_socket()
2796 (void) ip_mc_leave_src(sk, iml, in_dev); in ip_mc_drop_socket()
2797 if (in_dev) in ip_mc_drop_socket()
2798 ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); in ip_mc_drop_socket()
2807 int ip_check_mc_rcu(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u8 proto) in ip_check_mc_rcu() argument
2814 mc_hash = rcu_dereference(in_dev->mc_hash); in ip_check_mc_rcu()
2825 for_each_pmc_rcu(in_dev, im) { in ip_check_mc_rcu()
2856 struct in_device *in_dev; member
2867 state->in_dev = NULL; in igmp_mc_get_first()
2869 struct in_device *in_dev; in igmp_mc_get_first() local
2871 in_dev = __in_dev_get_rcu(state->dev); in igmp_mc_get_first()
2872 if (!in_dev) in igmp_mc_get_first()
2874 im = rcu_dereference(in_dev->mc_list); in igmp_mc_get_first()
2876 state->in_dev = in_dev; in igmp_mc_get_first()
2891 state->in_dev = NULL; in igmp_mc_get_next()
2894 state->in_dev = __in_dev_get_rcu(state->dev); in igmp_mc_get_next()
2895 if (!state->in_dev) in igmp_mc_get_next()
2897 im = rcu_dereference(state->in_dev->mc_list); in igmp_mc_get_next()
2934 state->in_dev = NULL; in igmp_mc_seq_stop()
2951 querier = IGMP_V1_SEEN(state->in_dev) ? "V1" : in igmp_mc_seq_show()
2952 IGMP_V2_SEEN(state->in_dev) ? "V2" : in igmp_mc_seq_show()
2958 if (rcu_access_pointer(state->in_dev->mc_list) == im) { in igmp_mc_seq_show()
2960 state->dev->ifindex, state->dev->name, state->in_dev->mc_count, querier); in igmp_mc_seq_show()
3160 struct in_device *in_dev; in igmp_netdev_event() local
3164 in_dev = __in_dev_get_rtnl(dev); in igmp_netdev_event()
3165 if (in_dev) in igmp_netdev_event()
3166 ip_mc_rejoin_groups(in_dev); in igmp_netdev_event()