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

Commit f44349f2 authored by James Ketrenos's avatar James Ketrenos Committed by John W. Linville
Browse files

[PATCH] ieee80211: Don't update network statistics from off-channel packets.



This patch fixes a problem in the ieee80211 probe response and beacon
reception code that would use the packet statistics for a network even
if they were received on a channel other than that which the network
exists on.

This causes a problem in overlapping channels where, for example, a
strong AP on channel 2 could have its beacons received on channels 1 and
3, but at much lower signal levels.  If scanning was done sequentially,
this means the beacon received on channel 3 would update the AP's signal
level as being much lower than it really is, which subsequently could
cause that AP to be passed over and an alternate AP selected.

Signed-off-by: default avatarJames Ketrenos <jketreno@linux.intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7c567894
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -1345,7 +1345,19 @@ static void update_network(struct ieee80211_network *dst,
	ieee80211_network_reset(dst);
	dst->ibss_dfs = src->ibss_dfs;

	memcpy(&dst->stats, &src->stats, sizeof(struct ieee80211_rx_stats));
	/* We only update the statistics if they were created by receiving
	 * the network information on the actual channel the network is on.
	 * 
	 * This keeps beacons received on neighbor channels from bringing
	 * down the signal level of an AP. */
	if (dst->channel == src->stats.received_channel)
		memcpy(&dst->stats, &src->stats,
		       sizeof(struct ieee80211_rx_stats));
	else
		IEEE80211_DEBUG_SCAN("Network " MAC_FMT " info received "
			"off channel (%d vs. %d)\n", MAC_ARG(src->bssid),
			dst->channel, src->stats.received_channel);

	dst->capability = src->capability;
	memcpy(dst->rates, src->rates, src->rates_len);
	dst->rates_len = src->rates_len;