From: Larry Finger <larry.finger@lwfinger.net>
To: Michael Wu <flamingice@sourmilk.net>
Cc: Dan Williams <dcbw@redhat.com>,
John Linville <linville@tuxdriver.com>,
Michael Buesch <mb@bu3sch.de>,
Bcm43xx-dev@lists.berlios.de, linux-wireless@vger.kernel.org,
Jiri Benc <jbenc@suse.cz>
Subject: Re: [PATCH] mac80211: Report correct wireless statistics
Date: Mon, 09 Apr 2007 19:59:12 -0500 [thread overview]
Message-ID: <461AE160.6060404@lwfinger.net> (raw)
In-Reply-To: <200704091902.14301.flamingice@sourmilk.net>
Michael Wu wrote:
>>
> Absolutely - it is confusing since dBm can also be specified in addition to
> RSSI. Renaming signal to qual or something along those lines would also be
> useful IMHO, but if you're okay with it as it stands, I don't mind it.
I changed signal to qual and (r)ssi to level. Once these changes were made, iwconfig gives me the
following:
Link Quality=57/100 Signal level=-37 dBm Noise level=-70 dBm
The patch is pretty large and touches a lot of files, but if one is to be able to bisect around it,
it has to be a single commit. As the patch entitled "[PATCH] bcm43xx-mac80211: Fix error in
initiallizing max RSSI and max signal" has been accepted into Michael Buesch's tree, I have assumed
that it is already included.
Larry
---
Index: wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
+++ wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c
@@ -3760,7 +3760,7 @@ static int bcm43xx_wireless_init(struct
IEEE80211_HW_MONITOR_DURING_OPER |
IEEE80211_HW_DEVICE_HIDES_WEP |
IEEE80211_HW_WEP_INCLUDE_IV;
- hw->max_signal = -110;
+ hw->max_qual = 100;
hw->max_rssi = BCM43xx_RX_MAX_SSI;
hw->max_noise = -110;
hw->queues = 1;
Index: wireless-dev/include/net/mac80211.h
===================================================================
--- wireless-dev.orig/include/net/mac80211.h
+++ wireless-dev/include/net/mac80211.h
@@ -227,8 +227,8 @@ struct ieee80211_rx_status {
int freq; /* receive frequency in Mhz */
int channel;
int phymode;
- int ssi;
- int signal; /* used as qual in statistics reporting */
+ int level; /* used in statistics reporting */
+ int qual; /* used in statistics reporting */
int noise;
int antenna;
int rate;
@@ -540,7 +540,7 @@ struct ieee80211_hw {
/* Maximum values for various statistics.
* Leave at 0 to indicate no support. Use negative numbers for dBm. */
s8 max_rssi;
- s8 max_signal;
+ s8 max_qual;
s8 max_noise;
/* Number of available hardware TX queues for data packets.
Index: wireless-dev/net/mac80211/ieee80211.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211.c
+++ wireless-dev/net/mac80211/ieee80211.c
@@ -2705,7 +2705,7 @@ ieee80211_fill_frame_info(struct ieee802
fi->antenna = htonl(status->antenna);
fi->priority = 0xffffffff; /* no clue */
fi->ssi_type = htonl(ieee80211_ssi_raw);
- fi->ssi_signal = htonl(status->ssi);
+ fi->ssi_signal = htonl(status->level);
fi->ssi_noise = 0x00000000;
fi->encoding = 0;
} else {
@@ -3352,10 +3352,10 @@ ieee80211_rx_h_sta_process(struct ieee80
sta->rx_fragments++;
sta->rx_bytes += rx->skb->len;
- sta->last_rssi = (sta->last_rssi * 15 +
- rx->u.rx.status->ssi) / 16;
- sta->last_signal = (sta->last_signal * 15 +
- rx->u.rx.status->signal) / 16;
+ sta->last_level = (sta->last_level * 15 +
+ rx->u.rx.status->level) / 16;
+ sta->last_qual = (sta->last_qual * 15 +
+ rx->u.rx.status->qual) / 16;
sta->last_noise = (sta->last_noise * 15 +
rx->u.rx.status->noise) / 16;
@@ -4643,7 +4643,7 @@ int ieee80211_register_hw(struct ieee802
local->wstats_flags |= local->hw.max_rssi ?
IW_QUAL_LEVEL_UPDATED : IW_QUAL_LEVEL_INVALID;
- local->wstats_flags |= local->hw.max_signal ?
+ local->wstats_flags |= local->hw.max_qual ?
IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID;
local->wstats_flags |= local->hw.max_noise ?
IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID;
Index: wireless-dev/net/mac80211/ieee80211_sta.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_sta.c
+++ wireless-dev/net/mac80211/ieee80211_sta.c
@@ -1192,8 +1192,8 @@ static void ieee80211_rx_mgmt_assoc_resp
}
bss = ieee80211_rx_bss_get(dev, ifsta->bssid);
if (bss) {
- sta->last_rssi = bss->rssi;
- sta->last_signal = bss->signal;
+ sta->last_level = bss->level;
+ sta->last_qual = bss->qual;
sta->last_noise = bss->noise;
ieee80211_rx_bss_put(dev, bss);
}
@@ -1582,8 +1582,8 @@ static void ieee80211_rx_bss_info(struct
}
bss->timestamp = timestamp;
bss->last_update = jiffies;
- bss->rssi = rx_status->ssi;
- bss->signal = rx_status->signal;
+ bss->level = rx_status->level;
+ bss->qual = rx_status->qual;
bss->noise = rx_status->noise;
if (!beacon)
bss->probe_resp++;
@@ -2060,7 +2060,7 @@ static int ieee80211_sta_config_auth(str
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_sta_bss *bss, *selected = NULL;
- int top_rssi = 0, freq;
+ int top_level = 0, freq;
if (!ifsta->auto_channel_sel && !ifsta->auto_bssid_sel &&
!ifsta->auto_ssid_sel) {
@@ -2090,9 +2090,9 @@ static int ieee80211_sta_config_auth(str
!ieee80211_sta_match_ssid(ifsta, bss->ssid, bss->ssid_len))
continue;
- if (top_rssi < bss->rssi) {
+ if (top_level < bss->level) {
selected = bss;
- top_rssi = bss->rssi;
+ top_level = bss->level;
}
}
if (selected)
@@ -2822,8 +2822,8 @@ ieee80211_sta_scan_result(struct net_dev
memset(&iwe, 0, sizeof(iwe));
iwe.cmd = IWEVQUAL;
- iwe.u.qual.qual = bss->signal;
- iwe.u.qual.level = bss->rssi;
+ iwe.u.qual.qual = bss->qual;
+ iwe.u.qual.level = bss->level;
iwe.u.qual.noise = bss->noise;
iwe.u.qual.updated = local->wstats_flags;
current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
@@ -2908,7 +2908,7 @@ ieee80211_sta_scan_result(struct net_dev
memset(&iwe, 0, sizeof(iwe));
iwe.cmd = IWEVCUSTOM;
- sprintf(buf, "rssi=%d", bss->rssi);
+ sprintf(buf, "level=%d", bss->level);
iwe.u.data.length = strlen(buf);
current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe,
buf);
Index: wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
+++ wireless-dev/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c
@@ -460,7 +460,7 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
u16 phystat0, phystat3, chanstat, mactime;
u32 macstat;
u16 chanid;
- u8 jssi;
+ u8 qual;
int padding;
memset(&status, 0, sizeof(status));
@@ -468,7 +468,7 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
/* Get metadata about the frame from the header. */
phystat0 = le16_to_cpu(rxhdr->phy_status0);
phystat3 = le16_to_cpu(rxhdr->phy_status3);
- jssi = rxhdr->jssi;
+ qual = rxhdr->jssi;
macstat = le32_to_cpu(rxhdr->mac_status);
mactime = le16_to_cpu(rxhdr->mac_time);
chanstat = le16_to_cpu(rxhdr->channel);
@@ -529,12 +529,12 @@ void bcm43xx_rx(struct bcm43xx_wldev *de
}
}
- status.signal = bcm43xx_rssi_postprocess(dev, jssi,
+ status.level = bcm43xx_rssi_postprocess(dev, qual,
(phystat0 & BCM43xx_RX_PHYST0_OFDM),
(phystat0 & BCM43xx_RX_PHYST0_GAINCTL),
(phystat3 & BCM43xx_RX_PHYST3_TRSTATE));
status.noise = dev->stats.link_noise;
- status.ssi = jssi;
+ status.qual = qual;
if (phystat0 & BCM43xx_RX_PHYST0_OFDM)
status.rate = bcm43xx_plcp_get_bitrate_ofdm(plcp);
else
Index: wireless-dev/net/mac80211/debugfs_sta.c
===================================================================
--- wireless-dev.orig/net/mac80211/debugfs_sta.c
+++ wireless-dev/net/mac80211/debugfs_sta.c
@@ -76,8 +76,8 @@ STA_FILE(txrate, txrate, RATE);
STA_FILE(last_txrate, last_txrate, RATE);
STA_FILE(tx_retry_failed, tx_retry_failed, LU);
STA_FILE(tx_retry_count, tx_retry_count, LU);
-STA_FILE(last_rssi, last_rssi, D);
-STA_FILE(last_signal, last_signal, D);
+STA_FILE(last_level, last_level, D);
+STA_FILE(last_qual, last_qual, D);
STA_FILE(last_noise, last_noise, D);
STA_FILE(channel_use, channel_use, D);
STA_FILE(wep_weak_iv_count, wep_weak_iv_count, D);
Index: wireless-dev/net/mac80211/ieee80211_i.h
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_i.h
+++ wireless-dev/net/mac80211/ieee80211_i.h
@@ -82,7 +82,7 @@ struct ieee80211_sta_bss {
int hw_mode;
int channel;
int freq;
- int rssi, signal, noise;
+ int level, qual, noise;
u8 *wpa_ie;
size_t wpa_ie_len;
u8 *rsn_ie;
Index: wireless-dev/net/mac80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c
+++ wireless-dev/net/mac80211/ieee80211_ioctl.c
@@ -445,7 +445,7 @@ static int ieee80211_ioctl_get_info_sta(
skb_queue_len(&sta->ps_tx_buf);
param->u.get_info_sta.tx_retry_failed = sta->tx_retry_failed;
param->u.get_info_sta.tx_retry_count = sta->tx_retry_count;
- param->u.get_info_sta.last_rssi = sta->last_rssi;
+ param->u.get_info_sta.last_rssi = sta->last_level;
param->u.get_info_sta.last_ack_rssi = sta->last_ack_rssi[2];
sta_info_put(sta);
@@ -1593,12 +1593,12 @@ static int ieee80211_ioctl_giwrange(stru
range->min_frag = 256;
range->max_frag = 2346;
- range->max_qual.qual = local->hw.max_signal;
+ range->max_qual.qual = local->hw.max_qual;
range->max_qual.level = local->hw.max_rssi;
range->max_qual.noise = local->hw.max_noise;
range->max_qual.updated = local->wstats_flags;
- range->avg_qual.qual = local->hw.max_signal/2;
+ range->avg_qual.qual = local->hw.max_qual/2;
range->avg_qual.level = 0;
range->avg_qual.noise = 0;
range->avg_qual.updated = local->wstats_flags;
@@ -3084,8 +3084,8 @@ static struct iw_statistics *ieee80211_g
wstats->qual.noise = 0;
wstats->qual.updated = IW_QUAL_ALL_INVALID;
} else {
- wstats->qual.level = sta->last_rssi;
- wstats->qual.qual = sta->last_signal;
+ wstats->qual.level = sta->last_level;
+ wstats->qual.qual = sta->last_qual;
wstats->qual.noise = sta->last_noise;
wstats->qual.updated = local->wstats_flags;
sta_info_put(sta);
Index: wireless-dev/net/mac80211/sta_info.h
===================================================================
--- wireless-dev.orig/net/mac80211/sta_info.h
+++ wireless-dev/net/mac80211/sta_info.h
@@ -82,8 +82,8 @@ struct sta_info {
unsigned long rx_fragments; /* number of received MPDUs */
unsigned long rx_dropped; /* number of dropped MPDUs from this STA */
- int last_rssi; /* RSSI of last received frame from this STA */
- int last_signal; /* signal of last received frame from this STA */
+ int last_level; /* level of last received frame from this STA */
+ int last_qual; /* qual of last received frame from this STA */
int last_noise; /* noise of last received frame from this STA */
int last_ack_rssi[3]; /* RSSI of last received ACKs from this STA */
unsigned long last_ack;
Index: wireless-dev/drivers/net/wireless/mac80211/adm8211/adm8211.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/adm8211/adm8211.c
+++ wireless-dev/drivers/net/wireless/mac80211/adm8211/adm8211.c
@@ -540,9 +540,9 @@ static void adm8211_interrupt_rci(struct
struct ieee80211_rx_status rx_status = {0};
if (priv->revid < ADM8211_REV_CA)
- rx_status.ssi = rssi;
+ rx_status.level = rssi;
else
- rx_status.ssi = 100 - rssi;
+ rx_status.level = 100 - rssi;
if (rate <= 4)
rx_status.rate = rate_tbl[rate];
Index: wireless-dev/drivers/net/wireless/mac80211/p54/prism54common.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/p54/prism54common.c
+++ wireless-dev/drivers/net/wireless/mac80211/p54/prism54common.c
@@ -282,7 +282,7 @@ static void p54_rx_data(struct ieee80211
struct ieee80211_rx_status rx_status = {0};
u16 freq = le16_to_cpu(hdr->freq);
- rx_status.ssi = hdr->rssi; /* TODO: check this */
+ rx_status.level = hdr->rssi; /* TODO: check this */
rx_status.rate = min(hdr->rate + 1, 12); /* TODO: check this */
rx_status.channel = freq == 2484 ? 14 : (freq - 2407)/5;
rx_status.freq = freq;
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c
@@ -1742,7 +1742,7 @@ static void rt2500pci_rxdone(struct work
* Update link statistics
*/
rt2x00_update_link_rssi(&rt2x00dev->link,
- rt2x00dev->rx_status.ssi);
+ rt2x00dev->rx_status.level);
skip_entry:
rt2x00_set_field32(&word0, RXD_W0_OWNER_NIC, 1);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2500usb.c
@@ -1702,7 +1702,7 @@ static void rt2500usb_interrupt_rxdone(s
/*
* Update link statistics
*/
- rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.ssi);
+ rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.level);
skip_entry:
if (!GET_FLAG(ring->rt2x00dev, DEVICE_ENABLED_RADIO))
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c
@@ -157,7 +157,7 @@ void rt2x00lib_update_rx_stats(struct rt
}
rt2x00dev->rx_status.rate = val;
- rt2x00dev->rx_status.ssi = rssi;
+ rt2x00dev->rx_status.level = rssi;
rt2x00dev->rx_status.noise = rt2x00_get_link_noise(&rt2x00dev->link);
}
EXPORT_SYMBOL_GPL(rt2x00lib_update_rx_stats);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt61pci.c
@@ -2047,7 +2047,7 @@ static void rt61pci_rxdone(struct work_s
* Update link statistics
*/
rt2x00_update_link_rssi(&rt2x00dev->link,
- rt2x00dev->rx_status.ssi);
+ rt2x00dev->rx_status.level);
skip_entry:
rt2x00_set_field32(&word0, RXD_W0_OWNER_NIC, 1);
Index: wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
+++ wireless-dev/drivers/net/wireless/mac80211/rt2x00/rt73usb.c
@@ -1858,7 +1858,7 @@ static void rt73usb_interrupt_rxdone(str
/*
* Update link statistics
*/
- rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.ssi);
+ rt2x00_update_link_rssi(&rt2x00dev->link, rt2x00dev->rx_status.level);
skip_entry:
if (!GET_FLAG(ring->rt2x00dev, DEVICE_ENABLED_RADIO))
Index: wireless-dev/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
+++ wireless-dev/drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c
@@ -161,8 +161,8 @@ static void rtl8187_rx_cb(struct urb *ur
}
rx_status.antenna = (hdr->signal >> 7) & 1;
- rx_status.signal = 64 - min(hdr->noise, (u8)64);
- rx_status.ssi = signal;
+ rx_status.qual = 64 - min(hdr->noise, (u8)64);
+ rx_status.level = signal;
rx_status.rate = priv->rates[rate].rate;
rx_status.freq = dev->conf.freq;
rx_status.channel = dev->conf.channel;
@@ -609,7 +609,7 @@ static int __devinit rtl8187_probe(struc
dev->extra_tx_headroom = sizeof(struct rtl8187_tx_hdr);
dev->queues = 1;
dev->max_rssi = 65;
- dev->max_signal = 64;
+ dev->max_qual = 64;
for (i = 0; i < 2; i++)
if ((err = ieee80211_register_hwmode(dev, &priv->modes[i])))
Index: wireless-dev/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
+++ wireless-dev/drivers/net/wireless/mac80211/zd1211rw/zd_mac.c
@@ -407,8 +407,8 @@ static int fill_rx_stats(struct ieee8021
stats->channel = _zd_chip_get_channel(&mac->chip);
stats->freq = zd_channels[stats->channel - 1].freq;
stats->phymode = MODE_IEEE80211G;
- stats->ssi = zd_rx_strength_percent(status->signal_strength);
- stats->signal = zd_rx_qual_percent(buffer,
+ stats->level = zd_rx_strength_percent(status->signal_strength);
+ stats->qual = zd_rx_qual_percent(buffer,
length - sizeof(struct rx_status),
status);
stats->rate = zd_rx_rate(buffer, status);
@@ -453,7 +453,7 @@ static int filter_ack(struct ieee80211_h
if (control) {
memcpy(&status.control, control, sizeof(status.control));
status.flags = IEEE80211_TX_STATUS_ACK;
- status.ack_signal = stats->ssi;
+ status.ack_signal = stats->level;
ieee80211_tx_status_irqsafe(dev, skb, &status);
kfree(control);
} else
@@ -631,7 +631,7 @@ struct ieee80211_hw *zd_mac_alloc(struct
dev->flags = IEEE80211_HW_RX_INCLUDES_FCS |
IEEE80211_HW_WEP_INCLUDE_IV;
dev->max_rssi = 100;
- dev->max_signal = 100;
+ dev->max_qual = 100;
dev->queues = 1;
dev->extra_tx_headroom = sizeof(struct zd_ctrlset);
----
next prev parent reply other threads:[~2007-04-10 0:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-08 5:04 [PATCH] mac80211: Report correct wireless statistics Larry Finger
2007-04-08 7:48 ` Tomas Winkler
2007-04-08 15:35 ` Michael Wu
2007-04-08 22:26 ` Larry Finger
2007-04-08 23:02 ` Michael Wu
2007-04-08 23:32 ` Larry Finger
2007-04-08 23:41 ` Michael Wu
2007-04-09 0:02 ` Larry Finger
2007-04-09 0:31 ` Michael Wu
2007-04-09 3:54 ` Larry Finger
2007-04-09 4:43 ` Michael Wu
2007-04-09 5:06 ` Larry Finger
2007-04-09 12:07 ` Dan Williams
2007-04-09 12:21 ` Dan Williams
2007-04-09 15:49 ` Larry Finger
2007-04-09 17:16 ` Michael Wu
2007-04-09 21:12 ` Larry Finger
2007-04-09 23:02 ` Michael Wu
2007-04-10 0:59 ` Larry Finger [this message]
2007-04-13 23:18 ` Michael Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=461AE160.6060404@lwfinger.net \
--to=larry.finger@lwfinger.net \
--cc=Bcm43xx-dev@lists.berlios.de \
--cc=dcbw@redhat.com \
--cc=flamingice@sourmilk.net \
--cc=jbenc@suse.cz \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=mb@bu3sch.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).