Lines Matching defs:ma

76 static void igmp6_join_group(struct ifmcaddr6 *ma);
77 static void igmp6_leave_group(struct ifmcaddr6 *ma);
990 struct ifmcaddr6 *ma, __rcu **map;
995 (ma = mc_dereference(*map, idev));
996 map = &ma->next) {
997 if (ipv6_addr_equal(&ma->mca_addr, addr)) {
998 if (--ma->mca_users == 0) {
999 *map = ma->next;
1001 igmp6_group_dropped(ma);
1002 inet6_ifmcaddr_notify(idev->dev, ma,
1004 ip6_mc_clear_src(ma);
1007 ma_put(ma);
1146 static void igmp6_group_queried(struct ifmcaddr6 *ma, unsigned long resptime)
1150 mc_assert_locked(ma->idev);
1153 if (ipv6_addr_is_ll_all_nodes(&ma->mca_addr) ||
1154 IPV6_ADDR_MC_SCOPE(&ma->mca_addr) < IPV6_ADDR_SCOPE_LINKLOCAL)
1157 if (cancel_delayed_work(&ma->mca_work)) {
1158 refcount_dec(&ma->mca_refcnt);
1159 delay = ma->mca_work.timer.expires - jiffies;
1165 if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
1166 refcount_inc(&ma->mca_refcnt);
1167 ma->mca_flags |= MAF_TIMER_RUNNING;
1430 struct ifmcaddr6 *ma;
1507 for_each_mc_mclock(idev, ma) {
1508 igmp6_group_queried(ma, max_delay);
1511 for_each_mc_mclock(idev, ma) {
1512 if (!ipv6_addr_equal(group, &ma->mca_addr))
1514 if (ma->mca_flags & MAF_TIMER_RUNNING) {
1517 ma->mca_flags &= ~MAF_GSQUERY;
1521 ma->mca_flags |= MAF_GSQUERY;
1523 ma->mca_flags &= ~MAF_GSQUERY;
1525 if (!(ma->mca_flags & MAF_GSQUERY) ||
1526 mld_marksources(ma, ntohs(mlh2->mld2q_nsrcs), mlh2->mld2q_srcs))
1527 igmp6_group_queried(ma, max_delay);
1595 struct ifmcaddr6 *ma;
1627 for_each_mc_mclock(idev, ma) {
1628 if (ipv6_addr_equal(&ma->mca_addr, &mld->mld_mca)) {
1629 if (cancel_delayed_work(&ma->mca_work))
1630 refcount_dec(&ma->mca_refcnt);
1631 ma->mca_flags &= ~(MAF_LAST_REPORTER |
2605 static void igmp6_join_group(struct ifmcaddr6 *ma)
2609 mc_assert_locked(ma->idev);
2611 if (ma->mca_flags & MAF_NOREPORT)
2614 igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2616 delay = get_random_u32_below(unsolicited_report_interval(ma->idev));
2618 if (cancel_delayed_work(&ma->mca_work)) {
2619 refcount_dec(&ma->mca_refcnt);
2620 delay = ma->mca_work.timer.expires - jiffies;
2623 if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
2624 refcount_inc(&ma->mca_refcnt);
2625 ma->mca_flags |= MAF_TIMER_RUNNING | MAF_LAST_REPORTER;
2657 static void igmp6_leave_group(struct ifmcaddr6 *ma)
2659 mc_assert_locked(ma->idev);
2661 if (mld_in_v1_mode(ma->idev)) {
2662 if (ma->mca_flags & MAF_LAST_REPORTER) {
2663 igmp6_send(&ma->mca_addr, ma->idev->dev,
2667 mld_add_delrec(ma->idev, ma);
2668 mld_ifc_event(ma->idev);
2718 struct ifmcaddr6 *ma = container_of(to_delayed_work(work),
2721 mutex_lock(&ma->idev->mc_lock);
2722 if (mld_in_v1_mode(ma->idev))
2723 igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2725 mld_send_report(ma->idev, ma);
2726 ma->mca_flags |= MAF_LAST_REPORTER;
2727 ma->mca_flags &= ~MAF_TIMER_RUNNING;
2728 mutex_unlock(&ma->idev->mc_lock);
2730 ma_put(ma);