aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/scan.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-02-05 10:54:31 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-02-11 12:44:59 -0500
commit8cef2c9df88fdd13f518e6607de9d664b31f26cc (patch)
treef8a4d29db6012ad3468a5d9435562fc1f383209a /net/wireless/scan.c
parent83c7aa1a1475ae1c42640ab6e4559016142efc67 (diff)
cfg80211: move TSF into IEs
While technically the TSF isn't an IE, it can be necessary to distinguish between the TSF from a beacon and a probe response, in particular in order to know the next DTIM TBTT, as not all APs are spec compliant wrt. TSF==0 being a DTIM TBTT and thus the DTIM count needs to be taken into account as well. To allow this, move the TSF into the IE struct so it can be known whence it came. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/scan.c')
-rw-r--r--net/wireless/scan.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 02a238329c83..b7a167984986 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -695,7 +695,6 @@ cfg80211_bss_update(struct cfg80211_registered_device *dev,
695 695
696 if (found) { 696 if (found) {
697 found->pub.beacon_interval = tmp->pub.beacon_interval; 697 found->pub.beacon_interval = tmp->pub.beacon_interval;
698 found->pub.tsf = tmp->pub.tsf;
699 found->pub.signal = tmp->pub.signal; 698 found->pub.signal = tmp->pub.signal;
700 found->pub.capability = tmp->pub.capability; 699 found->pub.capability = tmp->pub.capability;
701 found->ts = tmp->ts; 700 found->ts = tmp->ts;
@@ -880,7 +879,6 @@ cfg80211_inform_bss(struct wiphy *wiphy,
880 memcpy(tmp.pub.bssid, bssid, ETH_ALEN); 879 memcpy(tmp.pub.bssid, bssid, ETH_ALEN);
881 tmp.pub.channel = channel; 880 tmp.pub.channel = channel;
882 tmp.pub.signal = signal; 881 tmp.pub.signal = signal;
883 tmp.pub.tsf = tsf;
884 tmp.pub.beacon_interval = beacon_interval; 882 tmp.pub.beacon_interval = beacon_interval;
885 tmp.pub.capability = capability; 883 tmp.pub.capability = capability;
886 /* 884 /*
@@ -895,6 +893,7 @@ cfg80211_inform_bss(struct wiphy *wiphy,
895 if (!ies) 893 if (!ies)
896 return NULL; 894 return NULL;
897 ies->len = ielen; 895 ies->len = ielen;
896 ies->tsf = tsf;
898 memcpy(ies->data, ie, ielen); 897 memcpy(ies->data, ie, ielen);
899 898
900 rcu_assign_pointer(tmp.pub.beacon_ies, ies); 899 rcu_assign_pointer(tmp.pub.beacon_ies, ies);
@@ -951,6 +950,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
951 if (!ies) 950 if (!ies)
952 return NULL; 951 return NULL;
953 ies->len = ielen; 952 ies->len = ielen;
953 ies->tsf = le64_to_cpu(mgmt->u.probe_resp.timestamp);
954 memcpy(ies->data, mgmt->u.probe_resp.variable, ielen); 954 memcpy(ies->data, mgmt->u.probe_resp.variable, ielen);
955 955
956 if (ieee80211_is_probe_resp(mgmt->frame_control)) 956 if (ieee80211_is_probe_resp(mgmt->frame_control))
@@ -962,7 +962,6 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
962 memcpy(tmp.pub.bssid, mgmt->bssid, ETH_ALEN); 962 memcpy(tmp.pub.bssid, mgmt->bssid, ETH_ALEN);
963 tmp.pub.channel = channel; 963 tmp.pub.channel = channel;
964 tmp.pub.signal = signal; 964 tmp.pub.signal = signal;
965 tmp.pub.tsf = le64_to_cpu(mgmt->u.probe_resp.timestamp);
966 tmp.pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int); 965 tmp.pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int);
967 tmp.pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info); 966 tmp.pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info);
968 967
@@ -1409,7 +1408,7 @@ ieee80211_bss(struct wiphy *wiphy, struct iw_request_info *info,
1409 if (buf) { 1408 if (buf) {
1410 memset(&iwe, 0, sizeof(iwe)); 1409 memset(&iwe, 0, sizeof(iwe));
1411 iwe.cmd = IWEVCUSTOM; 1410 iwe.cmd = IWEVCUSTOM;
1412 sprintf(buf, "tsf=%016llx", (unsigned long long)(bss->pub.tsf)); 1411 sprintf(buf, "tsf=%016llx", (unsigned long long)(ies->tsf));
1413 iwe.u.data.length = strlen(buf); 1412 iwe.u.data.length = strlen(buf);
1414 current_ev = iwe_stream_add_point(info, current_ev, end_buf, 1413 current_ev = iwe_stream_add_point(info, current_ev, end_buf,
1415 &iwe, buf); 1414 &iwe, buf);