Lines Matching refs:imf

112 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()
404 struct in_mfilter *imf; in imo_match_source() local
416 imf = &imo->imo_mfilters[gidx]; in imo_match_source()
420 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imo_match_source()
755 imf_get_source(struct in_mfilter *imf, const struct sockaddr_in *psin, in imf_get_source() argument
769 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imf_get_source()
772 if (imf->imf_nsrc == in_mcast_maxsocksrc) { in imf_get_source()
778 RB_INSERT(ip_msource_tree, &imf->imf_sources, in imf_get_source()
780 ++imf->imf_nsrc; in imf_get_source()
799 imf_graft(struct in_mfilter *imf, const uint8_t st1, in imf_graft() argument
812 RB_INSERT(ip_msource_tree, &imf->imf_sources, in imf_graft()
814 ++imf->imf_nsrc; in imf_graft()
830 imf_prune(struct in_mfilter *imf, const struct sockaddr_in *psin) in imf_prune() argument
838 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find); in imf_prune()
853 imf_rollback(struct in_mfilter *imf) in imf_rollback() argument
858 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_rollback()
870 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_rollback()
872 imf->imf_nsrc--; in imf_rollback()
875 imf->imf_st[1] = imf->imf_st[0]; in imf_rollback()
884 imf_leave(struct in_mfilter *imf) in imf_leave() argument
889 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in imf_leave()
893 imf->imf_st[1] = MCAST_INCLUDE; in imf_leave()
902 imf_commit(struct in_mfilter *imf) in imf_commit() argument
907 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in imf_commit()
911 imf->imf_st[0] = imf->imf_st[1]; in imf_commit()
920 imf_reap(struct in_mfilter *imf) in imf_reap() argument
925 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_reap()
931 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_reap()
933 imf->imf_nsrc--; in imf_reap()
944 imf_purge(struct in_mfilter *imf) in imf_purge() argument
949 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) { in imf_purge()
953 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims); in imf_purge()
955 imf->imf_nsrc--; in imf_purge()
957 imf->imf_st[0] = imf->imf_st[1] = MCAST_UNDEFINED; in imf_purge()
958 VERIFY(RB_EMPTY(&imf->imf_sources)); in imf_purge()
1085 inm_merge(struct in_multi *inm, /*const*/ struct in_mfilter *imf) in inm_merge() argument
1105 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in inm_merge()
1107 if (lims->imsl_st[0] == imf->imf_st[0]) { in inm_merge()
1110 if (lims->imsl_st[1] == imf->imf_st[1]) { in inm_merge()
1144 if (imf->imf_st[0] == imf->imf_st[1] && in inm_merge()
1145 imf->imf_st[1] == MCAST_INCLUDE) { in inm_merge()
1153 if (imf->imf_st[0] != imf->imf_st[1]) { in inm_merge()
1155 __func__, imf->imf_st[0], imf->imf_st[1])); in inm_merge()
1157 if (imf->imf_st[0] == MCAST_EXCLUDE) { in inm_merge()
1160 } else if (imf->imf_st[0] == MCAST_INCLUDE) { in inm_merge()
1165 if (imf->imf_st[1] == MCAST_EXCLUDE) { in inm_merge()
1168 } else if (imf->imf_st[1] == MCAST_INCLUDE && nsrc1 > 0) { in inm_merge()
1194 if (imf->imf_st[0] == MCAST_EXCLUDE && nsrc0 == 0) { in inm_merge()
1195 if ((imf->imf_st[1] != MCAST_EXCLUDE) || in inm_merge()
1196 (imf->imf_st[1] == MCAST_EXCLUDE && nsrc1 > 0)) { in inm_merge()
1203 if (imf->imf_st[1] == MCAST_EXCLUDE && nsrc1 == 0) { in inm_merge()
1209 (uint64_t)VM_KERNEL_ADDRPERM(imf), in inm_merge()
1297 /*const*/ struct in_mfilter *imf, struct in_multi **pinm) in in_joingroup() argument
1314 if (imf == NULL) { in in_joingroup()
1316 imf = &timf; in in_joingroup()
1328 error = inm_merge(inm, imf); in in_joingroup()
1338 imf_rollback(imf); in in_joingroup()
1369 in_leavegroup(struct in_multi *inm, /*const*/ struct in_mfilter *imf) in in_leavegroup() argument
1387 inm->inm_ifp->if_unit, (uint64_t)VM_KERNEL_ADDRPERM(imf))); in in_leavegroup()
1393 if (imf == NULL) { in in_leavegroup()
1395 imf = &timf; in in_leavegroup()
1407 error = inm_merge(inm, imf); in in_leavegroup()
1477 struct in_mfilter *imf; in inp_block_unblock_source() local
1593 imf = &imo->imo_mfilters[idx]; in inp_block_unblock_source()
1600 fmode = imf->imf_st[0]; in inp_block_unblock_source()
1626 ims = imf_graft(imf, fmode, ssa); in inp_block_unblock_source()
1632 error = imf_prune(imf, ssa); in inp_block_unblock_source()
1645 error = inm_merge(inm, imf); in inp_block_unblock_source()
1663 imf_rollback(imf); in inp_block_unblock_source()
1665 imf_commit(imf); in inp_block_unblock_source()
1668 imf_reap(imf); in inp_block_unblock_source()
1741 struct in_mfilter *imf; in inp_get_source_filters() local
1810 imf = &imo->imo_mfilters[idx]; in inp_get_source_filters()
1815 if (imf->imf_st[1] == MCAST_UNDEFINED) { in inp_get_source_filters()
1819 msfr.msfr_fmode = imf->imf_st[1]; in inp_get_source_filters()
1852 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) { in inp_get_source_filters()
1855 lims->imsl_st[0] != imf->imf_st[0]) { in inp_get_source_filters()
2107 struct in_mfilter *imf; in inp_join_group() local
2117 imf = NULL; in inp_join_group()
2253 imf = &imo->imo_mfilters[idx]; in inp_join_group()
2260 if (imf->imf_st[1] != MCAST_INCLUDE) { in inp_join_group()
2303 if (imf->imf_st[1] == MCAST_EXCLUDE) { in inp_join_group()
2330 imf = &imo->imo_mfilters[idx]; in inp_join_group()
2331 VERIFY(RB_EMPTY(&imf->imf_sources)); in inp_join_group()
2344 imf_init(imf, MCAST_UNDEFINED, MCAST_INCLUDE); in inp_join_group()
2348 lims = imf_graft(imf, MCAST_INCLUDE, ssa); in inp_join_group()
2359 imf_init(imf, MCAST_UNDEFINED, MCAST_EXCLUDE); in inp_join_group()
2368 error = in_joingroup(ifp, &gsa->sin_addr, imf, &inm); in inp_join_group()
2378 error = inm_merge(inm, imf); in inp_join_group()
2397 imf_rollback(imf); in inp_join_group()
2399 imf_purge(imf); in inp_join_group()
2401 imf_reap(imf); in inp_join_group()
2404 imf_commit(imf); in inp_join_group()
2437 struct in_mfilter *imf; in inp_leave_group() local
2574 imf = &imo->imo_mfilters[idx]; in inp_leave_group()
2591 imf_leave(imf); in inp_leave_group()
2593 if (imf->imf_st[0] == MCAST_EXCLUDE) { in inp_leave_group()
2606 error = imf_prune(imf, ssa); in inp_leave_group()
2623 (void) in_leavegroup(inm, imf); in inp_leave_group()
2627 error = inm_merge(inm, imf); in inp_leave_group()
2645 imf_rollback(imf); in inp_leave_group()
2647 imf_commit(imf); in inp_leave_group()
2650 imf_reap(imf); in inp_leave_group()
2781 struct in_mfilter *imf; in inp_set_source_filters() local
2866 imf = &imo->imo_mfilters[idx]; in inp_set_source_filters()
2872 imf->imf_st[1] = (uint8_t)msfr.msfr_fmode; in inp_set_source_filters()
2911 imf_leave(imf); in inp_set_source_filters()
2912 imf->imf_st[1] = (uint8_t)msfr.msfr_fmode; in inp_set_source_filters()
2936 error = imf_get_source(imf, psin, &lims); in inp_set_source_filters()
2940 lims->imsl_st[1] = imf->imf_st[1]; in inp_set_source_filters()
2954 error = inm_merge(inm, imf); in inp_set_source_filters()
2972 imf_rollback(imf); in inp_set_source_filters()
2974 imf_commit(imf); in inp_set_source_filters()
2977 imf_reap(imf); in inp_set_source_filters()