Lines Matching refs:ims
116 static void im6s_merge(struct ip6_msource *ims,
378 struct ip6_msource *ims; in im6o_match_source() local
395 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6o_match_source()
397 return (struct in6_msource *)ims; in im6o_match_source()
411 struct in6_msource *ims; in im6o_mc_filter() local
436 ims = im6o_match_source(imo, gidx, src); in im6o_mc_filter()
438 if ((ims == NULL && mode == MCAST_INCLUDE) || in im6o_mc_filter()
439 (ims != NULL && ims->im6sl_st[0] != mode)) { in im6o_mc_filter()
594 struct ip6_msource *ims; in in6m_clear_recorded() local
598 RB_FOREACH(ims, ip6_msource_tree, &inm->in6m_srcs) { in in6m_clear_recorded()
599 if (ims->im6s_stp) { in in6m_clear_recorded()
600 ims->im6s_stp = 0; in in6m_clear_recorded()
633 struct ip6_msource *ims, *nims; in in6m_record_source() local
638 ims = RB_FIND(ip6_msource_tree, &inm->in6m_srcs, &find); in in6m_record_source()
639 if (ims && ims->im6s_stp) { in in6m_record_source()
642 if (ims == NULL) { in in6m_record_source()
650 ims = nims; in in6m_record_source()
657 ++ims->im6s_stp; in in6m_record_source()
679 struct ip6_msource *ims; in im6f_get_source() local
684 ims = NULL; in im6f_get_source()
688 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6f_get_source()
689 lims = (struct in6_msource *)ims; in im6f_get_source()
748 struct ip6_msource *ims; in im6f_prune() local
752 ims = RB_FIND(ip6_msource_tree, &imf->im6f_sources, &find); in im6f_prune()
753 if (ims == NULL) { in im6f_prune()
756 lims = (struct in6_msource *)ims; in im6f_prune()
769 struct ip6_msource *ims, *tims; in im6f_rollback() local
772 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_rollback()
773 lims = (struct in6_msource *)ims; in im6f_rollback()
784 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_rollback()
800 struct ip6_msource *ims; in im6f_leave() local
803 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in im6f_leave()
804 lims = (struct in6_msource *)ims; in im6f_leave()
818 struct ip6_msource *ims; in im6f_commit() local
821 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in im6f_commit()
822 lims = (struct in6_msource *)ims; in im6f_commit()
836 struct ip6_msource *ims, *tims; in im6f_reap() local
839 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_reap()
840 lims = (struct in6_msource *)ims; in im6f_reap()
845 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_reap()
860 struct ip6_msource *ims, *tims; in im6f_purge() local
863 RB_FOREACH_SAFE(ims, ip6_msource_tree, &imf->im6f_sources, tims) { in im6f_purge()
864 lims = (struct in6_msource *)ims; in im6f_purge()
867 RB_REMOVE(ip6_msource_tree, &imf->im6f_sources, ims); in im6f_purge()
890 struct ip6_msource *ims, *nims; in in6m_get_source() local
895 ims = RB_FIND(ip6_msource_tree, &inm->in6m_srcs, &find); in in6m_get_source()
896 if (ims == NULL && !noalloc) { in in6m_get_source()
904 ims = nims; in in6m_get_source()
906 ip6_sprintf(addr), (uint64_t)VM_KERNEL_ADDRPERM(ims))); in in6m_get_source()
909 *pims = ims; in in6m_get_source()
922 im6s_get_mode(const struct in6_multi *inm, const struct ip6_msource *ims, in im6s_get_mode() argument
929 inm->in6m_st[t].iss_ex == ims->im6s_st[t].ex) { in im6s_get_mode()
931 } else if (ims->im6s_st[t].in > 0 && ims->im6s_st[t].ex == 0) { in im6s_get_mode()
942 im6s_merge(struct ip6_msource *ims, const struct in6_msource *lims, in im6s_merge() argument
950 ims->im6s_st[1].ex -= n; in im6s_merge()
954 ims->im6s_st[1].in -= n; in im6s_merge()
960 ims->im6s_st[1].ex += n; in im6s_merge()
964 ims->im6s_st[1].in += n; in im6s_merge()
985 struct ip6_msource *ims, *nims = NULL; in in6m_merge() local
1003 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in in6m_merge()
1004 lims = (struct in6_msource *)ims; in in6m_merge()
1024 RB_FOREACH_REVERSE_FROM(ims, ip6_msource_tree, nims) { in in6m_merge()
1025 lims = (struct in6_msource *)ims; in in6m_merge()
1126 struct ip6_msource *ims; in in6m_commit() local
1135 RB_FOREACH(ims, ip6_msource_tree, &inm->in6m_srcs) { in in6m_commit()
1136 ims->im6s_st[0] = ims->im6s_st[1]; in in6m_commit()
1147 struct ip6_msource *ims, *tims; in in6m_reap() local
1151 RB_FOREACH_SAFE(ims, ip6_msource_tree, &inm->in6m_srcs, tims) { in in6m_reap()
1152 if (ims->im6s_st[0].ex > 0 || ims->im6s_st[0].in > 0 || in in6m_reap()
1153 ims->im6s_st[1].ex > 0 || ims->im6s_st[1].in > 0 || in in6m_reap()
1154 ims->im6s_stp != 0) { in in6m_reap()
1158 (uint64_t)VM_KERNEL_ADDRPERM(ims))); in in6m_reap()
1159 RB_REMOVE(ip6_msource_tree, &inm->in6m_srcs, ims); in in6m_reap()
1160 ip6ms_free(ims); in in6m_reap()
1171 struct ip6_msource *ims, *tims; in in6m_purge() local
1175 RB_FOREACH_SAFE(ims, ip6_msource_tree, &inm->in6m_srcs, tims) { in in6m_purge()
1177 (uint64_t)VM_KERNEL_ADDRPERM(ims))); in in6m_purge()
1178 RB_REMOVE(ip6_msource_tree, &inm->in6m_srcs, ims); in in6m_purge()
1179 ip6ms_free(ims); in in6m_purge()
1404 struct in6_msource *ims; in in6p_block_unblock_source() local
1506 ims = im6o_match_source(imo, idx, ssa); in in6p_block_unblock_source()
1507 if ((ims != NULL && doblock) || (ims == NULL && !doblock)) { in in6p_block_unblock_source()
1520 ims = im6f_graft(imf, fmode, ssa); in in6p_block_unblock_source()
1521 if (ims == NULL) { in in6p_block_unblock_source()
1634 struct ip6_msource *ims; in in6p_get_source_filters() local
1752 RB_FOREACH(ims, ip6_msource_tree, &imf->im6f_sources) { in in6p_get_source_filters()
1753 lims = (struct in6_msource *)ims; in in6p_get_source_filters()
2352 struct in6_msource *ims; in in6p_leave_group() local
2571 ims = im6o_match_source(imo, idx, ssa); in in6p_leave_group()
2572 if (ims == NULL) { in in6p_leave_group()
3069 struct ip6_msource *ims; variable
3134 RB_FOREACH(ims, ip6_msource_tree, &inm->in6m_srcs) {
3136 (uint64_t)VM_KERNEL_ADDRPERM(ims)));
3140 if (fmode != im6s_get_mode(inm, ims, 1)) {
3145 src = ims->im6s_addr;