#define IP_MAX_MEMBERSHIPS     20
 #define IP_MAX_MSF             10
 
+/* IGMP reports for link-local multicast groups are enabled by default */
+int sysctl_igmp_llm_reports __read_mostly = 1;
+
 #ifdef CONFIG_IP_MULTICAST
 /* Parameter names and values are taken from igmp-v2-06 draft */
 
 
        if (pmc->multiaddr == IGMP_ALL_HOSTS)
                return skb;
+       if (ipv4_is_local_multicast(pmc->multiaddr) && !sysctl_igmp_llm_reports)
+               return skb;
 
        isquery = type == IGMPV3_MODE_IS_INCLUDE ||
                  type == IGMPV3_MODE_IS_EXCLUDE;
                for_each_pmc_rcu(in_dev, pmc) {
                        if (pmc->multiaddr == IGMP_ALL_HOSTS)
                                continue;
+                       if (ipv4_is_local_multicast(pmc->multiaddr) &&
+                            !sysctl_igmp_llm_reports)
+                               continue;
                        spin_lock_bh(&pmc->lock);
                        if (pmc->sfcount[MCAST_EXCLUDE])
                                type = IGMPV3_MODE_IS_EXCLUDE;
 
        if (type == IGMPV3_HOST_MEMBERSHIP_REPORT)
                return igmpv3_send_report(in_dev, pmc);
-       else if (type == IGMP_HOST_LEAVE_MESSAGE)
+
+       if (ipv4_is_local_multicast(group) && !sysctl_igmp_llm_reports)
+               return 0;
+
+       if (type == IGMP_HOST_LEAVE_MESSAGE)
                dst = IGMP_ALL_ROUTER;
        else
                dst = group;
 
        if (group == IGMP_ALL_HOSTS)
                return false;
+       if (ipv4_is_local_multicast(group) && !sysctl_igmp_llm_reports)
+               return false;
 
        rcu_read_lock();
        for_each_pmc_rcu(in_dev, im) {
                        continue;
                if (im->multiaddr == IGMP_ALL_HOSTS)
                        continue;
+               if (ipv4_is_local_multicast(im->multiaddr) &&
+                   !sysctl_igmp_llm_reports)
+                       continue;
                spin_lock_bh(&im->lock);
                if (im->tm_running)
                        im->gsquery = im->gsquery && mark;
 #ifdef CONFIG_IP_MULTICAST
        if (im->multiaddr == IGMP_ALL_HOSTS)
                return;
+       if (ipv4_is_local_multicast(im->multiaddr) && !sysctl_igmp_llm_reports)
+               return;
 
        reporter = im->reporter;
        igmp_stop_timer(im);
 #ifdef CONFIG_IP_MULTICAST
        if (im->multiaddr == IGMP_ALL_HOSTS)
                return;
+       if (ipv4_is_local_multicast(im->multiaddr) && !sysctl_igmp_llm_reports)
+               return;
 
        if (in_dev->dead)
                return;
        for_each_pmc_rtnl(in_dev, im) {
                if (im->multiaddr == IGMP_ALL_HOSTS)
                        continue;
+               if (ipv4_is_local_multicast(im->multiaddr) &&
+                   !sysctl_igmp_llm_reports)
+                       continue;
 
                /* a failover is happening and switches
                 * must be notified immediately