To clarify on the patchset and order: [quilt series]: # patches from linux-wireless ML linux-wireless/0001-Revert-mac80211-fix-SME-warning-by-removing-stale-BS.patch linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch linux-wireless/cfg80211-sme-deauthenticate-on-assoc-failure.patch - Sedat - On Tue, Oct 20, 2009 at 9:33 AM, Sedat Dilek <sedat.dilek@xxxxxxxxxxxxxx> wrote: > Is this patch on top of wireless-testing (master-2009-10-16)? > > It fails here: > ... > Applying patch linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch > patching file net/mac80211/mlme.c > Hunk #1 FAILED at 1457. > 1 out of 1 hunk FAILED -- rejects in file net/mac80211/mlme.c > Patch linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch > does not apply (enforce with -f) > ERROR: failed to apply patch series! > > Does it need to revert "mac80211: fix SME warning by removing stale > BSS upon assoc failure"? > > - Sedat - > > On Tue, Oct 20, 2009 at 8:08 AM, Johannes Berg > <johannes@xxxxxxxxxxxxxxxx> wrote: >> When the in-kernel SME gets an association failure from >> the AP we don't deauthenticate, and thus get into a very >> confused state which will lead to warnings later on. Fix >> this by actually deauthenticating when the AP indicates >> an association failure. >> >> Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> >> --- >> net/wireless/core.h | 1 + >> net/wireless/mlme.c | 9 +++++++++ >> net/wireless/sme.c | 21 +++++++++++++++++++-- >> 3 files changed, 29 insertions(+), 2 deletions(-) >> >> --- wireless-testing.orig/net/wireless/core.h 2009-10-20 15:02:15.000000000 +0900 >> +++ wireless-testing/net/wireless/core.h 2009-10-20 15:03:20.000000000 +0900 >> @@ -358,6 +358,7 @@ int cfg80211_mgd_wext_connect(struct cfg >> struct wireless_dev *wdev); >> >> void cfg80211_conn_work(struct work_struct *work); >> +void cfg80211_sme_failed_assoc(struct wireless_dev *wdev); >> bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev); >> >> /* internal helpers */ >> --- wireless-testing.orig/net/wireless/mlme.c 2009-10-20 15:02:15.000000000 +0900 >> +++ wireless-testing/net/wireless/mlme.c 2009-10-20 15:03:20.000000000 +0900 >> @@ -62,6 +62,7 @@ void cfg80211_send_rx_assoc(struct net_d >> u8 *ie = mgmt->u.assoc_resp.variable; >> int i, ieoffs = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); >> struct cfg80211_internal_bss *bss = NULL; >> + bool need_connect_result = true; >> >> wdev_lock(wdev); >> >> @@ -94,6 +95,14 @@ void cfg80211_send_rx_assoc(struct net_d >> } >> >> WARN_ON(!bss); >> + } else if (wdev->conn) { >> + cfg80211_sme_failed_assoc(wdev); >> + need_connect_result = false; >> + /* >> + * do not call connect_result() now because the >> + * sme will schedule work that does it later. >> + */ >> + goto out; >> } >> >> if (!wdev->conn && wdev->sme_state == CFG80211_SME_IDLE) { >> --- wireless-testing.orig/net/wireless/sme.c 2009-10-20 15:02:15.000000000 +0900 >> +++ wireless-testing/net/wireless/sme.c 2009-10-20 15:03:20.000000000 +0900 >> @@ -26,6 +26,7 @@ struct cfg80211_conn { >> CFG80211_CONN_AUTHENTICATING, >> CFG80211_CONN_ASSOCIATE_NEXT, >> CFG80211_CONN_ASSOCIATING, >> + CFG80211_CONN_DEAUTH_ASSOC_FAIL, >> } state; >> u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; >> u8 *ie; >> @@ -148,6 +149,12 @@ static int cfg80211_conn_do_work(struct >> NULL, 0, >> WLAN_REASON_DEAUTH_LEAVING); >> return err; >> + case CFG80211_CONN_DEAUTH_ASSOC_FAIL: >> + __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, >> + NULL, 0, >> + WLAN_REASON_DEAUTH_LEAVING); >> + /* return an error so that we call __cfg80211_connect_result() */ >> + return -EINVAL; >> default: >> return 0; >> } >> @@ -158,6 +165,7 @@ void cfg80211_conn_work(struct work_stru >> struct cfg80211_registered_device *rdev = >> container_of(work, struct cfg80211_registered_device, conn_work); >> struct wireless_dev *wdev; >> + u8 bssid[ETH_ALEN]; >> >> rtnl_lock(); >> cfg80211_lock_rdev(rdev); >> @@ -173,10 +181,10 @@ void cfg80211_conn_work(struct work_stru >> wdev_unlock(wdev); >> continue; >> } >> + memcpy(bssid, wdev->conn->params.bssid, ETH_ALEN); >> if (cfg80211_conn_do_work(wdev)) >> __cfg80211_connect_result( >> - wdev->netdev, >> - wdev->conn->params.bssid, >> + wdev->netdev, bssid, >> NULL, 0, NULL, 0, >> WLAN_STATUS_UNSPECIFIED_FAILURE, >> false, NULL); >> @@ -337,6 +345,15 @@ bool cfg80211_sme_failed_reassoc(struct >> return true; >> } >> >> +void cfg80211_sme_failed_assoc(struct wireless_dev *wdev) >> +{ >> + struct wiphy *wiphy = wdev->wiphy; >> + struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); >> + >> + wdev->conn->state = CFG80211_CONN_DEAUTH_ASSOC_FAIL; >> + schedule_work(&rdev->conn_work); >> +} >> + >> void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, >> const u8 *req_ie, size_t req_ie_len, >> const u8 *resp_ie, size_t resp_ie_len, >> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html