wifi: mac80211: handle link ID during management Tx

During non-STA management Tx, when source address is same as one of the
link addresses and even when userspace requested Tx on a specific link,
the link ID is not set in the TX control information. Now if the MLD
address is also the same as that of the link address, then mac80211
fills link as "unspecified", since it looks like MLD TX.

This is unexpected, however, since non-STA TX must specify which link
to use. In hwsim, this will (after warnings) result in dropping such
frames as well.

Use and set the link id if the link bss is matching the address and
requested channel.

Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
Link: https://msgid.link/20240410052705.169865-1-quic_adisi@quicinc.com
Link: https://lore.kernel.org/r/0496fb7e-53cc-476f-8052-985d82fd8d01@quicinc.com
[reword commit message, should spell out hwsim etc.]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Sriram R 2024-04-10 10:57:05 +05:30 committed by Johannes Berg
parent 6d4ed5b356
commit b0d2d8f996

View File

@ -897,8 +897,18 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
break;
}
if (ether_addr_equal(conf->addr, mgmt->sa))
if (ether_addr_equal(conf->addr, mgmt->sa)) {
/* If userspace requested Tx on a specific link
* use the same link id if the link bss is matching
* the requested chan.
*/
if (sdata->vif.valid_links &&
params->link_id >= 0 && params->link_id == i &&
params->chan == chanctx_conf->def.chan)
link_id = i;
break;
}
chanctx_conf = NULL;
}