qcacld-3.0: Set nud_state to PROBE on NUD_FAILED event post roaming

In the issue scenario, roaming is triggered due to NUD_FAILED
event and nud state is set to NONE once roaming is completed.
NUD_FAILED events could be received without any NUD_PROBE
INCOMPLETE events post this roaming and these nud failures
are not honored due to which further roaming due to NUD_FAILURE
won't be triggered.

Fix is to set nud state to PROBE explicity on receiving
NUD_FAILED event post roaming.

Change-Id: Ib34b82f478263eb9664112a25f2d1f8bd858f5dc
CRs-Fixed: 2837825
This commit is contained in:
Yeshwanth Sriram Guntuka 2020-12-18 15:29:41 +05:30 • committed by snandini
commit a62a5a637c
2 changed files with 17 additions and 2 deletions

View file

@ -3085,6 +3085,9 @@ hdd_association_completion_handler(struct hdd_adapter *adapter,
if (!reqRsnIe)
return QDF_STATUS_E_NOMEM;
if (roam_info->fReassocReq || ft_carrier_on)
hdd_nud_indicate_roam(adapter);
/*
* For reassoc, the station is already registered, all we need
* is to change the state of the STA in TL.
@ -3379,7 +3382,6 @@ hdd_association_completion_handler(struct hdd_adapter *adapter,
eCSR_BSS_TYPE_INFRASTRUCTURE);
}
hdd_nud_indicate_roam(adapter);
/* Start the tx queues */
hdd_debug("Enabling queues");
hdd_netif_queue_enable(adapter);

View file

@ -504,7 +504,20 @@ static void hdd_nud_filter_netevent(struct neighbour *neigh)
case NUD_FAILED:
hdd_debug("NUD_FAILED [0x%x]", neigh->nud_state);
hdd_nud_process_failure_event(adapter);
/*
* This condition is to handle the scenario where NUD_FAILED
* events are received without any NUD_PROBE/INCOMPLETE event
* post roaming. Nud state is set to NONE as part of roaming.
* NUD_FAILED is not honored when the curr state is any state
* other than NUD_PROBE/INCOMPLETE so post roaming, nud state
* is moved to NUD_PROBE to honor future NUD_FAILED events.
*/
if (adapter->nud_tracking.curr_state == NUD_NONE) {
hdd_nud_capture_stats(adapter, NUD_PROBE);
hdd_nud_set_tracking(adapter, NUD_PROBE, true);
} else {
hdd_nud_process_failure_event(adapter);
}
break;
default:
hdd_debug("NUD Event For Other State [0x%x]",