@@ -260,6 +260,9 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
u16 reason = WLAN_REASON_UNSPECIFIED;
int status = WLAN_STATUS_SUCCESS;
const u8 *p2p_dev_addr = NULL;
+#ifdef CONFIG_OWE
+ struct hostapd_iface *iface = hapd->iface;
+#endif /* CONFIG_OWE */
if (addr == NULL) {
/*
@@ -772,6 +775,7 @@ skip_wpa_check:
#ifdef CONFIG_OWE
if ((hapd->conf->wpa_key_mgmt & WPA_KEY_MGMT_OWE) &&
+ !(iface->drv_flags & WPA_DRIVER_FLAGS2_OWE_OFFLOAD_AP) &&
wpa_auth_sta_key_mgmt(sta->wpa_sm) == WPA_KEY_MGMT_OWE &&
elems.owe_dh) {
u8 *npos;
@@ -2281,6 +2281,10 @@ struct wpa_driver_capa {
#define WPA_DRIVER_FLAGS2_SCAN_MIN_PREQ 0x0000000000008000ULL
/** Driver supports SAE authentication offload in STA mode */
#define WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA 0x0000000000010000ULL
+/** Driver supports OWE STA offload */
+#define WPA_DRIVER_FLAGS2_OWE_OFFLOAD_STA 0x0000000000020000ULL
+/** Driver supports OWE AP offload */
+#define WPA_DRIVER_FLAGS2_OWE_OFFLOAD_AP 0x0000000000040000ULL
u64 flags2;
#define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
@@ -705,6 +705,14 @@ static void wiphy_info_ext_feature_flags(struct wiphy_info_data *info,
if (ext_feature_isset(ext_features, len,
NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT))
capa->flags2 |= WPA_DRIVER_FLAGS2_SCAN_MIN_PREQ;
+
+ if (ext_feature_isset(ext_features, len,
+ NL80211_EXT_FEATURE_OWE_OFFLOAD))
+ capa->flags2 |= WPA_DRIVER_FLAGS2_OWE_OFFLOAD_STA;
+
+ if (ext_feature_isset(ext_features, len,
+ NL80211_EXT_FEATURE_OWE_OFFLOAD_AP))
+ capa->flags2 |= WPA_DRIVER_FLAGS2_OWE_OFFLOAD_AP;
}
@@ -3348,6 +3348,7 @@ static int wpa_supplicant_event_associnfo(struct wpa_supplicant *wpa_s,
#ifdef CONFIG_OWE
if (wpa_s->key_mgmt == WPA_KEY_MGMT_OWE &&
+ (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS2_OWE_OFFLOAD_STA)) &&
(!bssid_known ||
owe_process_assoc_resp(wpa_s->wpa,
wpa_s->valid_links ?
@@ -3616,7 +3616,8 @@ static u8 * wpas_populate_assoc_ies(
} else
#endif /* CONFIG_TESTING_OPTIONS */
if (algs == WPA_AUTH_ALG_OPEN &&
- ssid->key_mgmt == WPA_KEY_MGMT_OWE) {
+ ssid->key_mgmt == WPA_KEY_MGMT_OWE &&
+ !(wpa_s->drv_flags & WPA_DRIVER_FLAGS2_OWE_OFFLOAD_STA)) {
struct wpabuf *owe_ie;
u16 group;
Driver/fw advertising OWE offload support would take care of DH IE generation and processing part. Driver/FW would be responsible for OWE PMK generation in this case. This patch avoids the DH IE handling in wpa_supplicant/hostapd for drivers advertising OWE offload support. This change is applicable for drivers supporting 4-way HS offload. --- v1->v2: Addressed review comments and patch description v2->v3: Addressed review comments Signed-off-by: Vinayak Yadawad <vinayak.yadawad@broadcom.com> --- src/ap/drv_callbacks.c | 4 ++++ src/drivers/driver.h | 4 ++++ src/drivers/driver_nl80211_capa.c | 8 ++++++++ wpa_supplicant/events.c | 1 + wpa_supplicant/wpa_supplicant.c | 3 ++- 5 files changed, 19 insertions(+), 1 deletion(-)