Lines Matching defs:ill
73 static uint_t igmp_query_in(ipha_t *ipha, igmpa_t *igmpa, ill_t *ill);
74 static uint_t igmpv3_query_in(igmp3qa_t *igmp3qa, ill_t *ill, int igmplen);
75 static uint_t mld_query_in(mld_hdr_t *mldh, ill_t *ill);
76 static uint_t mldv2_query_in(mld2q_t *mld2q, ill_t *ill, int mldlen);
79 static void igmpv3_sendrpt(ill_t *ill, mrec_t *reclist);
80 static void mldv2_sendrpt(ill_t *ill, mrec_t *reclist);
83 static void mcast_init_rtx(ill_t *ill, rtx_state_t *rtxp,
322 ill_t *ill = ira->ira_ill;
323 ip_stack_t *ipst = ill->ill_ipst;
325 ASSERT(!ill->ill_isv6);
362 (void) mi_strlog(ill->ill_rq, 1, SL_TRACE,
365 ill->ill_name);
375 next = igmp_query_in(ipha, igmpa, ill);
377 next = igmpv3_query_in((igmp3qa_t *)igmpa, ill,
399 mutex_enter(&ill->ill_lock);
400 for (ipif = ill->ill_ipif; ipif != NULL;
404 (void) mi_strlog(ill->ill_rq,
411 mutex_exit(&ill->ill_lock);
415 mutex_exit(&ill->ill_lock);
437 /* Pick the first ipif on this ill */
438 mutex_enter(&ill->ill_lock);
439 src = ill->ill_ipif->ipif_subnet;
440 mutex_exit(&ill->ill_lock);
447 * If our ill has ILMs that belong to the group being
452 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
454 for (ilm = ill->ill_ilm; ilm; ilm = ilm->ilm_next) {
462 rw_exit(&ill->ill_mcast_lock);
463 ill_mcast_timer_start(ill->ill_ipst);
486 igmp_query_in(ipha_t *ipha, igmpa_t *igmpa, ill_t *ill)
493 ipst = ill->ill_ipst;
496 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
516 ill->ill_mcast_v1_time = 0;
517 ill->ill_mcast_v1_tset = 1;
518 if (ill->ill_mcast_type != IGMP_V1_ROUTER) {
520 "to IGMP_V1_ROUTER\n", ill->ill_name));
521 atomic_inc_16(&ill->ill_ifptr->illif_mcast_v1);
522 ill->ill_mcast_type = IGMP_V1_ROUTER;
530 rw_exit(&ill->ill_mcast_lock);
531 ill_mcast_timer_start(ill->ill_ipst);
545 rw_exit(&ill->ill_mcast_lock);
546 ill_mcast_timer_start(ill->ill_ipst);
555 if (ill->ill_mcast_type == IGMP_V3_ROUTER) {
557 "to IGMP_V2_ROUTER", ill->ill_name));
558 atomic_inc_16(&ill->ill_ifptr->illif_mcast_v2);
559 ill->ill_mcast_type = IGMP_V2_ROUTER;
561 ill->ill_mcast_v2_time = 0;
562 ill->ill_mcast_v2_tset = 1;
568 (void) mi_strlog(ill->ill_rq, 1, SL_TRACE,
589 for (ilm = ill->ill_ilm; ilm; ilm = ilm->ilm_next) {
612 rw_exit(&ill->ill_mcast_lock);
617 ill_mcast_timer_start(ill->ill_ipst);
623 igmpv3_query_in(igmp3qa_t *igmp3qa, ill_t *ill, int igmplen)
632 ipst = ill->ill_ipst;
643 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
660 ill->ill_mcast_rv = MCAST_DEF_ROBUSTNESS;
662 ill->ill_mcast_rv = qrv;
671 ill->ill_mcast_qi = (qqi == 0) ? MCAST_DEF_QUERY_INTERVAL : qqi;
678 if (ill->ill_global_timer < (current + delay)) {
679 rw_exit(&ill->ill_mcast_lock);
680 ill_mcast_timer_start(ill->ill_ipst);
695 ill->ill_global_timer = current + delay;
699 for (ilm = ill->ill_ilm; ilm; ilm = ilm->ilm_next) {
754 rw_exit(&ill->ill_mcast_lock);
759 ill_mcast_timer_start(ill->ill_ipst);
772 ill_t *ill;
775 ill = ilm->ilm_ill;
777 ASSERT(!ill->ill_isv6);
778 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
785 ill->ill_mcast_type, htonl(ilm->ilm_addr)));
786 if (ill->ill_mcast_type == IGMP_V1_ROUTER) {
788 } else if (ill->ill_mcast_type == IGMP_V2_ROUTER) {
790 } else if (ill->ill_mcast_type == IGMP_V3_ROUTER) {
807 igmpv3_sendrpt(ill, rp);
812 mcast_init_rtx(ill, &ilm->ilm_rtx, rtype,
817 ilm->ilm_rtx.rtx_cnt = ill->ill_mcast_rv;
854 ill_t *ill;
857 ill = ilm->ilm_ill;
859 ASSERT(ill->ill_isv6);
861 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
867 if (ill->ill_mcast_type == MLD_V1_ROUTER) {
886 mldv2_sendrpt(ill, rp);
891 mcast_init_rtx(ill, &ilm->ilm_rtx, rtype,
896 ASSERT(ill->ill_mcast_type != MLD_V2_ROUTER ||
899 ilm->ilm_rtx.rtx_cnt = ill->ill_mcast_rv;
935 ill_t *ill = ilm->ilm_ill;
937 ASSERT(!ill->ill_isv6);
939 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
941 ill->ill_mcast_type == IGMP_V2_ROUTER &&
947 if ((ill->ill_mcast_type == IGMP_V3_ROUTER) &&
966 igmpv3_sendrpt(ill, rp);
978 ill_t *ill = ilm->ilm_ill;
980 ASSERT(ill->ill_isv6);
982 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
984 ill->ill_mcast_type == MLD_V1_ROUTER &&
989 if ((ill->ill_mcast_type == MLD_V2_ROUTER) &&
1008 mldv2_sendrpt(ill, rp);
1020 ill_t *ill;
1030 ill = ilm->ilm_ill;
1031 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
1091 ilm->ilm_rtx.rtx_cnt = ill->ill_mcast_rv;
1101 igmpv3_sendrpt(ill, rp);
1111 ill_t *ill;
1117 ill = ilm->ilm_ill;
1118 ASSERT(RW_WRITE_HELD(&ill->ill_mcast_lock));
1121 if (ill->ill_mcast_type != MLD_V2_ROUTER) {
1182 ilm->ilm_rtx.rtx_cnt = ill->ill_mcast_rv;
1192 mldv2_sendrpt(ill, rp);
1196 igmp_timeout_handler_per_ill(ill_t *ill)
1205 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
1209 if (ill->ill_global_timer == INFINITY)
1211 if (ill->ill_global_timer <= (current + CURRENT_OFFSET)) {
1212 ill->ill_global_timer = INFINITY;
1219 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
1235 igmpv3_sendrpt(ill, rp);
1238 if ((ill->ill_global_timer - current) < next)
1239 next = ill->ill_global_timer - current;
1243 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
1252 (void) mi_strlog(ill->ill_rq, 1, SL_TRACE,
1256 (ill->ill_mcast_type), next);
1265 if (ill->ill_mcast_type == IGMP_V1_ROUTER) {
1267 } else if (ill->ill_mcast_type == IGMP_V2_ROUTER) {
1299 igmpv3_sendrpt(ill, rp);
1316 if (ill->ill_mcast_type == IGMP_V1_ROUTER) {
1320 if (ill->ill_mcast_type == IGMP_V2_ROUTER) {
1362 igmpv3_sendrpt(ill, rtxrp);
1366 rw_exit(&ill->ill_mcast_lock);
1368 ill_mcast_send_queued(ill);
1397 ill_t *ill;
1412 ill = ILL_START_WALK_V4(&ctx, ipst);
1413 for (; ill != NULL; ill = ill_next(&ctx, ill)) {
1414 ASSERT(!ill->ill_isv6);
1415 /* Make sure the ill isn't going away. */
1416 if (!ill_check_and_refhold(ill))
1419 next = igmp_timeout_handler_per_ill(ill);
1422 ill_refrele(ill);
1436 mld_timeout_handler_per_ill(ill_t *ill)
1444 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
1451 if (ill->ill_global_timer == INFINITY)
1453 if (ill->ill_global_timer <= (current + CURRENT_OFFSET)) {
1454 ill->ill_global_timer = INFINITY;
1462 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
1479 mldv2_sendrpt(ill, rp);
1481 if ((ill->ill_global_timer - current) < next)
1482 next = ill->ill_global_timer - current;
1487 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
1496 (void) mi_strlog(ill->ill_rq, 1, SL_TRACE,
1500 (ill->ill_mcast_type), next);
1509 if (ill->ill_mcast_type == MLD_V1_ROUTER) {
1551 if (ill->ill_mcast_type == MLD_V1_ROUTER) {
1595 if (ill->ill_mcast_type == MLD_V2_ROUTER) {
1596 mldv2_sendrpt(ill, rp);
1597 mldv2_sendrpt(ill, rtxrp);
1599 rw_exit(&ill->ill_mcast_lock);
1601 ill_mcast_send_queued(ill);
1616 ill_t *ill;
1631 ill = ILL_START_WALK_V6(&ctx, ipst);
1632 for (; ill != NULL; ill = ill_next(&ctx, ill)) {
1633 ASSERT(ill->ill_isv6);
1634 /* Make sure the ill isn't going away. */
1635 if (!ill_check_and_refhold(ill))
1638 next = mld_timeout_handler_per_ill(ill);
1641 ill_refrele(ill);
1651 * of slowtimo intervals, for the given ill.
1653 #define OVQP(ill) \
1654 ((1000 * (((ill)->ill_mcast_rv * (ill)->ill_mcast_qi) \
1668 ill_t *ill;
1688 * illif_mcast_v[12] are set using atomics. If an ill hears
1696 for (ill = avl_first(avl_tree); ill != NULL;
1697 ill = avl_walk(avl_tree, ill, AVL_AFTER)) {
1698 /* Make sure the ill isn't going away. */
1699 if (!ill_check_and_refhold(ill))
1702 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
1703 if (ill->ill_mcast_v1_tset == 1)
1704 ill->ill_mcast_v1_time++;
1705 if (ill->ill_mcast_v2_tset == 1)
1706 ill->ill_mcast_v2_time++;
1707 if ((ill->ill_mcast_type == IGMP_V1_ROUTER) &&
1709 (ill->ill_mcast_v1_time >= OVQP(ill))) {
1710 if ((ill->ill_mcast_v2_tset > 0) ||
1716 ill->ill_name));
1717 ill->ill_mcast_type =
1723 ill->ill_name));
1724 ill->ill_mcast_type =
1727 ill->ill_mcast_v1_time = 0;
1728 ill->ill_mcast_v1_tset = 0;
1731 if ((ill->ill_mcast_type == IGMP_V2_ROUTER) &&
1733 (ill->ill_mcast_v2_time >= OVQP(ill))) {
1736 ill->ill_name));
1737 ill->ill_mcast_type = IGMP_V3_ROUTER;
1738 ill->ill_mcast_v2_time = 0;
1739 ill->ill_mcast_v2_tset = 0;
1742 rw_exit(&ill->ill_mcast_lock);
1743 ill_refrele(ill);
1770 ill_t *ill;
1785 for (ill = avl_first(avl_tree); ill != NULL;
1786 ill = avl_walk(avl_tree, ill, AVL_AFTER)) {
1787 /* Make sure the ill isn't going away. */
1788 if (!ill_check_and_refhold(ill))
1791 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
1792 if (ill->ill_mcast_v1_tset == 1)
1793 ill->ill_mcast_v1_time++;
1794 if ((ill->ill_mcast_type == MLD_V1_ROUTER) &&
1796 (ill->ill_mcast_v1_time >= OVQP(ill))) {
1799 ill->ill_name));
1800 ill->ill_mcast_type = MLD_V2_ROUTER;
1801 ill->ill_mcast_v1_time = 0;
1802 ill->ill_mcast_v1_tset = 0;
1805 rw_exit(&ill->ill_mcast_lock);
1806 ill_refrele(ill);
1835 ill_t *ill = ilm->ilm_ill;
1836 ip_stack_t *ipst = ill->ill_ipst;
1838 ASSERT(RW_LOCK_HELD(&ill->ill_mcast_lock));
1872 ill_mcast_queue(ill, mp);
1878 * Sends an IGMP_V3_MEMBERSHIP_REPORT message out the ill.
1881 * exceed ill->ill_mc_mtu, multiple reports are sent.
1886 igmpv3_sendrpt(ill_t *ill, mrec_t *reclist)
1899 ip_stack_t *ipst = ill->ill_ipst;
1901 ASSERT(RW_LOCK_HELD(&ill->ill_mcast_lock));
1917 if (size + rsize > ill->ill_mc_mtu) {
1928 srcspace = ill->ill_mc_mtu - (size +
2025 ill_mcast_queue(ill, mp);
2068 ill_t *ill = ira->ira_ill;
2069 ip_stack_t *ipst = ill->ill_ipst;
2071 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembTotal);
2075 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInErrors);
2081 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpBadHoplimit);
2094 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInErrors);
2109 next = mld_query_in(mldh, ill);
2111 next = mldv2_query_in((mld2q_t *)mldh, ill, mldlen);
2113 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInErrors);
2132 mutex_enter(&ill->ill_lock);
2133 for (ipif = ill->ill_ipif; ipif != NULL;
2140 (void) mi_strlog(ill->ill_rq,
2148 mutex_exit(&ill->ill_lock);
2152 mutex_exit(&ill->ill_lock);
2153 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembResponses);
2157 BUMP_MIB(ill->ill_icmp6_mib,
2172 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
2173 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
2176 BUMP_MIB(ill->ill_icmp6_mib,
2182 rw_exit(&ill->ill_mcast_lock);
2187 ill_mcast_timer_start(ill->ill_ipst);
2191 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembReductions);
2202 mld_query_in(mld_hdr_t *mldh, ill_t *ill)
2209 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembQueries);
2226 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembBadQueries);
2231 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
2232 ill->ill_mcast_v1_time = 0;
2233 ill->ill_mcast_v1_tset = 1;
2234 if (ill->ill_mcast_type == MLD_V2_ROUTER) {
2236 "MLD_V1_ROUTER\n", ill->ill_name));
2237 atomic_inc_16(&ill->ill_ifptr->illif_mcast_v1);
2238 ill->ill_mcast_type = MLD_V1_ROUTER;
2243 (void) mi_strlog(ill->ill_rq, 1, SL_TRACE,
2263 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
2290 rw_exit(&ill->ill_mcast_lock);
2292 ill_mcast_send_queued(ill);
2293 ill_mcast_timer_start(ill->ill_ipst);
2304 mldv2_query_in(mld2q_t *mld2q, ill_t *ill, int mldlen)
2316 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInErrors);
2321 BUMP_MIB(ill->ill_icmp6_mib, ipv6IfIcmpInGroupMembQueries);
2340 ill->ill_mcast_rv = MCAST_DEF_ROBUSTNESS;
2342 ill->ill_mcast_rv = qrv;
2350 ill->ill_mcast_qi = (qqi == 0) ? MCAST_DEF_QUERY_INTERVAL : qqi;
2357 rw_enter(&ill->ill_mcast_lock, RW_WRITER);
2358 if (ill->ill_global_timer < (current + delay)) {
2359 rw_exit(&ill->ill_mcast_lock);
2374 ill->ill_global_timer = current + delay;
2378 for (ilm = ill->ill_ilm; ilm != NULL; ilm = ilm->ilm_next) {
2433 rw_exit(&ill->ill_mcast_lock);
2438 ill_mcast_timer_start(ill->ill_ipst);
2455 ill_t *ill = ilm->ilm_ill;
2457 ASSERT(RW_LOCK_HELD(&ill->ill_mcast_lock));
2467 ASSERT(ill->ill_isv6);
2512 ill_mcast_queue(ill, mp);
2516 * Sends an MLD_V2_LISTENER_REPORT message out the passed-in ill. The
2518 * reclist. If this causes packet length to exceed ill->ill_mc_mtu,
2523 mldv2_sendrpt(ill_t *ill, mrec_t *reclist)
2542 ASSERT(ill->ill_isv6);
2543 ASSERT(RW_LOCK_HELD(&ill->ill_mcast_lock));
2562 if (size + rsize > ill->ill_mc_mtu) {
2573 srcspace = ill->ill_mc_mtu -
2679 ill_mcast_queue(ill, mp);
2741 mcast_init_rtx(ill_t *ill, rtx_state_t *rtxp, mcast_record_t rtype,
2756 rtxp->rtx_cnt = ill->ill_mcast_rv;
2760 rtxp->rtx_fmode_cnt = ill->ill_mcast_rv;
2767 rtype == ALLOW_NEW_SOURCES ? 0 : ill->ill_mcast_rv;
2802 ill_t *ill;
2808 ill = ilm->ilm_ill;
2821 mcast_init_rtx(ill, rtxp, mreclist->mrec_type,
2829 rtxp->rtx_cnt = ill->ill_mcast_rv;