Lines Matching refs:inm

857 	struct in_multi         *inm;  in igmp_input_v1_query()  local
903 IN_FIRST_MULTI(step, inm); in igmp_input_v1_query()
904 while (inm != NULL) { in igmp_input_v1_query()
905 INM_LOCK(inm); in igmp_input_v1_query()
906 if (inm->inm_ifp != ifp || inm->inm_timer != 0) { in igmp_input_v1_query()
910 switch (inm->inm_state) { in igmp_input_v1_query()
921 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_input_v1_query()
922 inm->inm_timer = IGMP_RANDOM_DELAY(IGMP_V1V2_MAX_RI); in igmp_input_v1_query()
929 INM_UNLOCK(inm); in igmp_input_v1_query()
930 IN_NEXT_MULTI(step, inm); in igmp_input_v1_query()
947 struct in_multi *inm; in igmp_input_v2_query() local
1009 IN_FIRST_MULTI(step, inm); in igmp_input_v2_query()
1010 while (inm != NULL) { in igmp_input_v2_query()
1011 INM_LOCK(inm); in igmp_input_v2_query()
1012 if (inm->inm_ifp == ifp) { in igmp_input_v2_query()
1013 itp.cst += igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1015 INM_UNLOCK(inm); in igmp_input_v2_query()
1016 IN_NEXT_MULTI(step, inm); in igmp_input_v2_query()
1025 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v2_query()
1027 if (inm != NULL) { in igmp_input_v2_query()
1028 INM_LOCK(inm); in igmp_input_v2_query()
1033 itp.cst = igmp_v2_update_group(inm, timer); in igmp_input_v2_query()
1034 INM_UNLOCK(inm); in igmp_input_v2_query()
1035 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v2_query()
1060 igmp_v2_update_group(struct in_multi *inm, const int timer) in igmp_v2_update_group() argument
1062 IGMP_INET_PRINTF(inm->inm_addr, ("%s: %s/%s timer=%d\n", in igmp_v2_update_group()
1063 __func__, _igmp_inet_buf, if_name(inm->inm_ifp), in igmp_v2_update_group()
1066 INM_LOCK_ASSERT_HELD(inm); in igmp_v2_update_group()
1068 switch (inm->inm_state) { in igmp_v2_update_group()
1073 if (inm->inm_timer != 0 && in igmp_v2_update_group()
1074 inm->inm_timer <= timer) { in igmp_v2_update_group()
1086 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v2_update_group()
1087 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_v2_update_group()
1091 inm->inm_state = IGMP_AWAKENING_MEMBER; in igmp_v2_update_group()
1097 return inm->inm_timer; in igmp_v2_update_group()
1111 struct in_multi *inm; in igmp_input_v3_query() local
1243 IN_LOOKUP_MULTI(&igmpv3->igmp_group, ifp, inm); in igmp_input_v3_query()
1245 if (inm == NULL) { in igmp_input_v3_query()
1249 INM_LOCK(inm); in igmp_input_v3_query()
1251 if (!ratecheck(&inm->inm_lastgsrtv, in igmp_input_v3_query()
1256 INM_UNLOCK(inm); in igmp_input_v3_query()
1257 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1277 (void) igmp_input_v3_group_query(inm, timer, igmpv3); in igmp_input_v3_query()
1278 itp.cst = inm->inm_timer; in igmp_input_v3_query()
1280 INM_UNLOCK(inm); in igmp_input_v3_query()
1281 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v3_query()
1300 igmp_input_v3_group_query(struct in_multi *inm, in igmp_input_v3_group_query() argument
1306 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v3_group_query()
1310 switch (inm->inm_state) { in igmp_input_v3_group_query()
1334 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER || in igmp_input_v3_group_query()
1335 inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1336 inm_clear_recorded(inm); in igmp_input_v3_group_query()
1337 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1339 inm->inm_state = IGMP_G_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1340 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1348 if (inm->inm_state == IGMP_G_QUERY_PENDING_MEMBER) { in igmp_input_v3_group_query()
1349 timer = min(inm->inm_timer, timer); in igmp_input_v3_group_query()
1350 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1368 if (inm->inm_nsrc > 0) { in igmp_input_v3_group_query()
1375 retval = inm_record_source(inm, ap->s_addr); in igmp_input_v3_group_query()
1384 inm->inm_state = IGMP_SG_QUERY_PENDING_MEMBER; in igmp_input_v3_group_query()
1385 inm->inm_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_group_query()
1402 struct in_multi *inm; in igmp_input_v1_report() local
1446 IN_LOOKUP_MULTI(&igmp->igmp_group, ifp, inm); in igmp_input_v1_report()
1448 if (inm != NULL) { in igmp_input_v1_report()
1451 INM_LOCK(inm); in igmp_input_v1_report()
1453 igi = inm->inm_igi; in igmp_input_v1_report()
1467 igmp_v3_suppress_group_record(inm); in igmp_input_v1_report()
1470 INM_UNLOCK(inm); in igmp_input_v1_report()
1471 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1475 INM_LOCK_ASSERT_HELD(inm); in igmp_input_v1_report()
1476 inm->inm_timer = 0; in igmp_input_v1_report()
1478 switch (inm->inm_state) { in igmp_input_v1_report()
1491 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1499 inm->inm_state = IGMP_LAZY_MEMBER; in igmp_input_v1_report()
1501 inm->inm_state = IGMP_SLEEPING_MEMBER; in igmp_input_v1_report()
1510 INM_UNLOCK(inm); in igmp_input_v1_report()
1511 INM_REMREF(inm); /* from IN_LOOKUP_MULTI */ in igmp_input_v1_report()
1527 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
2158 if (inm->inm_in_nrele) { in igmp_append_relq()
2160 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_append_relq()
2165 __func__, (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_append_relq()
2167 inm->inm_in_nrele = true; in igmp_append_relq()
2168 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_append_relq()
2179 struct in_multi *inm; in igmp_flush_relq() local
2189 while ((inm = SLIST_FIRST(&igi->igi_relinmhead)) != NULL) { in igmp_flush_relq()
2191 SLIST_INSERT_HEAD(&temp_relinmhead, inm, inm_nrele); in igmp_flush_relq()
2195 while ((inm = SLIST_FIRST(&temp_relinmhead)) != NULL) { in igmp_flush_relq()
2199 INM_LOCK(inm); in igmp_flush_relq()
2202 (uint64_t)VM_KERNEL_ADDRPERM(inm), in igmp_flush_relq()
2203 if_name(inm->inm_ifp)); in igmp_flush_relq()
2204 VERIFY(inm->inm_in_nrele == true); in igmp_flush_relq()
2205 inm->inm_in_nrele = false; in igmp_flush_relq()
2206 VERIFY(inm->inm_nrelecnt != 0); in igmp_flush_relq()
2207 inm->inm_nrelecnt--; in igmp_flush_relq()
2208 lastref = in_multi_detach(inm); in igmp_flush_relq()
2209 VERIFY(!lastref || (!(inm->inm_debug & IFD_ATTACHED) && in igmp_flush_relq()
2210 inm->inm_reqcnt == 0)); in igmp_flush_relq()
2211 INM_UNLOCK(inm); in igmp_flush_relq()
2213 INM_REMREF(inm); in igmp_flush_relq()
2224 IGMP_ADD_DETACHED_INM(inm_dthead, inm); in igmp_flush_relq()
2236 igmp_v1v2_process_group_timer(struct in_multi *inm, const int igmp_version) in igmp_v1v2_process_group_timer() argument
2241 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2242 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2244 if (inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2246 } else if (--inm->inm_timer == 0) { in igmp_v1v2_process_group_timer()
2254 switch (inm->inm_state) { in igmp_v1v2_process_group_timer()
2264 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_v1v2_process_group_timer()
2265 (void) igmp_v1v2_queue_report(inm, in igmp_v1v2_process_group_timer()
2269 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_process_group_timer()
2270 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_process_group_timer()
2288 struct in_multi *inm, const unsigned int uri_sec) in igmp_v3_process_group_timers() argument
2294 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_process_group_timers()
2296 VERIFY(igi == inm->inm_igi); in igmp_v3_process_group_timers()
2307 if (inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2309 } else if (--inm->inm_timer == 0) { in igmp_v3_process_group_timers()
2316 if (inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2318 } else if (--inm->inm_sctimer == 0) { in igmp_v3_process_group_timers()
2331 switch (inm->inm_state) { in igmp_v3_process_group_timers()
2350 retval = igmp_v3_enqueue_group_record(qrq, inm, 0, 1, in igmp_v3_process_group_timers()
2351 (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER)); in igmp_v3_process_group_timers()
2354 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_process_group_timers()
2356 inm_clear_recorded(inm); in igmp_v3_process_group_timers()
2368 if (--inm->inm_scrv > 0) { in igmp_v3_process_group_timers()
2369 inm->inm_sctimer = (uint16_t)uri_sec; in igmp_v3_process_group_timers()
2380 (void) igmp_v3_merge_state_changes(inm, scq); in igmp_v3_process_group_timers()
2382 inm_commit(inm); in igmp_v3_process_group_timers()
2383 IGMP_INET_PRINTF(inm->inm_addr, in igmp_v3_process_group_timers()
2385 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_v3_process_group_timers()
2394 if (inm->inm_state == IGMP_LEAVING_MEMBER && in igmp_v3_process_group_timers()
2395 inm->inm_scrv == 0) { in igmp_v3_process_group_timers()
2396 inm->inm_state = IGMP_NOT_MEMBER; in igmp_v3_process_group_timers()
2406 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_process_group_timers()
2407 igmp_append_relq(igi, inm); in igmp_v3_process_group_timers()
2424 igmp_v3_suppress_group_record(struct in_multi *inm) in igmp_v3_suppress_group_record() argument
2426 INM_LOCK_ASSERT_HELD(inm); in igmp_v3_suppress_group_record()
2427 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v3_suppress_group_record()
2429 VERIFY(inm->inm_igi->igi_version == IGMP_VERSION_3); in igmp_v3_suppress_group_record()
2431 if (inm->inm_state != IGMP_G_QUERY_PENDING_MEMBER && in igmp_v3_suppress_group_record()
2432 inm->inm_state != IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2436 if (inm->inm_state == IGMP_SG_QUERY_PENDING_MEMBER) { in igmp_v3_suppress_group_record()
2437 inm_clear_recorded(inm); in igmp_v3_suppress_group_record()
2440 inm->inm_timer = 0; in igmp_v3_suppress_group_record()
2441 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_suppress_group_record()
2504 struct in_multi *inm; in igmp_v3_cancel_link_timers() local
2527 IN_FIRST_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2528 while (inm != NULL) { in igmp_v3_cancel_link_timers()
2529 INM_LOCK(inm); in igmp_v3_cancel_link_timers()
2530 if (inm->inm_ifp != ifp && inm->inm_igi != igi) { in igmp_v3_cancel_link_timers()
2534 switch (inm->inm_state) { in igmp_v3_cancel_link_timers()
2559 VERIFY(inm->inm_nrelecnt != 0); in igmp_v3_cancel_link_timers()
2561 igmp_append_relq(igi, inm); in igmp_v3_cancel_link_timers()
2566 inm_clear_recorded(inm); in igmp_v3_cancel_link_timers()
2569 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_v3_cancel_link_timers()
2576 inm->inm_sctimer = 0; in igmp_v3_cancel_link_timers()
2577 inm->inm_timer = 0; in igmp_v3_cancel_link_timers()
2578 IF_DRAIN(&inm->inm_scq); in igmp_v3_cancel_link_timers()
2580 INM_UNLOCK(inm); in igmp_v3_cancel_link_timers()
2581 IN_NEXT_MULTI(step, inm); in igmp_v3_cancel_link_timers()
2674 igmp_v1v2_queue_report(struct in_multi *inm, const int type) in igmp_v1v2_queue_report() argument
2682 INM_LOCK_ASSERT_HELD(inm); in igmp_v1v2_queue_report()
2683 IGI_LOCK_ASSERT_HELD(inm->inm_igi); in igmp_v1v2_queue_report()
2685 ifp = inm->inm_ifp; in igmp_v1v2_queue_report()
2701 igmp->igmp_group = inm->inm_addr; in igmp_v1v2_queue_report()
2718 ip->ip_dst = inm->inm_addr; in igmp_v1v2_queue_report()
2724 if (inm->inm_igi->igi_flags & IGIF_LOOPBACK) { in igmp_v1v2_queue_report()
2736 if (IF_QFULL(&inm->inm_igi->igi_v2q)) { in igmp_v1v2_queue_report()
2743 IF_ENQUEUE(&inm->inm_igi->igi_v2q, m); in igmp_v1v2_queue_report()
2768 igmp_change_state(struct in_multi *inm, struct igmp_tparams *itp) in igmp_change_state() argument
2777 INM_LOCK_ASSERT_HELD(inm); in igmp_change_state()
2778 VERIFY(inm->inm_igi != NULL); in igmp_change_state()
2779 IGI_LOCK_ASSERT_NOTHELD(inm->inm_igi); in igmp_change_state()
2785 VERIFY(inm->inm_ifma != NULL); in igmp_change_state()
2786 ifp = inm->inm_ifma->ifma_ifp; in igmp_change_state()
2790 VERIFY(inm->inm_ifp == ifp); in igmp_change_state()
2800 if (inm->inm_st[1].iss_fmode != inm->inm_st[0].iss_fmode) { in igmp_change_state()
2802 inm->inm_st[0].iss_fmode, inm->inm_st[1].iss_fmode)); in igmp_change_state()
2803 if (inm->inm_st[0].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2805 error = igmp_initial_join(inm, igi, itp); in igmp_change_state()
2807 } else if (inm->inm_st[1].iss_fmode == MCAST_UNDEFINED) { in igmp_change_state()
2809 igmp_final_leave(inm, igi, itp); in igmp_change_state()
2816 error = igmp_handle_state_change(inm, igi, itp); in igmp_change_state()
2832 igmp_initial_join(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_initial_join() argument
2839 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2843 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2845 _igmp_inet_buf, (uint64_t)VM_KERNEL_ADDRPERM(inm->inm_ifp), in igmp_initial_join()
2846 if_name(inm->inm_ifp))); in igmp_initial_join()
2851 ifp = inm->inm_ifp; in igmp_initial_join()
2867 !igmp_isgroupreported(inm->inm_addr)) { in igmp_initial_join()
2870 inm->inm_state = IGMP_SILENT_MEMBER; in igmp_initial_join()
2871 inm->inm_timer = 0; in igmp_initial_join()
2882 inm->inm_state == IGMP_LEAVING_MEMBER) { in igmp_initial_join()
2883 VERIFY(inm->inm_nrelecnt != 0); in igmp_initial_join()
2884 igmp_append_relq(igi, inm); in igmp_initial_join()
2887 inm->inm_state = IGMP_REPORTING_MEMBER; in igmp_initial_join()
2892 inm->inm_state = IGMP_IDLE_MEMBER; in igmp_initial_join()
2893 error = igmp_v1v2_queue_report(inm, in igmp_initial_join()
2898 INM_LOCK_ASSERT_HELD(inm); in igmp_initial_join()
2902 inm->inm_timer = in igmp_initial_join()
2921 ifq = &inm->inm_scq; in igmp_initial_join()
2923 retval = igmp_v3_enqueue_group_record(ifq, inm, 1, in igmp_initial_join()
2940 inm->inm_scrv = 1; in igmp_initial_join()
2943 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_initial_join()
2945 inm->inm_sctimer = 1; in igmp_initial_join()
2960 inm_commit(inm); in igmp_initial_join()
2961 IGMP_INET_PRINTF(inm->inm_addr, in igmp_initial_join()
2963 _igmp_inet_buf, if_name(inm->inm_ifp))); in igmp_initial_join()
2973 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 int 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()