From: Sara Sharon <[email protected]>

Some buggy APs keep the CSA IE in probes after the channel
switch was completed and can silence us for no good reason.
Apply quiet mode only from beacons. If there is real channel
switch going on, we will see the beacon anyway.

Signed-off-by: Sara Sharon <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
---
 net/mac80211/mlme.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 5f9290f5b892..6d1e7e6f1c21 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1295,7 +1295,7 @@ ieee80211_sta_process_chanswitch(struct 
ieee80211_sub_if_data *sdata,
        if (!res) {
                ch_switch.timestamp = timestamp;
                ch_switch.device_timestamp = device_timestamp;
-               ch_switch.block_tx = csa_ie.mode;
+               ch_switch.block_tx =  beacon ? csa_ie.mode : 0;
                ch_switch.chandef = csa_ie.chandef;
                ch_switch.count = csa_ie.count;
                ch_switch.delay = csa_ie.max_switch_time;
@@ -1388,7 +1388,7 @@ ieee80211_sta_process_chanswitch(struct 
ieee80211_sub_if_data *sdata,
 
        sdata->vif.csa_active = true;
        sdata->csa_chandef = csa_ie.chandef;
-       sdata->csa_block_tx = csa_ie.mode;
+       sdata->csa_block_tx = ch_switch.block_tx;
        ifmgd->csa_ignored_same_chan = false;
 
        if (sdata->csa_block_tx)
@@ -1422,7 +1422,7 @@ ieee80211_sta_process_chanswitch(struct 
ieee80211_sub_if_data *sdata,
         * reset when the disconnection worker runs.
         */
        sdata->vif.csa_active = true;
-       sdata->csa_block_tx = csa_ie.mode;
+       sdata->csa_block_tx = ch_switch.block_tx;
 
        ieee80211_queue_work(&local->hw, &ifmgd->csa_connection_drop_work);
        mutex_unlock(&local->chanctx_mtx);
-- 
2.20.1

Reply via email to