Lines Matching refs:ims

135 static void	ims_merge(struct ip_msource *ims,
388 struct ip_msource *ims;
404 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
406 return ((struct in_msource *)ims);
420 struct in_msource *ims;
440 ims = imo_match_source(imo, gidx, src);
442 if ((ims == NULL && mode == MCAST_INCLUDE) ||
443 (ims != NULL && ims->imsl_st[0] != mode)) {
676 struct ip_msource *ims;
680 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
681 if (ims->ims_stp) {
682 ims->ims_stp = 0;
711 struct ip_msource *ims, *nims;
716 ims = RB_FIND(ip_msource_tree, &inm->inm_srcs, &find);
717 if (ims && ims->ims_stp)
719 if (ims == NULL) {
728 ims = nims;
735 ++ims->ims_stp;
757 struct ip_msource *ims;
762 ims = NULL;
767 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
768 lims = (struct in_msource *)ims;
830 struct ip_msource *ims;
835 ims = RB_FIND(ip_msource_tree, &imf->imf_sources, &find);
836 if (ims == NULL)
838 lims = (struct in_msource *)ims;
851 struct ip_msource *ims, *tims;
854 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
855 lims = (struct in_msource *)ims;
865 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
881 struct ip_msource *ims;
884 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
885 lims = (struct in_msource *)ims;
899 struct ip_msource *ims;
902 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
903 lims = (struct in_msource *)ims;
917 struct ip_msource *ims, *tims;
920 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
921 lims = (struct in_msource *)ims;
925 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
940 struct ip_msource *ims, *tims;
943 RB_FOREACH_SAFE(ims, ip_msource_tree, &imf->imf_sources, tims) {
944 lims = (struct in_msource *)ims;
946 RB_REMOVE(ip_msource_tree, &imf->imf_sources, ims);
969 struct ip_msource *ims, *nims;
976 ims = RB_FIND(ip_msource_tree, &inm->inm_srcs, &find);
977 if (ims == NULL && !noalloc) {
986 ims = nims;
990 inet_ntoa(ia), ims));
994 *pims = ims;
1007 ims_get_mode(const struct in_multi *inm, const struct ip_msource *ims,
1014 inm->inm_st[t].iss_ex == ims->ims_st[t].ex)
1016 else if (ims->ims_st[t].in > 0 && ims->ims_st[t].ex == 0)
1026 ims_merge(struct ip_msource *ims, const struct in_msource *lims,
1033 ia.s_addr = htonl(ims->ims_haddr);
1039 ims->ims_st[1].ex -= n;
1043 ims->ims_st[1].in -= n;
1049 ims->ims_st[1].ex += n;
1053 ims->ims_st[1].in += n;
1065 * which would eliminate the repeated lookup from root of ims nodes,
1074 struct ip_msource *ims, *nims;
1092 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
1093 lims = (struct in_msource *)ims;
1106 RB_FOREACH_REVERSE_FROM(ims, ip_msource_tree, nims) {
1107 lims = (struct in_msource *)ims;
1204 struct ip_msource *ims;
1212 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
1213 ims->ims_st[0] = ims->ims_st[1];
1224 struct ip_msource *ims, *tims;
1228 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, tims) {
1229 if (ims->ims_st[0].ex > 0 || ims->ims_st[0].in > 0 ||
1230 ims->ims_st[1].ex > 0 || ims->ims_st[1].in > 0 ||
1231 ims->ims_stp != 0)
1233 IGMP_PRINTF(("%s: free ims %p\n", __func__, ims));
1234 RB_REMOVE(ip_msource_tree, &inm->inm_srcs, ims);
1235 ipms_free(ims);
1246 struct ip_msource *ims, *tims;
1250 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, tims) {
1251 IGMP_PRINTF(("%s: free ims %p\n", __func__, ims));
1252 RB_REMOVE(ip_msource_tree, &inm->inm_srcs, ims);
1253 ipms_free(ims);
1438 struct in_msource *ims;
1560 ims = imo_match_source(imo, idx, &ssa->sa);
1561 if ((ims != NULL && doblock) || (ims == NULL && !doblock)) {
1573 ims = imf_graft(imf, fmode, &ssa->sin);
1574 if (ims == NULL)
1689 struct ip_msource *ims;
1790 RB_FOREACH(ims, ip_msource_tree, &imf->imf_sources) {
1791 lims = (struct in_msource *)ims;
2357 struct in_msource *ims;
2501 ims = imo_match_source(imo, idx, &ssa->sa);
2502 if (ims == NULL) {
3106 struct ip_msource *ims;
3161 RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) {
3164 ina.s_addr = htonl(ims->ims_haddr);
3171 if (fmode != ims_get_mode(inm, ims, 1)) {
3176 src.s_addr = htonl(ims->ims_haddr);
3551 struct ip_msource *ims;
3553 ims = (how == M_WAITOK) ? zalloc(ipms_zone) : zalloc_noblock(ipms_zone);
3554 if (ims != NULL)
3555 bzero(ims, ipms_size);
3557 return (ims);
3561 ipms_free(struct ip_msource *ims)
3563 zfree(ipms_zone, ims);