nl80211: Use beacon TSF if it is newer than Probe Response TSF
authorSrinivas Dasari <dasaris@qti.qualcomm.com>
Wed, 12 Aug 2015 10:24:54 +0000 (15:54 +0530)
committerJouni Malinen <j@w1.fi>
Thu, 13 Aug 2015 17:58:05 +0000 (20:58 +0300)
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>
src/drivers/driver_nl80211_scan.c

index c37ab49..4b762ea 100644 (file)
@@ -586,6 +586,11 @@ int bss_info_handler(struct nl_msg *msg, void *arg)
                r->flags |= WPA_SCAN_LEVEL_INVALID | WPA_SCAN_QUAL_INVALID;
        if (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])
                r->age = nla_get_u32(bss[NL80211_BSS_SEEN_MS_AGO]);
        r->ie_len = ie_len;