Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7c57b35 authored by Yeshwanth Sriram Guntuka's avatar Yeshwanth Sriram Guntuka Committed by Madan Koyyalamudi
Browse files

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
parent 479bfa81
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3347,6 +3347,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.
@@ -3668,7 +3671,6 @@ hdd_association_completion_handler(struct hdd_adapter *adapter,
					      eCSR_BSS_TYPE_INFRASTRUCTURE);
			}

			hdd_nud_indicate_roam(adapter);
			/* Start the tx queues */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
			if (roam_info->roamSynchInProgress)
+14 −1
Original line number Diff line number Diff line
@@ -492,7 +492,20 @@ static void hdd_nud_filter_netevent(struct neighbour *neigh)

	case NUD_FAILED:
		hdd_debug("NUD_FAILED [0x%x]", neigh->nud_state);
		/*
		 * 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]",