Lines Matching defs:igi
489 struct igmp_ifsoftc *igi;
515 LIST_FOREACH(igi, &V_igi_head, igi_link) {
516 if (ifp == igi->igi_ifp) {
519 info.igi_version = igi->igi_version;
520 info.igi_v1_timer = igi->igi_v1_timer;
521 info.igi_v2_timer = igi->igi_v2_timer;
522 info.igi_v3_timer = igi->igi_v3_timer;
523 info.igi_flags = igi->igi_flags;
524 info.igi_rv = igi->igi_rv;
525 info.igi_qi = igi->igi_qi;
526 info.igi_qri = igi->igi_qri;
527 info.igi_uri = igi->igi_uri;
612 struct igmp_ifsoftc *igi;
619 igi = igi_alloc_locked(ifp);
621 igi->igi_flags |= IGIF_SILENT;
625 return (igi);
634 struct igmp_ifsoftc *igi;
638 igi = malloc(sizeof(struct igmp_ifsoftc), M_IGMP, M_NOWAIT|M_ZERO);
639 if (igi == NULL)
642 igi->igi_ifp = ifp;
643 igi->igi_version = V_igmp_default_version;
644 igi->igi_flags = 0;
645 igi->igi_rv = IGMP_RV_INIT;
646 igi->igi_qi = IGMP_QI_INIT;
647 igi->igi_qri = IGMP_QRI_INIT;
648 igi->igi_uri = IGMP_URI_INIT;
649 mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS);
651 LIST_INSERT_HEAD(&V_igi_head, igi, igi_link);
657 return (igi);
673 struct igmp_ifsoftc *igi;
683 igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
684 if (igi->igi_version == IGMP_VERSION_3) {
721 struct igmp_ifsoftc *igi, *tigi;
728 LIST_FOREACH_SAFE(igi, &V_igi_head, igi_link, tigi) {
729 if (igi->igi_ifp == ifp) {
733 mbufq_drain(&igi->igi_gq);
735 LIST_REMOVE(igi, igi_link);
736 free(igi, M_IGMP);
753 struct igmp_ifsoftc *igi;
774 igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
775 KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
777 if (igi->igi_flags & IGIF_LOOPBACK) {
786 igmp_set_version(igi, IGMP_VERSION_1);
837 struct igmp_ifsoftc *igi;
867 igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
868 KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
870 if (igi->igi_flags & IGIF_LOOPBACK) {
879 if (igi->igi_version == IGMP_VERSION_1)
882 igmp_set_version(igi, IGMP_VERSION_2);
987 struct igmp_ifsoftc *igi;
1059 igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
1060 KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
1062 if (igi->igi_flags & IGIF_LOOPBACK) {
1074 if (igi->igi_version != IGMP_VERSION_3) {
1076 igi->igi_version, ifp, ifp->if_xname);
1080 igmp_set_version(igi, IGMP_VERSION_3);
1081 igi->igi_rv = qrv;
1082 igi->igi_qi = qqi;
1083 igi->igi_qri = maxresp;
1099 if (igi->igi_v3_timer == 0 || igi->igi_v3_timer >= timer) {
1100 igi->igi_v3_timer = IGMP_RANDOM_DELAY(timer);
1131 if (igi->igi_v3_timer == 0 || igi->igi_v3_timer >= timer)
1132 igmp_input_v3_group_query(inm, igi, timer, igmpv3);
1148 igmp_input_v3_group_query(struct in_multi *inm, struct igmp_ifsoftc *igi,
1291 struct igmp_ifsoftc *igi;
1293 igi = inm->inm_igi;
1294 if (igi == NULL) {
1295 KASSERT(igi != NULL,
1296 ("%s: no igi for ifp %p", __func__, ifp));
1307 if (igi->igi_version == IGMP_VERSION_3) {
1334 if (igi->igi_version == IGMP_VERSION_1)
1336 else if (igi->igi_version == IGMP_VERSION_2)
1410 struct igmp_ifsoftc *igi;
1412 igi = inm->inm_igi;
1413 KASSERT(igi != NULL, ("%s: no igi for ifp %p", __func__, ifp));
1422 if (igi->igi_version == IGMP_VERSION_3) {
1684 struct igmp_ifsoftc *igi;
1714 LIST_FOREACH(igi, &V_igi_head, igi_link) {
1715 if (igi->igi_v3_timer == 0) {
1717 } else if (--igi->igi_v3_timer == 0) {
1718 igmp_v3_dispatch_general_query(igi);
1738 LIST_FOREACH(igi, &V_igi_head, igi_link) {
1739 ifp = igi->igi_ifp;
1741 if (igi->igi_version == IGMP_VERSION_3) {
1742 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0;
1743 uri_fasthz = IGMP_RANDOM_DELAY(igi->igi_uri *
1754 switch (igi->igi_version) {
1758 igi->igi_version);
1768 if (igi->igi_version == IGMP_VERSION_3) {
1833 * Note: Unlocked read from igi.
1982 igmp_set_version(struct igmp_ifsoftc *igi, const int version)
1989 version, igi->igi_ifp, igi->igi_ifp->if_xname);
1996 old_version_timer = igi->igi_rv * igi->igi_qi + igi->igi_qri;
2000 igi->igi_v1_timer = old_version_timer;
2001 igi->igi_v2_timer = 0;
2003 igi->igi_v1_timer = 0;
2004 igi->igi_v2_timer = old_version_timer;
2008 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) {
2009 if (igi->igi_version != IGMP_VERSION_2) {
2010 igi->igi_version = IGMP_VERSION_2;
2011 igmp_v3_cancel_link_timers(igi);
2013 } else if (igi->igi_v1_timer > 0) {
2014 if (igi->igi_version != IGMP_VERSION_1) {
2015 igi->igi_version = IGMP_VERSION_1;
2016 igmp_v3_cancel_link_timers(igi);
2031 igmp_v3_cancel_link_timers(struct igmp_ifsoftc *igi)
2039 igi->igi_ifp, igi->igi_ifp->if_xname);
2052 igi->igi_v3_timer = 0;
2058 ifp = igi->igi_ifp;
2113 igmp_v1v2_process_querier_timers(struct igmp_ifsoftc *igi)
2118 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer == 0) {
2125 igi->igi_version != IGMP_VERSION_3) {
2128 __func__, igi->igi_version, IGMP_VERSION_3,
2129 igi->igi_ifp, igi->igi_ifp->if_xname);
2130 igi->igi_version = IGMP_VERSION_3;
2132 } else if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) {
2144 __func__, igi->igi_version, IGMP_VERSION_3,
2145 igi->igi_ifp, igi->igi_ifp->if_xname);
2146 igi->igi_v2_timer = 0;
2147 igi->igi_version = IGMP_VERSION_3;
2149 --igi->igi_v2_timer;
2151 igi->igi_version != IGMP_VERSION_2) {
2154 __func__, igi->igi_version, IGMP_VERSION_2,
2155 igi->igi_ifp, igi->igi_ifp->if_xname);
2156 igi->igi_version = IGMP_VERSION_2;
2157 igmp_v3_cancel_link_timers(igi);
2160 } else if (igi->igi_v1_timer > 0) {
2173 __func__, igi->igi_version, IGMP_VERSION_3,
2174 igi->igi_ifp, igi->igi_ifp->if_xname);
2175 igi->igi_v1_timer = 0;
2176 igi->igi_version = IGMP_VERSION_3;
2178 --igi->igi_v1_timer;
2180 if (igi->igi_v2_timer > 0) {
2183 __func__, igi->igi_ifp, igi->igi_ifp->if_xname);
2184 igi->igi_v2_timer = 0;
2219 struct igmp_ifsoftc *igi;
2223 LIST_FOREACH(igi, &V_igi_head, igi_link) {
2224 igmp_v1v2_process_querier_timers(igi);
2318 struct igmp_ifsoftc *igi;
2340 igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
2341 KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
2353 error = igmp_initial_join(inm, igi);
2357 igmp_final_leave(inm, igi);
2364 error = igmp_handle_state_change(inm, igi);
2382 igmp_initial_join(struct in_multi *inm, struct igmp_ifsoftc *igi)
2399 KASSERT(igi && igi->igi_ifp == ifp, ("%s: inconsistent ifp", __func__));
2411 (igi->igi_flags & IGIF_SILENT) ||
2424 if (igi->igi_version == IGMP_VERSION_3 &&
2431 switch (igi->igi_version) {
2436 (igi->igi_version == IGMP_VERSION_2) ?
2476 if (igi->igi_flags & IGIF_LOOPBACK) {
2479 KASSERT(igi->igi_rv > 1,
2481 igi->igi_rv));
2482 inm->inm_scrv = igi->igi_rv;
2510 igmp_handle_state_change(struct in_multi *inm, struct igmp_ifsoftc *igi)
2523 KASSERT(igi && igi->igi_ifp == ifp, ("%s: inconsistent ifp", __func__));
2526 (igi->igi_flags & IGIF_SILENT) ||
2528 (igi->igi_version != IGMP_VERSION_3)) {
2551 inm->inm_scrv = ((igi->igi_flags & IGIF_LOOPBACK) ? 1 : igi->igi_rv);
2568 igmp_final_leave(struct in_multi *inm, struct igmp_ifsoftc *igi)
2593 if (igi->igi_version == IGMP_VERSION_2) {
2602 } else if (igi->igi_version == IGMP_VERSION_3) {
2611 if (igi->igi_flags & IGIF_LOOPBACK) {
2614 inm->inm_scrv = igi->igi_rv;
3365 igmp_v3_dispatch_general_query(struct igmp_ifsoftc *igi)
3376 KASSERT(igi->igi_version == IGMP_VERSION_3,
3377 ("%s: called when version %d", __func__, igi->igi_version));
3385 if (!mbufq_empty(&igi->igi_gq))
3388 ifp = igi->igi_ifp;
3407 retval = igmp_v3_enqueue_group_record(&igi->igi_gq,
3420 loop = (igi->igi_flags & IGIF_LOOPBACK) ? 1 : 0;
3421 igmp_dispatch_queue(&igi->igi_gq, IGMP_MAX_RESPONSE_BURST, loop);
3426 if (mbufq_first(&igi->igi_gq) != NULL) {
3427 igi->igi_v3_timer = 1 + IGMP_RANDOM_DELAY(
3657 struct igmp_ifsoftc *igi, *tigi;
3666 LIST_FOREACH_SAFE(igi, igi_head, igi_link, tigi) {
3667 db_printf("igmp_ifsoftc %p:\n", igi);
3668 db_printf(" ifp %p\n", igi->igi_ifp);
3669 db_printf(" version %u\n", igi->igi_version);
3670 db_printf(" v1_timer %u\n", igi->igi_v1_timer);
3671 db_printf(" v2_timer %u\n", igi->igi_v2_timer);
3672 db_printf(" v3_timer %u\n", igi->igi_v3_timer);
3673 db_printf(" flags %#x\n", igi->igi_flags);
3674 db_printf(" rv %u\n", igi->igi_rv);
3675 db_printf(" qi %u\n", igi->igi_qi);
3676 db_printf(" qri %u\n", igi->igi_qri);
3677 db_printf(" uri %u\n", igi->igi_uri);