bin/170631: [PATCH] Add roaming support to wpa_supplicant

Daan Vreeken Daan at
Tue Aug 14 11:00:22 UTC 2012

>Number:         170631
>Category:       bin
>Synopsis:       [PATCH] Add roaming support to wpa_supplicant
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Aug 14 11:00:21 UTC 2012
>Originator:     Daan Vreeken
>Release:        FreeBSD 10.0-CURRENT amd64
Vitsch Electronics -
 FreeBSD Devel13.Vitsch.LAN 10.0-CURRENT FreeBSD 10.0-CURRENT #0: Sat Jan 28 21:31:14 CET 2012 root at Compile2:/usr/src/sys/amd64/compile/Multimedia amd64

 The wpa_supplicant application has the ability to do roaming based on the
 received signal strength indication (RSSI), but currently this is broken in
 At this moment wpa_supplicant will always report a level of 0dBm for all
 detected wireless networks.

 Run wpa_supplicant with the '-d' option set and with a configuration file
 that allows it to connect to at least two Access Points that are in the
 vicinity of the receiver.
 Note that wpa_supplicant will always report a level of '0' for all networks.

 The wpa_supplicant's FreeBSD driver interface only sets 'result->qual' and
 'result->noise', but not 'result->level' in wpa_driver_bsd_add_scan_entry(),
 while the latter is used when sorting AP's based on their signal strength.

 The attached patch fixes this by calculating 'result->level' according to
 it's definition in net80211/ieee80211_node.h .
 The patch also fixes a spelling error in ieee80211_var.h .
 If the patch somehow gets mangled in the email, it can also be downloaded

 After applying the patch, wpa_supplicant will now successfully attempt to
 roam when background scanning is enabled and there is an AP with a higher
 signal strength.

 Sponsored by: Vitsch Electronics

--- patch_wpa_supplicant_rssi_fix_2012_08_14.diff begins here ---
Index: usr.sbin/wpa/wpa_supplicant/driver_freebsd.c
--- usr.sbin/wpa/wpa_supplicant/driver_freebsd.c	(revision 238968)
+++ usr.sbin/wpa/wpa_supplicant/driver_freebsd.c	(working copy)
@@ -693,6 +693,11 @@
         result->caps = sr->isr_capinfo;
         result->qual = sr->isr_rssi;
         result->noise = sr->isr_noise;
+        /*
+         * the rssi value reported by the kernel is in 0.5dB steps relative to
+         * the reported noise floor. see ieee80211_node.h for details.
+         */
+        result->level = sr->isr_rssi / 2 + sr->isr_noise;
         pos = (u8 *)(result + 1);
Index: sys/net80211/ieee80211_var.h
--- sys/net80211/ieee80211_var.h	(revision 238968)
+++ sys/net80211/ieee80211_var.h	(working copy)
@@ -55,7 +55,7 @@
 #include <net80211/ieee80211_radiotap.h>
 #include <net80211/ieee80211_scan.h>
-#define	IEEE80211_TXPOWER_MAX	100	/* .5 dbM (XXX units?) */
+#define	IEEE80211_TXPOWER_MAX	100	/* .5 dBm (XXX units?) */
 #define	IEEE80211_TXPOWER_MIN	0	/* kill radio */
 #define	IEEE80211_DTIM_DEFAULT	1	/* default DTIM period */
--- patch_wpa_supplicant_rssi_fix_2012_08_14.diff ends here ---


More information about the freebsd-bugs mailing list