Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 214867
b: refs/heads/master
c: 56af326
h: refs/heads/master
i:
  214865: 1e52228
  214863: 5d56cd6
v: v3
  • Loading branch information
Ben Greear authored and John W. Linville committed Sep 27, 2010
1 parent 776838c commit 12910ef
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 686b9cb994f5f74be790df4cd12873dfdc8a6984
refs/heads/master: 56af326830757f3e8a1742770d15dfd6e3c40e85
80 changes: 70 additions & 10 deletions trunk/net/mac80211/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2609,7 +2609,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
int prepares;
struct ieee80211_sub_if_data *prev = NULL;
struct sk_buff *skb_new;
struct sta_info *sta, *tmp;
struct sta_info *sta, *tmp, *prev_sta;
bool found_sta = false;
int err = 0;

Expand Down Expand Up @@ -2640,22 +2640,74 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
ieee80211_verify_alignment(&rx);

if (ieee80211_is_data(fc)) {
prev_sta = NULL;
for_each_sta_info(local, hdr->addr2, sta, tmp) {
rx.sta = sta;
found_sta = true;
rx.sdata = sta->sdata;
if (!prev_sta) {
prev_sta = sta;
continue;
}

rx.sta = prev_sta;
rx.sdata = prev_sta->sdata;

rx.flags |= IEEE80211_RX_RA_MATCH;
prepares = prepare_for_handlers(rx.sdata, &rx, hdr);
if (prepares) {
if (status->flag & RX_FLAG_MMIC_ERROR) {
if (rx.flags & IEEE80211_RX_RA_MATCH)
ieee80211_rx_michael_mic_report(hdr, &rx);
} else
prev = rx.sdata;
if (!prepares)
goto next_sta;

if (status->flag & RX_FLAG_MMIC_ERROR) {
if (rx.flags & IEEE80211_RX_RA_MATCH)
ieee80211_rx_michael_mic_report(hdr, &rx);
goto next_sta;
}

/*
* frame was destined for the previous interface
* so invoke RX handlers for it
*/
skb_new = skb_copy(skb, GFP_ATOMIC);
if (!skb_new) {
if (net_ratelimit())
wiphy_debug(local->hw.wiphy,
"failed to copy multicast"
" frame for %s\n",
prev_sta->sdata->name);
goto next_sta;
}
ieee80211_invoke_rx_handlers(prev_sta->sdata, &rx,
skb_new);
next_sta:
prev_sta = sta;
} /* for all STA info */

if (prev_sta) {
rx.sta = prev_sta;
rx.sdata = prev_sta->sdata;

rx.flags |= IEEE80211_RX_RA_MATCH;
prepares = prepare_for_handlers(rx.sdata, &rx, hdr);
if (!prepares)
prev_sta = NULL;

if (prev_sta && status->flag & RX_FLAG_MMIC_ERROR) {
if (rx.flags & IEEE80211_RX_RA_MATCH)
ieee80211_rx_michael_mic_report(hdr, &rx);
prev_sta = NULL;
}
}
}


if (prev_sta) {
ieee80211_invoke_rx_handlers(prev_sta->sdata, &rx, skb);
return;
} else {
if (found_sta) {
dev_kfree_skb(skb);
return;
}
}
} /* if data frame */
if (!found_sta) {
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
if (!ieee80211_sdata_running(sdata))
Expand Down Expand Up @@ -2718,6 +2770,14 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,

if (!prepares)
prev = NULL;

if (prev && status->flag & RX_FLAG_MMIC_ERROR) {
rx.sdata = prev;
if (rx.flags & IEEE80211_RX_RA_MATCH)
ieee80211_rx_michael_mic_report(hdr,
&rx);
prev = NULL;
}
}
}
if (prev)
Expand Down

0 comments on commit 12910ef

Please sign in to comment.