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:

committed by
Madan Koyyalamudi

parent
1a98ac54d7
commit
6deea68417
@@ -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);
|
||||
|
Reference in New Issue
Block a user