Lines Matching refs:inm
856 struct in_multi *inm; in igmp_input_v1_query() local
902 IN_FIRST_MULTI(step, inm); in igmp_input_v1_query()
903 while (inm != NULL) { in igmp_input_v1_query()
904 INM_LOCK(inm); in igmp_input_v1_query()
905 if (inm->inm_ifp != ifp || inm->inm_timer != 0) { in igmp_input_v1_query()
909 switch (inm->inm_state) { in igmp_input_v1_query()
920 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_input_v1_query()
921 inm->inm_timer = IGMP_RANDOM_DELAY(IGMP_V1V2_MAX_RI); in igmp_input_v1_query()
928 INM_UNLOCK(inm); in igmp_input_v1_query()
929 IN_NEXT_MULTI(step, inm); in igmp_input_v1_query()
946 struct in_multi *inm; in igmp_input_v2_query() local
1008 IN_FIRST_MULTI(step, inm); in igmp_input_v2_query()
1009 while (inm != NULL) { in igmp_input_v2_query()
1010 INM_LOCK(inm); in igmp_input_v2_query()
1011 if (inm->inm_ifp == ifp) { in igmp_input_v2_query()
1012 itp.cst += igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1014 INM_UNLOCK(inm); in igmp_input_v2_query()
1015 IN_NEXT_MULTI(step, inm); in igmp_input_v2_query()
1024 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v2_query()
1026 if (inm != NULL) { in igmp_input_v2_query()
1027 INM_LOCK(inm); in igmp_input_v2_query()
1032 itp.cst = igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1033 INM_UNLOCK(inm); in igmp_input_v2_query()
1034 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v2_query()
1059 igmp_v2_update_group(struct in_multi *inm, const int timer) in igmp_v2_update_group() argument
1061 IGMP_INET_PRINTF(inm->inm_addr, ("%s: %s/%s timer=%d\n", in igmp_v2_update_group()
1062 __func__, _igmp_inet_buf, if_name(inm->inm_ifp), in igmp_v2_update_group()
1065 INM_LOCK_ASSERT_HELD(inm); in igmp_v2_update_group()
1067 switch (inm->inm_state) { in igmp_v2_update_group()
1072 if (inm->inm_timer != 0 && in igmp_v2_update_group()
1073 inm->inm_timer <= timer) { in igmp_v2_update_group()
1085 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v2_update_group()
1086 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_v2_update_group()
1090 inm->inm_state = IGMP_AWAKENING_MEMBER; in igmp_v2_update_group()
1096 return inm->inm_timer; in igmp_v2_update_group()
1110 struct in_multi *inm; in igmp_input_v3_query() local
1242 IN_LOOKUP_MULTI(&igmpv3->igmp_group, ifp, inm); in igmp_input_v3_query()
1244 if (inm == NULL) { in igmp_input_v3_query()
1248 INM_LOCK(inm); in igmp_input_v3_query()
1250 if (!ratecheck(&inm->inm_lastgsrtv, in igmp_input_v3_query()
1255 INM_UNLOCK(inm); in igmp_input_v3_query()
1256 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1276 (void) igmp_input_v3_group_query(inm, timer, igmpv3); in igmp_input_v3_query()
1277 itp.cst = inm->inm_timer; in igmp_input_v3_query()
1279 INM_UNLOCK(inm); in igmp_input_v3_query()
1280 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1299 igmp_input_v3_group_query(struct in_multi *inm, in igmp_input_v3_group_query() argument
1305 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v3_group_query()
1309 switch (inm->inm_state) { in igmp_input_v3_group_query()
1333 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER || in igmp_input_v3_group_query()
1334 inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1335 inm_clear_recorded(inm); in igmp_input_v3_group_query()
1336 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1338 inm->inm_state = IGMP_G_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1339 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1347 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1348 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1349 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1367 if (inm->inm_nsrc > 0) { in igmp_input_v3_group_query()
1374 retval = inm_record_source(inm, ap->s_addr); in igmp_input_v3_group_query()
1383 inm->inm_state = IGMP_SG_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1384 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1401 struct in_multi *inm; in igmp_input_v1_report() local
1445 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v1_report()
1447 if (inm != NULL) { in igmp_input_v1_report()
1450 INM_LOCK(inm); in igmp_input_v1_report()
1452 igi = inm->inm_igi; in igmp_input_v1_report()
1466 igmp_v3_suppress_group_record(inm); in igmp_input_v1_report()
1469 INM_UNLOCK(inm); in igmp_input_v1_report()
1470 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1474 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v1_report()
1475 inm->inm_timer = 0; in igmp_input_v1_report()
1477 switch (inm->inm_state) { in igmp_input_v1_report()
1490 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1498 inm->inm_state = IGMP_LAZY_MEMBER; in igmp_input_v1_report()
1500 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1509 INM_UNLOCK(inm); in igmp_input_v1_report()
1510 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1526 struct in_multi *inm; in igmp_input_v2_report() local
1596 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v2_report()
1598 if (inm != NULL) { in igmp_input_v2_report()
1601 INM_LOCK(inm); in igmp_input_v2_report()
1602 igi = inm->inm_igi; in igmp_input_v2_report()
1616 igmp_v3_suppress_group_record(inm); in igmp_input_v2_report()
1619 INM_UNLOCK(inm); in igmp_input_v2_report()
1620 INM_REMREF(inm); in igmp_input_v2_report()
1624 inm->inm_timer = 0; in igmp_input_v2_report()
1626 switch (inm->inm_state) { in igmp_input_v2_report()
1640 inm->inm_state = IGMP_LAZY_MEMBER; in igmp_input_v2_report()
1648 INM_UNLOCK(inm); in igmp_input_v2_report()
1649 INM_REMREF(inm); in igmp_input_v2_report()
1930 struct in_multi *inm; in igmp_timeout() local
2030 IN_FIRST_MULTI(step, inm); in igmp_timeout()
2031 while (inm != NULL) { in igmp_timeout()
2032 INM_LOCK(inm); in igmp_timeout()
2033 if (inm->inm_ifp != ifp) { in igmp_timeout()
2041 igmp_v1v2_process_group_timer(inm, in igmp_timeout()
2046 &scq, inm, uri_sec); in igmp_timeout()
2051 INM_UNLOCK(inm); in igmp_timeout()
2052 IN_NEXT_MULTI(step, inm); in igmp_timeout()
2154 igmp_append_relq(struct igmp_ifinfo *igi, struct in_multi *inm) in igmp_append_relq() argument
2157 if (inm->inm_in_nrele) { in igmp_append_relq()
2159 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_append_relq()
2164 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_append_relq()
2166 inm->inm_in_nrele = true; in igmp_append_relq()
2167 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_append_relq()
2178 struct in_multi *inm; in igmp_flush_relq() local
2188 while ((inm = SLIST_FIRST(&igi->igi_relinmhead)) != NULL) { in igmp_flush_relq()
2190 SLIST_INSERT_HEAD(&temp_relinmhead, inm, inm_nrele); in igmp_flush_relq()
2194 while ((inm = SLIST_FIRST(&temp_relinmhead)) != NULL) { in igmp_flush_relq()
2198 INM_LOCK(inm); in igmp_flush_relq()
2201 (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_flush_relq()
2202 if_name(inm->inm_ifp)); in igmp_flush_relq()
2203 VERIFY(inm->inm_in_nrele == true); in igmp_flush_relq()
2204 inm->inm_in_nrele = false; in igmp_flush_relq()
2205 VERIFY(inm->inm_nrelecnt != 0); in igmp_flush_relq()
2206 inm->inm_nrelecnt--; in igmp_flush_relq()
2207 lastref = in_multi_detach(inm); in igmp_flush_relq()
2208 VERIFY(!lastref || (!(inm->inm_debug & IFD_ATTACHED) && in igmp_flush_relq()
2209 inm->inm_reqcnt == 0)); in igmp_flush_relq()
2210 INM_UNLOCK(inm); in igmp_flush_relq()
2212 INM_REMREF(inm); in igmp_flush_relq()
2223 IGMP_ADD_DETACHED_INM(inm_dthead, inm); in igmp_flush_relq()
2235 igmp_v1v2_process_group_timer(struct in_multi *inm, const int igmp_version) in igmp_v1v2_process_group_timer() argument
2240 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2241 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2243 if (inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2245 } else if (--inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2253 switch (inm->inm_state) { in igmp_v1v2_process_group_timer()
2263 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_v1v2_process_group_timer()
2264 (void) igmp_v1v2_queue_report(inm, in igmp_v1v2_process_group_timer()
2268 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2269 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2287 struct in_multi *inm, const unsigned int uri_sec) in igmp_v3_process_group_timers() argument
2293 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_process_group_timers()
2295 VERIFY(igi == inm->inm_igi); in igmp_v3_process_group_timers()
2306 if (inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2308 } else if (--inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2315 if (inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2317 } else if (--inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2330 switch (inm->inm_state) { in igmp_v3_process_group_timers()
2349 retval = igmp_v3_enqueue_group_record(qrq, inm, 0, 1, in igmp_v3_process_group_timers()
2350 (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER)); in igmp_v3_process_group_timers()
2353 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_process_group_timers()
2355 inm_clear_recorded(inm); in igmp_v3_process_group_timers()
2367 if (--inm->inm_scrv > 0) { in igmp_v3_process_group_timers()
2368 inm->inm_sctimer = (uint16_t)uri_sec; in igmp_v3_process_group_timers()
2379 (void) igmp_v3_merge_state_changes(inm, scq); in igmp_v3_process_group_timers()
2381 inm_commit(inm); in igmp_v3_process_group_timers()
2382 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_process_group_timers()
2384 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_v3_process_group_timers()
2393 if (inm->inm_state == IGMP_LEAVING_MEMBER && in igmp_v3_process_group_timers()
2394 inm->inm_scrv == 0) { in igmp_v3_process_group_timers()
2395 inm->inm_state = IGMP_NOT_MEMBER; in igmp_v3_process_group_timers()
2405 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_process_group_timers()
2406 igmp_append_relq(igi, inm); in igmp_v3_process_group_timers()
2423 igmp_v3_suppress_group_record(struct in_multi *inm) in igmp_v3_suppress_group_record() argument
2425 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_suppress_group_record()
2426 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v3_suppress_group_record()
2428 VERIFY(inm->inm_igi->igi_version == IGMP_VERSION_3); in igmp_v3_suppress_group_record()
2430 if (inm->inm_state != IGMP_G_QUERY_PENDING_MEMBER && in igmp_v3_suppress_group_record()
2431 inm->inm_state != IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2435 if (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2436 inm_clear_recorded(inm); in igmp_v3_suppress_group_record()
2439 inm->inm_timer = 0; in igmp_v3_suppress_group_record()
2440 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_suppress_group_record()
2503 struct in_multi *inm; in igmp_v3_cancel_link_timers() local
2526 IN_FIRST_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2527 while (inm != NULL) { in igmp_v3_cancel_link_timers()
2528 INM_LOCK(inm); in igmp_v3_cancel_link_timers()
2529 if (inm->inm_ifp != ifp && inm->inm_igi != igi) { in igmp_v3_cancel_link_timers()
2533 switch (inm->inm_state) { in igmp_v3_cancel_link_timers()
2558 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_cancel_link_timers()
2560 igmp_append_relq(igi, inm); in igmp_v3_cancel_link_timers()
2565 inm_clear_recorded(inm); in igmp_v3_cancel_link_timers()
2568 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_cancel_link_timers()
2575 inm->inm_sctimer = 0; in igmp_v3_cancel_link_timers()
2576 inm->inm_timer = 0; in igmp_v3_cancel_link_timers()
2577 IF_DRAIN(&inm->inm_scq); in igmp_v3_cancel_link_timers()
2579 INM_UNLOCK(inm); in igmp_v3_cancel_link_timers()
2580 IN_NEXT_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2673 igmp_v1v2_queue_report(struct in_multi *inm, const int type) in igmp_v1v2_queue_report() argument
2681 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_queue_report()
2682 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_queue_report()
2684 ifp = inm->inm_ifp; in igmp_v1v2_queue_report()
2700 igmp->igmp_group = inm->inm_addr; in igmp_v1v2_queue_report()
2717 ip->ip_dst = inm->inm_addr; in igmp_v1v2_queue_report()
2723 if (inm->inm_igi->igi_flags & IGIF_LOOPBACK) { in igmp_v1v2_queue_report()
2735 if (IF_QFULL(&inm->inm_igi->igi_v2q)) { in igmp_v1v2_queue_report()
2742 IF_ENQUEUE(&inm->inm_igi->igi_v2q, m); in igmp_v1v2_queue_report()
2767 igmp_change_state(struct in_multi *inm, struct igmp_tparams *itp) in igmp_change_state() argument
2776 INM_LOCK_ASSERT_HELD(inm); in igmp_change_state()
2777 VERIFY(inm->inm_igi != NULL); in igmp_change_state()
2778 IGI_LOCK_ASSERT_NOTHELD(inm->inm_igi); in igmp_change_state()
2784 VERIFY(inm->inm_ifma != NULL); in igmp_change_state()
2785 ifp = inm->inm_ifma->ifma_ifp; in igmp_change_state()
2789 VERIFY(inm->inm_ifp == ifp); in igmp_change_state()
2799 if (inm->inm_st[1].iss_fmode != inm->inm_st[0].iss_fmode) { in igmp_change_state()
2801 inm->inm_st[0].iss_fmode, inm->inm_st[1].iss_fmode)); in igmp_change_state()
2802 if (inm->inm_st[0].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2804 error = igmp_initial_join(inm, igi, itp); in igmp_change_state()
2806 } else if (inm->inm_st[1].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2808 igmp_final_leave(inm, igi, itp); in igmp_change_state()
2815 error = igmp_handle_state_change(inm, igi, itp); in igmp_change_state()
2831 igmp_initial_join(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_initial_join() argument
2838 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2842 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2844 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_initial_join()
2845 if_name(inm->inm_ifp))); in igmp_initial_join()
2850 ifp = inm->inm_ifp; in igmp_initial_join()
2866 !igmp_isgroupreported(inm->inm_addr)) { in igmp_initial_join()
2869 inm->inm_state = IGMP_SILENT_MEMBER; in igmp_initial_join()
2870 inm->inm_timer = 0; in igmp_initial_join()
2881 inm->inm_state == IGMP_LEAVING_MEMBER) { in igmp_initial_join()
2882 VERIFY(inm->inm_nrelecnt != 0); in igmp_initial_join()
2883 igmp_append_relq(igi, inm); in igmp_initial_join()
2886 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_initial_join()
2891 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_initial_join()
2892 error = igmp_v1v2_queue_report(inm, in igmp_initial_join()
2897 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2901 inm->inm_timer = in igmp_initial_join()
2920 ifq = &inm->inm_scq; in igmp_initial_join()
2922 retval = igmp_v3_enqueue_group_record(ifq, inm, 1, in igmp_initial_join()
2939 inm->inm_scrv = 1; in igmp_initial_join()
2942 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_initial_join()
2944 inm->inm_sctimer = 1; in igmp_initial_join()
2959 inm_commit(inm); in igmp_initial_join()
2960 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2962 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_initial_join()
2972 igmp_handle_state_change(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_handle_state_change() argument
2978 INM_LOCK_ASSERT_HELD(inm); in igmp_handle_state_change()
2982 IGMP_INET_PRINTF(inm->inm_addr, in igmp_handle_state_change()
2984 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_handle_state_change()
2985 if_name(inm->inm_ifp))); in igmp_handle_state_change()
2987 ifp = inm->inm_ifp; in igmp_handle_state_change()
2994 !igmp_isgroupreported(inm->inm_addr) || in igmp_handle_state_change()
2997 if (!igmp_isgroupreported(inm->inm_addr)) { in igmp_handle_state_change()
3002 inm_commit(inm); in igmp_handle_state_change()
3003 IGMP_INET_PRINTF(inm->inm_addr, in igmp_handle_state_change()
3005 _igmp_inet_buf, inm->inm_ifp->if_name)); in igmp_handle_state_change()
3009 IF_DRAIN(&inm->inm_scq); in igmp_handle_state_change()
3011 retval = igmp_v3_enqueue_group_record(&inm->inm_scq, inm, 1, 0, 0); in igmp_handle_state_change()
3012 itp->cst = (inm->inm_scq.ifq_len > 0); in igmp_handle_state_change()
3023 inm->inm_scrv = ((igi->igi_flags & IGIF_LOOPBACK) ? 1 : (uint16_t)igi->igi_rv); in igmp_handle_state_change()
3024 inm->inm_sctimer = 1; in igmp_handle_state_change()
3041 igmp_final_leave(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_final_leave() argument
3047 INM_LOCK_ASSERT_HELD(inm); in igmp_final_leave()
3051 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3053 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_final_leave()
3054 if_name(inm->inm_ifp))); in igmp_final_leave()
3057 switch (inm->inm_state) { in igmp_final_leave()
3071 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER || in igmp_final_leave()
3072 inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_final_leave()
3091 itp->cst = (igmp_v1v2_queue_report(inm, in igmp_final_leave()
3094 INM_LOCK_ASSERT_HELD(inm); in igmp_final_leave()
3097 inm->inm_state = IGMP_NOT_MEMBER; in igmp_final_leave()
3105 IF_DRAIN(&inm->inm_scq); in igmp_final_leave()
3106 inm->inm_timer = 0; in igmp_final_leave()
3108 inm->inm_scrv = 1; in igmp_final_leave()
3110 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_final_leave()
3112 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3115 _igmp_inet_buf, if_name(inm->inm_ifp), in igmp_final_leave()
3116 inm->inm_scrv)); in igmp_final_leave()
3117 if (inm->inm_scrv == 0) { in igmp_final_leave()
3118 inm->inm_state = IGMP_NOT_MEMBER; in igmp_final_leave()
3119 inm->inm_sctimer = 0; in igmp_final_leave()
3128 INM_ADDREF_LOCKED(inm); in igmp_final_leave()
3129 VERIFY(inm->inm_debug & IFD_ATTACHED); in igmp_final_leave()
3130 inm->inm_reqcnt++; in igmp_final_leave()
3131 VERIFY(inm->inm_reqcnt >= 1); in igmp_final_leave()
3132 inm->inm_nrelecnt++; in igmp_final_leave()
3133 VERIFY(inm->inm_nrelecnt != 0); in igmp_final_leave()
3136 &inm->inm_scq, inm, 1, 0, 0); in igmp_final_leave()
3137 itp->cst = (inm->inm_scq.ifq_len > 0); in igmp_final_leave()
3142 inm->inm_state = IGMP_LEAVING_MEMBER; in igmp_final_leave()
3143 inm->inm_sctimer = 1; in igmp_final_leave()
3158 inm_commit(inm); in igmp_final_leave()
3159 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3161 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_final_leave()
3162 inm->inm_st[1].iss_fmode = MCAST_UNDEFINED; in igmp_final_leave()
3163 IGMP_INET_PRINTF(inm->inm_addr, in igmp_final_leave()
3165 __func__, _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_final_leave()
3197 igmp_v3_enqueue_group_record(struct ifqueue *ifq, struct in_multi *inm, in igmp_v3_enqueue_group_record() argument
3216 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_enqueue_group_record()
3217 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v3_enqueue_group_record()
3220 ifp = inm->inm_ifp; in igmp_v3_enqueue_group_record()
3231 mode = inm->inm_st[1].iss_fmode; in igmp_v3_enqueue_group_record()
3238 if (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0 && in igmp_v3_enqueue_group_record()
3239 inm->inm_nsrc == 0) { in igmp_v3_enqueue_group_record()
3254 if (mode != inm->inm_st[0].iss_fmode) { in igmp_v3_enqueue_group_record()
3282 VERIFY(inm->inm_st[1].iss_asm == 0); in igmp_v3_enqueue_group_record()
3290 return igmp_v3_enqueue_filter_change(ifq, inm); in igmp_v3_enqueue_group_record()
3294 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_enqueue_group_record()
3297 if_name(inm->inm_ifp))); in igmp_v3_enqueue_group_record()
3311 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_enqueue_group_record()
3314 if_name(inm->inm_ifp))); in igmp_v3_enqueue_group_record()
3371 ig.ig_group = inm->inm_addr; in igmp_v3_enqueue_group_record()
3405 RB_FOREACH_SAFE(ims, ip_msource_tree, &inm->inm_srcs, nims) { in igmp_v3_enqueue_group_record()
3412 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_group_record()
3524 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_group_record()
3595 igmp_v3_enqueue_filter_change(struct ifqueue *ifq, struct in_multi *inm) in igmp_v3_enqueue_filter_change() argument
3613 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_enqueue_filter_change()
3615 if (inm->inm_nsrc == 0 || in igmp_v3_enqueue_filter_change()
3616 (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0)) { in igmp_v3_enqueue_filter_change()
3620 ifp = inm->inm_ifp; /* interface */ in igmp_v3_enqueue_filter_change()
3621 mode = inm->inm_st[1].iss_fmode; /* filter mode at t1 */ in igmp_v3_enqueue_filter_change()
3688 ig.ig_group = inm->inm_addr; in igmp_v3_enqueue_filter_change()
3723 nims = RB_MIN(ip_msource_tree, &inm->inm_srcs); in igmp_v3_enqueue_filter_change()
3732 now = ims_get_mode(inm, ims, 1); in igmp_v3_enqueue_filter_change()
3733 then = ims_get_mode(inm, ims, 0); in igmp_v3_enqueue_filter_change()
3819 igmp_v3_merge_state_changes(struct in_multi *inm, struct ifqueue *ifscq) in igmp_v3_merge_state_changes() argument
3829 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_merge_state_changes()
3839 if (inm->inm_scrv > 0) { in igmp_v3_merge_state_changes()
3843 gq = &inm->inm_scq; in igmp_v3_merge_state_changes()
3847 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm))); in igmp_v3_merge_state_changes()
3874 (inm->inm_ifp->if_mtu - IGMP_LEADINGSPACE))) { in igmp_v3_merge_state_changes()
3882 __func__, if_name(inm->inm_ifp)); in igmp_v3_merge_state_changes()
3943 struct in_multi *inm; in igmp_v3_dispatch_general_query() local
3955 IN_FIRST_MULTI(step, inm); in igmp_v3_dispatch_general_query()
3956 while (inm != NULL) { in igmp_v3_dispatch_general_query()
3957 INM_LOCK(inm); in igmp_v3_dispatch_general_query()
3958 if (inm->inm_ifp != ifp) { in igmp_v3_dispatch_general_query()
3962 switch (inm->inm_state) { in igmp_v3_dispatch_general_query()
3971 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_dispatch_general_query()
3974 inm, 0, 0, 0); in igmp_v3_dispatch_general_query()
3985 INM_UNLOCK(inm); in igmp_v3_dispatch_general_query()
3986 IN_NEXT_MULTI(step, inm); in igmp_v3_dispatch_general_query()