|
|
@@ -0,0 +1,72 @@
|
|
|
+--- a/net/mac80211/rx.c
|
|
|
++++ b/net/mac80211/rx.c
|
|
|
+@@ -2348,22 +2348,6 @@ static void __ieee80211_rx_handle_packet
|
|
|
+ sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
|
|
+ continue;
|
|
|
+
|
|
|
+- rx.sta = sta_info_get(sdata, hdr->addr2);
|
|
|
+-
|
|
|
+- rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
|
+- prepares = prepare_for_handlers(sdata, &rx, hdr);
|
|
|
+-
|
|
|
+- if (!prepares)
|
|
|
+- continue;
|
|
|
+-
|
|
|
+- if (status->flag & RX_FLAG_MMIC_ERROR) {
|
|
|
+- rx.sdata = sdata;
|
|
|
+- if (rx.flags & IEEE80211_RX_RA_MATCH)
|
|
|
+- ieee80211_rx_michael_mic_report(hdr,
|
|
|
+- &rx);
|
|
|
+- continue;
|
|
|
+- }
|
|
|
+-
|
|
|
+ /*
|
|
|
+ * frame is destined for this interface, but if it's
|
|
|
+ * not also for the previous one we handle that after
|
|
|
+@@ -2375,6 +2359,22 @@ static void __ieee80211_rx_handle_packet
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
++ rx.sta = sta_info_get(prev, hdr->addr2);
|
|
|
++
|
|
|
++ rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
|
++ prepares = prepare_for_handlers(prev, &rx, hdr);
|
|
|
++
|
|
|
++ if (!prepares)
|
|
|
++ goto next;
|
|
|
++
|
|
|
++ if (status->flag & RX_FLAG_MMIC_ERROR) {
|
|
|
++ rx.sdata = prev;
|
|
|
++ if (rx.flags & IEEE80211_RX_RA_MATCH)
|
|
|
++ ieee80211_rx_michael_mic_report(hdr,
|
|
|
++ &rx);
|
|
|
++ goto next;
|
|
|
++ }
|
|
|
++
|
|
|
+ /*
|
|
|
+ * frame was destined for the previous interface
|
|
|
+ * so invoke RX handlers for it
|
|
|
+@@ -2387,11 +2387,22 @@ static void __ieee80211_rx_handle_packet
|
|
|
+ "multicast frame for %s\n",
|
|
|
+ wiphy_name(local->hw.wiphy),
|
|
|
+ prev->name);
|
|
|
+- continue;
|
|
|
++ goto next;
|
|
|
+ }
|
|
|
+ ieee80211_invoke_rx_handlers(prev, &rx, skb_new, rate);
|
|
|
++next:
|
|
|
+ prev = sdata;
|
|
|
+ }
|
|
|
++
|
|
|
++ if (prev) {
|
|
|
++ rx.sta = sta_info_get(prev, hdr->addr2);
|
|
|
++
|
|
|
++ rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
|
++ prepares = prepare_for_handlers(prev, &rx, hdr);
|
|
|
++
|
|
|
++ if (!prepares)
|
|
|
++ prev = NULL;
|
|
|
++ }
|
|
|
+ }
|
|
|
+ if (prev)
|
|
|
+ ieee80211_invoke_rx_handlers(prev, &rx, skb, rate);
|