diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c b/umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c index 17080d1dac..fc8377efe1 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c @@ -1824,11 +1824,16 @@ void wlan_cm_calculate_bss_score(struct wlan_objmgr_pdev *pdev, #ifdef CONFIG_BAND_6GHZ bool wlan_cm_6ghz_allowed_for_akm(struct wlan_objmgr_psoc *psoc, uint32_t key_mgmt, uint16_t rsn_caps, - const uint8_t *rsnxe, uint8_t sae_pwe) + const uint8_t *rsnxe, uint8_t sae_pwe, + bool is_wps) { struct psoc_mlme_obj *mlme_psoc_obj; struct scoring_cfg *config; + /* Allow connection for WPS security */ + if (is_wps) + return true; + mlme_psoc_obj = wlan_psoc_mlme_get_cmpt_obj(psoc); if (!mlme_psoc_obj) return false; diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c index 3f9d63cc88..4dde3cd39d 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c @@ -869,11 +869,21 @@ static QDF_STATUS cm_connect_get_candidates(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev); bool security_valid_for_6ghz; const uint8_t *rsnxe; + uint8_t wsc_oui[OUI_LENGTH]; + uint32_t oui_cpu; + bool is_wps = false; filter = qdf_mem_malloc(sizeof(*filter)); if (!filter) return QDF_STATUS_E_NOMEM; + oui_cpu = qdf_be32_to_cpu(WSC_OUI); + qdf_mem_copy(wsc_oui, &oui_cpu, OUI_LENGTH); + if (wlan_get_vendor_ie_ptr_from_oui(wsc_oui, OUI_LENGTH, + cm_req->req.assoc_ie.ptr, + cm_req->req.assoc_ie.len)) + is_wps = true; + rsnxe = wlan_get_ie_ptr_from_eid(WLAN_ELEMID_RSNXE, cm_req->req.assoc_ie.ptr, cm_req->req.assoc_ie.len); @@ -881,7 +891,8 @@ static QDF_STATUS cm_connect_get_candidates(struct wlan_objmgr_pdev *pdev, wlan_cm_6ghz_allowed_for_akm(wlan_pdev_get_psoc(pdev), cm_req->req.crypto.akm_suites, cm_req->req.crypto.rsn_caps, - rsnxe, cm_req->req.sae_pwe); + rsnxe, cm_req->req.sae_pwe, + is_wps); /* * Ignore connect req if the freq is provided and its 6Ghz and diff --git a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_bss_score_param.h b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_bss_score_param.h index 68ae256efa..6e8a089361 100644 --- a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_bss_score_param.h +++ b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_bss_score_param.h @@ -236,13 +236,15 @@ void wlan_cm_init_score_config(struct wlan_objmgr_psoc *psoc, * @rsn_caps: rsn caps * @rsnxe: rsnxe pointer if present * @sae_pwe: support for SAE password + * @is_wps: if security is WPS * * Return: bool */ #ifdef CONFIG_BAND_6GHZ bool wlan_cm_6ghz_allowed_for_akm(struct wlan_objmgr_psoc *psoc, uint32_t key_mgmt, uint16_t rsn_caps, - const uint8_t *rsnxe, uint8_t sae_pwe); + const uint8_t *rsnxe, uint8_t sae_pwe, + bool is_wps); /** * wlan_cm_set_check_6ghz_security() - Set check 6Ghz security @@ -293,7 +295,8 @@ uint32_t wlan_cm_get_6ghz_key_mgmt_mask(struct wlan_objmgr_psoc *psoc); static inline bool wlan_cm_6ghz_allowed_for_akm(struct wlan_objmgr_psoc *psoc, uint32_t key_mgmt, uint16_t rsn_caps, - const uint8_t *rsnxe, uint8_t sae_pwe) + const uint8_t *rsnxe, uint8_t sae_pwe, + bool is_wps) { return true; }