mac80211: simplify AP_VLAN handling
authorJohannes Berg <johannes.berg@intel.com>
Fri, 20 Jan 2012 12:55:18 +0000 (13:55 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 6 Feb 2012 19:48:24 +0000 (14:48 -0500)
Setting keys and updating TKIP keys must use the
BSS sdata (not AP_VLAN), so we translate. Move
the translation into driver-ops wrappers instead
of having it inline in the code to simplify the
normal code flow.

The same can be done for sta_add/remove which
already does the translation in the wrapper.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/driver-ops.h
net/mac80211/key.c
net/mac80211/pm.c
net/mac80211/sta_info.c
net/mac80211/util.c

index e8960ae..b8673f6 100644 (file)
@@ -253,6 +253,7 @@ static inline int drv_set_key(struct ieee80211_local *local,
 
        might_sleep();
 
+       sdata = get_bss_sdata(sdata);
        check_sdata_in_driver(sdata);
 
        trace_drv_set_key(local, cmd, sdata, sta, key);
@@ -272,6 +273,7 @@ static inline void drv_update_tkip_key(struct ieee80211_local *local,
        if (sta)
                ista = &sta->sta;
 
+       sdata = get_bss_sdata(sdata);
        check_sdata_in_driver(sdata);
 
        trace_drv_update_tkip_key(local, sdata, conf, ista, iv32);
index 87a8974..94f02b5 100644 (file)
@@ -123,9 +123,6 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
                 */
                if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE))
                        goto out_unsupported;
-               sdata = container_of(sdata->bss,
-                                    struct ieee80211_sub_if_data,
-                                    u.ap);
        }
 
        ret = drv_set_key(key->local, SET_KEY, sdata, sta, &key->conf);
@@ -187,11 +184,6 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
              (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
                increment_tailroom_need_count(sdata);
 
-       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-               sdata = container_of(sdata->bss,
-                                    struct ieee80211_sub_if_data,
-                                    u.ap);
-
        ret = drv_set_key(key->local, DISABLE_KEY, sdata,
                          sta, &key->conf);
 
index 596efaf..c65ff47 100644 (file)
@@ -97,15 +97,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
        /* tear down aggregation sessions and remove STAs */
        mutex_lock(&local->sta_mtx);
        list_for_each_entry(sta, &local->sta_list, list) {
-               if (sta->uploaded) {
-                       sdata = sta->sdata;
-                       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                               sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
-
-                       drv_sta_remove(local, sdata, &sta->sta);
-               }
+               if (sta->uploaded)
+                       drv_sta_remove(local, sta->sdata, &sta->sta);
 
                mesh_plink_quiesce(sta);
        }
index fa08238..8e1e361 100644 (file)
@@ -764,14 +764,8 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
                }
        }
 
-       if (sta->uploaded) {
-               if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                       sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
+       if (sta->uploaded)
                drv_sta_remove(local, sdata, &sta->sta);
-               sdata = sta->sdata;
-       }
 
        /*
         * At this point, after we wait for an RCU grace period,
index d82d886..d4966e8 100644 (file)
@@ -1184,15 +1184,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
        /* add STAs back */
        mutex_lock(&local->sta_mtx);
        list_for_each_entry(sta, &local->sta_list, list) {
-               if (sta->uploaded) {
-                       sdata = sta->sdata;
-                       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                               sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
-
-                       WARN_ON(drv_sta_add(local, sdata, &sta->sta));
-               }
+               if (sta->uploaded)
+                       WARN_ON(drv_sta_add(local, sta->sdata, &sta->sta));
        }
        mutex_unlock(&local->sta_mtx);