Lines Matching defs:inm

536 	struct in6_multi	*inm, *tinm;
551 inm = (struct in6_multi *)ifma->ifma_protospec;
552 if (inm->in6m_state == MLD_LEAVING_MEMBER) {
554 inm, in6m_nrele);
556 in6m_clear_recorded(inm);
559 SLIST_FOREACH_SAFE(inm, &mli->mli_relinmhead, in6m_nrele,
562 in6m_release_locked(inm);
632 struct in6_multi *inm;
709 inm = (struct in6_multi *)ifma->ifma_protospec;
710 mld_v1_update_group(inm, timer);
718 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
719 if (inm != NULL) {
723 mld_v1_update_group(inm, timer);
752 mld_v1_update_group(struct in6_multi *inm, const int timer)
759 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
760 inm->in6m_ifp->if_xname, timer);
764 switch (inm->in6m_state) {
769 if (inm->in6m_timer != 0 &&
770 inm->in6m_timer <= timer) {
782 inm->in6m_state = MLD_REPORTING_MEMBER;
783 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
788 inm->in6m_state = MLD_AWAKENING_MEMBER;
809 struct in6_multi *inm;
935 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
936 if (inm == NULL) {
941 if (!ratecheck(&inm->in6m_lastgsrtv,
959 mld_v2_process_group_query(inm, mli, timer, m, off);
979 mld_v2_process_group_query(struct in6_multi *inm, struct mld_ifinfo *mli,
992 switch (inm->in6m_state) {
1017 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER ||
1018 inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER) {
1019 in6m_clear_recorded(inm);
1020 timer = min(inm->in6m_timer, timer);
1022 inm->in6m_state = MLD_G_QUERY_PENDING_MEMBER;
1023 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1032 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER) {
1033 timer = min(inm->in6m_timer, timer);
1034 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1050 if (inm->in6m_nsrc > 0) {
1061 retval = in6m_record_source(inm,
1077 inm->in6m_state = MLD_SG_QUERY_PENDING_MEMBER;
1078 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1099 struct in6_multi *inm;
1181 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
1182 if (inm != NULL) {
1185 mli = inm->in6m_mli;
1196 inm->in6m_timer = 0;
1198 switch (inm->in6m_state) {
1211 inm->in6m_state = MLD_LAZY_MEMBER;
1335 struct in6_multi *inm, *tinm;
1403 inm = (struct in6_multi *)ifma->ifma_protospec;
1406 mld_v1_process_group_timer(mli, inm);
1410 &scq, inm, uri_fasthz);
1426 SLIST_FOREACH_SAFE(inm, &mli->mli_relinmhead,
1430 (void)mld_v1_transmit_report(inm,
1442 SLIST_FOREACH_SAFE(inm, &mli->mli_relinmhead,
1446 in6m_release_locked(inm);
1462 mld_v1_process_group_timer(struct mld_ifinfo *mli, struct in6_multi *inm)
1469 if (inm->in6m_timer == 0) {
1471 } else if (--inm->in6m_timer == 0) {
1478 switch (inm->in6m_state) {
1488 inm->in6m_state = MLD_IDLE_MEMBER;
1489 SLIST_INSERT_HEAD(&mli->mli_relinmhead, inm,
1508 struct in6_multi *inm, const int uri_fasthz)
1528 if (inm->in6m_timer == 0) {
1530 } else if (--inm->in6m_timer == 0) {
1536 if (inm->in6m_sctimer == 0) {
1538 } else if (--inm->in6m_sctimer == 0) {
1549 switch (inm->in6m_state) {
1568 retval = mld_v2_enqueue_group_record(qrq, inm, 0, 1,
1569 (inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER),
1573 inm->in6m_state = MLD_REPORTING_MEMBER;
1574 in6m_clear_recorded(inm);
1586 if (--inm->in6m_scrv > 0) {
1587 inm->in6m_sctimer = uri_fasthz;
1597 (void)mld_v2_merge_state_changes(inm, scq);
1599 in6m_commit(inm);
1601 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
1602 inm->in6m_ifp->if_xname);
1611 if (inm->in6m_state == MLD_LEAVING_MEMBER &&
1612 inm->in6m_scrv == 0) {
1613 inm->in6m_state = MLD_NOT_MEMBER;
1615 inm, in6m_nrele);
1661 struct in6_multi *inm, *tinm;
1686 inm = (struct in6_multi *)ifma->ifma_protospec;
1687 switch (inm->in6m_state) {
1701 SLIST_INSERT_HEAD(&mli->mli_relinmhead, inm,
1706 in6m_clear_recorded(inm);
1709 inm->in6m_sctimer = 0;
1710 inm->in6m_timer = 0;
1711 inm->in6m_state = MLD_REPORTING_MEMBER;
1715 _IF_DRAIN(&inm->in6m_scq);
1720 SLIST_FOREACH_SAFE(inm, &mli->mli_relinmhead, in6m_nrele, tinm) {
1722 in6m_release_locked(inm);
1880 mld_change_state(struct in6_multi *inm, const int delay)
1894 KASSERT(inm->in6m_ifma != NULL, ("%s: no ifma", __func__));
1895 ifp = inm->in6m_ifma->ifma_ifp;
1901 KASSERT(inm->in6m_ifp == ifp, ("%s: bad ifp", __func__));
1914 if (inm->in6m_st[1].iss_fmode != inm->in6m_st[0].iss_fmode) {
1915 CTR3(KTR_MLD, "%s: inm transition %d -> %d", __func__,
1916 inm->in6m_st[0].iss_fmode, inm->in6m_st[1].iss_fmode);
1917 if (inm->in6m_st[0].iss_fmode == MCAST_UNDEFINED) {
1919 error = mld_initial_join(inm, mli, delay);
1921 } else if (inm->in6m_st[1].iss_fmode == MCAST_UNDEFINED) {
1923 mld_final_leave(inm, mli);
1930 error = mld_handle_state_change(inm, mli);
1950 mld_initial_join(struct in6_multi *inm, struct mld_ifinfo *mli,
1962 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
1963 inm->in6m_ifp, inm->in6m_ifp->if_xname);
1968 ifp = inm->in6m_ifp;
1986 !mld_is_addr_reported(&inm->in6m_addr)) {
1989 inm->in6m_state = MLD_SILENT_MEMBER;
1990 inm->in6m_timer = 0;
1999 inm->in6m_state == MLD_LEAVING_MEMBER)
2000 in6m_release_locked(inm);
2002 inm->in6m_state = MLD_REPORTING_MEMBER;
2015 inm->in6m_timer = max(delay, odelay);
2018 inm->in6m_state = MLD_IDLE_MEMBER;
2019 error = mld_v1_transmit_report(inm,
2022 inm->in6m_timer = odelay;
2041 ifq = &inm->in6m_scq;
2043 retval = mld_v2_enqueue_group_record(ifq, inm, 1,
2064 inm->in6m_scrv = mli->mli_rv;
2066 if (inm->in6m_sctimer > 1) {
2067 inm->in6m_sctimer =
2068 min(inm->in6m_sctimer, delay);
2070 inm->in6m_sctimer = delay;
2072 inm->in6m_sctimer = 1;
2086 in6m_commit(inm);
2088 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2089 inm->in6m_ifp->if_xname);
2099 mld_handle_state_change(struct in6_multi *inm, struct mld_ifinfo *mli)
2108 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2109 inm->in6m_ifp, inm->in6m_ifp->if_xname);
2111 ifp = inm->in6m_ifp;
2121 !mld_is_addr_reported(&inm->in6m_addr) ||
2123 if (!mld_is_addr_reported(&inm->in6m_addr)) {
2128 in6m_commit(inm);
2130 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2131 inm->in6m_ifp->if_xname);
2135 _IF_DRAIN(&inm->in6m_scq);
2137 retval = mld_v2_enqueue_group_record(&inm->in6m_scq, inm, 1, 0, 0,
2147 inm->in6m_scrv = mli->mli_rv;
2148 inm->in6m_sctimer = 1;
2163 mld_final_leave(struct in6_multi *inm, struct mld_ifinfo *mli)
2173 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2174 inm->in6m_ifp, inm->in6m_ifp->if_xname);
2179 switch (inm->in6m_state) {
2193 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER ||
2194 inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER)
2198 mld_v1_transmit_report(inm, MLD_LISTENER_DONE);
2199 inm->in6m_state = MLD_NOT_MEMBER;
2208 _IF_DRAIN(&inm->in6m_scq);
2209 inm->in6m_timer = 0;
2210 inm->in6m_scrv = mli->mli_rv;
2213 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2214 inm->in6m_ifp->if_xname, inm->in6m_scrv);
2215 if (inm->in6m_scrv == 0) {
2216 inm->in6m_state = MLD_NOT_MEMBER;
2217 inm->in6m_sctimer = 0;
2221 in6m_acquire_locked(inm);
2224 &inm->in6m_scq, inm, 1, 0, 0,
2230 inm->in6m_state = MLD_LEAVING_MEMBER;
2231 inm->in6m_sctimer = 1;
2246 in6m_commit(inm);
2248 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2249 inm->in6m_ifp->if_xname);
2250 inm->in6m_st[1].iss_fmode = MCAST_UNDEFINED;
2252 __func__, &inm->in6m_addr, inm->in6m_ifp->if_xname);
2284 mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
2306 ifp = inm->in6m_ifp;
2317 mode = inm->in6m_st[1].iss_fmode;
2324 if (inm->in6m_st[0].iss_asm > 0 && inm->in6m_st[1].iss_asm > 0 &&
2325 inm->in6m_nsrc == 0)
2345 if (mode != inm->in6m_st[0].iss_fmode) {
2389 KASSERT(inm->in6m_st[1].iss_asm == 0,
2390 ("%s: inm %p is INCLUDE but ASM count is %d",
2391 __func__, inm, inm->in6m_st[1].iss_asm));
2399 return (mld_v2_enqueue_filter_change(ifq, inm));
2403 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2404 inm->in6m_ifp->if_xname);
2419 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2420 inm->in6m_ifp->if_xname);
2468 mr.mr_addr = inm->in6m_addr;
2505 RB_FOREACH_SAFE(ims, ip6_msource_tree, &inm->in6m_srcs,
2509 now = im6s_get_mode(inm, ims, 1);
2601 now = im6s_get_mode(inm, ims, 1);
2670 mld_v2_enqueue_filter_change(struct ifqueue *ifq, struct in6_multi *inm)
2689 if (inm->in6m_nsrc == 0 ||
2690 (inm->in6m_st[0].iss_asm > 0 && inm->in6m_st[1].iss_asm > 0))
2693 ifp = inm->in6m_ifp; /* interface */
2694 mode = inm->in6m_st[1].iss_fmode; /* filter mode at t1 */
2754 mr.mr_addr = inm->in6m_addr;
2789 &inm->in6m_srcs);
2794 now = im6s_get_mode(inm, ims, 1);
2795 then = im6s_get_mode(inm, ims, 0);
2874 mld_v2_merge_state_changes(struct in6_multi *inm, struct ifqueue *ifscq)
2894 if (inm->in6m_scrv > 0)
2897 gq = &inm->in6m_scq;
2900 CTR2(KTR_MLD, "%s: WARNING: queue for inm %p is empty",
2901 __func__, inm);
2924 (inm->in6m_ifp->if_mtu - MLD_MTUSPACE)))
2983 struct in6_multi *inm;
3000 inm = (struct in6_multi *)ifma->ifma_protospec;
3001 KASSERT(ifp == inm->in6m_ifp,
3004 switch (inm->in6m_state) {
3013 inm->in6m_state = MLD_REPORTING_MEMBER;
3015 inm, 0, 0, 0, 0);