A prior commit refactored the AKM selection in wiphy.c. This
ended up breaking FILS tests due to the hard coding of a
false fils_hint in wiphy_select_akm. Since our FILS tests
only advertise FILS AKMs wiphy_can_connect would return false
for these networks.
Similar to wiphy_select_akm, add a fils hint parameter to
wiphy_can_connect and pass that down directly to wiphy_select_akm.
---
src/network.c | 3 ++-
src/station.c | 3 ++-
src/wiphy.c | 5 +++--
src/wiphy.h | 3 ++-
4 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/network.c b/src/network.c
index 8b68f9e1..1b1f7f86 100644
--- a/src/network.c
+++ b/src/network.c
@@ -768,6 +768,7 @@ struct scan_bss *network_bss_select(struct network *network,
struct wiphy *wiphy = station_get_wiphy(network->station);
const struct l_queue_entry *bss_entry;
struct scan_bss *candidate = NULL;
+ bool fils_hint = network_has_erp_identity(network);
for (bss_entry = l_queue_get_entries(bss_list); bss_entry;
bss_entry = bss_entry->next) {
@@ -776,7 +777,7 @@ struct scan_bss *network_bss_select(struct network *network,
switch (network_get_security(network)) {
case SECURITY_PSK:
case SECURITY_8021X:
- if (!wiphy_can_connect(wiphy, bss))
+ if (!wiphy_can_connect(wiphy, bss, fils_hint))
continue;
/* fall through */
case SECURITY_NONE:
diff --git a/src/station.c b/src/station.c
index ae9d1f24..8a940cc6 100644
--- a/src/station.c
+++ b/src/station.c
@@ -1938,6 +1938,7 @@ static bool station_roam_scan_notify(int err, struct l_queue
*bss_list,
uint16_t mdid;
enum security orig_security, security;
bool seen = false;
+ bool fils_hint = network_has_erp_identity(network);
if (err) {
station_roam_failed(station);
@@ -1994,7 +1995,7 @@ static bool station_roam_scan_notify(int err, struct l_queue
*bss_list,
seen = true;
- if (!wiphy_can_connect(station->wiphy, bss))
+ if (!wiphy_can_connect(station->wiphy, bss, fils_hint))
goto next;
if (blacklist_contains_bss(bss->addr))
diff --git a/src/wiphy.c b/src/wiphy.c
index 7d5dc4b5..7d491913 100644
--- a/src/wiphy.c
+++ b/src/wiphy.c
@@ -397,7 +397,8 @@ const struct scan_freq_set *wiphy_get_supported_freqs(
return wiphy->supported_freqs;
}
-bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss)
+bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss,
+ bool fils_hint)
{
struct ie_rsn_info rsn_info;
int r;
@@ -416,7 +417,7 @@ bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss)
rsn_info.group_management_cipher))
return false;
- return wiphy_select_akm(wiphy, bss, false);
+ return wiphy_select_akm(wiphy, bss, fils_hint);
} else if (r != -ENOENT)
return false;
diff --git a/src/wiphy.h b/src/wiphy.h
index 50fcb182..c5891f73 100644
--- a/src/wiphy.h
+++ b/src/wiphy.h
@@ -78,7 +78,8 @@ const char *wiphy_get_path(struct wiphy *wiphy);
uint32_t wiphy_get_supported_bands(struct wiphy *wiphy);
const struct scan_freq_set *wiphy_get_supported_freqs(
const struct wiphy *wiphy);
-bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss);
+bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss,
+ bool fils_hint);
bool wiphy_supports_cmds_auth_assoc(struct wiphy *wiphy);
bool wiphy_can_randomize_mac_addr(struct wiphy *wiphy);
bool wiphy_rrm_capable(struct wiphy *wiphy);
--
2.26.2