|
@@ -1764,6 +1764,13 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
|
|
|
|
|
sinfo->generation = sdata->local->sta_generation;
|
|
|
|
|
|
+ /* do before driver, so beacon filtering drivers have a
|
|
|
+ * chance to e.g. just add the number of filtered beacons
|
|
|
+ * (or just modify the value entirely, of course)
|
|
|
+ */
|
|
|
+ if (sdata->vif.type == NL80211_IFTYPE_STATION)
|
|
|
+ sinfo->rx_beacon = sdata->u.mgd.count_beacon_signal;
|
|
|
+
|
|
|
drv_sta_statistics(local, sdata, &sta->sta, sinfo);
|
|
|
|
|
|
sinfo->filled |= BIT(NL80211_STA_INFO_INACTIVE_TIME) |
|
|
@@ -1816,6 +1823,13 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
|
|
sinfo->rx_dropped_misc = sta->rx_dropped;
|
|
|
sinfo->beacon_loss_count = sta->beacon_loss_count;
|
|
|
|
|
|
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
|
|
+ !(sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)) {
|
|
|
+ sinfo->filled |= BIT(NL80211_STA_INFO_BEACON_RX) |
|
|
|
+ BIT(NL80211_STA_INFO_BEACON_SIGNAL_AVG);
|
|
|
+ sinfo->rx_beacon_signal_avg = ieee80211_ave_rssi(&sdata->vif);
|
|
|
+ }
|
|
|
+
|
|
|
if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) ||
|
|
|
(sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) {
|
|
|
if (!(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL))) {
|