Enable open source multiple akm for Broadcom projects
Since not all Broadcom projects share the same capabilities regarding multiple AKM at the moment, we add a control flag WIFI_OPEN_SOURCE_MULTI_AKM for projects that need to utilize the open source path in supplicant to do multiple AKM configuration.
Bug: 336483911
Bug: 297002812
Bug: 331896542
Test: AU drop test
Test: Cross AKM roaming test
Change-Id: I20e4efb06bd171ed47a3c67a10fc52cbce223dcb
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 6e34e87..cb6ca38 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -2086,7 +2086,8 @@
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_DENY_PTK0_REKEY, 0);
}
-#if defined(CONFIG_DRIVER_NL80211_BRCM) || defined(CONFIG_DRIVER_NL80211_SYNA)
+#if (defined(CONFIG_DRIVER_NL80211_BRCM) && !defined(WIFI_BRCM_OPEN_SOURCE_MULTI_AKM)) || \
+ defined(CONFIG_DRIVER_NL80211_SYNA)
if ((wpa_s->key_mgmt & WPA_KEY_MGMT_CROSS_AKM_ROAM) &&
IS_CROSS_AKM_ROAM_KEY_MGMT(ssid->key_mgmt) &&
(wpa_s->group_cipher == WPA_CIPHER_CCMP) &&
@@ -2100,7 +2101,8 @@
if (wpa_key_mgmt_cross_akm(wpa_s->key_mgmt) &&
!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME))
wpas_update_allowed_key_mgmt(wpa_s, ssid);
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
return 0;
}
@@ -4302,15 +4304,23 @@
#endif /* CONFIG_WEP */
if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) &&
-#if defined(CONFIG_DRIVER_NL80211_BRCM) || defined(CONFIG_DRIVER_NL80211_SYNA)
+#if (defined(CONFIG_DRIVER_NL80211_BRCM) && !defined(WIFI_BRCM_OPEN_SOURCE_MULTI_AKM)) || \
+ defined(CONFIG_DRIVER_NL80211_SYNA)
((params.key_mgmt_suite & WPA_KEY_MGMT_PSK) ||
(params.key_mgmt_suite == WPA_KEY_MGMT_FT_PSK))) {
+#elif (defined(CONFIG_DRIVER_NL80211_BRCM) && defined(WIFI_BRCM_OPEN_SOURCE_MULTI_AKM)) || \
+ defined(CONFIG_DRIVER_NL80211_SYNA)
+ (params.key_mgmt_suite == WPA_KEY_MGMT_PSK ||
+ params.key_mgmt_suite == WPA_KEY_MGMT_FT_PSK ||
+ params.key_mgmt_suite == WPA_KEY_MGMT_PSK_SHA256 ||
+ wpa_key_mgmt_wpa_psk_no_sae(params.allowed_key_mgmts))) {
#else
(params.key_mgmt_suite == WPA_KEY_MGMT_PSK ||
params.key_mgmt_suite == WPA_KEY_MGMT_FT_PSK ||
(params.allowed_key_mgmts &
(WPA_KEY_MGMT_PSK | WPA_KEY_MGMT_FT_PSK)))) {
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
params.passphrase = ssid->passphrase;
if (wpa_supplicant_get_psk(wpa_s, bss, ssid, psk) == 0)
params.psk = psk;
@@ -4337,14 +4347,16 @@
else
params.req_key_mgmt_offload = 1;
-#if defined(CONFIG_DRIVER_NL80211_BRCM) || defined(CONFIG_DRIVER_NL80211_SYNA)
+#if (defined(CONFIG_DRIVER_NL80211_BRCM) && !defined(WIFI_BRCM_OPEN_SOURCE_MULTI_AKM)) || \
+ defined(CONFIG_DRIVER_NL80211_SYNA)
if (((params.key_mgmt_suite & WPA_KEY_MGMT_PSK) ||
params.key_mgmt_suite == WPA_KEY_MGMT_PSK_SHA256 ||
params.key_mgmt_suite == WPA_KEY_MGMT_FT_PSK) &&
#else
if ((wpa_key_mgmt_wpa_psk_no_sae(params.key_mgmt_suite) ||
wpa_key_mgmt_wpa_psk_no_sae(params.allowed_key_mgmts)) &&
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
wpa_supplicant_get_psk(wpa_s, bss, ssid, psk) == 0)
params.psk = psk;
}