summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/mac80211/ieee80211_i.h6
-rw-r--r--net/mac80211/iface.c2
-rw-r--r--net/mac80211/mlme.c3
-rw-r--r--net/mac80211/tdls.c28
4 files changed, 20 insertions, 19 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index cb874760e99f..0d8539caebca 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -503,6 +503,9 @@ struct ieee80211_if_managed {
503 struct ieee80211_ht_cap ht_capa_mask; /* Valid parts of ht_capa */ 503 struct ieee80211_ht_cap ht_capa_mask; /* Valid parts of ht_capa */
504 struct ieee80211_vht_cap vht_capa; /* configured VHT overrides */ 504 struct ieee80211_vht_cap vht_capa; /* configured VHT overrides */
505 struct ieee80211_vht_cap vht_capa_mask; /* Valid parts of vht_capa */ 505 struct ieee80211_vht_cap vht_capa_mask; /* Valid parts of vht_capa */
506
507 u8 tdls_peer[ETH_ALEN] __aligned(2);
508 struct delayed_work tdls_peer_del_work;
506}; 509};
507 510
508struct ieee80211_if_ibss { 511struct ieee80211_if_ibss {
@@ -815,9 +818,6 @@ struct ieee80211_sub_if_data {
815 bool radar_required; 818 bool radar_required;
816 struct delayed_work dfs_cac_timer_work; 819 struct delayed_work dfs_cac_timer_work;
817 820
818 u8 tdls_peer[ETH_ALEN] __aligned(2);
819 struct delayed_work tdls_peer_del_work;
820
821 /* 821 /*
822 * AP this belongs to: self in AP mode and 822 * AP this belongs to: self in AP mode and
823 * corresponding AP in VLAN mode, NULL for 823 * corresponding AP in VLAN mode, NULL for
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index bbf51b2f0651..2a12b8aa6aad 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1672,8 +1672,6 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1672 ieee80211_dfs_cac_timer_work); 1672 ieee80211_dfs_cac_timer_work);
1673 INIT_DELAYED_WORK(&sdata->dec_tailroom_needed_wk, 1673 INIT_DELAYED_WORK(&sdata->dec_tailroom_needed_wk,
1674 ieee80211_delayed_tailroom_dec); 1674 ieee80211_delayed_tailroom_dec);
1675 INIT_DELAYED_WORK(&sdata->tdls_peer_del_work,
1676 ieee80211_tdls_peer_del_work);
1677 1675
1678 for (i = 0; i < IEEE80211_NUM_BANDS; i++) { 1676 for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
1679 struct ieee80211_supported_band *sband; 1677 struct ieee80211_supported_band *sband;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index d863ff8b6e41..fcc074871d51 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -3713,6 +3713,8 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
3713 INIT_WORK(&ifmgd->csa_connection_drop_work, 3713 INIT_WORK(&ifmgd->csa_connection_drop_work,
3714 ieee80211_csa_connection_drop_work); 3714 ieee80211_csa_connection_drop_work);
3715 INIT_WORK(&ifmgd->request_smps_work, ieee80211_request_smps_mgd_work); 3715 INIT_WORK(&ifmgd->request_smps_work, ieee80211_request_smps_mgd_work);
3716 INIT_DELAYED_WORK(&ifmgd->tdls_peer_del_work,
3717 ieee80211_tdls_peer_del_work);
3716 setup_timer(&ifmgd->timer, ieee80211_sta_timer, 3718 setup_timer(&ifmgd->timer, ieee80211_sta_timer,
3717 (unsigned long) sdata); 3719 (unsigned long) sdata);
3718 setup_timer(&ifmgd->bcn_mon_timer, ieee80211_sta_bcn_mon_timer, 3720 setup_timer(&ifmgd->bcn_mon_timer, ieee80211_sta_bcn_mon_timer,
@@ -4576,6 +4578,7 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata)
4576 cancel_work_sync(&ifmgd->request_smps_work); 4578 cancel_work_sync(&ifmgd->request_smps_work);
4577 cancel_work_sync(&ifmgd->csa_connection_drop_work); 4579 cancel_work_sync(&ifmgd->csa_connection_drop_work);
4578 cancel_work_sync(&ifmgd->chswitch_work); 4580 cancel_work_sync(&ifmgd->chswitch_work);
4581 cancel_delayed_work_sync(&ifmgd->tdls_peer_del_work);
4579 4582
4580 sdata_lock(sdata); 4583 sdata_lock(sdata);
4581 if (ifmgd->assoc_data) { 4584 if (ifmgd->assoc_data) {
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index 72eebea7e60a..c59b8f460eb9 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -22,14 +22,14 @@ void ieee80211_tdls_peer_del_work(struct work_struct *wk)
22 struct ieee80211_local *local; 22 struct ieee80211_local *local;
23 23
24 sdata = container_of(wk, struct ieee80211_sub_if_data, 24 sdata = container_of(wk, struct ieee80211_sub_if_data,
25 tdls_peer_del_work.work); 25 u.mgd.tdls_peer_del_work.work);
26 local = sdata->local; 26 local = sdata->local;
27 27
28 mutex_lock(&local->mtx); 28 mutex_lock(&local->mtx);
29 if (!is_zero_ether_addr(sdata->tdls_peer)) { 29 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer)) {
30 tdls_dbg(sdata, "TDLS del peer %pM\n", sdata->tdls_peer); 30 tdls_dbg(sdata, "TDLS del peer %pM\n", sdata->u.mgd.tdls_peer);
31 sta_info_destroy_addr(sdata, sdata->tdls_peer); 31 sta_info_destroy_addr(sdata, sdata->u.mgd.tdls_peer);
32 eth_zero_addr(sdata->tdls_peer); 32 eth_zero_addr(sdata->u.mgd.tdls_peer);
33 } 33 }
34 mutex_unlock(&local->mtx); 34 mutex_unlock(&local->mtx);
35} 35}
@@ -561,8 +561,8 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
561 mutex_lock(&local->mtx); 561 mutex_lock(&local->mtx);
562 562
563 /* we don't support concurrent TDLS peer setups */ 563 /* we don't support concurrent TDLS peer setups */
564 if (!is_zero_ether_addr(sdata->tdls_peer) && 564 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer) &&
565 !ether_addr_equal(sdata->tdls_peer, peer)) { 565 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) {
566 ret = -EBUSY; 566 ret = -EBUSY;
567 goto exit; 567 goto exit;
568 } 568 }
@@ -593,9 +593,9 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
593 if (ret < 0) 593 if (ret < 0)
594 goto exit; 594 goto exit;
595 595
596 memcpy(sdata->tdls_peer, peer, ETH_ALEN); 596 memcpy(sdata->u.mgd.tdls_peer, peer, ETH_ALEN);
597 ieee80211_queue_delayed_work(&sdata->local->hw, 597 ieee80211_queue_delayed_work(&sdata->local->hw,
598 &sdata->tdls_peer_del_work, 598 &sdata->u.mgd.tdls_peer_del_work,
599 TDLS_PEER_SETUP_TIMEOUT); 599 TDLS_PEER_SETUP_TIMEOUT);
600 600
601exit: 601exit:
@@ -751,8 +751,8 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
751 set_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH); 751 set_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH);
752 rcu_read_unlock(); 752 rcu_read_unlock();
753 753
754 WARN_ON_ONCE(is_zero_ether_addr(sdata->tdls_peer) || 754 WARN_ON_ONCE(is_zero_ether_addr(sdata->u.mgd.tdls_peer) ||
755 !ether_addr_equal(sdata->tdls_peer, peer)); 755 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer));
756 ret = 0; 756 ret = 0;
757 break; 757 break;
758 case NL80211_TDLS_DISABLE_LINK: 758 case NL80211_TDLS_DISABLE_LINK:
@@ -766,9 +766,9 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
766 break; 766 break;
767 } 767 }
768 768
769 if (ret == 0 && ether_addr_equal(sdata->tdls_peer, peer)) { 769 if (ret == 0 && ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) {
770 cancel_delayed_work(&sdata->tdls_peer_del_work); 770 cancel_delayed_work(&sdata->u.mgd.tdls_peer_del_work);
771 eth_zero_addr(sdata->tdls_peer); 771 eth_zero_addr(sdata->u.mgd.tdls_peer);
772 } 772 }
773 773
774 mutex_unlock(&local->mtx); 774 mutex_unlock(&local->mtx);