nl80211: Fix AP MLD frequency update on channel switch
mlme_event() calls nl80211_get_link_id_by_freq() to determine the link to handle reported events. However, in channel switch event it is always setting freq to the default link that leads to the issue that all other events that go to mlme_event() will be handled in the default link. Fix this by setting freq to the correct link specified by the link ID when processing the event for a completed channel switch. Signed-off-by: Chenming Huang <quic_chenhuan@quicinc.com>
This commit is contained in:
parent
bd52684498
commit
9be122d2e0
1 changed files with 12 additions and 3 deletions
|
@ -1260,14 +1260,23 @@ static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
|
||||||
if (cf2)
|
if (cf2)
|
||||||
data.ch_switch.cf2 = nla_get_u32(cf2);
|
data.ch_switch.cf2 = nla_get_u32(cf2);
|
||||||
|
|
||||||
if (finished)
|
|
||||||
bss->flink->freq = data.ch_switch.freq;
|
|
||||||
|
|
||||||
if (link)
|
if (link)
|
||||||
data.ch_switch.link_id = nla_get_u8(link);
|
data.ch_switch.link_id = nla_get_u8(link);
|
||||||
else
|
else
|
||||||
data.ch_switch.link_id = NL80211_DRV_LINK_ID_NA;
|
data.ch_switch.link_id = NL80211_DRV_LINK_ID_NA;
|
||||||
|
|
||||||
|
if (finished) {
|
||||||
|
if (data.ch_switch.link_id != NL80211_DRV_LINK_ID_NA) {
|
||||||
|
struct i802_link *mld_link;
|
||||||
|
|
||||||
|
mld_link = nl80211_get_link(bss,
|
||||||
|
data.ch_switch.link_id);
|
||||||
|
mld_link->freq = data.ch_switch.freq;
|
||||||
|
} else {
|
||||||
|
bss->flink->freq = data.ch_switch.freq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (link && is_sta_interface(drv->nlmode)) {
|
if (link && is_sta_interface(drv->nlmode)) {
|
||||||
u8 link_id = data.ch_switch.link_id;
|
u8 link_id = data.ch_switch.link_id;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue