Lines Matching refs:imf

101 static int      im6f_get_source(struct in6_mfilter *imf,
257 im6f_init(struct in6_mfilter *imf, const uint8_t st0, const uint8_t st1) in im6f_init() argument
259 memset(imf, 0, sizeof(struct in6_mfilter)); in im6f_init()
260 RB_INIT(&imf->im6f_sources); in im6f_init()
261 imf->im6f_st[0] = st0; in im6f_init()
262 imf->im6f_st[1] = st1; in im6f_init()
377 struct in6_mfilter *imf; in im6o_match_source() local
390 imf = &imo->im6o_mfilters[gidx]; in im6o_match_source()
395 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6o_match_source()
675 im6f_get_source(struct in6_mfilter *imf, const struct sockaddr_in6 *psin, in im6f_get_source() argument
688 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6f_get_source()
691 if (imf->im6f_nsrc == in6_mcast_maxsocksrc) { in im6f_get_source()
697 RB_INSERT(ip6_msource_tree, &imf->im6f_sources, in im6f_get_source()
699 ++imf->im6f_nsrc; in im6f_get_source()
718 im6f_graft(struct in6_mfilter *imf, const uint8_t st1, in im6f_graft() argument
727 RB_INSERT(ip6_msource_tree, &imf->im6f_sources, in im6f_graft()
729 ++imf->im6f_nsrc; in im6f_graft()
745 im6f_prune(struct in6_mfilter *imf, const struct sockaddr_in6 *psin) in im6f_prune() argument
752 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6f_prune()
767 im6f_rollback(struct in6_mfilter *imf) in im6f_rollback() argument
772 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_rollback()
784 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_rollback()
786 imf->im6f_nsrc--; in im6f_rollback()
789 imf->im6f_st[1] = imf->im6f_st[0]; in im6f_rollback()
798 im6f_leave(struct in6_mfilter *imf) in im6f_leave() argument
803 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in im6f_leave()
807 imf->im6f_st[1] = MCAST_INCLUDE; in im6f_leave()
816 im6f_commit(struct in6_mfilter *imf) in im6f_commit() argument
821 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in im6f_commit()
825 imf->im6f_st[0] = imf->im6f_st[1]; in im6f_commit()
834 im6f_reap(struct in6_mfilter *imf) in im6f_reap() argument
839 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_reap()
845 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_reap()
847 imf->im6f_nsrc--; in im6f_reap()
858 im6f_purge(struct in6_mfilter *imf) in im6f_purge() argument
863 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_purge()
867 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_purge()
869 imf->im6f_nsrc--; in im6f_purge()
871 imf->im6f_st[0] = imf->im6f_st[1] = MCAST_UNDEFINED; in im6f_purge()
872 VERIFY(RB_EMPTY(&imf->im6f_sources)); in im6f_purge()
983 in6m_merge(struct in6_multi *inm, /*const*/ struct in6_mfilter *imf) in in6m_merge() argument
1003 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in in6m_merge()
1005 if (lims->im6sl_st[0] == imf->im6f_st[0]) { in in6m_merge()
1008 if (lims->im6sl_st[1] == imf->im6f_st[1]) { in in6m_merge()
1042 if (imf->im6f_st[0] == imf->im6f_st[1] && in in6m_merge()
1043 imf->im6f_st[1] == MCAST_INCLUDE) { in in6m_merge()
1051 if (imf->im6f_st[0] != imf->im6f_st[1]) { in in6m_merge()
1053 __func__, imf->im6f_st[0], imf->im6f_st[1])); in in6m_merge()
1055 if (imf->im6f_st[0] == MCAST_EXCLUDE) { in in6m_merge()
1058 } else if (imf->im6f_st[0] == MCAST_INCLUDE) { in in6m_merge()
1063 if (imf->im6f_st[1] == MCAST_EXCLUDE) { in in6m_merge()
1066 } else if (imf->im6f_st[1] == MCAST_INCLUDE && nsrc1 > 0) { in in6m_merge()
1092 if (imf->im6f_st[0] == MCAST_EXCLUDE && nsrc0 == 0) { in in6m_merge()
1093 if ((imf->im6f_st[1] != MCAST_EXCLUDE) || in in6m_merge()
1094 (imf->im6f_st[1] == MCAST_EXCLUDE && nsrc1 > 0)) { in in6m_merge()
1101 if (imf->im6f_st[1] == MCAST_EXCLUDE && nsrc1 == 0) { in in6m_merge()
1107 (uint64_t)VM_KERNEL_ADDRPERM(imf), in in6m_merge()
1237 /*const*/ struct in6_mfilter *imf, struct in6_multi **pinm, in in6_mc_join() argument
1266 if (imf == NULL) { in in6_mc_join()
1268 imf = &timf; in in6_mc_join()
1280 error = in6m_merge(inm, imf); in in6_mc_join()
1290 im6f_rollback(imf); in in6_mc_join()
1325 in6_mc_leave(struct in6_multi *inm, /*const*/ struct in6_mfilter *imf) in in6_mc_leave() argument
1342 inm->in6m_ifp->if_unit, (uint64_t)VM_KERNEL_ADDRPERM(imf))); in in6_mc_leave()
1348 if (imf == NULL) { in in6_mc_leave()
1350 imf = &timf; in in6_mc_leave()
1362 error = in6m_merge(inm, imf); in in6_mc_leave()
1402 struct in6_mfilter *imf; in in6p_block_unblock_source() local
1487 imf = &imo->im6o_mfilters[idx]; in in6p_block_unblock_source()
1494 fmode = imf->im6f_st[0]; in in6p_block_unblock_source()
1520 ims = im6f_graft(imf, fmode, ssa); in in6p_block_unblock_source()
1526 error = im6f_prune(imf, ssa); in in6p_block_unblock_source()
1539 error = in6m_merge(inm, imf); in in6p_block_unblock_source()
1557 im6f_rollback(imf); in in6p_block_unblock_source()
1559 im6f_commit(imf); in in6p_block_unblock_source()
1562 im6f_reap(imf); in in6p_block_unblock_source()
1633 struct in6_mfilter *imf; in in6p_get_source_filters() local
1710 imf = &imo->im6o_mfilters[idx]; in in6p_get_source_filters()
1715 if (imf->im6f_st[1] == MCAST_UNDEFINED) { in in6p_get_source_filters()
1719 msfr.msfr_fmode = imf->im6f_st[1]; in in6p_get_source_filters()
1752 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in in6p_get_source_filters()
1755 lims->im6sl_st[0] != imf->im6f_st[0]) { in in6p_get_source_filters()
1972 struct in6_mfilter *imf; in in6p_join_group() local
1982 imf = NULL; in in6p_join_group()
2163 imf = &imo->im6o_mfilters[idx]; in in6p_join_group()
2170 if (imf->im6f_st[1] != MCAST_INCLUDE) { in in6p_join_group()
2213 if (imf->im6f_st[1] == MCAST_EXCLUDE) { in in6p_join_group()
2240 imf = &imo->im6o_mfilters[idx]; in in6p_join_group()
2241 VERIFY(RB_EMPTY(&imf->im6f_sources)); in in6p_join_group()
2259 im6f_init(imf, MCAST_UNDEFINED, MCAST_INCLUDE)); in in6p_join_group()
2263 lims = im6f_graft(imf, MCAST_INCLUDE, ssa); in in6p_join_group()
2274 im6f_init(imf, MCAST_UNDEFINED, MCAST_EXCLUDE); in in6p_join_group()
2284 error = in6_mc_join(ifp, &gsa->sin6_addr, imf, &inm, 0); in in6p_join_group()
2294 error = in6m_merge(inm, imf); in in6p_join_group()
2313 im6f_rollback(imf); in in6p_join_group()
2315 im6f_purge(imf); in in6p_join_group()
2317 im6f_reap(imf); in in6p_join_group()
2320 im6f_commit(imf); in in6p_join_group()
2350 struct in6_mfilter *imf; in in6p_leave_group() local
2550 imf = &imo->im6o_mfilters[idx]; in in6p_leave_group()
2565 im6f_leave(imf); in in6p_leave_group()
2567 if (imf->im6f_st[0] == MCAST_EXCLUDE) { in in6p_leave_group()
2580 error = im6f_prune(imf, ssa); in in6p_leave_group()
2598 (void) in6_mc_leave(inm, imf); in in6p_leave_group()
2602 error = in6m_merge(inm, imf); in in6p_leave_group()
2620 im6f_rollback(imf); in in6p_leave_group()
2622 im6f_commit(imf); in in6p_leave_group()
2625 im6f_reap(imf); in in6p_leave_group()
2711 struct in6_mfilter *imf; in in6p_set_source_filters() local
2798 imf = &imo->im6o_mfilters[idx]; in in6p_set_source_filters()
2804 imf->im6f_st[1] = (uint8_t)msfr.msfr_fmode; in in6p_set_source_filters()
2844 im6f_leave(imf); in in6p_set_source_filters()
2845 imf->im6f_st[1] = (uint8_t)msfr.msfr_fmode; in in6p_set_source_filters()
2878 error = im6f_get_source(imf, psin, &lims); in in6p_set_source_filters()
2882 lims->im6sl_st[1] = imf->im6f_st[1]; in in6p_set_source_filters()
2896 error = in6m_merge(inm, imf); in in6p_set_source_filters()
2914 im6f_rollback(imf); in in6p_set_source_filters()
2916 im6f_commit(imf); in in6p_set_source_filters()
2919 im6f_reap(imf); in in6p_set_source_filters()