station: don't allow FT-over-Air without offchannel support

If CMD_REMAIN_ON_CHANNEL isn't supported, don't allow FT-over-Air
This commit is contained in:
James Prestwood 2024-08-29 04:41:01 -07:00 committed by Denis Kenzior
parent 0c228f4465
commit 574b0d80dc
1 changed files with 13 additions and 2 deletions

View File

@ -2105,7 +2105,8 @@ static void station_early_neighbor_report_cb(struct netdev *netdev, int err,
&station->roam_freqs); &station->roam_freqs);
} }
static bool station_can_fast_transition(struct handshake_state *hs, static bool station_can_fast_transition(struct station *station,
struct handshake_state *hs,
struct scan_bss *bss) struct scan_bss *bss)
{ {
uint16_t mdid; uint16_t mdid;
@ -2133,6 +2134,16 @@ static bool station_can_fast_transition(struct handshake_state *hs,
return false; return false;
} }
/*
* FT-over-Air in its current form relies on CMD_REMAIN_ON_CHANNEL. Some
* drivers do not support this so only allow over-DS if this is the case
*/
if (!(hs->mde[4] & 1) &&
!wiphy_supports_cmd_offchannel(station->wiphy)) {
l_debug("FT-over-Air needs offchannel, using reassociation");
return false;
}
return true; return true;
} }
@ -2596,7 +2607,7 @@ static bool station_try_next_transition(struct station *station,
station->ap_directed_roaming = false; station->ap_directed_roaming = false;
/* Can we use Fast Transition? */ /* Can we use Fast Transition? */
if (station_can_fast_transition(hs, bss) && !no_ft) if (station_can_fast_transition(station, hs, bss) && !no_ft)
return station_fast_transition(station, bss); return station_fast_transition(station, bss);
/* Non-FT transition */ /* Non-FT transition */