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>
if (cf2)
data.ch_switch.cf2 = nla_get_u32(cf2);
- if (finished)
- bss->flink->freq = data.ch_switch.freq;
-
if (link)
data.ch_switch.link_id = nla_get_u8(link);
else
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)) {
u8 link_id = data.ch_switch.link_id;