OSDN Git Service

rt2x00: Correctly initialize AID during set_key()
authorIvo van Doorn <ivdoorn@gmail.com>
Wed, 3 Dec 2008 16:30:22 +0000 (17:30 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 5 Dec 2008 14:35:57 +0000 (09:35 -0500)
Request the AID from hardware and provide this id
to the driver (in case they need it).

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2x00mac.c

index dded680..38edee5 100644 (file)
@@ -487,6 +487,7 @@ int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                      struct ieee80211_key_conf *key)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
+       struct ieee80211_sta *sta;
        int (*set_key) (struct rt2x00_dev *rt2x00dev,
                        struct rt2x00lib_crypto *crypto,
                        struct ieee80211_key_conf *key);
@@ -537,6 +538,17 @@ int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                memcpy(&crypto.key, &key->key[0], key->keylen);
 
        /*
+        * Discover the Association ID from mac80211.
+        * Some drivers need this information when updating the
+        * hardware key (either adding or removing).
+        */
+       rcu_read_lock();
+       sta = ieee80211_find_sta(hw, address);
+       if (sta)
+               crypto.aid = sta->aid;
+       rcu_read_unlock();
+
+       /*
         * Each BSS has a maximum of 4 shared keys.
         * Shared key index values:
         *      0) BSS0 key0