Hello!
I have implemented manual roaming for Intersil and Symbol firmware. The
patch has been applied to all branches. It's also attached so that
everybody can examine it.
Manual roaming is enabled by the iwconfig "ap" command e.g.:
iwconfig eth0 ap 00:60:1D:01:23:45
It's disabled by "iwconfig eth0 ap any" or "iwconfig eth0 ap off".
"iwconfig eth0 ap off" would keep the existing connection while "iwconfig
eth0 ap any" would force reconnect. That's what "man iwconfig" says.
The implementation for Symbol is very easy. It has a setting (RID) called
MandatoryBSSID. If it's set to the requested address, the firmware scans
all channels and associates. Desired ESSID doesn't need to be set.
Things are more complicated for Intersil firmware. Desired ESSID must be
set or the firmware will hang. The card won't scan channels and associate
automatically. Either the channel should be known, or the scan results
must be searched for the channel used by the requested BSSID.
I didn't want to mess with the scanning code, which is very fragile, but I
didn't want to force users to set the channel. Fortunately, there is a
solution. Scan results on Intersil firmware are available in a separate
RID 0xfd88 called ScanResults, so the roaming code doesn't affect scanning
in any way.
Lucent/Agere firmware is not supported because there is no documentation
for it and the native driver doesn't implement manual roaming.
I haven't tested any userspace roaming software like waproamd. Please
test and report problems if any. The changes are quite heavy, but it was
the most requested feature.
--
Regards,
Pavel Roskin
join_ap.diff
Description: Text document
|