mac80211: implement basic background scanning
[pandora-kernel.git] / net / mac80211 / rx.c
index 66c797c..cb95a31 100644 (file)
@@ -418,10 +418,11 @@ ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
        struct ieee80211_local *local = rx->local;
        struct sk_buff *skb = rx->skb;
 
-       if (unlikely(local->hw_scanning))
+       if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning)))
                return ieee80211_scan_rx(rx->sdata, skb);
 
-       if (unlikely(local->sw_scanning)) {
+       if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning) &&
+                    (rx->flags & IEEE80211_RX_IN_SCAN))) {
                /* drop all the other packets during a software scan anyway */
                if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED)
                        dev_kfree_skb(skb);
@@ -1539,7 +1540,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
                        info = IEEE80211_SKB_CB(fwd_skb);
                        memset(info, 0, sizeof(*info));
                        info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
-                       fwd_skb->iif = rx->dev->ifindex;
+                       info->control.vif = &rx->sdata->vif;
                        ieee80211_select_queue(local, fwd_skb);
                        if (is_multicast_ether_addr(fwd_hdr->addr3))
                                memcpy(fwd_hdr->addr1, fwd_hdr->addr3,
@@ -2136,7 +2137,8 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
                return;
        }
 
-       if (unlikely(local->sw_scanning || local->hw_scanning))
+       if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
+                    test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
                rx.flags |= IEEE80211_RX_IN_SCAN;
 
        ieee80211_parse_qos(&rx);