From cde70adc46069f21744f805a12620a89c51b7823 Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Wed, 12 May 2021 23:56:24 -0700 Subject: [PATCH] qcacld-3.0: Config support to use BSSID in probe request RA User configuration support to use scan request BSSID value in Probe Request frame RA during the scan. Change-Id: Ie0b7620428e1bfbd51e7430b6b7ad23ebede9e67 CRs-Fixed: 3021525 --- .../mlme/dispatcher/inc/wlan_mlme_api.h | 29 ++++++++++++++++ .../dispatcher/inc/wlan_mlme_public_struct.h | 2 ++ .../mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 34 +++++++++++++++++++ .../mlme/dispatcher/src/wlan_mlme_api.c | 33 ++++++++++++++++++ core/hdd/src/wlan_hdd_cfg80211.c | 16 +++++++++ core/hdd/src/wlan_hdd_scan.c | 6 ++++ 6 files changed, 120 insertions(+) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index 0cd4177ffc..c85fb0c716 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -2250,6 +2250,35 @@ wlan_mlme_set_rf_test_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value); QDF_STATUS wlan_mlme_get_sta_miracast_mcc_rest_time(struct wlan_objmgr_psoc *psoc, uint32_t *value); + +/** + * wlan_mlme_get_scan_probe_unicast_ra() - Get scan probe unicast RA cfg + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API gives scan probe request with unicast RA user config + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool *value); + +/** + * wlan_mlme_set_scan_probe_unicast_ra() - Set scan probe unicast RA cfg + * + * @psoc: pointer to psoc object + * @value: set value + * + * This API sets scan probe request with unicast RA user config + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_set_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool value); + /** * wlan_mlme_get_sap_mcc_chnl_avoid() - Check if SAP MCC needs to be avoided * diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 1e5b113fdc..1fc4920288 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1576,6 +1576,7 @@ enum station_keepalive_method { * @single_tid: Set replay counter for all TID * @allow_tpc_from_ap: Support for AP power constraint * @usr_disabled_roaming: User config for roaming disable + * @usr_scan_probe_unicast_ra: User config unicast probe req in scan */ struct wlan_mlme_sta_cfg { uint32_t sta_keep_alive_period; @@ -1598,6 +1599,7 @@ struct wlan_mlme_sta_cfg { bool allow_tpc_from_ap; enum station_keepalive_method sta_keepalive_method; bool usr_disabled_roaming; + bool usr_scan_probe_unicast_ra; #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR host_event_wlan_status_payload_type event_payload; #endif diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index f1f02b7367..08cf94a999 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -4143,6 +4143,40 @@ QDF_STATUS ucfg_mlme_set_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc, uint32_t value); +/** + * ucfg_mlme_get_scan_probe_unicast_ra() - Get scan probe unicast RA cfg + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API gives scan probe request with unicast RA user config + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + return wlan_mlme_get_scan_probe_unicast_ra(psoc, value); +} + +/** + * ucfg_mlme_set_scan_probe_unicast_ra() - Set scan probe unicast RA cfg + * + * @psoc: pointer to psoc object + * @value: set value + * + * This API sets scan probe request with unicast RA user config + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_set_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool value) +{ + return wlan_mlme_set_scan_probe_unicast_ra(psoc, value); +} + /** * ucfg_mlme_get_peer_phymode() - get phymode of peer * @psoc: pointer to psoc object diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index 51e281f0ca..ec9c3b2763 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -2609,6 +2609,39 @@ wlan_mlme_get_sta_miracast_mcc_rest_time(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_get_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_FAILURE; + + *value = mlme_obj->cfg.sta.usr_scan_probe_unicast_ra; + + mlme_legacy_debug("scan_probe_unicast_ra %d", *value); + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_set_scan_probe_unicast_ra(struct wlan_objmgr_psoc *psoc, + bool value) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_FAILURE; + + mlme_legacy_debug("scan_probe_unicast_ra %d", value); + mlme_obj->cfg.sta.usr_scan_probe_unicast_ra = value; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_get_sap_mcc_chnl_avoid(struct wlan_objmgr_psoc *psoc, uint8_t *value) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 514bdf581d..81cf3bf957 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -6976,6 +6976,8 @@ wlan_hdd_wifi_test_config_policy[ .type = NLA_FLAG}, [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_SUPPDU] = { .type = NLA_U8}, + [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_USE_BSSID_IN_PROBE_REQ_RA] = { + .type = NLA_U8}, [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_HTC_HE_SUPP] = { .type = NLA_U8}, [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OMI_TX] = { @@ -10238,6 +10240,20 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy, cfg_val); } + cmd_id = + QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_USE_BSSID_IN_PROBE_REQ_RA; + if (tb[cmd_id]) { + cfg_val = nla_get_u8(tb[cmd_id]); + if (cfg_val) + status = ucfg_mlme_set_scan_probe_unicast_ra( + hdd_ctx->psoc, true); + else + status = ucfg_mlme_set_scan_probe_unicast_ra( + hdd_ctx->psoc, false); + if (!QDF_IS_STATUS_SUCCESS(status)) + hdd_err("unable to set unicat probe ra cfg"); + } + cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_OMI_TX; if (tb[cmd_id]) { struct nlattr *tb2[QCA_WLAN_VENDOR_ATTR_HE_OMI_MAX + 1]; diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 9393279584..1249f49a80 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -665,6 +665,12 @@ static int __wlan_hdd_cfg80211_scan(struct wiphy *wiphy, /* Use default scan priority */ params.priority = SCAN_PRIORITY_COUNT; + status = ucfg_mlme_get_scan_probe_unicast_ra( + hdd_ctx->psoc, + ¶ms.scan_probe_unicast_ra); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to get unicast probe req ra cfg"); + status = wlan_cfg80211_scan(vdev, request, ¶ms); hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_SCAN_ID); error: