mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-14 09:44:35 +08:00
mac80211: IBSS join rework
I hold back this patch for around a week to avoid confusion. This is the second step of "mac80211: Fixed BSSID handling revisited". With it, in the situation of a strange merge to the same BSSID (e.g. caused by a TSF overflow) only reset_tsf() is called. And sta_info_flush_delayed() is only called if you change the network manually, not on an automatic BSSID merge. Signed-off-by: Alina Friedrichsen <x-alina@gmx.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
f2bffa7ea0
commit
c4e3a58448
@ -1503,13 +1503,22 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
|
|||||||
struct ieee80211_bss *bss)
|
struct ieee80211_bss *bss)
|
||||||
{
|
{
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
int res, rates, i, j;
|
int res = 0, rates, i, j;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
struct ieee80211_mgmt *mgmt;
|
struct ieee80211_mgmt *mgmt;
|
||||||
u8 *pos;
|
u8 *pos;
|
||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
union iwreq_data wrqu;
|
union iwreq_data wrqu;
|
||||||
|
|
||||||
|
if (local->ops->reset_tsf) {
|
||||||
|
/* Reset own TSF to allow time synchronization work. */
|
||||||
|
local->ops->reset_tsf(local_to_hw(local));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ifsta->flags & IEEE80211_STA_PREV_BSSID_SET) &&
|
||||||
|
memcmp(ifsta->bssid, bss->bssid, ETH_ALEN) == 0)
|
||||||
|
return res;
|
||||||
|
|
||||||
skb = dev_alloc_skb(local->hw.extra_tx_headroom + 400 +
|
skb = dev_alloc_skb(local->hw.extra_tx_headroom + 400 +
|
||||||
sdata->u.sta.ie_proberesp_len);
|
sdata->u.sta.ie_proberesp_len);
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
@ -1520,13 +1529,11 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
|
|||||||
|
|
||||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||||
|
|
||||||
/* Remove possible STA entries from other IBSS networks. */
|
if (!(ifsta->flags & IEEE80211_STA_PREV_BSSID_SET)) {
|
||||||
sta_info_flush_delayed(sdata);
|
/* Remove possible STA entries from other IBSS networks. */
|
||||||
|
sta_info_flush_delayed(sdata);
|
||||||
if (local->ops->reset_tsf) {
|
|
||||||
/* Reset own TSF to allow time synchronization work. */
|
|
||||||
local->ops->reset_tsf(local_to_hw(local));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ifsta->bssid, bss->bssid, ETH_ALEN);
|
memcpy(ifsta->bssid, bss->bssid, ETH_ALEN);
|
||||||
res = ieee80211_if_config(sdata, IEEE80211_IFCC_BSSID);
|
res = ieee80211_if_config(sdata, IEEE80211_IFCC_BSSID);
|
||||||
if (res)
|
if (res)
|
||||||
|
Loading…
Reference in New Issue
Block a user