|
@@ -2308,16 +2308,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
|
|
|
if (!(status->rx_flags & IEEE80211_RX_AMSDU))
|
|
|
return RX_CONTINUE;
|
|
|
|
|
|
- if (ieee80211_has_a4(hdr->frame_control) &&
|
|
|
- rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
|
|
- !rx->sdata->u.vlan.sta)
|
|
|
- return RX_DROP_UNUSABLE;
|
|
|
+ if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
|
|
|
+ switch (rx->sdata->vif.type) {
|
|
|
+ case NL80211_IFTYPE_AP_VLAN:
|
|
|
+ if (!rx->sdata->u.vlan.sta)
|
|
|
+ return RX_DROP_UNUSABLE;
|
|
|
+ break;
|
|
|
+ case NL80211_IFTYPE_STATION:
|
|
|
+ if (!rx->sdata->u.mgd.use_4addr)
|
|
|
+ return RX_DROP_UNUSABLE;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return RX_DROP_UNUSABLE;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (is_multicast_ether_addr(hdr->addr1) &&
|
|
|
- ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
|
|
- rx->sdata->u.vlan.sta) ||
|
|
|
- (rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
|
|
|
- rx->sdata->u.mgd.use_4addr)))
|
|
|
+ if (is_multicast_ether_addr(hdr->addr1))
|
|
|
return RX_DROP_UNUSABLE;
|
|
|
|
|
|
skb->dev = dev;
|