]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/wireless/sme.c
cfg80211: stop tracking authenticated state
[mv-sheeva.git] / net / wireless / sme.c
index 7b9ecaed96bef13aab274b5cd3686dd2487096ac..f7e937ff897893a2dff84efcf9d8a9422aebe3b0 100644 (file)
@@ -179,7 +179,7 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
                                            params->ssid, params->ssid_len,
                                            NULL, 0,
                                            params->key, params->key_len,
-                                           params->key_idx, false);
+                                           params->key_idx);
        case CFG80211_CONN_ASSOCIATE_NEXT:
                BUG_ON(!rdev->ops->assoc);
                wdev->conn->state = CFG80211_CONN_ASSOCIATING;
@@ -477,6 +477,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
                kfree(wdev->connect_keys);
                wdev->connect_keys = NULL;
                wdev->ssid_len = 0;
+               cfg80211_put_bss(bss);
                return;
        }
 
@@ -701,31 +702,10 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
        wdev->ssid_len = 0;
 
        if (wdev->conn) {
-               const u8 *bssid;
-               int ret;
-
                kfree(wdev->conn->ie);
                wdev->conn->ie = NULL;
                kfree(wdev->conn);
                wdev->conn = NULL;
-
-               /*
-                * If this disconnect was due to a disassoc, we
-                * we might still have an auth BSS around. For
-                * the userspace SME that's currently expected,
-                * but for the kernel SME (nl80211 CONNECT or
-                * wireless extensions) we want to clear up all
-                * state.
-                */
-               for (i = 0; i < MAX_AUTH_BSSES; i++) {
-                       if (!wdev->auth_bsses[i])
-                               continue;
-                       bssid = wdev->auth_bsses[i]->pub.bssid;
-                       ret = __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0,
-                                               WLAN_REASON_DEAUTH_LEAVING,
-                                               false);
-                       WARN(ret, "deauth failed: %d\n", ret);
-               }
        }
 
        nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap);
@@ -1012,7 +992,8 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
        return err;
 }
 
-void cfg80211_sme_disassoc(struct net_device *dev, int idx)
+void cfg80211_sme_disassoc(struct net_device *dev,
+                          struct cfg80211_internal_bss *bss)
 {
        struct wireless_dev *wdev = dev->ieee80211_ptr;
        struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
@@ -1031,16 +1012,8 @@ void cfg80211_sme_disassoc(struct net_device *dev, int idx)
         * want it any more so deauthenticate too.
         */
 
-       if (!wdev->auth_bsses[idx])
-               return;
+       memcpy(bssid, bss->pub.bssid, ETH_ALEN);
 
-       memcpy(bssid, wdev->auth_bsses[idx]->pub.bssid, ETH_ALEN);
-       if (__cfg80211_mlme_deauth(rdev, dev, bssid,
-                                  NULL, 0, WLAN_REASON_DEAUTH_LEAVING,
-                                  false)) {
-               /* whatever -- assume gone anyway */
-               cfg80211_unhold_bss(wdev->auth_bsses[idx]);
-               cfg80211_put_bss(&wdev->auth_bsses[idx]->pub);
-               wdev->auth_bsses[idx] = NULL;
-       }
+       __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0,
+                              WLAN_REASON_DEAUTH_LEAVING, false);
 }