Lines Matching refs:ims

135 static void	ims_merge(struct ip_msource *ims,
385 struct ip_msource *ims;
401 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
403 return ((struct in_msource *)ims);
417 struct in_msource *ims;
437 ims = imo_match_source(imo, gidx, src);
439 if ((ims == NULL && mode == MCAST_INCLUDE) ||
440 (ims != NULL && ims->imsl_st[0] != mode)) {
673 struct ip_msource *ims;
677 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
678 if (ims->ims_stp) {
679 ims->ims_stp = 0;
708 struct ip_msource *ims, *nims;
713 ims = RB_FIND(ip_msource_tree, &inm->inm_srcs, &find);
714 if (ims && ims->ims_stp)
716 if (ims == NULL) {
725 ims = nims;
732 ++ims->ims_stp;
754 struct ip_msource *ims;
759 ims = NULL;
764 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
765 lims = (struct in_msource *)ims;
827 struct ip_msource *ims;
832 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
833 if (ims == NULL)
835 lims = (struct in_msource *)ims;
848 struct ip_msource *ims, *tims;
851 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
852 lims = (struct in_msource *)ims;
863 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
879 struct ip_msource *ims;
882 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
883 lims = (struct in_msource *)ims;
897 struct ip_msource *ims;
900 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
901 lims = (struct in_msource *)ims;
915 struct ip_msource *ims, *tims;
918 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
919 lims = (struct in_msource *)ims;
924 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
939 struct ip_msource *ims, *tims;
942 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
943 lims = (struct in_msource *)ims;
946 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
969 struct ip_msource *ims, *nims;
977 ims = RB_FIND(ip_msource_tree, &inm->inm_srcs, &find);
978 if (ims == NULL && !noalloc) {
987 ims = nims;
992 buf, (uint64_t)VM_KERNEL_ADDRPERM(ims)));
996 *pims = ims;
1009 ims_get_mode(const struct in_multi *inm, const struct ip_msource *ims,
1016 inm->inm_st[t].iss_ex == ims->ims_st[t].ex)
1018 else if (ims->ims_st[t].in > 0 && ims->ims_st[t].ex == 0)
1028 ims_merge(struct ip_msource *ims, const struct in_msource *lims,
1035 ia.s_addr = htonl(ims->ims_haddr);
1042 ims->ims_st[1].ex -= n;
1047 ims->ims_st[1].in -= n;
1054 ims->ims_st[1].ex += n;
1059 ims->ims_st[1].in += n;
1071 * which would eliminate the repeated lookup from root of ims nodes,
1080 struct ip_msource *ims, *nims;
1098 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
1099 lims = (struct in_msource *)ims;
1112 RB_FOREACH_REVERSE_FROM(ims, ip_msource_tree, nims) {
1113 lims = (struct in_msource *)ims;
1212 struct ip_msource *ims;
1221 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
1222 ims->ims_st[0] = ims->ims_st[1];
1233 struct ip_msource *ims, *tims;
1237 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, tims) {
1238 if (ims->ims_st[0].ex > 0 || ims->ims_st[0].in > 0 ||
1239 ims->ims_st[1].ex > 0 || ims->ims_st[1].in > 0 ||
1240 ims->ims_stp != 0)
1242 IGMP_PRINTF(("%s: free ims 0x%llx\n", __func__,
1243 (uint64_t)VM_KERNEL_ADDRPERM(ims)));
1244 RB_REMOVE(ip_msource_tree, &inm->inm_srcs, ims);
1245 ipms_free(ims);
1256 struct ip_msource *ims, *tims;
1260 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, tims) {
1261 IGMP_PRINTF(("%s: free ims 0x%llx\n", __func__,
1262 (uint64_t)VM_KERNEL_ADDRPERM(ims)));
1263 RB_REMOVE(ip_msource_tree, &inm->inm_srcs, ims);
1264 ipms_free(ims);
1462 struct in_msource *ims;
1587 ims = imo_match_source(imo, idx, &ssa->sa);
1588 if ((ims != NULL && doblock) || (ims == NULL && !doblock)) {
1601 ims = imf_graft(imf, fmode, &ssa->sin);
1602 if (ims == NULL)
1721 struct ip_msource *ims;
1822 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
1823 lims = (struct in_msource *)ims;
2384 struct in_msource *ims;
2531 ims = imo_match_source(imo, idx, &ssa->sa);
2532 if (ims == NULL) {
3116 struct ip_msource *ims;
3172 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
3175 ina.s_addr = htonl(ims->ims_haddr);
3182 if (fmode != ims_get_mode(inm, ims, 1)) {
3187 src.s_addr = htonl(ims->ims_haddr);
3562 struct ip_msource *ims;
3564 ims = (how == M_WAITOK) ? zalloc(ipms_zone) : zalloc_noblock(ipms_zone);
3565 if (ims != NULL)
3566 bzero(ims, ipms_size);
3568 return (ims);
3572 ipms_free(struct ip_msource *ims)
3574 zfree(ipms_zone, ims);