mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 16:46:15 -04:00
qcacld-3.0: Send RSO update after roaming to a whitelist SSID
When roaming to whitelist SSID, firmware offloads EAPOL 4-way HS to supplicant. Suppose initially if DUT connects to SSID1 and then firmware roams to SSID2 then 4-way HS should be offloaded to supplicant as the firmware doesn't posses the pre-shared key. When roaming happens between same SSID, then firmware has PSK and 4-way handshake is taken care by firmware. But due to issue in roaming code, 4-way HS is offloaded to supplicant even if roam happens between same SSID. Issue is for ROAM_RSO_STARTED state in csr_roam_switch_to_rso_start API, there is no handling to send RSO update if Roaming is already started, due to which csr_roam_offload_scan is not invoked. Second issue in roaming code is that RSO is not enabled with the new SSID2 in firmware. RSO is not enabled as after set key complete the state of roaming state was not set to eCSR_NEIGHBOR_ROAM_STATE_INIT. Due to this the SSID in firmware is still SSID1 and when firmware tries to roam again to SSID2 it offloads 4-way HS to supplicant instead of handling within firmware only. Fix is to update the roam state from eCSR_NEIGHBOR_ROAM_STATE_CONNECTED to eCSR_NEIGHBOR_ROAM_STATE_INIT in csr_process_roam_sync_callback after roam synch propagation and also handle ROAM_RSO_STARTED state with roam_command ROAM_SCAN_OFFLOAD_UPDATE_CFG instead of returing success from csr_roam_switch_to_rso_start API. Now when supplicant does set key after 4-way HS, roaming is enabled via csr_roam_chk_lnk_set_ctx_rsp-> csr_roam_link_up->csr_neighbor_roam_indicate_connect-> csr_neighbor_roam_info_ctx_init->csr_post_roam_state_change. Change-Id: I5b81f2e03fe1c7dee2820370d06f4e4f8017f12c CRs-Fixed: 2587120
This commit is contained in:
parent
0e083cb878
commit
10b9a7ff27
1 changed files with 8 additions and 5 deletions
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -19616,6 +19616,7 @@ csr_roam_switch_to_rso_start(struct mac_context *mac, uint8_t vdev_id,
|
|||
uint8_t control_bitmap;
|
||||
bool sup_disabled_roaming;
|
||||
bool rso_allowed = csr_roam_is_roam_offload_scan_enabled(mac);
|
||||
uint8_t rso_command = ROAM_SCAN_OFFLOAD_START;
|
||||
|
||||
cur_state = mlme_get_roam_state(mac->psoc, vdev_id);
|
||||
switch (cur_state) {
|
||||
|
|
@ -19631,9 +19632,10 @@ csr_roam_switch_to_rso_start(struct mac_context *mac, uint8_t vdev_id,
|
|||
break;
|
||||
case ROAM_RSO_STARTED:
|
||||
/*
|
||||
* Already the roaming module is initialized at fw,
|
||||
* nothing to do here
|
||||
* Send RSO update config if roaming already enabled
|
||||
*/
|
||||
rso_command = ROAM_SCAN_OFFLOAD_UPDATE_CFG;
|
||||
break;
|
||||
default:
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
@ -19650,8 +19652,7 @@ csr_roam_switch_to_rso_start(struct mac_context *mac, uint8_t vdev_id,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = csr_roam_offload_scan(mac, vdev_id, ROAM_SCAN_OFFLOAD_START,
|
||||
reason);
|
||||
status = csr_roam_offload_scan(mac, vdev_id, rso_command, reason);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
sme_debug("ROAM: RSO start failed");
|
||||
return status;
|
||||
|
|
@ -21876,6 +21877,8 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx,
|
|||
eCSR_ROAM_SUBSTATE_NONE,
|
||||
session_id);
|
||||
}
|
||||
csr_neighbor_roam_state_transition(mac_ctx,
|
||||
eCSR_NEIGHBOR_ROAM_STATE_INIT, session_id);
|
||||
}
|
||||
roam_info->nBeaconLength = 0;
|
||||
roam_info->nAssocReqLength = roam_synch_data->reassoc_req_length -
|
||||
|
|
|
|||
Loading…
Reference in a new issue