Lines Matching refs:igi
435 struct igmp_ifinfo *igi; variable
467 LIST_FOREACH(igi, &igi_head, igi_link) {
468 IGI_LOCK(igi);
469 if (ifp != igi->igi_ifp) {
470 IGI_UNLOCK(igi);
473 igi_u.igi_ifindex = igi->igi_ifp->if_index;
474 igi_u.igi_version = igi->igi_version;
475 igi_u.igi_v1_timer = igi->igi_v1_timer;
476 igi_u.igi_v2_timer = igi->igi_v2_timer;
477 igi_u.igi_v3_timer = igi->igi_v3_timer;
478 igi_u.igi_flags = igi->igi_flags;
479 igi_u.igi_rv = igi->igi_rv;
480 igi_u.igi_qi = igi->igi_qi;
481 igi_u.igi_qri = igi->igi_qri;
482 igi_u.igi_uri = igi->igi_uri;
483 IGI_UNLOCK(igi);
500 igmp_dispatch_queue(struct igmp_ifinfo *igi, struct ifqueue *ifq, int limit, in igmp_dispatch_queue() argument
506 if (igi != NULL) { in igmp_dispatch_queue()
507 IGI_LOCK_ASSERT_HELD(igi); in igmp_dispatch_queue()
532 if (igi != NULL) { in igmp_dispatch_queue()
533 IGI_UNLOCK(igi); in igmp_dispatch_queue()
536 if (igi != NULL) { in igmp_dispatch_queue()
537 IGI_LOCK(igi); in igmp_dispatch_queue()
548 if (igi != NULL) { in igmp_dispatch_queue()
549 IGI_LOCK_ASSERT_HELD(igi); in igmp_dispatch_queue()
605 struct igmp_ifinfo *igi; in igmp_domifattach() local
610 igi = igi_alloc(how); in igmp_domifattach()
611 if (igi == NULL) { in igmp_domifattach()
617 IGI_LOCK(igi); in igmp_domifattach()
618 igi_initvar(igi, ifp, 0); in igmp_domifattach()
619 igi->igi_debug |= IFD_ATTACHED; in igmp_domifattach()
620 IGI_ADDREF_LOCKED(igi); /* hold a reference for igi_head */ in igmp_domifattach()
621 IGI_ADDREF_LOCKED(igi); /* hold a reference for caller */ in igmp_domifattach()
622 IGI_UNLOCK(igi); in igmp_domifattach()
624 igmp_initsilent(ifp, igi); in igmp_domifattach()
627 LIST_INSERT_HEAD(&igi_head, igi, igi_link); in igmp_domifattach()
634 return igi; in igmp_domifattach()
642 igmp_domifreattach(struct igmp_ifinfo *igi) in igmp_domifreattach() argument
648 IGI_LOCK(igi); in igmp_domifreattach()
649 VERIFY(!(igi->igi_debug & IFD_ATTACHED)); in igmp_domifreattach()
650 ifp = igi->igi_ifp; in igmp_domifreattach()
652 igi_initvar(igi, ifp, 1); in igmp_domifreattach()
653 igi->igi_debug |= IFD_ATTACHED; in igmp_domifreattach()
654 IGI_ADDREF_LOCKED(igi); /* hold a reference for igi_head */ in igmp_domifreattach()
655 IGI_UNLOCK(igi); in igmp_domifreattach()
657 igmp_initsilent(ifp, igi); in igmp_domifreattach()
660 LIST_INSERT_HEAD(&igi_head, igi, igi_link); in igmp_domifreattach()
698 struct igmp_ifinfo *igi, *tigi; in igi_delete() local
702 LIST_FOREACH_SAFE(igi, &igi_head, igi_link, tigi) { in igi_delete()
703 IGI_LOCK(igi); in igi_delete()
704 if (igi->igi_ifp == ifp) { in igi_delete()
708 IF_DRAIN(&igi->igi_gq); in igi_delete()
709 IF_DRAIN(&igi->igi_v2q); in igi_delete()
710 igmp_flush_relq(igi, inm_dthead); in igi_delete()
711 igi->igi_debug &= ~IFD_ATTACHED; in igi_delete()
712 IGI_UNLOCK(igi); in igi_delete()
714 LIST_REMOVE(igi, igi_link); in igi_delete()
715 IGI_REMREF(igi); /* release igi_head reference */ in igi_delete()
718 IGI_UNLOCK(igi); in igi_delete()
725 igmp_initsilent(struct ifnet *ifp, struct igmp_ifinfo *igi) in igmp_initsilent() argument
729 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_initsilent()
730 IGI_LOCK(igi); in igmp_initsilent()
732 igi->igi_flags |= IGIF_SILENT; in igmp_initsilent()
734 igi->igi_flags &= ~IGIF_SILENT; in igmp_initsilent()
736 IGI_UNLOCK(igi); in igmp_initsilent()
740 igi_initvar(struct igmp_ifinfo *igi, struct ifnet *ifp, int reattach) in igi_initvar() argument
742 IGI_LOCK_ASSERT_HELD(igi); in igi_initvar()
744 igi->igi_ifp = ifp; in igi_initvar()
745 igi->igi_version = igmp_default_version; in igi_initvar()
746 igi->igi_flags = 0; in igi_initvar()
747 igi->igi_rv = IGMP_RV_INIT; in igi_initvar()
748 igi->igi_qi = IGMP_QI_INIT; in igi_initvar()
749 igi->igi_qri = IGMP_QRI_INIT; in igi_initvar()
750 igi->igi_uri = IGMP_URI_INIT; in igi_initvar()
753 SLIST_INIT(&igi->igi_relinmhead); in igi_initvar()
759 igi->igi_gq.ifq_maxlen = IGMP_MAX_RESPONSE_PACKETS; in igi_initvar()
760 igi->igi_v2q.ifq_maxlen = IGMP_MAX_RESPONSE_PACKETS; in igi_initvar()
766 struct igmp_ifinfo *igi = zalloc_flags(igi_zone, how | Z_ZERO); in igi_alloc() local
767 if (igi != NULL) { in igi_alloc()
768 lck_mtx_init(&igi->igi_lock, &igmp_mtx_grp, &igmp_mtx_attr); in igi_alloc()
769 igi->igi_debug |= IFD_ALLOC; in igi_alloc()
771 return igi; in igi_alloc()
775 igi_free(struct igmp_ifinfo *igi) in igi_free() argument
777 IGI_LOCK(igi); in igi_free()
778 if (igi->igi_debug & IFD_ATTACHED) { in igi_free()
779 panic("%s: attached igi=%p is being freed", __func__, igi); in igi_free()
781 } else if (igi->igi_ifp != NULL) { in igi_free()
782 panic("%s: ifp not NULL for igi=%p", __func__, igi); in igi_free()
784 } else if (!(igi->igi_debug & IFD_ALLOC)) { in igi_free()
785 panic("%s: igi %p cannot be freed", __func__, igi); in igi_free()
787 } else if (igi->igi_refcnt != 0) { in igi_free()
788 panic("%s: non-zero refcnt igi=%p", __func__, igi); in igi_free()
791 igi->igi_debug &= ~IFD_ALLOC; in igi_free()
792 IGI_UNLOCK(igi); in igi_free()
794 lck_mtx_destroy(&igi->igi_lock, &igmp_mtx_grp); in igi_free()
795 zfree(igi_zone, igi); in igi_free()
799 igi_addref(struct igmp_ifinfo *igi, int locked) in igi_addref() argument
802 IGI_LOCK_SPIN(igi); in igi_addref()
804 IGI_LOCK_ASSERT_HELD(igi); in igi_addref()
807 if (++igi->igi_refcnt == 0) { in igi_addref()
808 panic("%s: igi=%p wraparound refcnt", __func__, igi); in igi_addref()
812 IGI_UNLOCK(igi); in igi_addref()
817 igi_remref(struct igmp_ifinfo *igi) in igi_remref() argument
822 IGI_LOCK_SPIN(igi); in igi_remref()
824 if (igi->igi_refcnt == 0) { in igi_remref()
825 panic("%s: igi=%p negative refcnt", __func__, igi); in igi_remref()
829 --igi->igi_refcnt; in igi_remref()
830 if (igi->igi_refcnt > 0) { in igi_remref()
831 IGI_UNLOCK(igi); in igi_remref()
835 ifp = igi->igi_ifp; in igi_remref()
836 igi->igi_ifp = NULL; in igi_remref()
837 IF_DRAIN(&igi->igi_gq); in igi_remref()
838 IF_DRAIN(&igi->igi_v2q); in igi_remref()
840 igmp_flush_relq(igi, (struct igmp_inm_relhead *)&inm_dthead); in igi_remref()
841 IGI_UNLOCK(igi); in igi_remref()
849 igi_free(igi); in igi_remref()
860 struct igmp_ifinfo *igi; in igmp_input_v1_query() local
880 igi = IGMP_IFINFO(ifp); in igmp_input_v1_query()
881 VERIFY(igi != NULL); in igmp_input_v1_query()
883 IGI_LOCK(igi); in igmp_input_v1_query()
884 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v1_query()
888 IGI_UNLOCK(igi); in igmp_input_v1_query()
894 itp.qpt = igmp_set_version(igi, IGMP_VERSION_1); in igmp_input_v1_query()
895 IGI_UNLOCK(igi); in igmp_input_v1_query()
949 struct igmp_ifinfo *igi; in igmp_input_v2_query() local
977 igi = IGMP_IFINFO(ifp); in igmp_input_v2_query()
978 VERIFY(igi != NULL); in igmp_input_v2_query()
980 IGI_LOCK(igi); in igmp_input_v2_query()
981 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v2_query()
985 IGI_UNLOCK(igi); in igmp_input_v2_query()
991 if (igi->igi_version == IGMP_VERSION_1) { in igmp_input_v2_query()
992 IGI_UNLOCK(igi); in igmp_input_v2_query()
995 itp.qpt = igmp_set_version(igi, IGMP_VERSION_2); in igmp_input_v2_query()
996 IGI_UNLOCK(igi); in igmp_input_v2_query()
1114 struct igmp_ifinfo *igi; in igmp_input_v3_query() local
1189 igi = IGMP_IFINFO(ifp); in igmp_input_v3_query()
1190 VERIFY(igi != NULL); in igmp_input_v3_query()
1192 IGI_LOCK(igi); in igmp_input_v3_query()
1193 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v3_query()
1197 IGI_UNLOCK(igi); in igmp_input_v3_query()
1207 if (igi->igi_version != IGMP_VERSION_3) { in igmp_input_v3_query()
1209 "ifp 0x%llx(%s)\n", __func__, igi->igi_version, in igmp_input_v3_query()
1211 IGI_UNLOCK(igi); in igmp_input_v3_query()
1215 itp.qpt = igmp_set_version(igi, IGMP_VERSION_3); in igmp_input_v3_query()
1216 igi->igi_rv = qrv; in igmp_input_v3_query()
1217 igi->igi_qi = qqi; in igmp_input_v3_query()
1218 igi->igi_qri = MAX(timer, IGMP_QRI_MIN); in igmp_input_v3_query()
1220 IGMP_PRINTF(("%s: qrv %d qi %d qri %d\n", __func__, igi->igi_rv, in igmp_input_v3_query()
1221 igi->igi_qi, igi->igi_qri)); in igmp_input_v3_query()
1234 if (igi->igi_v3_timer == 0 || igi->igi_v3_timer >= timer) { in igmp_input_v3_query()
1235 itp.it = igi->igi_v3_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_query()
1237 IGI_UNLOCK(igi); in igmp_input_v3_query()
1239 IGI_UNLOCK(igi); in igmp_input_v3_query()
1275 IGI_LOCK(igi); in igmp_input_v3_query()
1276 itp.it = igi->igi_v3_timer; in igmp_input_v3_query()
1277 IGI_UNLOCK(igi); in igmp_input_v3_query()
1451 struct igmp_ifinfo *igi; in igmp_input_v1_report() local
1455 igi = inm->inm_igi; in igmp_input_v1_report()
1456 VERIFY(igi != NULL); in igmp_input_v1_report()
1466 IGI_LOCK(igi); in igmp_input_v1_report()
1467 if (igi->igi_version == IGMP_VERSION_3) { in igmp_input_v1_report()
1471 IGI_UNLOCK(igi); in igmp_input_v1_report()
1500 if (igi->igi_version == IGMP_VERSION_1) { in igmp_input_v1_report()
1502 } else if (igi->igi_version == IGMP_VERSION_2) { in igmp_input_v1_report()
1511 IGI_UNLOCK(igi); in igmp_input_v1_report()
1600 struct igmp_ifinfo *igi; in igmp_input_v2_report() local
1603 igi = inm->inm_igi; in igmp_input_v2_report()
1604 VERIFY(igi != NULL); in igmp_input_v2_report()
1614 IGI_LOCK(igi); in igmp_input_v2_report()
1615 if (igi->igi_version == IGMP_VERSION_3) { in igmp_input_v2_report()
1619 IGI_UNLOCK(igi); in igmp_input_v2_report()
1648 IGI_UNLOCK(igi); in igmp_input_v2_report()
1930 struct igmp_ifinfo *igi; in igmp_timeout() local
1965 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
1966 IGI_LOCK(igi); in igmp_timeout()
1967 igmp_v1v2_process_querier_timers(igi); in igmp_timeout()
1968 if (igi->igi_v1_timer > 0 || igi->igi_v2_timer > 0) { in igmp_timeout()
1971 IGI_UNLOCK(igi); in igmp_timeout()
1981 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
1982 IGI_LOCK(igi); in igmp_timeout()
1983 if (igi->igi_version != IGMP_VERSION_3) { in igmp_timeout()
1984 IGI_UNLOCK(igi); in igmp_timeout()
1987 if (igi->igi_v3_timer == 0) { in igmp_timeout()
1989 } else if (--igi->igi_v3_timer == 0) { in igmp_timeout()
1990 if (igmp_v3_dispatch_general_query(igi) > 0) { in igmp_timeout()
1996 IGI_UNLOCK(igi); in igmp_timeout()
2021 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
2024 IGI_LOCK(igi); in igmp_timeout()
2025 ifp = igi->igi_ifp; in igmp_timeout()
2026 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0; in igmp_timeout()
2027 uri_sec = IGMP_RANDOM_DELAY(igi->igi_uri); in igmp_timeout()
2028 IGI_UNLOCK(igi); in igmp_timeout()
2038 IGI_LOCK(igi); in igmp_timeout()
2039 switch (igi->igi_version) { in igmp_timeout()
2043 igi->igi_version); in igmp_timeout()
2046 igmp_v3_process_group_timers(igi, &qrq, in igmp_timeout()
2050 IGI_UNLOCK(igi); in igmp_timeout()
2057 IGI_LOCK(igi); in igmp_timeout()
2058 if (igi->igi_version == IGMP_VERSION_1 || in igmp_timeout()
2059 igi->igi_version == IGMP_VERSION_2) { in igmp_timeout()
2060 igmp_dispatch_queue(igi, &igi->igi_v2q, 0, loop); in igmp_timeout()
2061 } else if (igi->igi_version == IGMP_VERSION_3) { in igmp_timeout()
2062 IGI_UNLOCK(igi); in igmp_timeout()
2067 IGI_LOCK(igi); in igmp_timeout()
2073 IF_DRAIN(&igi->igi_v2q); in igmp_timeout()
2080 igmp_flush_relq(igi, (struct igmp_inm_relhead *)&inm_dthead); in igmp_timeout()
2081 IGI_UNLOCK(igi); in igmp_timeout()
2155 igmp_append_relq(struct igmp_ifinfo *igi, struct in_multi *inm) in igmp_append_relq() argument
2157 IGI_LOCK_ASSERT_HELD(igi); in igmp_append_relq()
2160 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_append_relq()
2161 if_name(igi->igi_ifp))); in igmp_append_relq()
2162 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_append_relq()
2171 igmp_flush_relq(struct igmp_ifinfo *igi, struct igmp_inm_relhead *inm_dthead) in igmp_flush_relq() argument
2181 IGI_LOCK_ASSERT_HELD(igi); in igmp_flush_relq()
2183 while ((inm = SLIST_FIRST(&igi->igi_relinmhead)) != NULL) { in igmp_flush_relq()
2184 SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); in igmp_flush_relq()
2187 IGI_UNLOCK(igi); in igmp_flush_relq()
2216 IGI_LOCK(igi); in igmp_flush_relq()
2274 igmp_v3_process_group_timers(struct igmp_ifinfo *igi, in igmp_v3_process_group_timers() argument
2283 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_process_group_timers()
2284 VERIFY(igi == inm->inm_igi); in igmp_v3_process_group_timers()
2395 igmp_append_relq(igi, inm); in igmp_v3_process_group_timers()
2437 igmp_set_version(struct igmp_ifinfo *igi, const int igmp_version) in igmp_set_version() argument
2441 IGI_LOCK_ASSERT_HELD(igi); in igmp_set_version()
2444 igmp_version, (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_set_version()
2445 if_name(igi->igi_ifp))); in igmp_set_version()
2452 old_version_timer = igi->igi_rv * igi->igi_qi + igi->igi_qri; in igmp_set_version()
2455 igi->igi_v1_timer = old_version_timer; in igmp_set_version()
2456 igi->igi_v2_timer = 0; in igmp_set_version()
2458 igi->igi_v1_timer = 0; in igmp_set_version()
2459 igi->igi_v2_timer = old_version_timer; in igmp_set_version()
2463 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) { in igmp_set_version()
2464 if (igi->igi_version != IGMP_VERSION_2) { in igmp_set_version()
2465 igmp_v3_cancel_link_timers(igi); in igmp_set_version()
2466 igi->igi_version = IGMP_VERSION_2; in igmp_set_version()
2468 } else if (igi->igi_v1_timer > 0) { in igmp_set_version()
2469 if (igi->igi_version != IGMP_VERSION_1) { in igmp_set_version()
2470 igmp_v3_cancel_link_timers(igi); in igmp_set_version()
2471 igi->igi_version = IGMP_VERSION_1; in igmp_set_version()
2475 IGI_LOCK_ASSERT_HELD(igi); in igmp_set_version()
2477 return MAX(igi->igi_v1_timer, igi->igi_v2_timer); in igmp_set_version()
2490 igmp_v3_cancel_link_timers(struct igmp_ifinfo *igi) in igmp_v3_cancel_link_timers() argument
2496 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_cancel_link_timers()
2499 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), if_name(igi->igi_ifp))); in igmp_v3_cancel_link_timers()
2506 igi->igi_v3_timer = 0; in igmp_v3_cancel_link_timers()
2512 ifp = igi->igi_ifp; in igmp_v3_cancel_link_timers()
2513 IGI_UNLOCK(igi); in igmp_v3_cancel_link_timers()
2519 if (inm->inm_ifp != ifp && inm->inm_igi != igi) { in igmp_v3_cancel_link_timers()
2549 IGI_LOCK(igi); in igmp_v3_cancel_link_timers()
2550 igmp_append_relq(igi, inm); in igmp_v3_cancel_link_timers()
2551 IGI_UNLOCK(igi); in igmp_v3_cancel_link_timers()
2574 IGI_LOCK(igi); in igmp_v3_cancel_link_timers()
2582 igmp_v1v2_process_querier_timers(struct igmp_ifinfo *igi) in igmp_v1v2_process_querier_timers() argument
2584 IGI_LOCK_ASSERT_HELD(igi); in igmp_v1v2_process_querier_timers()
2586 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer == 0) { in igmp_v1v2_process_querier_timers()
2592 if (igi->igi_version != IGMP_VERSION_3) { in igmp_v1v2_process_querier_timers()
2595 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2596 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2597 if_name(igi->igi_ifp))); in igmp_v1v2_process_querier_timers()
2598 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2599 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2601 } else if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) { in igmp_v1v2_process_querier_timers()
2612 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2613 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2614 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2615 igi->igi_v2_timer = 0; in igmp_v1v2_process_querier_timers()
2616 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2617 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2619 --igi->igi_v2_timer; in igmp_v1v2_process_querier_timers()
2620 if (igi->igi_version != IGMP_VERSION_2) { in igmp_v1v2_process_querier_timers()
2623 igi->igi_version, IGMP_VERSION_2, in igmp_v1v2_process_querier_timers()
2624 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2625 if_name(igi->igi_ifp))); in igmp_v1v2_process_querier_timers()
2626 IF_DRAIN(&igi->igi_gq); in igmp_v1v2_process_querier_timers()
2627 igmp_v3_cancel_link_timers(igi); in igmp_v1v2_process_querier_timers()
2628 igi->igi_version = IGMP_VERSION_2; in igmp_v1v2_process_querier_timers()
2631 } else if (igi->igi_v1_timer > 0) { in igmp_v1v2_process_querier_timers()
2643 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2644 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2645 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2646 igi->igi_v1_timer = 0; in igmp_v1v2_process_querier_timers()
2647 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2648 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2650 --igi->igi_v1_timer; in igmp_v1v2_process_querier_timers()
2652 if (igi->igi_v2_timer > 0) { in igmp_v1v2_process_querier_timers()
2655 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2656 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2657 igi->igi_v2_timer = 0; in igmp_v1v2_process_querier_timers()
2761 struct igmp_ifinfo *igi; in igmp_change_state() local
2783 igi = IGMP_IFINFO(ifp); in igmp_change_state()
2784 VERIFY(igi != NULL); in igmp_change_state()
2796 error = igmp_initial_join(inm, igi, itp); 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
2831 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_initial_join()
2844 IGI_LOCK(igi); in igmp_initial_join()
2845 VERIFY(igi->igi_ifp == ifp); in igmp_initial_join()
2857 (igi->igi_flags & IGIF_SILENT) || in igmp_initial_join()
2872 if (igi->igi_version == IGMP_VERSION_3 && in igmp_initial_join()
2875 igmp_append_relq(igi, inm); in igmp_initial_join()
2880 switch (igi->igi_version) { in igmp_initial_join()
2885 (igi->igi_version == IGMP_VERSION_2) ? in igmp_initial_join()
2890 IGI_LOCK_ASSERT_HELD(igi); in igmp_initial_join()
2930 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_initial_join()
2933 VERIFY(igi->igi_rv > 1); in igmp_initial_join()
2934 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_initial_join()
2943 IGI_UNLOCK(igi); in igmp_initial_join()
2964 igmp_handle_state_change(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_handle_state_change() argument
2971 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_handle_state_change()
2981 IGI_LOCK(igi); in igmp_handle_state_change()
2982 VERIFY(igi->igi_ifp == ifp); in igmp_handle_state_change()
2985 (igi->igi_flags & IGIF_SILENT) || in igmp_handle_state_change()
2987 (igi->igi_version != IGMP_VERSION_3)) { in igmp_handle_state_change()
2988 IGI_UNLOCK(igi); in igmp_handle_state_change()
3007 IGI_UNLOCK(igi); 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()
3018 IGI_UNLOCK(igi); in igmp_handle_state_change()
3033 igmp_final_leave(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_final_leave() argument
3040 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_final_leave()
3061 IGI_LOCK(igi); in igmp_final_leave()
3062 if (igi->igi_version == IGMP_VERSION_2) { in igmp_final_leave()
3071 IGI_UNLOCK(igi); in igmp_final_leave()
3087 IGI_LOCK_ASSERT_HELD(igi); in igmp_final_leave()
3090 } else if (igi->igi_version == IGMP_VERSION_3) { in igmp_final_leave()
3099 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_final_leave()
3102 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_final_leave()
3140 IGI_UNLOCK(igi); in igmp_final_leave()
3928 igmp_v3_dispatch_general_query(struct igmp_ifinfo *igi) in igmp_v3_dispatch_general_query() argument
3935 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_dispatch_general_query()
3937 VERIFY(igi->igi_version == IGMP_VERSION_3); in igmp_v3_dispatch_general_query()
3939 ifp = igi->igi_ifp; in igmp_v3_dispatch_general_query()
3940 IGI_UNLOCK(igi); in igmp_v3_dispatch_general_query()
3960 IGI_LOCK(igi); in igmp_v3_dispatch_general_query()
3961 retval = igmp_v3_enqueue_group_record(&igi->igi_gq, in igmp_v3_dispatch_general_query()
3963 IGI_UNLOCK(igi); in igmp_v3_dispatch_general_query()
3978 IGI_LOCK(igi); in igmp_v3_dispatch_general_query()
3979 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0; in igmp_v3_dispatch_general_query()
3980 igmp_dispatch_queue(igi, &igi->igi_gq, IGMP_MAX_RESPONSE_BURST, in igmp_v3_dispatch_general_query()
3982 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_dispatch_general_query()
3986 if (igi->igi_gq.ifq_head != NULL) { in igmp_v3_dispatch_general_query()
3987 igi->igi_v3_timer = 1 + IGMP_RANDOM_DELAY( in igmp_v3_dispatch_general_query()
3991 return igi->igi_v3_timer; in igmp_v3_dispatch_general_query()