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/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index 244b38e..a895f9c 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -2955,11 +2955,13 @@
#define WFA_CAPA_QM_UNSOLIC_DSCP BIT(1)
#define WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC BIT(2)
-#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)
#define WPA_KEY_MGMT_CROSS_AKM_ROAM (WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_PSK)
#define IS_CROSS_AKM_ROAM_KEY_MGMT(key_mgmt) \
((key_mgmt & WPA_KEY_MGMT_CROSS_AKM_ROAM) == WPA_KEY_MGMT_CROSS_AKM_ROAM)
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
struct ieee80211_neighbor_ap_info {
u8 tbtt_info_hdr;
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 3b96d55..ac2f457 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -3348,7 +3348,8 @@
}
#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
-#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)
static int wpa_cross_akm_key_mgmt_to_suites(unsigned int key_mgmt_suites, u32 suites[],
int max_suites)
{
@@ -3364,7 +3365,8 @@
return num_suites;
}
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
#ifdef CONFIG_DRIVER_NL80211_QCA
static int issue_key_mgmt_set_key(struct wpa_driver_nl80211_data *drv,
@@ -7051,7 +7053,8 @@
os_free(mgmt);
}
-#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 (IS_CROSS_AKM_ROAM_KEY_MGMT(params->key_mgmt_suite)) {
int num_suites;
u32 suites[NL80211_MAX_NR_AKM_SUITES];
@@ -7066,7 +7069,8 @@
return -1;
}
}
-#endif /* CONFIG_DRIVER_NL80211_BRCM || CONFIG_DRIVER_NL80211_SYNA */
+#endif /* (CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM) ||
+ * CONFIG_DRIVER_NL80211_SYNA */
if (params->req_handshake_offload &&
(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X)) {
wpa_printf(MSG_DEBUG, " * WANT_1X_4WAY_HS");
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index fdfe8f6..11a32af 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -1262,11 +1262,11 @@
drv->capa.flags |= WPA_DRIVER_FLAGS_UPDATE_FT_IES;
if (!drv->capa.max_num_akms)
-#ifdef CONFIG_DRIVER_NL80211_BRCM
+#if defined(CONFIG_DRIVER_NL80211_BRCM) && !defined(WIFI_BRCM_OPEN_SOURCE_MULTI_AKM)
drv->capa.max_num_akms = 1;
#else
drv->capa.max_num_akms = NL80211_MAX_NR_AKM_SUITES;
-#endif /* CONFIG_DRIVER_NL80211_BRCM */
+#endif /* CONFIG_DRIVER_NL80211_BRCM && !WIFI_BRCM_OPEN_SOURCE_MULTI_AKM */
return 0;
}