summaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorLiad Kaufman <liad.kaufman@intel.com>2014-11-09 11:50:08 -0500
committerJohannes Berg <johannes.berg@intel.com>2014-11-19 12:44:29 -0500
commit1277b4a9f531e84e26f9e0210c1801b0c0bf81ca (patch)
treebabc1273db9300734cecbab2d692bd39db946028 /net/mac80211/mlme.c
parent24d342c514827d52d008736bf02c9f145651ca8e (diff)
mac80211: retransmit TDLS teardown packet through AP if not ACKed
Since the TDLS peer station might not receive the teardown packet (e.g., when in PS), this makes sure the packet is retransmitted - this time through the AP - if the TDLS peer didn't ACK the packet. Signed-off-by: Liad Kaufman <liad.kaufman@intel.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 243539878991..11a937f3fdeb 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -4003,6 +4003,11 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
4003 ifmgd->req_smps = IEEE80211_SMPS_AUTOMATIC; 4003 ifmgd->req_smps = IEEE80211_SMPS_AUTOMATIC;
4004 else 4004 else
4005 ifmgd->req_smps = IEEE80211_SMPS_OFF; 4005 ifmgd->req_smps = IEEE80211_SMPS_OFF;
4006
4007 /* Setup TDLS data */
4008 spin_lock_init(&ifmgd->teardown_lock);
4009 ifmgd->teardown_skb = NULL;
4010 ifmgd->orig_teardown_skb = NULL;
4006} 4011}
4007 4012
4008/* scan finished notification */ 4013/* scan finished notification */
@@ -4865,6 +4870,13 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata)
4865 } 4870 }
4866 if (ifmgd->auth_data) 4871 if (ifmgd->auth_data)
4867 ieee80211_destroy_auth_data(sdata, false); 4872 ieee80211_destroy_auth_data(sdata, false);
4873 spin_lock_bh(&ifmgd->teardown_lock);
4874 if (ifmgd->teardown_skb) {
4875 kfree_skb(ifmgd->teardown_skb);
4876 ifmgd->teardown_skb = NULL;
4877 ifmgd->orig_teardown_skb = NULL;
4878 }
4879 spin_unlock_bh(&ifmgd->teardown_lock);
4868 del_timer_sync(&ifmgd->timer); 4880 del_timer_sync(&ifmgd->timer);
4869 sdata_unlock(sdata); 4881 sdata_unlock(sdata);
4870} 4882}