diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-01-20 16:55:22 +0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-02-06 23:48:25 +0400 |
commit | a4ec45a421b80bc36fd37578accf081f32527a7f (patch) | |
tree | 2eed7b4fbdece2358be059773b010b6acc3806b0 /net/mac80211/sta_info.c | |
parent | f09603a259ffef69ad4516a04eb06cd65ac522fe (diff) | |
download | linux-a4ec45a421b80bc36fd37578accf081f32527a7f.tar.xz |
mac80211: implement sta_add/sta_remove in sta_state
Instead of maintaining separate sta_add/sta_remove
callsites, implement it in sta_state when the driver
has no sta_state implementation.
The only behavioural change this should cause is in
secure mesh mode: with this the station entries will
only be created after the stations are set to AUTH.
Given which drivers support mesh, this seems to not
be a problem.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r-- | net/mac80211/sta_info.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index fcd9027c6699..5e577bd0e6aa 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -365,7 +365,12 @@ static int sta_info_insert_drv_state(struct ieee80211_local *local, } if (!err) { - sta->uploaded = true; + /* + * Drivers using legacy sta_add/sta_remove callbacks only + * get uploaded set to true after sta_add is called. + */ + if (!local->ops->sta_add) + sta->uploaded = true; return 0; } @@ -417,18 +422,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU) if (!sta->dummy || dummy_reinsert) { /* notify driver */ - err = drv_sta_add(local, sdata, &sta->sta); - if (err) { - if (sdata->vif.type != NL80211_IFTYPE_ADHOC) - goto out_err; - printk(KERN_DEBUG "%s: failed to add IBSS STA %pM to " - "driver (%d) - keeping it anyway.\n", - sdata->name, sta->sta.addr, err); - } else { - err = sta_info_insert_drv_state(local, sdata, sta); - if (err) - goto out_err; - } + err = sta_info_insert_drv_state(local, sdata, sta); + if (err) + goto out_err; } if (!dummy_reinsert) { @@ -802,7 +798,6 @@ int __must_check __sta_info_destroy(struct sta_info *sta) } if (sta->uploaded) { - drv_sta_remove(local, sdata, &sta->sta); ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE, IEEE80211_STA_NOTEXIST); WARN_ON_ONCE(ret != 0); |