Loading net/mac80211/rx.c +101 −97 Original line number Diff line number Diff line Loading @@ -1079,21 +1079,24 @@ static inline ieee80211_txrx_result __ieee80211_invoke_rx_handlers( for (handler = handlers; *handler != NULL; handler++) { res = (*handler)(rx); if (res != TXRX_CONTINUE) { if (res == TXRX_DROP) { switch (res) { case TXRX_CONTINUE: continue; case TXRX_DROP: I802_DEBUG_INC(local->rx_handlers_drop); if (sta) sta->rx_dropped++; } if (res == TXRX_QUEUED) break; case TXRX_QUEUED: I802_DEBUG_INC(local->rx_handlers_queued); break; } break; } if (res == TXRX_DROP) { if (res == TXRX_DROP) dev_kfree_skb(rx->skb); } return res; } Loading Loading @@ -1242,6 +1245,9 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, u16 type; int multicast; int radiotap_len = 0; struct ieee80211_sub_if_data *prev = NULL; struct sk_buff *skb_new; u8 *bssid; if (status->flag & RX_FLAG_RADIOTAP) { radiotap_len = ieee80211_get_radiotap_len(skb->data); Loading Loading @@ -1289,10 +1295,11 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, rx.u.rx.ra_match = 1; ieee80211_invoke_rx_handlers(local, local->rx_handlers, &rx, sta); } else { struct ieee80211_sub_if_data *prev = NULL; struct sk_buff *skb_new; u8 *bssid = ieee80211_get_bssid(hdr, skb->len - radiotap_len); sta_info_put(sta); return; } bssid = ieee80211_get_bssid(hdr, skb->len - radiotap_len); read_lock(&local->sub_if_lock); list_for_each_entry(sdata, &local->sub_if_list, list) { Loading Loading @@ -1337,7 +1344,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, case IEEE80211_IF_TYPE_AP: if (!bssid) { if (compare_ether_addr(sdata->dev->dev_addr, hdr->addr1) != 0) hdr->addr1)) continue; } else if (!ieee80211_bssid_match(bssid, sdata->dev->dev_addr)) { Loading @@ -1345,8 +1352,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, continue; rx.u.rx.ra_match = 0; } if (sdata->dev == local->mdev && !rx.u.rx.in_scan) if (sdata->dev == local->mdev && !rx.u.rx.in_scan) /* do not receive anything via * master device when not scanning */ continue; Loading @@ -1356,7 +1362,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, (rx.fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA) continue; if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2) != 0) hdr->addr2)) continue; break; } Loading @@ -1373,8 +1379,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, rx.skb = skb_new; rx.dev = prev->dev; rx.sdata = prev; ieee80211_invoke_rx_handlers(local, local->rx_handlers, ieee80211_invoke_rx_handlers(local, local->rx_handlers, &rx, sta); } prev = sdata; Loading @@ -1388,7 +1393,6 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, } else dev_kfree_skb(skb); read_unlock(&local->sub_if_lock); } end: if (sta) Loading Loading
net/mac80211/rx.c +101 −97 Original line number Diff line number Diff line Loading @@ -1079,21 +1079,24 @@ static inline ieee80211_txrx_result __ieee80211_invoke_rx_handlers( for (handler = handlers; *handler != NULL; handler++) { res = (*handler)(rx); if (res != TXRX_CONTINUE) { if (res == TXRX_DROP) { switch (res) { case TXRX_CONTINUE: continue; case TXRX_DROP: I802_DEBUG_INC(local->rx_handlers_drop); if (sta) sta->rx_dropped++; } if (res == TXRX_QUEUED) break; case TXRX_QUEUED: I802_DEBUG_INC(local->rx_handlers_queued); break; } break; } if (res == TXRX_DROP) { if (res == TXRX_DROP) dev_kfree_skb(rx->skb); } return res; } Loading Loading @@ -1242,6 +1245,9 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, u16 type; int multicast; int radiotap_len = 0; struct ieee80211_sub_if_data *prev = NULL; struct sk_buff *skb_new; u8 *bssid; if (status->flag & RX_FLAG_RADIOTAP) { radiotap_len = ieee80211_get_radiotap_len(skb->data); Loading Loading @@ -1289,10 +1295,11 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, rx.u.rx.ra_match = 1; ieee80211_invoke_rx_handlers(local, local->rx_handlers, &rx, sta); } else { struct ieee80211_sub_if_data *prev = NULL; struct sk_buff *skb_new; u8 *bssid = ieee80211_get_bssid(hdr, skb->len - radiotap_len); sta_info_put(sta); return; } bssid = ieee80211_get_bssid(hdr, skb->len - radiotap_len); read_lock(&local->sub_if_lock); list_for_each_entry(sdata, &local->sub_if_list, list) { Loading Loading @@ -1337,7 +1344,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, case IEEE80211_IF_TYPE_AP: if (!bssid) { if (compare_ether_addr(sdata->dev->dev_addr, hdr->addr1) != 0) hdr->addr1)) continue; } else if (!ieee80211_bssid_match(bssid, sdata->dev->dev_addr)) { Loading @@ -1345,8 +1352,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, continue; rx.u.rx.ra_match = 0; } if (sdata->dev == local->mdev && !rx.u.rx.in_scan) if (sdata->dev == local->mdev && !rx.u.rx.in_scan) /* do not receive anything via * master device when not scanning */ continue; Loading @@ -1356,7 +1362,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, (rx.fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA) continue; if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2) != 0) hdr->addr2)) continue; break; } Loading @@ -1373,8 +1379,7 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, rx.skb = skb_new; rx.dev = prev->dev; rx.sdata = prev; ieee80211_invoke_rx_handlers(local, local->rx_handlers, ieee80211_invoke_rx_handlers(local, local->rx_handlers, &rx, sta); } prev = sdata; Loading @@ -1388,7 +1393,6 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, } else dev_kfree_skb(skb); read_unlock(&local->sub_if_lock); } end: if (sta) Loading