wireless: Set some stats used by /proc/net/wireless (wext)
authorBen Greear <greearb@candelatech.com>
Thu, 7 Oct 2010 23:39:20 +0000 (16:39 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 11 Oct 2010 19:04:19 +0000 (15:04 -0400)
Some stats for /proc/net/wireless (and wext in general) are not
being set.  This patch addresses a few of those with values easily
obtained from mac80211 core.

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
include/net/cfg80211.h
net/mac80211/cfg.c
net/wireless/wext-compat.c

index 0778d04..f920a06 100644 (file)
@@ -403,6 +403,7 @@ struct station_parameters {
  * @STATION_INFO_TX_PACKETS: @tx_packets filled
  * @STATION_INFO_TX_RETRIES: @tx_retries filled
  * @STATION_INFO_TX_FAILED: @tx_failed filled
+ * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled
  */
 enum station_info_flags {
        STATION_INFO_INACTIVE_TIME      = 1<<0,
@@ -417,6 +418,7 @@ enum station_info_flags {
        STATION_INFO_TX_PACKETS         = 1<<9,
        STATION_INFO_TX_RETRIES         = 1<<10,
        STATION_INFO_TX_FAILED          = 1<<11,
+       STATION_INFO_RX_DROP_MISC       = 1<<12,
 };
 
 /**
@@ -468,6 +470,7 @@ struct rate_info {
  * @tx_packets: packets transmitted to this station
  * @tx_retries: cumulative retry counts
  * @tx_failed: number of failed transmissions (retries exceeded, no ACK)
+ * @rx_dropped_misc:  Dropped for un-specified reason.
  * @generation: generation number for nl80211 dumps.
  *     This number should increase every time the list of stations
  *     changes, i.e. when a station is added or removed, so that
@@ -487,6 +490,7 @@ struct station_info {
        u32 tx_packets;
        u32 tx_retries;
        u32 tx_failed;
+       u32 rx_dropped_misc;
 
        int generation;
 };
index ecf9b71..25fb351 100644 (file)
@@ -329,7 +329,8 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
                        STATION_INFO_TX_PACKETS |
                        STATION_INFO_TX_RETRIES |
                        STATION_INFO_TX_FAILED |
-                       STATION_INFO_TX_BITRATE;
+                       STATION_INFO_TX_BITRATE |
+                       STATION_INFO_RX_DROP_MISC;
 
        sinfo->inactive_time = jiffies_to_msecs(jiffies - sta->last_rx);
        sinfo->rx_bytes = sta->rx_bytes;
@@ -338,6 +339,7 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
        sinfo->tx_packets = sta->tx_packets;
        sinfo->tx_retries = sta->tx_retry_count;
        sinfo->tx_failed = sta->tx_retry_failed;
+       sinfo->rx_dropped_misc = sta->rx_dropped;
 
        if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) ||
            (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) {
index 6002265..12222ee 100644 (file)
@@ -1366,6 +1366,10 @@ struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
        }
 
        wstats.qual.updated |= IW_QUAL_NOISE_INVALID;
+       if (sinfo.filled & STATION_INFO_RX_DROP_MISC)
+               wstats.discard.misc = sinfo.rx_dropped_misc;
+       if (sinfo.filled & STATION_INFO_TX_FAILED)
+               wstats.discard.retries = sinfo.tx_failed;
 
        return &wstats;
 }