aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Mahoney <k.mahoney@cablelabs.com>2016-10-18 22:07:13 (GMT)
committerJouni Malinen <j@w1.fi>2016-10-28 21:55:49 (GMT)
commita818425d1ca23f25f3752d81a53ec64a43728890 (patch)
tree381fc2125932e1146898e338e502706a4f887e72
parenta1047f55b8a56bddf46c064c9e328fe3e30321b3 (diff)
downloadhostap-a818425d1ca23f25f3752d81a53ec64a43728890.zip
hostap-a818425d1ca23f25f3752d81a53ec64a43728890.tar.gz
hostap-a818425d1ca23f25f3752d81a53ec64a43728890.tar.bz2
hostapd: Added signal level to STA tracking
Add signal level information to the station tracking information. Also make it available via the "TRACK_STA_LIST" control command. Signed-off-by: Kevin Mahoney <k.mahoney@cablelabs.com>
-rw-r--r--hostapd/ctrl_iface.c5
-rw-r--r--src/ap/beacon.c6
-rw-r--r--src/ap/beacon.h2
-rw-r--r--src/ap/hostapd.h1
-rw-r--r--src/ap/ieee802_11.c2
5 files changed, 10 insertions, 6 deletions
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index dadc4b7..68751de 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -2083,8 +2083,9 @@ static int hostapd_ctrl_iface_track_sta_list(struct hostapd_data *hapd,
int ret;
os_reltime_sub(&now, &info->last_seen, &age);
- ret = os_snprintf(pos, end - pos, MACSTR " %u\n",
- MAC2STR(info->addr), (unsigned int) age.sec);
+ ret = os_snprintf(pos, end - pos, MACSTR " %u %d\n",
+ MAC2STR(info->addr), (unsigned int) age.sec,
+ info->ssi_signal);
if (os_snprintf_error(end - pos, ret))
break;
pos += ret;
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 474ff59..811bede 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -623,7 +623,7 @@ static struct hostapd_sta_info * sta_track_get(struct hostapd_iface *iface,
}
-void sta_track_add(struct hostapd_iface *iface, const u8 *addr)
+void sta_track_add(struct hostapd_iface *iface, const u8 *addr, int ssi_signal)
{
struct hostapd_sta_info *info;
@@ -633,6 +633,7 @@ void sta_track_add(struct hostapd_iface *iface, const u8 *addr)
dl_list_del(&info->list);
dl_list_add_tail(&iface->sta_seen, &info->list);
os_get_reltime(&info->last_seen);
+ info->ssi_signal = ssi_signal;
return;
}
@@ -642,6 +643,7 @@ void sta_track_add(struct hostapd_iface *iface, const u8 *addr)
return;
os_memcpy(info->addr, addr, ETH_ALEN);
os_get_reltime(&info->last_seen);
+ info->ssi_signal = ssi_signal;
if (iface->num_sta_seen >= iface->conf->track_sta_max_num) {
/* Expire oldest entry to make room for a new one */
@@ -717,7 +719,7 @@ void handle_probe_req(struct hostapd_data *hapd,
return;
ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN;
if (hapd->iconf->track_sta_max_num)
- sta_track_add(hapd->iface, mgmt->sa);
+ sta_track_add(hapd->iface, mgmt->sa, ssi_signal);
ie_len = len - IEEE80211_HDRLEN;
for (i = 0; hapd->probereq_cb && i < hapd->num_probereq_cb; i++)
diff --git a/src/ap/beacon.h b/src/ap/beacon.h
index fc71181..a26e308 100644
--- a/src/ap/beacon.h
+++ b/src/ap/beacon.h
@@ -21,7 +21,7 @@ int ieee802_11_update_beacons(struct hostapd_iface *iface);
int ieee802_11_build_ap_params(struct hostapd_data *hapd,
struct wpa_driver_ap_params *params);
void ieee802_11_free_ap_params(struct wpa_driver_ap_params *params);
-void sta_track_add(struct hostapd_iface *iface, const u8 *addr);
+void sta_track_add(struct hostapd_iface *iface, const u8 *addr, int ssi_signal);
void sta_track_del(struct hostapd_sta_info *info);
void sta_track_expire(struct hostapd_iface *iface, int force);
struct hostapd_data *
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index dec46f6..919b185 100644
--- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h
@@ -311,6 +311,7 @@ struct hostapd_sta_info {
struct dl_list list;
u8 addr[ETH_ALEN];
struct os_reltime last_seen;
+ int ssi_signal;
#ifdef CONFIG_TAXONOMY
struct wpabuf *probe_ie_taxonomy;
#endif /* CONFIG_TAXONOMY */
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
index 4aa1f7f..f7659e7 100644
--- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c
@@ -3029,7 +3029,7 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
}
if (hapd->iconf->track_sta_max_num)
- sta_track_add(hapd->iface, mgmt->sa);
+ sta_track_add(hapd->iface, mgmt->sa, fi->ssi_signal);
switch (stype) {
case WLAN_FC_STYPE_AUTH: