From owner-p4-projects@FreeBSD.ORG Mon Nov 1 22:48:38 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 533BE16A4D0; Mon, 1 Nov 2004 22:48:38 +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 1A3AC16A4CE for ; Mon, 1 Nov 2004 22:48:38 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id DC7E343D39 for ; Mon, 1 Nov 2004 22:48:37 +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 iA1Mmb8S066015 for ; Mon, 1 Nov 2004 22:48:37 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id iA1Mmbb6066012 for perforce@freebsd.org; Mon, 1 Nov 2004 22:48:37 GMT (envelope-from sam@freebsd.org) Date: Mon, 1 Nov 2004 22:48:37 GMT Message-Id: <200411012248.iA1Mmbb6066012@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 64069 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: Mon, 01 Nov 2004 22:48:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=64069 Change 64069 by sam@sam_ebb on 2004/11/01 22:47:41 add ieee80211_getrssi that calculates an rssi based on the operating mode; for station mode this just checks the ap, otherwise we calculate an average over the "neighbors" Affected files ... .. //depot/projects/wifi/sys/net80211/ieee80211_node.c#6 edit .. //depot/projects/wifi/sys/net80211/ieee80211_node.h#5 edit Differences ... ==== //depot/projects/wifi/sys/net80211/ieee80211_node.c#6 (text+ko) ==== @@ -1231,3 +1231,43 @@ if (ic->ic_updateslot != NULL) ic->ic_updateslot(ic->ic_ifp); } + +u_int8_t +ieee80211_getrssi(struct ieee80211com *ic) +{ +#define NZ(x) ((x) == 0 ? 1 : (x)) + u_int8_t rssi; + + 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 *ni; + + /* average stats from all neighbors */ + rssi_samples = 0; + rssi_total = 0; + /* XXX locking */ + TAILQ_FOREACH(ni, &ic->ic_node, ni_list) + if (ic->ic_opmode != IEEE80211_M_HOSTAP || + IEEE80211_AID(ni->ni_associd) != 0) { + rssi_samples++; + rssi_total += ic->ic_node_getrssi(ic, ni); + } + rssi = rssi_total / NZ(rssi_samples); + break; + } + case IEEE80211_M_STA: + case IEEE80211_M_MONITOR: + default: + /* use stats from associated ap */ + if (ic->ic_bss != NULL) + rssi = ic->ic_node_getrssi(ic, ic->ic_bss); + else + rssi = 0; + break; + } + return rssi; +#undef NZ +} ==== //depot/projects/wifi/sys/net80211/ieee80211_node.h#5 (text+ko) ==== @@ -236,4 +236,5 @@ extern void ieee80211_node_leave(struct ieee80211com *, struct ieee80211_node *); extern void ieee80211_set_shortslottime(struct ieee80211com *, int onoff); +extern u_int8_t ieee80211_getrssi(struct ieee80211com *ic); #endif /* _NET80211_IEEE80211_NODE_H_ */