aboutsummaryrefslogtreecommitdiffstats
path: root/src/ap/beacon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ap/beacon.c')
-rw-r--r--src/ap/beacon.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 38182ae..233320d 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -600,7 +600,7 @@ void sta_track_expire(struct hostapd_iface *iface, int force)
MAC2STR(info->addr));
dl_list_del(&info->list);
iface->num_sta_seen--;
- os_free(info);
+ sta_track_del(info);
}
}
@@ -676,6 +676,23 @@ sta_track_seen_on(struct hostapd_iface *iface, const u8 *addr,
}
+#ifdef CONFIG_TAXONOMY
+void sta_track_claim_taxonomy_info(struct hostapd_iface *iface, const u8 *addr,
+ struct wpabuf **probe_ie_taxonomy)
+{
+ struct hostapd_sta_info *info;
+
+ info = sta_track_get(iface, addr);
+ if (!info)
+ return;
+
+ wpabuf_free(*probe_ie_taxonomy);
+ *probe_ie_taxonomy = info->probe_ie_taxonomy;
+ info->probe_ie_taxonomy = NULL;
+}
+#endif /* CONFIG_TAXONOMY */
+
+
void handle_probe_req(struct hostapd_data *hapd,
const struct ieee80211_mgmt *mgmt, size_t len,
int ssi_signal)
@@ -787,9 +804,16 @@ void handle_probe_req(struct hostapd_data *hapd,
#ifdef CONFIG_TAXONOMY
{
- struct sta_info *sta = ap_get_sta(hapd, mgmt->sa);
- if (sta)
+ struct sta_info *sta;
+ struct hostapd_sta_info *info;
+
+ if ((sta = ap_get_sta(hapd, mgmt->sa)) != NULL) {
taxonomy_sta_info_probe_req(hapd, sta, ie, ie_len);
+ } else if ((info = sta_track_get(hapd->iface,
+ mgmt->sa)) != NULL) {
+ taxonomy_hostapd_sta_info_probe_req(hapd, info,
+ ie, ie_len);
+ }
}
#endif /* CONFIG_TAXONOMY */
@@ -961,6 +985,16 @@ static u8 * hostapd_probe_resp_offloads(struct hostapd_data *hapd,
#endif /* NEED_AP_MLME */
+void sta_track_del(struct hostapd_sta_info *info)
+{
+#ifdef CONFIG_TAXONOMY
+ wpabuf_free(info->probe_ie_taxonomy);
+ info->probe_ie_taxonomy = NULL;
+#endif /* CONFIG_TAXONOMY */
+ os_free(info);
+}
+
+
int ieee802_11_build_ap_params(struct hostapd_data *hapd,
struct wpa_driver_ap_params *params)
{