if (!memcmp(header->addr2, priv->net_dev->dev_addr, ETH_ALEN))
                        return 0;
 
-               /* multicast packets to our IBSS go through */
-               if (is_multicast_ether_addr(header->addr1))
+               /* {broad,multi}cast packets to our BSSID go through */
+               if (is_multicast_ether_addr(header->addr1) ||
+                   is_broadcast_ether_addr(header->addr1))
                        return !memcmp(header->addr3, priv->bssid, ETH_ALEN);
 
                /* packets to our adapter go through */
                return !memcmp(header->addr1, priv->net_dev->dev_addr,
                               ETH_ALEN);
 
-       case IW_MODE_INFRA:     /* Header: Dest. | AP{BSSID} | Source */
+       case IW_MODE_INFRA:     /* Header: Dest. | BSSID | Source */
                /* packets from our adapter are dropped (echo) */
                if (!memcmp(header->addr3, priv->net_dev->dev_addr, ETH_ALEN))
                        return 0;
 
-               /* {broad,multi}cast packets to our IBSS go through */
-               if (is_multicast_ether_addr(header->addr1))
+               /* {broad,multi}cast packets to our BSS go through */
+               if (is_multicast_ether_addr(header->addr1) ||
+                   is_broadcast_ether_addr(header->addr1))
                        return !memcmp(header->addr2, priv->bssid, ETH_ALEN);
 
                /* packets to our adapter go through */