wifi: mac80211: Do not force off-channel for management Tx with MLO
authorIlan Peer <ilan.peer@intel.com>
Sun, 27 Aug 2023 11:05:31 +0000 (14:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 11 Sep 2023 10:33:54 +0000 (12:33 +0200)
When user space transmits a management frame it is expected to use
the MLD addresses if the connection is an MLD one. Thus, in case
the management Tx is using the MLD address and no channel is configured
off-channel should not be used (as one of the active links would be used).

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230827135854.73c8efce252f.Ie4b0a842debb24ef25c5e6cb2ad69b9f46bc4b2a@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/offchannel.c

index be377ed12baa3985b934bf8ca1c773c1efebf01c..071582dbe6a51f00ce242dffe8ebe631f9f87685 100644 (file)
@@ -829,8 +829,13 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
                if (!sdata->u.mgd.associated ||
                    (params->offchan && params->wait &&
                     local->ops->remain_on_channel &&
-                    memcmp(sdata->vif.cfg.ap_addr, mgmt->bssid, ETH_ALEN)))
+                    memcmp(sdata->vif.cfg.ap_addr, mgmt->bssid, ETH_ALEN))) {
                        need_offchan = true;
+               } else if (sdata->u.mgd.associated &&
+                          ether_addr_equal(sdata->vif.cfg.ap_addr, mgmt->da)) {
+                       sta = sta_info_get_bss(sdata, mgmt->da);
+                       mlo_sta = sta && sta->sta.mlo;
+               }
                break;
        case NL80211_IFTYPE_P2P_DEVICE:
                need_offchan = true;