qcacld-3.0: Add support to include selective scan IEs only
qcacld-2.0 to qcacld-3.0 propagation Add support to include only selective IEs in probe requests in order to improve user's privacy. Change-Id: Ib874af7ec2f5453282ffe0e8fc2e50934460b745 CRs-Fixed: 1086582
このコミットが含まれているのは:
@@ -65,6 +65,9 @@
|
||||
/* Number of items that can be configured */
|
||||
#define MAX_CFG_INI_ITEMS 1024
|
||||
|
||||
#define MAX_PRB_REQ_VENDOR_OUI_INI_LEN 160
|
||||
#define VENDOR_SPECIFIC_IE_BITMAP 0x20000000
|
||||
|
||||
/* Defines for all of the things we read from the configuration (registry). */
|
||||
/*
|
||||
* <ini>
|
||||
@@ -10765,6 +10768,261 @@ enum l1ss_sleep_allowed {
|
||||
#define CFG_ENABLE_REG_OFFLOAD_MAX (1)
|
||||
#define CFG_ENABLE_REG_OFFLOAD_DEFAULT (1)
|
||||
|
||||
/* Begin of probe request IE whitelisting feature ini params */
|
||||
/*
|
||||
* <ini>
|
||||
* g_enable_probereq_whitelist_ies - Enable IE white listing
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to enable/disable probe request IE white listing feature.
|
||||
* Values 0 and 1 are used to disable and enable respectively, by default this
|
||||
* feature is disabled.
|
||||
*
|
||||
* Related: None
|
||||
*
|
||||
* Supported Feature: Probe request IE whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_WHITELIST_NAME "g_enable_probereq_whitelist_ies"
|
||||
#define CFG_PRB_REQ_IE_WHITELIST_MIN (0)
|
||||
#define CFG_PRB_REQ_IE_WHITELIST_MAX (1)
|
||||
#define CFG_PRB_REQ_IE_WHITELIST_DEFAULT (0)
|
||||
|
||||
/*
|
||||
* For IE white listing in Probe Req, following ini parameters from
|
||||
* g_probe_req_ie_bitmap_0 to g_probe_req_ie_bitmap_7 are used. User needs to
|
||||
* input this values in hexa decimal format, when bit is set in bitmap,
|
||||
* corresponding IE needs to be included in probe request.
|
||||
*
|
||||
* Example:
|
||||
* ========
|
||||
* If IE 221 needs to be in the probe request, set the corresponding bit
|
||||
* as follows:
|
||||
* a= IE/32 = 221/32 = 6 = g_probe_req_ie_bitmap_6
|
||||
* b = IE modulo 32 = 29,
|
||||
* means set the bth bit in g_probe_req_ie_bitmap_a,
|
||||
* therefore set 29th bit in g_probe_req_ie_bitmap_6,
|
||||
* as a result, g_probe_req_ie_bitmap_6=20000000
|
||||
*
|
||||
* Note: For IE 221, its mandatory to set the gProbeReqOUIs.
|
||||
*/
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_0 - Used to set the bitmap of IEs from 0 to 31
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 0 to 31 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP0_NAME "g_probe_req_ie_bitmap_0"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP0_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP0_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP0_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_1 - Used to set the bitmap of IEs from 32 to 63
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 32 to 63 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP1_NAME "g_probe_req_ie_bitmap_1"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP1_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP1_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP1_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_2 - Used to set the bitmap of IEs from 64 to 95
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 64 to 95 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP2_NAME "g_probe_req_ie_bitmap_2"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP2_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP2_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP2_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_3 - Used to set the bitmap of IEs from 96 to 127
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 96 to 127 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP3_NAME "g_probe_req_ie_bitmap_3"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP3_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP3_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP3_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_4 - Used to set the bitmap of IEs from 128 to 159
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 128 to 159 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP4_NAME "g_probe_req_ie_bitmap_4"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP4_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP4_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP4_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_5 - Used to set the bitmap of IEs from 160 to 191
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 160 to 191 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP5_NAME "g_probe_req_ie_bitmap_5"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP5_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP5_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP5_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_6 - Used to set the bitmap of IEs from 192 to 223
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 192 to 223 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP6_NAME "g_probe_req_ie_bitmap_6"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP6_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP6_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP6_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_probe_req_ie_bitmap_7 - Used to set the bitmap of IEs from 224 to 255
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* This ini is used to include the IEs from 224 to 255 in probe request,
|
||||
* when corresponding bit is set.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP7_NAME "g_probe_req_ie_bitmap_7"
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP7_MIN (0x00000000)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP7_MAX (0xFFFFFFFF)
|
||||
#define CFG_PRB_REQ_IE_BIT_MAP7_DEFAULT (0x00000000)
|
||||
|
||||
/*
|
||||
* For vendor specific IE, Probe Req OUI types and sub types which are
|
||||
* to be white listed are specified in gProbeReqOUIs in the following
|
||||
* example format - gProbeReqOUIs=AABBCCDD EEFF1122
|
||||
*/
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gProbeReqOUIs - Used to specify vendor specific OUIs
|
||||
* @Default: Empty string
|
||||
*
|
||||
* This ini is used to include the specified OUIs in vendor specific IE
|
||||
* of probe request.
|
||||
*
|
||||
* Related: Need to enable g_enable_probereq_whitelist_ies and
|
||||
* vendor specific IE should be set in g_probe_req_ie_bitmap_6.
|
||||
*
|
||||
* Supported Feature: Probe request ie whitelisting
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PROBE_REQ_OUI_NAME "gProbeReqOUIs"
|
||||
#define CFG_PROBE_REQ_OUI_DEFAULT ""
|
||||
/* End of probe request IE whitelisting feature ini params */
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* g_sap_chanswitch_beacon_cnt - channel switch beacon count
|
||||
@@ -11938,6 +12196,22 @@ struct hdd_config {
|
||||
bool qcn_ie_support;
|
||||
bool reg_offload_enabled;
|
||||
bool tx_orphan_enable;
|
||||
|
||||
bool probe_req_ie_whitelist;
|
||||
/* probe request bit map ies */
|
||||
uint32_t probe_req_ie_bitmap_0;
|
||||
uint32_t probe_req_ie_bitmap_1;
|
||||
uint32_t probe_req_ie_bitmap_2;
|
||||
uint32_t probe_req_ie_bitmap_3;
|
||||
uint32_t probe_req_ie_bitmap_4;
|
||||
uint32_t probe_req_ie_bitmap_5;
|
||||
uint32_t probe_req_ie_bitmap_6;
|
||||
uint32_t probe_req_ie_bitmap_7;
|
||||
/* Probe Request multiple vendor OUIs */
|
||||
uint8_t probe_req_ouis[MAX_PRB_REQ_VENDOR_OUI_INI_LEN];
|
||||
uint32_t no_of_probe_req_ouis;
|
||||
uint32_t probe_req_voui[MAX_PROBE_REQ_OUIS];
|
||||
|
||||
uint32_t timer_multiplier;
|
||||
uint8_t fils_max_chan_guard_time;
|
||||
uint8_t scan_backoff_multiplier;
|
||||
@@ -12076,6 +12350,37 @@ struct reg_table_entry {
|
||||
|
||||
/* Function declarations and documenation */
|
||||
QDF_STATUS hdd_parse_config_ini(hdd_context_t *pHddCtx);
|
||||
|
||||
/**
|
||||
* hdd_validate_prb_req_ie_bitmap - validates user input for ie bit map
|
||||
* @hdd_ctx: the pointer to hdd context
|
||||
*
|
||||
* This function checks whether user has entered valid probe request
|
||||
* ie bitmap and also verifies vendor ouis if vendor specific ie is set
|
||||
*
|
||||
* Return: status of verification
|
||||
* true - valid input
|
||||
* false - invalid input
|
||||
*/
|
||||
bool hdd_validate_prb_req_ie_bitmap(hdd_context_t *hdd_ctx);
|
||||
|
||||
/**
|
||||
* hdd_parse_probe_req_ouis - form ouis from ini gProbeReqOUIs
|
||||
* @hdd_ctx: the pointer to hdd context
|
||||
*
|
||||
* This function parses the ini string gProbeReqOUIs which needs be to in the
|
||||
* following format:
|
||||
* "<8 characters of [0-9] or [A-F]>space<8 characters from [0-9] etc.,"
|
||||
* example: "AABBCCDD 1122EEFF"
|
||||
* and the logic counts the number of OUIS and allocates the memory
|
||||
* for every valid OUI and is stored in hdd_context_t
|
||||
*
|
||||
* Return: status of parsing
|
||||
* 0 - success
|
||||
* negative value - failure
|
||||
*/
|
||||
int hdd_parse_probe_req_ouis(hdd_context_t *hdd_ctx);
|
||||
|
||||
QDF_STATUS hdd_update_mac_config(hdd_context_t *pHddCtx);
|
||||
QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx);
|
||||
QDF_STATUS hdd_set_policy_mgr_user_cfg(hdd_context_t *pHddCtx);
|
||||
|
@@ -2609,6 +2609,16 @@ void hdd_chip_pwr_save_fail_detected_cb(void *hddctx,
|
||||
struct chip_pwr_save_fail_detected_params
|
||||
*data);
|
||||
|
||||
/**
|
||||
* hdd_update_ie_whitelist_attr() - Copy probe req ie whitelist attrs from cfg
|
||||
* @ie_whitelist: output parameter
|
||||
* @cfg: pointer to hdd config
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void hdd_update_ie_whitelist_attr(struct probe_req_whitelist_attr *ie_whitelist,
|
||||
struct hdd_config *cfg);
|
||||
|
||||
/**
|
||||
* hdd_get_rssi_snr_by_bssid() - gets the rssi and snr by bssid from scan cache
|
||||
* @adapter: adapter handle
|
||||
|
@@ -4430,6 +4430,74 @@ struct reg_table_entry g_registry_table[] = {
|
||||
CFG_ENABLE_REG_OFFLOAD_MIN,
|
||||
CFG_ENABLE_REG_OFFLOAD_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_WHITELIST_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, probe_req_ie_whitelist,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_WHITELIST_DEFAULT,
|
||||
CFG_PRB_REQ_IE_WHITELIST_MIN,
|
||||
CFG_PRB_REQ_IE_WHITELIST_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP0_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_0,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP0_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP0_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP0_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP1_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_1,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP1_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP1_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP1_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP2_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_2,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP2_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP2_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP2_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP3_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_3,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP3_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP3_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP3_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP4_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_4,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP4_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP4_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP4_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP5_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_5,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP5_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP5_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP5_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP6_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_6,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP6_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP6_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP6_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_PRB_REQ_IE_BIT_MAP7_NAME, WLAN_PARAM_HexInteger,
|
||||
struct hdd_config, probe_req_ie_bitmap_7,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP7_DEFAULT,
|
||||
CFG_PRB_REQ_IE_BIT_MAP7_MIN,
|
||||
CFG_PRB_REQ_IE_BIT_MAP7_MAX),
|
||||
|
||||
REG_VARIABLE_STRING(CFG_PROBE_REQ_OUI_NAME, WLAN_PARAM_String,
|
||||
struct hdd_config, probe_req_ouis,
|
||||
VAR_FLAGS_OPTIONAL,
|
||||
(void *)CFG_PROBE_REQ_OUI_DEFAULT),
|
||||
|
||||
REG_VARIABLE(CFG_FILS_MAX_CHAN_GUARD_TIME_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, fils_max_chan_guard_time,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
@@ -5456,6 +5524,46 @@ static void hdd_per_roam_print_ini_config(hdd_context_t *hdd_ctx)
|
||||
hdd_ctx->config->min_candidate_rssi);
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_cfg_print_ie_whitelist_attrs() - print the ie whitelist attrs
|
||||
* @hdd_ctx: pointer to hdd context
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void hdd_cfg_print_ie_whitelist_attrs(hdd_context_t *hdd_ctx)
|
||||
{
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_WHITELIST_NAME,
|
||||
hdd_ctx->config->probe_req_ie_whitelist);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP0_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_0);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP1_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_1);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP2_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_2);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP3_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_3);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP4_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_4);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP5_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_5);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP6_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_6);
|
||||
hdd_debug("Name = [%s] Value = [%x] ",
|
||||
CFG_PRB_REQ_IE_BIT_MAP7_NAME,
|
||||
hdd_ctx->config->probe_req_ie_bitmap_7);
|
||||
hdd_debug("Name = [%s] Value =[%s]",
|
||||
CFG_PROBE_REQ_OUI_NAME,
|
||||
hdd_ctx->config->probe_req_ouis);
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_cfg_print() - print the hdd configuration
|
||||
* @iniTable: pointer to hdd context
|
||||
@@ -6172,6 +6280,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx)
|
||||
hdd_debug("Name = [%s] value = [%u]",
|
||||
CFG_DROPPED_PKT_DISCONNECT_TH_NAME,
|
||||
pHddCtx->config->pkt_err_disconn_th);
|
||||
|
||||
hdd_cfg_print_ie_whitelist_attrs(pHddCtx);
|
||||
|
||||
hdd_debug("Name = [%s] value = [%u]",
|
||||
CFG_FORCE_1X1_NAME,
|
||||
pHddCtx->config->is_force_1x1);
|
||||
@@ -6477,8 +6588,7 @@ QDF_STATUS hdd_parse_config_ini(hdd_context_t *pHddCtx)
|
||||
buffer = i_trim(buffer);
|
||||
if (strlen(buffer) > 0) {
|
||||
value = buffer;
|
||||
while (!i_isspace(*buffer)
|
||||
&& *buffer != '\0')
|
||||
while (*buffer != '\0')
|
||||
buffer++;
|
||||
*buffer = '\0';
|
||||
cfgIniTable[i].name = name;
|
||||
@@ -7924,6 +8034,81 @@ void hdd_get_pmkid_modes(hdd_context_t *pHddCtx,
|
||||
CFG_PMKID_MODES_PMKSA_CACHING) ? 1 : 0;
|
||||
}
|
||||
|
||||
bool hdd_validate_prb_req_ie_bitmap(hdd_context_t *hdd_ctx)
|
||||
{
|
||||
if (!(hdd_ctx->config->probe_req_ie_bitmap_0 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_1 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_2 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_3 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_4 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_5 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_6 ||
|
||||
hdd_ctx->config->probe_req_ie_bitmap_7))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* check whether vendor oui IE is set and OUIs are present, each OUI
|
||||
* is entered in the form of string of 8 characters from ini, therefore,
|
||||
* for atleast one OUI, minimum length is 8 and hence this string length
|
||||
* is checked for minimum of 8
|
||||
*/
|
||||
if ((hdd_ctx->config->probe_req_ie_bitmap_6 &
|
||||
VENDOR_SPECIFIC_IE_BITMAP) &&
|
||||
(strlen(hdd_ctx->config->probe_req_ouis) < 8))
|
||||
return false;
|
||||
|
||||
/* check whether vendor oui IE is not set but OUIs are present */
|
||||
if (!(hdd_ctx->config->probe_req_ie_bitmap_6 &
|
||||
VENDOR_SPECIFIC_IE_BITMAP) &&
|
||||
(strlen(hdd_ctx->config->probe_req_ouis) > 0))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int hdd_parse_probe_req_ouis(hdd_context_t *hdd_ctx)
|
||||
{
|
||||
uint32_t *voui = hdd_ctx->config->probe_req_voui;
|
||||
char *str;
|
||||
uint8_t *token;
|
||||
uint32_t oui_indx = 0;
|
||||
int ret;
|
||||
uint32_t hex_value;
|
||||
|
||||
str = (char *)(hdd_ctx->config->probe_req_ouis);
|
||||
str[MAX_PRB_REQ_VENDOR_OUI_INI_LEN - 1] = '\0';
|
||||
hdd_ctx->config->no_of_probe_req_ouis = 0;
|
||||
|
||||
if (!strlen(str)) {
|
||||
hdd_info("NO OUIS to parse");
|
||||
return 0;
|
||||
}
|
||||
|
||||
token = strsep(&str, " ");
|
||||
while (token) {
|
||||
if (strlen(token) != 8)
|
||||
goto next_token;
|
||||
|
||||
ret = kstrtouint(token, 16, &hex_value);
|
||||
if (ret)
|
||||
goto next_token;
|
||||
|
||||
voui[oui_indx++] = cpu_to_be32(hex_value);
|
||||
if (oui_indx >= MAX_PROBE_REQ_OUIS)
|
||||
break;
|
||||
|
||||
next_token:
|
||||
token = strsep(&str, " ");
|
||||
}
|
||||
|
||||
if (!oui_indx)
|
||||
return -EINVAL;
|
||||
|
||||
hdd_ctx->config->no_of_probe_req_ouis = oui_indx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_update_nss() - Update the number of spatial streams supported.
|
||||
* Ensure that nss is either 1 or 2 before calling this.
|
||||
|
@@ -2821,6 +2821,9 @@ __wlan_hdd_cfg80211_set_scanning_mac_oui(struct wiphy *wiphy,
|
||||
|
||||
hdd_debug("Oui (%02x:%02x:%02x), vdev_id = %d", pReqMsg->oui[0],
|
||||
pReqMsg->oui[1], pReqMsg->oui[2], pReqMsg->vdev_id);
|
||||
|
||||
hdd_update_ie_whitelist_attr(&pReqMsg->ie_whitelist, pHddCtx->config);
|
||||
|
||||
status = sme_set_scanning_mac_oui(pHddCtx->hHal, pReqMsg);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("sme_set_scanning_mac_oui failed(err=%d)", status);
|
||||
|
@@ -7513,6 +7513,37 @@ list_destroy:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ie_whitelist_attrs_init() - initialize ie whitelisting attributes
|
||||
* @hdd_ctx: pointer to hdd context
|
||||
*
|
||||
* Return: status of initialization
|
||||
* 0 - success
|
||||
* negative value - failure
|
||||
*/
|
||||
static int ie_whitelist_attrs_init(hdd_context_t *hdd_ctx)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!hdd_ctx->config->probe_req_ie_whitelist)
|
||||
return 0;
|
||||
|
||||
if (!hdd_validate_prb_req_ie_bitmap(hdd_ctx)) {
|
||||
hdd_err("invalid ie bitmap and ouis: disable ie whitelisting");
|
||||
hdd_ctx->config->probe_req_ie_whitelist = false;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* parse ini string probe req oui */
|
||||
ret = hdd_parse_probe_req_ouis(hdd_ctx);
|
||||
if (ret) {
|
||||
hdd_err("parsing error: disable ie whitelisting");
|
||||
hdd_ctx->config->probe_req_ie_whitelist = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_context_create() - Allocate and inialize HDD context.
|
||||
* @dev: Device Pointer to the underlying device
|
||||
@@ -7565,6 +7596,8 @@ static hdd_context_t *hdd_context_create(struct device *dev)
|
||||
goto err_free_config;
|
||||
}
|
||||
|
||||
ie_whitelist_attrs_init(hdd_ctx);
|
||||
|
||||
hdd_debug("setting timer multiplier: %u",
|
||||
hdd_ctx->config->timer_multiplier);
|
||||
qdf_timer_set_multiplier(hdd_ctx->config->timer_multiplier);
|
||||
@@ -11554,6 +11587,29 @@ hdd_update_pno_config(struct pno_user_cfg *pno_cfg,
|
||||
}
|
||||
#endif
|
||||
|
||||
void hdd_update_ie_whitelist_attr(struct probe_req_whitelist_attr *ie_whitelist,
|
||||
struct hdd_config *cfg)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
ie_whitelist->white_list = cfg->probe_req_ie_whitelist;
|
||||
if (!ie_whitelist->white_list)
|
||||
return;
|
||||
|
||||
ie_whitelist->ie_bitmap[0] = cfg->probe_req_ie_bitmap_0;
|
||||
ie_whitelist->ie_bitmap[1] = cfg->probe_req_ie_bitmap_1;
|
||||
ie_whitelist->ie_bitmap[2] = cfg->probe_req_ie_bitmap_2;
|
||||
ie_whitelist->ie_bitmap[3] = cfg->probe_req_ie_bitmap_3;
|
||||
ie_whitelist->ie_bitmap[4] = cfg->probe_req_ie_bitmap_4;
|
||||
ie_whitelist->ie_bitmap[5] = cfg->probe_req_ie_bitmap_5;
|
||||
ie_whitelist->ie_bitmap[6] = cfg->probe_req_ie_bitmap_6;
|
||||
ie_whitelist->ie_bitmap[7] = cfg->probe_req_ie_bitmap_7;
|
||||
|
||||
ie_whitelist->num_vendor_oui = cfg->no_of_probe_req_ouis;
|
||||
for (i = 0; i < ie_whitelist->num_vendor_oui; i++)
|
||||
ie_whitelist->voui[i] = cfg->probe_req_voui[i];
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_update_scan_config - API to update scan configuration parameters
|
||||
* @hdd_ctx: HDD context
|
||||
@@ -11585,6 +11641,7 @@ static int hdd_update_scan_config(hdd_context_t *hdd_ctx)
|
||||
scan_cfg.is_snr_monitoring_enabled = cfg->fEnableSNRMonitoring;
|
||||
|
||||
hdd_update_pno_config(&scan_cfg.pno_cfg, cfg);
|
||||
hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, cfg);
|
||||
|
||||
status = ucfg_scan_update_user_config(psoc, &scan_cfg);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
|
新しいイシューから参照
ユーザーをブロックする