diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-02-21 15:06:35 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-02-21 15:06:35 -0500 |
commit | a9802d43f205faa2fff422502a1336a50b9615c3 (patch) | |
tree | 57152d6c84556320570802d01bbe04cefd8a2a7d /net/wireless/sme.c | |
parent | 0b0a635f79f91f3755b6518627ea06dd0dbfd523 (diff) | |
parent | ca994a36f585432458ead9133fcfe05440edbb7b (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'net/wireless/sme.c')
-rw-r--r-- | net/wireless/sme.c | 41 |
1 files changed, 7 insertions, 34 deletions
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 7b9ecaed96be..f7e937ff8978 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -179,7 +179,7 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev) | |||
179 | params->ssid, params->ssid_len, | 179 | params->ssid, params->ssid_len, |
180 | NULL, 0, | 180 | NULL, 0, |
181 | params->key, params->key_len, | 181 | params->key, params->key_len, |
182 | params->key_idx, false); | 182 | params->key_idx); |
183 | case CFG80211_CONN_ASSOCIATE_NEXT: | 183 | case CFG80211_CONN_ASSOCIATE_NEXT: |
184 | BUG_ON(!rdev->ops->assoc); | 184 | BUG_ON(!rdev->ops->assoc); |
185 | wdev->conn->state = CFG80211_CONN_ASSOCIATING; | 185 | wdev->conn->state = CFG80211_CONN_ASSOCIATING; |
@@ -477,6 +477,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
477 | kfree(wdev->connect_keys); | 477 | kfree(wdev->connect_keys); |
478 | wdev->connect_keys = NULL; | 478 | wdev->connect_keys = NULL; |
479 | wdev->ssid_len = 0; | 479 | wdev->ssid_len = 0; |
480 | cfg80211_put_bss(bss); | ||
480 | return; | 481 | return; |
481 | } | 482 | } |
482 | 483 | ||
@@ -701,31 +702,10 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, | |||
701 | wdev->ssid_len = 0; | 702 | wdev->ssid_len = 0; |
702 | 703 | ||
703 | if (wdev->conn) { | 704 | if (wdev->conn) { |
704 | const u8 *bssid; | ||
705 | int ret; | ||
706 | |||
707 | kfree(wdev->conn->ie); | 705 | kfree(wdev->conn->ie); |
708 | wdev->conn->ie = NULL; | 706 | wdev->conn->ie = NULL; |
709 | kfree(wdev->conn); | 707 | kfree(wdev->conn); |
710 | wdev->conn = NULL; | 708 | wdev->conn = NULL; |
711 | |||
712 | /* | ||
713 | * If this disconnect was due to a disassoc, we | ||
714 | * we might still have an auth BSS around. For | ||
715 | * the userspace SME that's currently expected, | ||
716 | * but for the kernel SME (nl80211 CONNECT or | ||
717 | * wireless extensions) we want to clear up all | ||
718 | * state. | ||
719 | */ | ||
720 | for (i = 0; i < MAX_AUTH_BSSES; i++) { | ||
721 | if (!wdev->auth_bsses[i]) | ||
722 | continue; | ||
723 | bssid = wdev->auth_bsses[i]->pub.bssid; | ||
724 | ret = __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0, | ||
725 | WLAN_REASON_DEAUTH_LEAVING, | ||
726 | false); | ||
727 | WARN(ret, "deauth failed: %d\n", ret); | ||
728 | } | ||
729 | } | 709 | } |
730 | 710 | ||
731 | nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap); | 711 | nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap); |
@@ -1012,7 +992,8 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev, | |||
1012 | return err; | 992 | return err; |
1013 | } | 993 | } |
1014 | 994 | ||
1015 | void cfg80211_sme_disassoc(struct net_device *dev, int idx) | 995 | void cfg80211_sme_disassoc(struct net_device *dev, |
996 | struct cfg80211_internal_bss *bss) | ||
1016 | { | 997 | { |
1017 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 998 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
1018 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); | 999 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); |
@@ -1031,16 +1012,8 @@ void cfg80211_sme_disassoc(struct net_device *dev, int idx) | |||
1031 | * want it any more so deauthenticate too. | 1012 | * want it any more so deauthenticate too. |
1032 | */ | 1013 | */ |
1033 | 1014 | ||
1034 | if (!wdev->auth_bsses[idx]) | 1015 | memcpy(bssid, bss->pub.bssid, ETH_ALEN); |
1035 | return; | ||
1036 | 1016 | ||
1037 | memcpy(bssid, wdev->auth_bsses[idx]->pub.bssid, ETH_ALEN); | 1017 | __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0, |
1038 | if (__cfg80211_mlme_deauth(rdev, dev, bssid, | 1018 | WLAN_REASON_DEAUTH_LEAVING, false); |
1039 | NULL, 0, WLAN_REASON_DEAUTH_LEAVING, | ||
1040 | false)) { | ||
1041 | /* whatever -- assume gone anyway */ | ||
1042 | cfg80211_unhold_bss(wdev->auth_bsses[idx]); | ||
1043 | cfg80211_put_bss(&wdev->auth_bsses[idx]->pub); | ||
1044 | wdev->auth_bsses[idx] = NULL; | ||
1045 | } | ||
1046 | } | 1019 | } |