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>
This commit is contained in:
parent
146bb4839a
commit
87f59c70ce
@ -420,7 +420,6 @@ __mesh_sta_info_alloc(struct ieee80211_sub_if_data *sdata, u8 *hw_addr)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
sta->plink_state = NL80211_PLINK_LISTEN;
|
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_AUTH);
|
||||||
sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC);
|
sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC);
|
||||||
|
@ -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->drv_unblock_wk, sta_unblock);
|
||||||
INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
||||||
mutex_init(&sta->ampdu_mlme.mtx);
|
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);
|
memcpy(sta->sta.addr, addr, ETH_ALEN);
|
||||||
sta->local = local;
|
sta->local = local;
|
||||||
|
Loading…
Reference in New Issue
Block a user