• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/netinet6/

Lines Matching refs:inm

547 	struct in6_multi	*inm;
563 inm = in6m_ifmultiaddr_get_inm(ifma);
564 if (inm == NULL)
566 in6m_disconnect_locked(inmh, inm);
569 in6m_clear_recorded(inm);
575 if (inm->in6m_state == MLD_LEAVING_MEMBER) {
576 inm->in6m_state = MLD_NOT_MEMBER;
577 in6m_rele_locked(inmh, inm);
642 struct in6_multi *inm;
717 inm = in6m_ifmultiaddr_get_inm(ifma);
718 if (inm == NULL)
720 mld_v1_update_group(inm, timer);
728 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
729 if (inm != NULL) {
733 mld_v1_update_group(inm, timer);
761 mld_v1_update_group(struct in6_multi *inm, const int timer)
768 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
769 if_name(inm->in6m_ifp), timer);
773 switch (inm->in6m_state) {
778 if (inm->in6m_timer != 0 &&
779 inm->in6m_timer <= timer) {
791 inm->in6m_state = MLD_REPORTING_MEMBER;
792 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
797 inm->in6m_state = MLD_AWAKENING_MEMBER;
818 struct in6_multi *inm;
950 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
951 if (inm == NULL)
954 if (!ratecheck(&inm->in6m_lastgsrtv,
971 mld_v2_process_group_query(inm, mli, timer, m, mld, off);
990 mld_v2_process_group_query(struct in6_multi *inm, struct mld_ifsoftc *mli,
1001 switch (inm->in6m_state) {
1034 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER ||
1035 inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER) {
1036 in6m_clear_recorded(inm);
1037 timer = min(inm->in6m_timer, timer);
1039 inm->in6m_state = MLD_G_QUERY_PENDING_MEMBER;
1040 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1049 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER) {
1050 timer = min(inm->in6m_timer, timer);
1051 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1067 if (inm->in6m_nsrc > 0) {
1077 retval = in6m_record_source(inm, &srcaddr);
1086 inm->in6m_state = MLD_SG_QUERY_PENDING_MEMBER;
1087 inm->in6m_timer = MLD_RANDOM_DELAY(timer);
1108 struct in6_multi *inm;
1191 inm = in6m_lookup_locked(ifp, &mld->mld_addr);
1192 if (inm != NULL) {
1195 mli = inm->in6m_mli;
1206 inm->in6m_timer = 0;
1208 switch (inm->in6m_state) {
1221 inm->in6m_state = MLD_LAZY_MEMBER;
1361 struct in6_multi *inm;
1423 inm = in6m_ifmultiaddr_get_inm(ifma);
1424 if (inm == NULL)
1428 mld_v1_process_group_timer(inmh, inm);
1432 &scq, inm, uri_fasthz);
1448 while ((inm = SLIST_FIRST(inmh)) != NULL) {
1450 (void)mld_v1_transmit_report(inm,
1472 mld_v1_process_group_timer(struct in6_multi_head *inmh, struct in6_multi *inm)
1479 if (inm->in6m_timer == 0) {
1481 } else if (--inm->in6m_timer == 0) {
1488 switch (inm->in6m_state) {
1498 inm->in6m_state = MLD_IDLE_MEMBER;
1499 SLIST_INSERT_HEAD(inmh, inm, in6m_defer);
1517 struct in6_multi *inm, const int uri_fasthz)
1537 if (inm->in6m_timer == 0) {
1539 } else if (--inm->in6m_timer == 0) {
1545 if (inm->in6m_sctimer == 0) {
1547 } else if (--inm->in6m_sctimer == 0) {
1558 switch (inm->in6m_state) {
1577 retval = mld_v2_enqueue_group_record(qrq, inm, 0, 1,
1578 (inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER),
1582 inm->in6m_state = MLD_REPORTING_MEMBER;
1583 in6m_clear_recorded(inm);
1595 if (--inm->in6m_scrv > 0) {
1596 inm->in6m_sctimer = uri_fasthz;
1606 (void)mld_v2_merge_state_changes(inm, scq);
1608 in6m_commit(inm);
1610 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
1611 if_name(inm->in6m_ifp));
1620 if (inm->in6m_state == MLD_LEAVING_MEMBER &&
1621 inm->in6m_scrv == 0) {
1622 inm->in6m_state = MLD_NOT_MEMBER;
1623 in6m_disconnect_locked(inmh, inm);
1624 in6m_rele_locked(inmh, inm);
1672 struct in6_multi *inm;
1697 inm = in6m_ifmultiaddr_get_inm(ifma);
1698 if (inm == NULL)
1700 switch (inm->in6m_state) {
1714 if (inm->in6m_refcount == 1)
1715 in6m_disconnect_locked(&inmh, inm);
1716 in6m_rele_locked(&inmh, inm);
1720 in6m_clear_recorded(inm);
1723 inm->in6m_sctimer = 0;
1724 inm->in6m_timer = 0;
1725 inm->in6m_state = MLD_REPORTING_MEMBER;
1729 mbufq_drain(&inm->in6m_scq);
1896 mld_change_state(struct in6_multi *inm, const int delay)
1909 if (inm->in6m_ifp == NULL) {
1910 CTR1(KTR_MLD, "%s: inm is disconnected", __func__);
1918 KASSERT(inm->in6m_ifma != NULL, ("%s: no ifma", __func__));
1919 ifp = inm->in6m_ifma->ifma_ifp;
1926 KASSERT(inm->in6m_ifp == ifp, ("%s: bad ifp", __func__));
1937 if (inm->in6m_st[1].iss_fmode != inm->in6m_st[0].iss_fmode) {
1938 CTR3(KTR_MLD, "%s: inm transition %d -> %d", __func__,
1939 inm->in6m_st[0].iss_fmode, inm->in6m_st[1].iss_fmode);
1940 if (inm->in6m_st[0].iss_fmode == MCAST_UNDEFINED) {
1942 error = mld_initial_join(inm, mli, delay);
1944 } else if (inm->in6m_st[1].iss_fmode == MCAST_UNDEFINED) {
1946 mld_final_leave(inm, mli);
1953 error = mld_handle_state_change(inm, mli);
1973 mld_initial_join(struct in6_multi *inm, struct mld_ifsoftc *mli,
1986 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
1987 inm->in6m_ifp, if_name(inm->in6m_ifp));
1992 ifp = inm->in6m_ifp;
2010 !mld_is_addr_reported(&inm->in6m_addr)) {
2013 inm->in6m_state = MLD_SILENT_MEMBER;
2014 inm->in6m_timer = 0;
2023 inm->in6m_state == MLD_LEAVING_MEMBER) {
2024 inm->in6m_refcount--;
2025 MPASS(inm->in6m_refcount > 0);
2027 inm->in6m_state = MLD_REPORTING_MEMBER;
2040 inm->in6m_timer = max(delay, odelay);
2043 inm->in6m_state = MLD_IDLE_MEMBER;
2045 error = mld_v1_transmit_report(inm,
2049 inm->in6m_timer = odelay;
2068 mq = &inm->in6m_scq;
2070 retval = mld_v2_enqueue_group_record(mq, inm, 1,
2091 inm->in6m_scrv = mli->mli_rv;
2093 if (inm->in6m_sctimer > 1) {
2094 inm->in6m_sctimer =
2095 min(inm->in6m_sctimer, delay);
2097 inm->in6m_sctimer = delay;
2099 inm->in6m_sctimer = 1;
2113 in6m_commit(inm);
2115 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2116 if_name(inm->in6m_ifp));
2126 mld_handle_state_change(struct in6_multi *inm, struct mld_ifsoftc *mli)
2135 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2136 inm->in6m_ifp, if_name(inm->in6m_ifp));
2138 ifp = inm->in6m_ifp;
2148 !mld_is_addr_reported(&inm->in6m_addr) ||
2150 if (!mld_is_addr_reported(&inm->in6m_addr)) {
2155 in6m_commit(inm);
2157 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2158 if_name(inm->in6m_ifp));
2162 mbufq_drain(&inm->in6m_scq);
2164 retval = mld_v2_enqueue_group_record(&inm->in6m_scq, inm, 1, 0, 0,
2174 inm->in6m_scrv = mli->mli_rv;
2175 inm->in6m_sctimer = 1;
2190 mld_final_leave(struct in6_multi *inm, struct mld_ifsoftc *mli)
2201 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2202 inm->in6m_ifp, if_name(inm->in6m_ifp));
2207 switch (inm->in6m_state) {
2221 if (inm->in6m_state == MLD_G_QUERY_PENDING_MEMBER ||
2222 inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER)
2227 mld_v1_transmit_report(inm, MLD_LISTENER_DONE);
2229 inm->in6m_state = MLD_NOT_MEMBER;
2238 mbufq_drain(&inm->in6m_scq);
2239 inm->in6m_timer = 0;
2240 inm->in6m_scrv = mli->mli_rv;
2243 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2244 if_name(inm->in6m_ifp), inm->in6m_scrv);
2245 if (inm->in6m_scrv == 0) {
2246 inm->in6m_state = MLD_NOT_MEMBER;
2247 inm->in6m_sctimer = 0;
2251 in6m_acquire_locked(inm);
2254 &inm->in6m_scq, inm, 1, 0, 0,
2260 inm->in6m_state = MLD_LEAVING_MEMBER;
2261 inm->in6m_sctimer = 1;
2276 in6m_commit(inm);
2278 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2279 if_name(inm->in6m_ifp));
2280 inm->in6m_st[1].iss_fmode = MCAST_UNDEFINED;
2282 __func__, &inm->in6m_addr, if_name(inm->in6m_ifp));
2314 mld_v2_enqueue_group_record(struct mbufq *mq, struct in6_multi *inm,
2335 ifp = inm->in6m_ifp;
2346 mode = inm->in6m_st[1].iss_fmode;
2353 if (inm->in6m_st[0].iss_asm > 0 && inm->in6m_st[1].iss_asm > 0 &&
2354 inm->in6m_nsrc == 0)
2374 if (mode != inm->in6m_st[0].iss_fmode) {
2418 KASSERT(inm->in6m_st[1].iss_asm == 0,
2419 ("%s: inm %p is INCLUDE but ASM count is %d",
2420 __func__, inm, inm->in6m_st[1].iss_asm));
2428 return (mld_v2_enqueue_filter_change(mq, inm));
2432 __func__, ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2433 if_name(inm->in6m_ifp));
2448 ip6_sprintf(ip6tbuf, &inm->in6m_addr),
2449 if_name(inm->in6m_ifp));
2497 mr.mr_addr = inm->in6m_addr;
2534 RB_FOREACH_SAFE(ims, ip6_msource_tree, &inm->in6m_srcs,
2538 now = im6s_get_mode(inm, ims, 1);
2630 now = im6s_get_mode(inm, ims, 1);
2699 mld_v2_enqueue_filter_change(struct mbufq *mq, struct in6_multi *inm)
2718 if (inm->in6m_nsrc == 0 ||
2719 (inm->in6m_st[0].iss_asm > 0 && inm->in6m_st[1].iss_asm > 0))
2722 ifp = inm->in6m_ifp; /* interface */
2723 mode = inm->in6m_st[1].iss_fmode; /* filter mode at t1 */
2783 mr.mr_addr = inm->in6m_addr;
2818 &inm->in6m_srcs);
2823 now = im6s_get_mode(inm, ims, 1);
2824 then = im6s_get_mode(inm, ims, 0);
2903 mld_v2_merge_state_changes(struct in6_multi *inm, struct mbufq *scq)
2923 if (inm->in6m_scrv > 0)
2926 gq = &inm->in6m_scq;
2929 CTR2(KTR_MLD, "%s: WARNING: queue for inm %p is empty",
2930 __func__, inm);
2953 (inm->in6m_ifp->if_mtu - MLD_MTUSPACE)))
3012 struct in6_multi *inm;
3034 inm = in6m_ifmultiaddr_get_inm(ifma);
3035 if (inm == NULL)
3037 KASSERT(ifp == inm->in6m_ifp,
3040 switch (inm->in6m_state) {
3049 inm->in6m_state = MLD_REPORTING_MEMBER;
3051 inm, 0, 0, 0, 0);