return -EINVAL;
        }
 
-       if (is_unicast_ether_addr(addr)) {
+       if (is_unicast_ether_addr(addr) || is_link_local(addr)) {
                u32 rar_uc_entries = IXGBE_MAX_PF_MACVLANS;
 
                if (netdev_uc_count(dev) < rar_uc_entries)
 
        netdev_for_each_mc_addr(ha, netdev) {
                if (i == cnt)
                        break;
+               if (is_link_local(ha->addr))
+                       continue;
+
                vector_list[i++] = ixgbevf_mta_vector(hw, ha->addr);
        }
 
 
 #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1)
 #define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count)
 
+/* Reserved Ethernet Addresses per IEEE 802.1Q */
+static const u8 br_reserved_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
+
+/**
+ * is_link_local -  Determine if given Eth addr is a link local mcast address.
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Return true if address is link local reserved addr (01:80:c2:00:00:0X) per
+ * IEEE 802.1Q 8.6.3 Frame filtering.
+ */
+static inline int is_link_local(const unsigned char *dest)
+{
+       __be16 *a = (__be16 *)dest;
+       static const __be16 *b = (const __be16 *)br_reserved_address;
+       static const __be16 m = cpu_to_be16(0xfff0);
+
+       return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | ((a[2] ^ b[2]) & m)) == 0;
+}
+
 /**
  * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
  * @addr: Pointer to a six-byte array containing the Ethernet address
 
        br->bridge_id.prio[0] = 0x80;
        br->bridge_id.prio[1] = 0x00;
 
-       memcpy(br->group_addr, br_group_address, ETH_ALEN);
+       memcpy(br->group_addr, br_reserved_address, ETH_ALEN);
 
        br->stp_enabled = BR_NO_STP;
        br->group_fwd_mask = BR_GROUPFWD_DEFAULT;
 
 #include <linux/export.h>
 #include "br_private.h"
 
-/* Bridge group multicast address 802.1d (pg 51). */
-const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
-
 /* Hook for brouter */
 br_should_route_hook_t __rcu *br_should_route_hook __read_mostly;
 EXPORT_SYMBOL(br_should_route_hook);
        return 0;        /* process further */
 }
 
-/* Does address match the link local multicast address.
- * 01:80:c2:00:00:0X
- */
-static inline int is_link_local(const unsigned char *dest)
-{
-       __be16 *a = (__be16 *)dest;
-       static const __be16 *b = (const __be16 *)br_group_address;
-       static const __be16 m = cpu_to_be16(0xfff0);
-
-       return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | ((a[2] ^ b[2]) & m)) == 0;
-}
-
 /*
  * Return NULL if skb is handled
  * note: already called with rcu_read_lock
 
        pr_debug("%s: " format,  (br)->dev->name, ##args)
 
 extern struct notifier_block br_device_notifier;
-extern const u8 br_group_address[ETH_ALEN];
 
 /* called under bridge lock */
 static inline int br_is_root_bridge(const struct net_bridge *br)
 
 #include <linux/capability.h>
 #include <linux/kernel.h>
 #include <linux/netdevice.h>
+#include <linux/etherdevice.h>
 #include <linux/if_bridge.h>
 #include <linux/rtnetlink.h>
 #include <linux/spinlock.h>
 
        /* Must be 01:80:c2:00:00:0X */
        for (i = 0; i < 5; i++)
-               if (new_addr[i] != br_group_address[i])
+               if (new_addr[i] != br_reserved_address[i])
                        return -EINVAL;
 
        if (new_addr[5] & ~0xf)