mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
wifi: mac80211: determine missing link_id in ieee80211_rx_for_interface() based on frequency
For broadcast frames, every interface might have to process it and therefore the link_id cannot be determined in the driver. In mac80211, when the frame is about to be forwarded to each interface, we can use the member "freq" in struct ieee80211_rx_status to determine the "link_id" for each interface. Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com> Reviewed-by: Money Wang <money.wang@mediatek.com> Link: https://patch.msgid.link/20250721062929.1662700-1-michael-cy.lee@mediatek.com [simplify, remove unnecessary link->conf check] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
c639a44ac6
commit
4970e393eb
|
|
@ -5106,8 +5106,24 @@ static bool ieee80211_rx_for_interface(struct ieee80211_rx_data *rx,
|
|||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
|
||||
sta = sta_info_get_bss(rx->sdata, hdr->addr2);
|
||||
if (status->link_valid)
|
||||
if (status->link_valid) {
|
||||
link_id = status->link_id;
|
||||
} else if (ieee80211_vif_is_mld(&rx->sdata->vif) &&
|
||||
status->freq) {
|
||||
struct ieee80211_link_data *link;
|
||||
struct ieee80211_chanctx_conf *conf;
|
||||
|
||||
for_each_link_data_rcu(rx->sdata, link) {
|
||||
conf = rcu_dereference(link->conf->chanctx_conf);
|
||||
if (!conf || !conf->def.chan)
|
||||
continue;
|
||||
|
||||
if (status->freq == conf->def.chan->center_freq) {
|
||||
link_id = link->link_id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ieee80211_rx_data_set_sta(rx, sta, link_id))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user