diff options
-rw-r--r-- | net/mac80211/mlme.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index b61a7819867e..54a2a1db98a3 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1951,16 +1951,13 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, | |||
1951 | directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, | 1951 | directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, |
1952 | ifmgd->aid); | 1952 | ifmgd->aid); |
1953 | 1953 | ||
1954 | ncrc = crc32_be(ncrc, (void *)&directed_tim, sizeof(directed_tim)); | 1954 | if (ncrc != ifmgd->beacon_crc) { |
1955 | ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, | ||
1956 | true); | ||
1955 | 1957 | ||
1956 | if (ncrc == ifmgd->beacon_crc) | 1958 | ieee80211_sta_wmm_params(local, ifmgd, elems.wmm_param, |
1957 | return; | 1959 | elems.wmm_param_len); |
1958 | ifmgd->beacon_crc = ncrc; | 1960 | } |
1959 | |||
1960 | ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, true); | ||
1961 | |||
1962 | ieee80211_sta_wmm_params(local, ifmgd, elems.wmm_param, | ||
1963 | elems.wmm_param_len); | ||
1964 | 1961 | ||
1965 | if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { | 1962 | if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { |
1966 | if (directed_tim) { | 1963 | if (directed_tim) { |
@@ -1985,6 +1982,10 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, | |||
1985 | } | 1982 | } |
1986 | } | 1983 | } |
1987 | 1984 | ||
1985 | if (ncrc == ifmgd->beacon_crc) | ||
1986 | return; | ||
1987 | ifmgd->beacon_crc = ncrc; | ||
1988 | |||
1988 | if (elems.erp_info && elems.erp_info_len >= 1) { | 1989 | if (elems.erp_info && elems.erp_info_len >= 1) { |
1989 | erp_valid = true; | 1990 | erp_valid = true; |
1990 | erp_value = elems.erp_info[0]; | 1991 | erp_value = elems.erp_info[0]; |