Linux wireless drivers development
 help / color / mirror / Atom feed
* Roaming issues.
@ 2008-02-27 13:44 Lars Ericsson
  2008-02-27 13:59 ` Luis R. Rodriguez
  2008-02-27 16:28 ` Johannes Berg
  0 siblings, 2 replies; 11+ messages in thread
From: Lars Ericsson @ 2008-02-27 13:44 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, rt2400-devel

Johannes,

Back with som data regarding roaming.


Prerequisites
=============
Just for your knowledge I'm using the following equipment:
- RT61, mini PCI
- rt2x00.git / 1e0b4c51393308a98f2918db424c676cc99cf123
- Managed mode
- Wpa_supplicant 0.5.9

AP deauthentication.
=====================
When any of the ieee80211_rx_mgmt_deauth() or ieee80211_rx_mgmt_disassoc()
are executed, the mac layer takes two actions.
1) Tells wpa_supplicant what had happened.
2) Start reestabliching the connaction again.

The later action will stop or significantly delay the decisions/action taken
by wpa_supplicant as a result of action 1. Normally the supplicant will
start an AP scan. 
But the mac layer is busy with reestablishing the link and will not start
any scan action.
  
My patches simply put the mac layer in IEEE80211_DISABLED state and wait for
the supplicant to decide.


Monitoring of a usable link to the AP.
======================================
The ieee80211_rx_h_sta_process() and  ieee80211_associated() are involved in
monitors for dead AP connection. A last_rx value is set to indicate a
working connection.

The porblem is the following lines.
	if (!is_multicast_ether_addr(hdr->addr1) ||
	    rx->sdata->vif.type == IEEE80211_IF_TYPE_STA) {

Any package that arrives to an STA will update the last_rx value and
prohibit a link lost action.

I have noticed in my system that this function receives the following type
of frames:
1) Broad cast frames from my BSS (beacons).
2) Data frames addressed to me ;)
3) Data frames from other STA addressed to other MAC addresses but using the
same BSS.
 
It is the case 3 that creates the problem. Another STA, closer to my BSS
will update my last_rx value even I do not receive the BSS.

I have made the following change:

	if ( compare_ether_addr(hdr->addr2, hdr->addr3) == 0 &&
	    rx->sdata->vif.type == IEEE80211_IF_TYPE_STA) {

My last_rx will only be updated as long as I can receive frames from my BSS.
I might have to add some frame type validation, but it solved my problems.


Timeout handling
=================
When any of the ieee80211_authenticate() or ieee80211_associate() function
are executed. 
The mac silently set its state to IEEE80211_DISABLED and waits for the
wpa_supplicant to timeout its current action.

I think it would be a good idea to signal to the supplicant that the
operation has timeout, and no further action will be taken.
To speed up the timeout response I had squeezed the supplicant timeout.

I have patches for all modification but it might be a good start to verify
that my suggestion is 'usabel'

Regards
Lars



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2008-02-28 16:01 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-27 13:44 Roaming issues Lars Ericsson
2008-02-27 13:59 ` Luis R. Rodriguez
2008-02-27 16:28 ` Johannes Berg
2008-02-27 17:36   ` Dan Williams
2008-02-27 17:44     ` Johannes Berg
2008-02-27 20:25       ` Roaming issues: AP deauthentication Lars Ericsson
2008-02-28 15:57         ` Johannes Berg
2008-02-27 20:27       ` Roaming issues: Monitoring of a usable link to the AP Lars Ericsson
2008-02-28 11:22         ` Lars Ericsson
2008-02-28 16:00           ` Johannes Berg
2008-02-27 20:30       ` Roaming issues: Timeout handling Lars Ericsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox