Message ID | 20090806085242.23637.82992.stgit@ct.roinet.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Thu, 2009-08-06 at 04:52 -0400, Pavel Roskin wrote: > WARN_ON was triggered at mlme.c:213 when dissociating from an AP. > > wdev->current_bss->pub.bssid should be used in place of > wdev->current_bss for BSSID comparison. Oh wow, good catch, thanks. Reviewed-by: Johannes Berg <johannes@sipsolutions.net> > Signed-off-by: Pavel Roskin <proski@gnu.org> > --- > net/wireless/mlme.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c > index 525e8e2..b44b6c0 100644 > --- a/net/wireless/mlme.c > +++ b/net/wireless/mlme.c > @@ -198,7 +198,7 @@ static void __cfg80211_send_disassoc(struct net_device *dev, > return; > > if (wdev->current_bss && > - memcmp(wdev->current_bss, bssid, ETH_ALEN) == 0) { > + memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { > for (i = 0; i < MAX_AUTH_BSSES; i++) { > if (wdev->authtry_bsses[i] || wdev->auth_bsses[i]) > continue; >
On Thu, 2009-08-06 at 11:06 +0200, Johannes Berg wrote: > On Thu, 2009-08-06 at 04:52 -0400, Pavel Roskin wrote: > > WARN_ON was triggered at mlme.c:213 when dissociating from an AP. > > > > wdev->current_bss->pub.bssid should be used in place of > > wdev->current_bss for BSSID comparison. > > Oh wow, good catch, thanks. Now that the check is fixed, it turn out there is a related problem in the same function. If the device is in the managed mode and disconnects from an AP due to a low signal, attempts to reassociate by setting the same ESSID fail: Error for wireless request "Set ESSID" (8B1A) : SET failed on device wlan0 ; Operation already in progress. It happens because wdev->auth_bsses[i] is not set to NULL. cfg80211_sme_disassoc() can do it, but not if wdev->conn->state is CFG80211_CONN_IDLE. Either cfg80211_sme_disassoc() or __cfg80211_send_disassoc() should unset wdev->auth_bsses[i] for the management mode.
On Thu, 2009-08-06 at 08:55 -0400, Pavel Roskin wrote: > Now that the check is fixed, it turn out there is a related problem in > the same function. If the device is in the managed mode and disconnects > from an AP due to a low signal, Who decides to disconnect? This isn't making any sense to me. Once you're connected, wdev->auth_bsses[i] shouldn't be set any more. johannes
On Thu, 2009-08-06 at 15:09 +0200, Johannes Berg wrote: > On Thu, 2009-08-06 at 08:55 -0400, Pavel Roskin wrote: > > > Now that the check is fixed, it turn out there is a related problem in > > the same function. If the device is in the managed mode and disconnects > > from an AP due to a low signal, > > Who decides to disconnect? I was unscrewing the antenna from the AP, and the AP wasn't visible in the scan results without an antenna, so I assume that the station was deciding to disconnect on its own. > This isn't making any sense to me. Once you're connected, > wdev->auth_bsses[i] shouldn't be set any more. I see that you have posted several patches for the issue. I'll test them on the same hardware tomorrow to avoid introducing extra variables.
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 525e8e2..b44b6c0 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c @@ -198,7 +198,7 @@ static void __cfg80211_send_disassoc(struct net_device *dev, return; if (wdev->current_bss && - memcmp(wdev->current_bss, bssid, ETH_ALEN) == 0) { + memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { for (i = 0; i < MAX_AUTH_BSSES; i++) { if (wdev->authtry_bsses[i] || wdev->auth_bsses[i]) continue;
WARN_ON was triggered at mlme.c:213 when dissociating from an AP. wdev->current_bss->pub.bssid should be used in place of wdev->current_bss for BSSID comparison. Signed-off-by: Pavel Roskin <proski@gnu.org> --- net/wireless/mlme.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html