qcacld-3.0: Limit the BTM timeout duration for next connection

- Limit the timeout value of the BLM entry if it has big comeback
 value and allow connection to that BSSID.
- Fix the BLM entry time stamp boundary checks.

Change-Id: I07bf7b1fce1c1e8d349c4fc0a9b0fed07f237197
CRs-Fixed: 2741689
This commit is contained in:
gaurank kathpalia 2020-07-26 00:31:00 +05:30 committed by snandini
parent 70cd9f5cde
commit b6dc56c8cc
2 changed files with 27 additions and 12 deletions

View File

@ -46,7 +46,7 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
entry_add_time =
blm_entry->ap_timestamp.userspace_avoid_timestamp;
if ((cur_timestamp - entry_add_time) >
if ((cur_timestamp - entry_add_time) >=
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
/* Move AP to monitor list as avoid list time is over */
blm_entry->userspace_avoidlist = false;
@ -62,7 +62,7 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
if (BLM_IS_AP_AVOIDED_BY_DRIVER(blm_entry)) {
entry_add_time = blm_entry->ap_timestamp.driver_avoid_timestamp;
if ((cur_timestamp - entry_add_time) >
if ((cur_timestamp - entry_add_time) >=
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
/* Move AP to monitor list as avoid list time is over */
blm_entry->driver_avoidlist = false;
@ -79,7 +79,7 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
entry_add_time =
blm_entry->ap_timestamp.driver_blacklist_timestamp;
if ((cur_timestamp - entry_add_time) >
if ((cur_timestamp - entry_add_time) >=
MINUTES_TO_MS(cfg->black_list_exipry_time)) {
/* Move AP to monitor list as black list time is over */
blm_entry->driver_blacklist = false;
@ -97,8 +97,8 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
blm_entry->ap_timestamp.rssi_reject_timestamp;
if ((blm_entry->rssi_reject_params.retry_delay &&
entry_age > blm_entry->rssi_reject_params.retry_delay) ||
(scan_entry && (scan_entry->rssi_raw > blm_entry->
entry_age >= blm_entry->rssi_reject_params.retry_delay) ||
(scan_entry && (scan_entry->rssi_raw >= blm_entry->
rssi_reject_params.expected_rssi))) {
/*
* Remove from the rssi reject list as:-
@ -133,6 +133,8 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
blm_entry->reject_ap_type);
}
#define MAX_BL_TIME 255000
static enum cm_blacklist_action
blm_prune_old_entries_and_get_action(struct blm_reject_ap *blm_entry,
struct blm_config *cfg,
@ -153,6 +155,15 @@ blm_prune_old_entries_and_get_action(struct blm_reject_ap *blm_entry,
return CM_BLM_NO_ACTION;
}
if (BLM_IS_AP_IN_RSSI_REJECT_LIST(blm_entry) &&
blm_entry->rssi_reject_params.retry_delay > MAX_BL_TIME) {
blm_info("Allow BSSID %pM as the retry delay is greater than %d ms, expected RSSI = %d, current RSSI = %d, retry delay = %d ms",
blm_entry->bssid.bytes, MAX_BL_TIME,
blm_entry->rssi_reject_params.expected_rssi,
entry ? entry->rssi_raw : 0,
blm_entry->rssi_reject_params.retry_delay);
return CM_BLM_NO_ACTION;
}
if (BLM_IS_AP_IN_BLACKLIST(blm_entry))
return CM_BLM_REMOVE;
@ -404,16 +415,16 @@ blm_get_delta_of_bssid(enum blm_reject_ap_type list_type,
* de-blacklisting the AP from rssi reject list.
*/
case DRIVER_RSSI_REJECT_TYPE:
if (blm_entry->rssi_reject_params.retry_delay) {
return blm_entry->rssi_reject_params.retry_delay -
if (blm_entry->rssi_reject_params.retry_delay)
disallowed_time =
blm_entry->rssi_reject_params.retry_delay -
(cur_timestamp -
blm_entry->ap_timestamp.rssi_reject_timestamp);
} else {
blm_entry->ap_timestamp.rssi_reject_timestamp);
else
disallowed_time = (int32_t)(MINUTES_TO_MS(RSSI_TIMEOUT_VALUE) -
(cur_timestamp -
blm_entry->ap_timestamp.rssi_reject_timestamp));
return ((disallowed_time < 0) ? 0 : disallowed_time);
}
return ((disallowed_time < 0) ? 0 : disallowed_time);
case DRIVER_MONITOR_TYPE:
return cur_timestamp -
blm_entry->ap_timestamp.driver_monitor_timestamp;
@ -601,8 +612,10 @@ static void blm_fill_reject_list(qdf_list_t *reject_db_list,
reject_list[*num_of_reject_bssid].bssid =
blm_entry->bssid;
(*num_of_reject_bssid)++;
blm_debug("Adding BSSID %pM of type %d to reject ap list, total entries added yet = %d",
blm_debug("Adding BSSID %pM of type %d retry delay %d expected RSSI %d, entries added = %d",
blm_entry->bssid.bytes, reject_ap_type,
reject_list[*num_of_reject_bssid -1].reject_duration,
blm_entry->rssi_reject_params.expected_rssi,
*num_of_reject_bssid);
}
cur_node = next_node;

View File

@ -6128,6 +6128,8 @@ void lim_add_roam_blacklist_ap(struct mac_context *mac_ctx,
struct sir_rssi_disallow_lst entry;
struct roam_blacklist_timeout *blacklist;
pe_debug("Received Blacklist event from FW num entries %d",
src_lst->num_entries);
blacklist = &src_lst->roam_blacklist[0];
for (i = 0; i < src_lst->num_entries; i++) {