Lines Matching refs:inm
861 struct in_multi *inm; in igmp_input_v1_query() local
906 IN_FIRST_MULTI(step, inm); in igmp_input_v1_query()
907 while (inm != NULL) { in igmp_input_v1_query()
908 INM_LOCK(inm); in igmp_input_v1_query()
909 if (inm->inm_ifp != ifp || inm->inm_timer != 0) { in igmp_input_v1_query()
913 switch (inm->inm_state) { in igmp_input_v1_query()
924 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_input_v1_query()
925 inm->inm_timer = IGMP_RANDOM_DELAY(IGMP_V1V2_MAX_RI); in igmp_input_v1_query()
932 INM_UNLOCK(inm); in igmp_input_v1_query()
933 IN_NEXT_MULTI(step, inm); in igmp_input_v1_query()
950 struct in_multi *inm; in igmp_input_v2_query() local
1013 IN_FIRST_MULTI(step, inm); in igmp_input_v2_query()
1014 while (inm != NULL) { in igmp_input_v2_query()
1015 INM_LOCK(inm); in igmp_input_v2_query()
1016 if (inm->inm_ifp == ifp) { in igmp_input_v2_query()
1017 itp.cst += igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1019 INM_UNLOCK(inm); in igmp_input_v2_query()
1020 IN_NEXT_MULTI(step, inm); in igmp_input_v2_query()
1029 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v2_query()
1031 if (inm != NULL) { in igmp_input_v2_query()
1032 INM_LOCK(inm); in igmp_input_v2_query()
1037 itp.cst = igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1038 INM_UNLOCK(inm); in igmp_input_v2_query()
1039 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v2_query()
1064 igmp_v2_update_group(struct in_multi *inm, const int timer) in igmp_v2_update_group() argument
1066 IGMP_INET_PRINTF(inm->inm_addr, ("%s: %s/%s timer=%d\n", in igmp_v2_update_group()
1067 __func__, _igmp_inet_buf, if_name(inm->inm_ifp), in igmp_v2_update_group()
1070 INM_LOCK_ASSERT_HELD(inm); in igmp_v2_update_group()
1072 switch (inm->inm_state) { in igmp_v2_update_group()
1077 if (inm->inm_timer != 0 && in igmp_v2_update_group()
1078 inm->inm_timer <= timer) { in igmp_v2_update_group()
1090 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v2_update_group()
1091 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_v2_update_group()
1095 inm->inm_state = IGMP_AWAKENING_MEMBER; in igmp_v2_update_group()
1101 return inm->inm_timer; in igmp_v2_update_group()
1115 struct in_multi *inm; in igmp_input_v3_query() local
1247 IN_LOOKUP_MULTI(&igmpv3->igmp_group, ifp, inm); in igmp_input_v3_query()
1249 if (inm == NULL) { in igmp_input_v3_query()
1253 INM_LOCK(inm); in igmp_input_v3_query()
1255 if (!ratecheck(&inm->inm_lastgsrtv, in igmp_input_v3_query()
1260 INM_UNLOCK(inm); in igmp_input_v3_query()
1261 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1279 (void) igmp_input_v3_group_query(inm, timer, igmpv3); in igmp_input_v3_query()
1280 itp.cst = inm->inm_timer; in igmp_input_v3_query()
1282 INM_UNLOCK(inm); in igmp_input_v3_query()
1283 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1302 igmp_input_v3_group_query(struct in_multi *inm, in igmp_input_v3_group_query() argument
1308 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v3_group_query()
1312 switch (inm->inm_state) { in igmp_input_v3_group_query()
1336 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER || in igmp_input_v3_group_query()
1337 inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1338 inm_clear_recorded(inm); in igmp_input_v3_group_query()
1339 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1341 inm->inm_state = IGMP_G_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1342 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1350 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1351 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1352 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1370 if (inm->inm_nsrc > 0) { in igmp_input_v3_group_query()
1377 retval = inm_record_source(inm, ap->s_addr); in igmp_input_v3_group_query()
1386 inm->inm_state = IGMP_SG_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1387 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1404 struct in_multi *inm; in igmp_input_v1_report() local
1448 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v1_report()
1450 if (inm != NULL) { in igmp_input_v1_report()
1453 INM_LOCK(inm); in igmp_input_v1_report()
1455 igi = inm->inm_igi; in igmp_input_v1_report()
1469 igmp_v3_suppress_group_record(inm); in igmp_input_v1_report()
1472 INM_UNLOCK(inm); in igmp_input_v1_report()
1473 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1477 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v1_report()
1478 inm->inm_timer = 0; in igmp_input_v1_report()
1480 switch (inm->inm_state) { in igmp_input_v1_report()
1493 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1501 inm->inm_state = IGMP_LAZY_MEMBER; in igmp_input_v1_report()
1503 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1512 INM_UNLOCK(inm); in igmp_input_v1_report()
1513 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1529 struct in_multi *inm; in igmp_input_v2_report() local
1597 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v2_report()
1599 if (inm != NULL) { in igmp_input_v2_report()
1602 INM_LOCK(inm); in igmp_input_v2_report()
1603 igi = inm->inm_igi; in igmp_input_v2_report()
1617 igmp_v3_suppress_group_record(inm); in igmp_input_v2_report()
1620 INM_UNLOCK(inm); in igmp_input_v2_report()
1621 INM_REMREF(inm); in igmp_input_v2_report()
1625 inm->inm_timer = 0; in igmp_input_v2_report()
1627 switch (inm->inm_state) { in igmp_input_v2_report()
1641 inm->inm_state = IGMP_LAZY_MEMBER; in igmp_input_v2_report()
1649 INM_UNLOCK(inm); in igmp_input_v2_report()
1650 INM_REMREF(inm); in igmp_input_v2_report()
1931 struct in_multi *inm; in igmp_timeout() local
2031 IN_FIRST_MULTI(step, inm); in igmp_timeout()
2032 while (inm != NULL) { in igmp_timeout()
2033 INM_LOCK(inm); in igmp_timeout()
2034 if (inm->inm_ifp != ifp) { in igmp_timeout()
2042 igmp_v1v2_process_group_timer(inm, in igmp_timeout()
2047 &scq, inm, uri_sec); in igmp_timeout()
2052 INM_UNLOCK(inm); in igmp_timeout()
2053 IN_NEXT_MULTI(step, inm); in igmp_timeout()
2155 igmp_append_relq(struct igmp_ifinfo *igi, struct in_multi *inm) in igmp_append_relq() argument
2159 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_append_relq()
2162 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_append_relq()
2173 struct in_multi *inm; in igmp_flush_relq() local
2183 while ((inm = SLIST_FIRST(&igi->igi_relinmhead)) != NULL) { in igmp_flush_relq()
2185 SLIST_INSERT_HEAD(&temp_relinmhead, inm, inm_nrele); in igmp_flush_relq()
2189 while ((inm = SLIST_FIRST(&temp_relinmhead)) != NULL) { in igmp_flush_relq()
2193 INM_LOCK(inm); in igmp_flush_relq()
2194 VERIFY(inm->inm_nrelecnt != 0); in igmp_flush_relq()
2195 inm->inm_nrelecnt--; in igmp_flush_relq()
2196 lastref = in_multi_detach(inm); in igmp_flush_relq()
2197 VERIFY(!lastref || (!(inm->inm_debug & IFD_ATTACHED) && in igmp_flush_relq()
2198 inm->inm_reqcnt == 0)); in igmp_flush_relq()
2199 INM_UNLOCK(inm); in igmp_flush_relq()
2201 INM_REMREF(inm); in igmp_flush_relq()
2212 IGMP_ADD_DETACHED_INM(inm_dthead, inm); in igmp_flush_relq()
2224 igmp_v1v2_process_group_timer(struct in_multi *inm, const int igmp_version) in igmp_v1v2_process_group_timer() argument
2229 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2230 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2232 if (inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2234 } else if (--inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2242 switch (inm->inm_state) { in igmp_v1v2_process_group_timer()
2252 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_v1v2_process_group_timer()
2253 (void) igmp_v1v2_queue_report(inm, in igmp_v1v2_process_group_timer()
2257 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2258 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2276 struct in_multi *inm, const unsigned int uri_sec) in igmp_v3_process_group_timers() argument
2282 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_process_group_timers()
2284 VERIFY(igi == inm->inm_igi); in igmp_v3_process_group_timers()
2295 if (inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2297 } else if (--inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2304 if (inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2306 } else if (--inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2319 switch (inm->inm_state) { in igmp_v3_process_group_timers()
2338 retval = igmp_v3_enqueue_group_record(qrq, inm, 0, 1, in igmp_v3_process_group_timers()
2339 (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER)); in igmp_v3_process_group_timers()
2342 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_process_group_timers()
2344 inm_clear_recorded(inm); in igmp_v3_process_group_timers()
2356 if (--inm->inm_scrv > 0) { in igmp_v3_process_group_timers()
2357 inm->inm_sctimer = (uint16_t)uri_sec; in igmp_v3_process_group_timers()
2368 (void) igmp_v3_merge_state_changes(inm, scq); in igmp_v3_process_group_timers()
2370 inm_commit(inm); in igmp_v3_process_group_timers()
2371 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_process_group_timers()
2373 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_v3_process_group_timers()
2382 if (inm->inm_state == IGMP_LEAVING_MEMBER && in igmp_v3_process_group_timers()
2383 inm->inm_scrv == 0) { in igmp_v3_process_group_timers()
2384 inm->inm_state = IGMP_NOT_MEMBER; in igmp_v3_process_group_timers()
2394 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_process_group_timers()
2395 igmp_append_relq(igi, inm); in igmp_v3_process_group_timers()
2412 igmp_v3_suppress_group_record(struct in_multi *inm) in igmp_v3_suppress_group_record() argument
2414 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_suppress_group_record()
2415 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v3_suppress_group_record()
2417 VERIFY(inm->inm_igi->igi_version == IGMP_VERSION_3); in igmp_v3_suppress_group_record()
2419 if (inm->inm_state != IGMP_G_QUERY_PENDING_MEMBER && in igmp_v3_suppress_group_record()
2420 inm->inm_state != IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2424 if (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2425 inm_clear_recorded(inm); in igmp_v3_suppress_group_record()
2428 inm->inm_timer = 0; in igmp_v3_suppress_group_record()
2429 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_suppress_group_record()
2493 struct in_multi *inm; in igmp_v3_cancel_link_timers() local
2516 IN_FIRST_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2517 while (inm != NULL) { in igmp_v3_cancel_link_timers()
2518 INM_LOCK(inm); in igmp_v3_cancel_link_timers()
2519 if (inm->inm_ifp != ifp && inm->inm_igi != igi) { in igmp_v3_cancel_link_timers()
2523 switch (inm->inm_state) { in igmp_v3_cancel_link_timers()
2548 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_cancel_link_timers()
2550 igmp_append_relq(igi, inm); in igmp_v3_cancel_link_timers()
2555 inm_clear_recorded(inm); in igmp_v3_cancel_link_timers()
2558 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_cancel_link_timers()
2565 inm->inm_sctimer = 0; in igmp_v3_cancel_link_timers()
2566 inm->inm_timer = 0; in igmp_v3_cancel_link_timers()
2567 IF_DRAIN(&inm->inm_scq); in igmp_v3_cancel_link_timers()
2569 INM_UNLOCK(inm); in igmp_v3_cancel_link_timers()
2570 IN_NEXT_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2667 igmp_v1v2_queue_report(struct in_multi *inm, const int type) in igmp_v1v2_queue_report() argument
2675 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_queue_report()
2676 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_queue_report()
2678 ifp = inm->inm_ifp; in igmp_v1v2_queue_report()
2694 igmp->igmp_group = inm->inm_addr; in igmp_v1v2_queue_report()
2711 ip->ip_dst = inm->inm_addr; in igmp_v1v2_queue_report()
2717 if (inm->inm_igi->igi_flags & IGIF_LOOPBACK) { in igmp_v1v2_queue_report()
2729 if (IF_QFULL(&inm->inm_igi->igi_v2q)) { in igmp_v1v2_queue_report()
2734 IF_ENQUEUE(&inm->inm_igi->igi_v2q, m); in igmp_v1v2_queue_report()
2759 igmp_change_state(struct in_multi *inm, struct igmp_tparams *itp) in igmp_change_state() argument
2768 INM_LOCK_ASSERT_HELD(inm); in igmp_change_state()
2769 VERIFY(inm->inm_igi != NULL); in igmp_change_state()
2770 IGI_LOCK_ASSERT_NOTHELD(inm->inm_igi); in igmp_change_state()
2776 VERIFY(inm->inm_ifma != NULL); in igmp_change_state()
2777 ifp = inm->inm_ifma->ifma_ifp; in igmp_change_state()
2781 VERIFY(inm->inm_ifp == ifp); in igmp_change_state()
2791 if (inm->inm_st[1].iss_fmode != inm->inm_st[0].iss_fmode) { in igmp_change_state()
2793 inm->inm_st[0].iss_fmode, inm->inm_st[1].iss_fmode)); in igmp_change_state()
2794 if (inm->inm_st[0].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2796 error = igmp_initial_join(inm, igi, itp); in igmp_change_state()
2798 } else if (inm->inm_st[1].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2800 igmp_final_leave(inm, igi, itp); in igmp_change_state()
2807 error = igmp_handle_state_change(inm, igi, itp); in igmp_change_state()
2823 igmp_initial_join(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_initial_join() argument
2830 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2834 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2836 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_initial_join()
2837 if_name(inm->inm_ifp))); in igmp_initial_join()
2842 ifp = inm->inm_ifp; in igmp_initial_join()
2858 !igmp_isgroupreported(inm->inm_addr)) { in igmp_initial_join()
2861 inm->inm_state = IGMP_SILENT_MEMBER; in igmp_initial_join()
2862 inm->inm_timer = 0; in igmp_initial_join()
2873 inm->inm_state == IGMP_LEAVING_MEMBER) { in igmp_initial_join()
2874 VERIFY(inm->inm_nrelecnt != 0); in igmp_initial_join()
2875 igmp_append_relq(igi, inm); in igmp_initial_join()
2878 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_initial_join()
2883 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_initial_join()
2884 error = igmp_v1v2_queue_report(inm, in igmp_initial_join()
2889 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2893 inm->inm_timer = in igmp_initial_join()
2912 ifq = &inm->inm_scq; in igmp_initial_join()
2914 retval = igmp_v3_enqueue_group_record(ifq, inm, 1, in igmp_initial_join()
2931 inm->inm_scrv = 1; in igmp_initial_join()
2934 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_initial_join()
2936 inm->inm_sctimer = 1; in igmp_initial_join()
2951 inm_commit(inm); in igmp_initial_join()
2952 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2954 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_initial_join()
2964 igmp_handle_state_change(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_handle_state_change() argument
2970 INM_LOCK_ASSERT_HELD(inm); in igmp_handle_state_change()
2974 IGMP_INET_PRINTF(inm->inm_addr, in igmp_handle_state_change()
2976 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_handle_state_change()
2977 if_name(inm->inm_ifp))); in igmp_handle_state_change()
2979 ifp = inm->inm_ifp; in igmp_handle_state_change()
2986 !igmp_isgroupreported(inm->inm_addr) || in igmp_handle_state_change()
2989 if (!igmp_isgroupreported(inm->inm_addr)) { in igmp_handle_state_change()
2994 inm_commit(inm); in igmp_handle_state_change()
2995 IGMP_INET_PRINTF(inm->inm_addr, in igmp_handle_state_change()
2997 _igmp_inet_buf, inm->inm_ifp->if_name)); in igmp_handle_state_change()
3001 IF_DRAIN(&inm->inm_scq); in igmp_handle_state_change()
3003 retval = igmp_v3_enqueue_group_record(&inm->inm_scq, inm, 1, 0, 0); in igmp_handle_state_change()
3004 itp->cst = (inm->inm_scq.ifq_len > 0); in igmp_handle_state_change()
3015 inm->inm_scrv = ((igi->igi_flags & IGIF_LOOPBACK) ? 1 : (uint16_t)igi->igi_rv); in igmp_handle_state_change()
3016 inm->inm_sctimer = 1; in igmp_handle_state_change()
3033 igmp_final_leave(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_final_leave() argument
3039 INM_LOCK_ASSERT_HELD(inm); in igmp_final_leave()
3043 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3045 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_final_leave()
3046 if_name(inm->inm_ifp))); in igmp_final_leave()
3049 switch (inm->inm_state) { in igmp_final_leave()
3063 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER || in igmp_final_leave()
3064 inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_final_leave()
3083 itp->cst = (igmp_v1v2_queue_report(inm, in igmp_final_leave()
3086 INM_LOCK_ASSERT_HELD(inm); in igmp_final_leave()
3089 inm->inm_state = IGMP_NOT_MEMBER; in igmp_final_leave()
3097 IF_DRAIN(&inm->inm_scq); in igmp_final_leave()
3098 inm->inm_timer = 0; in igmp_final_leave()
3100 inm->inm_scrv = 1; in igmp_final_leave()
3102 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_final_leave()
3104 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3107 _igmp_inet_buf, if_name(inm->inm_ifp), in igmp_final_leave()
3108 inm->inm_scrv)); in igmp_final_leave()
3109 if (inm->inm_scrv == 0) { in igmp_final_leave()
3110 inm->inm_state = IGMP_NOT_MEMBER; in igmp_final_leave()
3111 inm->inm_sctimer = 0; in igmp_final_leave()
3120 INM_ADDREF_LOCKED(inm); in igmp_final_leave()
3121 VERIFY(inm->inm_debug & IFD_ATTACHED); in igmp_final_leave()
3122 inm->inm_reqcnt++; in igmp_final_leave()
3123 VERIFY(inm->inm_reqcnt >= 1); in igmp_final_leave()
3124 inm->inm_nrelecnt++; in igmp_final_leave()
3125 VERIFY(inm->inm_nrelecnt != 0); in igmp_final_leave()
3128 &inm->inm_scq, inm, 1, 0, 0); in igmp_final_leave()
3129 itp->cst = (inm->inm_scq.ifq_len > 0); in igmp_final_leave()
3134 inm->inm_state = IGMP_LEAVING_MEMBER; in igmp_final_leave()
3135 inm->inm_sctimer = 1; in igmp_final_leave()
3150 inm_commit(inm); in igmp_final_leave()
3151 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3153 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_final_leave()
3154 inm->inm_st[1].iss_fmode = MCAST_UNDEFINED; in igmp_final_leave()
3155 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3157 __func__, _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_final_leave()
3189 igmp_v3_enqueue_group_record(struct ifqueue *ifq, struct in_multi *inm, in igmp_v3_enqueue_group_record() argument
3208 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_enqueue_group_record()
3209 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v3_enqueue_group_record()
3212 ifp = inm->inm_ifp; in igmp_v3_enqueue_group_record()
3223 mode = inm->inm_st[1].iss_fmode; in igmp_v3_enqueue_group_record()
3230 if (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0 && in igmp_v3_enqueue_group_record()
3231 inm->inm_nsrc == 0) { in igmp_v3_enqueue_group_record()
3246 if (mode != inm->inm_st[0].iss_fmode) { in igmp_v3_enqueue_group_record()
3274 VERIFY(inm->inm_st[1].iss_asm == 0); in igmp_v3_enqueue_group_record()
3282 return igmp_v3_enqueue_filter_change(ifq, inm); in igmp_v3_enqueue_group_record()
3286 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_enqueue_group_record()
3289 if_name(inm->inm_ifp))); in igmp_v3_enqueue_group_record()
3303 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_enqueue_group_record()
3306 if_name(inm->inm_ifp))); in igmp_v3_enqueue_group_record()
3362 ig.ig_group = inm->inm_addr; in igmp_v3_enqueue_group_record()
3396 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, nims) { in igmp_v3_enqueue_group_record()
3403 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_group_record()
3513 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_group_record()
3584 igmp_v3_enqueue_filter_change(struct ifqueue *ifq, struct in_multi *inm) in igmp_v3_enqueue_filter_change() argument
3602 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_enqueue_filter_change()
3604 if (inm->inm_nsrc == 0 || in igmp_v3_enqueue_filter_change()
3605 (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0)) { in igmp_v3_enqueue_filter_change()
3609 ifp = inm->inm_ifp; /* interface */ in igmp_v3_enqueue_filter_change()
3610 mode = inm->inm_st[1].iss_fmode; /* filter mode at t1 */ in igmp_v3_enqueue_filter_change()
3677 ig.ig_group = inm->inm_addr; in igmp_v3_enqueue_filter_change()
3711 nims = RB_MIN(ip_msource_tree, &inm->inm_srcs); in igmp_v3_enqueue_filter_change()
3720 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_filter_change()
3721 then = ims_get_mode(inm, ims, 0); in igmp_v3_enqueue_filter_change()
3807 igmp_v3_merge_state_changes(struct in_multi *inm, struct ifqueue *ifscq) in igmp_v3_merge_state_changes() argument
3817 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_merge_state_changes()
3827 if (inm->inm_scrv > 0) { in igmp_v3_merge_state_changes()
3831 gq = &inm->inm_scq; in igmp_v3_merge_state_changes()
3835 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm))); in igmp_v3_merge_state_changes()
3862 (inm->inm_ifp->if_mtu - IGMP_LEADINGSPACE))) { in igmp_v3_merge_state_changes()
3931 struct in_multi *inm; in igmp_v3_dispatch_general_query() local
3943 IN_FIRST_MULTI(step, inm); in igmp_v3_dispatch_general_query()
3944 while (inm != NULL) { in igmp_v3_dispatch_general_query()
3945 INM_LOCK(inm); in igmp_v3_dispatch_general_query()
3946 if (inm->inm_ifp != ifp) { in igmp_v3_dispatch_general_query()
3950 switch (inm->inm_state) { in igmp_v3_dispatch_general_query()
3959 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_dispatch_general_query()
3962 inm, 0, 0, 0); in igmp_v3_dispatch_general_query()
3973 INM_UNLOCK(inm); in igmp_v3_dispatch_general_query()
3974 IN_NEXT_MULTI(step, inm); in igmp_v3_dispatch_general_query()