diff options
-rw-r--r-- | net/mac80211/ieee80211_i.h | 6 | ||||
-rw-r--r-- | net/mac80211/iface.c | 2 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 3 | ||||
-rw-r--r-- | net/mac80211/tdls.c | 28 |
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 | ||
508 | struct ieee80211_if_ibss { | 511 | struct 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 | ||
601 | exit: | 601 | exit: |
@@ -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); |