qcacmn: Handle EV_DISCONNECT_ACTIVE event in roaming state

In the case of Roam Start sub-state, if a new connect/disconnect
is received, an internal disconnect/actual disconnect is queued
in serialization and then the state is changed to connecting
or disconnecting, but if the disconnect command becomes active
directly the EV_DISCONNECT_ACTIVE is received in roam substates
but is not handled.

As EV_DISCONNECT_ACTIVE is not handled the disconnect is not
processed and VDEV can remain in UP state while CM assuming that
the disconnect is completed will allow a new connection which
cause 2nd BSS peer creation.

Fix is to handle EV_DISCONNECT_ACTIVE event in Roam sub-states.

Change-Id: I30180db2e15af9b793e52e891f86d54c55b7b5e0
CRs-Fixed: 2986468
This commit is contained in:
Abhishek Singh
2021-07-09 12:38:09 +05:30
committed by Madan Koyyalamudi
parent 1a98ac54d7
commit 6deea68417

View File

@@ -152,6 +152,9 @@ static bool cm_handle_connect_disconnect_in_roam(struct cnx_mgr *cm_ctx,
cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_DISCONNECT_START,
data_len, data);
break;
case WLAN_CM_SM_EV_DISCONNECT_ACTIVE:
cm_disconnect_active(cm_ctx, data);
break;
default:
return false;
break;
@@ -227,6 +230,7 @@ bool cm_subst_preauth_event(void *ctx, uint16_t event,
switch (event) {
case WLAN_CM_SM_EV_CONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_ACTIVE:
event_handled =
cm_handle_connect_disconnect_in_roam(cm_ctx, event,
data_len, data);
@@ -304,6 +308,7 @@ bool cm_subst_reassoc_event(void *ctx, uint16_t event,
switch (event) {
case WLAN_CM_SM_EV_CONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_ACTIVE:
event_handled =
cm_handle_connect_disconnect_in_roam(cm_ctx, event,
data_len, data);
@@ -383,6 +388,7 @@ bool cm_subst_roam_start_event(void *ctx, uint16_t event,
switch (event) {
case WLAN_CM_SM_EV_CONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_ACTIVE:
event_handled =
cm_handle_connect_disconnect_in_roam(cm_ctx, event,
data_len, data);
@@ -436,6 +442,7 @@ bool cm_subst_roam_sync_event(void *ctx, uint16_t event,
switch (event) {
case WLAN_CM_SM_EV_CONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_REQ:
case WLAN_CM_SM_EV_DISCONNECT_ACTIVE:
event_handled =
cm_handle_connect_disconnect_in_roam(cm_ctx, event,
data_len, data);