Lines Matching refs:imf
110 static int imf_get_source(struct in_mfilter *imf,
254 imf_init(struct in_mfilter *imf, const uint8_t st0, const uint8_t st1) in imf_init() argument
256 memset(imf, 0, sizeof(struct in_mfilter)); in imf_init()
257 RB_INIT(&imf->imf_sources); in imf_init()
258 imf->imf_st[0] = st0; in imf_init()
259 imf->imf_st[1] = st1; in imf_init()
402 struct in_mfilter *imf; in imo_match_source() local
414 imf = &imo->imo_mfilters[gidx]; in imo_match_source()
418 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imo_match_source()
753 imf_get_source(struct in_mfilter *imf, const struct sockaddr_in *psin, in imf_get_source() argument
767 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imf_get_source()
770 if (imf->imf_nsrc == in_mcast_maxsocksrc) { in imf_get_source()
776 RB_INSERT(ip_msource_tree, &imf->imf_sources, in imf_get_source()
778 ++imf->imf_nsrc; in imf_get_source()
797 imf_graft(struct in_mfilter *imf, const uint8_t st1, in imf_graft() argument
806 RB_INSERT(ip_msource_tree, &imf->imf_sources, in imf_graft()
808 ++imf->imf_nsrc; in imf_graft()
824 imf_prune(struct in_mfilter *imf, const struct sockaddr_in *psin) in imf_prune() argument
832 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imf_prune()
847 imf_rollback(struct in_mfilter *imf) in imf_rollback() argument
852 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_rollback()
864 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_rollback()
866 imf->imf_nsrc--; in imf_rollback()
869 imf->imf_st[1] = imf->imf_st[0]; in imf_rollback()
878 imf_leave(struct in_mfilter *imf) in imf_leave() argument
883 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in imf_leave()
887 imf->imf_st[1] = MCAST_INCLUDE; in imf_leave()
896 imf_commit(struct in_mfilter *imf) in imf_commit() argument
901 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in imf_commit()
905 imf->imf_st[0] = imf->imf_st[1]; in imf_commit()
914 imf_reap(struct in_mfilter *imf) in imf_reap() argument
919 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_reap()
925 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_reap()
927 imf->imf_nsrc--; in imf_reap()
938 imf_purge(struct in_mfilter *imf) in imf_purge() argument
943 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_purge()
947 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_purge()
949 imf->imf_nsrc--; in imf_purge()
951 imf->imf_st[0] = imf->imf_st[1] = MCAST_UNDEFINED; in imf_purge()
952 VERIFY(RB_EMPTY(&imf->imf_sources)); in imf_purge()
1079 inm_merge(struct in_multi *inm, /*const*/ struct in_mfilter *imf) in inm_merge() argument
1099 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in inm_merge()
1101 if (lims->imsl_st[0] == imf->imf_st[0]) { in inm_merge()
1104 if (lims->imsl_st[1] == imf->imf_st[1]) { in inm_merge()
1138 if (imf->imf_st[0] == imf->imf_st[1] && in inm_merge()
1139 imf->imf_st[1] == MCAST_INCLUDE) { in inm_merge()
1147 if (imf->imf_st[0] != imf->imf_st[1]) { in inm_merge()
1149 __func__, imf->imf_st[0], imf->imf_st[1])); in inm_merge()
1151 if (imf->imf_st[0] == MCAST_EXCLUDE) { in inm_merge()
1154 } else if (imf->imf_st[0] == MCAST_INCLUDE) { in inm_merge()
1159 if (imf->imf_st[1] == MCAST_EXCLUDE) { in inm_merge()
1162 } else if (imf->imf_st[1] == MCAST_INCLUDE && nsrc1 > 0) { in inm_merge()
1188 if (imf->imf_st[0] == MCAST_EXCLUDE && nsrc0 == 0) { in inm_merge()
1189 if ((imf->imf_st[1] != MCAST_EXCLUDE) || in inm_merge()
1190 (imf->imf_st[1] == MCAST_EXCLUDE && nsrc1 > 0)) { in inm_merge()
1197 if (imf->imf_st[1] == MCAST_EXCLUDE && nsrc1 == 0) { in inm_merge()
1203 (uint64_t)VM_KERNEL_ADDRPERM(imf), in inm_merge()
1291 /*const*/ struct in_mfilter *imf, struct in_multi **pinm) in in_joingroup() argument
1308 if (imf == NULL) { in in_joingroup()
1310 imf = &timf; in in_joingroup()
1322 error = inm_merge(inm, imf); in in_joingroup()
1332 imf_rollback(imf); in in_joingroup()
1363 in_leavegroup(struct in_multi *inm, /*const*/ struct in_mfilter *imf) in in_leavegroup() argument
1381 inm->inm_ifp->if_unit, (uint64_t)VM_KERNEL_ADDRPERM(imf))); in in_leavegroup()
1387 if (imf == NULL) { in in_leavegroup()
1389 imf = &timf; in in_leavegroup()
1401 error = inm_merge(inm, imf); in in_leavegroup()
1471 struct in_mfilter *imf; in inp_block_unblock_source() local
1588 imf = &imo->imo_mfilters[idx]; in inp_block_unblock_source()
1595 fmode = imf->imf_st[0]; in inp_block_unblock_source()
1621 ims = imf_graft(imf, fmode, ssa); in inp_block_unblock_source()
1627 error = imf_prune(imf, ssa); in inp_block_unblock_source()
1640 error = inm_merge(inm, imf); in inp_block_unblock_source()
1658 imf_rollback(imf); in inp_block_unblock_source()
1660 imf_commit(imf); in inp_block_unblock_source()
1663 imf_reap(imf); in inp_block_unblock_source()
1735 struct in_mfilter *imf; in inp_get_source_filters() local
1804 imf = &imo->imo_mfilters[idx]; in inp_get_source_filters()
1809 if (imf->imf_st[1] == MCAST_UNDEFINED) { in inp_get_source_filters()
1813 msfr.msfr_fmode = imf->imf_st[1]; in inp_get_source_filters()
1846 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in inp_get_source_filters()
1849 lims->imsl_st[0] != imf->imf_st[0]) { in inp_get_source_filters()
2101 struct in_mfilter *imf; in inp_join_group() local
2111 imf = NULL; in inp_join_group()
2248 imf = &imo->imo_mfilters[idx]; in inp_join_group()
2255 if (imf->imf_st[1] != MCAST_INCLUDE) { in inp_join_group()
2298 if (imf->imf_st[1] == MCAST_EXCLUDE) { in inp_join_group()
2325 imf = &imo->imo_mfilters[idx]; in inp_join_group()
2326 VERIFY(RB_EMPTY(&imf->imf_sources)); in inp_join_group()
2339 imf_init(imf, MCAST_UNDEFINED, MCAST_INCLUDE); in inp_join_group()
2343 lims = imf_graft(imf, MCAST_INCLUDE, ssa); in inp_join_group()
2354 imf_init(imf, MCAST_UNDEFINED, MCAST_EXCLUDE); in inp_join_group()
2363 error = in_joingroup(ifp, &gsa->sin_addr, imf, &inm); in inp_join_group()
2373 error = inm_merge(inm, imf); in inp_join_group()
2392 imf_rollback(imf); in inp_join_group()
2394 imf_purge(imf); in inp_join_group()
2396 imf_reap(imf); in inp_join_group()
2399 imf_commit(imf); in inp_join_group()
2432 struct in_mfilter *imf; in inp_leave_group() local
2569 imf = &imo->imo_mfilters[idx]; in inp_leave_group()
2586 imf_leave(imf); in inp_leave_group()
2588 if (imf->imf_st[0] == MCAST_EXCLUDE) { in inp_leave_group()
2601 error = imf_prune(imf, ssa); in inp_leave_group()
2618 (void) in_leavegroup(inm, imf); in inp_leave_group()
2622 error = inm_merge(inm, imf); in inp_leave_group()
2640 imf_rollback(imf); in inp_leave_group()
2642 imf_commit(imf); in inp_leave_group()
2645 imf_reap(imf); in inp_leave_group()
2776 struct in_mfilter *imf; in inp_set_source_filters() local
2861 imf = &imo->imo_mfilters[idx]; in inp_set_source_filters()
2867 imf->imf_st[1] = (uint8_t)msfr.msfr_fmode; in inp_set_source_filters()
2906 imf_leave(imf); in inp_set_source_filters()
2907 imf->imf_st[1] = (uint8_t)msfr.msfr_fmode; in inp_set_source_filters()
2931 error = imf_get_source(imf, psin, &lims); in inp_set_source_filters()
2935 lims->imsl_st[1] = imf->imf_st[1]; in inp_set_source_filters()
2949 error = inm_merge(inm, imf); in inp_set_source_filters()
2967 imf_rollback(imf); in inp_set_source_filters()
2969 imf_commit(imf); in inp_set_source_filters()
2972 imf_reap(imf); in inp_set_source_filters()