qcacld-3.0: Fix allowlist roaming failure

For allowlist roaming, EAPOL isn't offloaded for PMK changed, then
RSO is stopped and allowlist ssid is cleared in F/W, but when RSO
is restarted after EAPOL finished, allowlist ssid isn't reset to F/W,
so allowlist roaming will fail after that.

To fix it, when roam start or update cmd is sent to F/W: update
allowlist ssid and denylist to F/W.

Change-Id: Ia8ddc251767dfc04d9a6cfd1e7c1074ab0e88e96
CRs-Fixed: 3081226
Bu işleme şunda yer alıyor:
Jianmin Zhu
2021-11-25 14:14:01 +08:00
işlemeyi yapan: Madan Koyyalamudi
ebeveyn 1b77284519
işleme e327eadc63
2 değiştirilmiş dosya ile 35 ekleme ve 8 silme

Dosyayı Görüntüle

@@ -2006,21 +2006,31 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
if (command != ROAM_SCAN_OFFLOAD_STOP) {
switch (reason) {
case REASON_ROAM_SET_BLACKLIST_BSSID:
op_bitmap |= 0x1;
op_bitmap |= ROAM_FILTER_OP_BITMAP_BLACK_LIST;
cm_add_blacklist_ap_list(pdev, params);
break;
case REASON_ROAM_SET_SSID_ALLOWED:
op_bitmap |= 0x2;
op_bitmap |= ROAM_FILTER_OP_BITMAP_WHITE_LIST;
num_ssid_white_list =
rso_usr_cfg->num_ssid_allowed_list;
break;
case REASON_ROAM_SET_FAVORED_BSSID:
op_bitmap |= 0x4;
op_bitmap |= ROAM_FILTER_OP_BITMAP_PREFER_BSSID;
num_bssid_preferred_list =
rso_usr_cfg->num_bssid_favored;
break;
case REASON_CTX_INIT:
if (command == ROAM_SCAN_OFFLOAD_START) {
num_ssid_white_list =
rso_usr_cfg->num_ssid_allowed_list;
if (num_ssid_white_list)
op_bitmap |=
ROAM_FILTER_OP_BITMAP_WHITE_LIST;
cm_add_blacklist_ap_list(pdev, params);
if (params->num_bssid_black_list)
op_bitmap |=
ROAM_FILTER_OP_BITMAP_BLACK_LIST;
params->lca_disallow_config_present = true;
/*
* If rssi disallow bssid list have any member
@@ -2039,15 +2049,30 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
}
break;
default:
mlme_debug("Roam Filter need not be sent, no need to fill parameters");
return;
if (command == ROAM_SCAN_OFFLOAD_START) {
num_ssid_white_list =
rso_usr_cfg->num_ssid_allowed_list;
if (num_ssid_white_list)
op_bitmap |=
ROAM_FILTER_OP_BITMAP_WHITE_LIST;
cm_add_blacklist_ap_list(pdev, params);
if (params->num_bssid_black_list)
op_bitmap |=
ROAM_FILTER_OP_BITMAP_BLACK_LIST;
}
if (!op_bitmap) {
mlme_debug("Roam Filter need not be sent, no need to fill parameters");
return;
}
break;
}
} else {
/* In case of STOP command, reset all the variables
* except for blacklist BSSID which should be retained
* across connections.
*/
op_bitmap = 0x2 | 0x4;
op_bitmap = ROAM_FILTER_OP_BITMAP_WHITE_LIST |
ROAM_FILTER_OP_BITMAP_PREFER_BSSID;
if (reason == REASON_ROAM_SET_SSID_ALLOWED)
num_ssid_white_list =
rso_usr_cfg->num_ssid_allowed_list;