Lines Matching defs:ma

73 static void igmp6_join_group(struct ifmcaddr6 *ma);
74 static void igmp6_leave_group(struct ifmcaddr6 *ma);
966 struct ifmcaddr6 *ma, __rcu **map;
972 (ma = mc_dereference(*map, idev));
973 map = &ma->next) {
974 if (ipv6_addr_equal(&ma->mca_addr, addr)) {
975 if (--ma->mca_users == 0) {
976 *map = ma->next;
978 igmp6_group_dropped(ma);
979 ip6_mc_clear_src(ma);
982 ma_put(ma);
1118 static void igmp6_group_queried(struct ifmcaddr6 *ma, unsigned long resptime)
1123 if (ipv6_addr_is_ll_all_nodes(&ma->mca_addr) ||
1124 IPV6_ADDR_MC_SCOPE(&ma->mca_addr) < IPV6_ADDR_SCOPE_LINKLOCAL)
1127 if (cancel_delayed_work(&ma->mca_work)) {
1128 refcount_dec(&ma->mca_refcnt);
1129 delay = ma->mca_work.timer.expires - jiffies;
1135 if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
1136 refcount_inc(&ma->mca_refcnt);
1137 ma->mca_flags |= MAF_TIMER_RUNNING;
1399 struct ifmcaddr6 *ma;
1476 for_each_mc_mclock(idev, ma) {
1477 igmp6_group_queried(ma, max_delay);
1480 for_each_mc_mclock(idev, ma) {
1481 if (!ipv6_addr_equal(group, &ma->mca_addr))
1483 if (ma->mca_flags & MAF_TIMER_RUNNING) {
1486 ma->mca_flags &= ~MAF_GSQUERY;
1490 ma->mca_flags |= MAF_GSQUERY;
1492 ma->mca_flags &= ~MAF_GSQUERY;
1494 if (!(ma->mca_flags & MAF_GSQUERY) ||
1495 mld_marksources(ma, ntohs(mlh2->mld2q_nsrcs), mlh2->mld2q_srcs))
1496 igmp6_group_queried(ma, max_delay);
1564 struct ifmcaddr6 *ma;
1596 for_each_mc_mclock(idev, ma) {
1597 if (ipv6_addr_equal(&ma->mca_addr, &mld->mld_mca)) {
1598 if (cancel_delayed_work(&ma->mca_work))
1599 refcount_dec(&ma->mca_refcnt);
1600 ma->mca_flags &= ~(MAF_LAST_REPORTER |
2565 static void igmp6_join_group(struct ifmcaddr6 *ma)
2569 if (ma->mca_flags & MAF_NOREPORT)
2572 igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2574 delay = get_random_u32_below(unsolicited_report_interval(ma->idev));
2576 if (cancel_delayed_work(&ma->mca_work)) {
2577 refcount_dec(&ma->mca_refcnt);
2578 delay = ma->mca_work.timer.expires - jiffies;
2581 if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
2582 refcount_inc(&ma->mca_refcnt);
2583 ma->mca_flags |= MAF_TIMER_RUNNING | MAF_LAST_REPORTER;
2616 static void igmp6_leave_group(struct ifmcaddr6 *ma)
2618 if (mld_in_v1_mode(ma->idev)) {
2619 if (ma->mca_flags & MAF_LAST_REPORTER) {
2620 igmp6_send(&ma->mca_addr, ma->idev->dev,
2624 mld_add_delrec(ma->idev, ma);
2625 mld_ifc_event(ma->idev);
2674 struct ifmcaddr6 *ma = container_of(to_delayed_work(work),
2677 mutex_lock(&ma->idev->mc_lock);
2678 if (mld_in_v1_mode(ma->idev))
2679 igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2681 mld_send_report(ma->idev, ma);
2682 ma->mca_flags |= MAF_LAST_REPORTER;
2683 ma->mca_flags &= ~MAF_TIMER_RUNNING;
2684 mutex_unlock(&ma->idev->mc_lock);
2686 ma_put(ma);