qcacld-3.0: Enhance BLM infra
Enhance BLM infra to include source, reason for blacklist, original timeout, received time for better debug. Change-Id: Ia705a967a08412824063275f5073c338dabde539 CRs-Fixed: 2744402
This commit is contained in:

committed by
snandini

vanhempi
ab09be7729
commit
324fc0b0c3
@@ -121,6 +121,7 @@ struct blm_reject_ap_timestamp {
|
|||||||
* @bad_bssid_counter: It represent how many times data stall happened.
|
* @bad_bssid_counter: It represent how many times data stall happened.
|
||||||
* @ap_timestamp: Ap timestamp.
|
* @ap_timestamp: Ap timestamp.
|
||||||
* @reject_ap_type: what is the type of rejection for the AP (avoid, black etc.)
|
* @reject_ap_type: what is the type of rejection for the AP (avoid, black etc.)
|
||||||
|
* @reject_ap_reason: reason for adding the BSSID to BLM
|
||||||
* @connect_timestamp: Timestamp when the STA got connected with this BSSID
|
* @connect_timestamp: Timestamp when the STA got connected with this BSSID
|
||||||
*/
|
*/
|
||||||
struct blm_reject_ap {
|
struct blm_reject_ap {
|
||||||
@@ -140,6 +141,24 @@ struct blm_reject_ap {
|
|||||||
};
|
};
|
||||||
uint8_t reject_ap_type;
|
uint8_t reject_ap_type;
|
||||||
};
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint32_t nud_fail:1,
|
||||||
|
sta_kickout:1,
|
||||||
|
ho_fail:1,
|
||||||
|
poor_rssi:1,
|
||||||
|
oce_assoc_reject:1,
|
||||||
|
blacklist_userspace:1,
|
||||||
|
avoid_userspace:1,
|
||||||
|
btm_disassoc_imminent:1,
|
||||||
|
btm_bss_termination:1,
|
||||||
|
btm_mbo_retry:1,
|
||||||
|
reassoc_rssi_reject:1,
|
||||||
|
no_more_stas:1;
|
||||||
|
};
|
||||||
|
uint32_t reject_ap_reason;
|
||||||
|
};
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
qdf_time_t connect_timestamp;
|
qdf_time_t connect_timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -50,6 +50,7 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
|
|||||||
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
|
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
|
||||||
/* Move AP to monitor list as avoid list time is over */
|
/* Move AP to monitor list as avoid list time is over */
|
||||||
blm_entry->userspace_avoidlist = false;
|
blm_entry->userspace_avoidlist = false;
|
||||||
|
blm_entry->avoid_userspace = false;
|
||||||
blm_entry->driver_monitorlist = true;
|
blm_entry->driver_monitorlist = true;
|
||||||
|
|
||||||
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
||||||
@@ -66,6 +67,9 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
|
|||||||
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
|
MINUTES_TO_MS(cfg->avoid_list_exipry_time)) {
|
||||||
/* Move AP to monitor list as avoid list time is over */
|
/* Move AP to monitor list as avoid list time is over */
|
||||||
blm_entry->driver_avoidlist = false;
|
blm_entry->driver_avoidlist = false;
|
||||||
|
blm_entry->nud_fail = false;
|
||||||
|
blm_entry->sta_kickout = false;
|
||||||
|
blm_entry->ho_fail = false;
|
||||||
blm_entry->driver_monitorlist = true;
|
blm_entry->driver_monitorlist = true;
|
||||||
|
|
||||||
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
||||||
@@ -84,7 +88,9 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
|
|||||||
/* Move AP to monitor list as black list time is over */
|
/* Move AP to monitor list as black list time is over */
|
||||||
blm_entry->driver_blacklist = false;
|
blm_entry->driver_blacklist = false;
|
||||||
blm_entry->driver_monitorlist = true;
|
blm_entry->driver_monitorlist = true;
|
||||||
|
blm_entry->nud_fail = false;
|
||||||
|
blm_entry->sta_kickout = false;
|
||||||
|
blm_entry->ho_fail = false;
|
||||||
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
blm_entry->ap_timestamp.driver_monitor_timestamp =
|
||||||
cur_timestamp;
|
cur_timestamp;
|
||||||
blm_debug("Driver blacklist timer expired, moved to monitor list");
|
blm_debug("Driver blacklist timer expired, moved to monitor list");
|
||||||
@@ -115,8 +121,15 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg,
|
|||||||
* for BTM message will fail (expected), as BTM does
|
* for BTM message will fail (expected), as BTM does
|
||||||
* not care about the same.
|
* not care about the same.
|
||||||
*/
|
*/
|
||||||
|
blm_entry->poor_rssi = false;
|
||||||
|
blm_entry->oce_assoc_reject = false;
|
||||||
|
blm_entry->btm_bss_termination = false;
|
||||||
|
blm_entry->btm_disassoc_imminent = false;
|
||||||
|
blm_entry->btm_mbo_retry = false;
|
||||||
|
blm_entry->no_more_stas = false;
|
||||||
|
blm_entry->reassoc_rssi_reject = false;
|
||||||
blm_entry->rssi_reject_list = false;
|
blm_entry->rssi_reject_list = false;
|
||||||
blm_debug("Remove from rssi reject expected RSSI = %d, current RSSI = %d, retry delay required = %d ms, delay = %lu ms",
|
blm_debug("Remove BSSID from rssi reject expected RSSI = %d, current RSSI = %d, retry delay required = %d ms, delay = %lu ms",
|
||||||
blm_entry->rssi_reject_params.expected_rssi,
|
blm_entry->rssi_reject_params.expected_rssi,
|
||||||
scan_entry ? scan_entry->rssi_raw : 0,
|
scan_entry ? scan_entry->rssi_raw : 0,
|
||||||
blm_entry->rssi_reject_params.retry_delay,
|
blm_entry->rssi_reject_params.retry_delay,
|
||||||
@@ -156,22 +169,38 @@ blm_prune_old_entries_and_get_action(struct blm_reject_ap *blm_entry,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (BLM_IS_AP_IN_RSSI_REJECT_LIST(blm_entry) &&
|
if (BLM_IS_AP_IN_RSSI_REJECT_LIST(blm_entry) &&
|
||||||
blm_entry->rssi_reject_params.retry_delay > MAX_BL_TIME) {
|
!blm_entry->userspace_blacklist && !blm_entry->driver_blacklist &&
|
||||||
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->rssi_reject_params.original_timeout > MAX_BL_TIME) {
|
||||||
|
blm_info("Allow BSSID %pM as the retry delay is greater than %u ms, expected RSSI = %d, current RSSI = %d, retry delay = %u ms original timeout %u time added %lu source %d reason %d",
|
||||||
blm_entry->bssid.bytes, MAX_BL_TIME,
|
blm_entry->bssid.bytes, MAX_BL_TIME,
|
||||||
blm_entry->rssi_reject_params.expected_rssi,
|
blm_entry->rssi_reject_params.expected_rssi,
|
||||||
entry ? entry->rssi_raw : 0,
|
entry ? entry->rssi_raw : 0,
|
||||||
blm_entry->rssi_reject_params.retry_delay);
|
blm_entry->rssi_reject_params.retry_delay,
|
||||||
|
blm_entry->rssi_reject_params.original_timeout,
|
||||||
|
blm_entry->rssi_reject_params.received_time,
|
||||||
|
blm_entry->source, blm_entry->reject_ap_reason);
|
||||||
|
|
||||||
|
if (BLM_IS_AP_IN_AVOIDLIST(blm_entry)) {
|
||||||
|
blm_debug("%pM in avoid list, deprioritize it",
|
||||||
|
blm_entry->bssid.bytes);
|
||||||
|
return CM_BLM_AVOID;
|
||||||
|
}
|
||||||
|
|
||||||
return CM_BLM_NO_ACTION;
|
return CM_BLM_NO_ACTION;
|
||||||
}
|
}
|
||||||
if (BLM_IS_AP_IN_BLACKLIST(blm_entry))
|
if (BLM_IS_AP_IN_BLACKLIST(blm_entry)) {
|
||||||
|
blm_debug("%pM in blacklist list, reject ap type %d removing from candidate list",
|
||||||
|
blm_entry->bssid.bytes, blm_entry->reject_ap_type);
|
||||||
return CM_BLM_REMOVE;
|
return CM_BLM_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
if (BLM_IS_AP_IN_AVOIDLIST(blm_entry))
|
if (BLM_IS_AP_IN_AVOIDLIST(blm_entry)) {
|
||||||
|
blm_debug("%pM in avoid list, deprioritize it",
|
||||||
|
blm_entry->bssid.bytes);
|
||||||
return CM_BLM_AVOID;
|
return CM_BLM_AVOID;
|
||||||
|
}
|
||||||
|
|
||||||
return CM_BLM_NO_ACTION;
|
return CM_BLM_NO_ACTION;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum cm_blacklist_action
|
static enum cm_blacklist_action
|
||||||
@@ -231,6 +260,29 @@ wlan_blacklist_action_on_bssid(struct wlan_objmgr_pdev *pdev,
|
|||||||
return blm_action_on_bssid(pdev, entry);
|
return blm_action_on_bssid(pdev, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
blm_update_avoidlist_reject_reason(struct blm_reject_ap *entry,
|
||||||
|
enum blm_reject_ap_reason reject_reason)
|
||||||
|
{
|
||||||
|
entry->nud_fail = false;
|
||||||
|
entry->sta_kickout = false;
|
||||||
|
entry->ho_fail = false;
|
||||||
|
|
||||||
|
switch(reject_reason) {
|
||||||
|
case REASON_NUD_FAILURE:
|
||||||
|
entry->nud_fail = true;
|
||||||
|
break;
|
||||||
|
case REASON_STA_KICKOUT:
|
||||||
|
entry->sta_kickout = true;
|
||||||
|
break;
|
||||||
|
case REASON_ROAM_HO_FAILURE:
|
||||||
|
entry->ho_fail = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
blm_err("Invalid reason passed %d", reject_reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
blm_handle_avoid_list(struct blm_reject_ap *entry,
|
blm_handle_avoid_list(struct blm_reject_ap *entry,
|
||||||
struct blm_config *cfg,
|
struct blm_config *cfg,
|
||||||
@@ -240,13 +292,17 @@ blm_handle_avoid_list(struct blm_reject_ap *entry,
|
|||||||
|
|
||||||
if (ap_info->reject_ap_type == USERSPACE_AVOID_TYPE) {
|
if (ap_info->reject_ap_type == USERSPACE_AVOID_TYPE) {
|
||||||
entry->userspace_avoidlist = true;
|
entry->userspace_avoidlist = true;
|
||||||
|
entry->avoid_userspace = true;
|
||||||
entry->ap_timestamp.userspace_avoid_timestamp = cur_timestamp;
|
entry->ap_timestamp.userspace_avoid_timestamp = cur_timestamp;
|
||||||
} else if (ap_info->reject_ap_type == DRIVER_AVOID_TYPE) {
|
} else if (ap_info->reject_ap_type == DRIVER_AVOID_TYPE) {
|
||||||
entry->driver_avoidlist = true;
|
entry->driver_avoidlist = true;
|
||||||
|
blm_update_avoidlist_reject_reason(entry,
|
||||||
|
ap_info->reject_reason);
|
||||||
entry->ap_timestamp.driver_avoid_timestamp = cur_timestamp;
|
entry->ap_timestamp.driver_avoid_timestamp = cur_timestamp;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
entry->source = ap_info->source;
|
||||||
/* Update bssid info for new entry */
|
/* Update bssid info for new entry */
|
||||||
entry->bssid = ap_info->bssid;
|
entry->bssid = ap_info->bssid;
|
||||||
|
|
||||||
@@ -271,9 +327,10 @@ blm_handle_avoid_list(struct blm_reject_ap *entry,
|
|||||||
entry->bssid.bytes, entry->bad_bssid_counter);
|
entry->bssid.bytes, entry->bad_bssid_counter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
blm_debug("Added %pM to avoid list type %d, counter %d",
|
blm_debug("Added %pM to avoid list type %d, counter %d reason %d updated reject reason %d source %d",
|
||||||
entry->bssid.bytes, ap_info->reject_ap_type,
|
entry->bssid.bytes, ap_info->reject_ap_type,
|
||||||
entry->bad_bssid_counter);
|
entry->bad_bssid_counter, ap_info->reject_reason,
|
||||||
|
entry->reject_ap_reason, entry->source);
|
||||||
|
|
||||||
entry->connect_timestamp = qdf_mc_timer_get_system_time();
|
entry->connect_timestamp = qdf_mc_timer_get_system_time();
|
||||||
}
|
}
|
||||||
@@ -293,22 +350,77 @@ blm_handle_blacklist(struct blm_reject_ap *entry,
|
|||||||
entry->ap_timestamp.userspace_blacklist_timestamp =
|
entry->ap_timestamp.userspace_blacklist_timestamp =
|
||||||
qdf_mc_timer_get_system_time();
|
qdf_mc_timer_get_system_time();
|
||||||
|
|
||||||
|
entry->source = ADDED_BY_DRIVER;
|
||||||
|
entry->blacklist_userspace = true;
|
||||||
blm_debug("%pM added to userspace blacklist", entry->bssid.bytes);
|
blm_debug("%pM added to userspace blacklist", entry->bssid.bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
blm_update_rssi_reject_reason(struct blm_reject_ap *entry,
|
||||||
|
enum blm_reject_ap_reason reject_reason)
|
||||||
|
{
|
||||||
|
entry->poor_rssi = false;
|
||||||
|
entry->oce_assoc_reject = false;
|
||||||
|
entry->btm_bss_termination = false;
|
||||||
|
entry->btm_disassoc_imminent = false;
|
||||||
|
entry->btm_mbo_retry = false;
|
||||||
|
entry->no_more_stas = false;
|
||||||
|
entry->reassoc_rssi_reject = false;
|
||||||
|
|
||||||
|
switch(reject_reason) {
|
||||||
|
case REASON_ASSOC_REJECT_POOR_RSSI:
|
||||||
|
entry->poor_rssi = true;
|
||||||
|
break;
|
||||||
|
case REASON_ASSOC_REJECT_OCE:
|
||||||
|
entry->oce_assoc_reject = true;
|
||||||
|
break;
|
||||||
|
case REASON_BTM_DISASSOC_IMMINENT:
|
||||||
|
entry->btm_disassoc_imminent = true;
|
||||||
|
break;
|
||||||
|
case REASON_BTM_BSS_TERMINATION:
|
||||||
|
entry->btm_bss_termination = true;
|
||||||
|
break;
|
||||||
|
case REASON_BTM_MBO_RETRY:
|
||||||
|
entry->btm_mbo_retry = true;
|
||||||
|
break;
|
||||||
|
case REASON_REASSOC_RSSI_REJECT:
|
||||||
|
entry->reassoc_rssi_reject = true;
|
||||||
|
break;
|
||||||
|
case REASON_REASSOC_NO_MORE_STAS:
|
||||||
|
entry->no_more_stas = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
blm_err("Invalid reason passed %d", reject_reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
blm_handle_rssi_reject_list(struct blm_reject_ap *entry,
|
blm_handle_rssi_reject_list(struct blm_reject_ap *entry,
|
||||||
struct reject_ap_info *ap_info)
|
struct reject_ap_info *ap_info)
|
||||||
{
|
{
|
||||||
entry->bssid = ap_info->bssid;
|
bool bssid_newly_added;
|
||||||
entry->rssi_reject_list = true;
|
|
||||||
|
if (entry->rssi_reject_list) {
|
||||||
|
bssid_newly_added = false;
|
||||||
|
} else {
|
||||||
|
entry->rssi_reject_params.source = ap_info->source;
|
||||||
|
entry->bssid = ap_info->bssid;
|
||||||
|
entry->rssi_reject_list = true;
|
||||||
|
bssid_newly_added = true;
|
||||||
|
}
|
||||||
|
|
||||||
entry->ap_timestamp.rssi_reject_timestamp =
|
entry->ap_timestamp.rssi_reject_timestamp =
|
||||||
qdf_mc_timer_get_system_time();
|
qdf_mc_timer_get_system_time();
|
||||||
entry->rssi_reject_params = ap_info->rssi_reject_params;
|
entry->rssi_reject_params = ap_info->rssi_reject_params;
|
||||||
|
blm_update_rssi_reject_reason(entry, ap_info->reject_reason);
|
||||||
blm_debug("%pM Added to rssi reject list, expected RSSI %d retry delay %d",
|
blm_info("%pM %s to rssi reject list, expected RSSI %d retry delay %u source %d original timeout %u received time %lu reject reason %d updated reason %d",
|
||||||
entry->bssid.bytes, entry->rssi_reject_params.expected_rssi,
|
bssid_newly_added ? "ADDED" : "UPDATED",
|
||||||
entry->rssi_reject_params.retry_delay);
|
entry->bssid.bytes, entry->rssi_reject_params.expected_rssi,
|
||||||
|
entry->rssi_reject_params.retry_delay,
|
||||||
|
entry->rssi_reject_params.source,
|
||||||
|
entry->rssi_reject_params.original_timeout,
|
||||||
|
entry->rssi_reject_params.received_time,
|
||||||
|
ap_info->reject_reason, entry->reject_ap_reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -568,6 +680,48 @@ blm_remove_lowest_delta_entry(qdf_list_t *reject_ap_list,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum blm_reject_ap_reason
|
||||||
|
blm_get_rssi_reject_reason(struct blm_reject_ap *blm_entry)
|
||||||
|
{
|
||||||
|
if (blm_entry->poor_rssi)
|
||||||
|
return REASON_ASSOC_REJECT_POOR_RSSI;
|
||||||
|
else if (blm_entry->oce_assoc_reject)
|
||||||
|
return REASON_ASSOC_REJECT_OCE;
|
||||||
|
else if(blm_entry->btm_bss_termination)
|
||||||
|
return REASON_BTM_BSS_TERMINATION;
|
||||||
|
else if (blm_entry->btm_disassoc_imminent)
|
||||||
|
return REASON_BTM_DISASSOC_IMMINENT;
|
||||||
|
else if (blm_entry->btm_mbo_retry)
|
||||||
|
return REASON_BTM_MBO_RETRY;
|
||||||
|
else if (blm_entry->no_more_stas)
|
||||||
|
return REASON_REASSOC_NO_MORE_STAS;
|
||||||
|
else if (blm_entry->reassoc_rssi_reject)
|
||||||
|
return REASON_REASSOC_RSSI_REJECT;
|
||||||
|
|
||||||
|
return REASON_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
blm_fill_rssi_reject_params(struct blm_reject_ap *blm_entry,
|
||||||
|
enum blm_reject_ap_type reject_ap_type,
|
||||||
|
struct reject_ap_config_params *blm_reject_list)
|
||||||
|
{
|
||||||
|
if (reject_ap_type != DRIVER_RSSI_REJECT_TYPE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
blm_reject_list->source = blm_entry->rssi_reject_params.source;
|
||||||
|
blm_reject_list->original_timeout =
|
||||||
|
blm_entry->rssi_reject_params.original_timeout;
|
||||||
|
blm_reject_list->received_time =
|
||||||
|
blm_entry->rssi_reject_params.received_time;
|
||||||
|
blm_reject_list->reject_reason = blm_get_rssi_reject_reason(blm_entry);
|
||||||
|
blm_debug("%pM source %d original timeout %u received time %lu reject reason %d",
|
||||||
|
blm_entry->bssid.bytes, blm_reject_list->source,
|
||||||
|
blm_reject_list->original_timeout,
|
||||||
|
blm_reject_list->received_time,
|
||||||
|
blm_reject_list->reject_reason);
|
||||||
|
}
|
||||||
|
|
||||||
static void blm_fill_reject_list(qdf_list_t *reject_db_list,
|
static void blm_fill_reject_list(qdf_list_t *reject_db_list,
|
||||||
struct reject_ap_config_params *reject_list,
|
struct reject_ap_config_params *reject_list,
|
||||||
uint8_t *num_of_reject_bssid,
|
uint8_t *num_of_reject_bssid,
|
||||||
@@ -602,21 +756,26 @@ static void blm_fill_reject_list(qdf_list_t *reject_db_list,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (blm_is_bssid_of_type(reject_ap_type, blm_entry)) {
|
if (blm_is_bssid_of_type(reject_ap_type, blm_entry)) {
|
||||||
reject_list[*num_of_reject_bssid].expected_rssi =
|
struct reject_ap_config_params *blm_reject_list;
|
||||||
|
|
||||||
|
blm_reject_list = &reject_list[*num_of_reject_bssid];
|
||||||
|
blm_reject_list->expected_rssi =
|
||||||
blm_entry->rssi_reject_params.expected_rssi;
|
blm_entry->rssi_reject_params.expected_rssi;
|
||||||
reject_list[*num_of_reject_bssid].reject_duration =
|
blm_reject_list->reject_duration =
|
||||||
blm_get_delta_of_bssid(reject_ap_type, blm_entry,
|
blm_get_delta_of_bssid(reject_ap_type, blm_entry,
|
||||||
cfg);
|
cfg);
|
||||||
reject_list[*num_of_reject_bssid].reject_ap_type =
|
|
||||||
reject_ap_type;
|
blm_fill_rssi_reject_params(blm_entry, reject_ap_type,
|
||||||
reject_list[*num_of_reject_bssid].bssid =
|
blm_reject_list);
|
||||||
blm_entry->bssid;
|
blm_reject_list->reject_ap_type = reject_ap_type;
|
||||||
|
blm_reject_list->bssid = blm_entry->bssid;
|
||||||
(*num_of_reject_bssid)++;
|
(*num_of_reject_bssid)++;
|
||||||
blm_debug("Adding BSSID %pM of type %d retry delay %d expected RSSI %d, entries added = %d",
|
blm_debug("Adding BSSID %pM of type %d retry delay %d expected RSSI %d, entries added = %d reject reason %d",
|
||||||
blm_entry->bssid.bytes, reject_ap_type,
|
blm_entry->bssid.bytes, reject_ap_type,
|
||||||
reject_list[*num_of_reject_bssid -1].reject_duration,
|
reject_list[*num_of_reject_bssid -1].reject_duration,
|
||||||
blm_entry->rssi_reject_params.expected_rssi,
|
blm_entry->rssi_reject_params.expected_rssi,
|
||||||
*num_of_reject_bssid);
|
*num_of_reject_bssid,
|
||||||
|
blm_entry->reject_ap_reason);
|
||||||
}
|
}
|
||||||
cur_node = next_node;
|
cur_node = next_node;
|
||||||
next_node = NULL;
|
next_node = NULL;
|
||||||
@@ -797,6 +956,7 @@ blm_clear_userspace_blacklist_info(struct wlan_objmgr_pdev *pdev)
|
|||||||
blm_debug("Clearing userspace blacklist bit for %pM",
|
blm_debug("Clearing userspace blacklist bit for %pM",
|
||||||
blm_entry->bssid.bytes);
|
blm_entry->bssid.bytes);
|
||||||
blm_entry->userspace_blacklist = false;
|
blm_entry->userspace_blacklist = false;
|
||||||
|
blm_entry->blacklist_userspace = false;
|
||||||
}
|
}
|
||||||
cur_node = next_node;
|
cur_node = next_node;
|
||||||
next_node = NULL;
|
next_node = NULL;
|
||||||
@@ -847,7 +1007,8 @@ blm_add_userspace_black_list(struct wlan_objmgr_pdev *pdev,
|
|||||||
for (i = 0; i < num_of_bssid; i++) {
|
for (i = 0; i < num_of_bssid; i++) {
|
||||||
ap_info.bssid = bssid_black_list[i];
|
ap_info.bssid = bssid_black_list[i];
|
||||||
ap_info.reject_ap_type = USERSPACE_BLACKLIST_TYPE;
|
ap_info.reject_ap_type = USERSPACE_BLACKLIST_TYPE;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
|
ap_info.reject_reason = REASON_USERSPACE_BL;
|
||||||
status = blm_add_bssid_to_reject_list(pdev, &ap_info);
|
status = blm_add_bssid_to_reject_list(pdev, &ap_info);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
blm_err("Failed to add bssid to userspace blacklist");
|
blm_err("Failed to add bssid to userspace blacklist");
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -28,14 +28,31 @@
|
|||||||
#define MAX_BAD_AP_LIST_SIZE 28
|
#define MAX_BAD_AP_LIST_SIZE 28
|
||||||
#define MAX_RSSI_AVOID_BSSID_LIST 10
|
#define MAX_RSSI_AVOID_BSSID_LIST 10
|
||||||
#define PDEV_MAX_NUM_BSSID_DISALLOW_LIST 28
|
#define PDEV_MAX_NUM_BSSID_DISALLOW_LIST 28
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum blm_reject_ap_reason - Rejection reason for adding BSSID to BLM
|
||||||
|
* @ADDED_BY_DRIVER: Source adding this BSSID is driver
|
||||||
|
* @ADDED_BY_TARGET: Source adding this BSSID is target
|
||||||
|
*/
|
||||||
|
enum blm_reject_ap_source {
|
||||||
|
ADDED_BY_DRIVER = 1,
|
||||||
|
ADDED_BY_TARGET,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct blm_rssi_disallow_params - structure to specify params for RSSI reject
|
* struct blm_rssi_disallow_params - structure to specify params for RSSI reject
|
||||||
* @retry_delay: Time before which the AP doesn't expect a connection.
|
* @retry_delay: Time before which the AP doesn't expect a connection.
|
||||||
* @expected_rssi: RSSI less than which only the STA should try association.
|
* @expected_rssi: RSSI less than which only the STA should try association.
|
||||||
|
* @received_time: Time at which the AP was added to blacklist.
|
||||||
|
* @original_timeout: Original timeout which the AP sent while blacklisting.
|
||||||
|
* @source: Source of adding this BSSID to RSSI reject list
|
||||||
*/
|
*/
|
||||||
struct blm_rssi_disallow_params {
|
struct blm_rssi_disallow_params {
|
||||||
uint32_t retry_delay;
|
uint32_t retry_delay;
|
||||||
int8_t expected_rssi;
|
int8_t expected_rssi;
|
||||||
|
qdf_time_t received_time;
|
||||||
|
uint32_t original_timeout;
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,6 +73,38 @@ enum blm_reject_ap_type {
|
|||||||
DRIVER_MONITOR_TYPE = 5
|
DRIVER_MONITOR_TYPE = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum blm_reject_ap_reason - Rejection reason for adding BSSID to BLM
|
||||||
|
* @REASON_UNKNOWN: Unknown reason
|
||||||
|
* @REASON_NUD_FAILURE: NUD failure happened with this BSSID
|
||||||
|
* @REASON_STA_KICKOUT: STA kickout happened with this BSSID
|
||||||
|
* @REASON_ROAM_HO_FAILURE: HO failure happenend with this BSSID
|
||||||
|
* @REASON_ASSOC_REJECT_POOR_RSSI: assoc rsp with reason 71 received from AP.
|
||||||
|
* @REASON_ASSOC_REJECT_OCE: OCE assoc reject received from the AP.
|
||||||
|
* @REASON_USERSPACE_BL: Userspace wants to blacklist this AP.
|
||||||
|
* @REASON_USERSPACE_AVOID_LIST: Userspace wants to avoid this AP.
|
||||||
|
* @REASON_BTM_DISASSOC_IMMINENT: BTM IE received with disassoc imminent set.
|
||||||
|
* @REASON_BTM_BSS_TERMINATION: BTM IE received with BSS termination set.
|
||||||
|
* @REASON_BTM_MBO_RETRY: BTM IE received from AP with MBO retry set.
|
||||||
|
* @REASON_REASSOC_RSSI_REJECT: Re-Assoc resp received with reason code 34
|
||||||
|
* @REASON_REASSOC_NO_MORE_STAS: Re-assoc reject received with reason code 17
|
||||||
|
*/
|
||||||
|
enum blm_reject_ap_reason {
|
||||||
|
REASON_UNKNOWN = 0,
|
||||||
|
REASON_NUD_FAILURE,
|
||||||
|
REASON_STA_KICKOUT,
|
||||||
|
REASON_ROAM_HO_FAILURE,
|
||||||
|
REASON_ASSOC_REJECT_POOR_RSSI,
|
||||||
|
REASON_ASSOC_REJECT_OCE,
|
||||||
|
REASON_USERSPACE_BL,
|
||||||
|
REASON_USERSPACE_AVOID_LIST,
|
||||||
|
REASON_BTM_DISASSOC_IMMINENT,
|
||||||
|
REASON_BTM_BSS_TERMINATION,
|
||||||
|
REASON_BTM_MBO_RETRY,
|
||||||
|
REASON_REASSOC_RSSI_REJECT,
|
||||||
|
REASON_REASSOC_NO_MORE_STAS,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum blm_connection_state - State with AP (Connected, Disconnected)
|
* enum blm_connection_state - State with AP (Connected, Disconnected)
|
||||||
* @BLM_AP_CONNECTED: Connected with the AP
|
* @BLM_AP_CONNECTED: Connected with the AP
|
||||||
@@ -72,12 +121,20 @@ enum blm_connection_state {
|
|||||||
* @reject_ap_type: Type of the rejection done with the BSSID
|
* @reject_ap_type: Type of the rejection done with the BSSID
|
||||||
* @reject_duration: time left till the AP is in the reject list.
|
* @reject_duration: time left till the AP is in the reject list.
|
||||||
* @expected_rssi: expected RSSI when the AP expects the connection to be made.
|
* @expected_rssi: expected RSSI when the AP expects the connection to be made.
|
||||||
|
* @reject_reason: reason to add the BSSID to BLM
|
||||||
|
* @source: Source of adding the BSSID to BLM
|
||||||
|
* @received_time: Time at which the AP was added to blacklist.
|
||||||
|
* @original_timeout: Original timeout which the AP sent while blacklisting.
|
||||||
*/
|
*/
|
||||||
struct reject_ap_config_params {
|
struct reject_ap_config_params {
|
||||||
struct qdf_mac_addr bssid;
|
struct qdf_mac_addr bssid;
|
||||||
enum blm_reject_ap_type reject_ap_type;
|
enum blm_reject_ap_type reject_ap_type;
|
||||||
uint32_t reject_duration;
|
uint32_t reject_duration;
|
||||||
int32_t expected_rssi;
|
int32_t expected_rssi;
|
||||||
|
enum blm_reject_ap_reason reject_reason;
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
|
qdf_time_t received_time;
|
||||||
|
uint32_t original_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,11 +162,15 @@ struct wlan_blm_tx_ops {
|
|||||||
* @bssid: BSSID of the AP.
|
* @bssid: BSSID of the AP.
|
||||||
* @rssi_reject_params: RSSI reject params of the AP is of type RSSI reject
|
* @rssi_reject_params: RSSI reject params of the AP is of type RSSI reject
|
||||||
* @reject_ap_type: Reject type of AP (eg. avoid, blacklist, rssi reject etc.)
|
* @reject_ap_type: Reject type of AP (eg. avoid, blacklist, rssi reject etc.)
|
||||||
|
* @reject_reason: reason to add the BSSID to BLM
|
||||||
|
* @source: Source of adding the BSSID to BLM
|
||||||
*/
|
*/
|
||||||
struct reject_ap_info {
|
struct reject_ap_info {
|
||||||
struct qdf_mac_addr bssid;
|
struct qdf_mac_addr bssid;
|
||||||
struct blm_rssi_disallow_params rssi_reject_params;
|
struct blm_rssi_disallow_params rssi_reject_params;
|
||||||
enum blm_reject_ap_type reject_ap_type;
|
enum blm_reject_ap_type reject_ap_type;
|
||||||
|
enum blm_reject_ap_reason reject_reason;
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -4393,6 +4393,10 @@ static int hdd_set_blacklist_bssid(struct hdd_context *hdd_ctx,
|
|||||||
tb2[PARAM_SET_BSSID],
|
tb2[PARAM_SET_BSSID],
|
||||||
QDF_MAC_ADDR_SIZE);
|
QDF_MAC_ADDR_SIZE);
|
||||||
ap_info.reject_ap_type = USERSPACE_AVOID_TYPE;
|
ap_info.reject_ap_type = USERSPACE_AVOID_TYPE;
|
||||||
|
ap_info.reject_reason =
|
||||||
|
REASON_USERSPACE_AVOID_LIST;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
|
|
||||||
/* This BSSID is avoided and not blacklisted */
|
/* This BSSID is avoided and not blacklisted */
|
||||||
ucfg_blm_add_bssid_to_reject_list(hdd_ctx->pdev,
|
ucfg_blm_add_bssid_to_reject_list(hdd_ctx->pdev,
|
||||||
&ap_info);
|
&ap_info);
|
||||||
|
@@ -252,6 +252,8 @@ hdd_handle_nud_fail_sta(struct hdd_context *hdd_ctx,
|
|||||||
|
|
||||||
ap_info.bssid = sta_ctx->conn_info.bssid;
|
ap_info.bssid = sta_ctx->conn_info.bssid;
|
||||||
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
||||||
|
ap_info.reject_reason = REASON_NUD_FAILURE;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
ucfg_blm_add_bssid_to_reject_list(hdd_ctx->pdev, &ap_info);
|
ucfg_blm_add_bssid_to_reject_list(hdd_ctx->pdev, &ap_info);
|
||||||
|
|
||||||
if (roaming_offload_enabled(hdd_ctx))
|
if (roaming_offload_enabled(hdd_ctx))
|
||||||
|
@@ -5556,6 +5556,10 @@ struct sir_peer_set_rx_blocksize {
|
|||||||
* @retry_delay: Retry delay received during last rejection in ms
|
* @retry_delay: Retry delay received during last rejection in ms
|
||||||
* @ expected_rssi: RSSI at which STA can initate
|
* @ expected_rssi: RSSI at which STA can initate
|
||||||
* @time_during_rejection: Timestamp during last rejection in millisec
|
* @time_during_rejection: Timestamp during last rejection in millisec
|
||||||
|
* @reject_reason: reason to add the BSSID to BLM
|
||||||
|
* @source: Source of adding the BSSID to BLM
|
||||||
|
* @original_timeout: original timeout sent by the AP
|
||||||
|
* @received_time: Timestamp when the AP was added to the Blacklist
|
||||||
*/
|
*/
|
||||||
struct sir_rssi_disallow_lst {
|
struct sir_rssi_disallow_lst {
|
||||||
qdf_list_node_t node;
|
qdf_list_node_t node;
|
||||||
@@ -5563,6 +5567,10 @@ struct sir_rssi_disallow_lst {
|
|||||||
uint32_t retry_delay;
|
uint32_t retry_delay;
|
||||||
int8_t expected_rssi;
|
int8_t expected_rssi;
|
||||||
qdf_time_t time_during_rejection;
|
qdf_time_t time_during_rejection;
|
||||||
|
enum blm_reject_ap_reason reject_reason;
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
|
uint32_t original_timeout;
|
||||||
|
qdf_time_t received_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -242,6 +242,8 @@ void lim_delete_sta_context(struct mac_context *mac_ctx,
|
|||||||
qdf_mem_copy(&ap_info.bssid, msg->addr2,
|
qdf_mem_copy(&ap_info.bssid, msg->addr2,
|
||||||
QDF_MAC_ADDR_SIZE);
|
QDF_MAC_ADDR_SIZE);
|
||||||
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
||||||
|
ap_info.reject_reason = REASON_STA_KICKOUT;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev,
|
wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev,
|
||||||
&ap_info);
|
&ap_info);
|
||||||
|
|
||||||
|
@@ -818,6 +818,10 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
|||||||
ap_info.retry_delay = assoc_rsp->rssi_assoc_rej.retry_delay *
|
ap_info.retry_delay = assoc_rsp->rssi_assoc_rej.retry_delay *
|
||||||
QDF_MC_TIMER_TO_MS_UNIT;
|
QDF_MC_TIMER_TO_MS_UNIT;
|
||||||
qdf_mem_copy(ap_info.bssid.bytes, hdr->sa, QDF_MAC_ADDR_SIZE);
|
qdf_mem_copy(ap_info.bssid.bytes, hdr->sa, QDF_MAC_ADDR_SIZE);
|
||||||
|
ap_info.reject_reason = REASON_ASSOC_REJECT_OCE;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
|
ap_info.original_timeout = ap_info.retry_delay;
|
||||||
|
ap_info.received_time = qdf_mc_timer_get_system_time();
|
||||||
lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
|
lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -307,6 +307,11 @@ lim_process_disassoc_frame(struct mac_context *mac, uint8_t *pRxPacketInfo,
|
|||||||
ap_info.expected_rssi = frame_rssi +
|
ap_info.expected_rssi = frame_rssi +
|
||||||
wlan_blm_get_rssi_blacklist_threshold(mac->pdev);
|
wlan_blm_get_rssi_blacklist_threshold(mac->pdev);
|
||||||
qdf_mem_copy(ap_info.bssid.bytes, pHdr->sa, QDF_MAC_ADDR_SIZE);
|
qdf_mem_copy(ap_info.bssid.bytes, pHdr->sa, QDF_MAC_ADDR_SIZE);
|
||||||
|
ap_info.reject_reason = REASON_ASSOC_REJECT_POOR_RSSI;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
|
ap_info.original_timeout = ap_info.retry_delay;
|
||||||
|
ap_info.received_time = qdf_mc_timer_get_system_time();
|
||||||
|
|
||||||
lim_add_bssid_to_reject_list(mac->pdev, &ap_info);
|
lim_add_bssid_to_reject_list(mac->pdev, &ap_info);
|
||||||
}
|
}
|
||||||
lim_extract_ies_from_deauth_disassoc(pe_session, (uint8_t *)pHdr,
|
lim_extract_ies_from_deauth_disassoc(pe_session, (uint8_t *)pHdr,
|
||||||
|
@@ -6135,6 +6135,11 @@ void lim_add_roam_blacklist_ap(struct mac_context *mac_ctx,
|
|||||||
|
|
||||||
entry.bssid = blacklist->bssid;
|
entry.bssid = blacklist->bssid;
|
||||||
entry.time_during_rejection = blacklist->received_time;
|
entry.time_during_rejection = blacklist->received_time;
|
||||||
|
entry.reject_reason = blacklist->reject_reason;
|
||||||
|
entry.source = blacklist->source ? blacklist->source :
|
||||||
|
ADDED_BY_TARGET;
|
||||||
|
entry.original_timeout = blacklist->original_timeout;
|
||||||
|
entry.received_time = blacklist->received_time;
|
||||||
/* If timeout = 0 and rssi = 0 ignore the entry */
|
/* If timeout = 0 and rssi = 0 ignore the entry */
|
||||||
if (!blacklist->timeout && !blacklist->rssi) {
|
if (!blacklist->timeout && !blacklist->rssi) {
|
||||||
continue;
|
continue;
|
||||||
|
@@ -7590,7 +7590,10 @@ lim_add_bssid_to_reject_list(struct wlan_objmgr_pdev *pdev,
|
|||||||
ap_info.reject_ap_type = DRIVER_RSSI_REJECT_TYPE;
|
ap_info.reject_ap_type = DRIVER_RSSI_REJECT_TYPE;
|
||||||
ap_info.rssi_reject_params.expected_rssi = entry->expected_rssi;
|
ap_info.rssi_reject_params.expected_rssi = entry->expected_rssi;
|
||||||
ap_info.rssi_reject_params.retry_delay = entry->retry_delay;
|
ap_info.rssi_reject_params.retry_delay = entry->retry_delay;
|
||||||
|
ap_info.reject_reason = entry->reject_reason;
|
||||||
|
ap_info.source = entry->source;
|
||||||
|
ap_info.rssi_reject_params.received_time = entry->received_time;
|
||||||
|
ap_info.rssi_reject_params.original_timeout = entry->original_timeout;
|
||||||
/* Add this ap info to the rssi reject ap type in blacklist manager */
|
/* Add this ap info to the rssi reject ap type in blacklist manager */
|
||||||
wlan_blm_add_bssid_to_reject_list(pdev, &ap_info);
|
wlan_blm_add_bssid_to_reject_list(pdev, &ap_info);
|
||||||
}
|
}
|
||||||
|
@@ -21522,6 +21522,8 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
|
|||||||
|
|
||||||
ap_info.bssid = session->connectedProfile.bssid;
|
ap_info.bssid = session->connectedProfile.bssid;
|
||||||
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
||||||
|
ap_info.reject_reason = REASON_STA_KICKOUT;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
|
wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -772,12 +772,18 @@ typedef struct sStatsExtRequest {
|
|||||||
* @timeout - time duration for which the bssid is blacklisted
|
* @timeout - time duration for which the bssid is blacklisted
|
||||||
* @received_time - boot timestamp at which the firmware event was received
|
* @received_time - boot timestamp at which the firmware event was received
|
||||||
* @rssi - rssi value for which the bssid is blacklisted
|
* @rssi - rssi value for which the bssid is blacklisted
|
||||||
|
* @reject_reason: reason to add the BSSID to BLM
|
||||||
|
* @original_timeout: original timeout sent by the AP
|
||||||
|
* @source: Source of adding the BSSID to BLM
|
||||||
*/
|
*/
|
||||||
struct roam_blacklist_timeout {
|
struct roam_blacklist_timeout {
|
||||||
struct qdf_mac_addr bssid;
|
struct qdf_mac_addr bssid;
|
||||||
uint32_t timeout;
|
uint32_t timeout;
|
||||||
qdf_time_t received_time;
|
qdf_time_t received_time;
|
||||||
int32_t rssi;
|
int32_t rssi;
|
||||||
|
enum blm_reject_ap_reason reject_reason;
|
||||||
|
uint32_t original_timeout;
|
||||||
|
enum blm_reject_ap_source source;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -4295,6 +4295,8 @@ wma_roam_ho_fail_handler(tp_wma_handle wma, uint32_t vdev_id,
|
|||||||
|
|
||||||
ap_info.bssid = bssid;
|
ap_info.bssid = bssid;
|
||||||
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
|
||||||
|
ap_info.reject_reason = REASON_ROAM_HO_FAILURE;
|
||||||
|
ap_info.source = ADDED_BY_DRIVER;
|
||||||
wlan_blm_add_bssid_to_reject_list(wma->pdev, &ap_info);
|
wlan_blm_add_bssid_to_reject_list(wma->pdev, &ap_info);
|
||||||
|
|
||||||
ho_failure_ind = qdf_mem_malloc(sizeof(*ho_failure_ind));
|
ho_failure_ind = qdf_mem_malloc(sizeof(*ho_failure_ind));
|
||||||
@@ -6447,6 +6449,38 @@ QDF_STATUS wma_send_ht40_obss_scanind(tp_wma_handle wma,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum blm_reject_ap_reason wma_get_reject_reason(uint32_t reason)
|
||||||
|
{
|
||||||
|
switch(reason) {
|
||||||
|
case WMI_BL_REASON_NUD_FAILURE:
|
||||||
|
return REASON_NUD_FAILURE;
|
||||||
|
case WMI_BL_REASON_STA_KICKOUT:
|
||||||
|
return REASON_STA_KICKOUT;
|
||||||
|
case WMI_BL_REASON_ROAM_HO_FAILURE:
|
||||||
|
return REASON_ROAM_HO_FAILURE;
|
||||||
|
case WMI_BL_REASON_ASSOC_REJECT_POOR_RSSI:
|
||||||
|
return REASON_ASSOC_REJECT_POOR_RSSI;
|
||||||
|
case WMI_BL_REASON_ASSOC_REJECT_OCE:
|
||||||
|
return REASON_ASSOC_REJECT_OCE;
|
||||||
|
case WMI_BL_REASON_USERSPACE_BL:
|
||||||
|
return REASON_USERSPACE_BL;
|
||||||
|
case WMI_BL_REASON_USERSPACE_AVOID_LIST:
|
||||||
|
return REASON_USERSPACE_AVOID_LIST;
|
||||||
|
case WMI_BL_REASON_BTM_DIASSOC_IMMINENT:
|
||||||
|
return REASON_BTM_DISASSOC_IMMINENT;
|
||||||
|
case WMI_BL_REASON_BTM_BSS_TERMINATION:
|
||||||
|
return REASON_BTM_BSS_TERMINATION;
|
||||||
|
case WMI_BL_REASON_BTM_MBO_RETRY:
|
||||||
|
return REASON_BTM_MBO_RETRY;
|
||||||
|
case WMI_BL_REASON_REASSOC_RSSI_REJECT:
|
||||||
|
return REASON_REASSOC_RSSI_REJECT;
|
||||||
|
case WMI_BL_REASON_REASSOC_NO_MORE_STAS:
|
||||||
|
return REASON_REASSOC_NO_MORE_STAS;
|
||||||
|
default:
|
||||||
|
return REASON_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int wma_handle_btm_blacklist_event(void *handle, uint8_t *cmd_param_info,
|
int wma_handle_btm_blacklist_event(void *handle, uint8_t *cmd_param_info,
|
||||||
uint32_t len)
|
uint32_t len)
|
||||||
{
|
{
|
||||||
@@ -6505,9 +6539,11 @@ int wma_handle_btm_blacklist_event(void *handle, uint8_t *cmd_param_info,
|
|||||||
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_list->bssid,
|
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_list->bssid,
|
||||||
roam_blacklist->bssid.bytes);
|
roam_blacklist->bssid.bytes);
|
||||||
roam_blacklist->timeout = src_list->timeout;
|
roam_blacklist->timeout = src_list->timeout;
|
||||||
roam_blacklist->received_time =
|
roam_blacklist->received_time = src_list->timestamp;
|
||||||
qdf_do_div(qdf_get_monotonic_boottime(),
|
roam_blacklist->original_timeout = src_list->original_timeout;
|
||||||
QDF_MC_TIMER_TO_MS_UNIT);
|
roam_blacklist->reject_reason =
|
||||||
|
wma_get_reject_reason(src_list->reason);
|
||||||
|
roam_blacklist->source = src_list->source;
|
||||||
roam_blacklist++;
|
roam_blacklist++;
|
||||||
src_list++;
|
src_list++;
|
||||||
}
|
}
|
||||||
|
Viittaa uudesa ongelmassa
Block a user