diff options
author | Thomas Pedersen <thomas@cozybit.com> | 2013-03-01 22:02:52 -0800 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-06 16:36:14 +0100 |
commit | 87f59c70ce6d1abeaaf97594835be29f746b81a0 (patch) | |
tree | d153c1be17229f9390948064a5ac965624ec3c8a | |
parent | 146bb4839adfd5637beb6daa01aa94f342de5eab (diff) | |
download | op-kernel-dev-87f59c70ce6d1abeaaf97594835be29f746b81a0.zip op-kernel-dev-87f59c70ce6d1abeaaf97594835be29f746b81a0.tar.gz |
mac80211: init mesh timer for user authed STAs
There is a corner case which wasn't being covered:
userspace may authenticate and allocate stations,
but still leave the peering up to the kernel.
Initialize the peering timer if the MPM is not in
userspace, in a path which is taken by both the kernel and
userspace when allocating stations.
Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/mac80211/mesh_plink.c | 1 | ||||
-rw-r--r-- | net/mac80211/sta_info.c | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index e259951..937e06f 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c @@ -420,7 +420,6 @@ __mesh_sta_info_alloc(struct ieee80211_sub_if_data *sdata, u8 *hw_addr) return NULL; sta->plink_state = NL80211_PLINK_LISTEN; - init_timer(&sta->plink_timer); sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 0141e49..3644ad7 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -342,6 +342,11 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, INIT_WORK(&sta->drv_unblock_wk, sta_unblock); INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); mutex_init(&sta->ampdu_mlme.mtx); +#ifdef CONFIG_MAC80211_MESH + if (ieee80211_vif_is_mesh(&sdata->vif) && + !sdata->u.mesh.user_mpm) + init_timer(&sta->plink_timer); +#endif memcpy(sta->sta.addr, addr, ETH_ALEN); sta->local = local; |