cfg80211/mac80211: fill qual.qual value/adjust max_qual.qual
Due to various bugs in the software stack we end up having to fill qual.qual; level should be used, but wpa_supplicant doesn't properly ignore qual.qual, NM should use qual.level regardless of that because qual.qual is 0 but doesn't handle IW_QUAL_DBM right now. So fill qual.qual with the qual.level value clamped to -110..-40 dBm or just the regular 'unspecified' signal level. This requires a mac80211 change to properly announce the max_qual.qual and avg_qual.qual values. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
cb3a8eec0e
commit
a77b855245
@@ -200,10 +200,24 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev,
|
||||
else
|
||||
range->max_qual.noise = 0;
|
||||
|
||||
range->max_qual.qual = 100;
|
||||
range->max_qual.updated = ieee80211_get_wstats_flags(local);
|
||||
|
||||
range->avg_qual.qual = 50;
|
||||
if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
|
||||
/*
|
||||
* cfg80211 assumes -110 to -40 dBm and clamps to that range
|
||||
* for qual.qual, so tell userspace this is what we give it
|
||||
* but take into account that we have to start from 0.
|
||||
*/
|
||||
range->max_qual.qual = 70;
|
||||
range->avg_qual.qual = 35;
|
||||
} else {
|
||||
/*
|
||||
* cfg80211 just uses the level value for qual too, and it
|
||||
* requires the level value to be 0 .. 100.
|
||||
*/
|
||||
range->max_qual.qual = 100;
|
||||
range->avg_qual.qual = 50;
|
||||
}
|
||||
/* not always true but better than nothing */
|
||||
range->avg_qual.level = range->max_qual.level / 2;
|
||||
range->avg_qual.noise = range->max_qual.noise / 2;
|
||||
|
Reference in New Issue
Block a user