Lines Matching refs:igi
434 struct igmp_ifinfo *igi; variable
466 LIST_FOREACH(igi, &igi_head, igi_link) {
467 IGI_LOCK(igi);
468 if (ifp != igi->igi_ifp) {
469 IGI_UNLOCK(igi);
472 igi_u.igi_ifindex = igi->igi_ifp->if_index;
473 igi_u.igi_version = igi->igi_version;
474 igi_u.igi_v1_timer = igi->igi_v1_timer;
475 igi_u.igi_v2_timer = igi->igi_v2_timer;
476 igi_u.igi_v3_timer = igi->igi_v3_timer;
477 igi_u.igi_flags = igi->igi_flags;
478 igi_u.igi_rv = igi->igi_rv;
479 igi_u.igi_qi = igi->igi_qi;
480 igi_u.igi_qri = igi->igi_qri;
481 igi_u.igi_uri = igi->igi_uri;
482 IGI_UNLOCK(igi);
499 igmp_dispatch_queue(struct igmp_ifinfo *igi, struct ifqueue *ifq, int limit, in igmp_dispatch_queue() argument
505 if (igi != NULL) { in igmp_dispatch_queue()
506 IGI_LOCK_ASSERT_HELD(igi); in igmp_dispatch_queue()
531 if (igi != NULL) { in igmp_dispatch_queue()
532 IGI_UNLOCK(igi); in igmp_dispatch_queue()
535 if (igi != NULL) { in igmp_dispatch_queue()
536 IGI_LOCK(igi); in igmp_dispatch_queue()
547 if (igi != NULL) { in igmp_dispatch_queue()
548 IGI_LOCK_ASSERT_HELD(igi); in igmp_dispatch_queue()
604 struct igmp_ifinfo *igi; in igmp_domifattach() local
609 igi = igi_alloc(how); in igmp_domifattach()
610 if (igi == NULL) { in igmp_domifattach()
616 IGI_LOCK(igi); in igmp_domifattach()
617 igi_initvar(igi, ifp, 0); in igmp_domifattach()
618 igi->igi_debug |= IFD_ATTACHED; in igmp_domifattach()
619 IGI_ADDREF_LOCKED(igi); /* hold a reference for igi_head */ in igmp_domifattach()
620 IGI_ADDREF_LOCKED(igi); /* hold a reference for caller */ in igmp_domifattach()
621 IGI_UNLOCK(igi); in igmp_domifattach()
623 igmp_initsilent(ifp, igi); in igmp_domifattach()
626 LIST_INSERT_HEAD(&igi_head, igi, igi_link); in igmp_domifattach()
633 return igi; in igmp_domifattach()
641 igmp_domifreattach(struct igmp_ifinfo *igi) in igmp_domifreattach() argument
647 IGI_LOCK(igi); in igmp_domifreattach()
648 VERIFY(!(igi->igi_debug & IFD_ATTACHED)); in igmp_domifreattach()
649 ifp = igi->igi_ifp; in igmp_domifreattach()
651 igi_initvar(igi, ifp, 1); in igmp_domifreattach()
652 igi->igi_debug |= IFD_ATTACHED; in igmp_domifreattach()
653 IGI_ADDREF_LOCKED(igi); /* hold a reference for igi_head */ in igmp_domifreattach()
654 IGI_UNLOCK(igi); in igmp_domifreattach()
656 igmp_initsilent(ifp, igi); in igmp_domifreattach()
659 LIST_INSERT_HEAD(&igi_head, igi, igi_link); in igmp_domifreattach()
697 struct igmp_ifinfo *igi, *tigi; in igi_delete() local
701 LIST_FOREACH_SAFE(igi, &igi_head, igi_link, tigi) { in igi_delete()
702 IGI_LOCK(igi); in igi_delete()
703 if (igi->igi_ifp == ifp) { in igi_delete()
707 IF_DRAIN(&igi->igi_gq); in igi_delete()
708 IF_DRAIN(&igi->igi_v2q); in igi_delete()
709 igmp_flush_relq(igi, inm_dthead); in igi_delete()
710 VERIFY(SLIST_EMPTY(&igi->igi_relinmhead)); 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 VERIFY(SLIST_EMPTY(&igi->igi_relinmhead)); in igi_remref()
842 IGI_UNLOCK(igi); in igi_remref()
850 igi_free(igi); in igi_remref()
861 struct igmp_ifinfo *igi; in igmp_input_v1_query() local
881 igi = IGMP_IFINFO(ifp); in igmp_input_v1_query()
882 VERIFY(igi != NULL); in igmp_input_v1_query()
884 IGI_LOCK(igi); in igmp_input_v1_query()
885 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v1_query()
889 IGI_UNLOCK(igi); in igmp_input_v1_query()
895 itp.qpt = igmp_set_version(igi, IGMP_VERSION_1); in igmp_input_v1_query()
896 IGI_UNLOCK(igi); in igmp_input_v1_query()
950 struct igmp_ifinfo *igi; in igmp_input_v2_query() local
978 igi = IGMP_IFINFO(ifp); in igmp_input_v2_query()
979 VERIFY(igi != NULL); in igmp_input_v2_query()
981 IGI_LOCK(igi); in igmp_input_v2_query()
982 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v2_query()
986 IGI_UNLOCK(igi); in igmp_input_v2_query()
992 if (igi->igi_version == IGMP_VERSION_1) { in igmp_input_v2_query()
993 IGI_UNLOCK(igi); in igmp_input_v2_query()
996 itp.qpt = igmp_set_version(igi, IGMP_VERSION_2); in igmp_input_v2_query()
997 IGI_UNLOCK(igi); in igmp_input_v2_query()
1115 struct igmp_ifinfo *igi; in igmp_input_v3_query() local
1190 igi = IGMP_IFINFO(ifp); in igmp_input_v3_query()
1191 VERIFY(igi != NULL); in igmp_input_v3_query()
1193 IGI_LOCK(igi); in igmp_input_v3_query()
1194 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_input_v3_query()
1198 IGI_UNLOCK(igi); in igmp_input_v3_query()
1208 if (igi->igi_version != IGMP_VERSION_3) { in igmp_input_v3_query()
1210 "ifp 0x%llx(%s)\n", __func__, igi->igi_version, in igmp_input_v3_query()
1212 IGI_UNLOCK(igi); in igmp_input_v3_query()
1216 itp.qpt = igmp_set_version(igi, IGMP_VERSION_3); in igmp_input_v3_query()
1217 igi->igi_rv = qrv; in igmp_input_v3_query()
1218 igi->igi_qi = qqi; in igmp_input_v3_query()
1219 igi->igi_qri = MAX(timer, IGMP_QRI_MIN); in igmp_input_v3_query()
1221 IGMP_PRINTF(("%s: qrv %d qi %d qri %d\n", __func__, igi->igi_rv, in igmp_input_v3_query()
1222 igi->igi_qi, igi->igi_qri)); in igmp_input_v3_query()
1235 if (igi->igi_v3_timer == 0 || igi->igi_v3_timer >= timer) { in igmp_input_v3_query()
1236 itp.it = igi->igi_v3_timer = IGMP_RANDOM_DELAY(timer); in igmp_input_v3_query()
1238 IGI_UNLOCK(igi); in igmp_input_v3_query()
1240 IGI_UNLOCK(igi); in igmp_input_v3_query()
1276 IGI_LOCK(igi); in igmp_input_v3_query()
1277 itp.it = igi->igi_v3_timer; in igmp_input_v3_query()
1278 IGI_UNLOCK(igi); in igmp_input_v3_query()
1452 struct igmp_ifinfo *igi; in igmp_input_v1_report() local
1456 igi = inm->inm_igi; in igmp_input_v1_report()
1457 VERIFY(igi != NULL); in igmp_input_v1_report()
1467 IGI_LOCK(igi); in igmp_input_v1_report()
1468 if (igi->igi_version == IGMP_VERSION_3) { in igmp_input_v1_report()
1472 IGI_UNLOCK(igi); in igmp_input_v1_report()
1501 if (igi->igi_version == IGMP_VERSION_1) { in igmp_input_v1_report()
1503 } else if (igi->igi_version == IGMP_VERSION_2) { in igmp_input_v1_report()
1512 IGI_UNLOCK(igi); in igmp_input_v1_report()
1601 struct igmp_ifinfo *igi; in igmp_input_v2_report() local
1604 igi = inm->inm_igi; in igmp_input_v2_report()
1605 VERIFY(igi != NULL); in igmp_input_v2_report()
1615 IGI_LOCK(igi); in igmp_input_v2_report()
1616 if (igi->igi_version == IGMP_VERSION_3) { in igmp_input_v2_report()
1620 IGI_UNLOCK(igi); in igmp_input_v2_report()
1649 IGI_UNLOCK(igi); in igmp_input_v2_report()
1931 struct igmp_ifinfo *igi; in igmp_timeout() local
1966 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
1967 IGI_LOCK(igi); in igmp_timeout()
1968 igmp_v1v2_process_querier_timers(igi); in igmp_timeout()
1969 if (igi->igi_v1_timer > 0 || igi->igi_v2_timer > 0) { in igmp_timeout()
1972 IGI_UNLOCK(igi); in igmp_timeout()
1982 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
1983 IGI_LOCK(igi); in igmp_timeout()
1984 if (igi->igi_version != IGMP_VERSION_3) { in igmp_timeout()
1985 IGI_UNLOCK(igi); in igmp_timeout()
1988 if (igi->igi_v3_timer == 0) { in igmp_timeout()
1990 } else if (--igi->igi_v3_timer == 0) { in igmp_timeout()
1991 if (igmp_v3_dispatch_general_query(igi) > 0) { in igmp_timeout()
1997 IGI_UNLOCK(igi); in igmp_timeout()
2022 LIST_FOREACH(igi, &igi_head, igi_link) { in igmp_timeout()
2025 IGI_LOCK(igi); in igmp_timeout()
2026 ifp = igi->igi_ifp; in igmp_timeout()
2027 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0; in igmp_timeout()
2028 uri_sec = IGMP_RANDOM_DELAY(igi->igi_uri); in igmp_timeout()
2029 IGI_UNLOCK(igi); in igmp_timeout()
2039 IGI_LOCK(igi); in igmp_timeout()
2040 switch (igi->igi_version) { in igmp_timeout()
2044 igi->igi_version); in igmp_timeout()
2047 igmp_v3_process_group_timers(igi, &qrq, in igmp_timeout()
2051 IGI_UNLOCK(igi); in igmp_timeout()
2058 IGI_LOCK(igi); in igmp_timeout()
2059 if (igi->igi_version == IGMP_VERSION_1 || in igmp_timeout()
2060 igi->igi_version == IGMP_VERSION_2) { in igmp_timeout()
2061 igmp_dispatch_queue(igi, &igi->igi_v2q, 0, loop); in igmp_timeout()
2062 } else if (igi->igi_version == IGMP_VERSION_3) { in igmp_timeout()
2063 IGI_UNLOCK(igi); in igmp_timeout()
2068 IGI_LOCK(igi); in igmp_timeout()
2074 IF_DRAIN(&igi->igi_v2q); in igmp_timeout()
2081 igmp_flush_relq(igi, (struct igmp_inm_relhead *)&inm_dthead); in igmp_timeout()
2082 VERIFY(SLIST_EMPTY(&igi->igi_relinmhead)); in igmp_timeout()
2083 IGI_UNLOCK(igi); in igmp_timeout()
2157 igmp_flush_relq(struct igmp_ifinfo *igi, struct igmp_inm_relhead *inm_dthead) in igmp_flush_relq() argument
2162 IGI_LOCK_ASSERT_HELD(igi); in igmp_flush_relq()
2163 inm = SLIST_FIRST(&igi->igi_relinmhead); in igmp_flush_relq()
2167 SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); in igmp_flush_relq()
2168 IGI_UNLOCK(igi); in igmp_flush_relq()
2193 IGI_LOCK(igi); in igmp_flush_relq()
2253 igmp_v3_process_group_timers(struct igmp_ifinfo *igi, in igmp_v3_process_group_timers() argument
2262 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_process_group_timers()
2263 VERIFY(igi == inm->inm_igi); in igmp_v3_process_group_timers()
2374 SLIST_INSERT_HEAD(&igi->igi_relinmhead, in igmp_v3_process_group_timers()
2417 igmp_set_version(struct igmp_ifinfo *igi, const int igmp_version) in igmp_set_version() argument
2421 IGI_LOCK_ASSERT_HELD(igi); in igmp_set_version()
2424 igmp_version, (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_set_version()
2425 if_name(igi->igi_ifp))); in igmp_set_version()
2432 old_version_timer = igi->igi_rv * igi->igi_qi + igi->igi_qri; in igmp_set_version()
2435 igi->igi_v1_timer = old_version_timer; in igmp_set_version()
2436 igi->igi_v2_timer = 0; in igmp_set_version()
2438 igi->igi_v1_timer = 0; in igmp_set_version()
2439 igi->igi_v2_timer = old_version_timer; in igmp_set_version()
2443 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) { in igmp_set_version()
2444 if (igi->igi_version != IGMP_VERSION_2) { in igmp_set_version()
2445 igmp_v3_cancel_link_timers(igi); in igmp_set_version()
2446 igi->igi_version = IGMP_VERSION_2; in igmp_set_version()
2448 } else if (igi->igi_v1_timer > 0) { in igmp_set_version()
2449 if (igi->igi_version != IGMP_VERSION_1) { in igmp_set_version()
2450 igmp_v3_cancel_link_timers(igi); in igmp_set_version()
2451 igi->igi_version = IGMP_VERSION_1; in igmp_set_version()
2455 IGI_LOCK_ASSERT_HELD(igi); in igmp_set_version()
2457 return MAX(igi->igi_v1_timer, igi->igi_v2_timer); in igmp_set_version()
2470 igmp_v3_cancel_link_timers(struct igmp_ifinfo *igi) in igmp_v3_cancel_link_timers() argument
2476 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_cancel_link_timers()
2479 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), if_name(igi->igi_ifp))); in igmp_v3_cancel_link_timers()
2486 igi->igi_v3_timer = 0; in igmp_v3_cancel_link_timers()
2492 ifp = igi->igi_ifp; in igmp_v3_cancel_link_timers()
2493 IGI_UNLOCK(igi); in igmp_v3_cancel_link_timers()
2499 if (inm->inm_ifp != ifp && inm->inm_igi != igi) { in igmp_v3_cancel_link_timers()
2529 IGI_LOCK(igi); in igmp_v3_cancel_link_timers()
2530 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_v3_cancel_link_timers()
2531 IGI_UNLOCK(igi); in igmp_v3_cancel_link_timers()
2554 IGI_LOCK(igi); in igmp_v3_cancel_link_timers()
2562 igmp_v1v2_process_querier_timers(struct igmp_ifinfo *igi) in igmp_v1v2_process_querier_timers() argument
2564 IGI_LOCK_ASSERT_HELD(igi); in igmp_v1v2_process_querier_timers()
2566 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer == 0) { in igmp_v1v2_process_querier_timers()
2572 if (igi->igi_version != IGMP_VERSION_3) { in igmp_v1v2_process_querier_timers()
2575 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2576 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2577 if_name(igi->igi_ifp))); in igmp_v1v2_process_querier_timers()
2578 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2579 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2581 } else if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) { in igmp_v1v2_process_querier_timers()
2592 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2593 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2594 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2595 igi->igi_v2_timer = 0; in igmp_v1v2_process_querier_timers()
2596 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2597 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2599 --igi->igi_v2_timer; in igmp_v1v2_process_querier_timers()
2600 if (igi->igi_version != IGMP_VERSION_2) { in igmp_v1v2_process_querier_timers()
2603 igi->igi_version, IGMP_VERSION_2, in igmp_v1v2_process_querier_timers()
2604 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2605 if_name(igi->igi_ifp))); in igmp_v1v2_process_querier_timers()
2606 IF_DRAIN(&igi->igi_gq); in igmp_v1v2_process_querier_timers()
2607 igmp_v3_cancel_link_timers(igi); in igmp_v1v2_process_querier_timers()
2608 igi->igi_version = IGMP_VERSION_2; in igmp_v1v2_process_querier_timers()
2611 } else if (igi->igi_v1_timer > 0) { in igmp_v1v2_process_querier_timers()
2623 igi->igi_version, IGMP_VERSION_3, in igmp_v1v2_process_querier_timers()
2624 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2625 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2626 igi->igi_v1_timer = 0; in igmp_v1v2_process_querier_timers()
2627 igi->igi_version = IGMP_VERSION_3; in igmp_v1v2_process_querier_timers()
2628 IF_DRAIN(&igi->igi_v2q); in igmp_v1v2_process_querier_timers()
2630 --igi->igi_v1_timer; in igmp_v1v2_process_querier_timers()
2632 if (igi->igi_v2_timer > 0) { in igmp_v1v2_process_querier_timers()
2635 (uint64_t)VM_KERNEL_ADDRPERM(igi->igi_ifp), in igmp_v1v2_process_querier_timers()
2636 igi->igi_ifp->if_name, igi->igi_ifp->if_unit)); in igmp_v1v2_process_querier_timers()
2637 igi->igi_v2_timer = 0; in igmp_v1v2_process_querier_timers()
2741 struct igmp_ifinfo *igi; in igmp_change_state() local
2763 igi = IGMP_IFINFO(ifp); in igmp_change_state()
2764 VERIFY(igi != NULL); in igmp_change_state()
2776 error = igmp_initial_join(inm, igi, itp); in igmp_change_state()
2780 igmp_final_leave(inm, igi, itp); in igmp_change_state()
2787 error = igmp_handle_state_change(inm, igi, itp); in igmp_change_state()
2803 igmp_initial_join(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_initial_join() argument
2811 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_initial_join()
2824 IGI_LOCK(igi); in igmp_initial_join()
2825 VERIFY(igi->igi_ifp == ifp); in igmp_initial_join()
2837 (igi->igi_flags & IGIF_SILENT) || in igmp_initial_join()
2852 if (igi->igi_version == IGMP_VERSION_3 && in igmp_initial_join()
2855 SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); in igmp_initial_join()
2860 switch (igi->igi_version) { in igmp_initial_join()
2865 (igi->igi_version == IGMP_VERSION_2) ? in igmp_initial_join()
2870 IGI_LOCK_ASSERT_HELD(igi); in igmp_initial_join()
2910 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_initial_join()
2913 VERIFY(igi->igi_rv > 1); in igmp_initial_join()
2914 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_initial_join()
2923 IGI_UNLOCK(igi); in igmp_initial_join()
2944 igmp_handle_state_change(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_handle_state_change() argument
2951 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_handle_state_change()
2961 IGI_LOCK(igi); in igmp_handle_state_change()
2962 VERIFY(igi->igi_ifp == ifp); in igmp_handle_state_change()
2965 (igi->igi_flags & IGIF_SILENT) || in igmp_handle_state_change()
2967 (igi->igi_version != IGMP_VERSION_3)) { in igmp_handle_state_change()
2968 IGI_UNLOCK(igi); in igmp_handle_state_change()
2987 IGI_UNLOCK(igi); in igmp_handle_state_change()
2995 inm->inm_scrv = ((igi->igi_flags & IGIF_LOOPBACK) ? 1 : (uint16_t)igi->igi_rv); in igmp_handle_state_change()
2998 IGI_UNLOCK(igi); in igmp_handle_state_change()
3013 igmp_final_leave(struct in_multi *inm, struct igmp_ifinfo *igi, in igmp_final_leave() argument
3020 IGI_LOCK_ASSERT_NOTHELD(igi); in igmp_final_leave()
3041 IGI_LOCK(igi); in igmp_final_leave()
3042 if (igi->igi_version == IGMP_VERSION_2) { in igmp_final_leave()
3051 IGI_UNLOCK(igi); in igmp_final_leave()
3067 IGI_LOCK_ASSERT_HELD(igi); in igmp_final_leave()
3070 } else if (igi->igi_version == IGMP_VERSION_3) { in igmp_final_leave()
3079 if (igi->igi_flags & IGIF_LOOPBACK) { in igmp_final_leave()
3082 inm->inm_scrv = (uint16_t)igi->igi_rv; in igmp_final_leave()
3120 IGI_UNLOCK(igi); in igmp_final_leave()
3908 igmp_v3_dispatch_general_query(struct igmp_ifinfo *igi) in igmp_v3_dispatch_general_query() argument
3915 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_dispatch_general_query()
3917 VERIFY(igi->igi_version == IGMP_VERSION_3); in igmp_v3_dispatch_general_query()
3919 ifp = igi->igi_ifp; in igmp_v3_dispatch_general_query()
3920 IGI_UNLOCK(igi); in igmp_v3_dispatch_general_query()
3940 IGI_LOCK(igi); in igmp_v3_dispatch_general_query()
3941 retval = igmp_v3_enqueue_group_record(&igi->igi_gq, in igmp_v3_dispatch_general_query()
3943 IGI_UNLOCK(igi); in igmp_v3_dispatch_general_query()
3958 IGI_LOCK(igi); in igmp_v3_dispatch_general_query()
3959 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0; in igmp_v3_dispatch_general_query()
3960 igmp_dispatch_queue(igi, &igi->igi_gq, IGMP_MAX_RESPONSE_BURST, in igmp_v3_dispatch_general_query()
3962 IGI_LOCK_ASSERT_HELD(igi); in igmp_v3_dispatch_general_query()
3966 if (igi->igi_gq.ifq_head != NULL) { in igmp_v3_dispatch_general_query()
3967 igi->igi_v3_timer = 1 + IGMP_RANDOM_DELAY( in igmp_v3_dispatch_general_query()
3971 return igi->igi_v3_timer; in igmp_v3_dispatch_general_query()