PERFORCE change 65079 for review
Sam Leffler
sam at FreeBSD.org
Sat Nov 13 22:13:40 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=65079
Change 65079 by sam at sam_ebb on 2004/11/14 06:12:54
improve the meaningfulness of rssi estimates for hostap,
ibss, and ahdemo modes
Affected files ...
.. //depot/projects/wifi/sys/net80211/ieee80211_node.c#14 edit
Differences ...
==== //depot/projects/wifi/sys/net80211/ieee80211_node.c#14 (text+ko) ====
@@ -1571,42 +1571,54 @@
ieee80211_getrssi(struct ieee80211com *ic)
{
#define NZ(x) ((x) == 0 ? 1 : (x))
- u_int8_t rssi;
+ struct ieee80211_node_table *nt = ic->ic_sta;
+ u_int32_t rssi_samples, rssi_total;
+ struct ieee80211_node *ni;
+ rssi_total = 0;
+ rssi_samples = 0;
switch (ic->ic_opmode) {
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- case IEEE80211_M_HOSTAP: {
- u_int32_t rssi_samples, rssi_total;
- struct ieee80211_node_table *nt = ic->ic_sta;
-
- /* average stats from all neighbors */
- rssi_samples = 0;
- rssi_total = 0;
- if (nt != NULL) {
- struct ieee80211_node *ni;
- /* XXX locking */
- TAILQ_FOREACH(ni, &ic->ic_sta->nt_node, ni_list)
- if (ic->ic_opmode != IEEE80211_M_HOSTAP ||
- IEEE80211_AID(ni->ni_associd) != 0) {
- rssi_samples++;
- rssi_total += ic->ic_node_getrssi(ni);
- }
+ case IEEE80211_M_IBSS: /* average of all ibss neighbors */
+ nt = ic->ic_sta;
+ if (nt == NULL)
+ break;
+ /* XXX locking */
+ TAILQ_FOREACH(ni, &ic->ic_sta->nt_node, ni_list)
+ if (ni->ni_capinfo & IEEE80211_CAPINFO_IBSS) {
+ rssi_samples++;
+ rssi_total += ic->ic_node_getrssi(ni);
+ }
+ break;
+ case IEEE80211_M_AHDEMO: /* average of all neighbors */
+ nt = ic->ic_sta;
+ if (nt == NULL)
+ break;
+ /* XXX locking */
+ TAILQ_FOREACH(ni, &ic->ic_sta->nt_node, ni_list) {
+ rssi_samples++;
+ rssi_total += ic->ic_node_getrssi(ni);
}
- rssi = rssi_total / NZ(rssi_samples);
+ break;
+ case IEEE80211_M_HOSTAP: /* average of all associated stations */
+ nt = ic->ic_sta;
+ if (nt == NULL)
+ break;
+ /* XXX locking */
+ TAILQ_FOREACH(ni, &ic->ic_sta->nt_node, ni_list)
+ if (IEEE80211_AID(ni->ni_associd) != 0) {
+ rssi_samples++;
+ rssi_total += ic->ic_node_getrssi(ni);
+ }
break;
- }
- case IEEE80211_M_STA:
- case IEEE80211_M_MONITOR:
+ case IEEE80211_M_MONITOR: /* XXX */
+ case IEEE80211_M_STA: /* use stats from associated ap */
default:
- /* use stats from associated ap */
if (ic->ic_bss != NULL)
- rssi = ic->ic_node_getrssi(ic->ic_bss);
- else
- rssi = 0;
+ rssi_total = ic->ic_node_getrssi(ic->ic_bss);
+ rssi_samples = 1;
break;
}
- return rssi;
+ return rssi_total / NZ(rssi_samples);
#undef NZ
}
More information about the p4-projects
mailing list