From ef92bcdc977f152e1178dd8189cd39ecff63b7e5 Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Sat, 1 Jan 2005 17:48:27 +0000 Subject: [PATCH] Correct scan candidate selection logic for dual-band devices: prefer candidate on 5Ghz channel to candidate on 2Ghz channel only when the rssi are comparable (wasn't considering rssi). --- sys/net80211/ieee80211_node.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 226b413e357..f6c49bd6de6 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -547,23 +547,23 @@ ieee80211_node_compare(struct ieee80211com *ic, (b->ni_capinfo & IEEE80211_CAPINFO_PRIVACY)) return -1; - /* best/max rate preferred if signal level close enough XXX */ - maxa = maxrate(a); - maxb = maxrate(b); rssia = ic->ic_node_getrssi(a); rssib = ic->ic_node_getrssi(b); - if (maxa != maxb && abs(rssib - rssia) < 5) - return maxa - maxb; - - /* XXX use freq for channel preference */ - /* for now just prefer 5Ghz band to all other bands */ - if (IEEE80211_IS_CHAN_5GHZ(a->ni_chan) && - !IEEE80211_IS_CHAN_5GHZ(b->ni_chan)) - return 1; - if (!IEEE80211_IS_CHAN_5GHZ(a->ni_chan) && - IEEE80211_IS_CHAN_5GHZ(b->ni_chan)) - return -1; - + if (abs(rssib - rssia) < 5) { + /* best/max rate preferred if signal level close enough XXX */ + maxa = maxrate(a); + maxb = maxrate(b); + if (maxa != maxb) + return maxa - maxb; + /* XXX use freq for channel preference */ + /* for now just prefer 5Ghz band to all other bands */ + if (IEEE80211_IS_CHAN_5GHZ(a->ni_chan) && + !IEEE80211_IS_CHAN_5GHZ(b->ni_chan)) + return 1; + if (!IEEE80211_IS_CHAN_5GHZ(a->ni_chan) && + IEEE80211_IS_CHAN_5GHZ(b->ni_chan)) + return -1; + } /* all things being equal, use signal level */ return rssia - rssib; }