From owner-p4-projects@FreeBSD.ORG Sun Nov 14 06:13:40 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0448816A4D1; Sun, 14 Nov 2004 06:13:40 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D304916A4CE for ; Sun, 14 Nov 2004 06:13:39 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id A90B343D31 for ; Sun, 14 Nov 2004 06:13:39 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id iAE6DdKN058250 for ; Sun, 14 Nov 2004 06:13:39 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id iAE6Dd7U058247 for perforce@freebsd.org; Sun, 14 Nov 2004 06:13:39 GMT (envelope-from sam@freebsd.org) Date: Sun, 14 Nov 2004 06:13:39 GMT Message-Id: <200411140613.iAE6Dd7U058247@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 65079 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Nov 2004 06:13:40 -0000 http://perforce.freebsd.org/chv.cgi?CH=65079 Change 65079 by sam@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 }