This patch adds signal level information to the station tracking information. It also makes it available via the "TRACK_STA_LIST" control command. Change-Id: I015f02d614d7974f9803249c3525202b49059dcc Signed-off-by: Kevin Mahoney <k.mahoney@xxxxxxxxxxxxx> --- hostapd/ctrl_iface.c | 4 ++-- src/ap/beacon.c | 6 ++++-- src/ap/beacon.h | 2 +- src/ap/hostapd.h | 1 + src/ap/ieee802_11.c | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c index d563831..a458045 100644 --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c @@ -2083,8 +2083,8 @@ 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..ab50f0b 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..904de1d 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 4e04169..e867613 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -2672,7 +2672,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: -- 2.7.4 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap