diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 05577b7427..2a5c1e7857 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -2439,6 +2439,18 @@ static int hdd_change_sta_state_authenticated(struct hdd_adapter *adapter, WLAN_HDD_GET_STATION_CTX_PTR(adapter); mac_addr = hddstactx->conn_info.bssid.bytes; + + if (ucfg_ipa_is_enabled() && !hddstactx->conn_info.is_authenticated && + adapter->device_mode == QDF_STA_MODE && + hddstactx->conn_info.auth_type != eCSR_AUTH_TYPE_NONE && + hddstactx->conn_info.auth_type != eCSR_AUTH_TYPE_OPEN_SYSTEM && + hddstactx->conn_info.auth_type != eCSR_AUTH_TYPE_SHARED_KEY) + ucfg_ipa_wlan_evt(adapter->hdd_ctx->pdev, adapter->dev, + adapter->device_mode, adapter->vdev_id, + WLAN_IPA_STA_CONNECT, mac_addr, + WLAN_REG_IS_24GHZ_CH_FREQ( + hddstactx->conn_info.chan_freq)); + hdd_cm_set_peer_authenticate(adapter, &hddstactx->conn_info.bssid, false); diff --git a/core/hdd/src/wlan_hdd_cm_connect.c b/core/hdd/src/wlan_hdd_cm_connect.c index 0c5c648239..9c6729b1be 100644 --- a/core/hdd/src/wlan_hdd_cm_connect.c +++ b/core/hdd/src/wlan_hdd_cm_connect.c @@ -816,6 +816,39 @@ static void hdd_cm_save_connect_info(struct hdd_adapter *adapter, hdd_cm_save_bss_info(adapter, rsp); } +#ifdef WLAN_FEATURE_FILS_SK +static bool hdd_cm_is_fils_connection(struct wlan_cm_connect_resp *rsp) +{ + return rsp->is_fils_connection; +} +#else +static inline +bool hdd_cm_is_fils_connection(struct wlan_cm_connect_resp *rsp) +{ + return false; +} +#endif + +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +static bool hdd_cm_is_roam_auth_required(struct hdd_station_ctx *sta_ctx, + struct wlan_cm_connect_resp *rsp) +{ + if (!rsp->roaming_info) + return false; + + if (rsp->roaming_info->auth_status == ROAM_AUTH_STATUS_AUTHENTICATED) + return false; + + return true; +} +#else +static bool hdd_cm_is_roam_auth_required(struct hdd_station_ctx *sta_ctx, + struct wlan_cm_connect_resp *rsp) +{ + return true; +} +#endif + static void hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev, struct wlan_cm_connect_resp *rsp) @@ -828,6 +861,8 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev, uint32_t ie_len; uint8_t *ie_field; mac_handle_t mac_handle; + bool is_auth_required = true; + bool is_roam_offload = false; bool is_roam = rsp->is_reassoc; ol_txrx_soc_handle soc = cds_get_context(QDF_MODULE_ID_SOC); uint32_t phymode; @@ -941,7 +976,22 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev, adapter->is_link_up_service_needed = false; } - if (ucfg_ipa_is_enabled()) + if (!rsp->is_wps_connection && + (sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_NONE || + sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_OPEN_SYSTEM || + sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_SHARED_KEY || + hdd_cm_is_fils_connection(rsp))) + is_auth_required = false; + + if (is_roam) + /* If roaming is set check if FW roaming/LFR3 */ + ucfg_mlme_get_roaming_offload(hdd_ctx->psoc, &is_roam_offload); + + if (is_roam_offload) + /* for LFR 3 get authenticated info from resp */ + is_auth_required = hdd_cm_is_roam_auth_required(sta_ctx, rsp); + + if (ucfg_ipa_is_enabled() && !is_auth_required) ucfg_ipa_wlan_evt(hdd_ctx->pdev, adapter->dev, adapter->device_mode, adapter->vdev_id, @@ -965,39 +1015,6 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev, /* hdd_objmgr_set_peer_mlme_auth_state */ } -#ifdef WLAN_FEATURE_FILS_SK -static bool hdd_cm_is_fils_connection(struct wlan_cm_connect_resp *rsp) -{ - return rsp->is_fils_connection; -} -#else -static inline -bool hdd_cm_is_fils_connection(struct wlan_cm_connect_resp *rsp) -{ - return false; -} -#endif - -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -static bool hdd_cm_is_roam_auth_required(struct hdd_station_ctx *sta_ctx, - struct wlan_cm_connect_resp *rsp) -{ - if (!rsp->roaming_info) - return false; - - if (rsp->roaming_info->auth_status == ROAM_AUTH_STATUS_AUTHENTICATED) - return false; - - return true; -} -#else -static bool hdd_cm_is_roam_auth_required(struct hdd_station_ctx *sta_ctx, - struct wlan_cm_connect_resp *rsp) -{ - return true; -} -#endif - static void hdd_cm_connect_success_post_user_update(struct wlan_objmgr_vdev *vdev, struct wlan_cm_connect_resp *rsp)