Lines Matching refs:psf

127 #define for_each_psf_mclock(mc, psf)				\  argument
128 for (psf = mc_dereference((mc)->mca_sources, mc->idev); \
129 psf; \
130 psf = mc_dereference(psf->sf_next, mc->idev))
132 #define for_each_psf_rcu(mc, psf) \ argument
133 for (psf = rcu_dereference((mc)->mca_sources); \
134 psf; \
135 psf = rcu_dereference(psf->sf_next))
137 #define for_each_psf_tomb(mc, psf) \ argument
138 for (psf = mc_dereference((mc)->mca_tomb, mc->idev); \
139 psf; \
140 psf = mc_dereference(psf->sf_next, mc->idev))
752 struct ip6_sf_list *psf; in mld_add_delrec() local
761 for_each_psf_mclock(pmc, psf) in mld_add_delrec()
762 psf->sf_crcount = pmc->mca_crcount; in mld_add_delrec()
772 struct ip6_sf_list *psf, *sources, *tomb; in mld_del_delrec() local
801 for_each_psf_mclock(im, psf) in mld_del_delrec()
802 psf->sf_crcount = idev->mc_qrv; in mld_del_delrec()
829 struct ip6_sf_list *psf, *psf_next; in mld_clear_delrec() local
831 psf = mc_dereference(pmc->mca_tomb, idev); in mld_clear_delrec()
833 for (; psf; psf = psf_next) { in mld_clear_delrec()
834 psf_next = mc_dereference(psf->sf_next, idev); in mld_clear_delrec()
835 kfree_rcu(psf, rcu); in mld_clear_delrec()
1030 struct ip6_sf_list *psf; in ipv6_chk_mcast_addr() local
1032 for_each_psf_rcu(mc, psf) { in ipv6_chk_mcast_addr()
1033 if (ipv6_addr_equal(&psf->sf_addr, src_addr)) in ipv6_chk_mcast_addr()
1036 if (psf) in ipv6_chk_mcast_addr()
1037 rv = psf->sf_count[MCAST_INCLUDE] || in ipv6_chk_mcast_addr()
1038 psf->sf_count[MCAST_EXCLUDE] != in ipv6_chk_mcast_addr()
1146 struct ip6_sf_list *psf; in mld_xmarksources() local
1150 for_each_psf_mclock(pmc, psf) { in mld_xmarksources()
1155 if (psf->sf_count[MCAST_INCLUDE] || in mld_xmarksources()
1157 psf->sf_count[MCAST_EXCLUDE]) in mld_xmarksources()
1159 if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) { in mld_xmarksources()
1175 struct ip6_sf_list *psf; in mld_marksources() local
1184 for_each_psf_mclock(pmc, psf) { in mld_marksources()
1188 if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) { in mld_marksources()
1189 psf->sf_gsresp = 1; in mld_marksources()
1644 static bool is_in(struct ifmcaddr6 *pmc, struct ip6_sf_list *psf, int type, in is_in() argument
1652 if (!((pmc->mca_flags & MAF_GSQUERY) && !psf->sf_gsresp)) { in is_in()
1658 if (psf->sf_count[MCAST_INCLUDE]) in is_in()
1661 psf->sf_count[MCAST_EXCLUDE]; in is_in()
1667 return psf->sf_count[MCAST_INCLUDE] != 0; in is_in()
1672 psf->sf_count[MCAST_INCLUDE]) in is_in()
1675 psf->sf_count[MCAST_EXCLUDE]; in is_in()
1677 if (gdeleted || !psf->sf_crcount) in is_in()
1682 return gdeleted || (psf->sf_crcount && sdeleted); in is_in()
1683 return psf->sf_crcount && !gdeleted && !sdeleted; in is_in()
1691 struct ip6_sf_list *psf; in mld_scount() local
1694 for_each_psf_mclock(pmc, psf) { in mld_scount()
1695 if (!is_in(pmc, psf, type, gdeleted, sdeleted)) in mld_scount()
1871 struct ip6_sf_list *psf, *psf_prev, *psf_next; in add_grec() local
1912 for (psf = mc_dereference(*psf_list, idev); in add_grec()
1913 psf; in add_grec()
1914 psf = psf_next) { in add_grec()
1917 psf_next = mc_dereference(psf->sf_next, idev); in add_grec()
1919 if (!is_in(pmc, psf, type, gdeleted, sdeleted) && !crsend) { in add_grec()
1920 psf_prev = psf; in add_grec()
1930 type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount) in add_grec()
1935 psf->sf_gsresp = 0; in add_grec()
1956 *psrc = psf->sf_addr; in add_grec()
1959 type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount) { in add_grec()
1961 psf->sf_crcount--; in add_grec()
1962 if ((sdeleted || gdeleted) && psf->sf_crcount == 0) { in add_grec()
1965 mc_dereference(psf->sf_next, idev)); in add_grec()
1968 mc_dereference(psf->sf_next, idev)); in add_grec()
1969 kfree_rcu(psf, rcu); in add_grec()
1973 psf_prev = psf; in add_grec()
2031 struct ip6_sf_list *psf_prev, *psf_next, *psf; in mld_clear_zeros() local
2034 for (psf = mc_dereference(*ppsf, idev); in mld_clear_zeros()
2035 psf; in mld_clear_zeros()
2036 psf = psf_next) { in mld_clear_zeros()
2037 psf_next = mc_dereference(psf->sf_next, idev); in mld_clear_zeros()
2038 if (psf->sf_crcount == 0) { in mld_clear_zeros()
2041 mc_dereference(psf->sf_next, idev)); in mld_clear_zeros()
2044 mc_dereference(psf->sf_next, idev)); in mld_clear_zeros()
2045 kfree_rcu(psf, rcu); in mld_clear_zeros()
2047 psf_prev = psf; in mld_clear_zeros()
2275 struct ip6_sf_list *psf, *psf_prev; in ip6_mc_del1_src() local
2279 for_each_psf_mclock(pmc, psf) { in ip6_mc_del1_src()
2280 if (ipv6_addr_equal(&psf->sf_addr, psfsrc)) in ip6_mc_del1_src()
2282 psf_prev = psf; in ip6_mc_del1_src()
2284 if (!psf || psf->sf_count[sfmode] == 0) { in ip6_mc_del1_src()
2288 psf->sf_count[sfmode]--; in ip6_mc_del1_src()
2289 if (!psf->sf_count[MCAST_INCLUDE] && !psf->sf_count[MCAST_EXCLUDE]) { in ip6_mc_del1_src()
2295 mc_dereference(psf->sf_next, idev)); in ip6_mc_del1_src()
2298 mc_dereference(psf->sf_next, idev)); in ip6_mc_del1_src()
2300 if (psf->sf_oldin && !(pmc->mca_flags & MAF_NOREPORT) && in ip6_mc_del1_src()
2302 psf->sf_crcount = idev->mc_qrv; in ip6_mc_del1_src()
2303 rcu_assign_pointer(psf->sf_next, in ip6_mc_del1_src()
2305 rcu_assign_pointer(pmc->mca_tomb, psf); in ip6_mc_del1_src()
2308 kfree_rcu(psf, rcu); in ip6_mc_del1_src()
2351 struct ip6_sf_list *psf; in ip6_mc_del_src() local
2357 for_each_psf_mclock(pmc, psf) in ip6_mc_del_src()
2358 psf->sf_crcount = 0; in ip6_mc_del_src()
2374 struct ip6_sf_list *psf, *psf_prev; in ip6_mc_add1_src() local
2377 for_each_psf_mclock(pmc, psf) { in ip6_mc_add1_src()
2378 if (ipv6_addr_equal(&psf->sf_addr, psfsrc)) in ip6_mc_add1_src()
2380 psf_prev = psf; in ip6_mc_add1_src()
2382 if (!psf) { in ip6_mc_add1_src()
2383 psf = kzalloc(sizeof(*psf), GFP_KERNEL); in ip6_mc_add1_src()
2384 if (!psf) in ip6_mc_add1_src()
2387 psf->sf_addr = *psfsrc; in ip6_mc_add1_src()
2389 rcu_assign_pointer(psf_prev->sf_next, psf); in ip6_mc_add1_src()
2391 rcu_assign_pointer(pmc->mca_sources, psf); in ip6_mc_add1_src()
2394 psf->sf_count[sfmode]++; in ip6_mc_add1_src()
2401 struct ip6_sf_list *psf; in sf_markstate() local
2404 for_each_psf_mclock(pmc, psf) { in sf_markstate()
2406 psf->sf_oldin = mca_xcount == in sf_markstate()
2407 psf->sf_count[MCAST_EXCLUDE] && in sf_markstate()
2408 !psf->sf_count[MCAST_INCLUDE]; in sf_markstate()
2410 psf->sf_oldin = psf->sf_count[MCAST_INCLUDE] != 0; in sf_markstate()
2418 struct ip6_sf_list *psf, *dpsf; in sf_setstate() local
2424 for_each_psf_mclock(pmc, psf) { in sf_setstate()
2426 new_in = mca_xcount == psf->sf_count[MCAST_EXCLUDE] && in sf_setstate()
2427 !psf->sf_count[MCAST_INCLUDE]; in sf_setstate()
2429 new_in = psf->sf_count[MCAST_INCLUDE] != 0; in sf_setstate()
2431 if (!psf->sf_oldin) { in sf_setstate()
2436 &psf->sf_addr)) in sf_setstate()
2451 psf->sf_crcount = qrv; in sf_setstate()
2454 } else if (psf->sf_oldin) { in sf_setstate()
2455 psf->sf_crcount = 0; in sf_setstate()
2463 &psf->sf_addr)) in sf_setstate()
2469 *dpsf = *psf; in sf_setstate()
2521 struct ip6_sf_list *psf; in ip6_mc_add_src() local
2532 for_each_psf_mclock(pmc, psf) in ip6_mc_add_src()
2533 psf->sf_crcount = 0; in ip6_mc_add_src()
2544 struct ip6_sf_list *psf, *nextpsf; in ip6_mc_clear_src() local
2546 for (psf = mc_dereference(pmc->mca_tomb, pmc->idev); in ip6_mc_clear_src()
2547 psf; in ip6_mc_clear_src()
2548 psf = nextpsf) { in ip6_mc_clear_src()
2549 nextpsf = mc_dereference(psf->sf_next, pmc->idev); in ip6_mc_clear_src()
2550 kfree_rcu(psf, rcu); in ip6_mc_clear_src()
2553 for (psf = mc_dereference(pmc->mca_sources, pmc->idev); in ip6_mc_clear_src()
2554 psf; in ip6_mc_clear_src()
2555 psf = nextpsf) { in ip6_mc_clear_src()
2556 nextpsf = mc_dereference(psf->sf_next, pmc->idev); in ip6_mc_clear_src()
2557 kfree_rcu(psf, rcu); in ip6_mc_clear_src()
2970 struct ip6_sf_list *psf = NULL; in igmp6_mcf_get_first() local
2985 psf = rcu_dereference(im->mca_sources); in igmp6_mcf_get_first()
2986 if (likely(psf)) { in igmp6_mcf_get_first()
2993 return psf; in igmp6_mcf_get_first()
2996 static struct ip6_sf_list *igmp6_mcf_get_next(struct seq_file *seq, struct ip6_sf_list *psf) in igmp6_mcf_get_next() argument
3000 psf = rcu_dereference(psf->sf_next); in igmp6_mcf_get_next()
3001 while (!psf) { in igmp6_mcf_get_next()
3016 psf = rcu_dereference(state->im->mca_sources); in igmp6_mcf_get_next()
3019 return psf; in igmp6_mcf_get_next()
3024 struct ip6_sf_list *psf = igmp6_mcf_get_first(seq); in igmp6_mcf_get_idx() local
3025 if (psf) in igmp6_mcf_get_idx()
3026 while (pos && (psf = igmp6_mcf_get_next(seq, psf)) != NULL) in igmp6_mcf_get_idx()
3028 return pos ? NULL : psf; in igmp6_mcf_get_idx()
3040 struct ip6_sf_list *psf; in igmp6_mcf_seq_next() local
3042 psf = igmp6_mcf_get_first(seq); in igmp6_mcf_seq_next()
3044 psf = igmp6_mcf_get_next(seq, v); in igmp6_mcf_seq_next()
3046 return psf; in igmp6_mcf_seq_next()
3065 struct ip6_sf_list *psf = (struct ip6_sf_list *)v; in igmp6_mcf_seq_show() local
3075 &psf->sf_addr, in igmp6_mcf_seq_show()
3076 psf->sf_count[MCAST_INCLUDE], in igmp6_mcf_seq_show()
3077 psf->sf_count[MCAST_EXCLUDE]); in igmp6_mcf_seq_show()