wifi: mac80211_hwsim: set HAS_RATE_CONTROL when using NAN

- NAN switches between bands/channels per its schedule, so mac80211
  rate control can't work, set HAS_RATE_CONTROL instead.
- Skip rate control checks for NAN interfaces in
  mac80211_hwsim_sta_rc_update() as it's not relevant.
- Move set_rts_threshold stub to HWSIM_COMMON_OPS and return 0 instead
  of -EOPNOTSUPP to prevent failures in non-MLO tests that set RTS
  threshold (hwsim ignores the use_rts instruction from mac80211
  anyway).

Signed-off-by: Daniel Gabay <daniel.gabay@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260506064301.216e68be61ac.If9ef94a12cec8dfc55416afaf745d6e5025a5ec9@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Daniel Gabay 2026-05-06 06:44:28 +03:00 committed by Johannes Berg
parent a6ea8948e3
commit 60e3398726

View File

@ -2747,6 +2747,10 @@ mac80211_hwsim_sta_rc_update(struct ieee80211_hw *hw,
u32 bw = U32_MAX;
int link_id;
if (vif->type == NL80211_IFTYPE_NAN ||
vif->type == NL80211_IFTYPE_NAN_DATA)
return;
rcu_read_lock();
for (link_id = 0;
link_id < ARRAY_SIZE(vif->link_conf);
@ -3475,7 +3479,8 @@ static int mac80211_hwsim_tx_last_beacon(struct ieee80211_hw *hw)
static int mac80211_hwsim_set_rts_threshold(struct ieee80211_hw *hw,
int radio_idx, u32 value)
{
return -EOPNOTSUPP;
/* hwsim ignores the use_rts instruction from mac80211 anyway */
return 0;
}
static int mac80211_hwsim_change_vif_links(struct ieee80211_hw *hw,
@ -4239,6 +4244,7 @@ static int mac80211_hwsim_set_radar_background(struct ieee80211_hw *hw,
.abort_pmsr = mac80211_hwsim_abort_pmsr, \
.set_radar_background = mac80211_hwsim_set_radar_background, \
.set_key = mac80211_hwsim_set_key, \
.set_rts_threshold = mac80211_hwsim_set_rts_threshold, \
.start_nan = mac80211_hwsim_nan_start, \
.stop_nan = mac80211_hwsim_nan_stop, \
.nan_change_conf = mac80211_hwsim_nan_change_config, \
@ -4284,7 +4290,6 @@ static const struct ieee80211_ops mac80211_hwsim_mchan_ops = {
static const struct ieee80211_ops mac80211_hwsim_mlo_ops = {
HWSIM_COMMON_OPS
HWSIM_CHANCTX_OPS
.set_rts_threshold = mac80211_hwsim_set_rts_threshold,
.change_vif_links = mac80211_hwsim_change_vif_links,
.change_sta_links = mac80211_hwsim_change_sta_links,
.sta_state = mac80211_hwsim_sta_state,
@ -5726,6 +5731,12 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
hw->wiphy->nan_capa.phy.ht = hwsim_nan_ht_cap;
hw->wiphy->nan_capa.phy.vht = hwsim_nan_vht_cap;
hw->wiphy->nan_capa.phy.he = hwsim_nan_he_cap;
/*
* NAN switches between bands/channels per its schedule,
* so mac80211 rate control can't work here.
*/
ieee80211_hw_set(hw, HAS_RATE_CONTROL);
}
data->if_combination.radar_detect_widths =