Skip to content

Commit

Permalink
mac80211: add stations after AP start on reconfig
Browse files Browse the repository at this point in the history
When performing a HW restart for an AP mode interface, add stations back
only after the AP is beaconing. This mimics the normal flow of STA
addition on AP.

Some devices (wlcore) do not support adding stations before beaconing,
so this has the added benefit of making recovery work for them.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Arik Nemtsov authored and John W. Linville committed Jun 6, 2012
1 parent 2b0446c commit 2e8d397
Showing 1 changed file with 30 additions and 7 deletions.
37 changes: 30 additions & 7 deletions net/mac80211/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -1279,14 +1279,19 @@ 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) {
enum ieee80211_sta_state state;
enum ieee80211_sta_state state;

for (state = IEEE80211_STA_NOTEXIST;
state < sta->sta_state; state++)
WARN_ON(drv_sta_state(local, sta->sdata, sta,
state, state + 1));
}
if (!sta->uploaded)
continue;

/* AP-mode stations will be added later */
if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
continue;

for (state = IEEE80211_STA_NOTEXIST;
state < sta->sta_state; state++)
WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
state + 1));
}
mutex_unlock(&local->sta_mtx);

Expand Down Expand Up @@ -1383,6 +1388,24 @@ int ieee80211_reconfig(struct ieee80211_local *local)
}
}

/* APs are now beaconing, add back stations */
mutex_lock(&local->sta_mtx);
list_for_each_entry(sta, &local->sta_list, list) {
enum ieee80211_sta_state state;

if (!sta->uploaded)
continue;

if (sta->sdata->vif.type != NL80211_IFTYPE_AP)
continue;

for (state = IEEE80211_STA_NOTEXIST;
state < sta->sta_state; state++)
WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
state + 1));
}
mutex_unlock(&local->sta_mtx);

/* add back keys */
list_for_each_entry(sdata, &local->interfaces, list)
if (ieee80211_sdata_running(sdata))
Expand Down

0 comments on commit 2e8d397

Please sign in to comment.