nl80211: Use beacon TSF if it is newer than Probe Response TSF
cfg80211 sends TSF information with the attribute NL80211_BSS_BEACON_TSF if the scan results include information from Beacon frame. Probe Response frame information is included in NL80211_BSS_TSF. If the device receives only Beacon frames, NL80211_BSS_TSF might not carry updated TSF, which results an older TSF being used in wpa_supplicant. Fetch both possible TSF values (if available) and choose the latest TSF for the BSS entry. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
708ec753bc
commit
75055a538b
1 changed files with 5 additions and 0 deletions
|
@ -586,6 +586,11 @@ int bss_info_handler(struct nl_msg *msg, void *arg)
|
||||||
r->flags |= WPA_SCAN_LEVEL_INVALID | WPA_SCAN_QUAL_INVALID;
|
r->flags |= WPA_SCAN_LEVEL_INVALID | WPA_SCAN_QUAL_INVALID;
|
||||||
if (bss[NL80211_BSS_TSF])
|
if (bss[NL80211_BSS_TSF])
|
||||||
r->tsf = nla_get_u64(bss[NL80211_BSS_TSF]);
|
r->tsf = nla_get_u64(bss[NL80211_BSS_TSF]);
|
||||||
|
if (bss[NL80211_BSS_BEACON_TSF]) {
|
||||||
|
u64 tsf = nla_get_u64(bss[NL80211_BSS_BEACON_TSF]);
|
||||||
|
if (tsf > r->tsf)
|
||||||
|
r->tsf = tsf;
|
||||||
|
}
|
||||||
if (bss[NL80211_BSS_SEEN_MS_AGO])
|
if (bss[NL80211_BSS_SEEN_MS_AGO])
|
||||||
r->age = nla_get_u32(bss[NL80211_BSS_SEEN_MS_AGO]);
|
r->age = nla_get_u32(bss[NL80211_BSS_SEEN_MS_AGO]);
|
||||||
r->ie_len = ie_len;
|
r->ie_len = ie_len;
|
||||||
|
|
Loading…
Reference in a new issue