Commit 39d80599 authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: mlme: switch some things back to deflink

With MLO, when we'll disconnect from an AP MLD, we'll just
destroy all the links. Therefore, the only thing we (may)
need to reset is the deflink data, so switch back to that
and adjust the comments accordingly.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 4a21a8ae
...@@ -2438,7 +2438,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2438,7 +2438,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
{ {
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local;
struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
struct ieee80211_link_data *link = &sdata->deflink; struct ieee80211_link_data *link = &sdata->deflink;
u32 changed = 0; u32 changed = 0;
struct ieee80211_prep_tx_info info = { struct ieee80211_prep_tx_info info = {
...@@ -2456,7 +2455,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2456,7 +2455,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
ieee80211_stop_poll(sdata); ieee80211_stop_poll(sdata);
ifmgd->associated = false; ifmgd->associated = false;
link->u.mgd.bss = NULL;
/* other links will be destroyed */
sdata->deflink.u.mgd.bss = NULL;
netif_carrier_off(sdata->dev); netif_carrier_off(sdata->dev);
/* /*
...@@ -2494,7 +2496,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2494,7 +2496,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
* driver requested so. * driver requested so.
*/ */
if (ieee80211_hw_check(&local->hw, DEAUTH_NEED_MGD_TX_PREP) && if (ieee80211_hw_check(&local->hw, DEAUTH_NEED_MGD_TX_PREP) &&
!link->u.mgd.have_beacon) { !sdata->deflink.u.mgd.have_beacon) {
drv_mgd_prepare_tx(sdata->local, sdata, &info); drv_mgd_prepare_tx(sdata->local, sdata, &info);
} }
...@@ -2525,9 +2527,9 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2525,9 +2527,9 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
changed |= BSS_CHANGED_ASSOC; changed |= BSS_CHANGED_ASSOC;
sdata->vif.cfg.assoc = false; sdata->vif.cfg.assoc = false;
link->u.mgd.p2p_noa_index = -1; sdata->deflink.u.mgd.p2p_noa_index = -1;
memset(&link->conf->p2p_noa_attr, 0, memset(&sdata->vif.bss_conf.p2p_noa_attr, 0,
sizeof(link->conf->p2p_noa_attr)); sizeof(sdata->vif.bss_conf.p2p_noa_attr));
/* on the next assoc, re-program HT/VHT parameters */ /* on the next assoc, re-program HT/VHT parameters */
memset(&ifmgd->ht_capa, 0, sizeof(ifmgd->ht_capa)); memset(&ifmgd->ht_capa, 0, sizeof(ifmgd->ht_capa));
...@@ -2535,15 +2537,19 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2535,15 +2537,19 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
memset(&ifmgd->vht_capa, 0, sizeof(ifmgd->vht_capa)); memset(&ifmgd->vht_capa, 0, sizeof(ifmgd->vht_capa));
memset(&ifmgd->vht_capa_mask, 0, sizeof(ifmgd->vht_capa_mask)); memset(&ifmgd->vht_capa_mask, 0, sizeof(ifmgd->vht_capa_mask));
/* reset MU-MIMO ownership and group data */ /*
memset(link->conf->mu_group.membership, 0, * reset MU-MIMO ownership and group data in default link,
sizeof(link->conf->mu_group.membership)); * if used, other links are destroyed
memset(link->conf->mu_group.position, 0, */
sizeof(link->conf->mu_group.position)); memset(sdata->vif.bss_conf.mu_group.membership, 0,
sizeof(sdata->vif.bss_conf.mu_group.membership));
memset(sdata->vif.bss_conf.mu_group.position, 0,
sizeof(sdata->vif.bss_conf.mu_group.position));
if (!sdata->vif.valid_links)
changed |= BSS_CHANGED_MU_GROUPS; changed |= BSS_CHANGED_MU_GROUPS;
link->conf->mu_mimo_owner = false; sdata->vif.bss_conf.mu_mimo_owner = false;
link->ap_power_level = IEEE80211_UNSET_POWER_LEVEL; sdata->deflink.ap_power_level = IEEE80211_UNSET_POWER_LEVEL;
del_timer_sync(&local->dynamic_ps_timer); del_timer_sync(&local->dynamic_ps_timer);
cancel_work_sync(&local->dynamic_ps_enable_work); cancel_work_sync(&local->dynamic_ps_enable_work);
...@@ -2552,7 +2558,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2552,7 +2558,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
if (sdata->vif.cfg.arp_addr_cnt) if (sdata->vif.cfg.arp_addr_cnt)
changed |= BSS_CHANGED_ARP_FILTER; changed |= BSS_CHANGED_ARP_FILTER;
link->conf->qos = false; sdata->vif.bss_conf.qos = false;
changed |= BSS_CHANGED_QOS; changed |= BSS_CHANGED_QOS;
/* The BSSID (not really interesting) and HT changed */ /* The BSSID (not really interesting) and HT changed */
...@@ -2565,27 +2571,27 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2565,27 +2571,27 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
del_timer_sync(&sdata->u.mgd.conn_mon_timer); del_timer_sync(&sdata->u.mgd.conn_mon_timer);
del_timer_sync(&sdata->u.mgd.bcn_mon_timer); del_timer_sync(&sdata->u.mgd.bcn_mon_timer);
del_timer_sync(&sdata->u.mgd.timer); del_timer_sync(&sdata->u.mgd.timer);
del_timer_sync(&link->u.mgd.chswitch_timer); del_timer_sync(&sdata->deflink.u.mgd.chswitch_timer);
link->conf->dtim_period = 0; sdata->vif.bss_conf.dtim_period = 0;
link->conf->beacon_rate = NULL; sdata->vif.bss_conf.beacon_rate = NULL;
link->u.mgd.have_beacon = false; sdata->deflink.u.mgd.have_beacon = false;
link->u.mgd.tracking_signal_avg = false; sdata->deflink.u.mgd.tracking_signal_avg = false;
link->u.mgd.disable_wmm_tracking = false; sdata->deflink.u.mgd.disable_wmm_tracking = false;
ifmgd->flags = 0; ifmgd->flags = 0;
link->u.mgd.conn_flags = 0; sdata->deflink.u.mgd.conn_flags = 0;
mutex_lock(&local->mtx); mutex_lock(&local->mtx);
ieee80211_link_release_channel(link); ieee80211_link_release_channel(link);
link->conf->csa_active = false; sdata->vif.bss_conf.csa_active = false;
link->u.mgd.csa_waiting_bcn = false; sdata->deflink.u.mgd.csa_waiting_bcn = false;
link->u.mgd.csa_ignored_same_chan = false; sdata->deflink.u.mgd.csa_ignored_same_chan = false;
if (link->csa_block_tx) { if (sdata->deflink.csa_block_tx) {
ieee80211_wake_vif_queues(local, sdata, ieee80211_wake_vif_queues(local, sdata,
IEEE80211_QUEUE_STOP_REASON_CSA); IEEE80211_QUEUE_STOP_REASON_CSA);
link->csa_block_tx = false; sdata->deflink.csa_block_tx = false;
} }
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
...@@ -2593,9 +2599,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -2593,9 +2599,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
memset(ifmgd->tx_tspec, 0, sizeof(ifmgd->tx_tspec)); memset(ifmgd->tx_tspec, 0, sizeof(ifmgd->tx_tspec));
cancel_delayed_work_sync(&ifmgd->tx_tspec_wk); cancel_delayed_work_sync(&ifmgd->tx_tspec_wk);
bss_conf->pwr_reduction = 0; sdata->vif.bss_conf.pwr_reduction = 0;
bss_conf->tx_pwr_env_num = 0; sdata->vif.bss_conf.tx_pwr_env_num = 0;
memset(bss_conf->tx_pwr_env, 0, sizeof(bss_conf->tx_pwr_env)); memset(sdata->vif.bss_conf.tx_pwr_env, 0,
sizeof(sdata->vif.bss_conf.tx_pwr_env));
} }
static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata) static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata)
...@@ -2912,6 +2919,7 @@ static void __ieee80211_disconnect(struct ieee80211_sub_if_data *sdata) ...@@ -2912,6 +2919,7 @@ static void __ieee80211_disconnect(struct ieee80211_sub_if_data *sdata)
WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY, WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
tx, frame_buf); tx, frame_buf);
mutex_lock(&local->mtx); mutex_lock(&local->mtx);
/* the other links will be destroyed */
sdata->vif.bss_conf.csa_active = false; sdata->vif.bss_conf.csa_active = false;
sdata->deflink.u.mgd.csa_waiting_bcn = false; sdata->deflink.u.mgd.csa_waiting_bcn = false;
if (sdata->deflink.csa_block_tx) { if (sdata->deflink.csa_block_tx) {
...@@ -3058,7 +3066,6 @@ static void ieee80211_destroy_assoc_data(struct ieee80211_sub_if_data *sdata, ...@@ -3058,7 +3066,6 @@ static void ieee80211_destroy_assoc_data(struct ieee80211_sub_if_data *sdata,
del_timer_sync(&sdata->u.mgd.timer); del_timer_sync(&sdata->u.mgd.timer);
sta_info_destroy_addr(sdata, assoc_data->bss->bssid); sta_info_destroy_addr(sdata, assoc_data->bss->bssid);
/* FIXME: other links are destroyed? */
sdata->deflink.u.mgd.conn_flags = 0; sdata->deflink.u.mgd.conn_flags = 0;
eth_zero_addr(sdata->deflink.u.mgd.bssid); eth_zero_addr(sdata->deflink.u.mgd.bssid);
ieee80211_link_info_change_notify(sdata, &sdata->deflink, ieee80211_link_info_change_notify(sdata, &sdata->deflink,
...@@ -6408,7 +6415,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, ...@@ -6408,7 +6415,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
return 0; return 0;
err_clear: err_clear:
eth_zero_addr(link->u.mgd.bssid); eth_zero_addr(sdata->deflink.u.mgd.bssid);
ieee80211_link_info_change_notify(sdata, &sdata->deflink, ieee80211_link_info_change_notify(sdata, &sdata->deflink,
BSS_CHANGED_BSSID); BSS_CHANGED_BSSID);
ifmgd->assoc_data = NULL; ifmgd->assoc_data = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment